1、IO重定向命令
每一个文件都有一个fd,文件描述符
exec 8<>/data/hosts
给文件hosts赋予指定的文件描述符8
cat /proc/$$/fd/8 等价于 cat /data/hosts
ll /proc/$$/fd
可查询文件描述符
文件描述符0,表示标准输入(默认键盘)
文件描述符1,表示标准输出(默认终端窗口)
文件描述符2,表示标准错误(默认终端窗口)
ls > /dev/pts/5 等于 ls 1> /dev/pts/5 ,1表示标准输出,可省略
标准输出重定向到了5号远程终端
ls 1> 文件路径 , 标准输出重定向覆盖到制定文件
ls 2> 文件路径 , 标准错误重定向覆盖到制定文件
ls 0>
ls 1>> 文件路径 , 标准输出重定向追加到制定文件
ls 2>> 文件路径 , 标准错误重定向追加到制定文件
ls 0>>
ls /error /data >f1 2>f2
以上例子:分类重定向 。正确错误分别记录到f1,f2
ls /error /data >all.log 2>&1 (两个重定向顺序不能换)
或 ls /error /data &>all.log
或 (ls /error /data 2>&1 ) >all.log 括号表示先执行括号内的重定向,再执行外部的
以上例子:把错误输出重定向到正确输出,正确输出重定向到all.log
ls /error /data 2>&1 2>all.log
以上的重定向,错误输出会先被重定向到文件里,正确输出在屏幕窗口输出
以上题目,哪个选项的答案与其他不同?
set -c
禁止覆盖
>| 文件
强行覆盖
set +c
允许覆盖
(ls ;pwd) > all.log
以上命令可以将ls,pwd命令的输出重定向到同一个文件all.log里
ll /dev/null
重定向到以上null文件,会吸收输出信息,不会留下文本记录
>> f1
利用重定向,以上方式可更安全地创建f1文件,如果f1文件已存在,则不会覆盖f1文件造成破坏。不会破坏创建时间
cat < /etc/hosts
标准输入重定向,将 /etc/hosts 里的文本内容作为输入内容执行命令cat
cat < f1 > f2
以上命令表示:先将f1文件内容输入到cat,cat的标准输出写入到f2文件里
cat < f1 > f1
将会破坏f1文件
cat < f1 >> f1
将会死循环地追加复制f1内容到f1里
cat >f1
cat命令在没有参数时,会等待用户键盘输入内容,输入内容并回车后,内容的标准输出会重定向到f1
多行重定向方法:
cat > f1 <<EOF
EOF是由用户自己设定的结束符,可以设定为其他字符
mail -s 'hello' tiny
以上命令,给用户tiny发送邮件,邮件标题是hello,回车之后输入邮件正文,最后以 . 号回车结束
用户tiny输入mail回车,查看邮件
mail -s 'hello' tiny <<EOF
重定向创建邮件,用EOF结束
**邮件里输入的内容可以嵌入命令
ls | tee ls.log
管道后加tee命令,同时实现重定向与标准输出
ls | tee -a ls.log
管道后加tee命令,追加内容到ls.log同时实现标准输出
2、tr命令
tr 'a-z' 'A-Z'
等待用户标准输入,输入的内容会根据'a-z' 'A-Z'约束,小写翻译(或替换)成大写
tr 'abc' '1234'
当被替换的字符数少于替换字符数,abc替换成123,其他字符不会被替换成4
tr 'abcd' '123'
当被替换的字符数多于替换字符数,abcd会被替换成1233
tr -t 'abcd' '123'
当被替换的字符数多于替换字符数,abcd会被替换成123d,多出的被替换字符不会被替换
tr -d 'abc'
删除输入内容的a、b、c三个字符(不论并排或隔开)
tr -dc 'abc'
删除输入内容的a、b、c三个字符的补集(不论并排或隔开)
tr -s 'abc'
压缩输入内容里a、b、c三个字符的出现连续的字符到1个字符,如aaaa、bbbb、ccc,变成a、b、c
以上方法,tr命令替换windows格式文本到linux格式文本
3、管道命令
cmd | cmd | cmd
管道的应用,每一个cmd需要有标准输出,不能有错误输出
以上写法把错误输出传递给标准输出,确保管道输出一定是标准输出,2>&1也可以写成 |& ,部分旧版本linux不支持这种写法
df输出,管道,tr进行压缩替换,再标准输出
**1加到100,用管道的方法计算出来
echo {1..100} | tr ' ' '+' | bc
seq -s + 100 | bc