Schnelle und effektive Arbeit in der Kommandozeile

Es gibt viele Tipps und Trics für die Befehlszeile im Internet. Die meisten von ihnen beschreiben die Trivials wie "lerne die Hotkeys" oder " sudo !! führe vorherigen Befehl mit sudo aus". Stattdessen werde ich Ihnen sagen, was Sie tun sollen, wenn Sie die Hotkeys bereits kennen und etwas über sudo !! wissen sudo !! .


Das Terminal sollte sofort starten


Wie viel Zeit verbringen Sie, um ein Terminal zu starten? Und noch einer? Ich habe lange Zeit die Tastenkombination Strg + Alt + T verwendet, um ein Terminal zu starten, und dachte, es ist schnell. Als ich von Openbox auf i3 umgestiegen bin, habe ich begonnen, ein Terminal über Win + Enter zu starten. Diese Bindung hat sich sofort bewährt. Weißt du was? Jetzt denke ich nicht, dass Strg + Alt + T schnell genug ist.


Natürlich ist das Ding keine Millisekunden-Beschleunigung, sondern dass man ein Terminal auf der Ebene der Reflexe öffnet, ohne dass man das merkt.


Wenn Sie häufig ein Terminal verwenden, zum Starten jedoch eine Maus greifen, versuchen Sie, einen praktischen Hotkey zu konfigurieren. Ich bin sicher, es wird dir gefallen.


Zsh statt bash


Ich weiß, dass dies ein Thema des Heiligen Krieges ist. Sie sollten Zsh für mindestens drei Funktionen installieren: Erweiterte Autokomplettierung, Tippfehlerbehebung und Vervollständigung mehrerer Pfadnamen: Wenn ein einzelner Tab /u/s/d in /usr/share/doc konvertiert. Arch Linux wurde bereits auf der Installations-CD auf Zsh migriert. Ich hoffe, Zsh wird einmal eine Standard-Shell in Ubuntu. Das wird ein historischer Moment sein.


Es ist überhaupt nicht schwierig, mit Zsh zu beginnen. Installiere es einfach über den Paketmanager und finde eine hübsche Konfiguration. Ich empfehle, die in Arch Linux verwendete Konfiguration zu verwenden:


 $ wget -O ~/.zshrc https://git.grml.org/f/grml-etc-core/etc/zsh/zshrc 

Jetzt müssen Sie nur noch Ihre Standard-Shell ändern und sich neu anmelden.


 $ chsh -s $(which zsh) 

Das ist alles, arbeiten Sie einfach weiter, als wäre nichts passiert.


Wie die Shell-Eingabeaufforderung aussehen soll


Die Shell-Eingabeaufforderung ist ein kleiner Textabschnitt, der im Terminal am Anfang Ihrer Befehlszeile angezeigt wird. Es sollte für Ihre Art von Arbeit konfiguriert werden. Sie können es als Armaturenbrett eines Fahrzeugs wahrnehmen. Bitte geben Sie dort einige nützliche Informationen ein, damit Sie besser navigieren können! Machen Sie es praktisch, besonders wenn Sie es jeden Tag sehen!


Die Shell-Eingabeaufforderung sollte farbig sein. Nicht einverstanden? Versuchen Sie zu zählen, wie viele Befehle in diesem Terminal ausgeführt wurden:



Und jetzt mit Farbe:



Die Shell-Eingabeaufforderung sollte ein aktuelles Arbeitsverzeichnis einer Shell anzeigen. Wenn das aktuelle Arbeitsverzeichnis nicht angezeigt wird, müssen Sie es im Hinterkopf behalten und regelmäßig mit dem Befehl pwd überprüfen. Bitte tu das nicht. Denken Sie an einige wirklich wichtige Dinge und verschwenden Sie keine Zeit mit dem Befehl pwd .


Wenn Sie manchmal zum Root-Konto wechseln, benötigen Sie die Angabe "Aktueller Benutzer". Der bestimmte Benutzername ist oft nicht wichtig, aber sein Status (normal oder root) ist. Die Lösung ist die Verwendung von color: red shell prompt für root und green für den normalen Benutzer. Und Sie werden die Root-Shell niemals so regelmäßig übernehmen.


Wenn Sie mit ssh eine Verbindung zu Servern herstellen, müssen Sie Ihre lokalen und Remote-Shells unterscheiden. Zu diesem Zweck sollte Ihre Shell-Eingabeaufforderung einen Hostnamen oder besser noch eine SSH-Verbindung enthalten.


