输入重定向
< ,<< :从文件或键盘读取
不是所有的命令都有输入
不是所有的命令都有输出
其实可以使命令的输入来自于文件或者键盘输入
<:从文件中读取
<符号,用于指定命令的输入
cat < note.csv
我们可以看到cat < note.csv 的运行结果和cat note.csv 其实是一模一样的
虽然结果一样,但是其运行原理是不同的
cat note.csv运行原理:
cat命令接受的输入是note.csv这个文件名
那么久要先打开note.csv这个文件
然后打印出内容
cat < note.csv运行原理:
cat命令接受的输入直接是note.csv这个文件的内容
cat命令只负责将其内容打印
打开文件,并将文件内容传递给cat命令的工作则交给终端完成
这样对比一下就会发现,其结果一样,但是中间的过程是完全不同的
<<:从键盘读取
<<符号的作用是将键盘的输入重定向为某个命令的输入
例如,将数值排序
sort -n << END
输入之后,按下会出,终端就进入了键盘输入模式
可以看到这里光标在闪动
那我们就输入数值,按回车确定,最后END来结束输入,
END被称为结束字符串
在试一下wc命令与输入重定向符号的配合
wc -m << END
小结
<:将命令的输入重定向为文件内容
<<:将命令的输入重定向为键盘输入,以逐行输入的模式(回车键换行),所有输入的行都将在输入结束字符串后发送给命令
那么这里把输入重定向和输出重定向结合使用一下
将键盘输入的数字排序重定向到numbers_sort.txt合格文件中,并且标准流和标准错误流重定向到同一文件中
sort -n << END >numbers_sort.txt 2>&1
|: 管道
传说中的管道符,将会是你Linux生涯中最常用的符号
|符号既然被称为‘管道符’,其作用就是‘建立命令管道’
管道也算重定向流的一种
管道的原理
将两个命令连成管道
简单的说就是将一个命令的输出为另一个命令的输入
所以我们可以用管道符链接很多个命令,构成很长的命令管道,绝对使Linux命令威力倍增
Linux中的命令,每一个功能虽然有限
但是一旦‘铁索连环’,那可是会结合各个命令的功能
管道符的实践
按学生名字排序
cut -d , -f 1 note.csv | sort
根据目录大小排序
du命令,深入遍历当前目录下的每个子目录,并对其大小都做一个统计
先用cd命令回到家目录
sudo du
可以看到du命令的缺点,1是显示结果多,遍历起来花费时间,2是没有排序,杂乱无章
但是如果我们这样做就会清爽很多了
du | sort -nr | head
在这里我们用du命令对子目录进行统计,用sort命令进行排序,用sort的-r参数倒许,-n参数对数字排序,head命令显示前10行
列出包含log关键字的文件
听起来很蒙,一步步来
sudo grep log -Ir /var/log
用于遍历/var/log 这个目录及其子目录
列出所有包含log关键字的行
-I参数用于排除二进制文件
-r参数用于递归遍历
cut -d : -f 1
剪切出文件名那一列(由冒号分隔的第一个区域)
sort
将文件名列以首字母的字典顺序排列
uniq
去掉重复的文件名
最后用管道符重定向流
sudo grep -Ir /var/log |cut -d : -f 1 | sort | uniq > contain_log_list.txt
小结
管道符的基本作用比较简单
就是将一个命令的输出重定向为另一个命令的输入
总结
<符号重定向命令输入为文件内容
<<符号重定向命令的输入为键盘输入
管道符号|可以将命令链接起来
好像一个个对接的管道一样
前一个命令的输出作为后一个命令的输入