Bagaimana cara mendaftar semua program yang diinstal?


49

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


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

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 .


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.


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 .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.