Як запустити файл .sh у Linux: повний посібник для початківців та системних адміністраторів
Shell scripts є основою автоматизації Linux. Чи то розгортання веб-додатку, планування резервних копій або налаштування щойно підготовленого сервера, .sh файли дозволяють об’єднати складні послідовності команд в один повторюваний виконуваний файл. Цей посібник проведе вас через кожен метод запуску shell scripts у Linux — від базового виконання до фонових процесів та планування cron — з найкращими практиками, які працюють у виробничих середовищах.
Що таке файл .sh у Linux?
Файл .sh — це простий текстовий скрипт, написаний мовою shell (зазвичай Bash або POSIX sh), який оболонка Linux інтерпретує та виконує рядок за рядком. Shell-скрипти використовуються для:
- Автоматизації повторюваних завдань адміністрування системи
- Розгортання та налаштування додатків
- Управління користувачами, дозволами та файловими системами
- Планування завдань обслуговування, таких як резервне копіювання та ротація журналів
- Завантаження нових серверів після їх підготування
Якщо ви керуєте середовищем VPS Hosting або Dedicated Server, написання shell-скриптів — це незамінна навичка, яка заощадить вам години ручної роботи кожного тижня.
Передумови
Перед запуском будь-якого .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 (дозвіл на виконання не потрібен)
Ви можете викликати shell-скрипт, явно вказавши інтерпретатор, навіть якщо файл не має дозволу на виконання. Це особливо корисно для швидкого тестування скрипту перед тим, як зробити його постійно виконуваним.
bash script.shабо для POSIX-сумісних скриптів:
sh script.shРізниця між bash та sh
| Команда | Інтерпретатор | Підтримує Bash-специфічні функції |
|---|---|---|
bash script.sh | GNU Bash | Так |
sh script.sh | POSIX sh (часто dash на Ubuntu) | Ні |
Якщо ваш скрипт використовує Bash-специфічний синтаксис, як-от масиви, [[ ]] умовні оператори або підстановка процесів, завжди використовуйте bash замість sh.
Метод 4: Запуск скрипту як суперкористувача (sudo)
Деякі скрипти потребують привілеїв кореневого рівня для зміни системних файлів, управління сервісами, встановлення пакетів або зміни конфігурацій мережі. Використовуйте sudo для підвищення привілеїв:
sudo ./script.shабо передайте скрипт безпосередньо bash з підвищеними правами:
sudo bash script.shВажливі міркування безпеки
- Ніколи не запускайте скрипт як root без попереднього його прочитання. Шкідливий або погано написаний скрипт з доступом sudo може спричинити незворотну шкоду системі.
- Надавайте перевагу запуску скриптів з мінімально необхідними привілеями.
- Якщо скрипту потрібно писати лише в певний каталог, розглядайте можливість коригування дозволів каталогу замість запуску всього скрипту як root.
Метод 5: Запуск скрипту на фоні
За замовчуванням запуск скрипту в терміналі блокує вашу сесію до завершення скрипту. Для довгострокових завдань — таких як передача великих файлів, міграція баз даних або збірка серверів — вам потрібно відправити процес на фон.
Використання оператора &
./script.sh &Символ & розгалужує процес на фон і негайно повертає контроль до вашого терміналу. Оболонка виводить PID (Process ID) фонового завдання, який ви можете використовувати для моніторингу або припинення його пізніше.
Утримання скрипту в роботі після виходу з системи за допомогою 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 AM | 0 2 * * * | Нічна резервна копія бази даних |
| Кожного понеділка о 6:00 AM | 0 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 явно |
Найкращі практики написання та запуску Shell-скриптів
Дотримання цих практик зробить ваші скрипти безпечнішими, легшими у обслуговуванні та налагодженні — особливо в серверних середовищах.
1. Завжди починайте з рядка Shebang
Перший рядок кожного скрипту повинен оголошувати інтерпретатор:
#!/bin/bashабо для максимальної портативності:
#!/usr/bin/env bash2. Увімкніть режим Strict Mode
Додайте це близько до верхівки кожного виробничого скрипту:
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/ | Системні скрипти, доступні всім користувачам |
~/scripts/ або ~/bin/ | Особисті користувацькі скрипти |
/opt/scripts/ | Скрипти автоматизації для конкретних додатків |
/etc/cron.daily/ | Скрипти для щоденного запуску через cron |
6. Логуйте вихід скрипту
Завжди перенаправляйте вихід у файл журналу для скриптів, що запускаються без нагляду:
./script.sh >> /var/log/script.log 2>&17. Спочатку протестуйте скрипти в безпечному середовищі
Перед розгортанням скрипту на виробничому сервері протестуйте його в середовищі staging або на одноразовому екземплярі VPS, де помилки не спричинять простої.
Запуск Shell Scripts на Linux сервері: Практичні Міркування
При запуску скриптів на віддаленому Linux сервері — чи то в спільному середовищі, чи на виділеній машині — потрібно враховувати кілька додаткових факторів:
- SSH доступ: Більшість серверних скриптів запускаються через SSH. Інструменти на кшталт
screenабоtmuxдозволяють підтримувати постійні сеанси, щоб довгострокові скрипти пережили розриви з’єднання. - Дозволи користувача: У спільному хостингу ваша здатність виконувати скрипти може бути обмежена. VPS з cPanel надає вам повний root доступ та повний контроль над виконанням скриптів.
- Автоматизовані розгортання: Поєднуйте shell скрипти з cron завданнями для автоматизації розгортання, поновлення сертифікатів (особливо корисно разом з SSL сертифікатами), та рутинних завдань обслуговування.
- Змінні середовища: Скрипти, які запускаються через cron або SSH, можуть не успадкувати середовище вашої інтерактивної оболонки. Визначте всі необхідні змінні явно в скрипті або завантажте файл профілю.
Швидкий довідник: усі методи на одній сторінці
| Метод | Команда | Випадок використання |
|---|---|---|
| Виконати з дозволом | chmod +x script.sh && ./script.sh | Стандартне виконання |
| Запустити з bash | bash script.sh | Дозвіл на виконання не потрібен |
| Запустити з sh | sh script.sh | POSIX-сумісні скрипти |
| Запустити як root | sudo ./script.sh | Скрипти, що потребують підвищених привілеїв |
| Запустити у фоновому режимі | ./script.sh & | Виконання без блокування |
| Запустити постійно | nohup ./script.sh & | Збереження після вихідного SSH |
| Запланувати з cron | crontab -e | Повторювані автоматизовані завдання |
| Завантажити скрипт | source script.sh | Застосування змін до поточної оболонки |
Висновок
Запуск .sh файлів у Linux — це фундаментальна навичка, яка розкриває повну потужність автоматизації системи. Основний робочий процес простий: надайте дозвіл на виконання за допомогою chmod +x, а потім запустіть скрипт за допомогою ./script.sh або bash script.sh. Для виробничих середовищ поєднайте абсолютні шляхи, суворий режим, логування та планування cron, щоб створити надійні та стійкі конвеєри автоматизації.
Якщо ви керуєте скриптами на сервері, якість вашої хостинг-інфраструктури має значення. VPS Hosting та Dedicated Servers AlexHost надають вам повний root-доступ, стабільний час роботи та продуктивність, необхідні для впевненого запуску робочих навантажень автоматизації — чи то планування нічних резервних копій, розгортання додатків чи управління складними робочими процесами з кількома скриптами.
на всіх хостингових послугах