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