Выполнение файлов сценариев и разрешения

IvanVoronin

Dabbler
Joined
Jul 14, 2021
Messages
18
Опыта в nix'ах нет.

1. Зачем нужны символы "./" перед именем сценарного файла? Это же избыточно.
2. Имеет ли значение из какого каталога (работаю под root, то личный root или шара) запускать сценарии, или важны только разрешения?

Если важны только разрешения, то не почему не запускаются из этого ДатаСета (команда не найдена), а из каталога пользователя запускается:

Безымянный2.png

а) откуда берётся запись ACL без доступа для "всех" (я ни где этого не задавал)?
б) как суммарно действуют записи ACL для "всех" (4 и 5)? Должны же быть полные права.

записи №№ 0, 1 добавляются по-умолчанию в настройках ДатаСета, запись № 5 добавляется откуда-то сама, записи №№ 2, 3 и 4 добавлены вручную в настройках ACL ДатаСета.
 

chs

Guru
Joined
Apr 18, 2017
Messages
500
Отвечу на первый вопрос - ./ перед именем командного файла для того, что бы быть уверенным, что запускается именно этот файл. Иначе может запуститься другой файл с таким же именем в соответствие с переменной PATH.
А второй вопрос я не понял. Командный файл запускается по имени, если у него установлен флаг выполнения (+x). Если данное разрешение не установлено, его можно запустить через shell (/bin/sh <имя файла>)/
 

IvanVoronin

Dabbler
Joined
Jul 14, 2021
Messages
18
Понятно что это означает. Не понятно зачем это ОБЯЗАТЕЛЬНО использовать. Это такая ОСОБЕННОСТЬ nix'ом, что без прямого указания на текущий каталог, он не просматривается?

Файл script.sh с содержимым:

#!/bin/sh
echo "111"

Из личного каталога root'а, под root'ом:

Вот так script.sh - команда не найдена.
Вот так ./script.sh - всё ОК.

Зачем? Что прямое указание на текущий каталог даёт?
----

Теперь выполняется и из пула. Значит я 10 раз делал опечатки.
 

chs

Guru
Joined
Apr 18, 2017
Messages
500
Ещё раз ...
Имя файла при запуске ищется в порядке директориев определённых переменной PATH ( можете посмотреть её содержимое командой
Code:
$ echo $PATH
).
Если в этом списке нет текущей директории ( "." ) - то файл и не выполнится.

Можно добавить директории в переменную PATH.
 

IvanVoronin

Dabbler
Joined
Jul 14, 2021
Messages
18
Я спрашиваю "Зачем сделано именно так?" (именно так = текущий каталог по-умолчанию не просматривается)
Вы отвечаете "Потому что сделано именно так".

Так зачем? Legacy?
 

chs

Guru
Joined
Apr 18, 2017
Messages
500
Именно так - что б скрипты запускались только из каталогов прописанных в переменной PATH.
Считайте, что так сделано ради безопасности. А дальше Вы сами решаете - понижать или повышать безопасность. Просто представьте, что в вашей текущей $HOME директории есть файл с названием cp внутри которого команда rm -rf * $1 и установленным атрибутом +x.
При PATH содержащей "/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin" и выполнении cp file1 file2 в текущем каталоге - выполнится /bin/cp. А при значении PATH ".:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin" - удалятся файлы в домашней директории.
Для этого и сделана директория $HOME/bin - которая ставится последней в цепочке. Куда Вы и складываете командные файлы для выполнения без указания пути.
 
Top