Die Shell-Eingabeaufforderung kann den Beendigungscode des letzten Befehls anzeigen. Denken Sie daran, dass der Null-Beendigungscode bedeutet, dass ein Befehl erfolgreich beendet wurde, der nicht Null ist - Befehl wurde nicht erfolgreich beendet. Sie können den Exit-Code des letzten Befehls über echo $? , aber all das zu tippen ist eine verdammt lange Sache. Lassen Sie sich stattdessen von der Shell den erfolglosen Abschluss anzeigen.


Wenn Sie mit Git-Repos arbeiten, ist es hilfreich, den Repository-Status in der Shell-Eingabeaufforderung anzuzeigen: aktueller Zweig und Status des Arbeitsverzeichnisses. Sie sparen etwas Zeit bei den Befehlen git status und git branch und werden sich nicht auf einen falschen Zweig festlegen. Ja, die Berechnung des Status kann in Fettdepots viel Zeit in Anspruch nehmen, aber für mich überwiegen die Vor- und Nachteile.


Einige Leute fügen der Shell-Eingabeaufforderung eine Uhr oder sogar den Namen eines virtuellen Terminals (tty) oder einige willkürliche Kringel hinzu. Das ist alles überflüssig. Es ist besser, viel Platz für Befehle zu lassen.


So sieht meine Shell-Eingabeaufforderung unter verschiedenen Bedingungen aus:



Auf dem Screenshot sehen Sie, dass die Titelleiste des Terminals die gleiche Aufgabe übernimmt. Es ist auch ein Teil eines Dashboards und sollte auch konfiguriert werden.


Also, wie all diese .zshrc sollten in .zshrc implementiert .zshrc ? Die PROMPT Variable legt die linke Eingabeaufforderung und RPROMPT die rechte Eingabeaufforderung fest. Die EUID Variable definiert den Status eines Benutzers (regulär oder root) und die Anwesenheit von SSH_CLIENT oder SSH2_CLIENT zeigt eine SSH2_CLIENT Verbindung an. Also können wir eine Vorlage haben:


 if [[ -n "$SSH_CLIENT" || -n "$SSH2_CLIENT" ]]; then if [[ $EUID == 0 ]]; then PROMPT=... else PROMPT=... fi else # not SSH if [[ $EUID == 0 ]]; then PROMPT=... else PROMPT=... fi fi 

Ich zeige keinen Code, der zum Kopieren und Einfügen bereit ist, da die genaue Implementierung eine Geschmackssache ist. Wenn Sie sich nicht die Mühe machen möchten und der Screenshot oben für Sie in Ordnung ist, dann nehmen Sie meine Cofig vom Github .


Zusammenfassung:


  • Eine farbige Shell-Eingabeaufforderung ist ein Muss.
  • Das erforderliche Minimum ist ein aktuelles Arbeitsverzeichnis.
  • Die Wurzelschale sollte deutlich sichtbar sein.
  • Der Name eines Benutzers interessiert eine Nutzlast nicht, wenn Sie nur ein Konto verwenden.
  • Der Hostname ist nützlich, wenn Sie über ssh eine Verbindung zu Servern herstellen. Wenn nicht, ist er nicht obligatorisch.
  • Es ist nützlich, den fehlgeschlagenen Beendigungscode eines letzten Befehls zu sehen.
  • Git-Repo-Status spart Zeit bei git status und git branch Befehlen und ist kinderleicht.

Verwenden Sie den Befehlsverlauf intensiv


Die meisten Befehle in Ihrem Leben geben Sie mehr als einmal ein. Es wäre also cool, sie aus dem Verlauf zu entfernen, anstatt sie erneut einzugeben. Alle modernen Shells speichern einen Befehlsverlauf und bieten verschiedene Möglichkeiten zum Durchsuchen dieses Verlaufs.


Möglicherweise können Sie den Verlauf bereits mithilfe der Tastenkombination Strg + R durchsuchen. Leider hat es zwei Nachteile:


  1. Die Befehlszeile sollte leer sein, um die Suche zu starten, dh falls "man einen Befehl eingegeben hat - erinnerst du dich an die Suche", musst du zuerst deine Eingabe löschen, dann Strg + R drücken und deine Eingabe wiederholen. Das dauert zu lange
  2. Die Vorwärtssuche funktioniert nicht standardmäßig, da Strg + S das Terminal anhält.

Die schnellste und bequemste Art der Suche funktioniert folgendermaßen:


  1. Sie beginnen einen Befehl einzugeben,
  2. Sie erinnern sich an die Suche,
  3. Sie drücken einen Hotkey und die Shell bietet Ihnen Befehle aus dem Verlauf, die auf die gleiche Weise gestartet wurden.

Sie möchten beispielsweise ein lokales Verzeichnis mit einem entfernten Verzeichnis mithilfe von Rsync synchronisieren und haben dies bereits zwei Stunden zuvor getan. Sie geben rsync , drücken ein- oder zweimal einen Hotkey und der gewünschte Befehl kann gestartet werden. Sie müssen den Suchmodus nicht zuerst aktivieren, die Shell-Eingabeaufforderung ändert sich nicht in (reverse-i-search)': und es springt nirgendwo hin. Sie scrollen einfach durch den Verlauf, genauso wie Sie die Pfeile ↑ ↓ drücken, um durch zuvor eingegebene Befehle zu scrollen, jedoch mit zusätzlicher Filterung. Das ist verdammt cool und spart viel Zeit.


Diese Art der Suche funktioniert in Bash und Zsh nicht standardmäßig, daher müssen Sie sie manuell aktivieren. Ich habe PgUp für die Vorwärtssuche und PgDown für die Rückwärtssuche ausgewählt. Es ist weit, sie zu erreichen, aber ich habe es mir schon zur Gewohnheit gemacht. Vielleicht wechsle ich später zu etwas näherem wie Strg + P und Strg + N.


Für Bash müssen Sie ein paar Zeichenfolgen zu /etc/inputrc von ~/.inputrc :


 "\e[5~": history-search-backward "\e[6~": history-search-forward 

Wenn Sie eine fremde vollständige .zshrc , ist es sehr wahrscheinlich, dass PgUp und PgDown den Job bereits erledigen. Wenn nicht, dann füge zu ~/.zshrc :


 bindkey "^[[5~" history-beginning-search-backward # pg up bindkey "^[[6~" history-beginning-search-forward # pg down 

Bei Fisch- und Ipython-Muscheln ist eine solche Suche bereits an die Pfeile ↑ ↓ gebunden. Ich denke, dass viele Benutzer nur wegen des Verhaltens der Pfeile zu Fish migriert sind. Natürlich ist es möglich, die Pfeile auf diese Weise sowohl in Bash als auch in Zsh zu binden, wenn Sie dies wünschen. Verwenden Sie dies in /etc/inputrc von ~/.inputrc :


 "\e[A":history-search-backward "\e[B":history-search-forward 

Und das für in ~/.zshrc :


 autoload -U up-line-or-beginning-search autoload -U down-line-or-beginning-search zle -N up-line-or-beginning-search zle -N down-line-or-beginning-search bindkey "^[[A" up-line-or-beginning-search bindkey "^[[B" down-line-or-beginning-search 

Es ist merkwürdig, dass ich im Laufe der Zeit angefangen habe, Befehle zu schreiben, um sie später aus der Geschichte herauszuholen. Lassen Sie mich Ihnen einige Techniken zeigen.


Verbinde die Befehle , die immer aufeinander folgen:


 # ip link set eth1 up && dhclient eth1 # mkdir /tmp/t && mount /dev/sdb1 /tmp/t 

Mit absoluten Pfaden anstelle von relativen können Sie einen Befehl aus einem beliebigen Verzeichnis ausführen:
vim ~/.ssh/config anstelle von vim .ssh/config , systemd-nspawn /home/chroot/stretch anstelle von systemd-nspawn stretch und so weiter.


Die Verwendung von Platzhaltern macht Ihre Befehle universeller. Ich benutze es normalerweise in Verbindung mit chmod und chown .


 # chown root:root /var/www/*.sq && chmod 644 /var/www/*.sq 

Tastaturkürzel


Hier ist das erforderliche Minimum.


Alt +. - ersetzt das letzte Argument des vorherigen Befehls. Es kann auch mit !$ .
Strg + A, Strg + E - springt an den Anfang bzw. das Ende der Zeile.
Strg + U, Strg + Y - Ausschneiden und Einfügen. Dies ist praktisch, wenn Sie einen komplexen Befehl eingeben und feststellen, dass Sie zuerst einen anderen ausführen müssen. Hmm, wo soll die aktuelle Eingabe gespeichert werden? Genau hier.
Strg + W - tötet ein Wort vor dem Cursor. Durch Drücken und Halten wird die Linie gelöscht. Standardmäßig wird die Eingabe in der Zwischenablage gespeichert (verwendet für Strg + Y).
Strg + K - schneidet den Teil der Linie nach dem Cursor aus und fügt ihn der Zwischenablage hinzu. Strg + A Strg + K löscht schnell die Zeile.
PgUp, PgDown, Ctrl + R - Verlaufssuche.
Strg + L löscht das Terminal.


Reaktionsfähigkeit der Tastatur


Ich möchte Ihnen ein kleines Setup zeigen, mit dem Sie schneller scrollen, navigieren und löschen können. Was machen wir, wenn wir etwas Großes löschen wollen? Wir halten die Rücktaste gedrückt und beobachten, wie Zeichen zurückgewischt werden. Was ist genau los? Nachdem Sie die Rücktaste gedrückt haben, wird ein Zeichen ausgeblendet, eine kurze Verzögerung ausgeführt und dann die automatische Wiederholung ausgelöst: Mit der Rücktaste werden die Zeichen nacheinander gelöscht, so als würden Sie wiederholt darauf drücken.


Ich empfehle Ihnen, die Verzögerung und die Wiederholungsfrequenz an die Geschwindigkeit Ihrer Finger anzupassen. Die Verzögerung ist erforderlich, wenn Sie nur ein Zeichen löschen möchten. Sie haben dann die Zeit, eine Taste freizugeben. Eine zu große Verzögerung lässt Sie auf eine Wiederholung warten. Nicht genug, um Sie zu ärgern, aber genug, um die Übertragung Ihrer Gedanken vom Kopf zum Computer zu verlangsamen. Je höher die Häufigkeit der automatischen Wiederholungen ist, desto schneller wird der Text gelöscht und desto schwieriger ist es, diesen Vorgang zu stoppen. Ziel ist es, einen optimalen Wert zu finden.


Der Zauberbefehl lautet also:


 $ xset r rate 190 20 

190 - Verzögerungsdauer in Millisekunden,
20 - Häufigkeit von Wiederholungen pro Sekunde.


Ich empfehle, von diesen Werten aus zu beginnen und die Verzögerung Stück für Stück zu erhöhen, bis sie falsch positiv ist, und dann etwas zurückzukehren. Wenn die Verzögerung zu gering ist, können Sie die Tastatur nicht verwenden. Um dies zu beheben, sollte ein X-Server oder ein kompletter Computer neu gestartet werden. Also sei bitte vorsichtig.


Um Parameter zu speichern, müssen Sie diesen Befehl irgendwo in X Autostart hinzufügen.


Prozessaustrittsanzeige


Ich muss oft einige lange laufende Prozesse starten: ein Fat Backup, Big Data Transfer, Packen / Extrahieren von Archiven, Paketerstellung und so weiter. Normalerweise starte ich einen solchen Prozess, wechsle zu einer anderen Aufgabe und schaue gelegentlich, wenn mein langwieriger Prozess beendet ist. Manchmal tauche ich zu tief in die Arbeit ein und vergesse es. Die Lösung besteht darin, eine Benachrichtigung zum Beenden des Prozesses hinzuzufügen, die mich aus der Trance bringt.


Es gibt viele Werkzeuge für diesen Zweck: benachrichtigen-senden, dzen2, Piepton, aplay, Wand. Alle von ihnen sind irgendwie gut, aber funktionieren nicht mit ssh-Verbindung. Deshalb benutze ich Terminal Beep:


 $ long-running-command; echo $'\a' 

Die ASCII-Codierung hat ein 0x7-Zeichen mit dem Namen bell . Es wird verwendet, um den PC-Lautsprecher zu piepen. PC-Lautsprecher sind keine moderne Sache, nicht jeder Computer hat sie und sie werden nicht in Kopfhörern gehört. Aus diesem Grund verwenden einige Terminals eine sogenannte visuelle Klingel. Ich benutze urxvt und es führt eine visuelle Glocke aus, indem es die Dringlichkeitsmarkierung anhebt. Was ist das Es wird verwendet, wenn ein Fenster Ihnen mitteilen möchte, dass es dringend ist.


Sie können jetzt überprüfen, wie Ihr Terminal auf Klingelzeichen reagiert:


 $ sleep 3; echo $'\a' 

Sie haben drei Sekunden Zeit, um in ein anderes Fenster zu wechseln. Dies kann erforderlich sein.


Leider kann nicht jedes Terminal eine visuelle Klingel anzeigen, indem es die Dringlichkeitsmarkierung anhebt. Ich habe die beliebtesten überprüft.


Terminal-Emulatorvisuelle Glocke als Dringlichkeitsflagge
konsolekann in den Einstellungen aktiviert werden
urxvtja
xfce4-terminalkann in den Einstellungen aktiviert werden
xtermnein
cooler retro Ausdrucknein
lxterminalnein
gnome-terminalnein

Es ist zu lang, um echo $'\a' einzugeben, daher habe ich einen wake Alias ​​erstellt.


Aliase


Standardmäßig funktionieren die Befehle cp , scp und rm nicht rekursiv und das ist scheiße! Es ist ein verdammt schlechtes Erbe! Nun, es kann mit Aliasen behoben werden. Aber schauen wir uns zuerst an, wann nicht-rekursives Verhalten nützlich sein kann.


 $ mkdir foodir $ cp * foodir 

Es werden nur Dateien in foodir kopiert, keine Verzeichnisse. Die gleiche Situation gilt für rm :


 $ rm * 

löscht nur Dateien und Symlinks, behält aber Verzeichnisse bei. Aber wie oft benötigen Sie diese Funktion? Ich denke gerne, dass cp und rm immer rekursiv arbeiten.


Ok, aber was ist mit der Sicherheit? Vielleicht schützt nicht-rekursives Verhalten Ihre Dateien? Es gibt einen Fall, in dem Sie einen Symlink zum Verzeichnis haben und diesen Symlink entfernen möchten, aber das Verzeichnis behalten. Wenn ein Schrägstrich (absichtlich oder gelegentlich) an den Verzeichnisnamen angehängt wird und der rekursive Modus über -r , wird das Verzeichnis leer! LEER!


 $ ln -s foodir dir_link $ rm -r dir_link/ 

Ohne -r arg wird es missbrauchen und nichts entfernen. So erhöht rekursives rm das Risiko, Daten ein wenig zu verlieren.


Ich habe den rekursiven Modus für cp , scp und rm mkdir und -p für mkdir hinzugefügt, um einfach verschachtelte Verzeichnisse zu erstellen.


 alias cp='cp -r' alias scp='scp -r' alias rm='rm -r' alias mkdir='mkdir -p' 

Seit zwei Jahren habe ich diese Aliase nie bereut und nie Daten verloren. Es gibt auch einen Nachteil: Es ist möglich, weniger Daten zu kopieren / zu entfernen, als benötigt wurden, und sie nicht zu sehen, wenn Sie ohne Aliase am System arbeiten. Also sei bitte vorsichtig. Ich weiß was ich tue und laufe immer mit Vorsicht.


Am beliebtesten sind ls Aliase, die Sie wahrscheinlich bereits verwenden:


 alias ls='ls -F --color=auto' alias la='ls -A' alias ll='ls -lh' alias lla='ll -A' 

Auch ein farbiges Grep ist viel hübscher als farblos:


 alias grep='grep --colour=auto' 

Aliase funktionieren nicht in Skripten, vergessen Sie diese Tatsache nicht! Sie müssen alle Argumente explizit angeben.


Tippen Sie auf


Es liegt auf der Hand, aber ich erinnere Sie daran: Tippen hilft, schneller zu tippen. Am Anfang wird es schwierig, aber mit der Zeit werden Sie die Grenzen überwinden.


Die beste Zeit, um das Tippen zu lernen, ist Urlaub, wenn Sie niemand stört. Bitte beeilen Sie sich nicht beim Lernen! Ihr Ziel ist es, sich zu merken, wo sich jeder Charakter befindet, nicht so sehr mit Ihrem Verstand, sondern mit Ihren Fingern. Es ist besser, langsam zu tippen, aber ohne Fehler, als mit Fehlern schnell. Denken Sie daran, dass Meister nicht mit schnellen Fingern gute Ergebnisse erzielen, sondern keine Fehler machen.


Vergiss nicht eine Pause zu machen. Ihr Gehirn und Ihre Finger müssen sich ausruhen. Wenn Fehler auftreten, müssen Sie eine Pause einlegen.


Das ist alles für heute


Ich hoffe, diese Tipps werden Ihnen wirklich helfen. Viel Glück!

Source: https://habr.com/ru/post/de481940/


All Articles