Cum să rulezi un fișier .sh în Linux: Ghid complet pentru începători și administratori de sisteme
Shell scripts sunt coloana vertebrală a automatizării Linux. Indiferent dacă implementezi o aplicație web, programezi copii de rezervă sau configurezi un server nou aprovizionat, .sh fișierele îți permit să grupezi secvențe complexe de comenzi într-un singur executabil repetabil. Acest ghid te ghidează prin fiecare metodă de executare a shell scripts în Linux — de la execuția de bază la procese în fundal și programarea cron — cu cele mai bune practici care se mențin în mediile de producție.
Ce este un fișier .sh în Linux?
Un fișier .sh este un script în text simplu scris în limbaj shell (de obicei Bash sau POSIX sh) pe care shell-ul Linux îl interpretează și execută linie cu linie. Shell scripts sunt utilizate pentru:
- Automatizarea sarcinilor repetitive de administrare a sistemului
- Implementarea și configurarea aplicațiilor
- Gestionarea utilizatorilor, permisiunilor și sistemelor de fișiere
- Programarea sarcinilor de întreținere cum ar fi copiile de rezervă și rotația jurnalelor
- Bootstrapping a serverelor noi după aprovizionare
Dacă gestionezi un mediu VPS Hosting sau un Server Dedicat, scripting-ul shell este o abilitate indispensabilă care îți va economisi ore de muncă manuală în fiecare săptămână.
Cerințe preliminare
Înainte de a executa orice fișier .sh, asigură-te că ai:
- Acces la un terminal Linux (local sau prin SSH)
- Un cont de utilizator cu permisiuni corespunzătoare
- Fișierul script deja pe sistem (creat local sau transferat prin SCP/SFTP)
Metoda 1: Fă fișierul executabil cu chmod
În mod implicit, fișierele .sh nou create sau descărcate nu au permisiuni de execuție. Înainte de a executa scriptul ca program, trebuie să acorzi în mod explicit drepturi de execuție folosind comanda chmod.
chmod +x script.shPentru a verifica dacă permisiunile au fost aplicate corect:
ls -l script.shAr trebui să vezi o ieșire similară cu:
-rwxr-xr-x 1 user user 1024 Jun 10 14:32 script.shSteagurile x confirmă că fișierul este acum executabil de proprietar, grup și alții.
> Sfat de securitate: Dacă dorești să restricționezi execuția doar la proprietarul fișierului, folosește chmod 700 script.sh în loc de chmod +x.
Metoda 2: Execută scriptul folosind o cale relativă sau absolută
Odată ce fișierul este executabil, îl poți executa direct din terminal.
Folosind o cale relativă (directorul curent)
Dacă scriptul se află în directorul tău de lucru curent, prefixează-l cu ./:
./script.sh./ spune shell-ului să caute în directorul curent mai degrabă decât să caute în $PATH sistemului.
Folosind o cale absolută
Dacă scriptul este stocat într-o altă locație, furnizează calea sa completă:
/home/user/scripts/script.shsau
/usr/local/bin/script.shUtilizarea căilor absolute este deosebit de importantă atunci când execuți scripturi din joburi cron sau alte contexte automatizate unde directorul de lucru poate diferi.
Metoda 3: Execută scriptul cu bash sau sh (nu este necesară permisiunea de execuție)
Poți invoca un shell script apelând în mod explicit interpretul, chiar dacă fișierul nu are permisiuni de execuție. Acest lucru este deosebit de util pentru testarea rapidă a unui script înainte de a-l face permanent executabil.
bash script.shsau, pentru scripturi compatibile cu POSIX:
sh script.shDiferența dintre bash și sh
| Comandă | Interpret | Suportă caracteristici specifice Bash |
|---|---|---|
bash script.sh | GNU Bash | Da |
sh script.sh | POSIX sh (adesea dash pe Ubuntu) | Nu |
Dacă scriptul tău folosește sintaxă specifică Bash cum ar fi matrici, condiționale [[ ]] sau substituție de proces, folosește întotdeauna bash mai degrabă decât sh.
Metoda 4: Execută scriptul ca superuser (sudo)
Unele scripturi necesită privilegii la nivel root pentru a modifica fișierele de sistem, a gestiona serviciile, a instala pachete sau a schimba configurații de rețea. Folosește sudo pentru a ridica permisiunile:
sudo ./script.shsau transmite scriptul direct la bash cu drepturi ridicate:
sudo bash script.shConsiderații importante de securitate
- Nu executa niciodată un script ca root fără a-l citi mai întâi. Un script rău intenționat sau prost scris cu acces sudo poate cauza daune ireversibile sistemului.
- Preferă executarea scripturilor cu privilegiile minime necesare.
- Dacă un script trebuie doar să scrie într-un anumit director, ia în considerare ajustarea permisiunilor directorului mai degrabă decât executarea întregului script ca root.
Metoda 5: Execută scriptul în fundal
În mod implicit, executarea unui script în terminal blochează sesiunea ta până când scriptul se completează. Pentru sarcini de lungă durată — cum ar fi transferuri mari de fișiere, migrări de baze de date sau construcții de servere — vei dori să trimiți procesul în fundal.
Folosind operatorul &
./script.sh &Simbolul & bifurcă procesul în fundal și returnează imediat controlul terminalului tău. Shell-ul tipărește PID-ul (ID-ul procesului) jobului din fundal, pe care îl poți folosi pentru a-l monitoriza sau termina mai târziu.
Ține scriptul în execuție după logout cu nohup
Dacă te deconectezi de la SSH, joburile din fundal lansate cu & se vor termina de obicei. Folosește nohup pentru a preveni acest lucru:
nohup ./script.sh &Ieșirea este redirecționată la nohup.out în mod implicit. Pentru a specifica un fișier jurnal personalizat:
nohup ./script.sh > /var/log/myscript.log 2>&1 &Monitorizează joburile din fundal
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: Programează execuția scriptului cu Cron
Pentru sarcini recurente — copii de rezervă noctune, curățări săptămânale, verificări de sănătate orare — planificatorul cron încorporat al Linux este soluția standard.
Deschide editorul Crontab
crontab -eSintaxa 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)Exemple practice de Cron
| Program | Expresie Cron | Caz de utilizare exemplu |
|---|---|---|
| În fiecare zi la 2:00 AM | 0 2 * * * | Copie de rezervă nocturnă a bazei de date |
| În fiecare luni la 6:00 AM | 0 6 * * 1 | Rotație săptămânală a jurnalelor |
| În fiecare oră | 0 * * * * | Verificare de monitorizare a timpului de funcționare |
| La fiecare 15 minute | */15 * * * * | Reîmprospătare cache |
| La repornirea sistemului | @reboot | Pornire serviciu sau script la boot |
Exemplu: Copie de rezervă zilnică automatizată
0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1Aceasta execută backup.sh în fiecare zi la 2:00 AM și adaugă atât ieșirea standard cât și erorile într-un fișier jurnal pentru audit.
> Sfat profesional: Folosește întotdeauna căi absolute în intrările cron. Cron rulează cu un mediu minimal și poate să nu aibă acces la același $PATH ca shell-ul tău interactiv.
Metoda 7: Sursează un script (execută în contextul shell-ului curent)
Există o altă metodă de execuție care merită să o cunoști: sourcing a unui script. Spre deosebire de metodele de mai sus, sourcing-ul execută scriptul în sesiunea shell-ului curent mai degrabă decât să genereze un subshell. Aceasta înseamnă că orice variabile sau funcții definite în script persistă în mediul tău curent.
source script.shsau echivalent:
. script.shAceasta este utilizată în mod obișnuit pentru încărcarea variabilelor de mediu, activarea mediilor virtuale sau aplicarea modificărilor de configurare sesiunii curente.
Depanarea erorilor comune
| Mesaj de eroare | Cauza probabilă | Soluție |
|---|---|---|
Permission denied | Fișierul nu are permisiune de execuție | Execută chmod +x script.sh |
No such file or directory | Cale greșită sau fișier lipsă | Verifică calea cu ls și pwd |
bad interpreter: No such file or directory | Linie shebang greșită (de ex., terminații de linie Windows) | Execută dos2unix script.sh pentru a fixa terminațiile de linie |
command not found | Script nu este în $PATH și nu are prefix ./ | Folosește ./script.sh sau cale absolută completă |
syntax error near unexpected token | Script scris pentru bash dar executat cu sh | Folosește bash script.sh în mod explicit |
Cele mai bune practici pentru scrierea și executarea shell scripts
Urmând aceste practici, scripturile tale vor fi mai sigure, mai ușor de întreținut și mai ușor de depanat — mai ales în mediile de server.
1. Începe întotdeauna cu o linie Shebang
Prima linie a fiecărui script ar trebui să declare interpretul:
#!/bin/bashsau pentru portabilitate maximă:
#!/usr/bin/env bash2. Activează modul strict
Adaugă aceasta lângă începutul fiecărui script de producție:
set -euo pipefail-e— Ieși imediat dacă orice comandă eșuează-u— Tratează variabilele nesetate ca erori-o pipefail— Prinde eșecurile în comenzi cu pipe
3. Citește scriptul înainte de a-l executa
Nu executa niciodată un fișier .sh din surse externe sau nesigure fără a-i revizui mai întâi conținutul:
cat script.shsau deschide-l într-un editor de text. Aceasta este deosebit de critică atunci când execuți cu sudo.
4. Folosește comentarii în abundență
#!/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. Organizează scripturile în directoare dedicate
| Director | Utilizare recomandată |
|---|---|
/usr/local/bin/ | Scripturi la nivel de sistem accesibile tuturor utilizatorilor |
~/scripts/ sau ~/bin/ | Scripturi personale ale utilizatorului |
/opt/scripts/ | Scripturi de automatizare specifice aplicației |
/etc/cron.daily/ | Scripturi de executat zilnic prin cron |
6. Jurnalizează ieșirea scriptului
Redirecționează întotdeauna ieșirea către un fișier jurnal pentru scripturile care rulează nesupravegheat:
./script.sh >> /var/log/script.log 2>&17. Testează scripturile într-un mediu sigur mai întâi
Înainte de a implementa un script pe un server de producție, testează-l pe un mediu de staging sau pe o instanță VPS jetabilă unde greșelile nu vor cauza timp de inactivitate.
Executarea shell scripts pe un server Linux: considerații practice
Atunci când execuți scripturi pe un server Linux la distanță — indiferent dacă este un mediu partajat sau o mașină dedicată — intră în joc câțiva factori suplimentari:
- Acces SSH: Majoritatea scripting-ului pe server se întâmplă prin SSH. Instrumente cum ar fi
screensautmuxîți permit să menții sesiuni persistente, astfel încât scripturile de lungă durată să supraviețuiască deconexiunilor. - Permisiuni utilizator: În mediile de găzduire
