[LINUX] Eine Sammlung von Befehlen, die Sie kennen sollten, indem Sie die Ursache für die Fehlerbehebung isolieren (Server Edition).

Systembefehle

Linux-Verfügbarkeit anzeigen (Verfügbarkeit)

Linux-Verfügbarkeit anzeigen. Wenn die Ping-Kommunikation vorübergehend nicht auf NG usw. eingestellt ist, kann der Server möglicherweise neu gestartet und bestätigt werden.

$ uptime
 12:16:05 up 48 days, 17:53,  2 users,  load average: 0.00, 0.02, 0.00

Es ist wünschenswert, dass der Lastdurchschnitt niedriger als die Anzahl der CPU-Kerne ist.

Überprüfen Sie den Prozessstatus (Befehl top, Befehl ps).

Liste der laufenden Prozesszustände (wie ein Schnappschuss)

Verwenden Sie den Befehl ps, um die laufenden Prozesszustände aufzulisten (in einem Snapshot). Es wird zur Bestätigung verwendet, z. B. "Welcher Prozess ist die schwere Last?"

$ ps aux

Es kann in Kombination mit dem Befehl grep verwendet werden, um den Prozessstatus eines bestimmten Dienstes zu überprüfen. Das Folgende ist ein Beispiel für die Überprüfung des Prozessstatus von Nginx.

$ ps aux | grep -e nginx -e %CPU

Laufende Prozesse auflisten (in Echtzeit)

Verwenden Sie den Befehl top, um die (in Echtzeit) laufenden Prozesszustände aufzulisten. Es wird empfohlen, der Option "-c" hinzuzufügen, da der vollständige Pfad des Befehls angezeigt werden kann. Wie der PS-Befehl wird er verwendet, um zu überprüfen, "Welcher Prozess ist die schwere Last?"

$ top -c

Indem Sie die Prozess-ID mit dem Befehl ps überprüfen und die Option "-p" wie unten gezeigt angeben, können Sie nur den spezifischen Prozessstatus überprüfen. Das Folgende ist ein Beispiel für die Überprüfung des Prozessstatus von Nginx.

$ ps aux | grep -e nginx -e %CPU
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      2142  0.0  0.0  53788    68 ?        Ss   Jun06   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx     2143  0.0  0.1  85396  3048 ?        S    Jun06   0:03 nginx: worker process
root     13439  0.0  0.0  12108  1088 pts/0    S+   16:53   0:00 grep --color=auto -e nginx -e %CPU

//Führen Sie dies aus, indem Sie die Prozess-ID von nginx angeben
$ top -cp 2142
top - 16:54:05 up 36 days, 22:31,  1 user,  load average: 0.06, 0.23, 0.16
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1829.2 total,     80.2 free,   1558.7 used,    190.4 buff/cache
MiB Swap:   2048.0 total,    854.2 free,   1193.8 used.    120.1 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 2142 root      20   0   53788     68     68 S   0.0   0.0   0:00.01 nginx

So lesen Sie das Ausgabeergebnis

  1. Zeile: Informationen zur Betriebszeit und zur Gesamtlast werden ausgegeben.
top - 16:45:36 up 36 days, 22:23,  1 user,  load average: 0.01, 0.02, 0.00
  1. bis 3. Zeile: Der Status in Bezug auf CPU und Aufgaben wird ausgegeben.
Tasks: 116 total,   1 running, 115 sleeping,   0 stopped,   0 zombie
%Cpu(s): 12.5 us,  0.0 sy,  0.0 ni, 87.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

Zeilen 4-5: Der Status für Speicher und Swap wird ausgegeben.

MiB Mem :   1829.2 total,     74.0 free,   1558.9 used,    196.3 buff/cache
MiB Swap:   2048.0 total,    854.2 free,   1193.8 used.    119.9 avail Mem

Überprüfen Sie die CPU-, Speicher- und Festplatten-E / A-Statistiken (vmstat).

Zeigen Sie Statistiken zu virtuellem Speicher, CPU und Festplatten-E / A an. Wenn Sie m mit der Option "--unit" angeben, wird die MB-Anzeige angezeigt und ist leichter zu sehen.

$ vmstat --unit m
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0    153    228    115    962    0    0   234    16    3    3  1  0 99  0  0

Durch Angabe von "1" als Argument kann es in Intervallen von 1 Sekunde angezeigt werden.

$ vmstat --unit m 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0    153    228    115    962    0    0   234    16    3    3  1  0 99  0  0
 0  0    153    227    115    962    0    0     0     0  150  168  0  0 100  0  0
 0  0    153    227    115    962    0    0     0     0  151  188  0  0 100  0  0

Überprüfen Sie die CPU- und Festplatten-E / A-Statistiken (iostat).

Zeigt die CPU-Auslastung und die Auslastung der E / A-Geräte an.

$ iostat -h
Linux 4.18.0-147.8.1.el8_1.x86_64 (XXX-XX-XX-XXX)       07/01/2020      _x86_64_        (3 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.6%    0.0%    0.4%    0.0%    0.0%   98.9%

      tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn Device
    11.96       700.4k        48.5k       2.7T     194.7G vda
     0.00         0.0k         0.0k     416.0k       0.0k scd0

Überprüfen Sie den Speicherauslastungsstatus (freier Befehl)

Zeigen Sie den Status der Speichernutzung an.

//Siehe in Kilobyte
$ free

//Referenz in Megabyte-Einheiten
$ free -m

//Siehe in Gigabyte-Einheiten
$ free -g

Überprüfen Sie den Status der Festplattennutzung (Befehl df).

Zeigen Sie den Status der Festplattennutzung an. Wenn Sie die Option "-h" angeben, wird sie mit einer geeigneten Einheit angezeigt, daher wird dies empfohlen.

$ df -h

Überprüfen Sie die Festplattennutzung (in einem bestimmten Verzeichnis) (Befehl du)

Zeigen Sie den Status der Festplattennutzung an (unter einem bestimmten Verzeichnis). Wenn Sie die Option "-h" angeben, wird sie mit einer geeigneten Einheit angezeigt, daher wird dies empfohlen.

$ du -h | sort -hr

Sie können auch die zu überprüfende Tiefe angeben, indem Sie die Option "--max-depth" angeben. Im Folgenden finden Sie ein Beispiel für die Überprüfung des Status der Festplattennutzung im aktuellen Verzeichnis.

$ du --max-depth=1 -h | sort -hr
772M    .
743M    ./.vscode-server
13M     ./.local
11M     ./.cache
44K     ./.vscode-remote
8.0K    ./.vscode
8.0K    ./.ssh
8.0K    ./.pylint.d
8.0K    ./.config

Überprüfen Sie den Mount-Status des Volumes (Mount-Befehl)

Überprüfen Sie den Einbaustatus des Volumes. Es wird verwendet, um zu überprüfen, ob die Festplatte korrekt eingelegt ist, z. B. wenn "Daten nicht gelesen werden können". Beachten Sie, dass Sie bei der Ausführung ohne die Option "-l" möglicherweise Festplatten bereitstellen können, die nicht bereitgestellt werden sollten. Seien Sie daher bei der Ausführung vorsichtig. Wenn Sie nur die Situation überprüfen möchten, müssen Sie die Option "-l" hinzufügen.

$ mount -l

Außerdem enthält die Datei "/ etc / fstab", die eng mit dem Befehl mount zusammenhängt. Hier werden die Mount-Einstellungen des Volumes beschrieben, die beim Starten des Servers oder beim erneuten Laden des Systemmanagers berücksichtigt werden sollen. Wenn Sie den Mount-Status nicht mit dem obigen Befehl "mount -l" bestätigen können, obwohl die Mount-Einstellungen in fstab beschrieben sind, besteht der Verdacht auf eine Anomalie.

$ cat /etc/fstab

Überprüfen Sie die vom Linux-Kernel ausgegebene Nachricht (dmesg).

Überprüfen Sie die vom Linux-Kernel ausgegebenen Informationen (Software, die im Betriebssystem eine zentrale Rolle spielt, z. B. Prozessverwaltung, Speicherverwaltung und Zeitplanverwaltung). Durch Angabe der Option "-T" werden die Zeitinformationen leichter sichtbar. Durch Angabe der Option "-x" wird auch die Informationsebene der Nachricht angezeigt. Wenn der Server neu gestartet wird, die Anwendung die Daten jedoch nicht normal lesen kann, können Sie feststellen, dass die Festplatte beschädigt ist, indem Sie die Ausgabe von dmesg überprüfen.

$ dmesg -Tx

Überprüfen Sie vergangene Ressourcennutzungstrends (sar)

Überprüfen Sie die Nutzungstendenz früherer Ressourcen (CPU, Speicher usw.). Beachten Sie, dass einige Server möglicherweise nicht installiert sind.

//Überprüfen Sie frühere CPU-Auslastungstrends
$ sar -u

//Überprüfen Sie frühere Trends bei der Speichernutzung
$ sar -r

Netzwerkbefehle

Überprüfen Sie die Netzwerkkommunikation (Ping)

Überprüfen Sie die Netzwerkkommunikation. Die IP-Adresse "8.8.8.8" gibt übrigens das öffentliche DNS von Google an. Wenn die Ping-Kommunikationsprüfung NG ist, ist es eine gute Idee, den unten eingeführten Befehl "Trace Route" zu verwenden, um zu überprüfen, wo die Kommunikation NG war.

//Überprüfen Sie die Kommunikation anhand der IP-Adresse
$ ping 8.8.8.8

//Überprüfen Sie die Kommunikation anhand des Hostnamens. * Der Name wird ebenfalls aufgelöst
$ ping google.com

//Überprüfen Sie die Kommunikation weiterhin in Intervallen von 1 Sekunde
$ ping -i 1 8.8.8.8

//Überprüfen Sie die Kommunikation mit IPv4
$ ping -4 google.com

//Überprüfen Sie die Kommunikation mit IPv6
$ ping -6 google.com

Verfolgen Sie die Netzwerkroute

Überprüfen Sie die Netzwerkroute. Beachten Sie, dass einige Server möglicherweise nicht installiert sind. Es wird oft verwendet, um zu bestätigen, wo die Kommunikation NG war.

$ traceroute 8.8.8.8

Namensauflösung bestätigen (nslookup, dig)

Überprüfen Sie die Namensauflösung. Der Unterschied zwischen den Befehlen nslookup und dig besteht darin, dass der erstere das Antwortergebnis des Nameservers so verarbeitet, dass es leicht zu sehen ist, während der letztere das Antwortergebnis des Nameservers unverändert anzeigt. Wenn Sie DNS verdächtig sind, sollten Sie diesen Befehl zuerst verwenden, um den Zustand der Namensauflösung zu überprüfen.

//Vorwärtszug prüfen
$ nslookup google.com

//Überprüfen Sie den Rückwärtszug
$ nslookup 8.8.8.8
//Vorwärtszug prüfen
$ dig google.com

//Überprüfen Sie den Rückwärtszug
$ dig -x 8.8.8.8

Überprüfen Sie den Verbindungsstatus des TCP-Sockets (ss, netstat).

Überprüfen Sie den Verbindungsstatus des TCP-Sockets. Beachten Sie, dass netstat in RHEL7 und höher veraltet ist und ss als alternativer Befehl empfohlen wird. Mit dem folgenden Befehl können Sie den Verbindungsstatus des IPv4-TCP-Sockets überprüfen. Es wird verwendet, um anhand des Portnutzungsstatus zu überprüfen, welche Art von Server betrieben wird. Obwohl es veraltet ist, ist netstat leichter zu lesen, daher ist es besser, den Befehl netstat als den Befehl ss zu verwenden, bis er vollständig nicht mehr verfügbar ist.

//Empfehlung
$ ss -at4

//nicht empfohlen
$ netstat -at4

Überprüfen Sie den Netzwerkstatus (ip, ifconfig)

Überprüfen Sie den Netzwerkstatus. Ifconfig ist in RHEL7 und höher veraltet, und ip wird als alternativer Befehl empfohlen. Das Folgende ist ein Befehl zum Anzeigen der Netzwerkeinstellungen für jede vorhandene Schnittstelle. Dient zum Überprüfen des Verbindungsstatus der Netzwerkschnittstelle.

//Empfehlung
$ ip a

//nicht empfohlen
$ ifconfig -a

Überprüfen der Routing-Tabelle (IP, Route, Netstat)

Überprüfen Sie die Routing-Tabelle. Beachten Sie, dass die Route in RHEL7 und höher veraltet ist und ip als alternativer Befehl empfohlen wird. Das Folgende ist ein Befehl zum Überprüfen der Routing-Tabelle. Obwohl veraltet, ist die Ausgabe des Befehls route leichter zu lesen. Daher ist es besser, den Befehl route als den Befehl ip zu verwenden, bis er vollständig nicht mehr verfügbar ist.

//Empfehlung
$ ip r

//nicht empfohlen
$ route

//nicht empfohlen
$ netstat -nr

Überprüfen Sie die ARP-Cache-Tabelle

Überprüfen Sie die ARP-Cache-Tabelle. Darüber hinaus ist arp in RHEL7 oder höher veraltet, und ip wird als alternativer Befehl empfohlen. Das Folgende ist ein Befehl zum Überprüfen der ARP-Cache-Tabelle. Wenn beispielsweise der Router ausgetauscht wird, kann die MAC-Adresse des vorherigen Geräts im APR-Cache verbleiben, was zu einem Kommunikationsfehler usw. führt. In diesem Fall wird sie als Isolation verwendet.

//Empfehlung
$ ip n

//nicht empfohlen
$ arp -a

Andere

Überprüfen Sie die Protokolle in Echtzeit

Überprüfen Sie das Ausgabeprotokoll in Echtzeit. Es ist effektiv zu überprüfen, welche Art von Protokoll ausgegeben wird, wenn derzeit Probleme in der laufenden Form auftreten.

$ tail -f  access.log

Wenn ein großes Protokoll in kurzer Zeit ausgegeben wird, wird es häufig in Kombination mit dem Befehl grep verwendet. Das Folgende ist ein Beispiel für die Kombination des Befehls tail und des Befehls grep und die standardmäßige Ausgabe nur des Fehlers 404.

$ tail -f access.log | grep 404
125.197.158.68 - - [01/Jul/2020:13:45:11 +0900] "GET /404 HTTP/1.1" 301 162 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36" "-"
125.197.158.68 - - [01/Jul/2020:13:45:11 +0900] "GET /404 HTTP/2.0" 404 548 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36" "-"
125.197.158.68 - - [01/Jul/2020:13:45:11 +0900] "GET /favicon.ico HTTP/2.0" 404 548 "https://example.com/404" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36" "-"

Suchen Sie nach Dateien, die (verschiedenen) Bedingungen entsprechen

Suchen Sie nach Dateien, die (verschiedenen) Bedingungen entsprechen. Oft kennen Sie die Verzeichnisdateistruktur nicht und wissen nicht, wo sich die gesuchte Datei befindet. In einem solchen Fall wird dieser Befehl häufig zur Suche verwendet.

//Suchen Sie unter dem Suchpfad nach der angegebenen Datei
$Suchpfad finden-Name Dateiname

//Ausführungsbeispiel
$ find /var/log/ -name "access.log"
/var/log/nginx/access.log

//Beispiel mit Platzhaltern
$ find /var/log/ -name "*.log"
/var/log/letsencrypt/letsencrypt.log
/var/log/dnf.rpm.log
/var/log/dnf.librepo.log
/var/log/boot.log
/var/log/nginx/error.log
/var/log/nginx/access.log
/var/log/audit/audit.log
/var/log/cloud-init-output.log
/var/log/cloud-init.log
/var/log/dnf.log
/var/log/sssd/sssd_nss.log
/var/log/sssd/sssd_implicit_files.log
/var/log/sssd/sssd.log
/var/log/hawkey.log
/var/log/tuned/tuned.log

//Beispiel für die Angabe des Dateityps (nur Datei)
$ find /opt/docker/ -name "*.conf" -type f
/opt/docker/nginx/conf/default.conf
/opt/docker/nginx/conf/nginx.conf

//Beispiel für die Angabe des Dateityps (nur Verzeichnis)
$ find /opt/docker/ -name "nginx" -type d
/opt/docker/nginx

Extrahieren Sie Zeilen mit bestimmten Zeichen aus der Datei

Extrahieren Sie Zeilen mit bestimmten Zeichen aus der Datei. Dieser Befehl wird sehr häufig verwendet, wird jedoch häufig verwendet, um zu überprüfen, ob bei der Fehlerbehebung im Protokoll ein Fehler ausgegeben wird. Hier möchte ich ein Beispiel für den persönlichen Gebrauch vorstellen.

//Extrahieren Sie Zeilen mit bestimmten Zeichen aus der angegebenen Datei
$ grep access.log nginx.conf
    access_log  /var/log/nginx/access.log  main;

//Verwenden Sie Platzhalter, um Zeilen mit bestimmten Zeichen aus Dateien zu extrahieren
$ grep http *.conf
default.conf:    return       301 https://$host$request_uri;
default.conf:    listen       443 ssl http2;
default.conf:    listen       [::]:443 ssl http2;
default.conf:        proxy_pass                             http://localhost:5601;
nginx.conf:http {
nginx.conf:                      '$status $body_bytes_sent "$http_referer" '
nginx.conf:                      '"$http_user_agent" "$http_x_forwarded_for"';

// -v Optional, um bestimmte Zeichenfolgen von der Extraktion auszuschließen
$ echo -e "test\ntast\ntest" > test.txt
$ cat test.txt
test
tast
test
$ grep test test.txt
test
test
$ grep -v test test.txt
tast

// -Extrahieren Sie eine bestimmte Zeichenfolge durch ODER-Suche mit der Option e
$ grep -e test -e tast test.txt
test
tast
test

// -Mit der Option i wird die Groß- und Kleinschreibung nicht berücksichtigt
$ grep Access.log nginx.conf
$ grep -i Access.log nginx.conf
    access_log  /var/log/nginx/access.log  main;

//Führt eine Suche mit Unterverzeichnissen durch und zielt auch auf das Ziel symbolischer Links ab
$ grep -R http
nginx/conf/default.conf:    return       301 https://$host$request_uri;
nginx/conf/default.conf:    listen       443 ssl http2;
nginx/conf/default.conf:    listen       [::]:443 ssl http2;
nginx/conf/default.conf:        proxy_pass                             http://localhost:5601;
nginx/conf/nginx.conf:http {
nginx/conf/nginx.conf:                      '$status $body_bytes_sent "$http_referer" '
nginx/conf/nginx.conf:                      '"$http_user_agent" "$http_x_forwarded_for"';
nginx/html/index.html:<a href="http://nginx.org/">nginx.org</a>.<br/>
nginx/html/index.html:<a href="http://nginx.com/">nginx.com</a>.</p>

Dateien auflisten

Dateien auflisten. Hier möchte ich ein Beispiel für den persönlichen Gebrauch vorstellen.

//Listen Sie einfach Dateien auf
$ ls
conf  docker-compose.yml  html

//Zeigen Sie auch Dateiinformationen an
$ ls -l
total 12
drwxr-xr-x 2 root root 4096 May 22 20:52 conf
-rw-r--r-- 1 root root  655 May 22 20:37 docker-compose.yml
drwxr-xr-x 2 root root 4096 May 20 16:02 html

//Die Punktdatei wird ebenfalls angezeigt
$ ls -la
total 20
drwxr-xr-x 4 root root 4096 May 22 20:37 .
drwxr-xr-x 5 root root 4096 May 19 13:47 ..
drwxr-xr-x 2 root root 4096 May 22 20:52 conf
-rw-r--r-- 1 root root  655 May 22 20:37 docker-compose.yml
drwxr-xr-x 2 root root 4096 May 20 16:02 html

//Listen Sie die Dateien in chronologischer Reihenfolge auf und zeigen Sie sie in umgekehrter Reihenfolge an
$ ls -latr
total 20
drwxr-xr-x 5 root root 4096 May 19 13:47 ..
drwxr-xr-x 2 root root 4096 May 20 16:02 html
-rw-r--r-- 1 root root  655 May 22 20:37 docker-compose.yml
drwxr-xr-x 4 root root 4096 May 22 20:37 .
drwxr-xr-x 2 root root 4096 May 22 20:52 conf

//Zeigen Sie die Dateigröße in einem für Menschen lesbaren Format an
$ ls -latrh
total 20K
drwxr-xr-x 5 root root 4.0K May 19 13:47 ..
drwxr-xr-x 2 root root 4.0K May 20 16:02 html
-rw-r--r-- 1 root root  655 May 22 20:37 docker-compose.yml
drwxr-xr-x 4 root root 4.0K May 22 20:37 .
drwxr-xr-x 2 root root 4.0K May 22 20:52 conf

//Rekursiv anzeigen
# ls -latrhR
.:
total 20K
drwxr-xr-x 5 root root 4.0K May 19 13:47 ..
drwxr-xr-x 2 root root 4.0K May 20 16:02 html
-rw-r--r-- 1 root root  655 May 22 20:37 docker-compose.yml
drwxr-xr-x 4 root root 4.0K May 22 20:37 .
drwxr-xr-x 2 root root 4.0K May 22 20:52 conf

./html:
total 16K
-rw-r--r-- 1 root root  612 Apr 14 23:19 index.html
-rw-r--r-- 1 root root  494 Apr 14 23:19 50x.html
drwxr-xr-x 2 root root 4.0K May 20 16:02 .
drwxr-xr-x 4 root root 4.0K May 22 20:37 ..

./conf:
total 16K
-rw-r--r-- 1 root root  670 May 20 19:32 nginx.conf
drwxr-xr-x 4 root root 4.0K May 22 20:37 ..
-rw-r--r-- 1 root root 1.3K May 22 20:52 default.conf
drwxr-xr-x 2 root root 4.0K May 22 20:52 .

Text scrollen

Text anzeigen. Es wird verwendet, wenn der Fehlerteil aus dem Protokoll überprüft wird.

$ more access.log
$ less access.log
$ view access.log

Unterschiede zwischen den Befehlen "mehr", "weniger" und "anzeigen"

In der folgenden Tabelle sind die Unterschiede zusammengefasst, die Sie kennen sollten, obwohl es geringfügige Unterschiede gibt.

Befehl Anzeigegeschwindigkeit So beenden Sie
more schnell Endet automatisch, wenn Sie das Ende der Zeile erreichen/ q / Ctrl+C
less schnell q
view langsam :q

Recommended Posts

Eine Sammlung von Befehlen, die Sie kennen sollten, indem Sie die Ursache für die Fehlerbehebung isolieren (Server Edition).
Sie sollten die Option --color = always des Befehls grep nicht verwenden
Erklären Sie den Mechanismus von Linux, den Sie nicht unerwartet kennen
Kenntnisse der linearen Algebra, die Sie bei der KI kennen sollten
Überwachen Sie regelmäßig die HTTP-Antwort des Webservers
[Einführung in Python] Grundlegende Verwendung der Bibliothek scipy, die Sie unbedingt kennen müssen