文章目录
1.重定向
文件描述符:进程在运行的过程中根据需要会打开多个文件,每打开一个文件会有一个数字标识。这个标识叫文件描述符。
进程使用文件描述符来管理打开的文件。
常用文件描述符:
0:标准输入(键盘)
1:标准正确输出
2:标准错误输出
3+:进程在执行过程中打开的其他文件
&:表示正确错误混合输出
2.输出重定向
输出重定向符号:> , >>
>:表示覆盖内容;
>>:表示追加内容;
1>, 1>>:表示正确输出,1可以省略
2>,2>>:表示错误输出
“ ; ” 是命令分隔符,表示命令间没有逻辑关系
&&:表示上一条命令执行成功执行下一条指令,失败则不执行
||:与&含义相反
查看命令返回值:echo $?
案例:
输出重定向(覆盖):
date 1> date.txt #正确输出--覆盖
# 注意:如果 > 前面什么都不加默认为1,标准正确输出。
输出重定向(追加):
date >> date.txt #正确输出--追加
错误输出重定向:(查看不存在的文件)
ls /home/ /aaaaaaaaa >list.txt 2>error.txt #将输出的错误信息重定向到 error.txt 文件中,可以使用cat命令验证该文件中是否有返回的错误信息。
混合重定向:正确和错误都输入到相同的位置
ls /home/ /aaaaaaaaa &>list.txt #混合输出到相同文件
重定向到空设备:/dev/null
ls /home/ /aaaaaaaaa >list.txt 2>/dev/null #空设备,将错误的输出丢掉
ls /home/ /aaaaaaaaa &>/dev/null #空设备,将正确与错误的输出丢掉
echo会将输入的内容送往标准输出(打印)
echo 内容 >> 文件名或脚本里面
将正确的输出当成错误的输出使用,将错误的输出当成正确的输出使用 :
例如:nginx -V 2>&1| grep "version"
1>&2:将正确的放到错误的管道里
2>&1:将错误的放到正确的管道里
脚本中使用重定向:
一:没有使用重定向
[root@localhost home]# vim ping1.sh
编辑输入内容:
#!/bin/bash
ping -c1 10.35.154.251
if [ $? -eq 0 ];then
echo "10.35.154.251 is up."
else
echo "10.35.154.251 is down."
fi[root@localhost home]# chmod +x ping1.sh #更改ping1.sh的执行权限
[root@localhost home]# ./ping1.sh #执行脚本文件返回内容:
PING 10.35.154.251 (10.35.154.251) 56(84) bytes of data.
64 bytes from 10.35.154.251: icmp_seq=1 ttl=128 time=2.20 ms--- 10.35.154.251 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 2.203/2.203/2.203/0.000 ms
10.35.154.251 is up.
二:使用重定向
[root@localhost home]# vim ping1.sh
编辑内容:
#!/bin/bash
ping -c1 10.35.154.251 &>/dev/null #将ping的内容重定向到空设备
if [ $? -eq 0 ];then
echo "10.35.154.251 is up."
else
echo "10.35.154.251 is down."
fi[root@localhost home]# ./ping1.sh
10.35.154.251 is up.
3.输入重定向
标准输入: < 等价于 0<
3.1通过输入重定向创建文件:
cat > file <<EOF:是用来创建文件或者在脚本中使用,并向文件中输入信息输入的任何东西会被写入文件中,EOF命令结束。
语法:cat > file5 <<EOF #可以写到脚本或者文件里面
EOF:开始和结束的标记,要成对使用,结尾的另一个EOF必须顶格写。
案例1:
[root@localhost home]# cat >file4 <<EOF
> 111
> 222
> 333
> 444
> 555
> EOF[root@localhost home]# cat file4
111
222
333
444
555
案例2:
利用重定向建立多行的文件 脚本创建多行文件
[root@localhost home]# vim create_file.sh
#!/bin/bash
cat >file200.txt <<EOF
111
222
333
yyy
ccc
EOF
[root@localhost home]# chmod +x create_file.sh
[root@localhost home]# ./create_file.sh
[root@localhost home]# cat file200.txt
111
222
333
yyy
ccc
4.管道
用法:command1 | command2 |command3 |...
案例:
查询所有安装的软件包(使用rpm命令查询软件包),过滤包含httpd的包:
[root@localhost opt]# rpm -qa |grep 'httpd'
4.1 常用小命令
tee:将文本同时输出到屏幕和命令中指定的文件中
例如:echo "hello" | tee hello.txt #将hello打印到屏幕上,同时在当前目录下生成hello.txt文件,该文件中也包含“hello”
sort:排序
例如:
sort -t: -k3 -n /ec/passwd #将/etc/passwd文件中,以分隔符为‘ : ’的第三列内容按照升序排列
sort -t: -k3 -nr /ec/passwd #将/etc/passwd文件中,以分隔符为‘ : ’的第三列内容按照降序排列
' -t: ' :表示分隔符是' : ',-k3:表示以分隔符:分开的第三行,-n:表示升序,-nr:表示降序
-t 指定分隔符
-k 指定列
-n 按数值
-r 降序
head 默认输出前十行
tail 默认输出后十行
awk:处理文本的命令,单位是行
案例:
netstat -nplt | awk 'NR==4' #查找端口,显示第四行内容
netstat -nplt | awk 'NR==4' {print $4} #查找端口,显示第四行以空格为分隔符的第四个内容
netstat -nplt | awk 'NR==4 {print $4}' | awk -F ":" '{print $2}' #显示该命令第四行以空格为分隔符的第四个内容中,以“ : ”为分隔符的第二个内容。
netstat -nplt | awk 'NR==4 {print $4}' | cut -d: -f2 #同上一条命令,显示该命令第四行以空格为分隔符的第四个内容中,以“ : ”为分隔符的第二个内容
cut:表示切割
-d:指定分隔符
-f:指定列数
-f3-:第3列以后的所有列
du -h /etc/ #查看 /etc 及目录中的文件大小
du -sh /etc/ #查看目录的总大小
du -h --max -deptn=1 /etc #只显示/etc目录下的一层
ls /etc/ | wc -l #查看目录中有多少个文件
ls /etc/ | wc -w #查看目录中有多少个单词(单词以空格隔开)
5.参数传递:xargs
语法:
cat a.txt | xargs -i cp {} /目录
{}:前面传过来的内容
-i :为了让大括号生效
复制目录时加 -r
解释:将前面传过来的东西交给大括号
案例:
[root@localhost ~]# touch /home/file{1..5}
[root@localhost ~]# vim files.txt/home/file1
/home/file2
/home/file3
/home/file4
/home/file5
[root@localhost ~]# cat files.txt |ls -l[root@localhost ~]# cat files.txt |rm -rvf #不加xargs传参,看输出结果
使用xargs传参:
[root@localhost ~]# touch /home/file{1..5}
[root@localhost ~]# cat files.txt | xargs -i cp -rvf {} /tmp/
"/home/file1" -> "/tmp/file1"
"/home/file2" -> "/tmp/file2"
"/home/file3" -> "/tmp/file3"
"/home/file4" -> "/tmp/file4"
"/home/file5" -> "/tmp/file5"
总结
本篇内容介绍了管道、重定向、参数传递和常用的小命令
标签:输出,重定向,管道,home,txt,root,localhost From: https://blog.csdn.net/weixin_64502313/article/details/140645438