8

I'm talking about the keyboard shortcuts that you use in command-line/terminal.

Example: Ctrl+c that kills the process, Ctrl+d that logout, Ctrl+z that send process to background... etc.

I've tested some and found that they are neither terminal (i.e gnome-terminal, xterm, konsole) specific nor shell (i.e bash, zsh) specific, they even work at ttys.

So, I want to know:

  • Who provides these shortcuts?
  • How can I list and modify/define them?
  • Try bind -p to list, so as help bind for other – Costas Jan 16 '16 at 12:53
8

The kernel's terminal driver (termios) interprets the special keys that can be typed to send a signal to a process, send end of file, erase characters, etc. This is basic Unix kernel functionality and very similar on most Unix and Linux implementations.

The stty command displays or sets the termios special characters, as well as other parameters for the terminal line driver.

Invoke stty -a to see the current values of the special characters and other "terminal line settings". In the following examples, you can see that intr is Ctrl+C, eof is Ctrl+D, susp is Ctrl+Z. (I've deleted other output to show only the special character settings):

stty -a special chars on 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 special characters on 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;

To change the value of a special character, for example, to change the interrupt character from Ctrl+C to Ctrl+E invoke stty like this (^E is literally two characters, the circumflex (^) followed by the letter E):

stty intr '^E'

For more information see the man pages for stty and termios. On GNU/Linux you can also look at the tty_ioctl man page.

Notes:

The intr key (Ctrl+C by default), doesn't actually kill the process, but causes the kernel to send an interrupt signal (SIGINT) to all processes within the process group. The processes may arrange to catch or ignore the signal, but most processes will terminate, which is the default behavior.

The reason that Ctrl+d logs you out is because the terminal line driver sends EOF (end of file) on the standard input of the shell. The shell exits when it receives end of file on it's standard input.

  • @Sukminder, on FreeBSD, the POSIX -a option was added to stty. – RobertL Jan 16 '16 at 17:53
  • I've tried stty intr '^E' it works (sets) but temporarily and for current terminal/tty only. How do I change it globally & permanently? – Pandya Jan 18 '16 at 13:14
  • I think the best way would be to invoke stty in your $HOME/.profile or $HOME/.bashrc or some other shell startup initialization file. – RobertL Jan 19 '16 at 1:14
  • I've tried : it works with terminal but no effect in tty – Pandya Jan 20 '16 at 14:19
  • What did you try, what do you see, and what do you mean by tty? Maybe that could be a new question? – RobertL Jan 20 '16 at 19:09
6

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

Command Editing Shortcuts

  • Ctrl + a – go to the start of the command line
  • Ctrl + e – go to the end of the command line
  • Ctrl + k – delete from cursor to the end of the command line
  • Ctrl + u – delete from cursor to the start of the command line
  • Ctrl + w – delete from cursor to start of word (i.e. delete backwards one word)
  • Ctrl + y – paste word or text that was cut using one of the deletion shortcuts (such as the one above) after the cursor
  • Ctrl + xx – move between start of command line and current cursor position (and back again)
  • Alt + b – move backward one word (or go to start of word the cursor is currently on)
  • Alt + f – move forward one word (or go to end of word the cursor is currently on)
  • Alt + d – delete to end of word starting at cursor (whole word if cursor is at the beginning of word)
  • Alt + c – capitalize to end of word starting at cursor (whole word if cursor is at the beginning of word)
  • Alt + u – make uppercase from cursor to end of word
  • Alt + l – make lowercase from cursor to end of word
  • Alt + t – swap current word with previous
  • Ctrl + f – move forward one character
  • Ctrl + b – move backward one character
  • Ctrl + d – delete character under the cursor
  • Ctrl + h – delete character before the cursor
  • Ctrl + t – swap character under cursor with the previous one

Command Recall Shortcuts

  • Ctrl + r – search the history backwards
  • Ctrl + g – escape from history searching mode
  • Ctrl + p – previous command in history (i.e. walk back through the command history)
  • Ctrl + n – next command in history (i.e. walk forward through the command history)
  • Alt + . – use the last word of the previous command

Command Control Shortcuts

  • Ctrl + l – clear the screen
  • Ctrl + s – stops the output to the screen (for long running verbose command)
  • Ctrl + q – allow output to the screen (if previously stopped using command above)
  • Ctrl + c – terminate the command
  • Ctrl + z – suspend/stop the command

Bash Bang (!) Commands

Bash also has some handy features that use the ! (bang) to allow you to do some funky stuff with bash commands.

  • !! – run last command
  • !blah – run the most recent command that starts with ‘blah’ (e.g. !ls)
  • !blah:p – print out the command that !blah would run (also adds it as the latest command in the command history)
  • !$ – the last word of the previous command (same as Alt + .)
  • !$:p – print out the word that !$ would substitute
  • !* – the previous command except for the last word (e.g. if you type ‘find some_file.txt /‘, then !* would give you ‘find some_file.txt‘)
  • !*:p – print out what !* would substitute
  • 1
    @Sukminder No, Ctrl+S does stop output. You seem to be confusing it with Ctrl+Z. – Gilles Jan 16 '16 at 21:20
  • See also: Emacs. – Erich Aug 30 '18 at 19:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.