Файл hel 1 о может быть выполнен командой bash с аргументом hel 1 о:
admin@serverl:~$ bash hello hello world bonjour monde admin@serverl:$
Теперь попробуем запустить hel 1 о без сопровождения bash:
admin@serverl:$ hello bash: hello: command not found
Почему bash не может найти файл? Когда вы указываете команду, Linux ищет файл с данным именем в списке директорий, называемом путем, и выполняет первый найденный файл. В этом случае hel 1 о не находится ни в одной из указанных директорий. Если вы сообщите системе, в какой директории находится файл, она его выполнит. Путь файла может быть абсолютным (/home/admin/hello) или относительным (. / hel 1 о означает файл hel 1 о в текущей директории). Мы опишем, как указывать директории в пути файла в следующем разделе, но сначала нам нужно поработать с правами доступа.
Сценарий оболочки не будет работать без определенных прав доступа к файлу. Проверим права доступа к hel 1 о:
admin@serverl:$ Is 1 hello rwrг1 admin admin 48 20060725 13:25 hello
Символ означает, что флажок не установлен. Ведущий — это флажок директории; d означает директорию, а — файл. Далее идут права доступа для обладателя файла, группы, к которой принадлежит обладатель, и всех остальных. Правообладатель (admin) может читать (г) и изменять (w) этот файл, тогда как другие члены группы (в данном случае также называемой admi п) и все остальные могут только читать его (г). Никто не может выполнить файл, поскольку третий символ в каждой из трехсимвольных групп — это вместо х.
Теперь попробуем запустить файл hel 1 о с относительным именем пути:
admin@serverl:~$ ./hello bash: ./hello: Permission denied
На этот раз Linux нашла его, но не выполнила. Это не удалось, поскольку файл hel 1 о не имеет прав доступа на выполнение. Вы должны решить, кто будет допущен к его выполнению: только вы (владелец), любой из вашей группы и/или пользователи из других групп. Это практическое решение безопасности, которое администраторам часто приходится принимать. Если права доступа слишком широки, то любой может выполнить сценарий, не обладая вашими знаниями; если права недостаточны, то сценарий вообще нельзя будет выполнить.
Команда для изменения прав доступа называется chmod (то есть «изменение режима»). В ней могут использоваться старомодные восьмеричные числа и буквы UNIX. Испробуем оба пути, дав права выполнения/чтения/изменения вам, права чтения и выполнения — вашей группе и никаких прав — остальным (они вам чтонибудь когданибудь давали)? В восьмеричной записи чтение = 4, письмо = 2, а выполнение = 1. Номер пользователя будет 4 + 2 + 1 (7), номер группы — 4 + 1 (5), а для других — 0.
admin@serverl:~$ chmod 750 hello
admiri@serverl:$ Is 1 hello
rwxrx1 admin admin 50 20060803 15:44 hello
Другой стиль аргументов доступа с использованием букв, вероятно, более понятен:
admin@serverl:~$ chmod u=rwx,g=rx hello admin@serverl:~$ Is 1 hello
rwxrx1 admin admin 50 20060803 15:44 hello
Для быстрого добавления, чтения и выполнения прав доступа вашей группой и остальными введите следующее:
adminPserverl:$ chmod +xr hello
admin@serverl:~$ Is 1 hello
rwxrxrx 1 admin admin 50 20060803 15:44 hello
Теперь мы можем выполнить сценарий из командной строки:
adm1n@serverl:$ ./hello hello world bonjour monde