关于/dev/console,/dev/tty和/dev/null

UNIX和Linux中比较重要的三个设备文件是:/dev/console,/dev/tty和/dev/null。 


/dev/console 

这个设备代表的是系统控制台,错误信息和诊断信息通常会被发送到这个设备。 


每个UNIX系统都会有一个指定的终端或显示屏用来接收控制台信息。 



/dev/tty 

如果一个进程有控制终端的话,那么/dev/tty就是这个控制终端的别名。 

像cron这样的进程是没有控制终端的,因此它也就无法打开/dev/tty。 

tty这个词源于Teletypes,最早是源于电传打印机。 

如果你登录了一个shell,那么/dev/tty就是你当前使用的终端。你也可以用tty命令查看/dev/tty设备实际链接到的设备是哪个。 

/dev/tty其实就是类似于“符号链接”一样的东西。像我的tty输出就是: 

[root@wupengchong dev]# tty 
/dev/pts/0 



/dev/null 

这是个空设备,也称为“位桶bit bucket”。所有写向这个设备的输出都将被丢弃,而如果你读/dev/null,则会立即得到一个文件尾标志而返回。 

在cp命令里,可以用/dev/null来作为拷贝空文件的源文件。 

在shell中,通常将不需要的东西重定向到/dev/null中。 

这里要提一下/dev/zero,它和null是有区别的。通俗的讲,/dev/null是一个饭桶,你可以无穷无尽的往里塞垃圾,它不会埋怨。而/dev/zero是一个输入设备,它给你无穷无尽的提供0(就是null),它可以用于向文件或设备写入无穷无尽的0. 

/dev/zero和/dev/null的用法比较: 

$dd if=/dev/zero of=mydoc.txt bs=1k count=1 

$find . -name “*.c” 2>/dev/null 

