lishaokang 2018-10-12
10月12日任务
8.1 shell介绍
8.2 命令历史
8.3 命令补全和别名
8.4 通配符
8.5 输入输出重定向
8.1 shell介绍
shell是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具。实际上,在shell和计算机硬件之间还有一层东西——系统内核。如果把计算机硬件比作一个人的躯体,那系统内核就是人的大脑。至shell,把它比作人的五官似乎更贴切些。言归正传,用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作
shell是一个命令解释器,提供用户和机器之间的交互
支持特定语法,比如逻辑判断、循环
每个用户都可以有自己特定的shell
CentOS7默认shell为bash(Bourne Agin Shell)
还有zsh、ksh等
8.2 命令历史
~/.bash_history命令历史记录文件,需要正常退出系统才会记录的
[root@worker1 ~]# cat ~/.bash_history | tail -20
ls
tar -zcvf dir123.tar.gz 123/
ls
tar -xcvf dir123.tar.gz
tar -zxvf dir123.tar.gz
ls
tar -jcvf dir.tar.bz2 dir123
ls
tar -jxvf dir.tar.bz2
ls
clear
ls
tar -Jcvf dir123.tar.xz dir123/
ls
tar -Jxvf dir123.tar.xz dir123/
ls
tar -tf dir123.tar.gz
tar -tf dir.tar.bz2
tar -tf dir123.tar.xz
init 0
变量HISTSIZE是设置记录历史命令的数量(默认是1000)
[root@worker1 ~]# echo $HISTSIZE
1000
当前内存的历史命令
[root@worker1 ~]# history | tail -20
975 yum install -y gcc
976 ./configure --prefix=/usr/local/apache2.2
977 echo $?
978 make
979 echo $?
980 make install
981 ls /usr/local/apache2.2/
982 ls
983 ls /usr/local/apache2.2/
984 clear
985 cd
986 ls ~/.bash_history
987 cat ~/.bash_history | wc -l | head
988 cat ~/.bash_history | head -20
989 cat ~/.bash_history | tail -20
990 echo #HISTSIZE
991 echo $HISTSIZE
992 history
993 history | head -20
994 history | tail -20
清除内存历史命令
[root@worker1 ~]# history -c
[root@worker1 ~]# history
1 history
/etc/profile中可以修改存的命令历史数量
[root@worker1 ~]# vim /etc/profile
MAIL="/var/spool/mail/$USER"
fi
# Path manipulation
if [ "$EUID" = "0" ]; then
pathmunge /usr/sbin
pathmunge /usr/local/sbin
else
pathmunge /usr/local/sbin after
pathmunge /usr/sbin after
fi
HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
export HISTCONTROL=ignoreboth
else
export HISTCONTROL=ignoredups
fi
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
其中HISTSIZE=1000就是修改记录历史命令数量
设置记录历史命令附加上时间
永久生效:
/etc/profile配置文件添加上HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
需要退出终端,重新登陆即可生效
[root@worker1 ~]# history | tail -20
952 2018/10/10 01:37:55 tar -Jcvf dir123.tar.xz dir123/
953 2018/10/10 01:37:55 ls
954 2018/10/10 01:37:55 tar -Jxvf dir123.tar.xz dir123/
955 2018/10/10 01:37:55 ls
956 2018/10/10 01:37:55 tar -tf dir123.tar.gz
957 2018/10/10 01:37:55 tar -tf dir.tar.bz2
958 2018/10/10 01:37:55 tar -tf dir123.tar.xz
959 2018/10/10 01:37:55 init 0
960 2018/10/10 01:37:55 history
961 2018/10/10 01:37:55 vim /etc/profile
962 2018/10/10 01:37:55 ls
963 2018/10/10 01:37:55 history
964 2018/10/10 01:37:55 logout
965 2018/10/10 01:37:59 history
966 2018/10/10 01:38:11 history | tail -20
967 2018/10/10 01:38:35 vim /etc/profile
968 2018/10/10 01:38:46 source $!
969 2018/10/10 01:38:56 source /etc/profile
970 2018/10/10 01:38:59 history
971 2018/10/10 01:39:26 history | tail -20
临时生效:
[root@worker1 ~]# HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
[root@worker1 ~]# history | tail -20
980 2018/10/10 01:40:10 957 2018/10/10 01:37:55 tar -tf dir.tar.bz2
981 2018/10/10 01:40:10 958 2018/10/10 01:37:55 tar -tf dir123.tar.xz
982 2018/10/10 01:40:10 959 2018/10/10 01:37:55 init 0
983 2018/10/10 01:40:10 960 2018/10/10 01:37:55 history
984 2018/10/10 01:40:10 961 2018/10/10 01:37:55 vim /etc/profile
985 2018/10/10 01:40:10 962 2018/10/10 01:37:55 ls
986 2018/10/10 01:40:10 963 2018/10/10 01:37:55 history
987 2018/10/10 01:40:10 964 2018/10/10 01:37:55 logout
988 2018/10/10 01:40:10 965 2018/10/10 01:37:59 history
989 2018/10/10 01:40:10 966 2018/10/10 01:38:11 history | tail -20
990 2018/10/10 01:40:10 967 2018/10/10 01:38:35 vim /etc/profile
991 2018/10/10 01:40:10 968 2018/10/10 01:38:46 source $!
992 2018/10/10 01:40:10 969 2018/10/10 01:38:56 source /etc/profile
993 2018/10/10 01:40:10 970 2018/10/10 01:38:59 history
994 2018/10/10 01:40:10 971 2018/10/10 01:39:26 history | tail -20
995 2018/10/10 01:40:14 HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
996 2018/10/10 01:40:17 history
997 2018/10/10 01:41:00 971 2018/10/10 01:39:26 history | tail -20
998 2018/10/10 01:41:08 hist| tail -20
999 2018/10/10 01:41:12 history | tail -20
若想永久保存历史命令,设置追加特殊权限
[root@worker1 ~]# chattr +a ~/.bash_history
常见快捷命令操作
!! 最后一条命令
!n n代表数字,表示第几条命令
!word word表示以word开头的命令从后往前找并执行
8.3 命令补全和别名
tab键
敲一下:如果输入字符是唯一,可以立刻补全
敲两下:如果输入字符有相同的多个,列出具有相同字符的命令
参数补全
[root@worker1 ~]# yum install -y bash-completion //需要重启系统
alias别名给命令重新起个名字
[root@worker1 ~]# alias 'restartnet=systemctl restart network.service'
[root@worker1 ~]# restartnet
永久定义别名,设置配置文件即可
法1:
各用户都有自己配置别名的文件 ~/.bashrc
法2:
cd /etc/profile.d/
根据模板添加自定义的sh配置文件
取消别名
[root@worker1 ~]# unalias restartnet
[root@worker1 ~]# restartnet
-bash: restartnet: command not found
8.4 通配符
"*"表任意字符
[root@worker1 ~]# ls *.txt
1.txt 2.txt 3.txt test.txt
"?"表示任意一个字符
[root@worker1 ~]# ls ?.txt
1.txt 2.txt 3.txt
"[0-9]"表示0-9的数字范围
[root@worker1 ~]# ls [0-9].txt
1.txt 2.txt 3.txt
{1,2}表示1或2
[root@worker1 ~]# ls {1,2}.txt
1.txt 2.txt
8.5 输入输出重定向
">"重定向
[root@worker1 ~]# cat 1.txt
hello world
[root@worker1 ~]# cat 1.txt > 2.txt
[root@worker1 ~]# cat 2.txt
hello world
">>"追加重定向
[root@worker1 ~]# cat 2.txt
hello world
[root@worker1 ~]# cat 1.txt >> 2.txt
[root@worker1 ~]# cat 2.txt
hello world
hello world
"2>"错误重定向
[root@worker1 ~]# ls a.txt 2> err
[root@worker1 ~]# ls
1.txt 2.txt 3.txt anaconda-ks.cfg dir1 dir6 err test.txt
[root@worker1 ~]# cat err
ls: cannot access a.txt: No such file or directory
"2>>"错误追加重定向
[root@worker1 ~]# ls a.txt 2>> err
[root@worker1 ~]# cat err
ls: cannot access a.txt: No such file or directory
ls: cannot access a.txt: No such file or directory
"<"输入重定向
[root@worker1 ~]# wc -l < 2.txt
2
"&>"表示错误和正确的同时输出到一个文件
[root@worker1 ~]# cat 1.txt a.txt &> 2.txt
[root@worker1 ~]# cat 2.txt
hello world
cat: a.txt: No such file or directory
等价于
[root@worker1 ~]# cat 1.txt a.txt > 2.txt 2>&1