管道符与重定向

所谓理解就是用自己通俗易懂的话去解释专业知识

题目1:文件列表与筛选

查看/root目录,保证这个目录下包含了一些文件和文件夹。如果没有则随意创建几个文件和目录

问题:

  1. 请使用 ls -l 命令列出当前目录下的所有文件和文件夹的详细信息,并将输出结果保存到一个名为 file_list.txt 的文件中。写出你使用的完整命令。

  2. 在上一步中,你已经将文件列表保存到了 file_list.txt 文件中。现在,请使用管道符 | 结合 grep 命令,从 file_list.txt 文件中筛选出包含 “rw-r–r–” (表示普通文件权限) 的行,并将筛选结果显示在终端上。写出你使用的完整命令。

  3. 继续使用 file_list.txt 文件。请使用管道符 | 结合 grep 命令,筛选出包含 “drwxr-xr-x” (表示目录权限) 的行,并将这些筛选结果追加到之前创建的 file_list.txt 文件的末尾。写出你使用的完整命令。

  4. 现在,file_list.txt 文件中应该包含了所有文件和文件夹的详细信息,并且在末尾追加了目录的信息。请使用管道符 | 结合 grep 命令,从 file_list.txt 文件中筛选出包含 “test” 关键字的行,并将结果保存到一个名为 test_items.txt 的新文件中。写出你使用的完整命令。

答案示例:

以下是参考答案,重点是要理解管道符的用法,尽量用自己的话去总结和解释:

  1. ls -l > file_list.txt
  2. cat file_list.txt | grep "rw-r--r--"
  3. cat file_list.txt | grep "drwxr-xr-x" >> file_list.txt
  4. cat file_list.txt | grep "test" > test_items.txt

解释:

  • > (大于号): 输出重定向符,将命令的输出结果覆盖写入到指定文件中。如果文件不存在则创建,如果存在则覆盖原有内容。
  • >> (双大于号): 追加重定向符,将命令的输出结果追加写入到指定文件的末尾。如果文件不存在则创建。
  • | (竖线): 管道符,将前一个命令的输出作为后一个命令的输入。

题目2:处理命令输出

在/root目录下创建名为test的目录,在test目录下创建一个名为 script.sh 的脚本文件,将下面的脚本内容复制,用vi编辑,粘贴。创建这个文件后要用chmod +x script.sh命令给它执行权限,然后运行这个脚本文件,它会创建一个名为 success.txt 的文件,并在创建过程中可能会遇到一些错误。(意思是运行这个脚本文件,它会有标准输出,也会有错误输出。)

script.sh 脚本内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

# 尝试创建一个文件
touch success.txt

# 模拟一个可能出错的情况
if [ -e success.txt ]; then
echo "文件 success.txt 创建成功。"
else
echo "创建 success.txt 文件失败。" >&2 # 将错误信息输出到标准错误
fi

# 尝试删除一个可能不存在的文件
rm non_existent_file.txt

问题:

  1. 请执行 script.sh 脚本,并将脚本的标准输出重定向到一个名为 output.log 的文件中,同时将脚本的标准错误输出重定向到一个名为 error.log 的文件中。写出你使用的完整命令。

  2. 假设在执行完上述命令后,error.log 文件中包含了一些错误信息。请使用管道符 | 结合 grep 命令,从 error.log 文件中筛选出包含 “No such file or directory” 的错误信息,并将筛选结果显示在终端上。写出你使用的完整命令。

  3. 假设你希望将 script.sh 脚本的标准输出追加到一个名为 combined.log 的文件中,并且将标准错误输出也追加到同一个 combined.log 文件中。写出你使用的完整命令。

答案示例:

以下是参考答案,重点是要理解重定向和管道符的用法,尽量用自己的话去总结和解释:

  1. ./script.sh > output.log 2> error.log
  2. cat error.log | grep "No such file or directory"
  3. ./script.sh >> combined.log 2>&1或者./script.sh &>> combined.log

解释:

  • >: 标准输出重定向到文件。
  • 2>: 标准错误输出重定向到文件。
  • >>: 标准输出追加重定向到文件。
  • &>>: 标准输出和标准错误输出都重定向到文件。
  • 2>&1: 将标准错误输出(文件描述符 2)重定向到与标准输出(文件描述符 1)相同的位置(即 combined.log 文件)。
[up主专用,视频内嵌代码贴在这]