/home # lsof -p 1072 1 /bin/busybox /dev/console 1 /bin/busybox /dev/console 1 /bin/busybox /dev/console 620 /bin/busybox /dev/console 620 /bin/busybox /dev/console 620 /bin/busybox /dev/console 620 /bin/busybox /etc/init.d/rcS 634 /sbin/udevd /dev/null 634 /sbin/udevd /dev/null 634 /sbin/udevd /dev/null 634 /sbin/udevd socket:[163] 634 /sbin/udevd socket:[164] 634 /sbin/udevd anon_inode:inotify 634 /sbin/udevd anon_inode:[signalfd] 634 /sbin/udevd socket:[167] 634 /sbin/udevd socket:[168] 634 /sbin/udevd anon_inode:[eventpoll] 889 /usr/sbin/dropbear /dev/null 889 /usr/sbin/dropbear /dev/null 889 /usr/sbin/dropbear /dev/null 889 /usr/sbin/dropbear socket:[232] 1065 /bin/busybox /dev/console 1065 /bin/busybox /dev/console 1065 /bin/busybox /dev/console 1065 /bin/busybox /etc/init.d/app_run 1067 /home/thml_net_core /dev/console 1067 /home/thml_net_core /dev/console 1067 /home/thml_net_core /dev/console 1067 /home/thml_net_core socket:[455] 1067 /home/thml_net_core /dev/vpss 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/ttyAMA1 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/mmz_userdev 1067 /home/thml_net_core /dev/sys 1067 /home/thml_net_core /dev/vb 1067 /home/thml_net_core /dev/mmz_userdev 1067 /home/thml_net_core /dev/ive 1067 /home/thml_net_core /dev/isp_dev 1067 /home/thml_net_core /dev/piris 1067 /home/thml_net_core /dev/vi 1067 /home/thml_net_core /dev/watchdog 1067 /home/thml_net_core /dev/vi 1067 /home/thml_net_core /dev/vi 1067 /home/thml_net_core /dev/vi 1067 /home/thml_net_core /dev/isp_dev 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/vpss 1067 /home/thml_net_core /dev/vpss 1067 /home/thml_net_core /dev/venc 1067 /home/thml_net_core /dev/venc 1067 /home/thml_net_core /dev/venc 1067 /home/thml_net_core /home/sc_font.ttf 1067 /home/thml_net_core /dev/vi 1067 /home/thml_net_core /dev/rgn 1067 /home/thml_net_core socket:[405] 1067 /home/thml_net_core socket:[409] 1067 /home/thml_net_core socket:[450] 1067 /home/thml_net_core socket:[411] 1067 /home/thml_net_core socket:[413] 1067 /home/thml_net_core socket:[416] 1067 /home/thml_net_core socket:[419] 1067 /home/thml_net_core socket:[420] 1067 /home/thml_net_core socket:[421] 1067 /home/thml_net_core socket:[422] 1100 /usr/sbin/dropbear /dev/null 1100 /usr/sbin/dropbear /dev/null 1100 /usr/sbin/dropbear /dev/null 1100 /usr/sbin/dropbear pipe:[435] 1100 /usr/sbin/dropbear socket:[426] 1100 /usr/sbin/dropbear pipe:[435] 1100 /usr/sbin/dropbear /dev/ptmx 1101 /bin/busybox /dev/pts/0 1101 /bin/busybox /dev/pts/0 1101 /bin/busybox /dev/pts/0 1101 /bin/busybox /dev/tty解析
10-01
/home # lsof -p 1072 1 /bin/busybox /dev/console 1 /bin/busybox /dev/console 1 /bin/busybox /dev/console 620 /bin/busybox /dev/console 620 /bin/busybox /dev/console 620 /bin/busybox /dev/console 620 /bin/busybox /etc/init.d/rcS 634 /sbin/udevd /dev/null 634 /sbin/udevd /dev/null 634 /sbin/udevd /dev/null 634 /sbin/udevd socket:[163] 634 /sbin/udevd socket:[164] 634 /sbin/udevd anon_inode:inotify 634 /sbin/udevd anon_inode:[signalfd] 634 /sbin/udevd socket:[167] 634 /sbin/udevd socket:[168] 634 /sbin/udevd anon_inode:[eventpoll] 889 /usr/sbin/dropbear /dev/null 889 /usr/sbin/dropbear /dev/null 889 /usr/sbin/dropbear /dev/null 889 /usr/sbin/dropbear socket:[232] 1065 /bin/busybox /dev/console 1065 /bin/busybox /dev/console 1065 /bin/busybox /dev/console 1065 /bin/busybox /etc/init.d/app_run 1067 /home/thml_net_core /dev/console 1067 /home/thml_net_core /dev/console 1067 /home/thml_net_core /dev/console 1067 /home/thml_net_core socket:[455] 1067 /home/thml_net_core /dev/vpss 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/ttyAMA1 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/mmz_userdev 1067 /home/thml_net_core /dev/sys 1067 /home/thml_net_core /dev/vb 1067 /home/thml_net_core /dev/mmz_userdev 1067 /home/thml_net_core /dev/ive 1067 /home/thml_net_core /dev/isp_dev 1067 /home/thml_net_core /dev/piris 1067 /home/thml_net_core /dev/vi 1067 /home/thml_net_core /dev/watchdog 1067 /home/thml_net_core /dev/vi 1067 /home/thml_net_core /dev/vi 1067 /home/thml_net_core /dev/vi 1067 /home/thml_net_core /dev/isp_dev 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/vpss 1067 /home/thml_net_core /dev/vpss 1067 /home/thml_net_core /dev/venc 1067 /home/thml_net_core /dev/venc 1067 /home/thml_net_core /dev/venc 1067 /home/thml_net_core /home/sc_font.ttf 1067 /home/thml_net_core /dev/vi 1067 /home/thml_net_core /dev/rgn 1067 /home/thml_net_core socket:[405] 1067 /home/thml_net_core socket:[409] 1067 /home/thml_net_core socket:[450] 1067 /home/thml_net_core socket:[411] 1067 /home/thml_net_core socket:[413] 1067 /home/thml_net_core socket:[416] 1067 /home/thml_net_core socket:[419] 1067 /home/thml_net_core socket:[420] 1067 /home/thml_net_core socket:[421] 1067 /home/thml_net_core socket:[422] 1100 /usr/sbin/dropbear /dev/null 1100 /usr/sbin/dropbear /dev/null 1100 /usr/sbin/dropbear /dev/null 1100 /usr/sbin/dropbear pipe:[435] 1100 /usr/sbin/dropbear socket:[426] 1100 /usr/sbin/dropbear pipe:[435] 1100 /usr/sbin/dropbear /dev/ptmx 1101 /bin/busybox /dev/pts/0 1101 /bin/busybox /dev/pts/0 1101 /bin/busybox /dev/pts/0 1101 /bin/busybox /dev/tty
10-01
<think>嗯,用户想了解LinuxUnix中的/dev/tty文件。我得先回忆一下相关知识。根据之前的引用,比如引用[2]提到/dev/tty属于控制台终端,而引用[3]详细说明了tty0到tty6的区别。用户可能需要知道/dev/tty的基本定义、用途以及其他终端设备的区别。 首先,/dev/tty是一个字符设备文件,代表当前进程的控制终端。当程序打开这个文件时,实际上是在访问当前使用的终端。这可能包括物理终端、伪终端或者控制台。比如,在终端中运行命令时,/dev/tty就指向那个终端。需要解释它的作用,比如输入输出的重定向。 然后要区分不同的终端类型,比如控制台终端(/dev/ttyn)、伪终端(/dev/pts/*)以及串口终端(/dev/ttyS*)。根据引用[3],tty0是当前虚拟终端的别名,而tty1到tty6是虚拟终端。用户可能想知道/dev/tty这些设备的关系,以及实际应用中的例子,比如脚本中使用/dev/tty来确保与用户的交互。 还要注意引用[4]提到的/dev/console/dev/null,可能需要在比较中说明/dev/tty的不同。比如,/dev/tty作为当前终端,而/dev/console是系统控制台,通常是物理终端。 需要确保回答结构清晰,分点说明定义、作用、应用场景与其他设备的区别。可能还需要举例子,比如在shell脚本中使用echo重定向到/dev/tty,或者程序读写该设备的情况。同时,相关问题可以涉及如何查看当前tty、与其他终端设备的区别以及使用场景的举例。</think>### 关于Linux/Unix中`/dev/tty`的详细解释 #### 1. **定义与核心作用** `/dev/tty`是Linux/Unix系统中特殊的**字符设备文件**,其核心作用是**表示当前进程的控制终端**(Controlling Terminal)。无论进程运行在物理终端、伪终端还是虚拟终端,通过访问`/dev/tty`都可直接与当前终端交互[^2][^3]。 #### 2. **具体用途** - **输入输出重定向** 例如,在Shell脚本中强制输出到当前终端,即使标准输出被重定向: ```bash echo "紧急提示" > /dev/tty ``` - **终端身份验证** 某些程序(如`sudo`)通过检查`/dev/tty`确保操作来自真实用户终端。 - **交互式程序开发** 需要直接读取用户键盘输入或向屏幕输出的程序可直接操作`/dev/tty`。 #### 3. **与其他终端设备的区别** | 设备类型 | 示例路径 | 典型场景 | |------------------|----------------|----------------------------| | 物理控制台终端 | `/dev/tty1` | 主机直接连接的显示器+键盘 | | 伪终端(PTY) | `/dev/pts/0` | SSH远程连接、图形终端模拟器 | | 串口终端 | `/dev/ttyS0` | 通过串口连接的硬件设备 | | **当前控制终端** | **`/dev/tty`** | **动态指向当前活动终端** | #### 4. **实际应用示例** - **查看当前终端路径** ```bash $ tty /dev/pts/2 # 若在SSH会话中 /dev/tty1 # 若在本地虚拟控制台 ``` - **绕过管道直接交互** 即使使用`echo "test" | script.sh`,脚本中`cat /dev/tty`仍可读取用户后续输入。 #### 5. **技术特性** - **动态绑定**:始终指向当前进程的终端设备,无论其类型(物理/虚拟/伪终端) - **权限控制**:普通用户只能操作自己会话的`/dev/tty` - **设备号**:主设备号5,次设备号0(可通过`ls -l /dev/tty`查看)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值