题目
bash 中的重定向[1]的意义是什么?管道的意义是什么?用重定向和管道完成以下功能:(1) 将文件 1.txt 和 2.txt 的内容合并为一个文件 3.txt(2) 如果 Linux 系统中的可登录用户都使用 bash,计算系统中可以登录的用户的数目。(提示:用 wc -l 计算文件行数)(3) 执行脚本./back.bash,并将标准输出和标准错误都重定向到文件 back.log。
bash 中的重定向[1]的意义是什么?管道的意义是什么?用重定向和管道完成以下功能:
(1) 将文件 1.txt 和 2.txt 的内容合并为一个文件 3.txt
(2) 如果 Linux 系统中的可登录用户都使用 bash,计算系统中可以登录的用户的数目。(提示:用 wc -l 计算文件行数)
(3) 执行脚本./back.bash,并将标准输出和标准错误都重定向到文件 back.log。
题目解答
答案
1. 将1.txt和2.txt合并为3.txt,可使用:
```bash
cat 1.txt 2.txt > 3.txt
```
2. 统计可登录用户数(`/bin/bash`):
```bash
grep "/bin/bash" /etc/passwd | wc -l
```
3. 将`./back.bash`的输出和错误重定向到`back.log`:
```bash
./back.bash &> back.log
```
或
```bash
./back.bash > back.log 2>&1
```
以上方法均满足题目要求,分别利用了重定向和管道的基本功能。
解析
本题主要考察对bash中重定向和管道的理解与运用。重定向是指将命令的输入、输出或错误输出从默认的设备(如键盘、显示器)更改为指定的文件或设备;管道则是将一个命令的输出作为另一个命令的输入,实现命令之间的数据传递和处理。
(1) 将文件 1.txt 和 2.txt 的内容合并为一个文件 3.txt
- 解题思路:使用
cat命令可以连接文件并打印到标准输出,通过重定向符号>将cat命令的输出结果写入到文件3.txt中。 - 解析:
cat命令用于连接文件并打印到标准输出,cat 1.txt 2.txt会将1.txt和2.txt的内容依次输出。重定向符号>会将前面命令的输出结果覆盖写入到指定的文件中,所以cat 1.txt 2.txt > 3.txt就会把1.txt和2.txt的内容合并后写入到3.txt文件中。
(2) 如果 Linux 系统中的可登录用户都使用 bash,计算系统中可以登录的用户的数目
- 解题思路:首先使用
grep命令从/etc/passwd文件中筛选出使用/bin/bash作为登录shell的用户信息,然后使用管道符号|将grep命令的输出作为wc -l命令的输入,wc -l命令用于统计文件的行数,从而得到可登录用户的数目。 - 解析:
/etc/passwd文件存储了系统中用户的基本信息,每行代表一个用户。grep "/bin/bash" /etc/passwd会在/etc/passwd文件中查找包含/bin/bash的行,即使用/bin/bash作为登录shell的用户信息。管道符号|将grep命令的输出传递给wc -l命令,wc -l命令会统计输入的行数,也就是可登录用户的数目。
(3) 执行脚本./back.bash,并将标准输出和标准错误都重定向到文件 back.log
- 解题思路:可以使用
&>符号将标准输出和标准错误同时重定向到指定文件,也可以先将标准输出重定向到文件,再将标准错误重定向到标准输出的位置。 - 解析:
- 方法一:
&>是一个复合重定向符号,它可以将标准输出(文件描述符1)和标准错误(文件描述符2)同时重定向到指定的文件,所以./back.bash &> back.log会将./back.bash脚本执行时的标准输出和标准错误都写入到back.log文件中。 - 方法二:
./back.bash > back.log将标准输出重定向到back.log文件,2>&1表示将标准错误(文件描述符2)重定向到标准输出(文件描述符1)当前所指向的位置,也就是back.log文件,所以./back.bash > back.log 2>&1也能实现将标准输出和标准错误都重定向到back.log文件的功能。
- 方法一: