参考链接:https://blog.csdn.net/zhongqi2513/article/details/78613768
参考链接:https://blog.csdn.net/a1439458305/article/details/79586567
标准输入0 从键盘获得输入 /proc/self/fd/0
标准输出1 输出到屏幕(即控制台) /proc/self/fd/1
错误输出2 输出到屏幕(即控制台) /proc/self/fd/2
/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”
1、2>/dev/null 只打印标准信息。
意思就是把错误输出到“黑洞”。
2、>/dev/null 2>&1 不打印任何输出信息 。
等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞” 。
3、2>&1 >/dev/null 只打印错误输出。
意思就是把错误输出2重定向到标准输出1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕 。
关于这里”>&”的&作用是区别是标准输出还是普通文件。
2>1将错误输出重定向当前位置的1文件 ;2>&1将错误输出重定向标准输出。
关于这里”>&”的>作用是可以理解改变重定下指向地址,可以理解指针地址改变符。
2>&1 >/dev/null 可以理解2指针指向了1的指针位置即标准输出,1指向了黑洞的指针位置;故错误信息会输出到屏幕,标准输出不显示。
echo “aaaa” >1 打印内容重定向文件1。每一次对文件1内容完全覆盖。
echo “aaaa” >>1 打印内容追加到文件1。每一次在文件1内容尾部添加。
ls -lv natural sort of (version) numbers within text 对文本内的数字(版本)按自然(从小到大)进行排序
ls -lt sort by modification time 按文件修改时间由新到旧进行排序
找到某个目录下的最新或最大版本目录或文件。
ls -lt /dir |head -n 2 | grep root 最新
ls -lv /dir |tail -n 1 最大版本
less\more different
less\more filename
1、操作
more不可以回去,就是不可以向前,只能向后,况且只能使用Enter和Space向后翻动。
less使用vim中的j,k键盘可以上下翻动、前后翻页,还可以使用上下箭头。
2、速度
less不必读整个文件,加载速度会比more更快。
3、内容
less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容。
命令执行顺序控制
通常情况下,我们在终端只能执行一条命令,然后按下回车执行,那么如何执行多条命令呢?
顺序执行多条命令:command1;command2;command3;
简单的顺序指令可以通过 ;来实现
有条件的执行多条命令:which command1 && command2 || command3
&& : 如果前一条命令执行成功则执行下一条命令,如果command1执行成功(返回0),则执行command2
|| :与&&命令相反,执行不成功时执行这个命令
$?: 存储上一次命令的返回结果
栗子:
$ which git>/dev/null && git --help // 如果存在git命令,执行git --help命令
$ echo $?
管道命令
管道是一种通信机制,通常用于进程间的通信(也可通过socket进行网络通信),它表现出来的形式将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。
管道命令使用|作为界定符号,管道命令与上面说的连续执行命令不一样。
管道命令仅能处理standard output,对于standard error output会予以忽略。
less,more,head,tail…都是可以接受standard input的命令,所以他们是管道命令
ls,cp,mv并不会接受standard input的命令,所以他们就不是管道命令了。
管道命令必须要能够接受来自前一个命令的数据成为standard input继续处理才行。
第一个管道命令
$ ls -al /etc | less
通过管道将ls -al的输出作为 下一个命令less的输入,方便浏览。