Niciun rezultat gasit. Incearca alt termen.
Invata Linux & Bash
de la zero
Enciclopedia completa pentru incepatori si viitori sysadmin. De la prima comanda pana la scripting avansat, securitate si diagnoza.
0. Ce este Linux si cum functioneaza
Teorie esentialaKernel, Shell, Terminal
Linux = kernel (nucleul) + sistem de operare GNU. Bash (Bourne Again Shell) este interpretorul de comenzi implicit pe majoritatea distributiilor. Terminalul este fereastra prin care comunici cu shell-ul.
Distributii populare: Ubuntu/Debian (recomandat incepatori), CentOS/RHEL (servere enterprise), Arch (avansati), Kali (securitate). Comenzile din acest ghid functioneaza pe toate.
Tipuri de conturi
root | Superuser, acces total. Prompt: # |
user normal | Permisiuni limitate. Prompt: $ |
sudo | Ruleaza comanda ca root temporar |
Reguli de baza Linux
| Case-sensitive | Fisier.txt β fisier.txt |
| Fara spatii in nume | Foloseste _ sau - (ex: my_file.txt) |
| Fisiere ascunse | Incep cu punct: .bashrc .ssh/ |
| Totul e fisier | Dispozitive, retele, procese = fisiere in /dev /proc |
| Fara extensie obligatorie | script la fel de valid ca script.sh |
1. Prima conectare SSH & navigare initiala
Primul pasConectare la server
$ ssh user@192.168.1.100 # conectare cu user si IP $ ssh -p 2222 user@server.ro # port personalizat $ ssh -i ~/.ssh/cheie.pem user@IP # cu cheie privata $ exit # deconectare
Comenzi imediate dupa login
whoami | Afiseaza utilizatorul curent |
hostname | Numele serverului/calculatorului |
uname -a | Info kernel complet |
uptime | Cat timp ruleaza sistemul |
date | Data si ora curenta |
cal | Calendar lunar in terminal |
id | UID, GID si grupuri utilizator |
w | Cine e conectat si ce face |
last | Istoric login-uri |
echo $SHELL | Shell-ul activ (bash/zsh/sh) |
Nu lucra niciodata direct ca root pe un server de productie. Foloseste un user normal + sudo doar cand e nevoie.
2. Structura Filesystem Linux
HartΔ sistem/ | Radacina (root) β inceputul tuturor cailor |
/bin | Comenzi esentiale sistem (ls, cp, mv) |
/sbin | Comenzi admin sistem (fdisk, ifconfig) |
/etc | Fisiere de configurare sistem |
/home | Directoarele utilizatorilor (/home/andrei) |
/root | Home-ul userului root |
/var | Date variabile: loguri, baze de date, mail |
/tmp | Fisiere temporare, sterse la restart |
/usr | Programe si librarii utilizator |
/opt | Software instalat optional |
/dev | Dispozitive hardware (disk, usb, terminal) |
/proc | Info procese si kernel in timp real |
/sys | Interface kernel pentru hardware |
/mnt /media | Puncte de montare dispozitive externe |
/boot | Kernel si fisiere de boot (GRUB) |
Shortcut-uri importante: ~ = directorul tau home, . = directorul curent, .. = directorul parinte, - = directorul anterior.
3. Navigare & gestionare fisiere
Comenzi zilniceNavigare directoare
pwd | Afiseaza calea curenta (Print Working Directory) |
cd /etc | Mergi la /etc |
cd ~ | Mergi la home |
cd .. | Mergi un nivel sus |
cd - | Inapoi la directorul anterior |
cd ../../var | Cale relativa combinata |
Listare fisiere
ls | Lista fisiere in directorul curent |
ls -l | Lista detaliata (permisiuni, owner, size) |
ls -la | Include fisierele ascunse (. prefix) |
ls -lh | Size in format human-readable (KB, MB, GB) |
ls -lt | Sortat dupa data modificarii |
ls -lS | Sortat dupa marime |
ls -R | Recursiv (toate subdirectoarele) |
ls /etc/*.conf | Glob: toate fisierele .conf din /etc |
tree | Structura arborescenta (instalare: apt install tree) |
tree -L 2 | Maxim 2 nivele adancime |
Operatii pe fisiere & directoare
mkdir nou_dir | Creeaza director |
mkdir -p a/b/c | Creeaza structura completa (parinti inclusi) |
touch fisier.txt | Creeaza fisier gol sau actualizeaza timestamp |
cp sursa.txt dest.txt | Copiaza fisier |
cp -r dir1 dir2 | Copiaza director recursiv |
cp -rp dir1 dir2 | Copiaza cu permisiuni originale |
mv vechi.txt nou.txt | Redenumeste sau muta fisier |
mv fisier /alt/dir/ | Muta fisier in alt director |
rm fisier.txt | Sterge fisier pericol |
rm -r director/ | Sterge director recursiv pericol |
rm -rf /cale | Fortat, fara confirmare ATENTIE MAXIMA |
rmdir dir_gol | Sterge director gol (mai sigur) |
ln -s sursa link | Creeaza symlink (shortcut) |
ln sursa link_hard | Creeaza hard link |
file fisier | Detecteaza tipul fisierului |
stat fisier | Info detaliat: size, inode, timestamps |
du -sh director/ | Marimea unui director |
du -sh * | Marimea fiecarui element din curent |
Regula de aur: Niciodata rm -rf / sau rm -rf /* β sterge tot sistemul. Verifica de doua ori inainte de orice rm -rf. Foloseste trash-cli ca alternativa sigura.
4. Permisiuni fisiere
Securitate de bazaCiteste permisiunile
-rwxr-xr-- 1 andrei dev 4096 Jan 10 fisier.sh
βββββββββ
βββββ¬βββββββ¬βββββββ¬βββ
β β β βββ Others: r-- (citire)
β β ββββββββββ Group: r-x (citire+exec)
β βββββββββββββββββ Owner: rwx (toate)
βββββββββββββββββββββ Tip: - fisier, d director, l link
r = 4 | Citire (read) |
w = 2 | Scriere (write) |
x = 1 | Executie (execute) |
- = 0 | Permisiune absenta |
chmod β schimba permisiuni
chmod 755 script.sh | rwxr-xr-x (standard executabile) |
chmod 644 fisier.txt | rw-r--r-- (standard fisiere) |
chmod 700 director/ | rwx------ (doar owner) |
chmod 600 cheie.pem | rw------- (SSH keys) |
chmod +x script.sh | Adauga executie pentru toti |
chmod -w fisier | Elimina scriere |
chmod u+x,g-w fisier | Owner +exec, group -write |
chmod -R 755 dir/ | Recursiv pe tot directorul |
chown & chgrp
chown andrei fisier.txt | Schimba owner |
chown andrei:dev fisier | Schimba owner si grup |
chown -R andrei:web /var/www/ | Recursiv pentru tot |
chgrp dev fisier.txt | Schimba doar grupul |
Permisiuni speciale
chmod 4755 program | SetUID β ruleaza ca owner (ex: sudo) |
chmod 2755 director | SetGID β fisiere noi mostenesc grupul |
chmod 1777 /tmp | Sticky bit β doar owner poate sterge |
umask 022 | Masca default permisiuni fisiere noi |
5. Utilizatori & grupuri
Gestionare conturiuseradd andrei | Creeaza user nou (fara home by default pe unele distro) |
useradd -m -s /bin/bash andrei | Cu home dir si bash shell |
adduser andrei | Interactiv, mai prietenos (Debian/Ubuntu) |
passwd andrei | Seteaza/schimba parola |
usermod -aG sudo andrei | Adauga user in grupul sudo |
usermod -aG docker andrei | Adauga in grupul docker |
usermod -s /bin/bash andrei | Schimba shell-ul |
userdel andrei | Sterge user (pastreaza home) |
userdel -r andrei | Sterge user SI home-ul |
groupadd devops | Creeaza grup nou |
groupdel devops | Sterge grup |
groups andrei | Lista grupuri user |
cat /etc/passwd | Lista toti utilizatorii sistem |
cat /etc/group | Lista toate grupurile |
sudo su | Devin root temporar |
su - andrei | Comuta la userul andrei |
sudo -l | Ce comenzi pot rula cu sudo |
Fisierul /etc/sudoers controleaza accesul sudo. Editeaza-l NUMAI cu visudo, altfel risc de sistem blocat.
6. Cautare fisiere & continut
find, grep, locatefind β cautare avansata
find / -name "config.php" | Cauta dupa nume, tot sistemul |
find . -name "*.log" | Toate log-urile din directorul curent |
find /var -type f | Doar fisiere (nu directoare) |
find /var -type d | Doar directoare |
find . -size +100M | Fisiere mai mari de 100MB |
find . -size -1k | Fisiere mai mici de 1KB |
find . -mtime -7 | Modificate in ultimele 7 zile |
find . -mtime +30 | Nemodificate de peste 30 zile |
find . -perm 777 | Fisiere cu permisiuni 777 |
find . -user andrei | Fisiere detinute de andrei |
find /tmp -exec rm {} \; | Sterge rezultatele gasit |
find . -name "*.tmp" -delete | Sterge direct, mai rapid |
find . -empty | Fisiere si directoare goale |
find . -maxdepth 2 -name "*.sh" | Cauta maxim 2 nivele adancime |
grep β cauta in continut
grep "eroare" fisier.log | Cauta text in fisier |
grep -i "Error" fisier.log | Case-insensitive |
grep -r "password" /etc/ | Recursiv in director |
grep -n "text" fisier | Afiseaza numarul liniei |
grep -v "DEBUG" app.log | Invers: linii care NU contin |
grep -c "error" fisier.log | Numara liniile cu match |
grep -l "text" *.conf | Listeaza fisierele care contin |
grep -A 3 "error" | +3 linii dupa match (after) |
grep -B 3 "error" | +3 linii inainte de match (before) |
grep -E "err|warn|crit" | Regex extins, multiple pattern |
grep -w "root" | Cuvant exact (nu rootkit) |
grep -P "\d{4}" | Perl regex (numere 4 cifre) |
locate & which & whereis
locate fisier.conf | Cautare rapida din baza de date (updatedb) |
updatedb | Actualizeaza baza locate |
which python3 | Calea executabilului |
whereis nginx | Executabil + sursa + man pages |
type ls | Alias, builtin sau executabil? |
7. Vizualizare continut text
cat, less, head, tailcat fisier.txt | Afiseaza tot fisierul |
cat -n fisier.txt | Cu numere de linie |
cat file1 file2 > combined | Concateneaza fisiere |
less fisier.log | Vizualizare paginata (q=iesire, /=cauta) |
more fisier.txt | Paginat simplu (space=urmator) |
head fisier.txt | Primele 10 linii |
head -n 25 fisier.txt | Primele 25 linii |
head -c 500 fisier | Primii 500 bytes |
tail fisier.txt | Ultimele 10 linii |
tail -n 50 fisier.log | Ultimele 50 linii |
tail -f /var/log/syslog | Live monitoring log (Ctrl+C stop) |
tail -F fisier.log | Ca -f dar urmareste si rotirea fisierului |
wc fisier.txt | Linii, cuvinte, bytes |
wc -l fisier.txt | Doar numarul de linii |
wc -w fisier.txt | Doar numarul de cuvinte |
od -c fisier | Dump octal/hex (fisiere binare) |
xxd fisier | Hex dump cu ASCII |
In less: G = salt la sfarsit, g = salt la inceput, /cuvant = cauta, n = urmatorul rezultat, q = iesire.
8. Editare text: nano & vim
Editoare terminalnano β editorul prietenos
nano fisier.txt | Deschide fisier in nano |
Ctrl+O | Salveaza (write Out) |
Ctrl+X | Inchide |
Ctrl+W | Cauta text |
Ctrl+K | Taie linia |
Ctrl+U | Lipeste linia |
Alt+U | Undo |
Ctrl+G | Help |
vim β editorul puternic
vim fisier.txt | Deschide fisier |
i | Intra in modul INSERT (editare) |
Esc | Inapoi in modul NORMAL |
:w | Salveaza |
:q | Iesi |
:wq sau ZZ | Salveaza si iesi |
:q! | Iesi fara sa salvezi |
/cuvant | Cauta (n=urmator, N=anterior) |
:%s/vechi/nou/g | Inlocuieste in tot fisierul |
dd | Sterge linia curenta |
yy | Copiaza linia (yank) |
p | Lipeste (paste) |
u | Undo |
Ctrl+R | Redo |
gg | Prima linie |
G | Ultima linie |
:set number | Afiseaza numere linii |
9. Procesare text
awk, sed, sort, cutsed β stream editor
sed 's/vechi/nou/' fisier | Inlocuieste prima aparitie/linie |
sed 's/vechi/nou/g' fisier | Inlocuieste toate aparitiile |
sed -i 's/foo/bar/g' fisier | Inlocuieste in fisier direct |
sed '5d' fisier | Sterge linia 5 |
sed '/^#/d' fisier | Sterge liniile ce incep cu # |
sed -n '10,20p' fisier | Afiseaza liniile 10-20 |
sed 's/^/ /' fisier | Adauga spatii la inceput fiecare linie |
awk β procesare structurata
awk '{print $1}' fisier | Afiseaza primul camp (coloana 1) |
awk '{print $1,$3}' fisier | Camp 1 si camp 3 |
awk -F: '{print $1}' /etc/passwd | Separator : (lista useri) |
awk 'NR==5' fisier | Linia 5 |
awk 'NR>=5 && NR<=10' fisier | Liniile 5 la 10 |
awk '{sum+=$1} END{print sum}' | Suma coloanei 1 |
awk '/error/{print NR": "$0}' | Linii cu "error" + nr linie |
sort, cut, uniq, tr
sort fisier.txt | Sorteaza alfabetic |
sort -r fisier.txt | Sorteaza invers |
sort -n numere.txt | Sorteaza numeric |
sort -u fisier.txt | Sortat + elimina duplicate |
sort -k2 fisier.txt | Sorteaza dupa coloana 2 |
uniq fisier.txt | Elimina linii consecutive duplicate |
uniq -c fisier.txt | Numara aparitiile |
cut -d: -f1 /etc/passwd | Taie campul 1 cu separator : |
cut -c1-10 fisier | Primele 10 caractere/linie |
tr 'a-z' 'A-Z' | Transforma lowercase in uppercase |
tr -d '\r' | Sterge carriage return (WindowsβLinux) |
tr -s ' ' | Comprima spatii multiple in unul |
paste file1 file2 | Uneste linii din doua fisiere |
join file1 file2 | Join pe camp comun (ca SQL JOIN) |
diff file1 file2 | Diferente intre doua fisiere |
comm file1 file2 | Linii comune/unice intre fisiere sortate |
10. Redirectare & Pipe
Puterea shell-uluiRedirectare I/O
cmd > fisier | Redirecteaza output in fisier (suprascrie) |
cmd >> fisier | Adauga output la fisier (append) |
cmd < fisier | Citeste input din fisier |
cmd 2> erori.txt | Redirecteaza erorile (stderr) |
cmd > out.txt 2>&1 | Output + erori in acelasi fisier |
cmd >/dev/null | Ignora output complet |
cmd 2>/dev/null | Ignora erorile |
cmd &> tot.txt | Shorthand: stdout + stderr |
cat << EOF ... EOF | Here document (input multi-linie) |
cmd <<< "text" | Here string (input text direct) |
Pipe β inlantuire comenzi
Pipe | trimite output-ul unei comenzi ca input pentru urmatoarea. Este una dintre cele mai puternice caracteristici ale bash.
cat /etc/passwd | grep -v "#" | cut -d: -f1 | sort
Lista userilor fara comentarii, sortat alfabetic
du -sh /* 2>/dev/null | sort -rh | head -10
Gaseste cele mai mari directoare din radacina
ps aux | sort -nrk 3 | head -10
Sortat dupa coloana 3 (CPU%)
grep -i "error" app.log | awk '{print $NF}' | sort | uniq -c | sort -rn
Frecventa fiecarui tip de eroare
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
Top 20 IP-uri din log-ul Nginx
apt upgrade 2>&1 | tee /var/log/upgrade.log
Afiseaza si salveaza output in acelasi timp
find . -name "*.bak" | xargs rm -f
Gaseste si sterge toate fisierele .bak
11. Gestionare procese
ps, kill, bg, fgVizualizare procese
ps | Procese sesiune curenta |
ps aux | Toate procesele sistemului |
ps aux | grep nginx | Cauta procesul nginx |
ps -ef --forest | Arbore procese (parinte-copil) |
top | Monitorizare live (q=iesire) |
htop | Top interactiv (instalare: apt install htop) |
pgrep nginx | PID-ul procesului nginx |
pidof apache2 | PID-urile apache2 |
pstree | Arbore vizual procese |
lsof | Fisiere deschise de procese |
lsof -i :80 | Ce proces asculta pe portul 80 |
lsof -u andrei | Fisiere deschise de userul andrei |
Control procese
kill 1234 | Trimite SIGTERM (oprire gradata) la PID 1234 |
kill -9 1234 | SIGKILL β oprire fortata imediata |
killall nginx | Opreste toate procesele nginx |
pkill -f "python" | Opreste dupa pattern in comanda |
Ctrl+C | Opreste procesul din prim-plan |
Ctrl+Z | Suspenda procesul (il pune in background) |
bg | Continua procesul suspendat in background |
fg | Aduce procesul din background in prim-plan |
jobs | Lista procese background sesiune curenta |
nohup cmd & | Ruleaza in background, rezista la logout |
cmd & | Ruleaza direct in background |
nice -n 10 cmd | Porneste cu prioritate mai mica |
renice +5 -p 1234 | Schimba prioritatea unui proces in rulare |
12. Servicii systemd
systemctl, journalctlsystemctl β gestionare servicii
systemctl status nginx | Starea serviciului |
systemctl start nginx | Porneste serviciu |
systemctl stop nginx | Opreste serviciu |
systemctl restart nginx | Reporneste |
systemctl reload nginx | Reciteste config fara restart |
systemctl enable nginx | Porneste automat la boot |
systemctl disable nginx | Nu mai porneste la boot |
systemctl is-active nginx | active/inactive (pentru scripturi) |
systemctl list-units --type=service | Toate serviciile |
systemctl list-units --failed | Servicii cu erori |
systemctl daemon-reload | Reciteste unit files dupa modificare |
journalctl β loguri sistemd
journalctl -u nginx | Loguri serviciu nginx |
journalctl -u nginx -f | Loguri live (follow) |
journalctl -u nginx --since today | Din ziua curenta |
journalctl -n 50 | Ultimele 50 mesaje sistem |
journalctl -p err | Doar erorile (err/warn/info/debug) |
journalctl --disk-usage | Cat spatiu ocupa logurile |
journalctl --vacuum-size=500M | Curata loguri la 500MB |
13. Retea & conectivitate
ip, ss, curl, pingInfo retea
ip addr | Adresele IP ale interfetelor (inlocuieste ifconfig) |
ip addr show eth0 | Info interfata eth0 |
ip route | Tabela de rutare |
ip link | Starea interfetelor de retea |
ip neigh | Tabela ARP (vecini retea) |
ss -tuln | Porturi deschise (inlocuieste netstat) |
ss -tulnp | Cu procesele asociate |
ss -s | Sumar conexiuni |
netstat -tuln | Alternativa veche (net-tools) |
hostname -I | IP-ul local al masinii |
curl ifconfig.me | IP-ul public |
Testare & transfer
ping -c 4 google.com | Test conectivitate (4 pachete) |
traceroute google.com | Ruta catre destinatie |
mtr google.com | Traceroute + ping live (ping avansat) |
nslookup domain.com | Rezolutie DNS |
dig domain.com | Info DNS detaliat |
dig domain.com MX | Mail servers |
whois domain.com | Info domeniu |
curl -I https://site.ro | Headers HTTP raspuns |
curl -o fisier.zip URL | Descarca fisier |
curl -L URL | Urmareste redirectarile |
wget URL | Descarca fisier |
wget -r -np URL | Descarca recursiv site |
scp fisier.txt user@server:/dest | Copie securizata prin SSH |
rsync -avz /local/ user@server:/dest | Sincronizare fisiere (avansat) |
nc -zv server.com 80 | Test port deschis (netcat) |
nmap -sP 192.168.1.0/24 | Scan hosts activi in retea locala |
Configurare interfata (temporara)
# ip addr add 192.168.1.50/24 dev eth0 # adauga IP # ip link set eth0 up # activeaza interfata # ip link set eth0 down # dezactiveaza # ip route add default via 192.168.1.1 # gateway default
14. Disk & storage
df, fdisk, mount, lvmdf -h | Spatiu disponibil pe toate partitiile |
df -h /home | Spatiu pe partitia /home |
df -i | Utilizare inode-uri |
du -sh /var/log | Marimea directorului /var/log |
du -sh * | sort -rh | head | Top directoare mari |
lsblk | Lista block devices (discuri, partitii) |
lsblk -f | Cu filesystem si UUID |
fdisk -l | Info detaliat discuri root |
fdisk /dev/sdb | Partitionare disc sdb atentie |
parted /dev/sdb | Partitionare moderna (GPT suport) |
mkfs.ext4 /dev/sdb1 | Formateaza partitia ca ext4 |
mkfs.xfs /dev/sdb1 | Formateaza ca XFS |
mount /dev/sdb1 /mnt/data | Monteaza partitia |
umount /mnt/data | Demonteaza partitia |
mount -o remount,rw / | Remontare ca read-write |
blkid | UUID si tip filesystem pentru toate partitiile |
cat /etc/fstab | Montari automate la boot |
fsck /dev/sdb1 | Verifica si repara filesystem disc nemontata |
e2fsck -f /dev/sdb1 | Verificare fortata ext4 |
dd if=/dev/sda of=/dev/sdb | Cloneaza disc intreg atentie |
dd if=/dev/zero of=/dev/sdb bs=1M | Sterge disc complet |
hdparm -I /dev/sda | Info detaliat HDD/SSD |
smartctl -a /dev/sda | Sanatate disc SMART |
Verifica INTOTDEAUNA cu lsblk sau fdisk -l inainte de fdisk, mkfs sau dd. O greseala sterge date irecuperabil.
15. Monitorizare sistem
top, vmstat, iostattop | Monitor live: CPU, RAM, procese |
htop | Versiune imbunatatita top (culori, mouse) |
atop | Monitor avansat cu istoric |
free -h | Memorie RAM si SWAP utilizata |
vmstat 1 5 | Stats VM la 1 secunda, 5 iteratii |
iostat -x 1 | Stats I/O discuri in timp real |
iotop | Procese care scriu/citesc cel mai mult |
sar -u 1 10 | CPU la fiecare secunda, 10 ori (sysstat) |
mpstat | Stats pe fiecare core CPU |
dstat | Combinat: CPU+RAM+disk+retea live |
watch -n 2 df -h | Actualizeaza comanda la 2 secunde |
uptime | Load average 1m/5m/15m |
cat /proc/loadavg | Load average direct din kernel |
cat /proc/meminfo | Info detaliat memorie |
cat /proc/cpuinfo | Info detaliat CPU |
lscpu | Arhitectura CPU, nuclee, thread-uri |
lshw | Hardware complet sistem |
dmidecode | Info hardware din BIOS/DMI |
16. Gestionare pachete
apt, yum, dnf, snapAPT β Debian / Ubuntu
apt update | Actualizeaza lista pachete |
apt upgrade | Actualizeaza pachetele instalate |
apt full-upgrade | Upgrade cu rezolvare dependente |
apt install nginx | Instaleaza pachet |
apt remove nginx | Dezinstaleaza (pastreaza config) |
apt purge nginx | Dezinstaleaza + sterge configurile |
apt autoremove | Sterge dependentele nefolosite |
apt search nginx | Cauta pachete |
apt show nginx | Info pachet |
apt list --installed | Pachete instalate |
dpkg -l | Lista completa pachete instalate |
dpkg -i pachet.deb | Instaleaza .deb manual |
dpkg --get-selections | Export lista pachete instalate |
YUM/DNF β CentOS / Fedora / RHEL
dnf update | Actualizeaza toate pachetele |
dnf install nginx | Instaleaza pachet |
dnf remove nginx | Dezinstaleaza |
dnf search nginx | Cauta in repo |
dnf list installed | Pachete instalate |
rpm -ivh pachet.rpm | Instaleaza .rpm manual |
Snap & Flatpak
snap install vlc | Instaleaza snap |
snap list | Snap-uri instalate |
snap refresh | Actualizeaza toate snap-urile |
flatpak install flathub vlc | Instaleaza Flatpak |
17. Arhive & compresie
tar, gzip, ziptar β arhivare
tar -czf arhiva.tar.gz director/ | Creeaza arhiva gzip |
tar -cjf arhiva.tar.bz2 director/ | Creeaza arhiva bzip2 (mai mica) |
tar -cJf arhiva.tar.xz director/ | Creeaza arhiva xz (cea mai mica) |
tar -tzf arhiva.tar.gz | Listeaza continut fara extragere |
tar -xzf arhiva.tar.gz | Extrage arhiva gzip |
tar -xzf arhiva.tar.gz -C /dest/ | Extrage in director specific |
tar -xzf arhiva.tar.gz fisier.txt | Extrage un singur fisier |
tar -czf backup-$(date +%F).tar.gz /etc/ | Backup cu data in nume |
gzip, bzip2, zip, 7z
gzip fisier.txt | Comprima (creeaza .gz, sterge original) |
gzip -k fisier.txt | Comprima, pastreaza originalul |
gunzip fisier.txt.gz | Decomprima |
gzip -d fisier.gz | Alternativa decomprima |
zcat fisier.gz | Afiseaza continut fara extragere |
bzip2 fisier.txt | Comprima cu bzip2 |
bunzip2 fisier.bz2 | Decomprima bzip2 |
zip -r arhiva.zip director/ | Creeaza zip recursiv |
unzip arhiva.zip | Extrage zip |
unzip -l arhiva.zip | Listeaza continut zip |
7z a arhiva.7z director/ | Creeaza 7z (compresia maxima) |
7z x arhiva.7z | Extrage 7z |
18. Cron & automatizare
Sarcini programatecrontab β editare sarcini
crontab -e | Editeaza crontab userului curent |
crontab -l | Listeaza crontab |
crontab -r | Sterge tot crontab atentie |
sudo crontab -e | Crontab pentru root |
cat /etc/crontab | Crontab sistem |
ls /etc/cron.d/ | Fisiere cron individuale |
ls /etc/cron.daily/ | Scripturi rulate zilnic |
# Sintaxa cron: min ora zi luna zi_saptamana comanda # * * * * * (0-59)(0-23)(1-31)(1-12)(0-7) 0 2 * * * /home/andrei/backup.sh # Zilnic la 2:00 */5 * * * * /usr/bin/check.sh # La fiecare 5 minute 0 0 * * 1 /scripts/weekly.sh # Luni la miezul noptii 0 9-17 * * 1-5 /scripts/workhours.sh # Luni-Vineri 9-17, la ora fixa @reboot /scripts/startup.sh # La fiecare reboot @daily /scripts/daily.sh # Zilnic (echivalent 0 0 * * *)
at β programare o singura data
at 14:30 | Programeaza comanda pentru 14:30 |
at now + 30 minutes | Programeaza pentru 30 minute |
atq | Lista task-uri programate |
atrm 2 | Sterge task nr 2 |
19. Variabile de mediu & env
Configurare shellecho $PATH | Caile unde se cauta executabile |
echo $HOME | Directorul home al userului curent |
echo $USER | Utilizatorul curent |
echo $SHELL | Shell-ul activ |
echo $TERM | Tipul terminalului |
printenv | Toate variabilele de mediu |
env | Mediul complet |
set | Variabile shell + functii |
export VARNAME=valoare | Seteaza variabila de mediu |
export PATH=$PATH:/nou/dir | Adauga director la PATH |
unset VARNAME | Sterge variabila |
VARNAME=val cmd | Variabila temporara doar pentru comanda |
source ~/.bashrc | Reincarca configuratia bash |
. ~/.bashrc | Echivalent source |
Fisiere configurare bash
~/.bashrc | Configurat la fiecare shell interactiv |
~/.bash_profile | Configurat la login |
~/.bash_aliases | Alias-uri personale |
/etc/environment | Variabile globale sistem |
/etc/profile | Configurat global la login |
/etc/profile.d/*.sh | Configurari modulare sistem |
20. Bash scripting β bazele
AutomatizareStructura unui script bash
#!/bin/bash # Descriere: Primul meu script bash # Autor: Andrei | Data: 2025-01-10 # Variabile NUME="ZimbruL" DATA=$(date +%F) # Output echo "Salut, $NUME! Astazi este $DATA" # Verificare exit code comanda anterioara ls /inexistent 2>/dev/null echo "Exit code: $?" # 0=succes, altceva=eroare
Rulare script
chmod +x script.sh | Faci executabil |
./script.sh | Rulezi din directorul curent |
bash script.sh | Rulezi direct cu bash |
bash -x script.sh | Debug β afiseaza fiecare comanda |
bash -n script.sh | Verifica sintaxa fara executie |
shellcheck script.sh | Lint avansat pentru scripturi |
Variabile & substitutii
$1 $2 $3 # argumente pozitionale scriptului $@ # toate argumentele $# # numarul de argumente $0 # numele scriptului $$ # PID-ul scriptului curent $? # exit code ultima comanda ${VAR:-default} # valoare default daca VAR e goala ${#VAR} # lungimea variabilei ${VAR^^} # uppercase ${VAR,,} # lowercase $(comanda) # substitutie comanda (rezultatul ei) $((2 + 3)) # calcul aritmetic = 5
21. Conditionale & bucle bash
Logica scriptingif / else
#!/bin/bash FISIER="/etc/hosts" if [ -f "$FISIER" ]; then echo "Fisierul exista" elif [ -d "$FISIER" ]; then echo "Este un director" else echo "Nu exista" fi # Comparatii numerice: -eq -ne -lt -le -gt -ge if [ $NUM -gt 10 ]; then echo "mare"; fi # String comparatii: = != -z (gol) -n (negol) if [[ "$STR" == "test" ]]; then echo "match"; fi # Conditii fisiere: -f fisier -d dir -r readable -w writable -x exec -e exista -s nenul
Bucle for & while
# for clasic for i in 1 2 3 4 5; do echo "Nr: $i" done # for range for i in {1..10}; do echo $i; done # for pe fisiere for f in /etc/*.conf; do echo "Config: $f" done # while loop COUNT=0 while [ $COUNT -lt 5 ]; do echo "Count: $COUNT" COUNT=$(($COUNT + 1)) done # citire fisier linie cu linie while IFS= read -r linie; do echo ">> $linie" done < fisier.txt # until loop (opusul while) until [ $COUNT -eq 10 ]; do COUNT=$(($COUNT+1)) done
case statement
case $1 in start) echo "Pornire..." ;; stop) echo "Oprire..." ;; restart) echo "Restart..." ;; *) echo "Uz: $0 {start|stop|restart}" ;; esac
22. Functii & scripturi complete
Cod reutilizabil#!/bin/bash # Script backup simplu cu functii # Definire functie log() { echo "[$(date '+%H:%M:%S')] $1" } backup_dir() { local SOURCE="$1" local DEST="$2" local FNAME="backup-$(date +%F-%H%M).tar.gz" if [ ! -d "$SOURCE" ]; then log "EROARE: $SOURCE nu exista!" return 1 fi log "Backup $SOURCE -> $DEST/$FNAME" tar -czf "$DEST/$FNAME" "$SOURCE" && log "SUCCES!" || log "ESEC!" } # Apel functii log "Incepe backup-ul" backup_dir "/etc" "/var/backups" backup_dir "/home" "/var/backups" log "Gata!"
Tehnici utile in scripturi
set -e | Opreste scriptul la prima eroare |
set -u | Eroare la variabila nedefinita |
set -x | Debug: afiseaza comenzile executate |
set -euo pipefail | Combo recomandat pentru scripturi robuste |
trap 'cleanup' EXIT | Ruleaza functia la iesire (cleanup) |
trap 'echo Intrerupt!' INT | La Ctrl+C |
read -p "Confirmi? " VAR | Citeste input utilizator |
read -s -p "Parola: " PASS | Citeste parola (fara echo) |
exit 0 | Iesire cu succes |
exit 1 | Iesire cu eroare |
23. SSH & chei criptografice
Securitate conexiuneGenerare & gestionare chei SSH
ssh-keygen -t ed25519 | Genereaza pereche chei (recomandat) |
ssh-keygen -t rsa -b 4096 | Cheie RSA 4096 biti |
ssh-copy-id user@server | Copiaza cheia publica pe server |
cat ~/.ssh/id_ed25519.pub | Afiseaza cheia publica |
ssh-add ~/.ssh/cheie | Adauga cheie in ssh-agent |
ssh-agent bash | Porneste ssh-agent |
ssh-add -l | Lista chei incarcate in agent |
chmod 700 ~/.ssh | Permisiuni corecte director ssh |
chmod 600 ~/.ssh/authorized_keys | Permisiuni corecte chei autorizate |
Configurare SSH (~/.ssh/config)
# ~/.ssh/config β configurare conexiuni SSH Host server-prod HostName 192.168.1.100 User andrei Port 2222 IdentityFile ~/.ssh/id_ed25519 # Acum poti conecta simplu cu: ssh server-prod Host * ServerAliveInterval 60 ServerAliveCountMax 3 AddKeysToAgent yes
Securizare server SSH (/etc/ssh/sshd_config)
Port 2222 # schimba portul default PermitRootLogin no # NU permite root prin ssh PasswordAuthentication no # NUMAI chei SSH PubkeyAuthentication yes # activeaza chei MaxAuthTries 3 # max 3 incercari AllowUsers andrei # doar utilizatorul andrei
24. Firewall β ufw & iptables
Protectie reteaUFW β Uncomplicated Firewall (Ubuntu)
ufw status | Starea firewall-ului |
ufw enable | Activeaza firewall |
ufw disable | Dezactiveaza |
ufw allow 22 | Permite SSH |
ufw allow 80/tcp | Permite HTTP |
ufw allow 443 | Permite HTTPS |
ufw allow from 192.168.1.0/24 | Permite retea locala |
ufw deny 25 | Blocheaza SMTP |
ufw delete allow 80 | Sterge regula |
ufw limit 22/tcp | Rate limiting SSH (anti brute-force) |
ufw status numbered | Reguli cu numere |
ufw reset | Reseteaza toate regulile |
iptables β firewall avansat
iptables -L -n -v | Lista reguli curente |
iptables -A INPUT -p tcp --dport 80 -j ACCEPT | Permite port 80 |
iptables -A INPUT -s 10.0.0.5 -j DROP | Blocheaza IP |
iptables -D INPUT 3 | Sterge regula nr 3 |
iptables-save > /etc/iptables/rules.v4 | Salveaza regulile |
iptables-restore < /etc/iptables/rules.v4 | Restaureaza regulile |
Inainte sa activezi firewall-ul pe un server remote, asigura-te ca ai o regula pentru SSH (port 22 sau custom). Altfel te blochezi singur!
25. Loguri & audit
Investigare sistemFisiere log importante
/var/log/syslog | Mesaje generale sistem (Debian/Ubuntu) |
/var/log/messages | Mesaje sistem (RHEL/CentOS) |
/var/log/auth.log | Autentificari, sudo, SSH |
/var/log/kern.log | Mesaje kernel |
/var/log/dmesg | Ring buffer kernel (boot, hardware) |
/var/log/nginx/access.log | Accese web Nginx |
/var/log/nginx/error.log | Erori Nginx |
/var/log/apache2/access.log | Accese Apache |
/var/log/cron | Executii cron |
/var/log/faillog | Login-uri esuate |
/var/log/btmp | Toate login-urile esuate (binary) |
/var/log/wtmp | Toate login/logout-urile (binary) |
Comenzi investigare
dmesg | tail -20 | Ultimele mesaje kernel |
dmesg | grep -i error | Erori hardware |
last | Istoric login-uri |
lastb | Login-uri esuate |
lastlog | Ultimul login pentru fiecare user |
who | Utilizatori conectati acum |
w | Utilizatori + ce fac |
ausearch -m login | Audit login events (auditd) |
grep "Failed password" /var/log/auth.log | Tentative SSH brute-force |
grep "Accepted" /var/log/auth.log | Login-uri SSH reusite |
26. Combinatii puternice (one-liners)
Power usertail -f /var/log/nginx/access.log | grep --line-buffered "404"
Afiseaza live doar erorile 404
tar -czf - /home/andrei | pv | ssh user@server "cat > /backup/home.tar.gz"
Backup direct catre server remote cu bara de progres (pv)
grep -rl "localhost" /etc/nginx/conf.d/ | xargs sed -i 's/localhost/server.ro/g'
Inlocuieste "localhost" cu "server.ro" in toate config-urile nginx
watch -n 5 'df -h && echo "---" && du -sh /var/log/*'
Actualizeaza la 5 secunde: spatiu total + fiecare fisier log
ps -u andrei -o pid= | xargs kill -9
Opreste fortat toate procesele userului andrei
diff <(ls -la /dir1/) <(ls -la /dir2/)
Process substitution β compara output-ul a doua comenzi
curl -fsSL https://get.docker.com | bash
Pattern comun pentru instalare software (verifica intotdeauna scriptul inainte!)
openssl rand -base64 24 | tr -dc 'a-zA-Z0-9' | head -c 20
Parola de 20 caractere alfanumerice
find /var/log -name "*.log" -mtime +30 -exec rm -f {} \;
Curatenie automata log-uri vechi
mysqldump -u root -p dbname | gzip > backup.sql.gz zcat backup.sql.gz | mysql -u root -p dbname
Dump comprimat direct
ssh -L 8080:localhost:80 user@server.ro
Acceseaza portul 80 al serverului prin localhost:8080 pe masina ta
rsync -avz --delete /sursa/ user@server:/dest/
Mirror complet: copiaza + sterge ce nu mai exista in sursa
tar -tzf arhiva.tar.gz | grep ".conf"
Listeaza fisierele .conf din arhiva
parallel -j4 'echo Procesez {}' ::: fisier1 fisier2 fisier3 fisier4
Ruleaza 4 comenzi simultan (necesita GNU parallel)
echo | openssl s_client -connect domain.com:443 2>/dev/null | openssl x509 -noout -dates
Afiseaza data expirare certificat SSL
27. Diagnoza sistem
TroubleshootingSistem nu raspunde / lent
# 1. Verificare load uptime top # sorteaza cu 'P' dupa CPU, 'M' dupa memorie # 2. Memorie free -h cat /proc/meminfo | grep "MemAvailable" # 3. I/O disk iostat -x 1 5 iotop -ao # 4. Retea ss -tulnp netstat -s | grep "errors" # 5. Loguri recente journalctl -p err --since "1 hour ago" dmesg | tail -30
Disc plin
# Gaseste ce ocupa loc df -h du -sh /* 2>/dev/null | sort -rh | head -10 # Fisiere mari in tot sistemul find / -type f -size +500M 2>/dev/null # Log-uri mari ls -lSh /var/log/ | head # Curatenie sigura journalctl --vacuum-time=7d # pastreaza 7 zile journald apt autoremove && apt clean # curata pachete find /tmp -mtime +7 -delete # sterge tmp vechi de 7 zile
Erori frecvente & solutii
Permission denied | Lipsesc permisiunile β sudo sau chmod/chown |
No space left on device | Disc plin β curata log-uri, tmp, cache |
Connection refused | Serviciu oprit sau port blocat firewall |
Command not found | Nu e instalat sau nu e in PATH |
Too many open files | Limita ulimit depasita β ulimit -n 65535 |
Killed | OOM Killer β memorie insuficienta |
Segmentation fault | Bug in aplicatie sau memorie corupta |
Address already in use | Portul e ocupat β ss -tulnp | grep PORT |
Strace & ltrace β debugging avansat
strace -p PID | Urmareste apeluri sistem ale unui proces |
strace cmd | Ruleaza comanda cu trace |
strace -e openat cmd | Filtreaza doar apeluri openat |
ltrace cmd | Urmareste apeluri librarii |
28. Alias & customizare bash
Productivitate# ~/.bashrc sau ~/.bash_aliases # Alias-uri utile alias ll='ls -lahF --color=auto' alias la='ls -la' alias l='ls -CF' alias grep='grep --color=auto' alias h='history' alias c='clear' alias df='df -h' alias du='du -h' alias free='free -h' alias mkdir='mkdir -pv' alias cp='cp -iv' # confirm + verbose alias mv='mv -iv' # confirm + verbose alias rm='rm -iv' # confirm inainte stergere! # Alias-uri sistem alias update='sudo apt update && sudo apt upgrade -y' alias ports='ss -tulnp' alias myip='curl -s ifconfig.me' alias syslog='sudo tail -f /var/log/syslog' # Prompt colorat cu Git branch parse_git_branch() { git branch 2>/dev/null | sed -n 's/\* \(.*\)/ (\1)/p' } export PS1='\[\e[32m\]\u@\h\[\e[0m\]:\[\e[34m\]\w\[\e[33m\]$(parse_git_branch)\[\e[0m\]\$ ' # Istoric mare si cu timestamp export HISTSIZE=10000 export HISTFILESIZE=20000 export HISTTIMEFORMAT="%d/%m %T " export HISTCONTROL=ignoredups:erasedups
Comenzi istoric si navigare rapida
history | Lista comenzilor anterioare |
history | grep ssh | Cauta in istoric |
!! | Repeta ultima comanda |
!456 | Ruleaza comanda nr 456 din istoric |
!ssh | Ruleaza ultima comanda ce incepe cu ssh |
Ctrl+R | Cauta interactiv in istoric (bck-i-search) |
Ctrl+A | Salt la inceputul liniei |
Ctrl+E | Salt la sfarsitul liniei |
Ctrl+W | Sterge cuvantul din stanga |
Ctrl+U | Sterge tot de la cursor la inceput |
Ctrl+K | Sterge tot de la cursor la sfarsit |
Alt+. | Insereaza ultimul argument al comenzii anterioare |
Tab | Autocomplete comanda/fisier |
Tab Tab | Afiseaza toate optiunile |
29. Cheatsheet rapid β referinta
Quick referenceSemnale kill
SIGHUP (1) | Reload configuratie (graceful) |
SIGINT (2) | Ctrl+C β intrerupere |
SIGTERM (15) | Oprire gradata (default kill) |
SIGKILL (9) | Oprire fortata β nu poate fi ignorata |
SIGSTOP (19) | Pauza proces (Ctrl+Z) |
SIGCONT (18) | Reia procesul din pauza |
Permisiuni octale uzuale
777 | rwxrwxrwx β toti au tot (evita!) |
755 | rwxr-xr-x β executabile, directoare publice |
644 | rw-r--r-- β fisiere text standard |
600 | rw------- β fisiere private (SSH keys, etc) |
700 | rwx------ β directoare private |
664 | rw-rw-r-- β scriere grup |
640 | rw-r----- β config files cu grup read |
Porturi standard
22 | SSH |
25/587 | SMTP/SMTP-S (mail) |
53 | DNS |
80 | HTTP |
443 | HTTPS |
3306 | MySQL/MariaDB |
5432 | PostgreSQL |
6379 | Redis |
27017 | MongoDB |
8080 | HTTP alternativ (dev/proxy) |
Metacaractere bash
* | Orice caractere (glob) |
? | Un singur caracter (glob) |
[abc] | Oricare din a, b, c |
[0-9] | Orice cifra |
{a,b,c} | Brace expansion: genereaza a b c |
~ | Home directory |
$ | Valoarea variabilei |
; | Separa comenzi (ruleaza secvential) |
&& | Ruleaza urmatoarea doar daca prima a reusit |
|| | Ruleaza urmatoarea doar daca prima a esuat |
& | Ruleaza in background |
| | Pipe: output β input |
\ | Escape caracter special sau continuare linie |
# | Comentariu in script |
Resurse recomandate pentru continuare
man COMANDA | Manual oficial pentru orice comanda |
COMANDA --help | Help rapid |
tldr COMANDA | Exemple practice (apt install tldr) |
| linuxcommand.org | Tutorial bash complet |
| explainshell.com | Explica orice comanda bash |
| shellcheck.net | Verifica scripturi online |
| tldr.inbrowser.app | Comenzi cu exemple practice |
| OverTheWire Bandit | Invata Linux prin joc/CTF |