Shell基础——重导向(Redirections)

本文介绍了Shell中重定向的基础知识,包括文件描述符的概念,如何查看进程打开的文件,以及通过/proc/[pid]/fd目录来观察进程的输入输出。通过实例展示了如何使用重定向操作标准输入、输出和错误,并揭示了pipe在进程间通信中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在学习重导向之前,请先了解什么是文件描述符
查看一个进程打开了哪些文件,可以通过/proc/[pid]/fd目录查看。其中,pid是这个进程的进程号。
例如:我在终端tty2执行命令

$ less /var/log/dpkg.log 

然后在终端tty1执行命令

$ ps -e | grep less
  107 tty2     00:00:00 less
$ ls -al /proc/107/fd
total 0
dr-x------ 2 felix felix 0 Jul  5 14:20 .
dr-xr-xr-x 7 felix felix 0 Jul  5 14:20 ..
lrwx------ 1 felix felix 0 Jul  5 14:20 0 -> /dev/tty2
lrwx------ 1 felix felix 0 Jul  5 14:20 1 -> /dev/tty2
lrwx------ 1 felix felix 0 Jul  5 14:20 2 -> /dev/tty2
lr-x------ 1 felix felix 0 Jul  5 14:20 3 -> /dev/tty
lr-x------ 1 felix felix 0 Jul  5 14:20 4 -> /var/log/dpkg.log

less进程的pid为107,打开了三个文件。其中标准输入(file descriptor 0)、标准输出(file descriptor 1)和标准错误(file descriptor 3)都是终端tty2,在file descriptor 3打开的是另一个终端tty,在file descriptor 打开的是文件/var/log/dpkg.log.

再举一个例子,我在终端tty2执行命令

$ cat /var/log/dpkg.log|less

然后在终端tty1执行命令

$ ps -e
  PID TTY          TIME CMD
    1 ?        00:00:00 init
   72 tty2     00:00:00 init
   73 tty2     00:00:00 bash
  115 tty1     00:00:00 init
  116 tty1     00:00:00 bash
  165 tty2     00:00:00 cat
  166 tty2     00:00:00 less
  168 tty1     00:00:00 ps
$ ls -al /proc/165/fd
total 0
dr-x------ 2 felix felix 0 Jul  5 14:40 .
dr-xr-xr-x 7 felix felix 0 Jul  5 14:40 ..
lrwx------ 1 felix felix 0 Jul  5 14:40 0 -> /dev/tty2
l-wx------ 1 felix felix 0 Jul  5 14:40 1 -> 'pipe:[178]'
lrwx------ 1 felix felix 0 Jul  5 14:40 2 -> /dev/tty2
lr-x------ 1 felix felix 0 Jul  5 14:40 3 -> /var/log/dpkg.log
$ ls -al /proc/166/fd
total 0
dr-x------ 2 felix felix 0 Jul  5 14:40 .
dr-xr-xr-x 7 felix felix 0 Jul  5 14:40 ..
lr-x------ 1 felix felix 0 Jul  5 14:40 0 -> 'pipe:[178]'
lrwx------ 1 felix felix 0 Jul  5 14:40 1 -> /dev/tty2
lrwx------ 1 felix felix 0 Jul  5 14:40 2 -> /dev/tty2
lr-x------ 1 felix felix 0 Jul  5 14:40 3 -> /dev/tty

我们可以看到,cat进程在file descriptor 3上打开了文件/var/log/dpkg.log,cat进程的标准输出和less进程的标准输入通过pipe:[178]连接。

<未完待续>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值