Heim Backend-Entwicklung Python-Tutorial Grundlegendes Tutorial zur Shell-Pipe-Umleitung

Grundlegendes Tutorial zur Shell-Pipe-Umleitung

Aug 15, 2017 pm 03:54 PM
shell 教程 重定向

Pipeline dient zur Lösung des Problems der Kommunikation zwischen Prozessen. Sie ermöglicht die Übertragung von Daten zwischen zwei Prozessen und die Übertragung der Ausgabedaten eines Prozesses auf einen anderen Prozess als dessen Eingabedaten.

1.8.1 Anonymous Pipe"|"

Das Pipe-Symbol bedeutet, wie der Name schon sagt, es ist wie ein Rohr, durch das die Daten vom Rohreinlass zum Rohrauslass weitergeleitet werden das Rohr.

Pipeline dient zur Lösung des Problems der Kommunikation zwischen Prozessen. Sie ermöglicht die Übertragung von Daten zwischen zwei Prozessen und die Übertragung der Ausgabedaten eines Prozesses an einen anderen Prozess als dessen Eingabedaten. Die linke Seite der Pipe ist der Datengeber und die rechte Seite der Pipe ist der Datenempfänger.

echo "abcd" | passwd --stdin username bedeutet beispielsweise, dass das Ausgabeergebnis „abcd“ des Prozesses echo als Eingabedaten des Prozesses passwd verwendet wird.

Grundlegende Rohrsymbole und ihre Verwendung sind leicht zu verstehen. Die Frage ist nun für ps aux | grep "ssh" : Warum erscheint der Grep-Prozess in den Ergebnissen?


[root@xuexi ~]# ps aux | grep ssh
root    1211 0.0 0.1 82544 3600 ?    Ss  Jul26  0:00 /usr/sbin/sshd -D
root   25236 0.0 0.2 145552 5524 ?    Ss  05:28  0:00 sshd: root@pts/0
root   25720 0.1 0.2 145416 5524 ?    Ss  06:15  0:00 sshd: root@pts/1
root   25770 0.0 0.0 112648  948 pts/1  S+  06:15  0:00 grep --color=auto ssh
Nach dem Login kopieren

Gemäß der allgemeinen Idee wird ps zuerst ausgeführt und nach Erhalt der Ausgabe werden die Ausgabedaten an grep übergeben. Zu diesem Zeitpunkt ist dies bei grep nicht der Fall läuft noch, aber ps ist fertig. Warum können wir immer noch Statistiken über den grep-Prozess sammeln? Der Grund dafür ist, dass die Pipeline eine prozessübergreifende Kommunikation implementiert und es zu Überschneidungen zwischen den beiden Prozessen kommt. Nach dem Ausführen des ps-Prozesses beginnt auch die Erfassung der Prozessinformationen und wartet auf den Empfang von Daten. Wenn ps Daten sammelt, wird die Ausgabe freigegeben. Die Daten werden an den Speicher übergeben und zur Filterung an grep weitergeleitet.

Das Wesentliche einer Pipe ist die Datenübertragung. Die Ausgabedaten auf der linken Seite der Pipe werden im Speicher abgelegt und vom Prozess auf der rechten Seite der Pipe gelesen. Wenn der Speicher nicht ausreicht, um die Ausgabedaten vollständig zu speichern, wartet der Prozess auf der linken Seite der Pipe, bis die rechte Seite der Pipe einen Teil der Daten aus dem Speicher entfernt, sodass der Prozess auf der linken Seite der Pipe ausgeführt werden kann Die Pipe kann weiterhin ausgeben und der Prozess auf der rechten Seite der Pipe wird sofort gestartet, nachdem der Prozess auf der linken Seite der Pipe gestartet wurde. Sie befand sich jedoch im Wartezustand und wartete auf den Empfang von Daten, die von der Pipe übergeben wurden .

Mit anderen Worten: Die Prozesse auf der linken und rechten Seite der Pipeline laufen nahezu in keiner Reihenfolge ab.

Wie verhindert ps aux grep „ssh“, dass der eigene Prozess von grep in den Ergebnissen erscheint? Es gibt zwei Methoden:

Methode eins: ps aux |. h ]"


