15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало
02.09.2025

Как да стартирате .sh файл в Linux: Пълно ръководство за начинаещи и системни администратори

Shell скриптовете са гръбнакът на Linux автоматизацията. Независимо дали развиваш уеб приложение, планираш резервни копия или конфигурираш наново предоставен сървър, .sh файловете ти позволяват да обединиш сложни последователности от команди в един повторяем изпълним файл. Това ръководство те провежда през всеки метод за изпълнение на shell скриптове в Linux — от базовото изпълнение до фонови процеси и cron планиране — с най-добри практики, които издържат в производствени среди.

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

.sh файлът е обикновен текстов скрипт, написан на shell език (обикновено Bash или POSIX sh), който Linux shell интерпретира и изпълнява ред по ред. 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

./ казва на shell да търси в текущия директорий, а не да търси в системния $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)

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

sudo ./script.sh

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

sudo bash script.sh

Важни съображения за сигурност

  • Никога не изпълнявай скрипт като root без да го прочетеш първо. Злонамерен или лошо написан скрипт с sudo достъп може да причини необратимо повреждане на системата.
  • Предпочитай изпълнението на скриптове с минимално необходимите привилегии.
  • Ако скриптът трябва само да пише в конкретен директорий, разгледай коригирането на разрешенията на директориума, вместо да изпълняваш целия скрипт като root.

Метод 5: Изпълни скрипта в фона

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

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

./script.sh &

Символът & разклонява процеса в фона и веднага връща контрола на твоя терминал. Shell отпечатва 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 сутринта0 2 * * *Нощно резервно копие на база данни
Всеки понеделник в 6:00 сутринта0 6 * * 1Седмична ротация на логове
Всеки час0 * * * *Проверка на мониториране на работоспособност
Всеки 15 минути*/15 * * * *Обновяване на кеш
При рестартиране на системата@rebootСтартирай услуга или скрипт при зареждане

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

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

Това изпълнява backup.sh всеки ден в 2:00 сутринта и добавя както стандартния изход, така и грешките към файл на логове за одит.

> Професионален съвет: Винаги използвай абсолютни пътища в cron записи. Cron работи с минимална среда и може да нямаше достъп до същия $PATH като твоя интерактивен shell.

Метод 7: Изходен скрипт (Изпълни в контекста на текущия Shell)

Има още един метод на изпълнение, който си струва да знаеш: sourcing на скрипт. За разлика от методите по-горе, sourcing изпълнява скрипта в текущата shell сесия, вместо да създава подshell. Това означава, че всички променливи или функции, дефинирани в скрипта, остават в твоята текуща среда.

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. Активирай строг режим

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

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/Системни скриптове, достъпни за всички потребители
15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало