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