15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
02.09.2025

Как запустить файл .sh в Linux: полное руководство для начинающих и системных администраторов

Скрипты оболочки — основа автоматизации Linux. Будь то развертывание веб-приложения, планирование резервных копий или настройка недавно подготовленного сервера, .sh файлы позволяют объединить сложные последовательности команд в один повторяемый исполняемый файл. Это руководство проведет вас через все методы запуска скриптов оболочки в Linux — от базового выполнения до фоновых процессов и планирования cron — с лучшими практиками, которые работают в производственных средах.

Что такое файл .sh в Linux?

Файл .sh — это простой текстовый скрипт, написанный на языке оболочки (обычно Bash или POSIX sh), который оболочка Linux интерпретирует и выполняет строка за строкой. Скрипты оболочки используются для:

  • Автоматизации повторяющихся задач системного администрирования
  • Развертывания и настройки приложений
  • Управления пользователями, разрешениями и файловыми системами
  • Планирования работ обслуживания, таких как резервные копии и ротация журналов
  • Начальной загрузки новых серверов после подготовки

Если вы управляете средой VPS Hosting или Dedicated Server, написание скриптов оболочки — это незаменимый навык, который сэкономит вам часы ручной работы каждую неделю.

Предварительные требования

Перед запуском любого файла .sh убедитесь, что у вас есть:

  • Доступ к терминалу Linux (локально или через SSH)
  • Учетная запись пользователя с соответствующими разрешениями
  • Файл скрипта уже в системе (созданный локально или передан через SCP/SFTP)

Метод 1: Сделайте файл исполняемым с помощью chmod

По умолчанию вновь созданные или загруженные файлы .sh не имеют разрешений на выполнение. Перед запуском скрипта как программы необходимо явно предоставить права на выполнение с помощью команды chmod.

chmod +x script.sh

Чтобы проверить, были ли разрешения применены правильно:

ls -l script.sh

Вы должны увидеть вывод, похожий на:

-rwxr-xr-x 1 user user 1024 Jun 10 14:32 script.sh

Флаги x подтверждают, что файл теперь исполняемый владельцем, группой и другими.

> Совет по безопасности: Если вы хотите ограничить выполнение только владельцем файла, используйте chmod 700 script.sh вместо chmod +x.

Метод 2: Запустите скрипт, используя относительный или абсолютный путь

После того как файл станет исполняемым, вы можете запустить его прямо из терминала.

Использование относительного пути (текущий каталог)

Если скрипт находится в вашем текущем рабочем каталоге, добавьте к нему префикс ./:

./script.sh

Символ ./ указывает оболочке искать в текущем каталоге, а не в системе $PATH.

Использование абсолютного пути

Если скрипт хранится в другом месте, укажите его полный путь:

/home/user/scripts/script.sh

или

/usr/local/bin/script.sh

Использование абсолютных путей особенно важно при запуске скриптов из заданий cron или других автоматизированных контекстов, где рабочий каталог может отличаться.

Метод 3: Запустите скрипт с bash или sh (разрешение на выполнение не требуется)

Вы можете вызвать скрипт оболочки, явно вызвав интерпретатор, даже если файл не имеет разрешений на выполнение. Это особенно полезно для быстрого тестирования скрипта перед тем, как сделать его постоянно исполняемым.

bash script.sh

или для POSIX-совместимых скриптов:

sh script.sh

Разница между bash и sh

КомандаИнтерпретаторПоддерживает функции, специфичные для Bash
bash script.shGNU BashДа
sh script.shPOSIX sh (часто dash на Ubuntu)Нет

Если ваш скрипт использует синтаксис, специфичный для Bash, такой как массивы, условные выражения [[ ]] или подстановка процессов, всегда используйте bash вместо sh.

Метод 4: Запустите скрипт от суперпользователя (sudo)

Некоторые скрипты требуют привилегий уровня root для изменения системных файлов, управления сервисами, установки пакетов или изменения конфигураций сети. Используйте sudo для повышения разрешений:

sudo ./script.sh

или передайте скрипт непосредственно bash с повышенными правами:

sudo bash script.sh

Важные соображения безопасности

  • Никогда не запускайте скрипт от root без предварительного прочтения. Вредоносный или плохо написанный скрипт с доступом sudo может вызвать необратимое повреждение системы.
  • Предпочитайте запуск скриптов с минимально необходимыми привилегиями.
  • Если скрипту нужно только писать в определенный каталог, рассмотрите возможность изменения разрешений каталога вместо запуска всего скрипта от root.

Метод 5: Запустите скрипт в фоновом режиме

По умолчанию запуск скрипта в терминале блокирует вашу сессию до завершения скрипта. Для долгоживущих задач — таких как крупные передачи файлов, миграции баз данных или сборки серверов — вам нужно отправить процесс в фоновый режим.

Использование оператора &

