管道与重定向
1、重定向
> ---覆盖
>> ---追加
标准输入
标准正确:1 标准错误:2
3+,进程在执行过程中打开的其他文件。
&:表示正确错误混合输出
标准正确重定向:ls / /hello 1> a.txt #1可以省略不写
标准错误重定向:ls / /hello 2> b.txt
标准正确和标准错误一起重定向进入hunhe.txt
ls / /hello &> hunhe.txt
2、 ; 、&&、||用法:
; :( 命令分割,没有实际意义)
&&:(上一条执行失败,下一条不执行)
||:(上一条命令执行成功,下一条命令不执行,上一条命令执行失败,下一条命令执行。)
echo a ; echo b # ; 两个命令互不影响
echo a && echo b #前面的错误了会影响后面的。echo a执行成功之后则会执echo b,否则不会执行echo b。
echo a || echo b #上一个命令执行成功,则不会向下执行,若上一条命令执行失败,则会向下执行
黑洞文件:/dev/null #重定向到 >/dev/null
ping -W1 -c4 www.baidu.com >/dev/null #ping4次以后自动停
通过返回值来看命令是否执行成功:
echo $?
#返回值为0则执行成功。
1>&2 #正确当错误用
2>&1 #错误的当正确的用
nginx -V 2>&1 | grep "version"
把错误的当正确的使用:
判断能否ping通公网:
ping -W1 -c4 www.baidu.com &>/dev/null
if [ $? -eq 0 ];then
echo "通" >>up.txt
date &>>up.txt
else
echo "不通"
fi
3、输入重定向:
cat > file.txt <<EOF
> 锄禾日当午,
> 汗滴禾下土。
> 谁知盘中餐,
> 粒粒皆辛苦。
> EOF
4、管道:
用法:command1 | command2 | command3 |....
ip a | grep inet | grep ens33 #过滤显示ip地址。
rpm -qa | grep 'htppd' #查询所有安装的软件包,过滤包含htpd的包
ps -aux | grep 'sshd'
打印同时追加到文件。
rpm -qa | tee rpm.txt #打印同时覆盖到prmtxt中
rpm -qa | tee -a rpm.txt #打印同时追加到prmtxt中
排序:
sort --help #说明书
用法:
sort -t":" -k3 /etc/passwd #第三列按" : "排序
sort -t":" -k3 -n /etc/passwd #第三列从小到大排序
sort -t":" -k3 -n -r /etc/passwd #第三列从大到小排序
sort -t":" -k3 -n /etc/passwd | head -n 3
sort -t":" -k3 -n /etc/passwd | tail -n 3
awk、cut
netstat -lntp | awk 'NR==3 {print $4}' | awk -F':' '{print $2}'
25
过滤端口:awk
netstat -lntp | awk 'NR==3{print $4}' #过滤出第三行第四列
netstat -lntp | awk 'NR==3{print $4}' | awk -F':' '{print $2}' #以" : "为分隔符,打印第二列
过滤ip地址:
ip a | grep ens33 | awk 'NR==2' | awk -F" " '{print $2}'
ifconfig | grep netmask | awk 'NR==1' | awk '{print $2}'
ifconfig | grep netmask | awk 'NR==1' | cut -d" " -f10
tr和cut
ip a | grep ens33 | awk 'NR==2{print $2}' | tr -d "/24" #删除“ /24 ”
ip a | grep ens33 | awk 'NR==2{print $2}' | cut -d"/" -f1 #以/为分隔符切割,选取第一个
变量切割:
echo ${ip%/*} #切割 / 后所有的内容
echo ${ip#*/} #切割 / 前面的所有内容
5、参数传递:
对:ls cp rm 管道不能执行。所以通过xargs传递参数。
用法:
语法:
cat a.txt | xargs -i cp {} /目录
{}:前面传过来的内容
-i :为了让大括号生效
目录时 -r
解释:前面传过来的东西交给大括号
cat file.txt |xargs ls -l
前面是目录或者目录的路径。 ls - l 后面可以不加大括号,直接执行。
[root@qfedu.com ~]# touch /home/file{1..5}
[root@qfedu.com ~]# vim files.txt
/home/file1
/home/file2
/home/file3
/home/file4
/home/file5
[root@qfedu.com ~]# cat files.txt |ls -l #不加xargs传参,看输出结果
[root@qfedu.com ~]# cat files.txt |rm -rvf #不加xargs传参,看输出结果
参数传递:
cat files.txt | xargs ls -l
cat files.txt | xargs rm -rvf
查看目录大小:
du
[root@cat2404 practice]# du -sh /etc/ # -h 人性化显示
31M /etc/
du -sh /* #查看根下所有的的目录所占的大小
查看目录的大小:du
du -h --max-depth=1 /etc/ #查看/etc/下子目录的大小
du -d 1 -h /etc/ | grep passwd
统计行数、单词数、字符。:wc
wc -l #统计有多少行
ls /etc/ | wc -l
cat /etc/passwd | wc -w #统计有多少个单词
wc -c 统计字节数
wc -m #查看有多少字符(空格也算)
#一个中文3字节