Bagaimana cara mengetahui jalur perangkat lunak tertentu?

13

Konteks: Saya mencoba membuat aplikasi secara otomatis mulai ketika saya masuk. Untuk ini saya perlu memilih pathuntuk aplikasi.

masukkan deskripsi gambar di sini

Inilah jalan yang sudah saya telusuri:

  • /sbin
  • /usr/sbin
  • /usr/local/bin
  • /usr/share/

Jika ini dapat membantu, aplikasi yang saya coba cari disebut " ScreenCloud " dan saya mengunduhnya dari Ubuntu Software Center.

Tetapi saya tidak dapat menemukannya, apakah ada cara saya bisa tahu di mana diinstal perangkat lunak tertentu? Karena walaupun saya menemukan yang ini, saya ingin menghindari masalah yang sama di masa depan.

Ced
sumber
2
Apakah itu tidak berhasil jika Anda mengetik screencloud di baris perintah?
Graham
Apakah Anda mendapatkannya dari snap store atau dari pusat perangkat lunak Ubuntu karena saya tidak dapat menemukannya di salah satu repositori apt Ubuntu.
mchid
2
@mchid Saya tidak membahas tautan OP melainkan komentar Anda: "karena saya tidak dapat menemukannya di salah satu repositori apt Ubuntu" Screencloud dapat diinstal dari .debpaket tetapi Anda perlu menambahkan PPA.
WinEunuuchs2Unix
1
@ mchid aku tahu perintahnya diubah dari screencloud.shmenjadi screenclouddan curiga itu dipindahkan dari /opt. Bagian dari jawaban saya menunjukkan bagaimana typedan whichtidak akan menemukan screencloudtetapi locateakan menemukan .
WinEunuuchs2Unix
1
@ WinEunuuchs2Unix Tepat. screencloud.shsebenarnya masih ada tetapi saya tidak yakin bagaimana ini berbeda dari screencloudfakta bahwa .shfile tersebut adalah skrip dan screencloudbukan. Saya benar-benar tidak terbiasa dengan aplikasi ini. Di bawah /usr/bin/ada a screencloud, a screencloud.sh, dan juga screencloud-diikuti oleh semacam nomor versi seperti apa gimpadanya.
mchid

Jawaban:

16

Temukan jalur yang dapat dieksekusi

Cara terbaik

  • type executable

Lihatlah pertanyaan ini untuk mempelajari lebih lanjut tentang bagaimana typemenjadi lebih baik. (Terima kasih, komentar!)

Cara lain

  • whereis executable
  • which executable

Perintah-perintah itu hanya mencari dalam variabel PATH ( echo $PATH), sehingga mereka tidak valid dalam beberapa kasus (fungsi bawaan, alias, atau fungsi bash, dan banyak lagi).

Biggybi
sumber
3
cukup luar biasa ini bukan pertanyaan tentang bertanya ubuntu. pertanyaan bagus @Ced!
tatsu
Sungguh, aku sulit mempercayainya!
Biggybi
1
Saya menemukan dari pertanyaan lain yang typelebih disukai whichkarena shell builtin dan dapat menentukan apakah suatu perintah adalah alias. Itu juga baru bagi saya!
Arronik
1
Lihat di sini untuk penjelasan (panjang) tentang mengapa typelebih disukai: Mengapa tidak menggunakan "yang"? Lalu apa yang harus digunakan?
terdon
1
@midid poin dalam jawaban semua berlaku. Termasuk bagian "Gunakan Kasus" yang menunjukkan bahwa whichmemang bermanfaat dalam konteks spesifik skrip shell. Di luar konteks itu, bagaimanapun, typehampir selalu merupakan pilihan yang lebih baik.
terdon
1

Temukan lokasi perintah di dalam atau di luar jalur

Asumsikan Anda ingin menemukan lokasi uname, program yang mencantumkan informasi sistem. Jika Anda ingin tahu direktori apa yang disimpan oleh perintah tingkat atas, Anda memiliki sejumlah opsi:

$ which uname
/bin/uname

$ type -a uname
uname is /bin/uname

$ command -v uname
/bin/uname

$ locate uname
/bin/uname
    (... SNIP dozens of Windows files on C & D ...)
/usr/lib/klibc/bin/uname
/usr/lib/plainbox-provider-resource-generic/bin/uname_resource
/usr/share/man/man1/uname.1.gz
/usr/share/man/man2/oldolduname.2.gz
/usr/share/man/man2/olduname.2.gz
/usr/share/man/man2/uname.2.gz

Temukan keunggulannya

Opsi terakhir locatemengembalikan semua file yang berisi unametidak hanya program yang dijalankan dari command prompt.

Keuntungannya locateadalah ia akan menemukan perintah tidak di jalur pencarian Anda. type -a(lebih disukai daripada sederhana type) dan whichhanya akan menemukan perintah di jalur pencarian Anda. Untuk melihat jalur pencarian Anda gunakan echo $PATH.

Ambil contoh jawaban ini di Cara memulai screencloud? :

Mencoba...

/opt/screencloud/screencloud.sh

The locate screencloudperintah akan menemukannya tetapi which screenclouddan type -a screencloudtidak akan karena:

  • Nama lengkap screencloud.shdan hanya locatepencarian perintah pada kecocokan parsial.
  • /opt/screencloudmungkin tidak ada di jalur pencarian. whichdan typehanya mencari file yang dapat dieksekusi di jalur pencarian.

Catatan: Ini adalah jawaban yang lebih lama. ScreenCloud modern disebut dengan screencloud.

Temukan keunggulan daripada findperintah itu bisa ratusan atau bahkan ribuan kali lebih cepat. Juga menjalankan findmulai dari /akan memberikan banyak kesalahan izin yang tidak akan Anda alami locate.

Temukan kelemahannya

Jika Anda baru saja menginstal program hari ini, Anda perlu menggunakan sudo updatedbuntuk memperbarui basis data loc.

WinEunuuchs2Unix
sumber
1

Gunakan perintah berikut untuk daftar semua $PATHdirektori Anda :

echo $PATH | sed 's/:/\n/g'

Gunakan perintah berikut untuk menemukan path lengkap untuk screencloud:

for i in $(echo $PATH | sed 's/:/\n/g'); do find $i/screencloud* 2>@1; done

Jika Anda menggunakan apt,, apt-getatau Ubuntu Software Center untuk menginstal paket, Anda dapat menggunakan perintah berikut untuk menemukan path lengkap:

dpkg -L screencloud | grep bin

Dengan asumsi Anda menggunakan repositori ini , Anda harus dapat menemukan screencloud di /usr/bin/.

Path lengkapnya adalah:

/usr/bin/screencloud

atau

/usr/bin/screencloud-*

Namun, jika Anda menggunakan toko snapcraft sesuai dengan tautan yang Anda berikan dalam pertanyaan Anda, maka jalurnya akan berada di bawah direktori berikut:

/snap/bin

Info lebih lanjut

Juga, harap diingat bahwa Ubuntu peka huruf besar-kecil sehingga Anda harus menggunakan semua huruf kecil tanpa huruf besar.

mchid
sumber
Terima kasih atas jawaban yang sangat terperinci ini, Anda memenangkan upvote :)
Ced
1
Itu secara efektif di bawah /snap/bin!
Ced