您的位置:首页 > 运维架构 > Shell

shell介绍 、命令历史、命令补全和别名 、 通配符、输入输出重定向

2018-03-07 19:31 751 查看

Shell介绍

shell是一个命令解释器,提供用户和机器之间的交互
支持特定语法,比如逻辑判断、循环(if for whell)
每个用户都可以有自己特定的shell
CentOS7默认shell为bash(Bourne Agin Shell)
还有zsh、ksh等

命令历史

history命令
bash_history
最大1000条
变量HISTSIZE
/etc/profile中修改
HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
永久保存 chattr +a ~/.bash_history
!!
!n
!word

1 .history 命令

显示历史命令
[root@localhost ~]# history
1  mkdir /tmp/222
2  rmdir /tmp/111/ /tmp/222/
.
.
.
995  echo $?
996  ls /usr/local/apache2/
997  init 0
998  ls ./.bash_history
999  vim ./.bash_history
1000  history

3. .bash_history 文件

历史命令保存在用户家目录的.bash_history文件中

4. history –c

清空内存中的历史记录;不会清除.bash_history文件中的记录。
[root@localhost ~]# history -c
[root@localhost ~]# history
2  history
[root@localhost ~]# head -10 .bash_history
mkdir /tmp/222
rmdir /tmp/111/ /tmp/222/
ls
lsls tmp
ls /tmp
mkdir /tmp/111
mkdir /tmp/222
ls
ls /tmp
rmdir /tmp/111/ /tmp/222/
只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中。

5. 定义HISTSIZE值,在配置文件/etc/profile中修改

[root@localhost ~]# vim /etc/profile
搜索HISTSIZE 默认值是1000,可以修改成5000条,然后按esc,:wq 保存退出。
然后运行命令:source /etc/profile
[root@localhost ~]# source /etc/profile
[root@localhost ~]# echo $HISTSIZE
5000

6. 定义格式:HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "

在配置文件/etc/profile中修改,在HISTSIZE=5000下面,添加一行HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "


[root@localhost ~]# vim /etc/profile
[root@localhost ~]# source /etc/profile
[root@localhost ~]# history
2  2017/11/15 21:49:44 history
3  2017/11/15 21:50:20 head -10 .bash_history
4  2017/11/15 21:55:05 vim /etc/profile
5  2017/11/15 21:57:52 source /etc/prfile
6  2017/11/15 21:58:04 source /etc/profile
7* 2017/11/15 21:58:16 echo $HIST
8  2017/11/15 22:01:02 vim /etc/profile
9  2017/11/15 22:03:49 history
10  2017/11/15 22:03:57 source /etc/profile
11  2017/11/15 22:03:59 history
12  2017/11/15 22:04:20 vim /etc/profile
13  2017/11/15 22:05:14 source /etc/profile
14  2017/11/15 22:05:17 history

6. 永久保存 chattr +a ~/.bash_history

给.bash_history加一个a权限,不能删除,可以追加
[root@localhost ~]# chattr +a .bash_history

7. !!:连续两个!表示执行上一条命令。

[root@localhost ~]# pwd
/root
[root@localhost ~]# !!
pwd
/root

8. !n:这里的n是数字,表示执行命令历史中的第n条命令。

[root@localhost ~]# history
2  2017/11/15 21:49:44 history
3  2017/11/15 21:50:20 head -10 .bash_history
4  2017/11/15 21:55:05 vim /etc/profile
5  2017/11/15 21:57:52 source /etc/prfile
6  2017/11/15 21:58:04 source /etc/profile
7* 2017/11/15 21:58:16 echo $HIST
8  2017/11/15 22:01:02 vim /etc/profile
9  2017/11/15 22:03:49 history
10  2017/11/15 22:03:57 source /etc/profile
11  2017/11/15 22:03:59 history
12  2017/11/15 22:04:20 vim /etc/profile
13  2017/11/15 22:05:14 source /etc/profile
14  2017/11/15 22:05:17 history
15  2017/11/15 22:07:56 chattr +a .bash_history
16  2017/11/15 22:08:10 vim .bash_history
17  2017/11/15 22:09:25 pwd
18  2017/11/15 22:10:31 history
[root@localhost ~]# !17
pwd
/root

9. !字符串: !pw表示执行命令历史中最近一次以pw开头的命令。

[root@localhost ~]# !pw
pwd
/root

命令和文件名补全

