Bagaimana cara mendaftar semua program yang diinstal?

49

Bagaimana cara mendaftar kedua program yang datang dengan distribusi saya dan yang saya instal secara manual?

InquilineKea
sumber
8
Distribusi yang mana? Setiap distribusi memiliki alat pemasangan yang berbeda.
Matteo
Hm, saya tertarik dengan Red Hat, Ubuntu, dan cygwin. Apakah ada cara bebas distribusi untuk mendaftar program dengan beberapa argumen baris perintah?
InquilineKea
1
Tidak, tidak ada, karena manajer paket berbeda.
Chris Down

Jawaban:

72

Itu tergantung pada distribusi Anda.

  • Distribusi berbasis bakat (Ubuntu, Debian, dll): dpkg -l
  • Distribusi berbasis RPM (Fedora, RHEL, dll): rpm -qa
  • distribusi berbasis pkg * (OpenBSD, FreeBSD, dll): pkg_info
  • Distribusi berbasis portage (Gentoo, dll): equery listataueix -I
  • distribusi berbasis pacman (Arch Linux, dll): pacman -Q
  • Cygwin: cygcheck --check-setup --dump-only *
  • Slackware: slapt-get --installed

Semua ini akan menampilkan paket daripada program . Jika Anda benar-benar ingin daftar program, Anda mungkin ingin daftar executable di Anda $PATH, yang dapat dilakukan seperti menggunakan bash's compgen:

compgen -c

Atau, jika Anda tidak memiliki compgen:

#!/bin/bash
IFS=: read -ra dirs_in_path <<< "$PATH"

for dir in "${dirs_in_path[@]}"; do
    for file in "$dir"/*; do
        [[ -x $file && -f $file ]] && printf '%s\n' "${file##*/}"
    done
done
Chris Down
sumber
4
Dan untuk sistem berbasis RPM (Red Hat, SuSE, CentOS, dll.):rpm -qa
nos
1
Debian / Ubuntu adalah dkpg -l | grep ^ii.
Rolf
1
@Rolf, maksudmu dPKg
Harkály Gergő
1
Hrmph ... BSD bukan distribusi Linux ...
Kusalananda
1
@ Kusalananda Huh? Tidak ada jawaban dalam jawaban ini yang mengatakan bahwa BSD adalah distribusi Linux, tetapi mereka adalah distribusi . Itulah arti "D" dalam BSD.
Chris Down
13

Menjawab bagian kedua dari pertanyaan (tidak ada yang benar-benar ditambahkan ke jawaban Chris untuk bagian pertama) :

Umumnya tidak ada cara daftar program yang diinstal secara manual dan komponennya. Ini tidak direkam di mana pun jika Anda tidak menggunakan manajer paket. Yang bisa Anda lakukan adalah menemukan binari di lokasi standar (seperti yang disarankan Chris) dan dengan cara yang sama, tebak dari mana beberapa perpustakaan atau beberapa halaman buku panduan, dll. Berasal. Itu sebabnya, jika memungkinkan, Anda harus selalu menginstal program menggunakan manajer paket Anda .

rozcietrzewiacz
sumber
3

Program harus dapat dijangkau melalui PATH, jadi cukup daftarkan semuanya di jalur:

ls ${PATH//:/ }

Harapkan hasil sekitar 3k-4k program.

Untuk mengecualikan minoritas kemungkinan positif palsu, Anda dapat memperbaiki pendekatan:

for d in ${PATH//:/ } ; do 
    for f in $d/* ; do  
        test -x $f && test -f $f && echo $f
    done
done

Itu tidak membuat perbedaan bagi saya.

Pengguna tidak diketahui
sumber
2
Perhatikan bahwa ini juga berpotensi mencantumkan berbagai non-program juga (subdirektori direktori di $PATH, dll).
Chris Down
1
Saya menambahkan tes, tetapi itu tidak membuat perbedaan bagi saya (seberapa berguna direktori dalam direktori di path, yang tidak dengan sendirinya di path?). Tetapi untuk kasus-kasus, di mana Anda mengandalkan kebenaran, itu mungkin berguna.
pengguna tidak diketahui
1
luar biasa! Saya tidak dapat mengetahui versi Linux (cerita panjang - tapi tidak ada kriminal) tetapi kode ini menyelamatkan hari saya :)
obenjiro
2

Semua jawaban lain (sejauh ini) berhubungan dengan paket dan binari. Jika maksud Anda "aplikasi desktop", yang muncul di menu mulai Anda, Anda dapat mencoba:

ls /usr/share/applications | awk -F '.desktop' ' { print $1}' -

Lebih banyak solusi dalam pertanyaan lain .

Rolf
sumber