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

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

Използвайте код: Skills За начало
Заглавия
Linux Администрация

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

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

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

A .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: Изпълнение на скрипта като Superuser (sudo)

Някои скриптове изискват привилегии на ниво root за модифициране на системни файлове, управление на услуги, инсталиране на пакети или промяна на конфигурации на мрежата. Използвайте 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

За повтарящи се задачи — нощни резервни копия, седмични почистване, почасови проверки на здравето — вградения в Linux планировчик cron е стандартното решение.

Отворете редактора на 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 като интерактивната ви обвивка.

Method 7: Source a Script (Run in Current Shell Context)

There is one more execution method worth knowing: sourcing a script. Unlike the methods above, sourcing runs the script within the current shell session rather than spawning a subshell. This means any variables or functions defined in the script persist in your current environment.

source script.sh

or equivalently:

. script.sh

This is commonly used for loading environment variables, activating virtual environments, or applying configuration changes to the current session.

Отстраняване на често срещани грешки

Съобщение за грешкаВероятна причинаРешение
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. Активирайте строг режим

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

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. Тестирайте скриптове в безопасна среда първо

Преди да разгърнете скрипт на production сървър, тестирайте го на staging среда или на еднократна VPS инстанция, където грешките няма да причинят престой.

Изпълнение на Shell скриптове на Linux сервър: Практически съображения

Когато изпълнявате скриптове на отдалечен Linux сервър — независимо дали е споделена среда или дедицирана машина — влизат в сила няколко допълнителни фактора:

  • SSH достъп: Повечето скриптове на страната на сървъра се изпълняват чрез SSH. Инструменти като screen или tmux ви позволяват да поддържате постоянни сесии, така че дълготрайни скриптове оцеляват при прекъсване на връзката.
  • Разрешения на потребителя: В среди на споделен хостинг, вашата способност да изпълнявате скриптове може да бъде ограничена. VPS с cPanel ви дава пълен root достъп и пълен контрол над изпълнението на скриптове.
  • Автоматизирани разгръщания: Комбинирайте shell скриптове с cron задачи, за да автоматизирате разгръщания, подновяване на сертификати (особено полезно наред със SSL сертификати), и рутинни задачи за поддръжка.
  • Променливи на средата: Скриптовете, изпълнявани чрез cron или SSH, може да не наследят средата на вашата интерактивна shell. Дефинирайте всички необходими променливи явно в скрипта или зареждане на профилен файл.

Бърз справочник: Всички методи на един поглед

МетодКомандаСлучай на употреба
Изпълнение с разрешение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, за да изградите надежни и надеждни тръбопроводи за автоматизация.

Ако управлявате скриптове на сървър, качеството на вашата хостинг инфраструктура е важно. AlexHost’s VPS Hosting и Dedicated Servers ви дават пълен root достъп, стабилна работа и производителност, която ви трябва, за да изпълнявате работни натоварвания за автоматизация с увереност — независимо дали планирате нощни резервни копия, развертывате приложения или управлявате сложни многоскриптни работни процеси.