shell介绍、命令历史、命令补全和别名、通配符、输入输出重定向
81 shell介绍
什么是shell?
shell是一个命令解释器,提供用户和机器之间的交互;
支持特定的语法,例如逻辑判断,循环;
每个用户都可以有自己的shell;
CentOS7默认的shell是bash(Bourne Agin Shell);
还有其他的如zsh、ksh等。
[root@localhost httpd-2.2.34]# yum list |grep zsh
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
zsh.x86_64 5.0.2-28.el7 base
zsh-html.x86_64 5.0.2-28.el7 base
[root@localhost httpd-2.2.34]# yum list |grep ksh
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
ksh.x86_64 20120801-34.el7 base
mksh.x86_64 46-5.el7
82 命令历史
命令历史
[root@localhost httpd-2.2.34]# history(查看已经使用过的命令)
[root@localhost httpd-2.2.34]# cat /root/.bash_history (同样可以查看使用过的命令)
[root@localhost httpd-2.2.34]# echo $HISTSIZE (CentOS7系统默认最多保存1000条命令历史)
1000
[root@localhost httpd-2.2.34]# history -c (清除内存中的命令,退出终端时才会写入文件中)
[root@localhost httpd-2.2.34]# vim /etc/profile(更改默认最多保存历史命令条数)
更改默认最多保存历史命令条数
这里我们修改为2000
[root@localhost httpd-2.2.34]# echo $HISTSIZE
1000
[root@localhost httpd-2.2.34]# source /etc/profile(需要source才能生效)
[root@localhost httpd-2.2.34]# echo $HISTSIZE
2000
默认的命令历史不太详细可以通过修改配置文件 /etc/profile 来给命令历史添加日期和时间
在配置文件中添加变量
[root@localhost httpd-2.2.34]# vim /etc/profile
[root@localhost httpd-2.2.34]# source /etc/profile
[root@localhost httpd-2.2.34]# history(这时会显示命令时间信息)
1 2018/01/22 16:53:58 vim /etc/profile
2 2018/01/22 16:59:06 echo $HISTSIZE
3 2018/01/22 16:59:19 source /etc/profile
4 2018/01/22 16:59:21 echo $HISTSIZE
5 2018/01/22 17:03:17 vim /etc/profile
6 2018/01/22 17:04:20 source /etc/profile
7 2018/01/22 17:04:45 history
想要永久保存命令历史 就是用命令 chattr +a ~/.bash_history
history -c 可以清楚内存中的命令历史 保存在 /etc/profile 中的不受影响
注:终端非正常关闭命令历史会记录不完善
!! 执行命令历史里的最后一条命令
!! 执行命令历史里的最后一条命令
!n 执行命令历史里的第n条命令
!Word 执行命令历史里最后一条这个Word的命令
83 命令补全和别名
命令补全和别名
在输入命令时可以使用tab键补全命令
按一下tab键如果命令没有补全则存在多个以你当前输入相同的开头的命令
这时你需要按两下tab键 列出所有类似命令找到你需要的继续输入
在CentOS7中还可以补全命令参数 默认是不能的 要安装bash_completion 来实现 安装完成后重启机器即可使用
[root@localhost httpd-2.2.34]# yum install -y bash-completion
[root@localhost ~]# reboot
这个时候命令也是可以补全了
[root@localhost ~]# alias(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'
[root@localhost ~]# alias lsa='ls -la'(定义别名)
[root@localhost ~]# lsa
总用量 700
dr-xr-x---. 4 root root 227 1月 22 17:04 .
dr-xr-xr-x. 17 root root 224 12月 26 08:10 ..
-rw-------. 1 root root 1418 12月 26 08:11 anaconda-ks.cfg
-rw-------. 1 root root 13503 1月 22 17:33 .bash_history
-rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
-rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
drwxr-xr-x. 3 root root 91 1月 10 11:50 d6z
-rw-r--r--. 1 root root 654748 1月 10 17:14 d6z.tar.gz
-rw-------. 1 root root 53 12月 30 16:40 .lesshst
-rw-r--r--. 1 root root 12288 1月 4 10:33 .passwd.swp
drwx------. 2 root root 29 12月 30 10:47 .ssh
-rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc
-rw-------. 1 root root 3497 1月 22 17:04 .viminfo
[root@localhost ~]# unalias lsa(取消别名)
[root@localhost ~]# lsa
-bash: lsa: 未找到命令
84 通配符
通配符
* 可以匹配所有字符
? 匹配所有单个字符
[0-9] 匹配任意一个数字
[a-z] 匹配任意一个小写字母
[A-Z]匹配任意一个大写字母
[0-9a-zA-Z]匹配任意一个数字或字母
{1,2,3}匹配其中一个
85 输入输出重定向
> 输出重定向 会删除原有文档内容
>>输出追加重定向 在原有文档末尾增加
2>错误输出重定向 会删除原有文档内容
2>>错误输出追加重定向 在原有文档末尾增加
加 2> 等于 &> 正确和错误的一起重定向到一个文件
< 输入重定向 左边为命令右边是文件
[root@localhost ~]# laaa 2>a.txt
[root@localhost ~]# cat a.txt
-bash: laaa: 未找到命令
[root@localhost ~]# cat a.txt >> a1.txt
[root@localhost ~]# cat a.txt
-bash: laaa: 未找到命令
a.txt
[root@localhost ~]# cat a1.txt
-bash: laaa: 未找到命令
a.txt
[root@localhost ~]# cat a.txt >> a1.txt
[root@localhost ~]# cat a1.txt
-bash: laaa: 未找到命令
a.txt
-bash: laaa: 未找到命令
a.txt