Заощадьте 15% на всіх хостингових послугах

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код: Skills Почати
Рубрики
Linux Адміністрація

Як запустити файл .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.shGNU BashТак
sh script.shPOSIX 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 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 явно

Найкращі практики написання та запуску Shell-скриптів

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

1. Завжди починайте з рядка Shebang

Перший рядок кожного скрипту повинен оголошувати інтерпретатор:

#!/bin/bash

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

#!/usr/bin/env bash

2. Увімкніть режим 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>&1

7. Спочатку протестуйте скрипти в безпечному середовищі

Перед розгортанням скрипту на виробничому сервері протестуйте його в середовищі staging або на одноразовому екземплярі VPS, де помилки не спричинять простої.

Запуск Shell Scripts на Linux сервері: Практичні Міркування

При запуску скриптів на віддаленому Linux сервері — чи то в спільному середовищі, чи на виділеній машині — потрібно враховувати кілька додаткових факторів:

  • SSH доступ: Більшість серверних скриптів запускаються через SSH. Інструменти на кшталт screen або tmux дозволяють підтримувати постійні сеанси, щоб довгострокові скрипти пережили розриви з’єднання.
  • Дозволи користувача: У спільному хостингу ваша здатність виконувати скрипти може бути обмежена. VPS з cPanel надає вам повний root доступ та повний контроль над виконанням скриптів.
  • Автоматизовані розгортання: Поєднуйте shell скрипти з cron завданнями для автоматизації розгортання, поновлення сертифікатів (особливо корисно разом з SSL сертифікатами), та рутинних завдань обслуговування.
  • Змінні середовища: Скрипти, які запускаються через cron або SSH, можуть не успадкувати середовище вашої інтерактивної оболонки. Визначте всі необхідні змінні явно в скрипті або завантажте файл профілю.

Швидкий довідник: усі методи на одній сторінці

МетодКомандаВипадок використання
Виконати з дозволомchmod +x script.sh && ./script.shСтандартне виконання
Запустити з bashbash script.shДозвіл на виконання не потрібен
Запустити з shsh script.shPOSIX-сумісні скрипти
Запустити як rootsudo ./script.shСкрипти, що потребують підвищених привілеїв
Запустити у фоновому режимі./script.sh &Виконання без блокування
Запустити постійноnohup ./script.sh &Збереження після вихідного SSH
Запланувати з croncrontab -eПовторювані автоматизовані завдання
Завантажити скриптsource script.shЗастосування змін до поточної оболонки

Висновок

Запуск .sh файлів у Linux — це фундаментальна навичка, яка розкриває повну потужність автоматизації системи. Основний робочий процес простий: надайте дозвіл на виконання за допомогою chmod +x, а потім запустіть скрипт за допомогою ./script.sh або bash script.sh. Для виробничих середовищ поєднайте абсолютні шляхи, суворий режим, логування та планування cron, щоб створити надійні та стійкі конвеєри автоматизації.

Якщо ви керуєте скриптами на сервері, якість вашої хостинг-інфраструктури має значення. VPS Hosting та Dedicated Servers AlexHost надають вам повний root-доступ, стабільний час роботи та продуктивність, необхідні для впевненого запуску робочих навантажень автоматизації — чи то планування нічних резервних копій, розгортання додатків чи управління складними робочими процесами з кількома скриптами.