Linux-kommandoer: 20 essensielle verktøy for systemadministratorer

Linux tilbyr et bredt spekter av kommandoer og verktøy som effektiviserer og forenkler systemadministrasjonsoppgaver.

Som systemadministrator innebærer dine oppgaver blant annet å installere og vedlikeholde programvare, håndtere tilgang, overvåke systemytelse, sørge for høy tilgjengelighet, administrere sikkerhetskopiering og gjenoppretting, samt feilsøke og løse problemer. 😜

Denne artikkelen presenterer et utvalg av de mest brukte kommandoene som er uunnværlige for Linux-systemadministratorer i deres daglige arbeid.

uname

Kommandoen uname, brukt sammen med flagget -a, gir deg detaljert systeminformasjon. Den viser informasjon om kjernenavn, kjerneversjon, utgivelse, vertsnavn, prosessortype og maskinvareplattform.

[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

Dette betyr:

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

Med df-kommandoen kan du sjekke filsystemstørrelse og tilgjengelig diskplass. Uten tilleggsflagg viser denne kommandoen utdata i 1K blokker.

[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% /
....

Alternativet -h viser resultatet i et mer lesbart format, nemlig i MB og 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 

For å ekskludere spesifikke filsystemer, som for eksempel tmpfs, fra utdataene, bruk flagget -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

For å vise kun filsystemer av en bestemt type, bruk flagget -t. Her er et eksempel for å vise bare ext4-filsystemer:

[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

Bruk av flagget --total legger til en linje som viser den totale bruken:

[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
total            33G  2.3G   31G   8% -

du

Kommandoen du brukes til å undersøke diskplassbruken i en gitt katalog. For eksempel, for å se diskplassbruken i mappen /var/log, bruk flagget -h for å vise størrelsene i lesbart 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

Hvis du kun ønsker å se total diskplassbruk, kan du bruke flagget -s (summary):

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

free

Bruk free-kommandoen for å vise totalt, brukt og ledig systemminne. Flagget -h gir deg et mer lesbart format.

[email protected]:~$ free -h
              total        used        free      shared  buff/cache   available
Mem:           889M        272M        100M        712K        517M        443M
Swap:            0B          0B          0B
total - Totalt installert minne (memtotal + swaptotal)
used - Brukt minne
free - Ubrukt minne (memfree + swapfree)
buffers - Minne brukt av kjernebuffere
cache - Minne brukt av side-cache
buff/cache - Summen av buffere og cache
available - Estimert minne tilgjengelig for å starte nye applikasjoner, uten swapping

ps

Kommandoen ps brukes til å se informasjon om prosessene som kjører på systemet. For å se alle prosesser som tilhører brukeren ubuntu, bruk flagget -u sammen med brukernavnet:

[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

For å se alle prosesser, kjør ps med flaggene 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]
....

Forklaring av overskriftene:

Overskrift Betydning
PID Prosessidentifikasjonsnummer
%CPU Prosentandel av CPU-tiden prosessen bruker
%MEM Prosentandel av RAM prosessen bruker
VSZ Virtuelt minne brukt i KB
RSS Fysisk minne prosessen bruker i KB
TTY Terminal tilknyttet prosessen
STAT R – Kjører eller klar til å kjøre, S – Sovende, I – Inaktiv, T – Stoppet, Z – Zombie, D – Venter på disk I/O, X – Dead, W – Byttet ut, N – Lavprioritetsprosess, < – Høyprioritetsprosess

top

I motsetning til ps-kommandoen som gir et øyeblikksbilde, gir top-kommandoen en kontinuerlig oppdatert (standard hvert tredje sekund) liste over systemprosesser, sortert etter prosessaktivitet.

Utdata fra top består av to hoveddeler: Systeminformasjon øverst og en tabell over prosesser, sortert etter CPU-aktivitet.

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_+

Noen av feltene i systemoppsummeringen:

opp Oppetid. Tid siden maskinen sist ble startet.
gjennomsnittlig belastning Belastningsgjennomsnitt viser antall prosesser som venter på å kjøre. En verdi lavere enn 1.0 betyr at maskinen ikke er overbelastet. Det er tre verdier; det første er gjennomsnittet for de siste 60 sekundene, det andre er for de siste 5 minuttene, og det tredje er for de siste 15 minuttene.
%Cpu(er) Denne linjen beskriver aktiviteten til CPU-en.

Detaljer om CPU-bruken:

  • 0.3 us, bruker – 0.3% av CPU brukes til brukerprosesser.
  • 0.0 sy, system – 0.0% av CPU brukes til systemprosesser.
  • 0.0 ni, nice – 0.0% av CPU brukes av lavprioriterte prosesser.
  • 99.7 id, idle – 99.7% av CPU er inaktiv.
  • 0.0 wa, IO wait – 0.0% av CPU venter på I/O.
  • 0.0 hi – Tid brukt på maskinvareavbrudd.
  • 0.0 si – Tid brukt på programvareavbrudd.
  • 0.0 st – Tid stjålet fra denne VM av hypervisoren.

Prosesstabellfeltene er som følger:

PID Prosessidentifikasjonsnummer
BRUKER Prosesseier
PR Prioritet
NI Nice value (fin verdi)
VIRT Virtuelt minne brukt av prosessen (KB)
RES Fysisk minne brukt av prosessen
SHR Delt minne brukt av prosessen
S Prosessstatus. R – Kjører, S – sover, I – Inaktiv, T – Stoppet, Z – zombie, D – venter på disk I/O, W- byttet ut, X – død
%CPU CPU-tidsprosessen bruker i prosent
%MEM Det fysiske minnet prosessen bruker
TIME+ Total CPU-tid brukt av prosessen
KOMMANDO Navn på programmet

Mens top kjører, kan du gi forskjellige kommandoer. Trykk h eller ? for å se tilgjengelige kommandoer. Trykk k for å avslutte en prosess. Trykk q for å avslutte top.

dig

dig er et kraftig verktøy for DNS-spørringer. Det brukes på følgende måte:

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

Hvor:

  • <DNS-server> er navnet på DNS-serveren du vil spørre
  • <domene> er domenenavnet du vil spørre om
  • <query-type> er typen post du vil ha informasjon om – A, MX, NS, SOA, etc.

Bruk +short-flagget for å undertrykke detaljerte utdata.

For å vise A-posten for google.com, bruk:

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

For å vise MX-postene for google.com, bruk:

[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.

For å gjøre oppslag via en offentlig DNS server, kan du bruke DNS-oppslagsverktøy på Internett.

who og w

who viser hvilke brukere som er logget inn.

[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)

w viser hvilke brukere som er logget inn og hvilke prosesser de kjører. Overskriften viser gjeldende tid, systemoppetid, antall brukere som er logget inn og gjennomsnittlig systembelastning.

[email protected]:~$ w
 18:07:33 up 46 days, 15:19,  2 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   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

Den andre delen viser brukernavnene, terminalen og den eksterne IP-adressen som de er logget inn fra, innloggingstiden, inaktiv tid, JCPU, PCPU og programmet de kjører. JCPU er tiden brukt av alle prosesser tilknyttet tty, mens PCPU er tiden som brukes av den gjeldende prosessen.

tar

Med GNU tar kan du arkivere flere filer til en enkelt fil.

For eksempel, lag en katalog myfiles og tre filer a.txt, b.txt og c.txt i denne katalogen:

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

For å lage et arkiv kalt allfiles.tar som inneholder alle filene i myfiles-katalogen:

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

List opp alle filene i gjeldende katalog. Du kan se katalogen myfiles og arkivet allfiles.tar:

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

Du kan pakke ut et arkiv med flagget -x. For å pakke ut allfiles.tar:

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

Du kan også komprimere arkivet med flagget -z. Dette vil lage et arkiv som er komprimert med gzip.

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

For å pakke ut et komprimert arkiv, bruk flagget -z sammen med -x.

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

grep

grep brukes til å søke etter et mønster i en fil eller en gruppe filer. Den skriver ut alle linjene som matcher mønsteret. For eksempel, for å søke etter linjer som inneholder «ServerRoot» i /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"

For å søke i alle filer i en katalog, bruk *. For å inkludere søk i underkataloger, bruk flagget -r (rekursiv). For å søke etter alle linjer som inneholder mønsteret «VirtualHost» i alle filene i /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 er et raskt kommandolinjeverktøy for å synkronisere filer og kataloger mellom to steder. Det kan brukes til både lokal og ekstern kopiering, og er raskt fordi det kun overfører forskjellene mellom kildefilene og de eksisterende filene på destinasjonen.

Det er mye brukt til sikkerhetskopiering og som en forbedret kopikommando for daglig bruk.

Her er et eksempel:

For å kopiere/synkronisere alle filer fra katalogen myfiles til katalogen 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

For å synkronisere alle filer fra katalogen myfiles til katalogen backups på en ekstern server, inkluderes remote_user@remote_host i destinasjonsnavnet. For å rsync myfiles-mappen til en ekstern server med IP 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

ss-kommandoen brukes til å vise socket-statistikk, i likhet med det eldre verktøyet netstat. Bruk flagget -t for å vise TCP-sockets.

[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

Dette vil ikke vise sockets som lytter. For å inkludere både lyttende og ikke-lyttende sockets, bruk flaggene -t og -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

locate-kommandoen bruker en database for å søke etter filer, og kan være mye raskere enn find-kommandoen. Den er veldig enkel i bruk. For å søke etter en fil som heter apache2.conf:

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

Du kan bruke flagget -c hvis du kun ønsker å vite antallet filer som samsvarer med søkemønsteret.

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

Noen ganger kan det være nødvendig å oppdatere databasen som brukes av locate, som er mlocate. For å oppdatere databasen, bruk kommandoen updatedb. Dette krever superbrukerrettigheter.

[email protected]:~$ sudo updatedb

find

En av de mest brukte kommandoene i Linux. Bruk den til å søke etter filer basert på filnavn, tillatelser, bruker-ID, gruppe-ID, størrelse, filtype, og andre kriterier.

For å søke etter en fil ved navn i gjeldende katalog, bruk flagget -name etterfulgt av filnavnet:

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

For å søke etter kataloger, bruk flagget -type d:

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

For å søke etter filer basert på størrelse, for eksempel filer som er større enn 20 MB, bruk flagget -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

Nå som systemd har erstattet SysV init-prosessen i de fleste Linux-distribusjoner, brukes systemctl-kommandoen til å administrere systemtjenester og enheter.

For å starte en tjeneste, for eksempel apache2:

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

Du kan utelate tjenestesuffikset.

For å stoppe en tjeneste:

[email protected]:~$ sudo systemctl stop apache2

For å se tjenestestatus, bruk kommandoen systemctl status. Følgende eksempel viser apache2-status mens tjenesten kjører:

[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