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?

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.


@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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.