Linux-Kenntnisse (6): Die Funktion von & am Ende des Befehls &&, |, ||, ;, (), &>, 2>&1 Verwendung und Unterschied, sehr praktisch

Vorwort

Bei der Verwendung von Linux-Befehlen werden gelegentlich &&, ||, ;, () angetroffen. Welche Auswirkung hat das einzelne „ & “-Symbol am Ende des Befehls und was ist der Unterschied zwischen diesen Befehlen? Lassen Sie uns gemeinsam lernen.

bin/zookeeper-server-start.sh config/zookeeper.properties &

 [PS]: Wenn Sie sich für Zookeeper-Lernen interessieren : ZK-Download und -Installation sowie True/False-Cluster-Konstruktion , klicken Sie hier, um teilzunehmen.

1. Am Ende des Befehls ist die Funktion eines einzelnen „ &

1.1, die Rolle von &

Funktion: Zeigt an, dass die Aufgabe im Hintergrund ausgeführt wird . Auch wenn das SSH-Fenster geschlossen ist, wird der Dienst weiterhin im Hintergrund ausgeführt.

Syntaxformat: command1 &

Hinweis: Standardmäßig ist der Prozess der Vordergrundprozess, und die Shell ist zu diesem Zeitpunkt belegt, und das Shell-Fenster kann zu diesem Zeitpunkt keine anderen Vorgänge ausführen. Normalerweise möchten wir Prozesse ohne Interaktion oft im Hintergrund starten. Zu diesem Zeitpunkt können wir am Ende des Parameters ein „&“ oder-d “ hinzufügen, um diesen Zweck zu erreichen.

#docker run -d -p 8000:8080 tomcat 后台阻塞运行(如果没有-d,窗口被关闭,服务也会随之关闭)

Natürlich können die beiden auch in Kombination verwendet werden , zum Beispiel: ./MediaServer -d & 

Erweiterung: Der Unterschied und die Verbindung bei Verwendung des Parameters -d oder & zum alleinigen Starten des Dienstes 1. Wenn der Parameter -d den Dienst startet, wird der Dienst im Hintergrund in Form eines Daemons ausgeführt und die Ausgabe wird umgeleitet in das Systemprotokoll oder die angegebene Protokolldatei 2. Wenn Sie & zum Starten des Dienstes verwenden , wird der Dienst im Hintergrund als Hintergrundprozess ausgeführt und die Ausgabe wird zur Standardausgabe außerhalb des Terminals umgeleitet. Die Ausgabeinformationen des Der Serviceprozess kann nur im Terminal geschlossen werden. Sie können ihn vorher anzeigen und können ihn danach nicht erneut anzeigen.

3. Wenn der Parameter -d den Dienst startet, können Sie den Dienstbefehl verwenden, um den Dienst anzuzeigen und zu verwalten, einschließlich der Anzeige des Dienststatus, des Neustarts des Dienstes usw.; 4.
Wenn Sie bei Bedarf & verwenden, um den Dienst zu starten Um den Dienststatus anzuzeigen oder den Dienst zu stoppen, müssen Sie den Befehl ps verwenden. Der Befehl kill ist umständlicher. 

[PS]: Wenn Sie mehr über Docker erfahren möchten : die Verwendung von Docker-Befehlen , klicken Sie hier, um einzutreten

1.2, die Rolle von Nohup

nohup ist die Abkürzung für „No Hang Up“, also „No Hang Up“. Nach dem Schließen der Terminalschnittstelle läuft der Prozess im Hintergrund weiter.

Syntaxformat: nohup Command [ Arg ... ] [  &

Vorsichtsmaßnahmen:

1) Wenn Sie den Befehl nohup verwenden , müssen Sie am Ende des Befehls ein & („und“-Symbol) hinzufügen.

2) Wenn Sie den Befehl nohup verwenden und Strg + C oder Strg + Z direkt in der Shell verwenden, wird der Vorgang beendet ! ! ! .

3) Der Befehl nohup gibt standardmäßig das Umleitungsverzeichnis aus, das sich in der Datei nohup.out des aktuellen Verzeichnisses befindet. Wenn die Datei nohup.out des aktuellen Verzeichnisses schreibgeschützt ist, wird die Ausgabe automatisch an $HOME/nohup umgeleitet .out-Datei. 


[root@centOS7 ~]# nohup ./startup.sh >output 2>&1 & 

Erweiterung: Tomcat, Nginx usw. Alle Startdienste werden über „startup.sh“ gestartet.

Zweitens die Rolle des Befehls „ &&

