What are the keyboard shortcuts for the command-line

command linekeyboard shortcutsterminaltty

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?

Best Answer

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.

Related Question