Teilen Sie Ihre Befehlszeilenfunktionen und Tricks für Unix / Linux. Versuchen Sie, es wenn möglich Shell / Distribution-unabhängig zu halten. Sie interessieren sich für Aliase, Einzeiler, Tastaturkürzel, kleine Shell-Skripte usw.
quelle
Teilen Sie Ihre Befehlszeilenfunktionen und Tricks für Unix / Linux. Versuchen Sie, es wenn möglich Shell / Distribution-unabhängig zu halten. Sie interessieren sich für Aliase, Einzeiler, Tastaturkürzel, kleine Shell-Skripte usw.
Dies erweitert etwas den !!
in dieser Antwort erwähnten Trick . Tatsächlich gibt es eine Reihe von geschichtsbezogenen Befehlen, die in Vergessenheit geraten (Menschen neigen dazu, Up100-mal zu stechen, anstatt nach einem Befehl zu suchen, von dem sie wissen, dass sie ihn eingegeben haben).
history
Befehl zeigt eine Liste der zuletzt ausgeführten Befehle mit einem Ereignisbezeichner links an!N
Ersetzt den Befehl, der dem Ereignisbezeichner zugeordnet ist N
!-N
das ersetzen N
th letzten Befehl; Ersetzt z. B. !-1
den letzten Befehl, !-2
den zweitletzten usw.!!
steht die Abkürzung für !-1
, um den letzten Befehl schnell zu ersetzen!string
ersetzt den neuesten Befehl, der mit beginnt string
!?string?
ersetzt den aktuellsten Befehl, der enthält string
Einem !
Verlaufsbefehl können Wortbezeichner hinzugefügt werden , um die Ergebnisse zu ändern. Ein Doppelpunkt trennt die Ereignis- und Wortbezeichner, z !!:0
. Der Ereigniskennzeichner !!
kann nur !
bei Verwendung eines Wortkennzeichners abgekürzt werden , !!:0
ist also äquivalent zu !:0
.
!:0
wird den Befehl erhalten, der ausgeführt wurde!:1
wird das erste Argument bekommen (und !:2
das zweite, etc.)!:2-3
wird das zweite und dritte Argument bekommen!:^
ist ein weiterer Weg, um das erste Argument zu bekommen. !:$
werde das letzte bekommen!:*
bekommt alle Argumente (aber nicht den Befehl)Modifikatoren können auch an einen !
Verlaufsbefehl angehängt werden , dem jeweils ein Doppelpunkt vorangestellt ist. Es kann eine beliebige Zahl aufgestapelt werden (zB !:t:r:p
).
h
- Richten Sie sich nach dem Basisdateinamen aust
- Nur der Basisdateinamer
- Richten Sie die Dateinamenerweiterung ause
- Nur die Dateinamenerweiterungs/search/replacement
- Ersetzen Sie das erste Vorkommen von search
durchreplacement
gs/search/replacement
- Ersetzen Sie alle Vorkommen von search
durchreplacement
!-#
auch nie . Ich!string
führe zwar den letzten Befehl aus, der mit einem String beginnt, führe ihn jedoch in der Regel mit einem Tabulator (zsh) aus, um sicherzustellen, dass ich das Richtige ausführe!N
führt den Befehl aus ..." ist eine zu enge Beschreibung. wird tatsächlich!N
durch den Befehl ersetzt ...; und so weiter für alle Beschreibungen in der Antwort. Richtiger und eröffnen viel nützlichere Möglichkeiten! ZB das erwähntesudo !!
.bash
; In Emacs verwendet man stattdessen Meta-R (Meta-R wird aucheshell
in Emacs verwendet) , um die Historie der Eingabebefehle und -werte (für Mx oder andere gelesene Werte) zu durchsuchen . Also vermassle ich sie oft.bash - füge den letzten Parameter der vorhergehenden Zeile ein
alt- . die nützlichste Tastenkombination aller Zeiten, probieren Sie es aus und sehen Sie, aus irgendeinem Grund weiß niemand etwas über diese.
Drücken Sie sie immer wieder, um ältere letzte Parameter auszuwählen.
ideal, wenn Sie etwas mehr mit dem Argument / der Datei machen möchten, das / die Sie gerade verwendet haben.
quelle
alt
-.
es wird zum vorherigen Befehl gehen und das letzte Argument daraus ziehen. Wenn Sie also das letzte Argument von vor drei Befehlen wollen, drücken Sie einfachalt
-.
dreimal.yank-last-arg
Befehl readline. Sie sollte daher mit jedem Programm funktionieren, das mit readline verknüpft ist, nicht nur mit BASH oder ZSH.Mein Liebling ist
Einfach und sehr nützlich.
Schauen Sie sich diese Website an: commandlinefu.com .
Sie können sich auch diese vier Artikel von Peteris Krumins in seinem Blog ansehen
quelle
ascii
Programm ist ebenfalls nützlich. Neben dem Drucken einer Tabelle können Sie auch einzelne Zeichen abfragen.Führe den letzten Befehl als root aus:
quelle
Ich bin nicht sicher, ob dies als "Trick" gilt, aber die Leute scheinen die Standard-Readline-Hotkeys nicht zu kennen. Von besonderem Nutzen in Muscheln:
quelle
Ctrl+L
entspricht dem FormFeed-ASCII-Zeichen. Normalerweise wird der Bildschirm in Textanwendungen mit einem Bildschirmfenster (z. B. vim, less, mc usw.) neu gezeichnet. Schön, wenn der Bildschirm durch eine Ausgabe eines anderen Programms "verschmutzt" wurde.Ctrl+W
ein Wort rückwärts zu schneiden,Alt+F
zu gehen , um ein Wort vorwärts,Alt+B
um ein Wort rückwärts in einer Linie zu gehen. Ich magCtrl+Y
undShift+Insert
weil du zwei kopierte Zeilen haben kannst. Eins mitCtrl+U
(Einfügen mitCtrl+Y
) und gleichzeitig können Sie ein anderes Wort kopieren (Zeile auswählen) Einfügen mit (Shift+Insert
).CTRL+ Rin BASH zum Suchen / Aktivieren von zuvor ausgeführten Befehlen (der Inhalt von ~ / .bash_history).
Dies ist oft sehr hilfreich. Wenn Sie diesen Alias ausführen, wird die PWD über HTTP (indiziert) auf Port 8000 bereitgestellt:
Und weil ich laufe, die ganze Zeit mache und zu schnell spaziere und tippe, sind diese Aliase wahrscheinlich meine am häufigsten verwendeten (ernsthaften):
Und mein wahrscheinlich am häufigsten verwendetes Stück BASH ist ein einfaches Skript, das ich Upload nenne. Ich verwende es, um jegliche Art von Inhalten auf meinen Linode zu übertragen, und kopiere die resultierende HTTP-URL in meine Zwischenablage (mittlerer Klick). Sehr nützlich zum Einfügen von Inhalten in IRC-Benutzer:
Nur ein Paar. Ich kann später viel mehr posten, muss mich wieder an die Arbeit machen!
quelle
alias mk=make
Schneller zu tippen und weniger wahrscheinlich falsch zu liegen. Oder kompilieren Sie mit einem Hotkey aus Ihrem Editor ...alias m=make
, oder sogarm=make -j6
oder ähnlich - außer ich benutze bereitsalias m=mutt
☺diff
die Ausgabe von zwei Befehlen ohne manuelle Erstellung einer temporären Datei (bash):quelle
comm
da nur Dateien benötigt werden, aber in vielen Fällen ist dies eine Verschwendung von Inodes.Ziemlich einfach, aber die Leute scheinen es nicht zu wissen, und Sie kehren zum vorherigen Verzeichnis zurück:
quelle
cd..
von DOS ist in meinem Muskelgedächtnis verankert ...cd
(ohne Argument), die Sie zu Ihrem Home-Verzeichnis führt.Klammererweiterung :
Sie können damit mühsame Zeilen ersetzen wie:
mit einer kürzeren Instanz
einige andere Verwendungen
Arithmetische Erweiterung :
quelle
foo[123]
, die erweitert wirdfoo1 foo2 foo3
, aber es müssen Dateinamen sein, um in diesem Fall zu funktionierenDies ist normalerweise in meinem Startskript (.bashrc, .profile, was auch immer)
shopt
Meine Güte, überprüfen Sie die Kommentare:Ein Alias, der Tastatureingaben speichert:
mkdir
undcd
hinein:Und zu guter Letzt habe ich es aufgegeben, mir die TAR-Syntax zu merken.
quelle
mkcd
nur, dass ich ID benennemd
. Die Verwendung von "$ @" als Argument für cd macht jedoch keinen Sinn, da Sie nicht in mehr als ein einziges Verzeichnis cd können. "$ @" wird für mkdir funktionieren, aber dann behandeln Sie Argumente für mkdir und cd anders, also würde ich eher vorschlagenmd () { mkdir -p "$1"; cd "$1" }
Zwei Bash-Funktionen, die mir viele Tastenanschläge ersparen.
Mache nach jeder erfolgreichen CD automatisch ein ls:
Gehe auf n Ebenen:
quelle
builtin foo
, dass man eine definierte Funktion umgehen kanncd
. Ich habechdir
in meinen Funktionen verwendet. Handycd() { builtin cd -- "$@" && { [ "$PS1" = "" ] || ls -hrt --color; }; }
Da ich normalerweise auf halber Strecke in einer Befehlszeile bin, bevor ich suchen möchte (STRG-R in Bash), habe ich Folgendes in meinem .bashrc
Das bedeutet, wenn ich cd eingebe und dann hoch / runter drücke, kann ich alle Optionen sehen, die ich für cd hatte. Grundsätzlich benutze ich dies für häufig verwendete Verzeichnisse. Wie "cd w" und am Ende gehe ich alle Arbeitsbereiche durch, die ich viel benutze.
quelle
Eine Sache, die mir viel Zeit spart, sind die pushd / popd-Befehle. Mit diesen Typen können Sie einen Stapel von Verzeichnissen erstellen und das Tippen erheblich reduzieren:
quelle
u
undo
für hier stehen?setopt autopushd
und alle Verzeichnisänderungen werden automatisch PushDer
screen
Befehl . Grundsätzlich wird Ihre Befehlszeilensitzung für den Zeitpunkt Ihrer Rückkehr gespeichert. Es ist eine Art Terminalmanager, wie ein Fenstermanager. Auf diese Weise können in einer einzelnen Terminalsitzung mehrere virtuelle Terminals ausgeführt werden. Es ist sehr cool.Wenn man es benutzt
screen
, ist diese Shell-Funktion.bashrc
extrem nützlich:Nach der Eingabe
scr
wird überprüft, ob Ihre Hauptsitzung vorhanden ist, und es wird eine Verbindung dazu hergestellt. Andernfalls wird es erstellt.quelle
Wenn Sie eine besonders lange Befehlszeile in Bash bearbeiten müssen
öffnet es im Editor ($ EDITOR).
In zsh können Sie dasselbe Verhalten erzielen, indem Sie Folgendes zu .zshrc hinzufügen:
quelle
Wenn Sie ein schneller Schreibkraft sind, sind diese nützlich:
Mit diesem Makro können Sie die Gesamtsummen einer Ausgabespalte berechnen: Dateigrößen, Bytes, Pakete. Sie müssen lediglich die Spalte angeben, die Sie hinzufügen möchten:
Wenn Sie es zum Beispiel so verwenden, ohne Argumente, addiert es die Summe der ersten Spalte:
Wenn Sie das Argument angeben, wird diese Spalte summiert. Dies gibt beispielsweise die Gesamtzahl der Bytes an, die von allen C # -Dateien in / tmp verwendet werden:
Manchmal kommt es vor, dass Ihre Konsole nicht mehr funktioniert, weil Sie versehentlich eine Binärdatei angezeigt haben (z. B. cat / bin / ls). Sie können das Terminal mit der folgenden Shell-Funktion wiederherstellen:
Ich mag es, wenn mein l Zeichen verwendet, um die Dateiklasse zu unterscheiden und die von meinem Editor generierten Sicherungsdateien auszublenden (Sicherungsdateien enden mit dem Zeichen ~):
quelle
s/fast/sloppy/
reset
wo Sie verwendenrestaura
.Einer meiner Favoriten, wenn ich vergesse
s
:quelle
bindkey -s '\e[12~' "sudo !!\n"
(in diesem Fall) F2 binden, um diesen Befehl auszuführen. Ich habe diese Bindung, also wenn ich etwas starte und die Fehlermeldung "Sie haben 'sudo', Idiot 'vergessen" sehe, kann ich nur verärgert auf F2 stechenWenn ein Befehl stdin eingibt, können Sie die Eingabe aus einer Datei mit lesen
<filename
. Dies kann an einer beliebigen Stelle im Befehl erscheinen, daher sind diese Zeilen gleichbedeutend:Dies ist besonders nützlich für grep, da Sie den Ausdruck am Ende der Zeile platzieren können, sodass Sie einen grep-Befehl durch Drücken schnell ändern können Up, ohne nach links scrollen zu müssen, um den Dateinamen zu überschreiten:
quelle
<input foo | bar | baz >output
, funktioniert es nicht, wenn Sie versuchen, einige Shell-Loop-Primitive wiewhile
oderfor
in der Mitte zu mischen . Also habe ich aufgegeben und es am Ende laut Konvention hingestellt.Mit können Sie
CDPATH
das Verzeichnis einrichten, das dem entsprichtPATH
. Wenn Sie es versuchencd foo
undfoo
im aktuellen Verzeichnis kein Verzeichnis vorhanden ist, prüft die Shell jedes der Verzeichnisse, nach denen sieCDPATH
suchtfoo
, und wechselt zu dem ersten Verzeichnis, das sie findet:quelle
Denn wenn Sie nicht wissen, wo etwas lebt, und es Ihnen auch nichts ausmacht.
quelle
which
automatisch aufzurufen , alsovi =scriptname
$(scriptname)
Das kaufmännische Und . Der Befehl wird in den Hintergrund gestellt, sodass Sie mit der Eingabe fortfahren können.
Arbeiten Sie mit und nach einer Weile sehen Sie:
Und Ihr Prozess ist fertig! Großartig für Dinge, bei denen Sie nicht darauf warten müssen, dass sie beendet werden.
quelle
&!
den Job an den Hintergrund an und schließen Sie ihn aus der Shell aus!bash
.nohup
erreicht wird.Tab Vervollständigung . Wie schlimm wäre es, wenn Sie alle Zeichen jedes Pfades eingeben müssten?
quelle
rm -fr /
. Also ja, Tab-Vervollständigung ist ziemlich wichtig ...ls /usr/lib/game-d*/rott*
rm -rf /
in den meisten Linux-Systemen nicht deaktiviert?Umount last mounted device:
!mo
wird auf den letzten Befehl erweitert, mit dem begonnen wurdemo
(zumindest in Bash). Manchmal tut man dasmv
in der Mitte, deshalbu!m
funktioniert es nicht so oft.quelle
Ich habe dies in meinem .bashrc
Und wenn ich HTML-Quellcode in der Zwischenablage habe und alle Links finden möchte, die ich verwende
Und ich habe alle URLs in der Zwischenablage
Ich habe auch diese Funktion
welche Anzeigegröße (von Menschen lesbar) und Dateiname.
Dieser Alias ist für die Show-Temperatur
Mit dieser Funktion kann ich das Produkt oder die Summe der Argumente berechnen.
Dies ist eine nützliche Funktion, die die Standardeingabe durch Regex getrennt aufteilt und dann das Ergebnis zusammenfügt.
Fakultätsfunktion
Diese Funktion zeigt Wiki-Text über DNS an
Ich habe auch drei Farbfunktionen
Diese Funktion validiert die Datei md5 hash.
Dies zeigt eine Fehlermeldung für einen bestimmten Code an
Sie können alle Nachrichten mit ausdrucken
quelle
Ein weiterer nützlicher ZSH-Trick:
Behandle die Ausgabe eines Befehls als Datei:
Dadurch wird eine alte Version einer Mercurial-Datei in Emacs zur syntaktisch hervorgehobenen Anzeige geöffnet. Ohne das würde ich zu verwirren haben um mit
hg revert
,hg archive
oder explizit sendenhg cat
Ausgabe in eine temporäre Datei.Dies funktioniert natürlich mit jedem Programm, das Dateien öffnet, und mit jedem Programm, das auf Standardausgabe druckt.
quelle
Eine ZSH-spezifische Funktion sind Suffix-Aliase, die durch Angabe
alias
des-s
Flags festgelegt werden:Wenn eine bestimmte Erweiterung einen Suffix-Alias hat, können Sie eine Datei mit dieser Erweiterung direkt ausführen, und ZSH startet das angegebene Programm und übergibt den Dateinamen als Argument. Wenn der obige Alias aktiviert ist, sind diese Zeilen äquivalent:
quelle
Eine meiner beliebtesten ZSH-Funktionen ist die Verwendung von Verzeichnissen. Sie können eine Variable mit einem bestimmten Namen und einem Wert exportieren, der auf einen bestimmten Pfad verweist:
Jetzt können Sie
~foo
in einem Befehl auf Folgendes verweisen/usr/bin
:quelle
Siehe diese Frage .
Wenn du rennst
ps ax | grep string
:Die letzte Zeile
grep
ist etwas nervigSie können sich davon befreien, indem Sie Folgendes ausführen
ps ax | grep '[s]tring'
:update : oder einfach ausführen
pgrep string
quelle
'[o]penbox'
) zitieren . Die Klammern funktionieren wie ein Globus. Wenn sich also Openbox in Ihrem Verzeichnis befindet (sagen wir, Sie sind in diesem Verzeichnis/usr/bin
), verwendet bash nur Openbox, wodurch der Grep-Trick verhindert wird.Der Do-Nothing-Befehl
:
wie inKlammererweiterung in Kombination mit for-Schleifen:
!
Betreiber und Kurzschlussbetreiber||
und&&
Verwenden von Subshells anstelle von Pop / Push (nützlich in Skripten)
die Art von was ist Befehl
type
auch sehr schön: hier-saiten
und mein Favorit: Umleitung auf eine Befehlsliste
quelle
Ich liebe es, so viel Zeug wie möglich in meine PS1 zu schmeißen. Einige nützliche Dinge, an die Sie sich erinnern sollten:
\e[s
und\e[u
speichern bzw. nicht speichern Sie die Cursorposition. Ich benutze dies, um eine 'Info-Leiste' am oberen Bildschirmrand zu erstellen, die ein paar Zeilen lang ist und mehr Platz bietet. Beispiel:Kombinieren Sie mit
alias clear='echo -e "\e[2J\n"'
. Versuch es!Außerdem
PROMPT_COMMAND
definiert die Variable einen Befehl, der jedes Mal vor der PS1 ausgeführt wird.Ein anderer ist der
bg
Befehl. Wenn Sie vergessen , setzen&
am Ende eines Befehls, drücken Sie einfach ^Zund Artbg
, und es läuft im Hintergrund.quelle
bg
, wenn ich ein programm im hintergrund laufen habe und versehentlich drückefg
ich weiß nicht wie ich es zurückschieben soll: DPS1
so dass ich die meisten Dinge, die ich will, in mein Bildschirm-Fazit setzen ...