In ubuntu 10.04, if I check under /dev, there are more than 50 ttys. tty0, tty1, tty2....

I understand tty is a character device for console input/output.

  1. but why is there so many of them? is it something like pool?

  2. and what is the difference between /dev/pts/0, 1, 2... , /dev/tty?

  3. If I open up a terminal, new number is created under /dev/pts. but I don't know when /dev/tty? is used.

    even if I create a SSH connection, number of /dev/tty s are same.

    and if I do

    cat /dev/tty0

    and type something in keyboard, I get corresponding outputs. why is this happening?


2 Answers 2


The ttys are not just input/output devices. They also do a special job of acting as the controlling terminal for a session, like sending signals (Ctrl+C). /dev/ttyNN are virtual consoles, which are full screen displays on the monitor.

The terminals start from /dev/tty1. You could switch to these consoles, usually, by pressing Ctrl+Alt+Fn keys.

e.g, Ctrl+Alt+F1 takes you to the first virtual terminal. Nowadays, most of the Linux distributions run the X server from the tty1. So, pressing Ctrl+Alt+F1 may not have an effect.

$ ps ax | grep Xorg | grep -v grep
 1504 tty1     Ss+   44:57 /usr/bin/Xorg :0 -background none -verbose -auth /var/run/gdm/auth-for-gdm-rfsWyA/database -nolisten tcp vt1

Ctrl+Alt+F2 will take you to the second terminal. Usually the distributions run a login program(agetty) on the virtual terminal.

$ ps ax | grep tty2 | grep -v grep
31865 tty2     Ss+    0:00 /sbin/agetty tty2 38400

The login programs provide you a login prompt and lets you login with username/password. The init scripts decides, where all the login program will be run. So depending on that you may or may not see a login prompt on, say tty9. To go back to your GUI interface, press Ctrl+Alt+F1(as in example output above).

/dev/tty0 is a special device, which points to the current terminal. So, irrespective of where you run it from(any virtual console), anything read from/written to tty0 goes to your current terminal.

The second column in 'ps ax' also gives the controlling terminal of the program. For some programs, like daemons, you may see that the column is '?', which means they are not bound to a terminal.

/dev/pts/0 etc are psuedo-terminal devices, which are not attached to the system display. for e.g, terminal you get when you open a gnome-terminal or any other GUI terminal. These are client-server based approach where client side will be exported to programs, like bash. The data send by the program to the pseudo terminal is sent to the 'server' side (which is usually monitored by another program, like gnome-terminal). The controlling process (server side) determines what needs to be sent to the terminal, which is eventually seen by the client. These devices help you to open multiple 'GUI terminals' without any limit on your system, still providing the same old terminal like controls(ioctl(), colour setting, Sending signals [Ctrl+C] etc. ).

  • 3
    How should one know this, except asking it here? some man page?
    – n611x007
    Sep 8, 2013 at 12:23
  • 1
    @n611x007 - man /dev/pts is a good start, also man termios, note that client/server is bidirectional amongst the ptys - ptm and pts - where a virtual terminal like gnome-terminal, or xterm is usually connected to the master and a shell like bash, the slave.
    – wulfgarpro
    Dec 9, 2015 at 6:12
  • On my system /dev/tty is the current controlling terminal, but I don't know what's /dev/tty0, however /dev/tty1 is the Linux KMSCON. And /dev/tty7 is X server. Nov 4, 2017 at 9:48
  • 1
    This doesn't answer the question though. As daehee remarked, there are 64 /dev/ttyN devices. 1-8 are virtual consoles. ptys are separate, under /dev/pts. On what system does, say, /dev/tty30 ever get used, and how? Sep 18, 2018 at 13:52

I just want to clarify the relationships of this kind of things.

First, /dev/tty is at process level, it can be ttyn(tty1, tty2,...), ttySn(ttyS0, ttyS1), pty(pts/0, pts/1), and something else.

/dev/tty0 is a alias of current(foreground) virtual console, so it could be tty1, tty2, and so on. Notice that ttyS0 is not a alias; It's the first serial port.

/dev/console is the system console, it points to /dev/tty0 as a default. It can be ttyn, ttySn, ttyUSBn, lpn, and so on.

Roughly, /dev/tty > /dev/cosole > /dev/tty0


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .