chmod +x

Тема дорожной карты · Bash

chmod +x script.sh устанавливает бит права на выполнение файла Bash-скрипта, сообщая ядру Linux, что файл можно запускать непосредственно как программу, без явной передачи интерпретатору bash. Без права на выполнение запуск ./myscript.sh в командной строке приведёт к ошибке «Permission denied», даже если содержимое скрипта является допустимым Bash-кодом — поэтому chmod +x всегда является первым шагом после создания нового скрипта. Более точная форма chmod 755 script.sh предоставляет владельцу право на выполнение, чтение и запись, а группе и остальным — права на чтение и выполнение, что является стандартным набором прав для общих скриптов автоматизации на серверах Linux. Когда бит выполнения установлен и первой строкой скрипта является шебанг, например #!/bin/bash или #!/usr/bin/env bash, ядро читает эту строку и автоматически запускает нужный интерпретатор. Понимание chmod +x — базовый навык Linux, необходимый прежде чем любой shell-скрипт можно будет развернуть, запланировать через cron или добавить в $PATH для общесистемного использования.

Как это работает

chmod +x — Bourne-Again SHell, дефолтный login shell на большинстве Linux-дистрибутивов. Это и интерактивный интерпретатор, и скриптовый язык. Скрипты начинаются с #!/usr/bin/env bash (или #!/bin/bash для явного пути). Shell парсит ввод в токены, делает расширения (параметры, command substitution, glob), исполняет команды, ловит exit-коды. Современные альтернативы (zsh, fish) хороши интерактивно, но bash остаётся lingua franca для скриптов.

Когда применять

Bash — для shell-автоматизации, которая должна работать на любом Linux/macOS-боксе (zsh+ не гарантирован). #!/usr/bin/env bash лучше #!/bin/sh, когда нужны bash-фичи (массивы, [[ ]], process substitution). Переходите на Python/Go, когда скрипт >~200 строк, нужны структурированные данные или надёжная обработка ошибок. Всегда set -euo pipefail + IFS=$'\n\t' в начале.

Типичные ошибки

Ловушки chmod +x: путаница bash и sh (POSIX sh беднее — dash на Debian дефолтный /bin/sh); не обрабатывают ошибки (дефолт продолжает после сбоев); bash-скрипты с расчётом на GNU coreutils (sed -i "" vs sed -i) ломаются на macOS; алиасы внутри скриптов (фича интерактивного shell).

Связанные понятия

Полезные ресурсы