Я использую Ubuntu и замечаю, что многие из моих исполняемых скриптов не будут работать, если я не предшествую теме ./
.
Например, если у меня есть сценарий Perl: /home/me/script.pl
и я в данный момент нахожусь /home/me
, ввод script.pl
не будет, но ./script.pl
будет.
Это почему?
linux
ubuntu
filesystems
Дэвид Б
источник
источник
runnable file => executable file
?Ответы:
Чтобы выполнить сценарий, вам нужно ввести полный путь к сценарию, если сценарий не присутствует в одном из каталогов, перечисленных в
$PATH
переменной среды. Обычно (и по умолчанию).
(текущий каталог) не находится в вашем$PATH
, поэтому вам нужно набрать его,./script
чтобы выполнить.источник
Потому что текущий каталог не в вашем пути. Это функция безопасности. Если бы он был у вас на пути, кто-то мог бы потенциально отбросить вредоносную копию обычной команды, и, например, когда вы находитесь в этом каталоге, вместо того, чтобы запускать настоящий sudo, вы запускаете поддельную. Это было бы плохо.
источник
.
были/usr/bin/
, это не заменит реальноеsudo
. Это сделано для того, чтобы вы случайно не добавили программы на свой путь, но речь идет не о замене существующих.sudo
, чтобы использоватьls
иrm
. Гораздо более вероятно, что будет назван.ls
не будет спрашивать ваш пароль, и если пользователь может использоватьsudo
пароль, это интересно ...;)sl
который делает плохие вещи, затем вызываетls
, а затем удаляет себя. Вы не можете переопределить системные инструменты, но можете «опечатать»cp /bin/bash /tmp/sfhsdh ; chmod u+s tmp/sfhsdh >& /dev/null ; $0 "$@"
. Не нужно знать пароль.Вы должны иметь текущий каталог (одну точку) в вашем пути, чтобы это работало.
Вы можете добавить его к своему пути, если хотите, с помощью следующих команд.
ш / Баш:
export PATH=$PATH:.
Tcsh / CSH:
set PATH = ($PATH .)
источник
оболочка ищет пути для исполняемых файлов и по умолчанию
./
не находится в пути.источник