[root@xuexi ~]# ps aux | grep ss[h]
root    1211 0.0 0.1 82544 3600 ?    Ss  Jul26  0:00 /usr/sbin/sshd -D
root   25236 0.0 0.2 145552 5524 ?    Ss  05:28  0:00 sshd: root@pts/0
root   25720 0.0 0.2 145416 5524 ?    Ss  06:15  0:00 sshd: root@pts/1
Nach dem Login kopieren
Methode eins besteht darin, die Funktion „-v“ von grep anzuwenden, und Methode zwei darin, die Funktion regulärer Ausdrücke anzuwenden.

Bei der Verwendung anonymer Pipes haben Sie möglicherweise festgestellt, dass die Prozesse auf beiden Seiten der Pipe zur gleichen Prozessgruppe gehören, was bedeutet, dass die Daten auf der linken Seite der Pipe dies können Diese Daten können nur an den Prozess auf der rechten Seite der Pipe übergeben werden. Neben anonymen Pipes gibt es aber auch benannte Pipes, die die Daten eines Prozesses in einer Pipe-Datei (Fifo) speichern. Andere Prozesse können die darin enthaltenen Daten lesen Leser nicht mehr eingeschränkt. Informationen zu Named Pipes finden Sie im Linux/Unix-Betriebssystemkernel oder in Programmierbüchern, die im Allgemeinen detaillierte Einführungen enthalten.

1.8.2 Umleitung

1.8.2.1 Umleitungsgrundlagen

Am häufigsten Die Datei Deskriptoren der Standardeingabe (stdin), der Standardausgabe (stdout) und der Standardfehlerausgabe (stderr) sind jeweils 0, 1 und 2, wobei 0, 1 und 2 auch als ihre numerischen Codes betrachtet werden können. Die Ausgabeinformationen können als die auf dem Bildschirm gedruckten Informationen betrachtet werden. Diejenige, die keinen Fehler ausgibt, ist die Standardausgabe, und diejenige, die eine Fehlermeldung ausgibt, ist die Standardfehlerausgabe. Natürlich ist diese Erklärung voreingenommen , aber es ist leicht zu verstehen. Sie können auch Ihre eigenen Deskriptoren anpassen, um eine erweiterte Umleitung zu implementieren. Ihre Verwendung wird möglicherweise in zukünftigen Artikeln vorgestellt.

Standardeingabe = /dev/stdin = Code 0 = < oder <<

Stdout = /dev/stdout = Code 1 = > oder >>

Standardfehler = /dev/stderr = Code 2 = 2>> verwenden.

<, >, 2> implementiert die Überschreibfunktion, >>, 2>> implementiert die Zusatzfunktion, aber << bedeutet hier: Erzeugen eines Dokuments (hier Dokument), was später im Inhalt der Zusammenarbeit zwischen Katze und Redirect erläutert wird. Darüber hinaus gibt es <<<, was einen Here-String bedeutet, siehe auch unten.

Manchmal bedeutet die Verwendung von „-“ auch /dev/stdin. Zum Beispiel:


Die Symbole 2>&1 und &> sind in Skripten üblich. Sie weisen beide darauf hin, dass stdout und stderr an dieselbe Stelle umgeleitet werden , leitet den gesamten Ausgabeinhalt weiter. Wie zum Beispiel das häufigste „&> /dev/null“.
[root@xuexi ~]# cat /etc/fstab | cat -
Nach dem Login kopieren

Das Auswerfen von stdout oder stderr nach /dev/null bedeutet, dass die Ausgabeinformationen verworfen werden. Umgekehrt bedeutet das Umleiten von /dev/null in eine Datei, dass die Datei gelöscht wird.


Darüber hinaus gibt es mehrere Möglichkeiten, Dateien schnell zu löschen
[root@xuexi ~]# cat /dev/null > ab.sh
Nach dem Login kopieren

[root@xuexi ~]# > ab.sh
[root@xuexi ~]# : > ab.sh       # 或"true >ab.sh",其实它们都等价于">ab.sh"
[root@xuexi ~]# echo &#39;&#39; > ab.sh
[root@xuexi ~]# truncate -s 0 ab.sh  # truncate命令用于收缩和扩展文件大小
[root@xuexi ~]# dd if=/dev/null of=ab.sh
Nach dem Login kopieren

最后最重要的一点:在有重定向符号的语句中,命令执行之前已经将文件截断了。所以如果正在编辑一个文件并将编辑的结果重定向回这个文件将出现异常,因为截断后就没有合适的内容用于编辑。一个简单的示例如下:


[root@xuexi ~]# head a.log > a.log
Nach dem Login kopieren

有些时候直接使用">"覆盖输出是比较危险的。可以使用set -C来设置如果输出重定向文件已经存在则不覆盖。使用set +C来取消set -C的效果。如果在设置了set -C时仍然想强制覆盖,可以使用“>|”代替“>”来重定向输出。同理错误输出也有此特性。


[root@xuexi tmp]# set -C
[root@xuexi tmp]# cat flip >ttt.txt
-bash: ttt.txt: cannot overwrite existing file
[root@xuexi tmp]# cat flip >| ttt.txt
[root@xuexi tmp]# set +C
Nach dem Login kopieren

1.8.2.2 cat和重定向配合

配合cat使用可以分行输入内容到文件中。


[root@xuexi tmp]# cat <<eof>log.txt  # 覆盖的方式输入到log.txt
> this is stdin character
> eof
Nach dem Login kopieren

也可以使用下面的方法。


[root@xuexi tmp]# cat >log1.txt <<eof 
> this is stdin character first!
> eof
Nach dem Login kopieren

一方面,eof部分都必须使用"<


[root@xuexi ~]# cat <<abcx
> 123
> 345
> abcx
123
345
Nach dem Login kopieren

另一方面,>log1.txt表示将document的内容覆盖到log1.txt文件中,如果是要追加,则使用>>log1.txt。所以,追加的方式如下:


[root@xuexi tmp]# cat >>log1.txt <<eof 
> this is stdin character first!
> eof
Nach dem Login kopieren


[root@xuexi tmp]# cat <<eof>>log1.txt 
> this is stdin character first!
> eof
Nach dem Login kopieren

1.8.2.3 tee双重定向

可以使用tee双重定向。一般情况下,重定向要么将信息输入到文件中,要么输出到屏幕上,但是既想输出到屏幕又想输出到文件就比较麻烦。使用tee的双重定向功能可以实现该想法。如图。


tee [-a] file
Nach dem Login kopieren

选项说明:

-a:默认是将输出覆盖到文件中,使用该选项将变为追加行为。

file:除了输出到标准输出中,还将输出到file中。如果file为"-",则表示再输入一次到标准输出中。

例如下面的代码,将a开头的文件内容全部保存到b.log,同时把副本交给后面的的cat,使用这个cat又将内容保存到了x.log。其中"-"代表前面的stdin。


[root@xuexi tmp]# cat a* | tee b.log | cat - >x.log
Nach dem Login kopieren

还可以直接输出到屏幕:


[root@xuexi tmp]# cat a* | tee b.log | cat
Nach dem Login kopieren

tee默认会使用覆盖的方式保存到文件,可以使用-a选项来追加到文件。如:


[root@xuexi tmp]# cat a* | tee -a b.log | cat
Nach dem Login kopieren

现在就可以在使用cat和重定向创建文件或写入内容到文件的同时又可以在屏幕上显示一份。


[root@xuexi tmp]# cat <<eof | tee ttt.txt
> x y
> z 1
> eof
x y
z 1
Nach dem Login kopieren

1.8.2.4 <<和<<<

在bash中,<<和<<<是特殊重定向符号。<<表示的是here document,<<<表示的是here string。

here document在上文已经解释过了,对于here string,表示将<<<后的字符串作为输入数据。

例如:


passwd --stdin user <<< password_value
Nach dem Login kopieren

等价于:


echo password_value | passwd --stdin user
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonGrundlegendes Tutorial zur Shell-Pipe-Umleitung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Tutorial zur Verwendung von Dewu Tutorial zur Verwendung von Dewu Mar 21, 2024 pm 01:40 PM

Dewu APP ist derzeit eine sehr beliebte Marken-Shopping-Software, aber die meisten Benutzer wissen nicht, wie sie die Funktionen in Dewu APP verwenden. Nachfolgend finden Sie eine Zusammenfassung des Dewuduo-Tutorials Interessierte Benutzer können vorbeikommen und einen Blick darauf werfen! Tutorial zur Verwendung von Dewu [20.03.2024] Verwendung des Dewu-Ratenkaufs [20.03.2024] So erhalten Sie Dewu-Gutscheine [20.03.2024] So finden Sie den manuellen Kundendienst von Dewu [2024-03- 20] So überprüfen Sie den Abholcode von Dewu [20.03.2024] Wo Sie Dewu kaufen können [20.03.2024] So eröffnen Sie Dewu VIP [20.03.2024] So beantragen Sie die Rückgabe oder den Umtausch von Dewu

So löschen Sie schnell die Zeile am Ende einer Datei unter Linux So löschen Sie schnell die Zeile am Ende einer Datei unter Linux Mar 01, 2024 pm 09:36 PM

Bei der Verarbeitung von Dateien unter Linux-Systemen ist es manchmal erforderlich, Zeilen am Ende der Datei zu löschen. Dieser Vorgang kommt in praktischen Anwendungen sehr häufig vor und kann durch einige einfache Befehle erreicht werden. In diesem Artikel werden die Schritte zum schnellen Löschen der Zeile am Ende der Datei im Linux-System vorgestellt und spezifische Codebeispiele bereitgestellt. Schritt 1: Überprüfen Sie die letzte Zeile der Datei. Bevor Sie den Löschvorgang durchführen, müssen Sie zunächst bestätigen, welche Zeile die letzte Zeile der Datei ist. Sie können den Befehl tail verwenden, um die letzte Zeile der Datei anzuzeigen. Der spezifische Befehl lautet wie folgt: tail-n1filena

Im Sommer müssen Sie unbedingt versuchen, einen Regenbogen zu schießen Im Sommer müssen Sie unbedingt versuchen, einen Regenbogen zu schießen Jul 21, 2024 pm 05:16 PM

Nach dem Regen im Sommer können Sie oft ein wunderschönes und magisches besonderes Wetterbild sehen – den Regenbogen. Dies ist auch eine seltene Szene, die man in der Fotografie antreffen kann, und sie ist sehr fotogen. Für das Erscheinen eines Regenbogens gibt es mehrere Bedingungen: Erstens sind genügend Wassertröpfchen in der Luft und zweitens scheint die Sonne in einem niedrigeren Winkel. Daher ist es am einfachsten, einen Regenbogen am Nachmittag zu sehen, nachdem der Regen nachgelassen hat. Allerdings wird die Bildung eines Regenbogens stark von Wetter, Licht und anderen Bedingungen beeinflusst, sodass sie im Allgemeinen nur von kurzer Dauer ist und die beste Betrachtungs- und Aufnahmezeit sogar noch kürzer ist. Wenn Sie also auf einen Regenbogen stoßen, wie können Sie ihn dann richtig aufzeichnen und qualitativ hochwertige Fotos machen? 1. Suchen Sie nach Regenbögen. Zusätzlich zu den oben genannten Bedingungen erscheinen Regenbögen normalerweise in Richtung des Sonnenlichts, das heißt, wenn die Sonne von Westen nach Osten scheint, ist es wahrscheinlicher, dass Regenbögen im Osten erscheinen.

Anleitung zum Deaktivieren des Zahlungstons auf WeChat Anleitung zum Deaktivieren des Zahlungstons auf WeChat Mar 26, 2024 am 08:30 AM

1. Öffnen Sie zunächst WeChat. 2. Klicken Sie oben rechts auf [+]. 3. Klicken Sie auf den QR-Code, um die Zahlung einzuziehen. 4. Klicken Sie auf die drei kleinen Punkte in der oberen rechten Ecke. 5. Klicken Sie auf , um die Spracherinnerung für den Zahlungseingang zu schließen.

Tutorial zu DisplayX (Monitortestsoftware). Tutorial zu DisplayX (Monitortestsoftware). Mar 04, 2024 pm 04:00 PM

Das Testen eines Monitors beim Kauf ist ein wesentlicher Bestandteil, um den Kauf eines beschädigten Monitors zu vermeiden. Heute werde ich Ihnen beibringen, wie Sie den Monitor mit Software testen. Methodenschritt 1. Suchen Sie zunächst auf dieser Website nach der DisplayX-Software, laden Sie sie herunter, installieren Sie sie und öffnen Sie sie. Sie werden dann viele Erkennungsmethoden sehen, die den Benutzern zur Verfügung gestellt werden. 2. Der Benutzer klickt auf den regulären Volltest. Der erste Schritt besteht darin, die Helligkeit des Displays zu testen. Der Benutzer stellt die Anzeige so ein, dass die Kästchen deutlich sichtbar sind. 3. Klicken Sie dann mit der Maus, um den nächsten Link einzugeben. Wenn der Monitor jeden schwarzen und weißen Bereich unterscheiden kann, bedeutet dies, dass der Monitor immer noch in Ordnung ist. 4. Klicken Sie erneut mit der linken Maustaste und Sie sehen den Graustufentest des Monitors. Je glatter der Farbübergang, desto besser der Monitor. 5. Darüber hinaus haben wir in der DisplayX-Software

Welche Software ist Photoshopcs5? -tutorial zur Verwendung von Photoshopcs5 Welche Software ist Photoshopcs5? -tutorial zur Verwendung von Photoshopcs5 Mar 19, 2024 am 09:04 AM

PhotoshopCS ist die Abkürzung für Photoshop Creative Suite. Es handelt sich um eine von Adobe hergestellte Software, die häufig im Grafikdesign und in der Bildverarbeitung verwendet wird. Lassen Sie mich Ihnen heute erklären, was Photoshopcs5 ist und wie Sie Photoshopcs5 verwenden. 1. Welche Software ist Photoshop CS5? Adobe Photoshop CS5 Extended ist ideal für Profis in den Bereichen Film, Video und Multimedia, Grafik- und Webdesigner, die 3D und Animation verwenden, sowie Profis in den Bereichen Technik und Wissenschaft. Rendern Sie ein 3D-Bild und fügen Sie es zu einem zusammengesetzten 2D-Bild zusammen. Bearbeiten Sie Videos einfach

Experten unterrichten Sie! Der richtige Weg, lange Bilder auf Huawei-Handys zu schneiden Experten unterrichten Sie! Der richtige Weg, lange Bilder auf Huawei-Handys zu schneiden Mar 22, 2024 pm 12:21 PM

Mit der kontinuierlichen Weiterentwicklung von Smartphones sind die Funktionen von Mobiltelefonen immer leistungsfähiger geworden, darunter die Funktion zum Aufnehmen langer Bilder zu einer der wichtigen Funktionen, die viele Benutzer im täglichen Leben nutzen. Lange Screenshots können Benutzern dabei helfen, eine lange Webseite, Gesprächsaufzeichnung oder ein Bild gleichzeitig zu speichern, um sie einfacher anzeigen und teilen zu können. Unter vielen Mobiltelefonmarken gehören auch Huawei-Handys zu den Marken, die von den Nutzern sehr geschätzt werden, und auch ihre Funktion zum Zuschneiden langer Bilder wird hoch gelobt. In diesem Artikel erfahren Sie, wie Sie lange Bilder mit Huawei-Mobiltelefonen richtig aufnehmen, und erhalten einige Expertentipps, die Ihnen dabei helfen, Huawei-Mobiltelefone besser zu nutzen.

PHP-Tutorial: So konvertieren Sie den Typ int in einen String PHP-Tutorial: So konvertieren Sie den Typ int in einen String Mar 27, 2024 pm 06:03 PM

PHP-Tutorial: So konvertieren Sie den Int-Typ in einen String. In PHP ist das Konvertieren von Ganzzahldaten in einen String ein häufiger Vorgang. In diesem Tutorial erfahren Sie, wie Sie die in PHP integrierten Funktionen verwenden, um den Typ int in einen String zu konvertieren, und stellen gleichzeitig spezifische Codebeispiele bereit. Cast verwenden: In PHP können Sie Cast verwenden, um ganzzahlige Daten in einen String umzuwandeln. Diese Methode ist sehr einfach. Sie müssen lediglich (string) vor den ganzzahligen Daten hinzufügen, um sie in einen String umzuwandeln. Unten finden Sie einen einfachen Beispielcode

See all articles