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 siguranță sau configurezi un server nou aprovizionat, .sh files te lasă să grupezi secvențe complexe de comenzi într-un singur executabil repetabil. Acest ghid te ghidează prin fiecare metodă de rulare 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 text simplu scris în limbajul shell (de obicei Bash sau POSIX sh) pe care shell-ul Linux îl interpretează și execută linie cu linie. Script-urile shell sunt folosite pentru:
- Automatizarea sarcinilor repetitive de administrare a sistemului
- Implementarea și configurarea aplicațiilor
- Gestionarea utilizatorilor, permisiunilor și sistemelor de fișiere
- Programarea lucrărilor de întreținere, cum ar fi copiile de rezervă și rotația jurnalelor
- Inițializarea serverelor noi după aprovizionare
Dacă gestionați un mediu VPS Hosting sau un Dedicated Server, script-urile shell sunt o abilitate indispensabilă care vă va economisi ore de muncă manuală în fiecare săptămână.
Condiții preliminare
Înainte de a executa orice fișier .sh, asigurați-vă că aveți:
- 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: Faceți 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 rula scriptul ca program, trebuie să acordați î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ă vedeți o ieșire similară cu:
-rwxr-xr-x 1 user user 1024 Jun 10 14:32 script.shIndicatorii x confirmă că fișierul este acum executabil de către proprietar, grup și alții.
> Sfat de securitate: Dacă doriți să restricționați execuția doar la proprietarul fișierului, utilizați chmod 700 script.sh în loc de chmod +x.
Metoda 2: Executați scriptul folosind o cale relativă sau absolută
Odată ce fișierul este executabil, îl puteți rula direct din terminal.
Folosind o cale relativă (directorul curent)
Dacă scriptul se află în directorul dvs. de lucru curent, prefixați-l cu ./:
./script.sh./ spune shell-ului să caute în directorul curent în loc să caute în sistemul $PATH.
Folosind o cale absolută
Dacă scriptul este stocat într-o altă locație, furnizați calea sa completă:
/home/user/scripts/script.shsau
/usr/local/bin/script.shUtilizarea căilor absolute este deosebit de importantă atunci când executați scripturi din cron jobs sau alte contexte automatizate în care directorul de lucru poate diferi.
Metoda 3: Executați scriptul cu bash sau sh (Permisiune de execuție nu este necesară)
Puteți invoca un script shell apelând 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 POSIX:
sh script.shDiferența dintre bash și sh
| Comandă | Interpret | Suportă funcții specifice Bash |
|---|---|---|
bash script.sh | GNU Bash | Da |
sh script.sh | POSIX sh (adesea dash pe Ubuntu) | Nu |
Dacă scriptul dvs. utilizează sintaxă specifică Bash, cum ar fi matrici, [[ ]] condiționali, sau substituția proceselor, utilizați întotdeauna bash în loc de sh.
Metoda 4: Rulați scriptul ca Superuser (sudo)
Unele scripturi necesită privilegii la nivel de root pentru a modifica fișierele de sistem, a gestiona serviciile, a instala pachete sau a schimba configurațiile de rețea. Utilizați sudo pentru a ridica permisiunile:
sudo ./script.shsau transmiteți scriptul direct la bash cu drepturi ridicate:
sudo bash script.shConsiderații importante de securitate
- Nu rulați 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.
- Preferați rularea scripturilor cu privilegiile minime necesare.
- Dacă un script trebuie doar să scrie într-un anumit director, luați în considerare ajustarea permisiunilor directorului în loc să rulați întregul script ca root.
Metoda 5: Rulați scriptul în fundal
În mod implicit, rularea unui script în terminal blochează sesiunea dvs. până când scriptul se completează. Pentru sarcini cu durată lungă — cum ar fi transferuri de fișiere mari, migrări de baze de date sau construcții de servere — veți dori să trimiteți procesul în fundal.
Folosind operatorul &
./script.sh &Simbolul & bifurcă procesul în fundal și returnează imediat controlul terminalului dvs. Shell-ul tipărește PID-ul (ID-ul procesului) al jobului din fundal, pe care îl puteți utiliza pentru a-l monitoriza sau termina mai târziu.
Păstrați scriptul în execuție după deconectare cu nohup
Dacă vă deconectați de la SSH, joburile din fundal lansate cu & vor fi de obicei terminate. Utilizați 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 &Monitorizați 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: Programarea Execuției Scripturilor cu Cron
Pentru sarcini recurente — copii de siguranță noctune, curățări săptămânale, verificări de sănătate orare — planificatorul cron încorporat al Linux este soluția standard.
Deschideți 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
| Programare | Expresie Cron | Caz de Utilizare |
|---|---|---|
| În fiecare zi la 2:00 AM | 0 2 * * * | Copie de siguranță nocturnă a bazei de date |
| În fiecare luni la 6:00 AM | 0 6 * * 1 | Rotația 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 | Pornirea unui serviciu sau script la boot |
Exemplu: Copie de Siguranță 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: Utilizați întotdeauna căi absolute în intrările cron. Cron se execută cu un mediu minimal și poate să nu aibă acces la același $PATH ca shell-ul interactiv.
Metoda 7: Sursă unui Script (Rulare în Contextul Shell-ului Curent)
Există încă o metodă de execuție care merită cunoscută: sourcing unui script. Spre deosebire de metodele de mai sus, sourcing-ul rulează scriptul în sesiunea shell-ului curent în loc să genereze un subshell. Aceasta înseamnă că orice variabile sau funcții definite în script persistă în mediul dvs. curent.
source script.shsau echivalent:
. script.shAceasta este frecvent utilizată pentru încărcarea variabilelor de mediu, activarea mediilor virtuale sau aplicarea modificărilor de configurare sesiunii curente.
Depanare Erori Comune
| Mesaj de Eroare | Cauza Probabilă | Soluție |
|---|---|---|
Permission denied | Fișierul nu are permisiune de execuție | Rulați chmod +x script.sh |
No such file or directory | Cale greșită sau fișier lipsă | Verificați calea cu ls și pwd |
bad interpreter: No such file or directory | Linie shebang greșită (de ex., terminații de linie Windows) | Rulați dos2unix script.sh pentru a repara terminațiile de linie |
command not found | Script nu este în $PATH și nu are prefix ./ | Utilizați ./script.sh sau cale absolută completă |
syntax error near unexpected token | Script scris pentru bash dar rulat cu sh | Utilizați bash script.sh în mod explicit |
Cele mai bune practici pentru scrierea și rularea scripturilor Shell
Urmând aceste practici, scripturile tale vor fi mai sigure, mai ușor de întreținut și mai ușor de debugat — în special în mediile de server.
1. Întotdeauna începe cu o linie Shebang
Prima linie a fiecărui script ar trebui să declare interpretatorul:
#!/bin/bashsau pentru portabilitate maximă:
#!/usr/bin/env bash2. Activează Strict Mode
Adaugă aceasta aproape de î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 comenzile cu pipe
3. Citește scriptul înainte de a-l rula
Nu executa niciodată un fișier .sh din surse externe sau de încredere redusă 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 rulezi 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 rulat zilnic prin cron |
6. Înregistrează 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 disponibilă unde greșelile nu vor cauza timp de inactivitate.
Executarea Shell Scripts pe un Server Linux: Considerații Practice
Atunci când rulați scripturi pe un server Linux la distanță — indiferent dacă este un mediu partajat sau o mașină dedicată — intervin câțiva factori suplimentari:
- Acces SSH: Majoritatea scripturilor executate pe server se realizează prin SSH. Instrumente precum
screensautmuxvă permit să mențineți sesiuni persistente, astfel încât scripturile cu execuție lungă să supraviețuiască deconexiunilor. - Permisiuni utilizator: În mediile de hosting partajat, capacitatea dvs. de a executa scripturi poate fi limitată. Un VPS cu cPanel vă oferă acces complet root și control deplin asupra execuției scripturilor.
- Implementări automate: Combinați shell scripturi cu cron jobs pentru a automatiza implementările, reînnoirile de certificate (deosebit de utile alături de SSL Certificates) și sarcinile de întreținere de rutină.
- Variabile de mediu: Scripturile care rulează prin cron sau SSH pot să nu moștenească mediul shell-ului dvs. interactiv. Definiți toate variabilele necesare în mod explicit în script sau sursă un fișier de profil.
Referință rapidă: Toate metodele în privința
| Metoda | Comandă | Caz de utilizare |
|---|---|---|
| Execută cu permisiune | chmod +x script.sh && ./script.sh | Execuție standard |
| Rulează cu bash | bash script.sh | Nu este necesară permisiunea de execuție |
| Rulează cu sh | sh script.sh | Scripturi compatibile POSIX |
| Rulează ca root | sudo ./script.sh | Scripturi care necesită privilegii ridicate |
| Rulează în fundal | ./script.sh & | Execuție fără blocare |
| Rulează persistent | nohup ./script.sh & | Supraviețuiți deconectării SSH |
| Programează cu cron | crontab -e | Sarcini automate recurente |
| Sursă a scriptului | source script.sh | Aplicați modificări shell-ului curent |
Concluzie
Executarea fișierelor .sh în Linux este o abilitate fundamentală care deblochează puterea completă a automatizării sistemului. Fluxul de lucru principal este simplu: acordați permisiunea de execuție cu chmod +x, apoi rulați scriptul cu ./script.sh sau bash script.sh. Pentru mediile de producție, combinați căile absolute, modul strict, jurnalizarea și planificarea cron pentru a construi conducte de automatizare robuste și fiabile.
Dacă gestionați scripturi pe un server, calitatea infrastructurii dvs. de hosting contează. VPS Hosting și Dedicated Servers ale AlexHost vă oferă acces complet root, timp de funcționare stabil și performanța de care aveți nevoie pentru a executa cu încredere sarcinile de automatizare — indiferent dacă planificați copii de siguranță nocturne, implementați aplicații sau gestionați fluxuri de lucru complexe cu mai multe scripturi.
la toate serviciile de găzduire