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/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误 | /dev/stderr | 2 | 显示器 |
命令执行成功(正常),其屏幕信息报告给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)