# 设备

# /dev

Linux 中,所有设备都以文件的形式映射到 /dev 目录下。例如:

  • /dev/hd[a-d] :IDE 接口的设备(主要是硬盘)。
    • IDE 接口是一种传统的并行接口,传输速度较慢,已被淘汰。
    • 例如 /dev/hda 表示硬盘 a 。编号 a 说明它是系统启动后识别到的第一个这种类型的设备。
  • /dev/sd[a-p] :SATA 接口的设备(主要是硬盘)、SCSI 接口的设备(主要是硬盘)、USB 接口的设备。
  • /dev/vd[a-] :虚拟磁盘。
  • /dev/fd[0-1] :软盘。
  • /dev/cdrom :光驱。
  • /dev/mouse :鼠标。
  • /dev/lp[0-15] :打印机。

# 块、字符设备

将设备文件按读写单位分类:

  • 块设备(block deivce)
    • :读写时以块为单位,有缓冲。比如磁盘。
    • 块设备一般被格式化成某种文件系统,供用户读写。
  • 字符设备(character device)
    • :读写时以字符为单位,无缓冲,因此读写延迟低。比如键盘。
    • 用户不能通过文件系统读写字符设备,而要通过某些程序直接通信。
    • 没有格式化的设备称为裸设备,不能通过文件系统访问,只能当作字符设备直接访问。

# 终端设备

  • Linux 中,与终端交互时,都是通过读写 /dev 目录下的串口设备文件。
    • 它们可能是真实存在的硬件设备,也可能是虚拟设备。

主要分类:

  • 控制台设备(console device)
    • :文件名为 /dev/console ,用于接收系统内核的一些输出信息,只有 root 用户能读写。
  • 虚拟控制台(virtual console)
    • :文件名的正则表达式为 /dev/tty\d*
    • /dev/tty 指向当前 shell 使用的终端,比如 /dev/tty1、/dev/pts/0 。
    • /dev/tty0 指向当前 shell 使用的虚拟控制台,只有 root 用户能读写。
  • 伪终端(pseudo terminals ,ptys)
    • :用于模拟终端操作的进程。比如在桌面上打开的终端、通过 SSH 登录的终端。
    • 文件名的正则表达式为 /dev/pts/\d+
    • 例如,假设通过 SSH 登录。执行 w 命令,查询到当前终端为 pts/0 。然后执行以下命令:
      [root@CentOS ~]#echo Hello > /dev/stdout    # 将输出重定向到 stdout ,这会输出到当前终端
      Hello
      [root@CentOS ~]#echo Hello > /dev/tty       # 将输出重定向到当前终端
      Hello
      [root@CentOS ~]#echo Hello > /dev/tty1
      [root@CentOS ~]#echo Hello > /dev/pts/0
      Hello
      [root@CentOS ~]#echo Hello > /dev/pts/6     # 该伪终端不存在,因此不允许重定向
      -bash: /dev/pts/6: Permission denied
      
    • 通过 SSH 登录时,用户输入的 stdin 数据会先被通过 sshd 服务传给远程主机上的 shell 进程,再写入 /dev/tty 文件,最后被系统内核读取、处理。
  • 串行端口终端(serial ports terminal)
    • :表示通过计算机串行端口连接的终端设备。
    • 文件名的正则表达式为 /dev/ttyS\d+
    • 例如,执行命令 echo "Hello World" > /dev/ttyS1 ,就是将数据发送到 S1 端口,相当于 DOS 系统的 COM1 。

# 相关命令

# lscpu

$ lscpu      # 显示 CPU 的信息

# lsmem

$ lsmem      # 显示内存的信息

# lsblk

$ lsblk      # 显示系统所有的块设备
       -p    # 显示每个设备的完整路径
       -f    # 显示每个块设备的文件系统、UUID(通用唯一识别码)
  • 例:
    [root@CentOS ~]# lsblk -p
    NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    /dev/sr0     11:0    1  3.5M  0 rom
    /dev/vda    253:0    0   50G  0 disk
    └─/dev/vda1 253:1    0   50G  0 part /
    
    • /dev/sr0 是 rom ,/dev/vda 是磁盘设备,/dev/vda1 是一个磁盘分区,挂载在/。
    • MAJ:MIN :主设备号和次设备号。
    • RM :是否为可卸载设备。
    • RO :是否为只读设备。
    • TYPE :分为磁盘(disk)、分区(partition)、只读存储器(rom)三种。
    • MOUTPOINT :挂载点。

# lshw

$ lshw            # 显示所有硬件设备的详细信息
      -short      # 只显示简洁的设备列表
      -class cpu  # 只显示 cpu 类的信息(同理可显示其它类设备)
      -json       # 显示成 json 格式
  • 安装:yum install lshw
  • 需要用 root 权限执行。