02.Shell命令组合运用

1.顺序分隔

命令1;命令2;命令3

e.g.开启某个服务,并将此服务设为开机自启动
$ service vsftpd restart; chkconfig vsftpd on

2.&&分隔

命令1 && 命令2 && 命令3

逻辑与,期望所有的命令都能执行成功,一旦出现失败,后续命令不再执行
$ echo “you” && echo “me”
源代码编译安装软件包时,编译、安装过程
$ make && make install

3.||分隔

命令1 || 命令2 || 命令3

逻辑或,任何一条命令成功都符合期望;
只在前面的命令失败时,后续命令才会执行
$ echo “you” || echo “me”
针对前置命令失败的情况,设置补充任务
$ id mind || useradd mind //若无此用户,则创建此用户

4.组合逻辑分隔

命令1 && 命令2 || 命令3
当命令1执行成功时,会继续执行命令2(忽略命令3)
当命令1执行失败时,会继续执行命令3(放弃命令2)

$ id love &>/dev/null && echo YES ||echo NO
//判断用户是否存在

5.管道的作用:

将命令的屏幕输出交给另一端的命令处理
命令1 | 命令2 | 命令3
后续命令要能正确处理传来的文本,否则无意义

1)分屏浏览所有的网络设备信息
ifconfig -a | less
命令1:使用ifconfig列出所有的连接信息
命令2:将列出的信息交给less命令进行分页查看

2)计算/etc下包括多少个普通文件
命令1:使用find在/etc目录下递归查找,列出所有普通文件
命令2:将查找结果交给wc统计行数
find /etc -type f | wc -l
3)统计当前主机处于监听状态的TCP端口数
命令1:使用netstat命令列出所有的TCP连接信息
命令2:将查找结果交给grep过滤,计算状态为LISTEN的连接数
netstat -anpt | grep -c "LISTEN"

6.标准输入输出

Unix/Linux的基本思想:一切皆文件
普通文件、目录、键盘、鼠标......都是以文件形式存在
要访问硬件设备,必须找到对应的设备文件

I/O交互设备
标准输入:从此设备接收用户输入的数据
标准输出:通过此设备向用户报告正常的命令输出结果
标准错误:通过此设备报告执行中的出错信息

类型设备文件描述符默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误/dev/stderr2显示器

命令执行成功(正常),其屏幕信息报告给stdout设备
命令执行失败(异常),其屏幕信息报告给stderr设备

$ ls -ld /rootx /root
ls: 无法访问'/rootx': 没有那个文件或目录				//标准错误(stderr)信息
drwx------ 11 root root 4096 3月   8 23:17 /root	//标准输出(stdout)信息

7.重定向

1)概念
重新指定命令执行时I/O设备的方向
不使用默认的键盘、显示器,改用指定的文本文件

2)重定向的类型
根据I/O方向和类别区分

类型操作符用途
重定向输入<将文本输入来源由键盘改为指定的文件
重定向输出>file将命令行的正常执行输出保存到文件,而不是直接显示在屏幕上
重定向错误2>file将命令行的执行出错信息保存到文件,而不是直接显示在屏幕上
混合重定向&>file 或 >file 2>&1相当于>和2>合并的操作结果,覆盖到同一个文件

【注1】>> 与>类似,但操作是追加而不是覆盖
【注2】2>> 与2>类似,但操作是追加而不是覆盖,同理&>>与&>类似
3)使用案例

a.重定向输入
键盘输入 --> 文件输入
使用mail命令发电子邮件
# vim /root/mail.txt        //提前写好邮件内容
# mail -s 'A Test Mail' root@localhost < /root/mail.txt
// 读取邮件发送内容

b.重定向输出
输出到显示器 --> 输出到文件
需要保存某个命令输出的结果(修改Linux客户端下用户的DNS配置文件)
echo 'search example.com' > /etc/resolv.conf  //覆盖目标文件
echo 'nameserver 8.8.8.8' >> /etc/resolv.conf  //追加到目标文件

c.重定向错误
输出到显示器 --> 输出到文件
需要记录某个命令的报错信息时
# ls -ld /rootx /root 2> /root/err.log  //只记录出错信息

d.混合重定向
将正常、错误输出分别/合并重定向
需要区分命令输出,或合并输出的信息时
# ls -ld /rootx /root >/root/ls.log 2>/root/err.log //分别记入不同文件
# ls -ld /rootx /root &>/dev/null   (等同于 >/dev/null 2>&1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值