10 erstaunliche und mysteriöse Anwendungen von (!) Symbol oder Operator in Linux -Befehlen
- 2888
- 184
- Levke Harnapp
Der ''!''
Symbol oder Operator unter Linux kann als verwendet werden Logische Negation Operator sowie um Befehle aus dem Verlauf mit Tweaks zu holen oder zuvor mit Änderungen auszuführen. Alle folgenden Befehle wurden explizit in Bash Shell überprüft. Obwohl ich nicht überprüft habe, aber ein Major davon wird in anderen Hülle nicht laufen. Hier gehen wir in die erstaunlichen und mysteriösen Verwendung von ''!''
Symbol oder Bediener in Linux -Befehlen.
1. Führen Sie einen Befehl aus dem History By Commandnummer aus.
Möglicherweise sind Sie sich der Tatsache nicht bewusst, dass Sie einen Befehl von Ihrem ausführen können Geschichte Befehl (bereits/früher ausgeführte Befehle). Um zuerst anzufangen, finden Sie die Befehlsnummer durch Ausführen 'Geschichte' Befehl.
$ Geschichte
Führen Sie nun einen Befehl aus Geschichte Nur durch die Zahl, bei der es erscheint, in der Ausgabe von Geschichte. Sagen Sie einen Befehl aus, der bei der Nummer angezeigt wird 1551 in der Ausgabe von 'Geschichte' Befehl.
$ !1551
Und es wird den Befehl (oberer Befehl im obigen Fall) ausgeführt, der unter der Nummer aufgeführt wurde 1551. Dieser Weg zum Abrufen bereits ausgeführtes Befehl ist sehr hilfreich, insbesondere bei den so langjährigen Befehlen. Sie müssen es nur anrufen ![Nummer, bei der es im Befehl Ausgabe des Verlaufs erscheint].
2. Führen Sie den zuvor ausgeführten Befehl als 2. letzter Befehl, den 7. letzten Befehl usw. aus, usw.
Sie können diese Befehle ausführen, die Sie zuvor ausgeführt haben, indem die leitende Sequenz als letzte Laufbefehle dargestellt wird -1, Zweite letzte als -2, Siebter letzten als -7,… .
Erster Lauf Geschichte Befehl, um eine Liste des zuletzt ausgeführten Befehls zu erhalten. Es ist notwendig zu laufen Geschichte Befehl, damit Sie sicher sein können, dass es keinen Befehl wie gibt wie RM -Befehl> Datei
und andere, nur um sicherzustellen, dass Sie keinen gefährlichen Befehl aus versehentlich ausführen. Und überprüfen.
$ History $ !-6 $ !-8 $ !-10Letzte ausgeführte Befehle nach Zahlen ausführen
3. Übergeben Sie Argumente des letzten Befehls, die wir zum neuen Befehl bewirken
Ich muss den Inhalt des Verzeichnisses auflisten. '/home/$ user/binary/Firefox'Also habe ich gefeuert.
$ ls/home/$ user/binary/Firefox
Dann wurde mir klar, dass ich hätte feuern sollenls -l'Um zu sehen, welche Datei dort ausführbar ist? Also sollte ich den gesamten Befehl noch einmal eingeben! Nein, ich brauche nicht. Ich muss nur das letzte Argument zu diesem neuen Befehl mit sich bringen als:
$ ls -l !$
Hier !$
wird Argumente tragen, die im letzten Befehl an diesen neuen Befehl übergeben werden.
4. Wie man mit zwei oder mehr Argumenten umgeht (mit (!)
Nehmen wir an, ich habe eine Textdatei erstellt 1.txt Auf dem Bildschirm.
$ touch/home/avi/desktop/1.txt
und dann kopieren Sie es zu '/home/avi/downloads'Verwenden Sie den vollständigen Pfad auf beiden Seiten mit CP Befehl.
$ cp/home/avi/desktop/1.txt/home/avi/downloads
Jetzt haben wir zwei Argumente mit bestanden CP Befehl. Erstens ist ''/home/avi/desktop/1.txt"Und der zweite ist"/home/avi/downloads', lass uns sie anders umgehen, einfach ausführen Echo [Argumente]
Beide Argumente anders ausdrucken.
$ echo “1. Argument ist: !^”$ Echo“ 2. Argument ist: !CP: 2 ”
Hinweis 1. Argument kann als gedruckt werden als “!^"
und der Rest der Argumente kann durch Ausführung gedruckt werden “![Name_of_command]: [number_of_argument] ”
.
Im obigen Beispiel war der erste Befehl ''CP'und das zweite Argument waren zum Drucken erforderlich. Somit “!CP: 2 ”
, Wenn ein Befehlsbeauftragte sagt xyz wird mit 5 Argumenten ausgeführt und Sie müssen das vierte Argument erhalten, Sie können verwenden “!XYZ: 4 ”
, und benutze es so wie du willst. Alle Argumente können von zugegriffen werden “!*"
.
5. Führen Sie den letzten Befehl auf der Grundlage von Schlüsselwörtern aus
Wir können den zuletzt ausgeführten Befehl auf der Grundlage von Schlüsselwörtern ausführen. Wir können es wie folgt verstehen:
$ ls/home>/dev/null [Befehl 1] $ ls -l/home/avi/desktop>/dev/null [Befehl 2] $ ls -la/home/avi/downloads>/dev/null [Befehl 3 ] $ ls -la /usr /bin> /dev /null [Befehl 4]
Hier haben wir den gleichen Befehl verwendet (ls) aber mit unterschiedlichen Schalter und für verschiedene Ordner. Darüber hinaus haben wir an die Ausgabe jedes Befehls an 'gesendet' gesendet '/dev/null„Da wir uns nicht mit der Ausgabe des Befehls befassen werden, bleibt auch die Konsole sauber.
Führen Sie nun den Befehl Last Run auf der Grundlage von Schlüsselwörtern aus.
$ ! ls [Befehl 1] $ ! ls -l [Befehl 2] $ ! ls -la [Befehl 3] $ ! ls -la [Befehl 4]
Überprüfen Sie die Ausgabe und Sie werden erstaunt sein, dass Sie bereits ausgeführte Befehle ausführen ls
Schlüsselwörter.
6. Die kraft von !! Operator
Sie können Ihren letzten Laufbefehl mit verwenden/ändern (!!)
. Der Befehl zuletzt Run wird mit Alter/Tweak im aktuellen Befehl angerufen. Zeigen wir Ihnen das Szenario
Letzten Tag leite ich ein Ein-Liner-Skript, um meine private IP zu erhalten, also renne ich,
$ ip adDr show | grep inet | grep -v 'inet6' | grep -v '127.0.0.1 '| awk 'print $ 2' | cut -f1 -d/ schneiden
Dann habe ich plötzlich herausgefunden, dass ich die Ausgabe des obigen Skripts in eine Datei umleiten muss IP.txt, also was soll ich tun? Sollte ich den gesamten Befehl erneut weitergeben und die Ausgabe in eine Datei umleiten? Nun, eine einfache Lösung ist zu verwenden HOCH
Navigationsschlüssel und hinzufügen '> ip.txt'
Um die Ausgabe in eine Datei als umzuleiten.
$ ip adDr show | grep inet | grep -v 'inet6' | grep -v '127.0.0.1 '| awk 'print $ 2' | Schnitt -f1 -d> ip.txt
Vielen Dank an den Lebensretter HOCH
Navigationsschlüssel hier. Betrachten Sie nun die folgende Zustand.
$ ifconfig | Grep "Inet addr:" | awk 'print $ 2' | grep -v '127.0.0.1 '| Schnitt -f2 -d:
Sobald ich das Skript ausführte, gab die Bash -Eingabeaufforderung einen Fehler mit der Nachricht zurück "Bash: IfConfig: Befehl nicht gefunden"
, Es war nicht schwer für mich zu erraten, dass ich diesen Befehl als Benutzer ausführte, wo er als root ausgeführt werden sollte.
Also, was ist die Lösung?? Es ist schwierig, sich bei Root anzumelden und dann den gesamten Befehl erneut einzugeben! Auch (UP -Navigationsschlüssel) Im letzten Beispiel kam hier nicht, um zu retten. So? Wir müssen anrufen “!!”
Ohne Zitate, die den letzten Befehl für diesen Benutzer aufrufen.
$ su -c “!!" Wurzel
Hier su ist Switch -Benutzer, der root ist, -C
ist, den spezifischen Befehl als Benutzer und den wichtigsten Teil auszuführen !!
wird durch den Befehl ersetzt und der letzte Laufbefehl wird hier ersetzt. Ja! Sie müssen Root -Passwort angeben.
Ich benutze von !!
Meistens in folgenden Szenarien,
1. Wenn ich renne apt-get Befehl als normaler Benutzer erhalte ich normalerweise einen Fehler, der besagt, dass Sie keine Erlaubnis zur Ausführung haben.
$ APT-Get Upgrade && Apt-Get Dist-Upgrade
OPPS -Fehler ... Mach dir keine Sorgen, die folgende Befehl auszuführen, um es erfolgreich zu machen ..
$ su -c !!
Genauso wie ich es tue,
$ Service Apache2 Start oder $ /etc /init.D/Apache2 Start oder $ systemCTL starten apache2
Oops user ist nicht autorisiert, eine solche Aufgabe zu tragen, also renne ich…
$ su -c 'Service apache2 starten' oder $ su -c '/etc/init.D/apache2 start 'oder $ su -C' systemCTL start apache2 ''
7. Führen Sie einen Befehl aus, der die gesamte Datei betrifft, außer dass ![DATEINAMEN]
Der !
(Logisch nicht) kann verwendet werden, um den Befehl auf allen Dateien/Erweiterungen auszuführen, außer dass dahinter liegt ''!''
.
A. Entfernen Sie alle Dateien aus einem Verzeichnis, mit Ausnahme des Namens, dessen Name ist 2.txt.
$ rm !(2.txt)
B. Entfernen Sie den gesamten Dateityp aus dem Ordner mit Ausnahme der Erweiterung, deren Erweiterung istPDF''.
$ $ rm !(*.PDF)
8. Überprüfen Sie, ob ein Verzeichnis (sagen/home/avi/tecmint) vorhanden ist oder nicht? Printf, wenn das genannte Verzeichnis existiert oder nicht.
Hier werden wir verwenden ''! -D'
um zu validieren, ob das Verzeichnis existiert oder nicht von logisch und operator (&&)
Das Verzeichnis existiert nicht und logisch oder Bediener (||)
Das Drucken des Verzeichnisses ist vorhanden.
Logik ist, wenn die Ausgabe von [ ! -d/home/avi/tecmint]
Ist 0, Es wird ausführen, was über logisch hinaus liegt UND sonst geht es logisch oder (||)
und führen das aus, was über logisch hinaus liegt ODER.
$ [ ! -d/home/avi/tecmint] && printf '\ nno so/home/avi/tecmint verzeichnis existieren \ n' || printf '\ n/home/avi/tecmint -Verzeichnis existieren \ n'
9. Überprüfen Sie, ob ein Verzeichnis existiert oder nicht? Wenn nicht den Befehl beenden.
Ähnlich der obigen Bedingung, aber hier, wenn das gewünschte Verzeichnis nicht vorhanden ist, wird der Befehl beendet.
$ [ ! -d/home/avi/tecmint] && beenden
10. Erstellen Sie ein Verzeichnis (beispielsweise Test) in Ihrem Heimverzeichnis, wenn es nicht vorhanden ist.
Eine allgemeine Implementierung in der Skriptsprache, bei der das gewünschte Verzeichnis nicht vorhanden ist, erstellt es eine.
[ ! -d/home/avi/tecmint] && mkdir/home/avi/tecmint
Das ist alles fürs Erste. Wenn Sie einen anderen Gebrauch von kennen oder stoßen ''!''
Was wissenswert ist, möchten Sie uns möglicherweise Ihren Vorschlag im Feedback geben. Bleiben in Verbindung!
- « RHCSA -Serie Installation, Konfiguration und Sicherung eines Web- und FTP -Servers - Teil 9
- So verwenden Sie WhatsApp unter Linux mit dem Client WhatsApp Web »