Pada sistem seperti UNIX selama bertahun-tahun (paling relevan bagi saya, Linux), saya perhatikan bahwa .
(direktori saat ini) tidak pernah dalam $PATH
standarnya. Kenapa ini?
Saya ingat pernah membaca bertahun-tahun yang lalu bahwa itu adalah masalah keamanan, tetapi artikel yang saya baca tidak menjelaskan apa sebenarnya masalahnya. Apakah itu karena seseorang dapat meninggalkan versi berbahaya ls
atau cp
dalam direktori, dan akhirnya saya menjalankannya tanpa disadari ada di sana?
ls
akan/usr/bin/ls
dan./ls
tidak. Ada juga rintangan jika Anda tahu cara menambahkan.
ke ujung jalan Anda, Anda mungkin tahu apa yang Anda lakukan. root seharusnya tidak ada.
di path, banyak sistem bahkan tidak membiarkan root login lagi.Jawaban:
Anda menjawab dengan benar pertanyaan Anda sendiri, itulah sebabnya dot tidak ada di jalur:
Untuk melindungi dari virus kekanak-kanakan atau kesalahan jujur.
Tentu saja, ini adalah ukuran anti-virus yang sangat timpang dan tidak berguna, dan tidak ada yang menghentikan Anda untuk menambahkan titik ke jalur sendiri.
sumber
-rf
dalam direktori (membuatrm *
menarik) ;-)-rf
di tempat pertama? ;)Iya. Jika Anda meletakkan "." di jalur, Anda akhirnya akan mengirim banyak panggilan perintah ke file di direktori Anda saat ini.
Bahkan jika itu yang terakhir, masih ada kesalahan pilot. Sebagai contoh, Solaris 10 tidak memiliki "top". Saya mengetik "top" di sistem saya sepanjang hari, karena saya pikir saya berada di sistem yang memiliki "top".
sumber
Maaf, saya ingin menanyakan ini dalam bentuk komentar untuk jawaban yang dipilih, tetapi saya belum memiliki perwakilan tentang pengguna super.
Jawaban keamanan masuk akal, tetapi jika Anda menempatkan "." di PATH Anda sebagai hal terakhir, bukankah shell seharusnya terlihat di direktori saat ini saat ia mencari executable, dan dengan demikian mengurangi risiko keamanan? Jika ia mencari $ PATH secara berurutan, ia akan menemukan / bin / ls sebelum ditemukan ./ls.
Jadi, betapa tidak amannya bagi saya untuk menempatkan "." pada akhir variabel lingkungan $ PATH saya?
Ini berfungsi seperti yang saya sarankan. Inilah cara saya menguji:
Pertama, tambahkan "." hingga AKHIR variabel lingkungan PATH Anda.
Kemudian, letakkan file berikut di beberapa direktori, seperti ~ / dir1 / dir2 / test_which.rb:
Dan letakkan file ini di /usr/bin/test_which.rb
Pastikan chmod + x file sehingga dapat dieksekusi.
Sekarang, jika Anda mengubah direktori menjadi ~ / dir1 / dir2, dan jalankan test_which.rb, Anda akan mendapatkan hasilnya
Memang, jika Anda menjalankan "yang test_which.rb" dari mana saja, itu harus melaporkan
Anda masih dapat menjalankan file di direktori saat ini dengan mengetik:
sumber
dc
atausl
atausduo
di shell, dan diselamatkan oleh "perintah tidak ditemukan". Pernah.ls
(keluaran warna dan banyak lagi) aliasl
yang sepenuhnya dikeluarkan dengan kesalahan ketik.Lebih dari risiko keamanan, memiliki '.' di PATH membuat hampir tidak mungkin untuk memastikan bahwa eksekusi perintah apa pun bertindak sebagaimana dimaksud. Pikirkan tentang menjalankan perintah seperti 'zip' di direktori besar yang berisi ribuan file dengan nama acak. Kemungkinan salah satu dari mereka sebenarnya bernama 'zip' tidak dapat diabaikan dan akan menyebabkan kesalahan yang sangat sulit untuk dipahami (sebenarnya file tersebut harus dapat dieksekusi, yang, bagaimanapun, mungkin terjadi).
Khususnya ini benar ketika menulis skrip yang menjaga variabel PATH pengguna. Skrip tertulis yang baik harus menangani semua kasus sudut (seperti nama file dengan spasi di dalamnya atau dimulai dengan '-'). Tetapi tidak praktis untuk mencegah file dalam direktori saat ini dieksekusi daripada perintah sistem ...
sumber