20 Линук команди за систем администратора

Linuks operativni sistem pruža brojne komande i pomoćne alate koji omogućavaju brzo i efikasno obavljanje zadataka administracije sistema.

Posao administratora sistema obuhvata instaliranje i pokretanje softvera, upravljanje pristupom, nadgledanje, osiguravanje dostupnosti, pravljenje rezervnih kopija, vraćanje podataka iz rezervnih kopija, kao i rešavanje nepredviđenih problema. 😜

U ovom članku, pregledaćemo neke od komandi koje administratori Linuks sistema često koriste u svom svakodnevnom radu.

uname

Koristite komandu `uname` sa opcijom `-a` za prikaz sistemskih informacija. Ova komanda će prikazati ime kernela, verziju kernela, izdanje kernela, ime hosta, tip procesora, kao i detalje o hardverskoj platformi.

[email protected]:~$ uname -a
Linux ubuntu18 5.3.0-1028-azure #29~18.04.1-Ubuntu SMP Fri Jun 5 14:32:34 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

Evo objašnjenja svakog dela rezultata:

kernel name:Linux 
hostname: ubuntu18 
kernel release: 5.3.0-1028-azure 
kernel version: #29~18.04.1-Ubuntu SMP Fri Jun 5 14:32:34 UTC 2020 
machine hardware name: x86_64 
processor: x86_64 
hardware-platform: x86_64 
operating system: GNU/Linux

df

Komanda `df` se koristi za proveru veličine datotečnog sistema i raspoloživog prostora. Bez dodatnih opcija, ova komanda prikazuje izlaz u blokovima od 1K.

[email protected]:~$ df 
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              437208       0    437208   0% /dev
tmpfs              91100     692     90408   1% /run
/dev/sda1       30309264 2383952  27908928   8% /
....

Opcija `-h` prikazuje izlaz u formatu koji je lakši za čitanje, odnosno u MB i GB.

[email protected]:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            427M     0  427M   0% /dev
tmpfs            89M  692K   89M   1% /run
/dev/sda1        29G  2.3G   27G   8% /
tmpfs           445M     0  445M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           445M     0  445M   0% /sys/fs/cgroup
/dev/sda15      105M  3.6M  101M   4% /boot/efi
/dev/sdb1       3.9G   16M  3.7G   1% /mnt
tmpfs            89M     0   89M   0% /run/user/1001 

Da biste isključili prikaz određenog tipa datotečnog sistema, kao što je `tmpfs`, i dobili pregledniji izlaz, koristite opciju `-x`.

[email protected]:~$ df -h -x tmpfs
Filesystem      Size  Used Avail Use% Mounted on
udev            427M     0  427M   0% /dev
/dev/sda1        29G  2.3G   27G   8% /
/dev/sda15      105M  3.6M  101M   4% /boot/efi
/dev/sdb1       3.9G   16M  3.7G   1% /mnt

Da biste prikazali samo određeni tip datotečnog sistema, koristite opciju `-t`. Na primer, za prikaz samo `ext4` datotečnog sistema:

[email protected]:~$ df -h -t ext4
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        29G  2.3G   27G   8% /
/dev/sdb1       3.9G   16M  3.7G   1% /mnt

Upotreba opcije `–total` će dodati red koji prikazuje ukupne sume:

[email protected]:~$ df -h -t ext4 --total
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        29G  2.3G   27G   8% /
/dev/sdb1       3.9G   16M  3.7G   1% /mnt
<b>total            33G  2.3G   31G   8% -</b>

du

Komanda `du` se koristi za proveru iskorišćenosti prostora na disku u određenom direktorijumu. Na primer, da biste videli iskorišćenost prostora u direktorijumu `/var/log`, koristite opciju `-h` za čitljiv format.

[email protected]:~$ sudo du -h /var/log
24K	/var/log/Microsoft/Azure/NetworkWatcherAgent/Logs
28K	/var/log/Microsoft/Azure/NetworkWatcherAgent
32K	/var/log/Microsoft/Azure
36K	/var/log/Microsoft
60K	/var/log/apt
4.0K	/var/log/samba
177M	/var/log/journal/0f4f926f583b4691af7de11025b19ff6
177M	/var/log/journal
...
204M	/var/log

Da biste videli samo ukupnu upotrebu, koristite opciju `-s` (sažetak).

