Linux命令——4.重定向、管道

文章目录

一、重定向

在 Linux 中,重定向是将命令的输入或输出重定向到文件或其他命令的操作。重定向通常用于处理命令行程序的标准输入(stdin)、标准输出(stdout)和标准错误(stderr)流。

1)重定向符号

  1. >:输出重定向,将标准输出写入文件。文件不存在时会创建文件,存在时会覆盖文件。
  2. >>:追加输出重定向,将标准输出追加到文件的末尾。文件不存在时会创建文件。
  3. <:输入重定向,从文件读取标准输入。
  4. 2>:标准错误重定向,将标准错误输出写入文件。
  5. 2>>:追加标准错误重定向,将标准错误输出追加到文件的末尾。
  6. &> 或 >&:将标准输出和标准错误一起重定向到同一个文件(覆盖)。
  7. &>>:将标准输出和标准错误一起追加到同一个文件。

2)重定向分类

重定向是指将命令的输入或输出从默认位置(通常是终端)重定向到其他位置(如文件或设备)。重定向分为输入重定向和输出重定向两种。以下是详细解释:

(1)输出重定向

输出重定向用于将命令的输出重定向到文件或其他设备,而不是显示在终端上。

命令 描述
command > file 将标准输出重定向到文件,覆盖文件内容
command >> file 将标准输出追加到文件末尾
command 2> file 将标准错误重定向到文件,覆盖文件内容
command 2>> file 将标准错误追加到文件末尾
command > file 2>&1 将标准输出和标准错误一起重定向到文件,覆盖文件内容
command >> file 2>&1 将标准输出和标准错误一起追加到文件末尾
复制代码
> 覆盖模式的重定向
[ac@linuxac django]$ ls -lh > ll.txt
[ac@linuxac django]$ ls
ll.txt  test.txt
[ac@linuxac django]$ cat ll.txt 
总用量 4.0K
-rw-rw-r--. 1 ac ac  0 6月  19 21:29 ll.txt
-rwxrw-r--. 1 ac ac 95 6月  19 21:22 test.txt

>> 追加模式的重定向
[ac@linuxac django]$ ls -lh >> ll.txt
(2)输入重定向

输入重定向用于将命令的输入从文件或其他设备读取,而不是从终端读取。

命令 描述
command < file 从文件读取输入
command1 < infile > outfile 从 infile 读取输入,并将输出写入 outfile

3)Here Document

Here Document 是一种特殊的重定向方式,用于将多行输入传递给命令。

bash 复制代码
command << delimiter
document
delimiter
bash 复制代码
cat << EOF
Hello, World!
EOF

4)/dev/null

/dev/null 是一个特殊的设备文件,代表一个空的黑洞,任何写入其中的内容都会被丢弃。常用于丢弃输出或错误信息,可以用来屏蔽命令的输出。

bash 复制代码
command > /dev/null 2>&1

这行命令将 command 的所有输出(包括错误)都丢弃。

以下是关于 Linux 重定向的完整整理,包括标准输出、标准错误、标准输入以及管道的使用示例:

6)重定向使用

(1)标准输出
  1. 将标准输出重定向到文件:

    bash 复制代码
    ls > file.txt

    这个命令会将 ls 命令的输出写入 file.txt 文件。若文件存在,将覆盖其内容。

  2. 追加标准输出到文件:

    bash 复制代码
    echo "Another line" >> output.txt

    这个命令会将 "Another line" 追加到 output.txt 文件的末尾,不会覆盖已有内容。

(2)标准错误
  1. 将标准错误重定向到文件:

    bash 复制代码
    ls non_existing_file 2> error.log

    这个命令会将尝试列出不存在文件时的错误信息写入 error.log 文件。

  2. 追加标准错误到文件:

    bash 复制代码
    ls non_existing_file 2>> error.log

    这个命令会将错误信息追加到 error.log 文件的末尾。

(3)标准输出和错误
  1. 将标准输出和标准错误一起重定向到文件:

    bash 复制代码
    ls > output.log 2>&1

    这个命令将 ls 命令的标准输出和标准错误一起写入 output.log 文件。

  2. 使用&>符号同时重定向:

    bash 复制代码
    command &> output.log

    这个命令等同于上一个,将标准输出和标准错误一起写入 output.log 文件。

(4)标准输入
  1. 将文件作为命令的输入 :

    bash 复制代码
    wc -l < input.txt

    这个命令将 input.txt 的内容作为 wc -l 命令的输入,用于统计文件的行数。

(5)特殊用法
  1. 将标准输出或错误重定向到空设备:

    bash 复制代码
    command > /dev/null 2>&1

    这个命令会将 command 的所有输出和错误信息丢弃。

  2. 创建一个空文件或清空文件:

    bash 复制代码
    > file.txt

    这个命令会清空 file.txt 文件的内容,如果文件不存在,则会创建一个空文件。

这些重定向操作是 Linux 系统管理和脚本编写中的基本工具,能够灵活地控制命令的输入输出。

二、| 管道

使用管道将一个命令的输出作为另一个命令的输入:

bash 复制代码
ls -l | grep "txt"

这个命令会列出当前目录下所有文件,然后过滤出包含 "txt" 的行。

管道需要两个指令 , 第二个指令需要第一个指令的结果来进行操作

复制代码
[ac@linuxac etc]$ ll -a | more
more 指令是给前面的ll -a 指令的结果进行分屏显示结果

[ac@linuxac etc]$ ll -a | grep "xml"
drwxr-xr-x.   2 root root       21 6月  15 21:01 xml

[ac@linuxac etc]$ ll -a | grep "r" | more

[ac@linuxac etc]$ ll -a | grep "r" | wc
    289    2631   17409
相关推荐
律宏阔6 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔6 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴6 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千6 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei376 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei376 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei376 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
GeW6 小时前
制造业高端化,为什么必须重估Linux和数据库?
linux
GeW6 小时前
工业场景中的Linux与数据库选型:高端化转型的技术底座
linux
yunwei376 小时前
eBPF 开发者教程: 简单的 XDP 负载均衡器
linux·后端·性能优化