Как да стартирате .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.sh | GNU Bash | Да |
sh script.sh | POSIX 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.shor equivalently:
. script.shThis 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 bash2. Активирайте строг режим
Добавете това близо до началото на всеки 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>&17. Тестирайте скриптове в безопасна среда първо
Преди да разгърнете скрипт на 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 | Стандартно изпълнение |
| Изпълнение с 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, за да изградите надежни и надеждни тръбопроводи за автоматизация.
Ако управлявате скриптове на сървър, качеството на вашата хостинг инфраструктура е важно. AlexHost’s VPS Hosting и Dedicated Servers ви дават пълен root достъп, стабилна работа и производителност, която ви трябва, за да изпълнявате работни натоварвания за автоматизация с увереност — независимо дали планирате нощни резервни копия, развертывате приложения или управлявате сложни многоскриптни работни процеси.
от всички хостинг услуги