Funktion: Dies bedeutet, dass der nächste Befehl nur ausgeführt wird, wenn der vorherige Befehl erfolgreich ausgeführt wurde. Andernfalls wird der Befehl nach && nicht ausgeführt, wenn die Ausführung des vorherigen Befehls fehlschlägt.

Syntaxformat: Befehl1 && Befehl2   [&& Befehl3 ...]

Beispiel 

[root@centOS7 ~]# data && echo hello
bash: data: 未找到命令...
[root@centOS7 ~]# date && echo hello
2022年 10月 17日 星期一 00:07:01 CST
hello

Hinweis: Die Funktion lautet: „ Der nächste Befehl hängt davon ab, ob der vorherige Befehl erfolgreich ausgeführt wurde  “, sodass sie häufig in einigen eng verwandten Kombinationsbefehlen zu finden sind.

Beispiel: Um „expect“ zu installieren , müssen Sie zuerst die Abhängigkeiten installieren . Wenn es in einem Befehl zusammengefasst wird, wird zu diesem Zeitpunkt && verwendet. 

3. Die Rolle der „ | “-Pipeline

Funktion: | Zeigt eine Pipeline an. Die Ausgabe des vorherigen Befehls wird als Parameter des nächsten Befehls verwendet und normalerweise zum Filtern/Zusammenfassen von Daten verwendet.

Syntaxformat: Befehl1 | Befehl2   [  | Befehl3 … ]

Hinweis: | Je nach Bedarf kann es kontinuierlich in einem Befehl verwendet werden und wird normalerweise in Kombination mit find , grep , wc und anderen Befehlen verwendet.

Beispiel 1: Arbeiten Sie mit grep zusammen, um die Filterung abzuschließen

#过滤出占用端口9092的程序(kafka)
netstat -nalpt | grep 9092

Beispiel 2: Statistiken mit wc vervollständigen

 echo 'yes' | wc -l
 echo 'yes' | wc -m

  

Beispiel 3: Aufeinanderfolgende Verwendung von Rohren

[root@centOS7 ~]# cat /etc/passwd | grep /bin/bash | wc -l
2
[root@centOS7 ~]# 

  

4. Die Funktion des Spleißzeichens „ || “.

Funktion: Zeigt an, dass der nächste Befehl ausgeführt wird, nachdem die Ausführung des vorherigen Befehls fehlgeschlagen ist. Sobald ein Befehl erfolgreich ausgeführt wurde,werden die nachfolgenden Befehle, die mit || verbunden sind, nicht erneut ausgeführt.

Syntaxformat: command1 | | command2   [ | | command3 … ]  

Hinweis: Solange der vorherige Befehl erfolgreich ausgeführt wird, wird der nächste Befehl nicht ausgeführt. 

Hinweis: Der Befehl hinter  || ist eine Art Backstop, ähnlich wie Try and Catch in Java.

[root@centOS7 ~]# cat nofile || echo "hi,succ"
cat: nofile: 没有那个文件或目录
hi,succ
[root@centOS7 ~]# cat /etc/hostname || echo "hello succ"
centOS7
[root@centOS7 ~]# 

5. Die Funktion des „ ; “-Spleißzeichens

Funktion: Mehrere Befehle werden zusammengefügt und dann ausgeführt, wodurch die Anzahl der (Mensch-Computer-) Interaktionen reduziert werden kann.

Syntaxformat: command1 ; command2   [  ; command3 … ] 

Hinweis: Jeder Befehl wird durch ein ; getrennt  und jeder Befehl wird in der Reihenfolge von links nach rechts ausgeführt. Es ist jedoch egal, ob er fehlschlägt oder nicht, und alle Befehle werden ausgeführt.

[root@centOS7 ~]# data;echo 'hello';date;cat /etc/hostname
bash: data: 未找到命令...
hello
2022年 10月 17日 星期一 00:34:05 CST
centOS7
[root@centOS7 ~]# 

 

6. Die Funktion des Spleißsymbols  „ () “.

Funktion: Mehrere Befehle als Ganzes ausführen und gleichzeitig die Lesbarkeit verbessern.

Normalerweise werden mehrere Befehle durch „ ; “ getrennt und die äußerste Ebene wird mit „ () “ umschlossen, was normalerweise in einer etwas komplizierteren Shell verwendet wird.

Syntaxformat: ( Befehl1 ; Befehl2 ; Befehl3 ; ... )

7. Die Rolle des „ > “-Anschlusses

Funktion: Normale Informationen (Fehlerinformationen entfernen) in eine andere Datei umleiten

 Hinweis: Wenn Sie jedes Mal zur gleichen Datei umleiten, werden die ursprünglichen Dateiinformationen überschrieben und kein Inhalt angehängt!

#切换到指定目录
cd mypackage && ls
#根据名称查找文件,并把符合条件的名称,重定向输入到tar.txt中
find -name "*.tar.*" > tar.txt
#查看
ls ; cat tar.txt

Hinweis: Wenn Sie jedes Mal Inhalte an die Datei anhängen müssen, müssen Sie >> verwenden 

8. Die Funktionen und Unterschiede von „ &> „ und „ > „ 

> oder 1>  Funktion: Nur normale Informationen (nicht abnormale Informationen, nicht fehlerhafte Informationen) werden in die angegebene Datei umgeleitet.

2> Funktion: Leiten Sie die Fehlerinformationen nur in die angegebene Datei um.

&> oder 2>&1 Funktion: Fehlerinformationen und allgemeine Informationen gleichzeitig in die angegebene Datei umleiten.

[root@CentOs7]# lll
-bash: lll: command not found   //由于Linux没有lll这个命令所以会显示错误信息,这个就是stderr输出的错误信息
[root@CentOs7]# lll >test.txt
-bash: lll: command not found  //由于这个是错误信息  所以不能使用标准输出>将信息重定向到test.txt文件中
[root@CentOs7]# lll&>test.txt  //使用&>重定向 ,会一并把错误信息、正确信息,一并重定向到了test.txt文件
[root@CentOs7]# cat test.txt
-bash: lll: command not found  //通过cat命令确实看到了  保存的错误信息 

Hinweis: Wenn Sie jedes Mal zur gleichen Datei umleiten, überschreiben die beiden oben genannten Befehle die ursprünglichen Dateiinformationen und fügen keinen Inhalt hinzu! 

Beschreibung: Fehler- und Ausnahmeinformationen können gleichzeitig in zwei verschiedene Dateien ausgegeben werden.

make xxx 1> normal.txt 2> error.txt

1. Vertiefendes Verständnis von &> und 2>&1

Kurz gesagt, &> und >& haben die gleiche Funktion, sie leiten beide die Standardinformationen + Fehlerinformationen an den angegebenen Ort um , sie sind beide eine Kurzform für 2>&1 .

Im täglichen Entwicklungs- und Lernprozess ist es jedoch üblich, &> zu verwenden .

Obwohl sie den gleichen Effekt haben, gibt es dennoch leichte Unterschiede in der Verwendung. Es wird dringend empfohlen, &> direkt zu verwenden .

Hinweis: Wenn Sie lieber 2>&1 verwenden möchten , muss es nach der Umleitungsdatei geschrieben werden , da sonst der gewünschte Effekt nicht erzielt wird . Beispiel ( Hinweis: Datum ist ein korrekter Befehl, Daten ist ein absichtlich falscher Befehl ):

1) Falsche Verwendung: (data;echo "hello";date;cat /etc/hosts)  2>&1 >a.txt    #Write voran

2) Richtige Verwendung: (data;echo "hello";date;cat /etc/hosts) > b.txt   2>&1 #Write in the back

3) Kurzschriftbeispiel

Hinweis: Das &> im Kurzschriftmodus darf nur vor der Datei stehen, nicht hinten, sonst kommt es zu einem Syntaxfehler!

Neun, Linux-Umleitung

9.1. Drei unter Linux häufig verwendete Streams

Name   der Code  Operator Ausgedrückt in Java Dateideskriptoren unter Linux
Standardeingabe (stdin)  0 < 或 <<  System.in  /dev/stdin -> /proc/self/fd/0 -> /dev/pts/0
Standardausgabe (stdout)  1 >, >>, 1> oder 1>>  System.out /dev/stdout -> /proc/self/fd/1 -> /dev/pts/0
Standardfehlerausgabe (stderr)  2  2> oder 2>>   System.fehler  /dev/stderr -> /proc/self/fd/2 -> /dev/pts/0 

0 ist die Standardeingabe -Standardeingabe, normalerweise Eingabe über die Tastatur

1 ist die Standardausgabe stdout , die normalerweise auf dem Bildschirm ausgegeben wird

2 ist die Standardfehlerausgabe stderr , die normalerweise auf dem Bildschirm ausgegeben wird. Nach der Umleitung in die Datei wird sie auf dem Bildschirm nicht angezeigt 

9.2 Häufig verwendete Umleitungssymbole

> Normale Informationen auf eine Datei / ein Gerät umleiten (die ursprünglichen Informationen der Datei werden überschrieben)

>> Normale Informationen auf eine Datei / ein Gerät umleiten (die ursprünglichen Informationen der Datei werden nicht überschrieben, sondern nur angehängt)

&> Normale + abnormale Informationen in eine Datei / ein Gerät umleiten (die ursprünglichen Informationen der Datei werden überschrieben)

&>>Normale + abnormale Informationen in eine Datei / ein Gerät umleiten (die ursprünglichen Informationen der Datei werden nicht überschrieben, sondern nur angehängt)

2> Fehlerinformationen nur in eine Datei / ein Gerät ausgeben

Es gibt auch einige weniger genutzte, die mehr Gehirnarbeit erfordern. Wenn Sie sich für n<&- und >&n und <&- interessieren, können Sie diese separat kennenlernen.

Erinnerungstipps:

Wenn Sie sehen, dass es zwei spitze Klammern gibt, bedeutet dies, dass der Inhalt angehängt wird, und eine einzelne spitze Klammer bedeutet, dass der vorherige Inhalt überschrieben wird! ! !

9.3, /dev/null schwarzes Loch 

/dev/null ist eine spezielle Gerätedatei. Alle von dieser Datei empfangenen Daten werden verworfen, was allgemein als „Schwarzes Loch“ bekannt ist.

Es ist einer schreibgeschützten Datei sehr ähnlich, alles, was darauf geschrieben wird , ist für immer verloren und der Versuch, daraus zu lesen, wird nichts lesen. Allerdings ist /dev/null sehr nützlich für Befehlszeile und Skript. 

Verwenden Sie Szenarien von Schwarzen Löchern:

Wenn Sie nicht die richtigen / falschen Informationen auf dem Bildschirm ausgeben möchten, können Sie diesen Teil der Informationen in das Schwarze Loch ausgeben. 

 1>  /dev/null leitet normale Informationen in das Schwarze Loch hinein und aus diesem heraus

 echo "httpd server is running" >> /dev/null  #如果不希望将信息打印到屏幕,可以输出到黑洞

2>  /dev/null bedeutet, Fehler an das „Schwarze Loch“ auszugeben, anstatt sie auf dem Bildschirm anzuzeigen.

Zusammenfassen

In diesem Artikel werden die Unterschiede und Funktionen der gängigen Linux-Konnektoren &, &&, ;, |, ||, (), >, &> umfassend vorgestellt.

Epilog

Wenn Sie die Verwendung dieser Konnektoren effektiv beherrschen, können Sie Ihre innere Stärke erheblich verbessern und Ihr tägliches Linux auf ein höheres Niveau heben.

Wenn Sie denken, dass es ziemlich gut ist und es nicht einfach zu organisieren ist, liken Sie es bitte und sammeln Sie es!

Anmerkungen

Ich schätze, Sie könnten interessiert sein

1. Download von RHEL7/8, CentOS7/8 | Yum-Quellkonfiguration

2. RHEL7/Centos8 | Dynamische/statische IP konfigurieren | Ping: unbekannter Host www.baidu.com Detaillierte Erklärung

3. Hostnamen vorübergehend ändern | Hostnamen dauerhaft ändern | Ausführliche Erklärung

4. Sehen Sie sich die detaillierte Erklärung der Systemkernel-/Betriebssystemversion an_Überprüfen Sie die Kernelversion_Xuesha Changhongs Blog-CSDN-Blog

5. seq command/ mkdir -p Batch-Erstellung/Löschung von Ordnerdetails

6. Eingehende Analyse des Linux-Sortierbefehls | detaillierte Erklärung des Befehls sort -k Mm,Nn

7. Verwenden Sie head tail sed, um den Inhalt von der N-ten Zeile bis zur letzten Zeile anzuzeigen | m, n Zeilenintervall/feste Zeile | vor/nach N Zeilen (außer)

8. Netzwerkkarte aktivieren/deaktivieren (gemischter Modus) | Netzwerkkarten-Warteschlangenlänge/maximale Übertragungseinheit festlegen | eth0-Standard-Gateway ändern/löschen | Standardroute festlegen/löschen | DNS-Adresse nach Domänennamen anzeigen (Netzwerkkarte | IP-Kapitel)

9. Shell-Skript-Kampf | 6 Shell-Skripte der Einstiegsklasse (CPU-Auslastung, Überwachung, geplante Aufgaben)

10. Shell-Programmierung: Der Unterschied zwischen /bin/bash und /bin/sh_der Unterschied zwischen /bin/bash /bin/sh

Ich denke du magst

Origin blog.csdn.net/xp871038951/article/details/127355545
Empfohlen
Rangfolge