[email protected]:~$ sudo du -hs /var/log
204M	/var/log

free

Komanda `free` se koristi za prikaz ukupne, iskorišćene i slobodne sistemske memorije. Koristite opciju `-h` za čitljiv format.

[email protected]:~$ free -h
              total        used        free      shared  buff/cache   available
Mem:           889M        272M        100M        712K        517M        443M
Swap:            0B          0B          0B
total - Ukupno instalirana memorija (memtotal + swaptotal)
used - Iskorišćena memorija
free - Slobodna memorija (memfree + swapfree)
buffers - Memorija koju koriste kernel baferi
cache - Memorija koju koriste keševi stranica
buff/cache - Zbir bafera i keša
available - Procenjena memorija dostupna za pokretanje novih aplikacija, bez korišćenja swap memorije

ps

Komanda `ps` prikazuje informacije o statusu procesa koji se trenutno izvršavaju na sistemu. Da biste videli sve procese koji pripadaju korisniku `ubuntu`, koristite opciju `-u` sa korisničkim imenom:

[email protected]:~$ ps -u ubuntu
   PID TTY          TIME CMD
  7804 ?        00:00:00 systemd
  7805 ?        00:00:00 (sd-pam)
  7940 ?        00:00:00 sshd
  7941 pts/0    00:00:00 bash
  8111 ?        00:00:00 sshd
  8112 pts/1    00:00:00 bash
 13868 ?        00:00:00 sshd
 13869 pts/2    00:00:00 bash
 13885 pts/0    00:00:00 man
 13895 pts/0    00:00:00 pager
 18111 pts/2    00:00:00 man
 18121 pts/2    00:00:00 pager
 18485 pts/1    00:00:00 ps

Da biste videli sve procese, pokrenite `ps` sa opcijama `aux`:

[email protected]:~$ ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.7 160076  7020 ?        Ss   Jun29   0:34 /sbin/init
root          2  0.0  0.0      0     0 ?        S    Jun29   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        I<   Jun29   0:00 [rcu_gp]
root          4  0.0  0.0      0     0 ?        I<   Jun29   0:00 [rcu_par_gp]
root          6  0.0  0.0      0     0 ?        I<   Jun29   0:00 [kworker/0:0H-kb]
....

Objašnjenje kolona u izlazu:

Naslov Značenje
PID Identifikacioni broj procesa
%CPU Procenat procesorskog vremena koje koristi proces
%MEM Procenat RAM memorije koju koristi proces
VSZ Količina virtuelne memorije koju proces koristi u KB
RSS Količina fizičke memorije koju proces koristi u KB
TTY Terminal povezan sa procesom
STAT R – Pokrenut ili spreman za pokretanje, S – Spava, I – Neaktivan, T – Zaustavljen, Z – Zombi, D – Čeka I/O operaciju, X – Mrtav, W – Swapovan, N – Proces niskog prioriteta, < – Proces visokog prioriteta

top

Dok komanda `ps` prikazuje trenutno stanje procesa, komanda `top` prikazuje kontinuirano ažuriranu listu sistemskih procesa, sortiranu po aktivnosti procesora. Podrazumevano, lista se ažurira svakih tri sekunde.

Izlaz komande `top` se sastoji od dva glavna dela: pregleda sistema na vrhu i tabele procesa sortiranih po iskorišćenosti CPU-a.

top - 14:25:32 up 44 days, 11:37,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 114 total,   1 running,  59 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   910992 total,   101208 free,   274712 used,   535072 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   458492 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND    
 50497 ubuntu    20   0   44528   3944   3368 R  0.7  0.4   0:00.15 top        
     1 root      20   0  160076   7020   4400 S  0.0  0.8   0:34.85 systemd    
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.08 kthreadd   
     3 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 rcu_gp     
     4 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 rcu_par_gp 
     6 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 kworker/0:+
     9 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 mm_percpu_+

Neka od polja u pregledu sistema su sledeća:

Up Vreme rada sistema od poslednjeg pokretanja.
load average Prosečno opterećenje sistema, vrednost manja od 1.0 znači da sistem nije preopterećen. Prva vrednost je prosek za poslednjih 60 sekundi, druga za 5 minuta, a treća za 15 minuta.
%Cpu(s) Linija koja opisuje aktivnosti procesora.
0.3 us, user 0.3% procesorskog vremena se koristi za procese korisnika.
0.0 sy, system 0.0% procesorskog vremena se koristi za sistemske procese.
0.0 ni, nice 0.0% procesorskog vremena se koristi od strane procesa sa niskim prioritetom.
99.7 id, idle 99.7% procesora je u stanju mirovanja.
0.0 wa, IO-wait 0.0% procesora čeka na I/O operacije.
0.0 hi Vreme provedeno na hardverskim prekidima.
0.0 si Vreme provedeno na softverskim prekidima.
0.0 st Vremenski period kada je ovaj VM bio zaustavljen od strane hipervizora.

Polja tabele procesa su sledeća:

PID Identifikacioni broj procesa.
USER Korisnik koji je vlasnik procesa.
PR Prioritet procesa.
NI Vrednost prioriteta.
VIRT Virtuelna memorija koju koristi proces (u KB).
RES Fizička memorija koju koristi proces.
SHR Deljena memorija koju koristi proces.
S Status procesa. R – Pokrenut, S – Spava, I – Mirovanje, T – Zaustavljen, Z – Zombi, D – Čeka I/O, W – Swapovan, X – Mrtav.
%CPU Procenat procesorskog vremena koje koristi proces.
%MEM Procenat fizičke memorije koju koristi proces.
TIME[+] Ukupno CPU vreme koje je proces koristio.
COMMAND Naziv programa.

Dok je `top` pokrenut, možete izvršavati razne komande. Pritisnite `h` ili `?` da biste videli dostupne komande. Pritisnite `k` da ubijete proces, a `q` da biste izašli iz `top` komande.

dig

`dig` je odličan alat za DNS upite. Koristi se na sledeći način:

dig <DNS server> <domain> <query-type>

Gde:

  • `<DNS server>` je ime DNS servera koji želite da upitate.
  • `<domain>` je ime domena za koju želite da postavite upit.
  • `<query-type>` je tip DNS zapisa koji želite da znate – A, MX, NS, SOA, itd.

Da biste smanjili količinu izlaznih informacija, koristite opciju `+short`.

Da biste videli A zapis za `google.com`, koristite:

[email protected]:~$ dig google.com +short
172.217.164.174

Da biste videli MX zapise za `google.com`, koristite:

[email protected]:~$ dig google.com MX  +short
50 alt4.aspmx.l.google.com.
10 aspmx.l.google.com.
20 alt1.aspmx.l.google.com.
40 alt3.aspmx.l.google.com.
30 alt2.aspmx.l.google.com.

Ako trebate da tražite DNS zapise na internetu, možete koristiti alat za DNS pretragu na mreži.

who i w

Komanda `who` prikazuje korisnike koji su trenutno prijavljeni.

[email protected]:~$ who
ubuntu   pts/0        2020-08-14 17:28 (183.83.211.129)
ubuntu   pts/1        2020-08-14 17:58 (183.83.211.129)

Komanda `w` prikazuje korisnike koji su trenutno prijavljeni i njihove procese. Zaglavlje prikazuje trenutno vreme, vreme rada sistema, broj prijavljenih korisnika i prosečno opterećenje sistema.

[email protected]:~$ w
 18:07:33 up 46 days, 15:19,  2 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
ubuntu   pts/0    183.83.211.129   17:28    2.00s  0.10s  0.00s w
ubuntu   pts/1    183.83.211.129   17:58    9:07   0.05s  0.01s vi

Sledeći deo prikazuje korisnička imena, terminal i udaljenu IP adresu sa koje su prijavljeni, vreme prijave, vreme mirovanja, JCPU, PCPU i program koji izvršavaju. JCPU je vreme koje koriste svi procesi povezani sa tty, dok je PCPU vreme koje koristi trenutni proces.

tar

Sa `GNU tar`, možete arhivirati više datoteka u jednu datoteku.

Kao primer, kreirajte direktorijum `myfiles` i tri datoteke `a.txt`, `b.txt`, `c.txt` unutar tog direktorijuma:

[email protected]:~$ mkdir myfiles ; touch myfiles/{a.txt,b.txt,c.txt}

Sada kreirajte arhivu pod nazivom `allfiles.tar` koja sadrži sve datoteke iz direktorijuma `myfiles`:

