Przepraszam, chciałbym o to zapytać w formie komentarza do wybranej odpowiedzi, ale nie mam jeszcze żadnego przedstawiciela superużytkownika.
Odpowiedź bezpieczeństwa ma sens, ale jeśli wpiszesz „.” w swojej ŚCIEŻCE jako ostatnia rzecz, czy powłoka nie powinna wyglądać w bieżącym katalogu podczas wyszukiwania plików wykonywalnych, a tym samym zmniejszyć ryzyko bezpieczeństwa? Gdyby przeszukiwał $ PATH w kolejności, znalazłby / bin / ls zanim znalazłby ./ls.
Jak niepewne jest dla mnie umieszczenie „”. na końcu mojej zmiennej środowiskowej $ PATH?
Działa jak sugeruję. Oto jak testowałem:
Najpierw dodaj „.” na KONIEC zmiennej środowiskowej PATH.
Następnie umieść następujący plik w jakimś katalogu, takim jak ~ / dir1 / dir2 / test_which.rb:
#!/your/path/to/ruby
puts "this file is from the current directory"
I umieść ten plik na /usr/bin/test_which.rb
#!/your/path/to/ruby
puts "this file is at /usr/bin/test_which.rb"
Pamiętaj, aby chmod + x pliki, aby były one wykonywalne.
Teraz, jeśli zmienisz katalog na ~ / dir1 / dir2 i wykonasz test_which.rb, otrzymasz wynik
this file is at /usr/bin/test_which.rb
Rzeczywiście, jeśli uruchomisz „który test_which.rb” z dowolnego miejsca, powinien to zgłosić
/usr/bin/test_which.rb
Nadal możesz wykonać plik w bieżącym katalogu, wpisując:
./test_which.rb
ls
będzie/usr/bin/ls
i./ls
tak nie będzie. Problemem jest również to, że jeśli wiesz, jak dodać.
do końca swojej ścieżki, prawdopodobnie masz pojęcie, co robisz. root nigdy nie powinien mieć.
na ścieżce, wiele systemów nawet nie pozwala logować się rootowi.