Mengapa begitu banyak program hidup di PATH?

10

Satu hal yang membingungkan saya tentang Linux desktop, setidaknya, adalah bahwa hampir semuanya ada di PATH saya. Yang saya maksud adalah setiap aplikasi desktop, termasuk hal-hal seperti gnome-character-map dan glchess. Ini tidak memiliki antarmuka baris perintah untuk berbicara tentang, jadi saya tidak bisa memikirkan kasus di mana saya akan secara teratur meluncurkan ini dari terminal - dan, dalam kasus yang tidak mungkin, saya tidak bisa membayangkan ketidaknyamanan dengan perlu mengetikkan penuh mereka jalan. Sepertinya kekacauan, tapi mungkin ada alasan bagus.

Jadi, mengapa tidak ini terjadi? Apakah ada dampak penting pada kinerja atau pemeliharaan?

Dylan McCall
sumber

Jawaban:

14

Semua perintah yang mungkin ingin dijalankan pengguna ada di PATH. Itu untuk apa. Ini termasuk perintah yang Anda jalankan secara langsung, perintah yang dijalankan orang lain secara langsung, dan perintah yang Anda atau orang lain jalankan secara tidak langsung karena mereka dipanggil oleh perintah lain. Ini tidak terbatas pada perintah yang dijalankan dari terminal: perintah yang dijalankan dari GUI juga dicari di jalur pencarian perintah (sekali lagi, itulah gunanya).

Perlu mengetikkan path lengkap akan menjadi mengerikan: Anda harus mencari tahu apa path lengkapnya! Anda harus melacak apakah program itu ada di /usr/bin(yang berisi sebagian besar program yang dikirimkan dengan sistem operasi), atau di /usr/local/bin(yang berisi program yang diinstal secara manual oleh administrator, serta program yang bukan bagian dari OS inti pada beberapa varian unix), atau di beberapa direktori khusus sistem lainnya, atau di suatu tempat di direktori home pengguna.

Sulit untuk menjawab tentang "dampak pada kinerja atau pemeliharaan" karena Anda tidak mengatakan apa yang Anda bandingkan. Jika Anda membandingkan dengan harus mengetik lintasan penuh di mana-mana, itu adalah mimpi buruk untuk pemeliharaan: jika Anda pernah pindah program, atau jika Anda ingin menginstal versi yang lebih baru daripada yang datang dengan OS atau diinstal oleh administrator sistem, Anda harus mengganti jalur penuh itu di mana-mana. Dampak kinerja dari mencari nama di beberapa direktori dapat diabaikan.

Jika Anda membandingkan dengan Windows, itu lebih buruk: beberapa program tidak hanya menambahkan executable, tetapi juga semua jenis omong kosong ke PATH, dan Anda berakhir dengan PATHvariabel mil panjang yang masih belum mencakup semua program, karena banyak program tidak menambahkan diri mereka ke sistem PATH ketika Anda menginstalnya.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Itu terlihat seperti alasan yang cukup rasional. Terima kasih atas penjelasannya! Sedikit tentang mengganti program masuk akal. Saya tidak memikirkan hal itu sama sekali :) Bagian yang mengejutkan saya adalah saya ingin memiliki ruang nama yang kecil dan deskriptif ketika saya berpikir tentang pemrograman, sementara di sini semuanya seperti dalam namespace global yang sama (dan, ketika kita melakukannya) lihat path lengkap, di tempat yang tidak mencolok seperti * / bin). Saya kira mereka adalah hal yang sangat berbeda.
Dylan McCall
4

Variabel PATH berisi daftar jalur direktori. Ketika pengguna mengetik perintah tanpa memberikan path lengkap, daftar ini diperiksa jika berisi path yang mengarah ke perintah. Tidak ada yang secara inheren terminal atau baris perintah khusus tentang hal itu.

Lagipula tidak ada yang spesifik tentang Linux Desktop. PATH dari sistem XP saya mengandung % SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbem yang mungkin mencakup sebagian besar binari Windows.

Direktori di PATH dicari dalam urutan yang ditentukan dan berhenti segera setelah kecocokan ditemukan. Direktori sistem biasanya di awal untuk memberi mereka prioritas tertinggi. Pengguna harus menambahkan jalur pencarian khusus di akhir.

Adapun kinerja: Kebanyakan shell modern men-cache isi PATH sehingga mereka tidak harus memindai disk setiap kali pengguna memasukkan perintah.

djf
sumber
Windows PATH mencakup sebagian besar binari yang dikirimkan bersama Windows, tetapi aplikasi biasa yang Anda instal biasanya tidak ditemukan di PATH. (Ya, aplikasi dengan komponen baris perintah akan menambahkan diri mereka ke PATH, tetapi yang hanya GUI biasanya tidak.)
cjm
Keren, saya selalu merenungkan urutan dan signifikansinya. Bagaimana dengan aturan praktis? Saya memiliki (hampir) setiap kombinasi usr, local, bin, dan sbin(tidak termasuk direktori home pengguna saya).
Emanuel Berg