This chapter describes the way to extract information about the devices and understand a few rudimentary operations.
When you list files in
$ ls -l /dev crw-rw-rw- 1 root tty 5, 2 Oct 6 19:28 ptmx drwxr-xr-x 2 root root 0 Oct 6 18:07 pts crw-rw-rw- 1 root root 1, 8 Oct 6 18:07 random crw-rw-r--+ 1 root netdev 10, 62 Oct 6 18:07 rfkill lrwxrwxrwx 1 root root 4 Oct 6 18:07 rtc -> rtc0 crw------- 1 root root 249, 0 Oct 6 18:07 rtc0 brw-rw---- 1 root disk 8, 0 Oct 6 18:07 sda brw-rw---- 1 root disk 8, 1 Oct 6 18:07 sda1 brw-rw---- 1 root disk 8, 2 Oct 6 18:07 sda2 brw-rw---- 1 root disk 8, 3 Oct 6 18:07 sda3 ...
You can find device files.
These device files are sometimes called "device nodes".
The first characther in each row represents a type of a device:
- b: block device
- c: character device
- p: pipe device
- s: socket device
One or two numbers before the date are the major and minor device numbers that help the kernel identify the device.
Block devices typically refer to disk devices. Since the total size of the devices are fixed, they are easily indexed and processes can randomly access to any block.
Character devices work with data streams.
You can only read characters from or write characters to character devices.
Character devices do not have a size.
Sockets are special-purpose interfaces that are frequently used for interprocess communication.
Not all devices have device files because the block and character device I/O interfaces are not appropriate in all cases (e.g., network devices)
The issues of /dev device files?
/dev directory is a convenient way for user processes to handle devices, however, there are several issues for kernel:
- Simple names do not tell much about the info of device
- Device names are assigned in the order in which they are found (one physical device can get different name on reboot)
To overcome these, Linux kernel offers the sysfs interface through files and directories (/sys/devices).
For example, a hard disk at
/dev/sda might have the following path in sysfs:
Note that these two paths have different purposes. The
/dev file is for user processes to use the device, whereas the
/sys/devices path is for viewing information and manage the device**.
Device Name summary
Hard disks: /dev/sd*
The kernel makes separate device files for the partitions on a disk.
Terminals: /dev/tty*, /dev/pts/*, and /dev/tty
Terminals are devices for moving characters between a user process and
an I/O device, usually for text output to a terminal screen.
Column: Display Modes and VIrtual Consoles
Linux has two display modes: text-mode and X Window System server (graphics mode).
Linux supports virtual consoles to multiplex the display. Each virtual console can run either in text or graphics mode.
When you are in text-mode, you can switch between virtual consoles by pressing
ALT-F* (function key like F1, F2).
When you are in X11 session, you can do that by
Contents above are entirely based on How Linux Works, 2nd Edition: What Every Superuser Should Know