Linux Terminal

Cum să rulați comenzi Linux în fundal

Comenzile Linux sunt o modalitate excelentă de a interacționa cu sistmeul folosind terminalul. Cu toate acestea, uneori poate dura ceva timp pentru a finaliza sarcina în cauză.

Acest lucru îi obligă pe utilizatori fie să aștepte o perioadă considerabilă de timp până când procesul se termină, fie să genereze un nou shell cu totul nou.

Din fericire, puteți rula comenzi Linux în fundal urmând câteva metode simple.

Adăugați simbolul ampersand [&] după comandă

Cel mai simplu mod de a rula o comandă în funddal este să adăugați simbolul ampersand [&] după comandă.

De exemplu, dacă porniți editorul de text gedit din terminal, nu puteți utiliza shell-ul până când nu închideți editorul.

Cu toate acestea, atunci când adăugați un & suplimentar la comandă, veți putea utiliza imedia shell-ul.

gdit &
hard@root:~$ gedit &
[1] 11080
hard@root:~$

Utilizați bg pentru a trimite comenzi în fundal

Uneori executați o comandă doar pentru a descoperi că durează mult mai mult să se termine. Puteți trimite cu ușurință astfel de comenzi în fundal prin apăsarea tastelor Ctrl+Z și apoi folosind comanda bg.

Apăsarea combinației Ctrl+Z oprește procesul în curs de execuție, iar bg îl duce în fundal.