tab键,敲一下,敲两下
参数补全,安装bash-completion
alias别名给命令重新起个名字
各用户都有自己配置别名的文件 ~/.bashrc
ls /etc/profile.d/
自定义的alias放到~/.bashrc
按tab键可以帮我们补全一个指令,一个路径或者一个文件名
Centos6中tab键只能补全本身;Centos7中tab键支持命令参数补全,需要安装一个包bash-completion
[root@localhost ~]# yum install -y bash-completion
重启服务器 reboot

别名

Alias也是bash所特有的功能之一;直接执行alias命令会看到目前系统预设的所有别名。
[root@localhost ~]# 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文件中只配置了几个alias
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
其他的很多别名在/etc/profile.d/目录下,有很多.sh文件中定义;
[root@localhost ~]# ls /etc/profile.d/
256term.csh         colorgrep.csh  colorls.sh  less.csh  vim.sh
256term.sh          colorgrep.sh   lang.csh    less.sh   which2.csh
bash_completion.sh  colorls.csh    lang.sh     vim.csh   which2.sh

root@linux-128 ~]# vim /etc/profile.d/colorls.sh


通配符

ls *.txt
ls ?.txt
ls [0-9].txt
ls {1,2}.txt

*用来匹配零个或多个任意字符

[root@localhost ~]# ls *txt
11.txt  1a.txt  23.txt  321.txt  ab.txt  a.txt  b.txt  工号.txt
[root@localhost ~]# ls 1*
11.txt  11.txt.bak  12  1a.txt  1.log
123:
[root@localhost ~]# ls *1*
11.txt  11.txt.bak  12  1a.txt  1.log  321.txt  321.txt.bak
123:
[root@localhost ~]# ls *a*
11.txt.bak  1a.txt  321.txt.bak  ab.txt  anaconda-ks.cfg  a.txt

?用来匹配一个字符

[root@localhost ~]# ls ?.txt
a.txt  b.txt

ls [0-3].txt [ ]里面表示范围,只要是在这个范围内都列出来

[root@localhost ~]# ls [0-3].txt
1.txt  2.txt
[root@localhost ~]# ls [a-z].txt
a.txt  b.txt
[root@localhost ~]# ls [0-9a-zA-Z].txt
1.txt  2.txt  a.txt  b.txt

ls {1,2}.txt { }花括号里面要用“,”隔开,1.txt或者2.txt;

[root@localhost ~]# ls {1,2}.txt
1.txt  2.txt

[root@localhost ~]# ls {1,2,3}.txt
ls: 无法访问3.txt: 没有那个文件或目录
1.txt  2.txt

输入输出重定向

cat 1.txt >2.txt
cat 1.txt >> 2.txt
ls aaa.txt 2>err
ls aaa.txt 2>>err
wc -l < 1.txt
command >1.txt 2>&1

>输出重定向

[root@localhost ~]# echo "112233">1.txt
[root@linux-128 ~]# cat 1.txt
112233

>>追加重定向

[root@localhost ~]# echo "aabbcc">>1.txt
[root@localhost ~]# cat 1.txt
112233
Aabbcc

2> 错误重定向

[root@localhost ~]# ls aaa.txt 2>2.txt
[root@localhost ~]# cat 2.txt
ls: 无法访问aaa.txt: 没有那个文件或目录

2>>错误追加重定向

[root@localhost ~]# ls aaa.txt 2>>2.txt
[root@localhost ~]# cat 2.txt
ls: 无法访问aaa.txt: 没有那个文件或目录
ls: 无法访问aaa.txt: 没有那个文件或目录

&> == >+2>正确和错误重定向

[root@localhost ~]# ls 1.txt aaa.txt &> 1.txt
[root@localhost ~]# cat 1.txt
ls: 无法访问aaa.txt: 没有那个文件或目录
1.txt

&>>

[root@localhost ~]# ls 1.txt aaa.txt &>> 1.txt
[root@localhost ~]# cat 1.txt
ls: 无法访问aaa.txt: 没有那个文件或目录
1.txt
ls: 无法访问aaa.txt: 没有那个文件或目录
1.txt

可以将正确输出到一个文件中,错误输入到另一个文件中,也可以同时输出到一个文件中(用&>)。

[root@localhost ~]# ls 1.txt aaa.txt > 1.txt 2>2.txt
[root@localhost ~]# cat 1.txt
1.txt
[root@localhost ~]# cat 2.txt
ls: 无法访问aaa.txt: 没有那个文件或目录

< 输入重定向

[root@localhost ~]# wc -l < /etc/passwd
27
左边只能是命令,不能是文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell
相关文章推荐