20 Linux-kommandon för systemadministratörer

By rik

Linux tillhandahåller en uppsjö av kommandon och verktyg som underlättar snabb och effektiv hantering av systemadministrationsuppgifter.

Som systemadministratör innefattar dina arbetsuppgifter bland annat installation och drift av programvara, behörighetskontroll, övervakning, säkerställande av tillgänglighet, databackup, återställning av säkerhetskopior och inte minst, problemlösning. 😜

Denna artikel undersöker några av de kommandon som regelbundet används av Linux-systemadministratörer i deras dagliga arbete.

`uname`

Genom att använda kommandot `uname` med flaggan `-a` kan du visa detaljerad systeminformation. Detta kommando presenterar kärnans namn, version, utgåva, värdnamn, processortyp och information om hårdvaruplattform.

[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

Här följer en beskrivning av vad dessa data betyder:

Kärnans namn: Linux
Värdnamn: ubuntu18
Kärnans utgåva: 5.3.0-1028-azure
Kärnans version: #29~18.04.1-Ubuntu SMP Fri Jun 5 14:32:34 UTC 2020
Maskinvarunamn: x86_64
Processor: x86_64
Hårdvaruplattform: x86_64
Operativsystem: GNU/Linux

`df`

Med kommandot `df` kan du granska storleken på filsystem och tillgängligt diskutrymme. Utan ytterligare argument visar detta kommando utdata i 1K-block.

[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` ger utdata i ett mer läsbart format, det vill säga i MB och 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

För att utesluta vissa filsystem, som `tmpfs`, och få en renare utdata, används flaggan `-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

För att endast visa en specifik filsystemstyp, använd flaggan `-t`. Exempelvis för att bara visa `ext4`-filsystem:

[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

Om du inkluderar flaggan `–total` läggs en rad till som visar den totala sammanlagda summan:

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

För att granska diskutrymmesanvändningen inom en specifik katalog används kommandot `du`. Till exempel, för att undersöka diskutrymmesanvändningen i katalogen `/var/log`. Använd flaggan `-h` för ett läsbart 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

För att endast se den totala användningen används flaggan `-s` (sammanfattning).

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

`free`

Använd kommandot `free` för att få en överblick över det totala, använda och lediga systemminnet. Flaggan `-h` används för ett läsbart format.

ubuntu[email protected]:~$ free -h
              total        used        free      shared  buff/cache   available
Mem:           889M        272M        100M        712K        517M        443M
Swap:            0B          0B          0B
total - Totalt installerat minne (memtotal + swaptotal)
used - använt minne
free - oanvänt minne (memfree + swapfree)
buffers - minne använt av kärnbuffrar
cache - minne använt av sidcache
buff/cache - summa av buffrar och cache
available - Uppskattat minne tillgängligt för att starta nya applikationer, utan att använda swap

`ps`

Kommandot `ps` ger information om status för processer som körs i systemet. För att se alla processer som ägs av användaren `ubuntu`, använd flaggan `-u` följt av användarnamnet:

[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

För att se alla processer används `ps` med flaggorna `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]
....

Förklaring av rubriker:

Rubrik Betydelse
PID Processens identifieringsnummer
%CPU Procentandelen CPU-tid som används av processen
%MEM Procentandelen RAM-minne som används av processen
VSZ Virtuellt minne som används i KB
RSS Fysiskt minne som används av processen i KB
TTY Terminalen som är associerad med processen
STAT Processens status: R – Körs eller redo att köras, S – Vilande, I – Inaktiv, T – Stoppad, Z – Zombie, D – Väntar på disk I/O, X – Död, W – Utbytt, N – Process med låg prioritet, < – Högprioriterad process

`top`

Medan kommandot `ps` tar en ögonblicksbild av processernas status, visar `top` en kontinuerligt uppdaterad (standard är var tredje sekund) lista över systemprocesser, sorterade efter CPU-aktivitet.

Utdata från kommandot `top` består av två huvuddelar: Systemöversikten i toppen och tabellen över processer, sorterade efter 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_+

Några av fälten i systemöversikten beskrivs nedan:

`upp`: Upptid. Tid sedan maskinen senast startades.

`load average`: Belastningsgenomsnitt, anger antalet processer som väntar på att köras. Ett värde under 1.0 betyder att maskinen inte är upptagen. Det finns tre värden: det första är medelvärdet för de senaste 60 sekunderna, det andra är medelvärdet för de senaste 5 minuterna och det tredje visar medelvärdet för de senaste 15 minuterna.

`%Cpu(s)`: Denna rad beskriver processorns aktiviteter.

  • `0.3 us, user`: 0,3 % CPU används för användarprocesser.
  • `0.0 sy, system`: 0,0 % CPU används för systemprocesser.
  • `0.0 ni, nice`: 0,0 % CPU används av processer med låg prioritet.
  • `99.7 id, idle`: 99,7 % CPU är inaktiv.
  • `0.0 wa, I/O wait`: 0,0 % CPU väntar på I/O.
  • `0.0 hi`: Tid som ägnas åt hårdvaruavbrott.
  • `0.0 si`: Tid som ägnas åt mjukvaruavbrott.
  • `0.0 st`: Tidsstöld från den virtuella maskinen av hypervisorn.

Fälten i processtabellen är följande:

PID Processidentifieringsnummer
USER Processägare
PR Prioritet
NI ”Nice”-värde
VIRT Virtuellt minne som används av processen (KB)
RES Fysiskt minne som används av processen
SHR Delat minne som används av processen
S Processstatus. R – Kör, S – Vilar, I – Inaktiv, T – Stoppad, Z – Zombie, D – Väntar på disk I/O, W- Utbytt, X – Död
%CPU Procentandel CPU-tid som processen använder
%MEM Den fysiska minnesprocessen använder
TIME+ Total CPU-tid som används av processen
COMMAND Namnet på programmet

Medan `top` körs kan ett antal kommandon utfärdas. Tryck `h` eller `?` för att se vilka kommandon som kan användas. Tryck `k` för att avsluta en process. Tryck `q` för att avsluta `top`.

`dig`

`dig` är ett mycket användbart verktyg för DNS-frågor. Det används på följande sätt:

dig <DNS server> <domän> <frågetyp>

Där:

  • `<DNS server>` är namnet på den DNS-server du vill fråga.
  • `<domän>` är det domännamn du vill fråga om.
  • `<frågetyp>` är namnet på den post du vill veta – A, MX, NS, SOA, etc.

För att dämpa detaljerad utdata används flaggan `+short`.

För att se A-record för `google.com` används:

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

För att se MX-poster för `google.com` används:

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

Om du behöver fråga efter DNS-poster online kan du använda DNS-sökverktyget. DNS Lookup online

`who` och `w`

`who` visar inloggade användare.

[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` visar inloggade användare och deras processer. Rubriken visar aktuell tid, systemupptid, antalet inloggade användare och genomsnittlig 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             [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

Följande del visar användarnamn, terminal, fjärr-IP som de loggat in från, inloggningstid, vilotid, JCPU, PCPU och programmet som körs. JCPU är den tid som används av alla processer relaterade till tty, medan PCPU är den tid som används av den aktuella processen.

`tar`

Med GNU `tar` kan du arkivera flera filer till en enda fil.

Som ett exempel, skapa en katalog `myfiles` och tre filer `a.txt`, `b.txt` och `c.txt` i katalogen `myfiles`:

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

För att skapa ett arkiv med namnet `allfiles.tar` som innehåller alla filer i katalogen `myfiles`:

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

Lista alla filer i den aktuella katalogen. Du kan se katalogen `myfiles` och arkivet `allfiles.tar`:

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

Du kan packa upp ett arkiv med flaggan `-x`. Så, för att packa upp `allfiles.tar`:

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

Du kan även komprimera arkivet med flaggan `-z`. Detta skapar ett arkiv komprimerat 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

För att packa upp ett komprimerat arkiv används `-z` med `-x`-flaggan.

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

`grep`

`grep` används för att söka efter ett mönster i en fil eller en uppsättning filer. Det skriver ut alla rader som matchar mönstret. Till exempel, för att söka efter raden som innehåller ”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"

För att söka i alla filer i en katalog används `*`. Flaggan `-r` (rekursiv) används för att inkludera sökning i underkataloger. Så, för att söka efter alla rader som innehåller mönstret ”VirtualHost” i alla filer 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` är ett snabbt kommandoradsverktyg för att synkronisera filer och kataloger mellan två platser. Det kan användas för både lokal och fjärrkopiering. Det är snabbt eftersom det bara skickar skillnader mellan källfilerna och de befintliga filerna på destinationen.

Det används ofta för säkerhetskopiering och som ett förbättrat kopieringskommando för dagligt bruk.

Här är ett exempel:

För att kopiera/rsynka alla filer från katalogen `myfiles` till 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

För att rsynkronisera alla filer från katalogen `myfiles` till katalogen `backups` på en fjärrvärd inkluderas `remote_user@remote_host` i destinationsnamnet. Så, för att rsynka mappen `myfiles` till en fjärrvärd 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`

Kommandot `ss` används för att visa socketstatistik, liknande det äldre verktyget `netstat`. För att visa TCP-sockets används flaggan `-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

Detta visar inte sockets som lyssnar. För att inkludera både lyssnande och icke-lyssnande sockets används flaggorna `-t` och `-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`

Kommandot `locate` använder en databas för att söka efter filer och kan vara mycket snabbare än kommandot `find`. Det är mycket enkelt att använda. För att söka efter en fil, till exempel `apache2.conf`:

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

Flaggan `-c` används om du bara vill ha antalet filer som matchar sökmönstret.

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

Ibland kan det vara nödvändigt att uppdatera databasen som används av `locate`, vilket är `mlocate`. För att uppdatera databasen används kommandot `updatedb`. Detta kräver superanvändarbehörighet.

[email protected]:~$ sudo updatedb

`find`

Ett av de mest använda kommandona i Linux. Det används för att söka efter filer baserat på filnamn, behörigheter, användar-id, grupp-id, storlek, filtyp, och andra kriterier.

För att söka efter en fil med ett specifikt namn i den aktuella katalogen används flaggan `-name` följt av filnamnet:

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

För att söka efter kataloger används flaggan `-type d`:

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

För att söka efter filer efter storlek, t.ex. filer som är större än 20 MB, används flaggan `-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`

Efter att systemd ersatt SysV init-processen i de flesta Linux-distributioner används kommandot `systemctl` för att hantera systemtjänster och -enheter.

För att starta en tjänst, till exempel `apache2`:

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

Du kan utelämna tjänstens suffix.

För att stoppa en tjänst:

[email protected]:~$ sudo systemctl stop apache2

För att se status för en tjänst används kommandot `systemctl status`. Följande exempel visar status för `apache2` medan den körs:

[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.slice/apache2.service
           ├─25555 /usr/sbin/apache2 -k start
           ├─25558 /usr/sbin/apache2 -k start
           └─25559 /usr/sbin/apache2 -k start

Aug 19 11:34:04 ubuntu18 systemd[1]: Starting The Apache HTTP Server...
Aug 19 11:34:04 ubuntu18 systemd[1]: Started The Apache HTTP Server.

`ufw` kommando

UFW – *Uncomplicated Firewall* är ett lättanvänt gränssnitt för `iptables`. Det är standard i Ubuntu-baserade distributioner. I CentOS kan `ufw` installeras från EPEL-förrådet.

För att aktivera `ufw`:

<pre