Linux里rc、etc、bin、tty、dev等讲解

Unix已经有35年历史了。许多人认为它开始于中世纪,这个中世纪是相对于计算机技术的产生和发展来说的。在过去的时间里,Unix和它的子分支Linux收集有许多的历史和一些完全古老的语言。在这篇技巧文章中,我们将介绍一少部分古老的语言和它们的目的和作用,以及它们真正的来源。

RC

在Linux中,最为常用的缩略语也许是“rc”,它是“runcomm”的缩写――即名词“run command”(运行命令)的简写。今天,“rc”是任何脚本类文件的后缀,这些脚本通常在程序的启动阶段被调用,通常是Linux系统启动时。如 /etc/rs是Linux启动的主脚本,而.bashrc是当Linux的bash shell启动后所运行的脚本。.bashrc的前缀“.”是一个命名标准,它被设计用来在用户文件中隐藏那些用户指定的特殊文件;“ls”命令默认情况下不会列出此类文件,“rm”默认情况下也不会删除它们。许多程序在启动时,都需要“rc”后缀的初始文件或配置文件,这对于Unix的文件系统视图来说,没有什么神秘的。

ETC

在“etc/bin”中的“etc”真正代表的是“etcetera”(附加物)。在早期的Unix系统中,最为重要的目录是“bin”目录 (“bin”是“binaries”二进制文件――编译后的程序的缩写),“etc”中则包含琐碎的程序,如启动、关机和管理。运行一个Linux必须的东西的列表是:一个二进制程序,etcetera,etcetera――换句话说,是一个底层的重要项目,通常添加一些次等重要的零碎事物。今天, “etc”包含了广泛的系统配置文件,这些配置文件几乎包含了系统配置的方方面面,同样非常重要。

Bin

今天,许多在Linux上运行的大型子系统,如GNOME或Oracle,所编译成的程序使用它们自己的“bin”目录(或者是 /usr/bin,或者是/usr/local/bin)作为标准的存放地。同样,现在也能够在这些目录看到脚本文件,因为“bin”目录通常添加到用户的PATH路径中,这样他们才能够正常的使用程序。因此运行脚本通常在bin中运行良好。

TTY

在Linux中,TTY也许是跟终端有关系的最为混乱的术语。TTY是TeleTYpe的一个老缩写。Teletypes,或者 teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,和古老的电报机区别并不是很大。之后,当计算机只能以批处理方式运行时(当时穿孔卡片阅读器是唯一一种使程序载入运行的方式),电传打字机成为唯一能够被使用的“实时”输入/输出设备。最终,电传打字机被键盘和显示器终端所取代,但在终端或 TTY接插的地方,操作系统仍然需要一个程序来监视串行端口。一个getty“Get TTY”的处理过程是:一个程序监视物理的TTY/终端接口。对一个虚拟网络沮丧服务器(VNC)来说,一个伪装的TTY(Pseudo-TTY,即家猫的TTY,也叫做“PTY”)是等价的终端。当你运行一个xterm(终端仿真程序)或GNOME终端程序时,PTY对虚拟的用户或者如xterm一样的伪终端来说,就像是一个TTY在运行。“Pseudo”的意思是“duplicating in a fake way”(用伪造的方法复制),它相比“virtual”或“emulated”更能真实的说明问题。而在现在的计算中,它却处于被放弃的阶段。

Dev

从TTY留下的命令有“stty”,是“set tty”(设置TTY)的缩写,它能够生成一个配置文件/etc/initab(“initialization table”,初始表),以配置gettys使用哪一个串口。在现代,直接附加在Linux窗口上的唯一终端通常是控制台,由于它是特殊的TTY,因此被命名为“console”。当然,一旦你启动X11,“console”TTY就会消失,再也不能使用串口协议。所有的TTY都被储存在“/dev”目录,它是“[physical] devices”([物理]设备)的缩写。以前,你必须在电脑后面的串口中接入一个新的终端时,手工修改和配置每一个设备文件。现在,Linux(和 Unix)在安装过程中就在此目录中创建了它所能向导的每一个设备的文件。这就是说,你很少需要自己创建它。

