Jak uruchomić plik .sh w systemie Linux: Kompletny przewodnik dla początkujących i administratorów systemów
Skrypty powłoki są podstawą automatyzacji Linux. Niezależnie od tego, czy wdrażasz aplikację internetową, planujesz kopie zapasowe, czy konfigurujesz nowo aprowizowany serwer, pliki .sh pozwalają na połączenie złożonych sekwencji poleceń w jeden, powtarzalny plik wykonywalny. Ten przewodnik przeprowadzi Cię przez każdą metodę uruchamiania skryptów powłoki w Linux — od podstawowego wykonania po procesy w tle i planowanie cron — z najlepszymi praktykami, które sprawdzają się w środowiskach produkcyjnych.
Co to jest plik .sh w Linux?
Plik .sh to zwykły skrypt tekstowy napisany w języku powłoki (zazwyczaj Bash lub POSIX sh), który powłoka Linux interpretuje i wykonuje linia po linii. Skrypty powłoki są używane do:
- Automatyzacji powtarzających się zadań administracji systemu
- Wdrażania i konfiguracji aplikacji
- Zarządzania użytkownikami, uprawnieniami i systemami plików
- Planowania zadań konserwacyjnych, takich jak kopie zapasowe i rotacja dzienników
- Uruchamiania nowych serwerów po aprowizacji
Jeśli zarządzasz środowiskiem VPS Hosting lub Dedicated Server, skrypty powłoki są niezbędną umiejętnością, która zaoszczędzi Ci wiele godzin pracy ręcznej każdego tygodnia.
Wymagania wstępne
Przed uruchomieniem jakiegokolwiek pliku .sh upewnij się, że masz:
- Dostęp do terminala Linux (lokalnie lub przez SSH)
- Konto użytkownika z odpowiednimi uprawnieniami
- Plik skryptu już w systemie (utworzony lokalnie lub przesłany przez SCP/SFTP)
Metoda 1: Uczyń plik wykonywalnym za pomocą chmod
Domyślnie nowo utworzone lub pobrane pliki .sh nie mają uprawnień do wykonania. Przed uruchomieniem skryptu jako programu musisz jawnie przyznać prawa do wykonania za pomocą polecenia chmod.
chmod +x script.shAby sprawdzić, czy uprawnienia zostały zastosowane prawidłowo:
ls -l script.shPowinieneś zobaczyć dane wyjściowe podobne do:
-rwxr-xr-x 1 user user 1024 Jun 10 14:32 script.shFlagi x potwierdzają, że plik jest teraz wykonywalny przez właściciela, grupę i innych.
> Wskazówka bezpieczeństwa: Jeśli chcesz ograniczyć wykonanie tylko do właściciela pliku, użyj chmod 700 script.sh zamiast chmod +x.
Metoda 2: Uruchom skrypt przy użyciu ścieżki względnej lub bezwzględnej
Po uczynieniu pliku wykonywalnym możesz go uruchomić bezpośrednio z terminala.
Używając ścieżki względnej (bieżący katalog)
Jeśli skrypt znajduje się w bieżącym katalogu roboczym, poprzedź go znakiem ./:
./script.shZnak ./ mówi powłoce, aby szukała w bieżącym katalogu zamiast przeszukiwać system $PATH.
Używając ścieżki bezwzględnej
Jeśli skrypt jest przechowywany w innej lokalizacji, podaj jego pełną ścieżkę:
/home/user/scripts/script.shlub
/usr/local/bin/script.shUżywanie ścieżek bezwzględnych jest szczególnie ważne przy uruchamianiu skryptów z zadań cron lub innych zautomatyzowanych kontekstów, gdzie katalog roboczy może się różnić.
Metoda 3: Uruchom skrypt za pomocą bash lub sh (nie wymagane uprawnienie do wykonania)
Możesz wywołać skrypt powłoki, jawnie wywołując interpreter, nawet jeśli plik nie ma uprawnień do wykonania. Jest to szczególnie przydatne do szybkiego testowania skryptu przed uczynieniem go trwale wykonywalnym.
bash script.shlub dla skryptów zgodnych z POSIX:
sh script.shRóżnica między bash a sh
| Polecenie | Interpreter | Obsługuje funkcje specyficzne dla Bash |
|---|---|---|
bash script.sh | GNU Bash | Tak |
sh script.sh | POSIX sh (często dash na Ubuntu) | Nie |
Jeśli Twój skrypt używa składni specyficznej dla Bash, takiej jak tablice, warunkowe [[ ]] lub podstawienie procesów, zawsze używaj bash zamiast sh.
Metoda 4: Uruchom skrypt jako superuser (sudo)
Niektóre skrypty wymagają uprawnień na poziomie root do modyfikacji plików systemowych, zarządzania usługami, instalacji pakietów lub zmiany konfiguracji sieci. Użyj sudo do podniesienia uprawnień:
sudo ./script.shlub przekaż skrypt bezpośrednio do bash z podwyższonymi prawami:
sudo bash script.shWażne zagadnienia bezpieczeństwa
- Nigdy nie uruchamiaj skryptu jako root bez wcześniejszego przeczytania go. Złośliwy lub źle napisany skrypt z dostępem sudo może spowodować nieodwracalne uszkodzenie systemu.
- Preferuj uruchamianie skryptów z minimalnymi wymaganymi uprawnieniami.
- Jeśli skrypt musi tylko pisać do określonego katalogu, rozważ dostosowanie uprawnień katalogu zamiast uruchamiania całego skryptu jako root.
Metoda 5: Uruchom skrypt w tle
Domyślnie uruchomienie skryptu w terminalu blokuje Twoją sesję do czasu zakończenia skryptu. W przypadku długotrwałych zadań — takich jak duże transfery plików, migracje baz danych lub kompilacje serwerów — będziesz chciał wysłać proces do tła.
Używając operatora &
./script.sh &Symbol & rozwidla proces do tła i natychmiast zwraca kontrolę do Twojego terminala. Powłoka wypisuje PID (identyfikator procesu) zadania w tle, który możesz użyć do monitorowania lub zakończenia go później.
Utrzymuj skrypt uruchomiony po wylogowaniu za pomocą nohup
Jeśli rozłączysz się z SSH, zadania w tle uruchomione za pomocą & zwykle się zakończą. Użyj nohup aby tego uniknąć:
nohup ./script.sh &Dane wyjściowe są domyślnie przekierowywane do nohup.out. Aby określić niestandardowy plik dziennika:
nohup ./script.sh > /var/log/myscript.log 2>&1 &Monitoruj zadania w tle
jobs # List background jobs in the current session
ps aux | grep script.sh # Find the process by name
kill PID # Terminate a specific background processMetoda 6: Zaplanuj wykonanie skryptu za pomocą Cron
W przypadku powtarzających się zadań — nightly backups, cotygodniowe czyszczenia, godzinowe kontrole zdrowia — wbudowany harmonogram cron Linux jest standardowym rozwiązaniem.
Otwórz edytor Crontab
crontab -eSkładnia 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)Praktyczne przykłady Cron
| Harmonogram | Wyrażenie Cron | Przykład przypadku użycia |
|---|---|---|
| Codziennie o 2:00 AM | 0 2 * * * | Nocna kopia zapasowa bazy danych |
| Każdy poniedziałek o 6:00 AM | 0 6 * * 1 | Cotygodniowa rotacja dzienników |
| Co godzinę | 0 * * * * | Sprawdzenie monitorowania czasu pracy |
| Co 15 minut | */15 * * * * | Odświeżenie pamięci podręcznej |
| Przy ponownym uruchomieniu systemu | @reboot | Uruchomienie usługi lub skryptu przy starcie |
Przykład: Zautomatyzowana codziennie kopia zapasowa
0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1To uruchamia backup.sh codziennie o 2:00 AM i dołącza zarówno standardowe dane wyjściowe, jak i błędy do pliku dziennika w celu audytu.
> Wskazówka profesjonalna: Zawsze używaj ścieżek bezwzględnych w wpisach cron. Cron działa ze minimalnym środowiskiem i może nie mieć dostępu do tego samego $PATH co Twoja interaktywna powłoka.
Metoda 7: Źródło skryptu (Uruchom w kontekście bieżącej powłoki)
Jest jeszcze jedna metoda wykonania warta poznania: sourcing skryptu. W przeciwieństwie do powyższych metod, sourcing uruchamia skrypt w bieżącej sesji powłoki zamiast generować podpowłokę. Oznacza to, że wszystkie zmienne lub funkcje zdefiniowane w skrypcie utrzymują się w Twoim bieżącym środowisku.
source script.shlub równoważnie:
. script.shJest to powszechnie używane do ładowania zmiennych środowiskowych, aktywacji wirtualnych środowisk lub stosowania zmian konfiguracji do bieżącej sesji.
Rozwiązywanie typowych błędów
| Komunikat o błędzie | Prawdopodobna przyczyna | Rozwiązanie |
|---|---|---|
Permission denied | Plik nie ma uprawnień do wykonania | Uruchom chmod +x script.sh |
No such file or directory | Zła ścieżka lub brakujący plik | Sprawdź ścieżkę za pomocą ls i pwd |
bad interpreter: No such file or directory | Zła linia shebang (np. zakończenia linii Windows) | Uruchom dos2unix script.sh aby naprawić zakończenia linii |
command not found | Skrypt nie w $PATH i bez prefiksu ./ | Użyj ./script.sh lub pełnej ścieżki bezwzględnej |
syntax error near unexpected token | Skrypt napisany dla bash ale uruchomiony z sh | Użyj bash script.sh jawnie |
Najlepsze praktyki pisania i uruchamiania skryptów powłoki
Postępowanie zgodnie z tymi praktykami sprawi, że Twoje skrypty będą bezpieczniejsze, łatwiejsze w utrzymaniu i łatwiejsze do debugowania — szczególnie w środowiskach serwerowych.
1. Zawsze zacznij od linii Shebang
Pierwsza linia każdego skryptu powinna deklarować interpreter:
#!/bin/bashlub dla maksymalnej przenośności:
#!/usr/bin/env bash2. Włącz tryb ścisły
Dodaj to blisko szczytu każdego skryptu produkcyjnego:
set -euo pipefail-e— Wyjdź natychmiast, jeśli jakiekolwiek polecenie się nie powiedzie-u— Traktuj niezdefiniowane zmienne jako błędy-o pipefail— Złap błędy w poleciach potokowych
3. Przeczytaj skrypt przed jego uruchomieniem
Nigdy nie wykonuj pliku .sh z zewnętrznego lub niezaufanego źródła bez wcześniejszego przejrzenia jego zawartości:
cat script.shlub otwórz go w edytorze tekstu. Jest to szczególnie krytyczne przy uruchamianiu z sudo.
4. Używaj komentarzy obficie
#!/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. Organizuj skrypty w dedykowanych katalogach
| Katalog | Rekomendowane użycie |
|---|---|
/usr/local/bin/ | Skrypty dostępne dla wszystkich użytkowników w całym systemie |
~/scripts/ lub ~/bin/ | Osobiste skrypty użytkownika |
/opt/scripts/ | Skrypty automatyzacji specyficzne dla aplikacji |
/etc/cron.daily/ | Skrypty do uruchomienia codziennie przez cron |
6. Rejestruj dane wyjściowe skryptu
Zawsze przek