[email protected]:~$ tar -cvf allfiles.tar myfiles
myfiles/
myfiles/c.txt
myfiles/a.txt
myfiles/b.txt

Prikažite sve datoteke u trenutnom direktorijumu. Možete videti direktorijum `myfiles` i arhivu `allfiles.tar`:

[email protected]:~$ ls
allfiles.tar  myfiles

Arhivu možete raspakovati pomoću opcije `-x`. Dakle, za raspakivanje `allfiles.tar`:

[email protected]:~$ tar -xvf allfiles.tar
myfiles/
myfiles/c.txt
myfiles/a.txt
myfiles/b.txt

Arhivu možete komprimovati pomoću opcije `-z`. Ovo će kreirati arhivu komprimovanu pomoću gzip-a.

[email protected]18:~$ tar -zcvf allfiles.tar.gz myfiles
myfiles/
myfiles/c.txt
myfiles/a.txt
myfiles/b.txt
[email protected]:~$ ls
allfiles.tar.gz  myfiles

Za raspakivanje komprimovane arhive, koristite opciju `-z` sa opcijom `-x`.

[email protected]:~$ tar -zxvf allfiles.tar.gz 
myfiles/
myfiles/c.txt
myfiles/a.txt
myfiles/b.txt

grep

`grep` se koristi za pretragu šablona u datoteci ili skupu datoteka. Ispisuje sve linije koje odgovaraju datom šablonu. Na primer, da biste tražili liniju koja sadrži „ServerRoot“ u datoteci `/etc/apache2/apache2.conf`:

[email protected]:~$ grep ServerRoot /etc/apache2/apache2.conf 
# ServerRoot: The top of the directory tree under which the server's
#ServerRoot "/etc/apache2"

Za pretragu svih datoteka u direktorijumu koristite `*`. Da biste uključili pretragu u poddirektorijume, koristite opciju `-r` (rekurzivna). Dakle, za traženje svih linija koje sadrže šablon „VirtualHost“ u svim datotekama unutar `/etc/apache2`:

[email protected]:~$ cd /etc/apache2
[email protected]:/etc/apache2$ grep -r VirtualHost *
apache2.conf:# If you do not specify an ErrorLog directive within a <VirtualHost>
apache2.conf:# logged here.  If you *do* define an error logfile for a <VirtualHost>
conf-available/localized-error-pages.conf:# even on a per-VirtualHost basis.  If you include the Alias in the global server
conf-available/other-vhosts-access-log.conf:# Define an access log for VirtualHosts that don't define their own logfile
ports.conf:# have to change the VirtualHost statement in
sites-available/000-default.conf:<VirtualHost *:80>
...

rsync

`rsync` je brz alat komandne linije za sinhronizaciju datoteka i direktorijuma između dve lokacije. Može se koristiti za lokalno i udaljeno kopiranje, i brz je jer šalje samo razlike između izvornih i odredišnih datoteka.

Široko se koristi za pravljenje rezervnih kopija i kao unapređena komanda za kopiranje u svakodnevnoj upotrebi.

Evo primera:

Da biste kopirali/sinhronizovali sve datoteke iz direktorijuma `myfiles` u direktorijum `backups`:

[email protected]:~$ rsync -avh myfiles/ /backups
sending incremental file list
./
a.txt
b.txt
c.txt

sent 218 bytes  received 76 bytes  588.00 bytes/sec
total size is 0  speedup is 0.00

Da biste sinhronizovali sve datoteke iz direktorijuma `myfiles` u direktorijum `backups` na udaljenom hostu, uključite `remote_user@remote_host` u odredišno ime. Dakle, da biste sinhronizovali folder `myfiles` sa udaljenim hostom sa IP adresom `10.0.0.50`:

[email protected]:~$ rsync -avh myfiles/ [email protected]:/home/vagrant
[email protected]'s password: 
sending incremental file list
./
a.txt
b.txt
c.txt

sent 230 bytes  received 76 bytes  47.08 bytes/sec
total size is 0  speedup is 0.00

ss

Komanda `ss` se koristi za prikaz statistika soketa, slično kao stari `netstat` alat. Za prikaz TCP soketa, koristite opciju `-t`.

