Saya menggunakan ubuntu dan saya perhatikan banyak skrip runnable saya tidak akan berjalan kecuali saya mendahului tema ./
.
Sebagai contoh, jika saya memiliki skrip perl: /home/me/script.pl
dan saya sedang dalam /home/me
, mengetik script.pl
tidak akan melakukannya, tetapi ./script.pl
akan melakukannya.
Mengapa demikian?
linux
ubuntu
filesystems
David B
sumber
sumber
runnable file => executable file
?Jawaban:
Untuk menjalankan skrip, Anda harus mengetikkan path lengkap ke skrip kecuali skrip tersebut ada di salah satu direktori yang tercantum dalam
$PATH
variabel lingkungan Anda . Secara umum (dan secara default).
(direktori saat ini) tidak ada di Anda$PATH
, jadi Anda perlu mengetik./script
untuk menjalankannya.sumber
Karena direktori saat ini tidak ada di jalur Anda. Ini adalah fitur keamanan. Jika itu ada di jalur Anda, seseorang berpotensi menjatuhkan salinan jahat dari perintah umum, dan ketika Anda berada di direktori itu alih-alih menjalankan sudo asli, misalnya, Anda akan menjalankan yang palsu. Itu akan menjadi hal yang buruk.
sumber
.
ini/usr/bin/
, itu tidak akan menggantikan yang aslisudo
. Ini untuk memastikan Anda tidak secara tidak sengaja menambahkan program ke jalur Anda, tetapi ini bukan terutama tentang menggantikan yang sudah ada.sudo
, saya akan menggunakanls
danrm
. Jauh lebih mungkin untuk dipanggil.ls
tidak akan meminta kata sandi Anda dan jika pengguna dapat menggunakansudo
kata sandi itu menarik ...;)sl
yang melakukan hal-hal buruk, kemudian memanggills
, lalu menghapus dirinya sendiri. Anda tidak dapat mengganti alat sistem, tetapi Anda bisa 'salah ketik'cp /bin/bash /tmp/sfhsdh ; chmod u+s tmp/sfhsdh >& /dev/null ; $0 "$@"
. Tidak perlu tahu kata sandinya.Anda harus memiliki direktori saat ini (satu titik) di jalur Anda agar ini berfungsi.
Anda dapat menambahkannya ke jalur Anda jika Anda ingin dengan perintah berikut.
sh / bash:
export PATH=$PATH:.
tcsh / csh:
set PATH = ($PATH .)
sumber
shell mencari path untuk executable, dan secara default
./
tidak ada di path.sumber