1. Eingabe und Ausgabe, Umleitung
2. <(cmd);>(cmd)
3.>;<;>>;<<>>> 1: cat;head;tail;cut;wc;sort;uniq;tr;tac;rev
1. Eingabe und Ausgabe, Umleitung, Pipe
1. Das Linux-Programm verfügt über drei Standardeingaben und Ausgabe, nämlich:
Standardeingabe, dargestellt durch die Zahl 0. Standardmäßig ist es mit der Tastatur verbunden. Programme werden normalerweise verwendet, um Benutzereingaben zu erhalten
Standardausgabe, dargestellt durch die Zahl 1, ist standardmäßig mit dem Bildschirm verbunden. Programme werden normalerweise zur Ausgabe von Informationen verwendet
Standardfehler, dargestellt durch die Zahl 2, ist standardmäßig mit dem Bildschirm verbunden. Programme werden normalerweise zur Ausgabe von Fehlermeldungen verwendet
Parsing:
Befehl passwd liest das Benutzerpasswort aus der Standardeingabe, sodass der Benutzer das Passwort über die Tastatur eingeben kann Der Echo-Befehl gibt das Ergebnis an die Standardausgabe aus, sodass das Ergebnis auf dem Bildschirm angezeigt werden kann
Normale Benutzer haben keine Berechtigung zum Anzeigen es /root-Verzeichnis, also ist ein Fehler aufgetreten, also gibt ls die Fehlermeldung an den Standardfehler aus, d. h. den Bildschirm
2, >>
> Löschen Sie die Originaldaten und schreiben Sie neue Daten
>> Hängen Sie die neuen Daten an die Originaldaten an
3./dev /null
Allgemein bekannt als: Papierkorbdatei
# echo hello world > /dev/null – Die Daten werden umgeleitet zu dieser Datei wird vom Kernel umgeleitet. Sie können diese Funktion verwenden, um bestimmte Ausgabeinformationen zu blockieren # ls / /root 2> -- die Fehlermeldung des Befehls abschirmen
4. Ausgabeumleitung
Benutzer können die Standardeingabe- und Ausgaberichtung nach Bedarf ändern
# ls -l > # ls -l 1> Beide Elemente leiten die Standardausgabe in die Testdatei um, d. h. der Standardwert 1 kann weggelassen werden.
# ls /jjjj 2> Standardfehler in die Testdatei
# ls / /jjjj 1> stderr --Standardausgabe und Standardfehler in zwei verschiedene Dateien umleiten
# ls /jjjj / > std 2>&1 – Standardfehler mit Standardausgabe zusammenführen und in eine Datei umleiten
# ls /jjjj / &> der vorherige Artikel Die Anweisungen sind gleichwertig und prägnanter
# ls /jjjj / &>> leitet auch Standardausgabe und Standardfehler in eine Datei um
5 Eingabeumleitung
# cat 0< /etc/passwd
# cat < /etc/passwd
# cat /etc/passwd --cat Befehl Standard Die Eingabe kommt von
in der Datei /etc/passwd 6. Pipe
Die oben beschriebene Umleitung verbindet die Standardeingabe und -ausgabe mit der Datei. Wir können auch die Standardeingabe und -ausgabe zwischen mehreren Programmen verbinden, um Daten zwischen Befehlen zu übertragen. Diese Technologie wird anschaulich als Pipeline bezeichnet Programm ganz links zum Programm ganz rechts. Pipes sind eine sehr verbreitete Technologie in der Linux-Shell. Mit der Pipe-Technologie können Sie mehrere kleine Tools zusammen verwenden, um sehr komplexe und leistungsstarke Funktionen auszuführen.
# cat /etc/passwd |. Die Standardausgabe des Befehls auf der linken Seite wird als Standardeingabe des Befehls auf der rechten Seite verwendet
# cat /etc/passwd |. head -n 3 |. tail -n 1
Ausführliche Diskussion der Standardeingabe und -ausgabe
Die Standardeingabe Die meisten Programme verwenden diese drei Dateideskriptoren standardmäßig als eigene Eingabe und Ausgabe, das heißt, das Programm muss diese drei nicht verwenden Standard-Dateideskriptoren dienen dazu, einen neuen Dateideskriptor zur Verwendung zu öffnen. Wenn das Programm keine Standardeingabe und -ausgabe verwendet, funktioniert die hier verwendete Umleitung nicht. Zum Beispiel:
passwd: Das Programm liest das Benutzerpasswort aus der Standardeingabe, sodass wir ihm das Passwort durch Umleitung der Standardeingabe bereitstellen können
ssh: Der Befehl ist ein Programm, das für die Remote-Anmeldung verwendet wird. Wenn es das vom Benutzer eingegebene Passwort liest, verwendet es nicht die Standardeingabe, daher können wir ihm das Passwort nicht durch Umleitung der Standardeingabe bereitstellen
8. Überprüfen Sie die mit der Standardeingabe und -ausgabe des Prozesses verbundenen Dateien
# sleep 999 1>&1 – Führen Sie den Befehl aus in einem Terminal
# pgrep -x sleep – Suchen Sie in einem anderen Terminal die Prozess-ID von Sleep
# lsof -anop 16715 -d 0,1,2 – Sehen Sie sich die geöffneten Dateien an durch den Prozess
9. Überprüfen Sie den Zeitpunkt der Umleitung
# vim file
# cat -n file > Fügen Sie vor jeder Zeile eine Zeilennummer hinzu, leiten Sie dann das Ergebnis um und speichern Sie es zurück in der Originaldatei. Datei
# cat-Datei – ist leer
Ursache: Bevor die Shell den Befehl ausführt, führt sie zuerst einen Umleitungsvorgang aus. Im zweiten Befehl wird zuerst der Inhalt der Datei gelöscht. Nachdem der Umleitungsvorgang die Datei gelöscht und dann die Datei gelöscht hat, sehen Sie natürlich keinen Inhalt
$ sudo ls /root > --in diesem Beispiel Der Benutzer hat keine Möglichkeit, das Kennwort einzugeben, da der Umleitungsvorgang zuerst ausgeführt wird, der aktuelle Benutzer ein normaler Benutzer ist und die Datei nicht im Pfad /root/ls.log erstellt werden kann. Die Shell-Fehler und Exits: bash : /root/ls.log: Berechtigung verweigert. Der Befehl sudo wurde noch nicht ausgeführt, daher besteht keine Möglichkeit, das Passwort einzugeben
2. <(cmd);>(cmd)
1, <(cmd)
Standardeingabe durch Prozessersetzung umleiten
2, >(cmd)
Verwenden Sie die Prozessersetzung, um die Standardausgabe umzuleiten
3. Prozessersetzung
Die Standardausgabe des Prozesses wird in einer temporären Datei gespeichert und an diese zurückgegeben Der Pfad <(). Wenn Sie die Ausgabe des Programms verwenden müssen, aber keine Zwischendatei generieren möchten, können Sie die Verwendung von Prozessersetzung
# paste <(seq $ (wc -l /etc/passwd | cut -d" " -f1)) <(awk -F: '{print $1}' /etc/passwd)
# paste <(seq 26) <(awk -F: '{ print $1}' /etc/passwd) --Die beiden Befehle können verglichen werden
3.>;<;> ;>;<< ;;>>>;<<<
1, > --Ausgabeumleitung, erstellen (überschreiben, falls vorhanden)
# echo 'hello world' > test -- Wenn test nicht vorhanden ist, überschreiben Sie den Inhalt in
2, < -Eingabeumleitung, bezogen auf die Datei
# less < (ls /) --Befehlsersetzung wird hier verwendet
# wc -l < $(echo /etc/passwd)
# wc -l <(cat /etc/ passwd) – Prozessersetzung wird hier verwendet
3. Zur Datei umleiten und erstellen (am Ende der Datei hinzufügen, falls vorhanden)
# echo 'hello george' - - Wenn George nicht existiert, erstellen Sie es, falls vorhanden, hängen Sie den Inhalt an das Ende der Datei an
4 ;< --Redirect, verwendet für Here-Dokument
4.1. Here-Dokument
ist eine
spezielle Umleitungsmethode in Linux Shell Das Formular lautet wie folgt:
cmd << Trennzeichen
Hier Dokumentinhalt
Trennzeichen
: << Trennzeichen --Shell-Batch-Kommentar
Here Document Content
Trennzeichen
Funktion: Übergeben Sie den Inhalt zwischen zwei Trennzeichen (Here Document Content) als Eingabeparameter an cmd
4.2. Terminal
# cat << EOF
>
> EOF
EOF – es ist nur ein Logo und kann durch jedes beliebige legale Zeichen ersetzt werden
> Symbol ist die vom Terminal generierte Kennung, um zur Eingabe von Informationen aufzufordern
Trennzeichen – es muss im Top-Format geschrieben werden und es dürfen keine Zeichen davor und danach, einschließlich Leerzeichen
4.3, Shell
# vim hier.sh --Hinweis: Sie können darin auch Variablen verwenden
#!/bin/bashcat << EOF > echo $1
EOF# chmod a+x hier.sh# ./here.sh george# cat output.sh --View der Inhalt; hier wird $1 erweitert. Wird zum Parameter des Skripts
Hinweis:
Wenn Sie diese Variable nicht erweitern möchten, müssen Sie doppelte Anführungszeichen verwenden, um das erste EOF einzuschließen.
4.4 <<-
Hier Dokument Eine andere Verwendung besteht darin, „<<“ zu ändern. -'. Die einzige Änderung bei der Verwendung von <<- besteht darin, dass der Tabulator (Tabulatorzeichen) vor jeder Zeile des Inhaltsteils des Here-Dokuments gelöscht wird. Diese Verwendung dient der Vereinfachung des Einrückens des Inhaltsteils beim Schreiben des Here-Dokuments Dokument. Code lesen5, <<< --Redirect, für Here string
# wc -l <<< ls -l /home)"# while read x; do echo "hello";done <<< "$(seq 5)"
# bc <<< "2 ^ 10"
# vim string.sh
#!/bin/bash
while read line
do
if [ "${line#ftp :}" != "$line" ];then
awk -F: '{print $6}' <<< $line
break
fi
Fertig < /etc/passwd
Hinweis: Durchlaufen Sie jede Zeile in der Datei /etc/passwd, drucken Sie das Home-Verzeichnis aus und beenden Sie es die Schleife
${line#ftp:}: ftp: wird am Anfang einer bestimmten Zeile gefunden, dann wird nur der nicht übereinstimmende Teil der Zeile genommen
# chmod a +x string.sh
# ./string.sh
4. Textverarbeitung_1: cat;head;tail;cut ;wc;sort ;uniq;tr;tac;rev
Textverarbeitung ist eine Aufgabe, mit der jeder Systemadministrator häufig in Berührung kommt. Der Kerninhalt ist die Verwendung verwandter Tools besteht darin, mehrere Tools flexibel zu kombinieren, um die Aufgabe abzuschließen
1. cat --concatinate, den Inhalt einer oder mehrerer Dateien der Reihe nach verketten und auf der Standardausgabe ausgeben
# cat -n /etc /passwd – Zeigt den Dateiinhalt an und fügt die Zeilennummer hinzu
# cat -A /etc/passwd – Gibt einige unsichtbare Zeichen und Positionsmarkierungen aus
# cat 1.txt 2 .txt > test.txt – Dateien zusammenführen
2. head – Datei-Header lesen
# head -n 3 /etc /passwd – Lesen Sie die ersten drei Zeilen der Datei /etc/passwd
# head -n -1 file – Verwerfen Sie die letzte Zeile der Datei
# head -c 3 / etc/passwd --Lesen Sie die ersten drei Bytes der Datei /etc/passwd
# head -c -3 file --verwerfen Sie die letzten drei Bytes der Datei
# head -c 10m /dev/urandom > ; big --Eine 10M-Datei erstellen
3. tail --Das Ende der Datei lesen
#
tail -n 3 /etc/passwd – Lesen Sie die nächsten drei Zeilen der Datei /etc/passwd
# tail -n +28 /etc/passwd – lesen Sie von Zeile 28 bis zum Ende der Datei; Verwerfen Sie die 27 Zeilen im Kopf
# tail -c 3 /etc/passwd --Lesen Sie die letzten drei Bytes der Datei /etc/passwd
# tail -c +28 /etc/passwd – Vom 28. Byte bis zum Ende der Datei lesen; die ersten 27 Bytes verwerfen
# tail -f /etc/passwd – – Änderungen verfolgen im Inhalt am Ende der Datei, wird oft verwendet, um Änderungen in Protokolldateien zu überprüfen, sehr praktisch
4. Ausschneiden – Die Funktion ähnelt awk, ist jedoch nicht so leistungsstark und komplex wie awk. Wenn Sie Daten manipulieren möchten Bei der Spaltenausgabe wird awk häufig verwendet, und cut wird selten verwendet
Allgemeine Optionen:
-d -- Trennzeichen definieren
-b --Das Byte an der angegebenen Position ausgeben
-c --Ausgabe die angegebene Position Zeichen (Zeichen)
# echo "a;b;c d;e" |. cut -d ";" -- -d definiert das Trennzeichen (Standard ist TAB); -f definiert das entsprechende Ausgabefeld
# cat -n /etc/passwd | ,7 - - Zeilenumbruchzeichen als Trennzeichen verwenden
# echo I am Chinese |. cut -b1-3 -- -b gibt das Byte an der angegebenen Position aus; ein utf8-Chinesischzeichen belegt 3 Byte
# echo Ich bin Chinesisch |. cut -c2-4 -- -c gibt das Zeichen (Zeichen) an der angegebenen Position aus; der Unterschied zu -b besteht in der Verarbeitung nicht-englischer Zeichen
# echo Sei ein mutiger Chinese |. cut -b1-2,9 -- gibt ein „falsches“ Wort aus
# echo -n Sei ein mutiger Chinese |. - wird feststellen, dass die drei Bytes 1, 2, 9 sind: e581 87
# echo -n false |. xxd – und „false“ ist auch
5. wc - Berechnen Sie die Anzahl der Bytes, Zeichen, Wörter und Datenzeilen
Gemeinsame Optionen:
-c - - Zählen Sie die Anzahl der Bytes
-m – Zähle die Anzahl der Zeichen
-w – Zähle die Anzahl der Wörter
-l – Berechne die Anzahl der Zeilen
# echo -n Ich bin Chinese | wc -- -c Berechne die Anzahl der Bytes, 5 utf8-Chinesisch-Konto für 15 Zeichen Abschnitt
# echo -n Ich bin Chinesisch |. wc -m -- -m zählt die Anzahl der Zeichen. Der Unterschied zu -c besteht bei der Verarbeitung nicht-englischer Zeichen, ähnlich dem Befehl cut
# echo -n Ich bin Chinese |. wc -w -- -w zählt die Anzahl der Wörter, es gibt kein Trennzeichen, um sie zu trennen, 5 chinesische Zeichen zählen als ein Wort, was sich von den sogenannten „Wörtern“ im Chinesischen unterscheidet
# echo -n Großbuchstaben CHINESE |. wc -w --Zwei Wörter
# echo -n Großbuchstaben CHINESE | Zeilenumbruchzeichen)
# echo -n Großbuchstaben CHINESE |. wc -m --17 englische Zeichen, 18 ohne -n (da es ein Zeilenumbruchzeichen gibt)
# wc -l /etc/passwd - - -l Count die Anzahl der Zeilen
6. Sortieren – Dateien nach Zeile sortieren
Allgemeine Optionen:
- t – Geben Sie das Trennzeichen an
-k – Geben Sie das sortierte Feld an
-u – Duplikat entfernen Zeilen
-n, -h --Sortieren nach Wert
-r --Sortieren in umgekehrter Reihenfolge
# cut -d ":" -f7 /etc/passwd |. sort -u -- -u doppelte Zeilen entfernen
# echo -e "1n2n10" | "1n2n10" |. sort -n --n sortiert nach numerischem Wert, kann keine Einheitszeichen wie K, M, G usw. verarbeiten.
# tail -n +2 |. 5n -- -k gibt das sortierte Feld
# ls -lh | an. tail -n +2 | kann K, M, G und andere Einheiten beim Sortieren nach numerischem Wert verarbeiten Zeichen
# head -4 /etc/passwd |. sort -t: -k7,7
-- -t verwendet Doppelpunkt: als Feldtrennzeichen und sortiert nach dem 7. Feld
# head -4 /etc/passwd |. sort -t: -k7,7 -k3,3n --Sortieren Sie zuerst nach dem 7. Feld. Wenn das 7. Feld den gleichen Wert hat, sortieren Sie nach dem 3. Feld.
# echo -e "1n2n3" |. sort -nr --r reverse sort
# head -4 /etc/passwd | Kehren Sie die Sortierung des dritten Felds um. Sie können auch zwei Felder gleichzeitig umkehren
7. uniq – Aufeinanderfolgende doppelte Zeilen entfernen
Häufig verwendete Optionen :
-c – Anzahl der doppelten Zeilen zählen
# echo -e "1n1n2n1" |. Es gibt immer noch zwei Einsen im Ergebnis, da die beiden Einsen diskontinuierlich sind
# echo -e "1n1n2n1" |. sort muss nicht aufeinanderfolgend sein, um Duplikate zu entfernen
# cut -d: -f7 /etc /passwd |. uniq -c – Zählen Sie anhand des Sortierbefehls die Anzahl der Vorkommen verschiedener Login-Shells
8
Allgemeine Optionen:
-d --delete, alle übereinstimmenden Buchstaben löschen
- s --Reduzieren, gleiche Zeichen reduzieren
Format: tr SET1 SET2
Hinweis: Konvertieren Sie die Zeichen in Satz 1 in die entsprechenden Zeichen in Satz 2, sodass im Prinzip die Zeichen in den beiden Sätzen The Die Zahlen sollten jedoch gleich sein, wenn die Anzahl der Zeichen in den beiden Sätzen nicht gleich ist. Bitte achten Sie in diesem Fall auf die Ergebnisse. Wichtige Punkte:
a, tr ist es egal, welche Zeichen sich in den beiden Sätzen befinden, es ersetzt einfach die Zeichen an den entsprechenden Positionen einzeln,
b. tr ersetzt ein einzelnes Zeichen und kann die Zeichenfolge nicht ersetzen
# echo abc |. tr a-z A-Z – Wandelt 26 Kleinbuchstaben in die entsprechenden Großbuchstaben um
# echo abc |. tr ab BA – Wandeln Sie a und b in B bzw. A um
# echo Gute Menschen tun gute Dinge |. tr Gut oder schlecht – „gut“ wird in „schlecht“ umgewandelt
# echo abcdefg |. tr a-z AB --Set 2 ist kürzer, das Programm verwendet automatisch das letzte Zeichen in Set 2, um Set 2 zu verlängern
# echo abcdefg |. tr a-b A-Z --Set 2 ist länger Programm erweitert automatisch den Satz 2 Cut short
# echo Abc |. tr a-zA-Z A-Za-z --Umkehren der Größe der englischen Buchstaben
# echo hallo tr -. d ow -- -d löscht alle passenden Buchstaben
# echo 0123456789 |.
# tr -d '.
# head -c 3m bigfile > file1 --Importieren Sie die ersten 3M-Daten in Datei1
# tail -c 4m bigfile > file3 --Importieren Sie die letzten 3M-Daten in Datei3
# head -c 6m bigfile |. tail -c 3m > file2 --Importieren Sie die 4M-Zwischendaten in file2
# ls -lh file*
# cat file1 file2 file3 > --Verwenden Sie cat, um drei Dateien zu einer neuen großen Datei zusammenzuführen
# md5sum newbigfile bigfile --Befehl, um den MD5sum-Wert der alten großen Datei und der neuen großen Datei zu vergleichen
Das obige ist der detaillierte Inhalt vonBeispiele für Eingabe und Ausgabe, Umleitung und Pipelines. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme: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