Saya ingin tahu perintah yang ditawarkan paket Debian spesifik kepada saya.
Misalnya katakanlah saya menginstal paket yang disebut x.deb
. Paket ini pasti mengandung beberapa perintah yang bisa saya gunakan.
Cara daftar perintah ini.
Saya tahu saya bisa menggunakan compgen
perintah bash untuk menghasilkan daftar semua perintah yang tersedia di sistem saya, tetapi yang saya butuhkan hanya untuk paket tertentu.
Saya mencoba solusinya:
dpkg -L postgresql-9.3 | egrep '(bin|games)/'
/usr/lib/postgresql/9.3/bin/pg_upgrade
/usr/lib/postgresql/9.3/bin/pg_ctl
/usr/lib/postgresql/9.3/bin/pg_resetxlog
/usr/lib/postgresql/9.3/bin/postgres
/usr/lib/postgresql/9.3/bin/pg_xlogdump
/usr/lib/postgresql/9.3/bin/initdb
/usr/lib/postgresql/9.3/bin/pg_controldata
/usr/lib/postgresql/9.3/bin/postmaster
Saya mencoba perintah itu postgres
user@userPc:~$ postgres
No command 'postgres' found, did you mean:
Command 'postgrey' from package 'postgrey' (universe)
postgres: command not found
debian
ubuntu
command-line
Maythux
sumber
sumber
apache2
mungkin merupakan contoh buruk karena paket itu adalah metapackage yang biasanya tidak diinstal pada sistem yang menjalankan Apache. Perintah itu berfungsi - cobacoreutils
:dpkg -L coreutils | egrep '(bin|games)/'
grep -Ew 'bin|sbin|games'
, egrep sudah usang dan Anda juga dapat mencari sbin. Juga, tidak ada alasan untuk menggunakanfor
loop di sini, menggunakanwhile
loop seperti yang saya lakukan dalam jawaban saya, berarti Anda tidak perlu khawatir tentang IFS dan pemisahan kata.man grep
:Direct invocation as either egrep or fgrep is deprecated, but is provided to allow historical applications that rely on them to run unmodified.
Juga, Anda regex, akan cocok dengan direktori mana pun yang berisi salah satugames
ataubin
yang akan menyertakan/usr/share/games/
, dan jugafoosbinaff
dan apa pun lainnya.1. Gunakan alat yang dirancang untuk pekerjaan itu.
Cara termudah dan mungkin yang paling kuat adalah menginstal
dlocate
:Anda kemudian dapat berlari
Sebagaimana dijelaskan dalam
man dlocate
:2. Parsikan basis data paket
Ini adalah pendekatan yang mirip dengan @ Winny tetapi disederhanakan
Jika Anda belum
apt-file
menginstal, Anda dapat menginstal dan mengaturnya dengan perintah ini:Perintah di atas digunakan
apt-file
untuk mencantumkan konten paket dan kemudian tes bash-f
(apakah ini file?) Dan-x
(apakah itu dapat dieksekusi?) Dan mencetak nama file jika kedua tes dilewati.Perhatikan bahwa sementara sesuatu seperti perintah di bawah ini akan membuat Anda sebagian besar dapat dieksekusi:
itu tidak akan menemukan semua karena Anda juga mendapatkan executable di tempat-tempat suka
/opt
atau bahkan/lib
(berbagaiudev
alat misalnya). Jadi, saat menggunakan kata kunci-w
untuk mencocokkan seluruh kata meningkatkan peluang Anda untuk mengidentifikasi file dengan benar, mem-parsing path bukanlah pendekatan yang baik dan Anda harus menggunakan salah satu metode di atas.sumber
/opt
atau/lib
tidak dimaksudkan untuk dipanggil oleh pengguna, jadi Anda tidak harus mendaftar mereka. `apt-file -F list $ package | grep -E '^ (/ usr) / (s? bin | games) /' memberi Anda daftar, dengan satu pengecualian: alternatif ./lib/udev/findkeyboards
bisa sangat berguna saat menulis aturan udev keyboard ./lib/udev/rule_generator.functions
dapat bermanfaat juga. Jika Anda mulai membuat daftar semua yang berguna, maka itu bukan hanya executable yang perlu Anda daftarkan, tetapi semua jenis pustaka kode.Jika Anda telah
dlocate
menginstal, ada cara mudah untuk mendaftar semua perintah dalam paket yang diinstal:Dengan hanya
dpkg
, Anda dapat membuat daftar file dalam direktori PATH standar (mereka hampir semua program yang dapat dieksekusi, dengan sangat sedikit pengecualian):Pengecualiannya adalah beberapa direktori - perihal Debian, hanya dua:
/usr/bin/mh
dan/usr/bin/nu-mh
.Jika paket tidak diinstal, ganti
dpkg -L
denganapt-file -F list
:Walaupun ada file yang dapat dieksekusi di direktori lain, mereka tidak dimaksudkan untuk dieksekusi secara langsung, yang membuat mereka tidak relevan di sini.
Semua metode ini melewatkan serangkaian program: yang disediakan melalui mekanisme alternatif . Misalnya, untuk
ftp
paket, hanyanetkit-ftp
danpftp
disediakan, tetapi paket ini sebenarnya menyediakanftp
perintah, karena/usr/bin/ftp
merupakan tautan simbolik/etc/alternatives/ftp
yang merupakan tautan simbolik ke salah satuftp
implementasi pada sistem, secara potensial/usr/bin/netkit-ftp
. Perintah berikut (yang bukan contoh pemrograman yang baik, hanya satu-liner besar) daftar perintah yang diberikan oleh paket melalui mekanisme alternatif, seperti yang saat ini dikonfigurasi.Jika Anda ingin membuat daftar perintah yang dapat disediakan melalui alternatif yang saat ini dikonfigurasi untuk menunjuk ke paket yang berbeda, Anda perlu mengurai file
/var/lib/dpkg/alternatives
.Tautan simbolik dan file konfigurasi yang menerapkan mekanisme alternatif tidak terdaftar dalam paket tetapi terdaftar secara otomatis
postinst
, yang menyulitkan (dan sebenarnya secara teknis tidak mungkin jika skrip instalasi paket tidak mengikuti konvensi) untuk menanyakan alternatif yang disediakan oleh paket yang dihapus instalasinya. .sumber
dpkg -L
pasti tidak akan memberi Anda hasil. Silakan coba alat file-apt (Anda harus menginstalnya).sumber
gunakan di bawah satu perintah dan ganti systemd dengan nama paket yang ditargetkan. perintah ini akan mencantumkan semua perintah yang tersedia dengan intro satu-barisnya masing-masing
sumber