./script.sh &

Символ & разветвляет процесс в фоновый режим и немедленно возвращает управление вашему терминалу. Оболочка выводит PID (идентификатор процесса) фонового задания, который вы можете использовать для мониторинга или завершения его позже.

Сохраните скрипт работающим после выхода с помощью nohup

Если вы отключитесь от SSH, фоновые задания, запущенные с &, обычно завершатся. Используйте nohup для предотвращения этого:

nohup ./script.sh &

Вывод по умолчанию перенаправляется в nohup.out. Чтобы указать пользовательский файл журнала:

nohup ./script.sh > /var/log/myscript.log 2>&1 &

Мониторинг фоновых заданий

jobs          # List background jobs in the current session
ps aux | grep script.sh   # Find the process by name
kill PID      # Terminate a specific background process

Метод 6: Планирование выполнения скрипта с помощью Cron

Для повторяющихся задач — ночные резервные копии, еженедельные очистки, почасовые проверки здоровья — встроенный планировщик cron Linux является стандартным решением.

Откройте редактор Crontab

crontab -e

Синтаксис Cron

* * * * * /path/to/script.sh
│ │ │ │ │
│ │ │ │ └── Day of week (0–7, Sunday = 0 or 7)
│ │ │ └──── Month (1–12)
│ │ └────── Day of month (1–31)
│ └──────── Hour (0–23)
└────────── Minute (0–59)

Практические примеры Cron

РасписаниеВыражение CronПример использования
Каждый день в 2:00 AM0 2 * * *Ночная резервная копия базы данных
Каждый понедельник в 6:00 AM0 6 * * 1Еженедельная ротация журналов
Каждый час0 * * * *Проверка мониторинга работоспособности
Каждые 15 минут*/15 * * * *Обновление кэша
При перезагрузке системы@rebootЗапуск сервиса или скрипта при загрузке

Пример: Автоматическая ежедневная резервная копия

0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1

Это запускает backup.sh каждый день в 2:00 AM и добавляет как стандартный вывод, так и ошибки в файл журнала для аудита.

> Профессиональный совет: Всегда используйте абсолютные пути в записях cron. Cron работает с минимальной средой и может не иметь доступа к тому же $PATH, что и ваша интерактивная оболочка.

Метод 7: Источник скрипта (запуск в контексте текущей оболочки)

Есть еще один метод выполнения, который стоит знать: sourcing скрипта. В отличие от методов выше, sourcing запускает скрипт в текущей сессии оболочки, а не порождает подоболочку. Это означает, что любые переменные или функции, определенные в скрипте, сохраняются в вашей текущей среде.

source script.sh

или эквивалентно:

. script.sh

Это обычно используется для загрузки переменных окружения, активации виртуальных сред или применения изменений конфигурации к текущей сессии.

Устранение распространенных ошибок

Сообщение об ошибкеВероятная причинаРешение
Permission deniedФайл не имеет разрешения на выполнениеЗапустите chmod +x script.sh
No such file or directoryНеправильный путь или отсутствующий файлПроверьте путь с помощью ls и pwd
bad interpreter: No such file or directoryНеправильная строка shebang (например, окончания строк Windows)Запустите dos2unix script.sh для исправления окончаний строк
command not foundСкрипт не в $PATH и нет префикса ./Используйте ./script.sh или полный абсолютный путь
syntax error near unexpected tokenСкрипт написан для bash, но запущен с shИспользуйте bash script.sh явно

Лучшие практики для написания и запуска скриптов оболочки

Следование этим практикам сделает ваши скрипты безопаснее, более поддерживаемыми и легче отлаживаемыми — особенно в серверных средах.

1. Всегда начинайте со строки Shebang

Первая строка каждого скрипта должна объявлять интерпретатор:

#!/bin/bash

или для максимальной портативности:

#!/usr/bin/env bash

2. Включите строгий режим

Добавьте это в начало каждого производственного скрипта:

set -euo pipefail
  • -e — выход немедленно, если какая-либо команда не удается
  • -u — рассматривать неустановленные переменные как ошибки
  • -o pipefail — перехватывать сбои в конвейеризованных командах

3. Прочитайте скрипт перед его запуском

Никогда не выполняйте файл .sh из внешнего или ненадежного источника без предварительного просмотра его содержимого:

cat script.sh

или откройте его в текстовом редакторе. Это особенно критично при запуске с sudo.

4. Используйте комментарии в большом количестве

#!/bin/bash
# backup.sh — Daily backup script for /var/www
# Author: sysadmin@example.com
# Last updated: 2024-06-10

# Define source and destination directories
SOURCE="/var/www"
DEST="/mnt/backup"

5. Организуйте скрипты в выделенные каталоги

КаталогРекомендуемое использование
/usr/local/bin/Системные скрипты, доступные всем пользователям
###PPT_NOTR
15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать