Was sind die Tastaturkürzel für die Befehlszeile?

10

Ich spreche von den Tastaturkürzeln, die Sie in der Befehlszeile / im Terminal verwenden.

Beispiel: Ctrl+ c, die den Prozess tötet, Ctrl+ ddass Logout, Ctrl+ zdass Sendeprozess in dem Hintergrund ... etc.

Ich habe einige und fand getestet , dass sie weder Terminal sind (dh gnome-terminal, xterm, konsole) spezifische noch Schale (dh bash, zsh) spezifisch, sie selbst Arbeit zu ttys.

Also möchte ich wissen:

  • Wer bietet diese Verknüpfungen an?
  • Wie kann ich sie auflisten und ändern / definieren?
Pandya
quelle
Versuchen Sie bind -paufzulisten, wie help bindfür andere
Costas

Antworten:

10

Der Terminaltreiber ( termios) des Kernels interpretiert die Sonderschlüssel, die eingegeben werden können, um ein Signal an einen Prozess zu senden, das Dateiende zu senden, Zeichen zu löschen usw. Dies ist die grundlegende Unix-Kernelfunktionalität und bei den meisten Unix- und Linux-Implementierungen sehr ähnlich.

Der sttyBefehl zeigt die termiosSonderzeichen sowie andere Parameter für den Terminalleitungstreiber an oder legt diese fest .

Rufen Sie stty -aauf, um die aktuellen Werte der Sonderzeichen und andere "Terminalzeileneinstellungen" anzuzeigen. In den folgenden Beispielen können Sie sehen , dass intrist Ctrl+ C, eofist Ctrl+ D, suspist Ctrl+ Z. (Ich habe andere Ausgaben gelöscht, um nur die Sonderzeicheneinstellungen anzuzeigen.):

stty -a Sonderzeichen unter GNU / Linux:

intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;

stty -a Sonderzeichen auf FreeBSD:

cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = ^@; eol2 = ^@;
        erase = ^?; erase2 = ^H; intr = ^C; kill = ^U; lnext = ^V;
        min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
        stop = ^S; susp = ^Z; time = 0; werase = ^W;

Um den Wert eines Sonderzeichens zu ändern, z. B. um das Interrupt-Zeichen von Ctrl+ Cauf Ctrl+ zu ändern , Erufen Sie sttywie ^Efolgt auf ( besteht buchstäblich aus zwei Zeichen, dem Zirkumflex ( ^) gefolgt vom Buchstaben E):

stty intr '^E'

Weitere Informationen finden Sie in den Manpages für sttyund termios. Unter GNU / Linux können Sie auch die tty_ioctlManpage aufrufen.

Anmerkungen:

Der intrSchlüssel ( standardmäßig Ctrl+ C) beendet den Prozess nicht tatsächlich, sondern veranlasst den Kernel, ein Interrupt-Signal ( SIGINT) an alle Prozesse innerhalb der Prozessgruppe zu senden . Die Prozesse können das Signal abfangen oder ignorieren, aber die meisten Prozesse werden beendet, was das Standardverhalten ist.

Der Grund, warum Ctrl+ dSie abmeldet, ist, dass der Terminalleitungstreiber EOF (Dateiende) an die Standardeingabe der Shell sendet. Die Shell wird beendet, wenn sie das Dateiende an ihrer Standardeingabe empfängt.

RobertL
quelle
@Sukminder, unter FreeBSD wurde die POSIX- -aOption hinzugefügt stty.
RobertL
Ich habe versucht, stty intr '^E'es funktioniert (setzt), aber vorübergehend und nur für das aktuelle Terminal / tty. Wie ändere ich es global und dauerhaft?
Pandya
Ich denke, der beste Weg wäre, sttyin Ihrem $ HOME / .profile oder $ HOME / .bashrc oder einer anderen Shell-Startinitialisierungsdatei aufzurufen.
RobertL
Ich habe versucht: es funktioniert mit Terminal, aber keine Wirkung intty
Pandya
Was hast du versucht, was siehst du und was meinst du damit tty? Vielleicht könnte das eine neue Frage sein?
RobertL
15

Von http://www.skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/

Befehlsbearbeitungsverknüpfungen

  • Ctrl+ a- gehe zum Anfang der Kommandozeile
  • Ctrl+ e- gehe zum Ende der Kommandozeile
  • Ctrl+ k- vom Cursor bis zum Ende der Befehlszeile löschen
  • Ctrl+ u- vom Cursor zum Anfang der Befehlszeile löschen
  • Ctrl+ w- vom Cursor zum Wortanfang löschen (dh ein Wort rückwärts löschen)
  • Ctrl+ y- Fügen Sie ein Wort oder einen Text ein, der mit einer der Löschverknüpfungen (wie der oben genannten) nach dem Cursor ausgeschnitten wurde
  • Ctrl+ xx- zwischen Befehlszeilenanfang und aktueller Cursorposition (und wieder zurück) bewegen
  • Alt+ b- ein Wort rückwärts bewegen (oder zum Wortanfang gehen, auf dem sich der Cursor gerade befindet)
  • Alt+ f- ein Wort vorwärts bewegen (oder zum Ende des Wortes gehen, auf dem sich der Cursor gerade befindet)
  • Alt+ d- Löschen bis zum Ende des Wortes beginnend mit dem Cursor (ganzes Wort, wenn sich der Cursor am Anfang des Wortes befindet)
  • Alt+ c- am Ende des Wortes beginnend mit dem Cursor groß schreiben (ganzes Wort, wenn sich der Cursor am Anfang des Wortes befindet)
  • Alt+ u- Groß- und Kleinschreibung vom Cursor bis zum Ende des Wortes machen
  • Alt+ l- Machen Sie vom Cursor bis zum Ende des Wortes Kleinbuchstaben
  • Alt+ t- aktuelles Wort mit vorherigem tauschen
  • Ctrl+ f- ein Zeichen vorwärts bewegen
  • Ctrl+ b- ein Zeichen rückwärts bewegen
  • Ctrl+ d- Zeichen unter dem Cursor löschen
  • Ctrl+ h- Zeichen vor dem Cursor löschen
  • Ctrl+ t- Zeichen unter dem Cursor gegen das vorherige austauschen

Befehlsrückrufverknüpfungen

  • Ctrl+ r- Suche den Verlauf rückwärts
  • Ctrl+ g- Flucht aus dem Verlaufssuchmodus
  • Ctrl+ p- vorheriger Befehl in der Geschichte (dh zurück durch die Befehlshistorie gehen)
  • Ctrl+ n- nächster Befehl in der Geschichte (dh vorwärts durch die Befehlshistorie gehen)
  • Alt+ .- Verwenden Sie das letzte Wort des vorherigen Befehls

Befehlssteuerungs-Verknüpfungen

  • Ctrl+ l- Bildschirm löschen
  • Ctrl+ s- stoppt die Ausgabe auf dem Bildschirm (für lang laufende ausführliche Befehle)
  • Ctrl+ q- Ausgabe auf dem Bildschirm zulassen (falls zuvor mit dem obigen Befehl gestoppt)
  • Ctrl+ c- Beenden Sie den Befehl
  • Ctrl+ z- Befehl anhalten / stoppen

Bash Bang (!) Befehle

Bash hat auch einige praktische Funktionen, die die! (bang) damit du ein paar funky Sachen mit Bash- Befehlen machen kannst .

  • !! - letzten Befehl ausführen
  • ! blah - führe den neuesten Befehl aus, der mit 'blah' beginnt (zB! ls)
  • ! blah: p - druckt den Befehl aus, den ! blah ausführen würde (fügt ihn auch als neuesten Befehl im Befehlsverlauf hinzu)
  • ! $ - das letzte Wort des vorherigen Befehls (wie Alt +. )
  • ! $: p - drucke das Wort aus, das ! $ ersetzen würde
  • ! * - der vorherige Befehl mit Ausnahme des letzten Wortes (z. B. wenn Sie ' find some_file.txt / ' eingeben , dann ! * Gibt Ihnen ' find some_file.txt ')
  • ! *: p - drucke aus, was ! * ersetzen würde
Jesus Cepeda
quelle
1
@Sukminder Nein, Strg + S stoppt die Ausgabe. Sie scheinen es mit Strg + Z zu verwechseln.
Gilles 'SO - hör auf böse zu sein'
Siehe auch: Emacs.
Erich
Nett! Und ist es eine Möglichkeit , das zu erreichen ^U, dass stty -aShows definiert für SIGKILL unter Linux, von bash? Am besten ohne Aufheben der Definition des Readline-Materials (möglicherweise über einen dritten Mod / Meta-Schlüssel). Ich nehme an, es wird nur durch die Strg + U-Readline-Bindung beschattet?
Nyov