hard@root:~$ sudo nmap -sS --top-ports=15 192.168.1.1/24
[sudo] password for hard:
Starting Nmap 7.80 ( https://nmap.org ) at 2023-05-28 21:37 +06

[1]+ Stopped                  sudo nmap -sS --top-ports=15 192.168.1.1/24
hard@root:~$ bg
[1]+ sudo nmap -sS --top-ports=15 192.168.1.1/24 &
hard@root:~$ jobs
[1]+ Running                  sudo nmap -sS --top-ports=15 192.168.1.1/24 &
hard@root:~$

Puteți vizualiza o listă a tuturor sarcinilor de fundal dacă tastați jobs în terminal. Utilizați comanda fg pentru a reveni la sarcina în curs de execuție.

Trimiterea de comenzi în fundal cu nohup

Comanda nohup permite administratorilor să ruleze comenzi de terminal care sunt imune la semnalele HUP sau Hang Up.

Puteți rula cu ușurință comenzi în fundal pe Linux folosind nohup.

În exemplul de mai jos se execută o scanare simplă a porturilor cu Nmap în fundal.

nohup sudo nmap -sS --top-ports=15 192.168.1.1/24

Un avantaj cheie al nohup este că comenzile dvs. vor fi executate chiar dacă ieșiți din shell. În plus, generează și fișiere de jurnal ale execuției. Căutați fișierul nohup.out în directorul curent sau în directorul $HOME.

hard@root:~$ nohu sudo nmap -sS --top-ports=15 192.168.1.1/24
nohup: ignoring input and appending output to 'nhup.out'
hard@root:~$ tail nohup.out
135/tcp  closed msrpc
139/tcp  closed netbios-ssn
143/tcp  closed imap
443/tcp  closed https
445/tcp  closed microsoft-ds
3306/tcp closed mysql
3389/tcp closed ms-wbt-server
8080/tcp closd http-proxy

Nmap done: 256 IP addresses (3 host up) scanned în 5.27 seconds
hard@root:~$

Executarea de comenzi în fundal utilizând redirecționări de sistme

De asemenea, puteți utiliza comenzi de fundal în Linux folosind redirecționări de sistem.

De exemplu, dacă executați comanda ping de mai jos, shell-ul o va executa în fundal și vă va reda imediat controlul terminalului.

ping -c5 8.8.8.8 >output.log 2>&1 &

Aici, rezultatul comenzii ping este redirecționat către fișierul output.log. Îl puteți înlocui cu /dev/null dacă doriți să aruncați rezultatul.

2>&1 îi spune lui Bash să redirecționeze orice eroare către același fișier. Ultimul & semnalează lui bash să ruleze această comandă în fundal.

hard@root:~$ ping -c5 8.8.8.8 >output.log 2>&1 &
[1] 12523
hard@root:~$ tail output.log
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8 icmp_seq=1 ttl=110 time 81.6 ms
64 bytes from 8.8.8.8 icmp_seq=2 ttl=110 time 86.7 ms
64 bytes from 8.8.8.8 icmp_seq=3 ttl=110 time 94.9 ms
64 bytes from 8.8.8.8 icmp_seq=4 ttl=110 time 80.9 ms
64 bytes from 8.8.8.8 icmp_seq=5 ttl=110 time 90.4 ms

--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 80.893/86.908/94.929/5.305 ms
[1]+ Don                      ping -c5 8.8.8.8 > output.log 2>&1
hard@root:~$

Setarea comenzilor pentru a rula în fundal folosind disown

Comanda disown facilitează rularea proceslor în fundal. Mai întâi, trebuie să trimiteți sarcina în fundal folosind indicatorul &. Apoi, tastați disown pentru a o detașa din shell.

gedit &
disown

Un avantaj major al lui disown este că, la fel ca și în cazul lui nohup, sistemul nu vă va distruge sarcina atunci când închideți shell-ul sau vă deconectați.

hard@root:~$ gedit & disown
[1] 12581
hard@root:~$

Rularea comenzilor Linux în fundal folosind tmux

tmux este un multiplexor puternic care vă permite să rulați mai multe sesiuni de terminal într-o singură fereasră.

Învățarea modului de utilizare și configurare a tmux pe Linux este o alegere excelentă pentru persoanele care nu sunt familiarizate cu acesta.

tmux face ca rularea comenzilor de fundal în Linux să se facă fără efort.

tmux new -d 'ping -c 10 8.8.8.8 > output.log'

Când executați comanda tmux de mai sus, aceasta va executa comanda ping într-un shell separat și o va menține în funcțiune în fundal. puteți lansa orice proces sau comandă în fundal folosind această metodă.

hard@root:~$ tmux new -d 'ping -c 10 8.8.8.8 > output.log'
hard@root:~$ cat output.log
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8 icmp_seq=1 ttl=110 time 81.6 ms
64 bytes from 8.8.8.8 icmp_seq=2 ttl=110 time 86.7 ms
64 bytes from 8.8.8.8 icmp_seq=3 ttl=110 time 94.9 ms
64 bytes from 8.8.8.8 icmp_seq=4 ttl=110 time 80.9 ms
64 bytes from 8.8.8.8 icmp_seq=5 ttl=110 time 90.4 ms
hard@root:~$

De final

Posibilitatea de a rula comenzi în fundal face ca gestionarea sistemului să fie mai productivă pentru administratori. Puteți trimite sarcinile în fundal în multe moduri.

Funcțiile Bash, cum ar fi caracterul & și Ctrl+Z, sunt convenabile, dar sistemul va anula sarcina din fundal la închiderea shell-ului.

Pe de altă parte, instrumente precum nohup și disown vă mențiin comanda în funcțiune chiar și atunci când vă deconectați sau închideți shell-ul.

Dacă vă lăsați programele în fundal pentru o perioadă lungă de timp, acestea pot deveni procese zombi dacă nu sunt codificate corespunzător.

Aceste procese pot încetini semnificativ sistemul. Așadar, asigurați-vă că identificați și anulați procesele zombi din când în când.

ThinkRoot99

Numele meu este Cristian Moldovan și sunt utilizator de Linux de peste 10 ani.Am făcut parte din mai multe echipe open source din România: Fundația Ceata, Linux Mint România, Rogentos Linux Group. Între 2014 și 2018 am fost propietarul și editorul site-ului de știri despre linux, gnulinux.ro și actual proprietar al rootlinux.ro

View all posts by ThinkRoot99 →

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *