Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 1

Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 1

Die Bash -Befehlszeile bietet nahezu unbegrenzte Leistung, wenn es darum geht, fast alles auszuführen, was Sie tun möchten. Unabhängig davon. Diese Serie, von der wir heute den ersten Teil präsentieren, wird Sie mit den Tools und Methoden bewaffnen, die Sie benötigen, um ein viel kompetenterer Bash -Benutzer zu werden. Selbst bereits fortgeschrittene Benutzer werden wahrscheinlich etwas Neues und Aufregendes abholen. Genießen!

In diesem Tutorial lernen Sie:

  • Nützliche Bash -Befehlszeilen -Tipps, Tricks und Methoden
  • So interagieren Sie mit der Bash -Befehlszeile fortschrittlich
  • So schärfen Sie Ihre Bash -Fähigkeiten insgesamt und werden zu einem kompetenteren Bash -Benutzer
Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 1

Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Linux-Verteilungsunabhängige
Software BASH -Befehlszeile, Linux -basiertes System
Andere Verschiedene Versorgungsunternehmen, die standardmäßig entweder in der Bash -Shell enthalten sind oder mithilfe von Verwendung installiert werden können sudo apt-get installieren Toolname (Wo das Werkzeugname das Tool darstellt, das Sie installieren möchten)
Konventionen # - Erfordert, dass gegebene Linux -Commands mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mithilfe von verwendet werden können sudo Befehl
US

Beispiel 1: Sehen Sie, welche Prozesse auf eine bestimmte Datei zugreifen

Möchten Sie wissen, auf welche Prozesse auf eine bestimmte Datei zugreifen? Mit dem Bash-integrierten Befehlsfixierer ist dies einfach zu tun:

$ fuser -a/usr/bin/gnom-kalkulator/usr/bin/gnom-kalkulator: 619672e 
$ ps -f | GREP 619672 | Grep -V Grep ABC 619672 3136 0 13:13 ? 00:00:01 GNOME-Calculator 


Wie wir sehen können, die Datei /usr/bin/gnome-Kalkulator (ein binär), wird derzeit vom Prozess mit ID verwendet 619672. Überprüfen dieser Prozess -ID mithilfe von ID ps, Wir finden bald diesen Benutzer heraus ABC startete den Taschenrechner und tat dies um 13:13.

Der e Hinter PID (Prozess -ID) soll angeben, dass dies eine ausführbare Datei ist, die ausgeführt wird. Es gibt verschiedene andere solcher Qualifikationen, und Sie können verwenden Mann FUSER Sie zu sehen. Dieses FUSER -Tool kann leistungsfähig sein, insbesondere in Kombination in Kombination mit LSOF (ein ls von offenen Dateien):

Nehmen wir an, wir debuggen einen Remote -Computer für einen Benutzer, der mit einem Standard -Ubuntu -Desktop arbeitet. Der Benutzer startete Taschenrechner und jetzt sein gesamtes Bildschirm in Frozen. Wir möchten jetzt alle Prozesse aus der Ferne töten, die sich in irgendeiner Weise auf den gesperrten Bildschirm beziehen, ohne den Server neu zu starten.

# lsof | Grep -Rechner | Grep "Share" | Head -n1 XDG-DESKT 3111 ABC MEM REG 253,1 3009 12327296/usr/share/Locale-Langpack/en_au/lc_messages/gnom-Kalkulator.MO 
# FUSER -a/usr/share/locale-langpack/en_au/lc_messages/gnom-kalkulator.MO/USR/SHARE/LOCEAL-LANGPACK/EN_AU/LC_MESSAGES/GNOME-CALCULATUR.MO: 3111m 3136m 619672m 1577230m 
# ps -f | Grep -e "3111 | 3136 | 619672 | 1577230" | Grep -v Grep ABC 3111 2779 0 Aug03 ? 00:00:11/usr/libexec/xdg-desktop-portal-gtk ABC 3136 2779 5 Aug03 ? 03:08:03/usr/bin/gnome-shell ABC 619672 3136 0 13:13 ? 00:00:01 Gnom-Kalkulator ABC 1577230 2779 0 Aug04 ? 00:03:15/usr/bin/nautilus-Gupplication-Service 

Zuerst haben wir alle vom Taschenrechner verwendeten offenen Dateien verwendet LSOF. Um die Ausgabe kurz zu halten, haben wir nur das Top -Ergebnis für eine einzelne freigegebene Datei aufgelistet. Als nächstes verwendeten wir Fixier, um herauszufinden, welche Prozesse diese Datei verwenden. Dies bot uns die PIDs. Schließlich haben wir mit einem oder (|) basiert Grep, um herauszufinden, welche die tatsächlichen Prozessnamen. Wir können sehen, dass der Taschenrechner um 13:13 gestartet wurde, die anderen Prozesse länger gelten.

Als nächstes konnten wir zum Beispiel a ausgeben Kill -9 619672 und prüfen Sie, ob dies das Problem behoben hat. Wenn nicht, können wir den Prozess versuchen 1577230 (der freigegebene Nautilus -Dateimanager), Prozess 3136 (die übergreifende Hülle) oder schließlich verarbeiten 3111, Dies würde jedoch wahrscheinlich einen erheblichen Teil der Desktoperfahrung des Benutzers töten und ist möglicherweise nicht leicht neu zu starten.

Beispiel 2: Debuggen Sie Ihre Skripte

Sie haben also ein großartiges Skript mit viel komplexem Code geschrieben, dann führen Sie es aus… und sehen Sie einen Fehler in der Ausgabe, was auf den ersten Blick nicht viel Sinn macht. Auch nach dem Debuggen für eine Weile sind Sie immer noch an dem, was passiert ist, während das Drehbuch ausgeführt wurde.

Bash -x zur Rettung! Bash -x ermöglicht es einem, a auszuführen prüfen.Sch Skript und genau sehen, was passiert:

#!/bin/bash var1 = "Hallo Linuxconfig.Org -Leser!"Var2 =" -------------------------- "echo $ var1 echo $ var2 
Kopieren

Ausführung:

$ bash -x ./prüfen.sh + var1 = "Hallo Linuxconfig.Org -Leser!" + Var2 = -------------------------- + Echo Hallo LinuxConfig.org 'Leser!'Hallo Linuxconfig.Org -Leser! + Echo ------------------------------ ------------------------------ 

Wie Sie sehen können, die Bash -x Der Befehl zeigte uns genau, was geschah, Schritt für Schritt. Sie können die Ausgabe dieses Befehls auch einfach durch Anhängen an eine Datei senden 2> & 1 | tee my_output.Protokoll zum Befehl:

$ bash -x ./prüfen.Sh 2> & 1 | tee my_output.Protokollieren Sie… gleiche Ausgabe… $ cat my_output.log + var1 = "Hallo Linuxconfig.Org -Leser!" + Var2 = -------------------------- + Echo Hallo LinuxConfig.org 'Leser!'Hallo Linuxconfig.Org -Leser! + Echo ------------------------------ ------------------------------ 


Der 2> & 1 Will die Stderr (Standardfehlerausgabe: Alle während der Ausführung festgelegten Fehler) bis Stdout , Bash -x. Der Tee Der Befehl erfasst alle Ausgaben von Stdout, und schreiben Sie es in die angegebene Datei. Wenn Sie jemals eine Datei anhängen möchten (und nicht neu mit einer leeren Datei beginnen), können Sie verwenden Tee -a bei dem die -A Die Option stellt sicher, dass die Datei angehängt ist.

Beispiel 3: Ein gewöhnlicher Gotcha: sh -x != Bash -x

Das letzte Beispiel hat uns gezeigt, wie man benutzt Bash -x, Aber könnten wir auch benutzen sh -x? Die Tendenz für einige neuere Bash -Benutzer kann darin bestehen, auszuführen sh -x, Aber das ist ein Rookie -Fehler; Sch ist eine viel begrenzte Hülle. Während verprügeln basiert auf Sch, Es hat noch viel mehr Verlängerungen. Wenn Sie also verwenden sh -x Um Ihre Skripte zu debuggen, sehen Sie ungerade Fehler. Ich möchte ein Beispiel sehen?

#!/bin/bash test = "abc" if [["$ test" == * "b" *]]; dann echo "ja drin drin!"Fi 
Kopieren

Ausführung:

$ ./prüfen.Sh ja, drin! 
$ bash -x ./prüfen.sh + test = abc + [[abc == * \ b *]] + echo 'Ja, drin!'Ja, drin drin! 
$ sh -x ./prüfen.sh + test = abc + [[abc == * b *]] ./Test: 4: [: nicht gefunden 

Hier sehen Sie ein kleines Testskript prüfen.Sch was bei der Ausführung überprüft, ob ein bestimmter Brief (B) erscheint in einer bestimmten Eingangszeichenfolge (wie durch die definiert PRÜFEN Variable). Das Skript funktioniert großartig und wenn wir verwenden Bash -x Wir können sehen, dass die vorgestellten Informationen, einschließlich der Ausgabe, korrekt aussieht.

Als nächstes verwenden sh -x Die Dinge gehen deutlich falsch; Die Sch Shell kann nicht interpretieren [[ und scheitert beides in der sh -x Ausgabe sowie in der Skriptausführung selbst. Dies liegt daran verprügeln existiert nicht in Sch.

Beispiel 4: Uniq oder nicht einzigartig - das ist die Frage!

Wollten Sie schon immer eine Datei sortieren und nur die eindeutigen Einträge auflisten?? Auf den ersten Blick scheint dies eine einfache Übung mit dem enthaltenen Bash -Befehl zu sein Uniq:

$ cat Input.txt 1 2 2 3 3 3 3 
$ cat Input.txt | Uniq 1 2 3 

Wenn wir jedoch unsere Eingabedatei ein wenig ändern, stoßen wir auf Einzigartigkeitsprobleme:

$ cat Input.txt 3 1 2 3 2 3 3 3 
$ cat Input.txt | UNIQ 3 1 2 3 2 3 


Das ist weil Uniq standardmäßig Will Filter benachbarte passende Linien, wobei die passenden Linien mit dem ersten Ereignis verschmolzen werden als die Uniq Handbuch klären. Oder mit anderen Worten, nur Zeilen, die genau wie der vorherige sind.

In dem Beispiel kann dies durch die letzten drei sehen 3 Linien werden zu einem einzigen "einzigartigen" kondensiert 3. Dies ist wahrscheinlich nur in einer begrenzten Anzahl und spezifischen Anwendungsfällen verwendbar.

Wir können jedoch optimieren Uniq ein bisschen weiter, um uns nur wirklich einzigartige Einträge zu geben, indem wir die verwenden -u Parameter:

$ cat Input.TXT # Beachten Sie, dass die Symbole ' #' nach der Ausführung hinzugefügt wurden, um etwas zu klären (unten gelesen) 3 # 1 # 2 # 3 # 2 # 3 3 3 
$ cat Input.txt | Uniq -U 3 1 2 3 2 

Sieht immer noch ein wenig verwirrend aus, richtig, richtig? Schauen Sie sich die Eingabe und Ausgabe genau an und Sie können sehen, wie nur Linien sind, die sind individuell einzigartig (wie durch gekennzeichnet von # im obigen Beispiel nach Ausführung) werden ausgegeben.

Die letzten drei 3 Die Linien werden nicht wie nicht ausgegeben, da sie nicht sind einzigartig als solche. Diese Methode der Einzigartigkeit hätte wiederum nur eine begrenzte Anwendbarkeit in Szenarien von realer Welt, obwohl es möglicherweise einige Fälle gibt, in denen sie nützlich ist.

Wir können eine geeignetere Lösung für die Einzigartigkeit erhalten, indem wir ein etwas anderes Bash-integriertes Werkzeug verwenden Sortieren:

$ cat Input.txt 1 2 2 3 3 3 3 
$ cat Input.txt | sortieren -u 1 2 3 
WUSSTEN SIE?
Sie können die weglassen Katze Befehl in den obigen Beispielen und Datei zur Verfügung stellen Uniq oder Sortieren direkt von lesen? Beispiel:Sortieren Sie -u -Eingabe.txt

Großartig! Dies ist in vielen Skripts verwendbar, in denen wir eine echte Liste einzigartiger Einträge wünschen. Der zusätzliche Vorteil ist, dass die Liste gleichzeitig gut sortiert ist (obwohl wir es möglicherweise vorgezogen haben, die zu verwenden -N Option zur Sortierung auch in eine numerische Reihenfolge gemäß dem numerischen String -Wert).

Abschluss

Es ist viel Freude daran, Bash als Befehlszeile der bevorzugten Linux zu verwenden. In diesem Tutorial haben wir eine Reihe nützlicher Bash -Befehlszeilen -Tipps und Tricks untersucht. Dies ist der Auftakt einer Serie voller Bash -Befehlszeilenbeispiele!

Lassen Sie uns Ihre Gedanken wissen und teilen Sie einige Ihrer eigenen coolen Bash -Befehlszeilen -Tipps, Tricks und Gotchas unten!

  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 1
  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 2
  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 3
  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 4
  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 5

Verwandte Linux -Tutorials:

  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 3
  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 2
  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 4
  • Eine Einführung in Linux -Automatisierung, Tools und Techniken
  • Ubuntu 20.04 Tricks und Dinge, die Sie vielleicht nicht wissen
  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 5
  • Big Data Manipulation zum Spaß und Gewinn Teil 1
  • Bash -Befehlszeilen -Tipps und Tricks
  • Ubuntu 20.04 Leitfaden
  • Verschachtelte Schleifen in Bash -Skripten