一、shell介绍
二、命令历史
历史命令存放路径 /root/.bash_history ,默认可以存放1000条命令
#history //查看具体的历史命令
[[email protected] ~]# echo $HISTSIZE //系统内置环境变量
1000
#history -c //清空内存中命令历史,但是存放命令的文件不会被删除
#vi /etc/profile // 修改HISTORY环境变量路径/etc/profile,可以吧HISTSIZE=1000改为5000
[[email protected] ~]# source /etc/profile //修改完配置文件需要执行这条命令让配置文件生效
[[email protected] ~]# echo $HISTSIZE
5000
[[email protected] ~]# HISTTIMEFORMAT="%Y/%M/%d %H:%M:%S" //需要查看每条命令的执行时间
[[email protected] ~]# echo $HISTTIMEFORMAT
%Y/%M/%d %H:%M:%S
如果需要让查看每条命令的具体时间永久生效,需要编辑/etc/profile,在HISTSIZE=5000下面添加一行: HISTTIMEFORMAT="%Y/%M/%d %H:%M:%S" 保存退出就可以永久生效
[[email protected] ~]# chattr +a ~/.bash_history //给文件添加隐藏权限,此文件只能追加,不能被删除
如果没有正常退出终端,那么命令在.bash_history文件中就不被保存
[[email protected] ~]# !! //两个感叹号表示执行的上一条命令
[[email protected] ~]# !11 //执行第命令历史中的第11条命令
[[email protected] ~]# !echo //会在命令历史中倒着找第一个以echo开头的命令
[[email protected] ~]# !mkdir //会在命令历史中倒着找第一个以mkdir开头的命令
三、命令补全和别名
在Centos7中,如果需要按Teb键补全参数,如 systemctl restart network这条命令需要补全restart参数,需要安装bash-completion,可以yum安装 # yum install -y bash-completion ,安装完之后需要重启系统生效
#rpm -qa 包名 //查看包有没有安装
[[email protected] ~]# rpm -qa alias restartnet=‘systemctl restart network.service‘
//使用restartnet给‘systemctl restart network.service‘ 这条命令做别名,那么重启网络服务的时候就可以执行restartnet命令来重合器网卡了
[[email protected] ~]# 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
四、通配符 、输入输出重定向
表示通配
[[email protected] ~]# ls .txt //列出.txt所有文件可以使用.txt
11.txt 1.txt 2.txt
[[email protected] ~]# ls txt //列出.txt所有文件也可以使用txt
11.txt 1.txt 2.txt
[[email protected] ~]# ls txt //列出.txt所有文件也可以使用txt*
11.txt 1.txt 1.txt.zip 2.txt
[[email protected] ~]# ls 1 //列出以1开头的所有文件可以使用1
11.txt 1.txt 1.txt.zip
123:
333 yum.log
[[email protected] ~]# ls ?.txt //?.txt表示一个任意一个字符的txt文件,?表示任意一个字符
1.txt 2.txt 3.txt 4.txt a.txt
[[email protected] ~]# ls [0-3].txt //查看开头0-3之间的.txt文件,方括号中的0-3取其中一个数字
1.txt 2.txt 3.txt
[[email protected] ~]# ls [123].txt //也可以取方括号中的1 2 3开头所有的.txt文件
1.txt 2.txt 3.txt
[[email protected] ~]# ls [23].txt //例如列出2 3开头的.txt文件
2.txt 3.txt
[[email protected] ~]# ls [0-9a-zA-Z].txt //列出0-9 a-z A-Z的所有.txt文件
1.txt 2.txt 3.txt 4.txt
[[email protected] ~]# 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> = &>
例:
[[email protected] ~]# ls [12].txt aaa.txt &> 3.txt //把[12].txt aaa.txt 的正确信息和错误信息都输入到3.txt文件中
[[email protected] ~]# cat 3.txt //查看3.txt文件信息
ls: cannot access aaa.txt: No such file or directory
1.txt
2.txt
[[email protected] ~]# ls [12].txt aaa.txt &>> 3.txt //同样支持追加
[[email protected] ~]# 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
[[email protected] ~]# ls [12].txt aaa.txt > 3.txt 2>4.txt //可以把正确命令输入到3.txt文件中,错误信息输入到4.txt文件中,以后shell脚本中用的多,可以把正确和错误分别指定到不同文件
[[email protected] ~]# cat 3.txt
1.txt
2.txt
[[email protected] ~]# cat 4.txt
ls: cannot access aaa.txt: No such file or directory
< 是输入重定向,小于号左边必须是命令,右边是文件
[[email protected] ~]# wc -l < 3.txt //查看3.txt文件行数
2
原文地址:http://blog.51cto.com/13669226/2106351