命令和文件自动补齐
[root@hadoop04 ~]# yum -y install bash-completion
命令历史记忆功能
1.上下键
查看历史命令
2.!number
执行history中第number个记录
3.!string
执行history最近的一个以某个字符串开头的命令
4.!$
上一条命令的最后一个参数
5.!!
上一条命令(完整的一条命令)
6.^R
搜索历史命令
别名功能
1.alias
查看当前shell中的别名
2.unalias
取消当前shell中的别名
(1)在命令前面加上\可以跳过别名,比如 alias cp='cp -i',\cp 就是执行真正的'cp',而不会执行别名'cp -i'
(2)定义永久生效的别名,需要在用户家目录下的.bashrc文件中( ~username/.bashrc)
快捷键
Ctrl + 具体某个字母键
1.^R
搜索历史命令
2.^D
相当于 exit/logout,退出Shell
3.^A
光标移到到首部
4.^E
光标移到到尾部
5.^L
相当于clear,清屏
6.^U
剪切光标之前的所有
7.^K
剪切光标以及光标之后的所有
8.^Y
在光标处粘贴(由^U、^K剪切的命令可以通过这个方式粘贴)
9.^S
锁屏
10.^Q
解锁
前后台作业控制
1.&
后台运行,但是终端退出就结束了
2.nohup
后台运行,即使终端退出依旧不会结束
3.^C
结束前台进程
4.^Z
将前台进程切换到后台,并且暂停运行
[root@hadoop04 ~]# sleep 800
^Z
[1]+ Stopped sleep 800
5.bg %1
将一个在后台暂停的命令,变成继续执行
[root@hadoop04 ~]# fg %1
sleep 800
^Z
[1]+ Stopped sleep 800
[root@hadoop04 ~]# bg %1
[1]+ sleep 800 &
6.fg %1
将后台运行的编号为1的job切换到前台继续运行
7.kill %3
向当前终端中job号为3的进程发送信号
如果是 kill 3,意味着向当前终端中pid为3的进程发送信号
8.screen(推荐)
# 创建会话,名称为test_screen,如果不命名的话,就直接使用screen;之后在screen会话中操作
[root@hadoop04 ~]# screen -S test_screen
# 查看当前有哪些screen会话
[root@hadoop04 ~]# screen -list
There are screens on:
4585.test_Screen2 (Attached)
4553.test_screen (Detached)
2 Sockets in /var/run/screen/S-root.
# 进入到某一个screen会话
[root@hadoop04 ~]# screen -r 4553
# 在具体screen会话中结束screen会话
[root@hadoop04 ~]# exit
exit
[screen is terminating]
输入输出重定向
1. 0 标准输入(键盘)
2. 1 标注输出(屏幕)
3. 2 错误输出 (屏幕)
4. > 输出重定向(覆盖)
5. >> 输出重定向(追加)
6. 2> 错误输出重定向
7. 2>>错误输出重定向
8. 2>&1 错误输出重定向到标准输出
9. &> 混合输出
10. cat < /etc/hosts 将/etc/hosts输入给cat,标准输出到屏幕
11. cat < /etc/hosts > /etc/hosts1 将/etc/hosts输入给cat,再重定向输出到/etc/hosts1,相当于cp命令
12. cat < 111
> 222
> 333
> EOF
111
222
333
13. cat >file1 < test.txt
> 111
> 222
> 333
> EOF
[root@hadoop04 ~]# cat test.txt
111
222
333
管道 | tee
| 前一个命令的输出,作为后一个命令的输出
tee 从标准输入中复制到每一个文件,并输出到标准输出
ip addr |grep 'inet ' |grep eth0
# 将ip addr的输出作为grep的输入,grep 在输入中匹配出存在'inet '的行
[root@hadoop04 ~]# ip addr |grep 'inet '
inet 127.0.0.1/8 scope host lo
inet 172.22.34.20/24 brd 172.22.34.255 scope global noprefixroute eth0
# 将ip addr的输出作为grep的输入,grep 在输入中匹配出存在'inet '的行,再次作为输入给后一个grep 去匹配
[root@hadoop04 ~]# ip addr |grep 'inet ' |grep eth0
inet 172.22.34.20/24 brd 172.22.34.255 scope global noprefixroute eth0
ip addr |grep 'inet ' |tee test.txt |grep eth0 (覆盖test.txt的内容)
ip addr |grep 'inet ' |tee -a test.txt |grep eth0 (-a 追加到test.txt)
# 将ip addr的输出作为grep的输入,grep 在输入中匹配出存在'inet '的行
[root@hadoop04 ~]# ip addr |grep 'inet '
inet 127.0.0.1/8 scope host lo
inet 172.22.34.20/24 brd 172.22.34.255 scope global noprefixroute eth0
# 将ip addr的输出作为grep的输入,grep 在输入中匹配出存在'inet '的行,再次作为输入传给tee,tee将内容保存到test.txt中,并且标准输出到屏幕
[root@hadoop04 ~]# ip addr |grep 'inet '| tee test.txt
inet 127.0.0.1/8 scope host lo
inet 172.22.34.20/24 brd 172.22.34.255 scope global noprefixroute eth0
[root@hadoop04 ~]# cat test.txt
inet 127.0.0.1/8 scope host lo
inet 172.22.34.20/24 brd 172.22.34.255 scope global noprefixroute eth0
[root@hadoop04 ~]# date &> date.txt
[root@hadoop04 ~]# date| tee date.txt
Sat Dec 7 16:15:47 CST 2019
[root@hadoop04 ~]# cat date.txt
Sat Dec 7 16:15:47 CST 2019
命令排序
1.;
不具备逻辑判断
# 即使;前面的命令执行失败,;后面的命令依旧会执行,所以;不具备逻辑判断的功能
[root@hadoop04 ~]# cd /home/444444;ls
-bash: cd: /home/444444: No such file or directory
anaconda-ks.cfg date.txt test.txt
2. && ||
具备逻辑判断
# && 前面的命令执行失败,&& 后面的命令不会执行;反之,&& 前面的命令执行成功,&& 后面的命令才会执行
[root@hadoop04 ~]# cd /home/444444 && ls
-bash: cd: /home/444444: No such file or directory
[root@hadoop04 ~]# cd /home/sysadmin && ls
test.txt
# || 前面的命令执行失败,|| 后面的命令才会执行;反之,|| 前面的命令执行成功,|| 后面的命令就不会执行
[root@hadoop04 ~]# cd /home/444444 || ls
-bash: cd: /home/444444: No such file or directory
anaconda-ks.cfg date.txt test.txt
[root@hadoop04 ~]# cd /home/sysadmin || ls
[root@hadoop04 sysadmin]#
注意
:
command & 后台执行
command &>/dev/null 混合重定向(标准输出 1,错误输出 2)
command1 && command2 命令排序,逻辑判断
shell 通配符
shell 通配符(元字符),表示的不是本意
* 星号
*匹配任意多个字符
ls in*
rm -rf *
rm -rf *.pdf
find / -iname "*-eth0"
? 问号
? 匹配任意一个字符
touch love loove live l7ve;
ll l?ve
[] 中括号
[] 匹配括号中任意一个字符
[abc] [a-z] [0-9] [a-zA-Z0-9]
ll l[io]ve
ll l[^a-z]ve
ll /dev/sd[a-z]
() 小括号
() 在子 shell 中执行
(cd /boot;ls)
(umask 077; touch file1000)
在子shell(subshell)中执行命令
(命令)
在子shell中执行脚本
./xxxx/xxxx/xxxx.sh
bash /xxxx/xxxx/xxxx.sh
在当前shell中执行脚本
source /xxxx/xxxx/xxxx.sh
. /xxxx/xxxx/xxxx.sh(脚本与.之间有空格)
{} 大括号
{} 集合
touch file{1..9}
mkdir /home/{111,222}
mkdir -pv /home/{333/{aaa,bbb},444}
# cp -rv /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.old
# cp -rv /etc/sysconfig/network-scripts/{ifcfg-eth0,ifcfg-eth0.old}
# cp -rv /etc/sysconfig/network-scripts/ifcfg-eth0{,.old}
在子shell(subshell)中执行命令
(命令)
在子shell中执行脚本
/xxxx/xxxx/xxxx.sh
bash /xxxx/xxxx/xxxx.sh
在当前shell中执行脚本
source /xxxx/xxxx/xxxx.sh
. /xxxx/xxxx/xxxx.sh
\转义符
\转义符,让元字符回归本意
# echo *
# echo \*
# touch yang\ sheng
[root@hadoop04 ~]# echo \\
\
[root@hadoop04 ~]# echo -e "atb"
atb
[root@hadoop04 ~]# echo -e "a\tb"
a b
[root@hadoop04 ~]# echo -e "anb"
anb
[root@hadoop04 ~]# echo -e "a\nb"
a
b