Linux Labs

Bash: обработка текста и скрипты / Ступень 4 из 9

Скрипт — это файл с командами

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 3 из 6 · теория · 5 мин

Право x и поиск по имени

./backup-notes.sh и просто backup-notes.sh — два разных пути к одному файлу. Первый упирается в права, второй — в PATH.

Запускать файл как программу ядро разрешает только с правом x. У backup-notes.sh права rw-r--r--: читать можно, запускать нельзя — отсюда Permission denied. Владелец добавляет себе право запуска командой chmod: chmod u+x backup-notes.sh, где u — владелец, x — запуск. После этого ./backup-notes.sh работает: ядро видит x, читает shebang и запускает /bin/bash.

./ в начале команды — путь: «файл в текущем каталоге». Имя без / оболочка ищет иначе — в каталогах PATH, как в уроке «Справка и оболочка». Текущего каталога в PATH нет, поэтому backup-notes.sh даёт command not found, даже когда файл рядом.

Свои команды кладут в ~/bin. На Ubuntu файл ~/.profile при входе ставит ~/bin в начало PATH — если такой каталог уже есть. Каталог, созданный в открытом терминале, оболочка не увидит до нового входа; применить сразу — source ~/.profile. Расширение .sh для запуска не нужно, поэтому команду в ~/bin называют коротко.

Проверь себя 1 вопрос

Ты выполнил chmod u+x backup-notes.sh. Что ответит оболочка на backup-notes.sh — без ./, в том же каталоге?

  • До проверки прав дело не дойдёт: оболочка ищет имя в каталогах PATH и не находит файл. type backup-notes.sh ответит not found.

  • Этот ответ даёт dash. Скрипт с #!/bin/bash выполнил бы bash, но без ./ оболочка файл даже не найдёт.

  • Имя без / оболочка ищет в каталогах PATH, а ~/script-lab там нет: echo $PATH его не покажет. Файл с правом x она так и не найдёт.

Право x решает, можно ли запустить файл, а PATH — где оболочка ищет имя без /. Текущего каталога в PATH нет, поэтому файл с правом x по имени так и не находится. Помогает ./backup-notes.sh или копия в каталоге из PATH.

Главное в шаге

  • ./файл запускает файл как программу: нужно право x, а интерпретатор ядро берёт из shebang.
  • Имя без / оболочка ищет только в каталогах PATH; свои команды живут в ~/bin, который ~/.profile добавляет в PATH при входе.
Ubuntu 24.04
Загрузка…