linux 7day管道 与重定向 参数传递xargs文件字符查询wc、awk打印某行 某个字符

标准输入、标准正确输出、标准错误输出

命令状态

#查看防火墙
systemctl status firewalld
#查看 systemctl status firewalld  这个命令 执行状态
echo $?
这里可以返回的状态有 0  1  2  3
&的意思是所有数据 也就是混合数据
  • 0,标准输入(键盘)
  • 1,标准输出
  • 2,标准错误,
  • 3+,执行的命令返回了退出状态3,表示执行失败。
    需要进一步查看具体的命令和上下文,以确定为什么命令执行失败(可能服务区没有启动)
  • &:表示正确错误混合输出

管道重定向命令

"> ----覆盖
">> ----追加
正确输出: 1> 1>> 等价于 > >>
错误输出: 2> 2>>
; #多个命令卸载一行
&& #前边这个命令执行成功 才会执行后边的命令
|| #前边执行成功 后边就不执行 上一条失败,执行下条
1> #标准正确输出
2> #标准错误数据
2>&1 #把错误的放到正确的管道里(作用就是把错误的写道正确的文件中)
1>&2 #把正确的放到错误的管道里(把正确的给到错误的文件中)(系统会吧某些服务 判断为错误的 所以需要使用)

# > 会把 文件中的原有内容 覆盖成新内容
echo '{新内容}'  >  文件 
echo 'new content' > file.txt

# >> 会把新内容追加到文件中   原有内容不会被删除,在最后添加新的内容
echo '{新内容}'  >  文件 
echo 'new content' >> file.txt

# ;可以把多个命令 写在一行 一起执行
{命令1};{命令2};{命令3}
echo 1 ; echo 2 ; echo 3

# && 第一条命令执行成功之后 ,才会执行第二条命令
echo "命令1" && echo "命令2"  #第一个执行成功                  |
echo1 "命令1" && echo "命令2"  #第一个执行失败 则不会执行 命令二 |

# || 前边执行成功  后边就不执行  上一条失败,执行下条
echo "命令1" || echo "命令2"  #第一个执行成功                  |
echo1 "命令1" || echo "命令2"  #第一个执行失败 则不会执行 命令二 |

# 1> 标准正确输出 (1> 1>> 等价于 > >>)
echo '{新内容}'  1>  文件 

# 2> 标准错误数据  会导出所有错误的返回数据
echo1 2> file.txt ; echo '错误命令echo1 2>执行结果写在file.txt 中 内容是'; cat file.txt

# 2>&1   	 #把错误的放到正确的管道里(错误的当成正确的)
nginx -V 1> 1.txt  2> 2.txt  #使用这个命令可以看到 返回的值 是2 
								#但是nginx -V 是可以返回正确数据的 所以 就需要用到 2>&1
把错误放到正确管道里
nginx -V 2>&1 |  grep "version"   
# 1>&2	 	#把正确的放到错误的管道里(正确的当成错误的)

会从最后一个命令开始返回

ls / /hello 1>a.txt &>b.txt 2>c.txt

从后边往前边匹配
错误的 都匹配到 c.txt
所以 b.txt 里边就没有错误内容

标准输入: < 等价 0<

主要为了实现,多行内容 写入一个文件中。

[root@qfedu.com ~]# cat >file4 <<EOF
> 111
> 222
> 333
> 444
> EOF
[root@qfedu.com ~]# cat file4 
111
222
333
444
----------------
 cat >file4    
 	这里可以看成是  需要写入到这个文件  但是不是直接写入 而是 使用命令的时候才使用
	然后使用 EDF
 	<<EOF   这个可以看成是 结束字符  只要写入这个字符即表示 命令使用结束  开始打印

管道符 |

[root@qfedu.com ~]$ ps aux | grep 'sshd'

把前边返回的内容 传输给后边执行 进行过滤

保存&继续(tee)

[root@localhost opt]# ls / | tee >1 | grep  s
ree 可以保存打印内容到一个文件 同时把内容传递给管道后边的内容

sort 排序

[root@qfedu.com ~]$ sort -t":" -k3 -n /etc/passwd  #以: 分隔,将第三列按字数升序
[root@qfedu.com ~]$ sort -t":" -k3 -n -r /etc/passwd  #以: 分隔,将第三列按字数降序
[root@qfedu.com ~]$ sort -t":" -k3 -n /etc/passwd |head  #以: 分隔,将第三列按字数升序看前十行
[root@qfedu.com ~]$ sort -t":" -k3 -n /etc/passwd |tail  #以: 分隔,将第三列按字数升序看后十行
参数详解:
sort 排序,默认升序
-t 指定分隔符
-k 指定列
-n 按数值
-r 降序
head 默认输出前十行
tail 默认输出后十行

awk 分割

[root@qfedu.com ~]$ netstat -lntp | awk 'NR==3 {print $4}' | awk -F':' '{print $2}'
25

awk 默认以空格为分隔符
awk -F 可以指定分隔符号
awk 'NR==3 {print $4}'  表示打印 第三段 第四个字符穿 以空格为分隔符


提取ip 字符提取(awk)(cut)

ip a | grep inet | awk 'NR==3 {print $2}'| cut -d/ -f1 
cut -d/ -f1  /用来分割字符串的  -d 是指定分隔符  -f 是指定打印 第几列

ip a | grep inet | awk 'NR==3 {print $2}'| awk -F'/' '{print $1}'
awk 默认以空格为分隔符
awk -F 可以指定分隔符号

参数传递:xargs

 语法:
 cat a.txt | xargs  -i cp {} /目录  
 {}:前面传过来的内容
 -i :为了让大括号生效 -i 是给大括号 站位的  大括号   
 目录时  -r
 解释:前面传过来的东西交给大括号
 
 cat file.txt |xargs ls -l          
 前面是目录或者目录的路径。  ls - l  后面可以不加大括号,直接执行。
 
 
 xargs  -i cp {}   #xargs -i 相当于是把 文本力的内容  一条一条的 传给 大括号

目录中文件大小(du)

[root@qfedu.com ~]$ du -h /etc/   #查看目录及目录中的文件大小
[root@qfedu.com ~]$ du -sh /etc/  #查看目录的总大小

字符串分隔符 (wc)

[root@qfedu.com ~]$ ls /etc/ | wc -l #查看目录中有多少个文件
[root@qfedu.com ~]$ cat a.txt | wc -w  #显示单词的个数  空格为分割单位
[root@qfedu.com ~]$ cat a.txt | wc -c  #查看有多少个字符
[root@qfedu.com ~]$ cat a.txt | wc -m  #有多少个 字符串

案例脚本

[root@qfedu.com ~]# vim ping1.sh
#!/bin/bash
ping -c1 10.18.40.100
if [ $? -eq 0 ];then
  echo "10.18.40.100 is up."
else
  echo "10.18.40.100 is down!" 
fi
[root@qfedu.com ~]# chmod +x ping1.sh 
[root@qfedu.com ~]# ./ping1.sh #执行文件(执行脚本)
PING 10.18.40.100 (10.18.40.100) 56(84) bytes of data.

--- 10.18.40.100 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

10.18.40.100 is down!


ping -c 2 baidu.com  #ping两次,如果成功了就会停止。
ping -w1 -c 2 baidu.com  #ping一秒 ,如果成功了就会停止。

tee -a  #追加  打印一份 复制一份
------------------------------------------------------------------
#案例二
[root@qfedu.com ~]# vim ping1.sh
#!/bin/bash
ping -c1 10.18.40.100 &>/dev/null
if [ $? -eq 0 ];then
  echo "10.18.40.100 is up." >>up.txt
else
  echo "10.18.40.100 is down!"
fi
[root@qfedu.com ~]# ./ping1.sh
-------------------------------------------------------------------
#案例三
$1 表示 脚本在命令行 给脚本里的输入值

ping -W1 -c2 $1 &>/dev/null
if [ $ -eq 0 ];then
	echo "$1链接成功" | tee -a up.txt
else
	echo "$1链接失败" | tee down.txt
fi
echo "程序结束"
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白嫖一茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值