Linux stellt eine Vielzahl an Befehlen und Werkzeugen bereit, die es Ihnen ermöglichen, Aufgaben der Systemadministration zügig und effizient zu erledigen.
Ihre Tätigkeit als Systemadministrator umfasst die Installation und Ausführung von Software, die Zugriffssteuerung, die Überwachung, die Sicherstellung der Verfügbarkeit, Backups, die Wiederherstellung von Backups und natürlich das Beheben von Problemen. 😜
In diesem Beitrag werden wir einige der Befehle vorstellen, die Linux-Systemadministratoren im täglichen Einsatz oft benötigen.
Systeminformationen anzeigen
Der Befehl uname
, kombiniert mit dem Parameter -a
, zeigt Ihnen detaillierte Systeminformationen. Dazu gehören Kernelname, Kernelversion, Hostname, Prozessortyp und Informationen zur Hardwareplattform.
[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
Hier eine Erläuterung der Ausgabe:
Kernelname: 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 Hardware Name: x86_64 Prozessor: x86_64 Hardware-Plattform: x86_64 Betriebssystem: GNU/Linux
Festplattenplatz anzeigen
Mit dem Befehl df
können Sie die Größe von Dateisystemen und den verfügbaren Speicherplatz überprüfen. Standardmäßig gibt dieser Befehl die Ausgabe in 1-Kilobyte-Blöcken an.
[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% / ....
Die Option -h
ermöglicht eine für Menschen besser lesbare Ausgabe in Megabyte (MB) und Gigabyte (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
Mit dem Parameter -x
können Sie bestimmte Dateisysteme wie tmpfs
ignorieren, um die Ausgabe übersichtlicher zu gestalten.
[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
Um nur bestimmte Dateisystemtypen anzuzeigen, verwenden Sie den Parameter -t
. Beispielsweise um nur das ext4
-Dateisystem anzuzeigen:
[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
Der Parameter --total
fügt eine Zeile mit den Gesamtsummen hinzu:
[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% -
Speicherplatznutzung von Verzeichnissen
Der Befehl du
dient dazu, die Speicherplatznutzung innerhalb eines Verzeichnisses zu ermitteln. Wenn Sie zum Beispiel die Speicherplatznutzung im Verzeichnis /var/log
sehen möchten, verwenden Sie den Parameter -h
für eine menschenlesbare Ausgabe.
[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
Um nur die gesamte Nutzung anzuzeigen, nutzen Sie den Parameter -s
(Zusammenfassung).
[email protected]:~$ sudo du -hs /var/log 204M /var/log
Speicherübersicht
Mit dem Befehl free
können Sie den gesamten, belegten und freien Systemspeicher anzeigen lassen. Verwenden Sie auch hier -h
für eine menschenlesbare Form.
[email protected]:~$ free -h total used free shared buff/cache available Mem: 889M 272M 100M 712K 517M 443M Swap: 0B 0B 0B
total - Gesamter installierter Speicher (memtotal + swaptotal) used - Belegter Speicher free - Unbenutzter Speicher (memfree + swapfree) buffers - Speicher, der von Kernel-Puffern genutzt wird cache - Speicher, der vom Page-Cache genutzt wird buff/cache - Summe von Puffern und Cache available - Geschätzter Speicher, der für das Starten neuer Anwendungen verfügbar ist, ohne Auslagerung
Prozessinformationen
Der Befehl ps
zeigt Statusinformationen zu laufenden Prozessen an. Um alle Prozesse des Benutzers Ubuntu anzuzeigen, verwenden Sie -u
gefolgt von dem Benutzernamen:
[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
Um alle Prozesse anzuzeigen, verwenden Sie die Parameter 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] ....
Erläuterung der Ausgabe:
Überschrift | Bedeutung |
PID | Prozess-Identifikationsnummer |
%CPU | Prozentsatz der CPU-Zeit, die der Prozess verwendet |
%MEM | Prozentsatz des verwendeten RAM-Prozesses |
VSZ | Verwendeter virtueller Speicher in KB |
RSS | Physischer Speicher, den der Prozess in KB verwendet |
TTY | Dem Prozess zugeordnetes Terminal |
STAT | R – Läuft oder bereit zur Ausführung, S – Schlafend, I – Leerlauf, T – Beendet, Z – Zombie, D – Warten auf Festplatten-I/O, X – Tot, W – Ausgelagert, N – Prozess mit niedriger Priorität, < – Prozess mit hoher Priorität |
Prozessüberwachung
Während ps
eine Momentaufnahme der Prozesse liefert, zeigt top
eine kontinuierlich aktualisierte Liste der Systemprozesse, geordnet nach ihrer Aktivität (standardmäßig alle drei Sekunden).
Die Ausgabe von top
besteht aus zwei Teilen: der Systemzusammenfassung oben und der Prozesstabelle.
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_+
Einige Felder der Systemzusammenfassung:
- up: Betriebszeit – Zeit seit dem letzten Start des Systems.
- load average: Die Durchschnittslast bezieht sich auf die Anzahl der Prozesse, die auf die Ausführung warten. Ein Wert unter 1,0 deutet auf eine geringe Auslastung hin. Es gibt drei Werte: Durchschnitt der letzten 60 Sekunden, der letzten 5 Minuten und der letzten 15 Minuten.
- %Cpu(s): Diese Zeile beschreibt die CPU-Aktivitäten.
- us, Benutzer: Prozentsatz der CPU für Benutzerprozesse
- sy, System: Prozentsatz der CPU für Systemprozesse
- ni, nice: Prozentsatz der CPU für Prozesse mit niedriger Priorität
- id, Leerlauf: Prozentsatz der CPU im Leerlauf
- wa, IO-warten: Prozentsatz der CPU beim Warten auf E/A
- hi: Zeit für Hardware-Interrupts
- si: Zeit für Software-Interrupts
- st: Zeit, die von der VM durch den Hypervisor verbraucht wird
Die Felder der Prozesstabelle:
PID | Prozess-Identifikationsnummer |
USER | Prozesseigentümer |
PR | Priorität |
NI | Nice Wert |
VIRT | Vom Prozess verwendeter virtueller Speicher (KB) |
RES | Vom Prozess verwendeter physischer Speicher |
SHR | Vom Prozess verwendeter gemeinsam genutzter Speicher |
S | Prozessstatus (R-läuft, S-schläft, I-Leerlauf, T-gestoppt, Z-Zombie, D-wartet auf Festplatten-I/O, W-ausgelagert, X-tot) |
%CPU | CPU-Zeit, die der Prozess in Prozent verwendet |
%MEM | Physischer Speicherverbrauch des Prozesses |
TIME[+] | Gesamte CPU-Zeit des Prozesses |
COMMAND | Name des Programms |
Während top
läuft, können Sie Befehle eingeben. Drücken Sie h
oder ?
, um eine Liste der verfügbaren Befehle zu sehen. Mit k
beenden Sie einen Prozess und mit q
beenden Sie top
.
DNS-Abfragen
dig
ist ein nützliches Tool für DNS-Abfragen. Die Syntax ist:
dig <DNS server> <domain> <query-type>
Dabei:
<DNS server>
ist der Name des abzufragenden DNS-Servers.<domain>
ist der Domainname, den Sie abfragen möchten.<query-type>
ist der Datensatztyp (A, MX, NS, SOA usw.).
Um eine ausführliche Ausgabe zu unterdrücken, verwenden Sie den Parameter +short
.
Um beispielsweise einen A-Eintrag für google.com
zu sehen:
[email protected]:~$ dig google.com +short 172.217.164.174
Um MX-Einträge anzuzeigen:
[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.
Für DNS-Abfragen im Internet können Sie das DNS-Lookup-Tool verwenden.
Angemeldete Benutzer
Der Befehl who
zeigt die aktuell angemeldeten Benutzer an.
[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
zeigt die angemeldeten Benutzer und ihre Prozesse an. Die Kopfzeile enthält die aktuelle Zeit, die Systembetriebszeit, die Anzahl der Benutzer und die durchschnittliche Systemlast.
[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
Der nächste Teil zeigt den Benutzernamen, das Terminal und die Remote-IP, von der aus sie sich angemeldet haben, Anmeldezeit, Leerlaufzeit, JCPU, PCPU und das ausgeführte Programm. JCPU
ist die Zeit, die von allen mit dem TTY verbundenen Prozessen verwendet wird, während PCPU
die vom aktuellen Prozess verwendete Zeit ist.
Dateien archivieren
Mit GNU tar
können Sie mehrere Dateien in einer einzigen Datei archivieren.
Erstellen wir ein Verzeichnis namens myfiles
und darin drei Dateien: a.txt
, b.txt
und c.txt
.
[email protected]:~$ mkdir myfiles ; touch myfiles/{a.txt,b.txt,c.txt}
Nun erstellen wir ein Archiv namens allfiles.tar
, das alle Dateien im Verzeichnis myfiles
beinhaltet:
[email protected]:~$ tar -cvf allfiles.tar myfiles myfiles/ myfiles/c.txt myfiles/a.txt myfiles/b.txt
Auflistung aller Dateien im aktuellen Verzeichnis: Sie können das Verzeichnis myfiles
und das Archiv allfiles.tar
sehen:
[email protected]:~$ ls allfiles.tar myfiles
Mit dem Parameter -x
entpacken Sie ein Archiv. Um allfiles.tar
zu entpacken:
[email protected]:~$ tar -xvf allfiles.tar myfiles/ myfiles/c.txt myfiles/a.txt myfiles/b.txt
Sie können ein Archiv auch mit dem Parameter -z
komprimieren. Dies erstellt ein mit gzip komprimiertes Archiv.
[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
Um ein komprimiertes Archiv zu entpacken, verwenden Sie -z
mit dem Parameter -x
.
[email protected]:~$ tar -zxvf allfiles.tar.gz myfiles/ myfiles/c.txt myfiles/a.txt myfiles/b.txt
Textsuche
grep
wird verwendet, um nach Mustern in einer Datei oder einer Reihe von Dateien zu suchen und gibt alle Zeilen aus, die dem Muster entsprechen. Um beispielsweise nach der Zeile mit „ServerRoot“ in /etc/apache2/apache2.conf
zu suchen:
[email protected]:~$ grep ServerRoot /etc/apache2/apache2.conf # ServerRoot: The top of the directory tree under which the server's #ServerRoot "/etc/apache2"
Um in allen Dateien eines Verzeichnisses zu suchen, verwenden Sie *
. Um die Suche in Unterverzeichnisse einzuschließen, verwenden Sie den Parameter -r
(rekursiv). Um also in allen Dateien in /etc/apache2
nach Zeilen mit dem Muster „VirtualHost“ zu suchen:
[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> ...
Synchronisation von Dateien
rsync
ist ein schnelles Befehlszeilenwerkzeug zum Synchronisieren von Dateien und Verzeichnissen zwischen zwei Speicherorten. Es kann für lokale und Remote-Kopien verwendet werden und ist schnell, da nur die Unterschiede zwischen den Quelldateien und den bereits vorhandenen Dateien im Ziel gesendet werden.
Es wird oft für Backups oder als verbesserter Kopierbefehl verwendet.
Hier ein Beispiel:
Um alle Dateien aus dem Verzeichnis myfiles
in das Verzeichnis backups
zu kopieren/synchronisieren:
[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
Um alle Dateien aus myfiles
auf einen Remote-Host zu synchronisieren, fügen Sie remote_user@remote_host
in den Zielnamen ein. Zum Beispiel um myfiles
mit dem Host mit der IP 10.0.0.50
zu synchronisieren:
[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
Socket-Informationen
Der Befehl ss
dient zur Ausgabe von Socket-Statistiken, ähnlich dem älteren netstat
. Um TCP-Sockets anzuzeigen, verwenden Sie den Parameter -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
Dies zeigt keine Sockets an, die auf Verbindungen warten. Um sowohl lauschende als auch nicht-lauschende Sockets einzubeziehen, verwenden Sie die Parameter -t
und -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 *:*
Dateien finden (schnell)
locate
verwendet eine Datenbank für die Suche nach Dateien und kann deutlich schneller als find
sein. Die Verwendung ist sehr einfach, um zum Beispiel nach einer Datei namens apache2.conf
zu suchen:
[email protected]:~$ locate apache2.conf /etc/apache2/apache2.conf /var/lib/dpkg/info/apache2.conffiles
Mit -c
erhalten Sie nur die Anzahl der übereinstimmenden Dateien.
[email protected]:~$ locate -c apache2.conf 2
Gegebenenfalls müssen Sie die von locate
verwendete Datenbank aktualisieren, die mlocate
ist. Verwenden Sie dazu updatedb
(erfordert Superuser-Rechte).
[email protected]:~$ sudo updatedb
Dateien finden (genauer)
find
ist ein vielseitiger Befehl für die Suche nach Dateien anhand von Dateinamen, Berechtigungen, Benutzer-ID, Gruppen-ID, Größe, Dateityp usw.
Um anhand des Namens im aktuellen Verzeichnis zu suchen, verwenden Sie den Parameter -name
gefolgt vom Dateinamen:
[email protected]:~$ find . -name a.txt ./myfiles/a.txt
Um nach Verzeichnissen zu suchen, verwenden Sie -type d
:
[email protected]:~$ find . -type d . ./.ssh ./myfiles ./.cache ./.gnupg ./.gnupg/private-keys-v1.d ./docker
Um nach Dateien basierend auf der Größe zu suchen, zum Beispiel Dateien, die größer als 20 MB sind, verwenden Sie den Parameter -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
Systemd Dienste
Nachdem systemd
den SysV-Init-Prozess in den meisten Linux-Distributionen ersetzt hat, wird der Befehl systemctl
verwendet, um systemd-Dienste zu verwalten.
Zum Starten eines Dienstes, zum Beispiel apache2
:
[email protected]:~$ sudo systemctl start apache2.service
Das Suffix .service
kann weggelassen werden.
Um einen Dienst zu beenden:
[email protected]:~$ sudo systemctl stop apache2
Um den Status des Dienstes anzuzeigen, nutzen Sie systemctl status
. Hier ein Beispiel für den laufenden apache2
:
[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.
Firewall konfigurieren
UFW – Uncomplicated Firewall ist ein einfach zu bedienendes Frontend für iptables. Es ist standardmäßig auf Ubuntu-basierten Distributionen verfügbar. Unter CentOS können Sie UFW aus dem EPEL-Repository installieren.
So aktivieren Sie UFW:
$ sudo ufw enable
Überprüfen Sie den Status mit ufw status
:
$ sudo ufw status Status: active
Standardmäßig lässt UFW ausgehenden Datenverkehr zu und blockiert eingehenden Datenverkehr.
Der folgende Befehl erlaubt eingehenden Datenverkehr am HTTP-Port:
$ sudo ufw allow http Rule added Rule added (v6)
Sie können Datenverkehr an jedem Port blockieren. Hier ein Beispiel, um Datenverkehr auf Port 21 zu blockieren:
$ sudo ufw deny 21 Rule added Rule added (v6)
Systemd-Protokolle
journalctl
zeigt die von systemd ges