[email protected]:~$ ss -t 
State       Recv-Q        Send-Q                 Local Address:Port                     Peer Address:Port         
ESTAB       0             0                           10.0.0.4:53852                   168.63.129.16:8037         
ESTAB       0             0                           10.0.0.4:ssh                    183.83.211.129:64118        
ESTAB       0             0                           10.0.0.4:33256                 169.254.169.254:http         
ESTAB       0             1080                        10.0.0.4:ssh                     222.186.30.35:11527        
ESTAB       0             0                           10.0.0.4:ssh                    183.83.211.129:63049

Ovo neće prikazati sokete koji slušaju. Da biste uključili i sokete koji slušaju i one koji ne slušaju, koristite opcije `-t` i `-a`.

[email protected]:~$ ss -t -a 
State        Recv-Q        Send-Q                Local Address:Port                     Peer Address:Port         
LISTEN       0             128                         0.0.0.0:ssh                           0.0.0.0:*            
LISTEN       0             80                        127.0.0.1:mysql                         0.0.0.0:*            
LISTEN       0             128                   127.0.0.53%lo:domain                        0.0.0.0:*            
ESTAB        0             0                          10.0.0.4:53852                   168.63.129.16:8037         
ESTAB        0             0                          10.0.0.4:ssh                    183.83.211.129:64118        
ESTAB        0             0                          10.0.0.4:33256                 169.254.169.254:http         
ESTAB        0             1080                       10.0.0.4:ssh                     222.186.30.35:11527        
ESTAB        0             120                        10.0.0.4:ssh                    183.83.211.129:63049        
LISTEN       0             128                            [::]:ssh                              [::]:*            
LISTEN       0             128                               *:http                                *:*

locate

Komanda `locate` koristi bazu podataka za pretragu datoteka i može biti mnogo brža od komande `find`. Vrlo je jednostavna za korišćenje, na primer, za traženje datoteke `apache2.conf`:

[email protected]:~$ locate apache2.conf
/etc/apache2/apache2.conf
/var/lib/dpkg/info/apache2.conffiles

Možete koristiti opciju `-c` ako želite samo broj datoteka koje odgovaraju kriterijumu pretrage.

[email protected]:~$ locate -c apache2.conf
2

Ponekad ćete možda morati da osvežite bazu podataka koju koristi `locate`, a to je `mlocate`. Za ažuriranje baze podataka koristite komandu `updatedb`. Za ovo su potrebne administratorske privilegije.

[email protected]:~$ sudo updatedb

find

Jedna od najčešće korišćenih komandi na Linux-u. Koristite je za pretragu datoteka na osnovu imena datoteka, dozvola, ID-a korisnika, grupe, veličine, tipa datoteke, kao i drugih kriterijuma.

Da biste tražili datoteku po imenu u trenutnom direktorijumu, koristite opciju `-name` praćenu imenom datoteke za pretragu:

[email protected]:~$ find . -name a.txt
./myfiles/a.txt

Da biste tražili direktorijume, koristite opciju `-type d`:

[email protected]:~$ find . -type d
.
./.ssh
./myfiles
./.cache
./.gnupg
./.gnupg/private-keys-v1.d
./docker

Da biste tražili datoteke po veličini, na primer datoteke veće od 20 MB, koristite opciju `-size`:

[email protected]:~$ find . -size +20M
./docker/docker-ce-cli_5%3a19.03.12~3-0~ubuntu-bionic_amd64.deb
./docker/docker-ce_5%3a19.03.12~3-0~ubuntu-bionic_amd64.deb

systemctl

Sada kada je `systemd` zamenio SysV init proces u većini Linux distribucija, koristite komandu `systemctl` za upravljanje `systemd` servisima i jedinicama.

Da biste pokrenuli servis, na primer `apache2`:

[email protected]:~$ sudo systemctl start apache2.service

Možete izostaviti sufiks `.service`.

Da biste zaustavili servis:

[email protected]:~$ sudo systemctl stop apache2

Da biste videli status servisa, koristite komandu `systemctl status`. Sledeći primer prikazuje status `apache2` dok je pokrenut:

[email protected]:~$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Wed 2020-08-19 11:34:04 UTC; 2s ago
  Process: 25346 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS)
  Process: 18202 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
  Process: 25536 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
 Main PID: 25555 (apache2)
    Tasks: 55 (limit: 1024)
   CGroup: /system