I noticed many mentions of pty
and tty
in some open source projects, could someone tell me what do they mean and what is the difference between them?
pty/tty
s are described as pre-created pairs of files representing master/slave end of a pseudo-terminal (see the description about BSD style).
tty
originally meant "teletype" and "pty"
means "pseudo-teletype".
In UNIX, /dev/tty*
is any device that acts like a "teletype", i.e: a terminal. (Called teletype because that's what we had for terminals in those benighted days.)
A pty
is a pseudotty, a device entry that acts like a terminal to the process reading and writing there, but is managed by something else. They first appeared (as I recall) for X Window and screen and the like, where you needed something that acted like a terminal but could be used from another program.
A tty
is a terminal (it stands for teletype - the original terminals used a line printer for output and a keyboard for input!). A terminal is a basically just a user interface device that uses text for input and output.
A pty
is a pseudo-terminal - it's a software implementation that appears to the attached program like a terminal, but instead of communicating directly with a "real" terminal, it transfers the input and output to another program.
For example, when you ssh in to a machine and run ls
, the ls
command is sending its output to a pseudo-terminal, the other side of which is attached to the SSH daemon.
*nix
based operating system creates this pseudo terminals.
sshd
and xterm
are two typical examples.
tty: teletype. Usually refers to the serial ports of a computer, to which terminals were attached.
pty: pseudoteletype. Kernel provided pseudoserial port connected to programs emulating terminals, such as xterm, or screen.
If you run the mount command with no command-line arguments, which displays the file systems mounted on your system, you’ll notice a line that looks something like this: none on /dev/pts type devpts (rw,gid=5,mode=620) This indicates that a special type of file system, devpts , is mounted at /dev/pts .This file system, which isn’t associated with any hardware device, is a “magic” file system that is created by the Linux kernel. It’s similar to the /proc file system
Like the /dev directory, /dev/pts contains entries corresponding to devices. But unlike /dev , which is an ordinary directory, /dev/pts is a special directory that is cre- ated dynamically by the Linux kernel.The contents of the directory vary with time and reflect the state of the running system. The entries in /dev/pts correspond to pseudo-terminals (or pseudo-TTYs, or PTYs).
Linux creates a PTY for every new terminal window you open and displays a corre- sponding entry in /dev/pts .The PTY device acts like a terminal device—it accepts input from the keyboard and displays text output from the programs that run in it. PTYs are numbered, and the PTY number is the name of the corresponding entry in /dev/pts .
For example, if the new terminal window’s PTY number is 7, invoke this command from another window:
echo ‘I am a virtual di ’ > /dev/pts/7
The output appears in the new terminal window. You can try to change the 7 with 1, 2 depending on the open terminals you will see the output on the other terminal window. The dev/pts is the bus(the post office) to do this!
A tty
is a physical terminal-teletype port on a computer (usually a serial port).
A Teletype tty can also be emulated by a computer program running as a module in kernel space.
The word teletype is a shorting of the telegraph typewriter, or teletypewriter device from the 1930s - itself an electromagnetic device which replaced the telegraph encoding machines of the 1830s and 1840s.
https://i.stack.imgur.com/2EoB1.jpg
A pty
is a pseudo-teletype port provided by a computer Operating System Kernel to connect user land terminal emulation software programs such as ssh, xterm, or screen.
https://i.stack.imgur.com/1exFh.png
A terminal is simply a computer's user interface that uses text for input and output.
OS Implementations
These use pseudo-teletype ports however, their naming and implementations have diverged a little.
Linux mounts a special file system devpts on /dev (the 's' presumably standing for serial) that creates a corresponding entry in /dev/pts
for every new terminal window you open, e.g. /dev/pts/0
macOS/FreeBSD also use the /dev file structure however, they use a numbered TTY
naming convention ttys
for every new terminal window you open e.g. /dev/ttys002
Microsoft Windows still has the concept of an LPT
port for Line Printer Terminals within it's Command Shell for output to a printer.
Success story sharing
Ctrl-Alt-F{1..6}
and they are connected to/dev/tty{1..6}
. The Linux Console is not a physical terminal, yet it is connected to attyN
(not to aptyN
). Am I missing something here?