一、shell介绍 二、命令历史 历史命令存放路径 /root/.bash_history ,默认可以存放1000条命令 #history //查看具体的历史命令 [root@linux-01 ~]# echo $HISTSIZE //系统内置环境变量 1000

#history -c //清空内存中命令历史,但是存放命令的文件不会被删除 #vi /etc/profile // 修改HISTORY环境变量路径/etc/profile,可以吧HISTSIZE=1000改为5000 [root@linux-01 ~]# source /etc/profile //修改完配置文件需要执行这条命令让配置文件生效 [root@linux-01 ~]# echo $HISTSIZE 5000

[root@linux-01 ~]# HISTTIMEFORMAT="%Y/%M/%d %H:%M:%S" //需要查看每条命令的执行时间 [root@linux-01 ~]# echo $HISTTIMEFORMAT %Y/%M/%d %H:%M:%S

如果需要让查看每条命令的具体时间永久生效,需要编辑/etc/profile,在HISTSIZE=5000下面添加一行: HISTTIMEFORMAT="%Y/%M/%d %H:%M:%S" 保存退出就可以永久生效

[root@linux-01 ~]# chattr +a ~/.bash_history //给文件添加隐藏权限,此文件只能追加,不能被删除 如果没有正常退出终端,那么命令在.bash_history文件中就不被保存

[root@linux-01 ~]# !! //两个感叹号表示执行的上一条命令 [root@linux-01 ~]# !11 //执行第命令历史中的第11条命令 [root@linux-01 ~]# !echo //会在命令历史中倒着找第一个以echo开头的命令 [root@linux-01 ~]# !mkdir //会在命令历史中倒着找第一个以mkdir开头的命令

三、命令补全和别名 在Centos7中,如果需要按Teb键补全参数,如 systemctl restart network这条命令需要补全restart参数,需要安装bash-completion,可以yum安装 # yum install -y bash-completion ,安装完之后需要重启系统生效 #rpm -qa 包名 //查看包有没有安装

[root@linux-01 ~]# rpm -qa alias restartnet='systemctl restart network.service'
//使用restartnet给'systemctl restart network.service' 这条命令做别名,那么重启网络服务的时候就可以执行restartnet命令来重合器网卡了

[root@linux-01 ~]# alias //列出系统中所有有别名的命令 alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

.bashrc 和 /etc/profile.d 下都有定义alias #unalias restartnet //取消自定义别名restartnet

四、通配符 、输入输出重定向 表示通配 [root@linux-01 ~]# ls .txt //列出.txt所有文件可以使用.txt 11.txt 1.txt 2.txt [root@linux-01 ~]# ls txt //列出.txt所有文件也可以使用txt 11.txt 1.txt 2.txt [root@linux-01 ~]# ls txt //列出.txt所有文件也可以使用txt* 11.txt 1.txt 1.txt.zip 2.txt

[root@linux-01 ~]# ls 1* //列出以1开头的所有文件可以使用1* 11.txt 1.txt 1.txt.zip 123: 333 yum.log

[root@linux-01 ~]# ls ?.txt //?.txt表示一个任意一个字符的txt文件,?表示任意一个字符 1.txt 2.txt 3.txt 4.txt a.txt

[root@linux-01 ~]# ls [0-3].txt //查看开头0-3之间的.txt文件,方括号中的0-3取其中一个数字 1.txt 2.txt 3.txt [root@linux-01 ~]# ls [123].txt //也可以取方括号中的1 2 3开头所有的.txt文件 1.txt 2.txt 3.txt [root@linux-01 ~]# ls [23].txt //例如列出2 3开头的.txt文件 2.txt 3.txt [root@linux-01 ~]# ls [0-9a-zA-Z].txt //列出0-9 a-z A-Z的所有.txt文件 1.txt 2.txt 3.txt 4.txt

[root@linux-01 ~]# ls {1,2}.txt //列出1,2开头的.txt文件,注意花括号中需要加逗号 1.txt 2.txt

#cat 1.txt > 2.xtx //把前面命令的输出直接输入到后面的文件里面,一个大于号会把原来的内容删除 #cat 1.txt >> 2.xtx //两个大于号不会把大于号左边原来的命令删除

#laaaa 2> 1.txt //使用 2> 把一个命令的错误信息输入到1.txt文件中 #laaaa 2>> 1.txt //使用2>>把错误信息追加重定向到1.txt文件中

是输出重定向;>> 是输出追加重定向;2> 是错误重定向;2>> 是错误追加重定向

  • 2> = &> 例: [root@linux-01 ~]# ls [12].txt aaa.txt &> 3.txt //把[12].txt aaa.txt 的正确信息和错误信息都输入到3.txt文件中 [root@linux-01 ~]# cat 3.txt //查看3.txt文件信息 ls: cannot access aaa.txt: No such file or directory 1.txt 2.txt

[root@linux-01 ~]# ls [12].txt aaa.txt &>> 3.txt //同样支持追加 [root@linux-01 ~]# cat 3.txt ls: cannot access aaa.txt: No such file or directory 1.txt 2.txt ls: cannot access aaa.txt: No such file or directory 1.txt 2.txt

[root@linux-01 ~]# ls [12].txt aaa.txt > 3.txt 2>4.txt //可以把正确命令输入到3.txt文件中,错误信息输入到4.txt文件中,以后shell脚本中用的多,可以把正确和错误分别指定到不同文件 [root@linux-01 ~]# cat 3.txt 1.txt 2.txt [root@linux-01 ~]# cat 4.txt ls: cannot access aaa.txt: No such file or directory

< 是输入重定向,小于号左边必须是命令,右边是文件 [root@linux-01 ~]# wc -l < 3.txt //查看3.txt文件行数 2