随着硬件在电脑中的移出移进,这些名字将变得更加模糊不清。幸运的是,今天在Linux上的高等级软件块对历史和硬件使用容易理解的名字。举例来说,嗯,Pango(http://www.pango.org/)就是其中之一。

转载地址:http://bbs.youkuaiyun.com/topics/80392542

<think>根据引用[^2],/etc/rc.local是一个定义开机自定义任务的配置文件。用户的需求是在Linux系统中将rc.local中运行的程序的printf输出重定向到串口打印。以下是一个清晰的解决方案:###步骤说明1.**识别串口设备文件**在Linux中,串口设备通常位于/dev目录下,常见名为ttyS0(COM1)、ttyUSB0(USB转串口)等。使用命令确认串口设备:```bashls/dev/tty*```2.**修改串口权限(可选)**若权限不足,可添加用户组或修改设备权限:```bashsudochmod666/dev/ttyS0#临时生效#或永久添加用户到dialout组sudousermod-aGdialout$USER```3.**编辑/etc/rc.local文件**使用sudo权限编辑文件,在`exit0`之前添加需要运行的命令,并通过重定向将输出发送到串口:```bashsudonano/etc/rc.local```添加如下内容(以程序`my_program`输出重定向到/dev/ttyS0为例):```bash#将stdout和stderr都重定向到串口/path/to/my_program>/dev/ttyS02>&1&```**注意**:-`>/dev/ttyS0`表示将标准输出重定向到串口。-`2>&1`表示将标准错误也重定向到标准输出(即串口)。-`&`表示后台运行,避免阻塞启动流程。4.**确保串口配置正确**需确认串口的波特率等参数与接收端一致。可使用`stty`预先配置:```bashstty-F/dev/ttyS0115200raw-echo```若需在rc.local中配置,可添加:```bashstty-F/dev/ttyS0115200raw-echo/path/to/my_program>/dev/ttyS02>&1&```5.**启用rc.local服务(部分系统需额外步骤)**某些Linux发行版(如Ubuntu18.04+)默认禁用rc.local,需手动启用:```bashsudosystemctlenablerc-local.service```###验证方法1.重启系统后,观察串口输出。2.若未生效,检查系统日志定位问题:```bashjournalctl-urc-local.service-b```###替代方案:修改程序本身若程序源码可修改,可直接修改输出流(需包含`<unistd.h>`):```cintmain(){close(STDOUT_FILENO);//关闭原标准输出open("/dev/ttyS0",O_WRONLY);//将标准输出重定向到串口printf("HelloSerial!\n");return0;}```§§相关问题§§1.Linux中如何查看当前激活的串口设备?2.除rc.local外,Linux还有哪些开机任务配置方法?3.如何配置串口的硬件参数(波特率、校验位等)?</think> ### Linux rc.local 中 printf 输出重定向到串口配置方法 在 Linux 系统中,将 `/etc/rc.local` 中运行程序的 printf 输出重定向到串口,需要结合以下步骤实现: --- #### 1. **确认串口设备文件** - 确定目标串口的设备文件(如 `/dev/ttyS0`、`/dev/ttyUSB0` 等) - 使用命令确认可用串口: ```bash dmesg | grep tty ``` #### 2. **修改串口权限** 确保 `rc.local` 运行时有权访问串口设备: ```bash sudo chmod 666 /dev/ttyS0 # 开放串口读写权限 ``` 或通过 udev 规则永久修改(推荐): ```bash sudo sh -c 'echo "SUBSYSTEM==\"tty\", GROUP=\"users\", MODE=\"0666\"" >> /etc/udev/rules.d/99-serial.rules' sudo udevadm control --reload-rules ``` #### 3. **修改 `/etc/rc.local` 文件** 在 `exit 0` 前添加重定向逻辑: ```bash sudo nano /etc/rc.local ``` 添加内容: ```bash # 设置串口参数(可选) stty -F /dev/ttyS0 115200 raw -echo -echoe # 重定向输出到串口 exec 1>/dev/ttyS0 2>&1 # 运行您的程序(以下为示例) /usr/local/bin/my_app & ``` #### 4. **启用 rc-local 服务(系统需要时)** ```bash sudo systemctl enable rc-local.service ``` #### 5. **验证配置** - 重启后使用其他串口终端查看输出 - 检查服务状态: ```bash sudo systemctl status rc-local.service ``` #### 替代方案:修改程序源码 在引用[^1]的基础上,可在程序中添加自定义输出重定向: ```c #include <unistd.h> #include <fcntl.h> int main() { // 打开串口设备 int fd = open("/dev/ttyS0", O_WRONLY); // 将标准输出重定向到串口 dup2(fd, STDOUT_FILENO); dup2(fd, STDERR_FILENO); printf("此消息将输出到串口\n"); return 0; } ``` #### 关键注意事项: 1. **串口参数匹配**:确保程序波特率(如 115200)与接收端一致 2. **开机顺序**:串口驱动需在 `rc.local` 执行前加载 3. **后台进程**:在 `rc.local` 中启动的程序需添加 `&` 转为后台进程 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值