shell 基础与命令补充

一、  shell介绍
1. Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
2. 实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。
3. Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。
4. Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
5. CentOS的shell默认的shell为bash,还有其它类型的shell,比如zsh、ksh、等等
 
二、命令历史
1. 命令历史的存放地址,这个文件最多可以存放1000条
/root/.bash_history  
2.环境变量HISTSIZE ,可以查看能够存放命令的条数
[root@localhost ~]# echo $HISTSIZE                      
1000
 3. histtory -c  清空当前内存中的命令历史,不能清空配置文件里的
                       当退出终端的时候,命令才会保存到配置文件里,
4. 修改环境变量HISTSIZE的值, 更改命令保存的条数   
vim  /etc/profile      #打开配置文件
 
HISTSIZE=1000                   #在配置文件里面找到这一行,将数值1000更改为你想要修改的值
 
source /etc/profile              # 当更改profile文件后,需要source下或者重启终端才会生效
5. HISTTIMEFORMAT  自定义History输出格式,可以加上时间
1. [root@localhost ~]# HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "   #设置格式
2. [root@localhost ~]# echo $HISTTIMEFORMAT
    %Y/%m/%d %H:%M:%S
3. [root@localhost ~]# history                                 #可以看到history已经设置格式为年/月/日/.......,加上了时间信息
    1  2018/01/10 06:36:43 vim /etc/profile
    2  2018/01/10 06:40:54 HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
    3  2018/01/10 06:41:05 history
 
如果想要这个环境变量永久生效,那么需要添加到配置文件里
vim  /etc/profile                                                            #编辑配置文件
HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "       #将这段添加到配置文件,和 HISTSIZE=1000放在一起
source /etc/profile                                                        #编辑完成后重启配置文件生效
6. 给命令历史文件加上a权限,那么只能追加,不能删除,这样可以永久保存命令
    但是如果不正常退出终端,那么命令历史不会正常保存
chattr +a /root/.bash_history  
7.  !!           表示命令历史里最后一条命令
     !n          n表示数字,输入后可以在运行历史记录里相对应id号的命令
     !echo    运行命令历史echo开头的最近的一条命令
 
三、命令补全和别名
1.当输入命令的时候按Table可以自动补全命令或参数
yum install -y bash-completion           #安装命令补全的包,安装完成后需要重启系统
2. 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-ti
3. alias 存放的地址
.bashrc          #用户的家目录文件下面存放了几条
 
[root@localhost ~]# cd /etc/profile.d
[root@localhost profile.d]# 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
4. 自定义别名和取消别名   alias  与  unalias              
[root@localhost profile.d]# alias lspro='ls -l /etc/profile.d'                 #给 'ls -l /etc/profile.d'这条命令设置别名 lspro
[root@localhost profile.d]# lspro                                                                 #可以直接使用lspro
总用量 60 
-rw-r--r--. 1 root root  771 8月   4 07:57 256term.csh
-rw-r--r--. 1 root root  841 8月   4 07:57 256term.sh
-rw-r--r--. 1 root root  660 6月  10 2014 bash_completion.sh
-rw-r--r--. 1 root root  196 3月  25 2017 colorgrep.csh
[root@localhost profile.d]# unalias lspro                                        #使用unalias取消自定义别名
[root@localhost profile.d]# lspro                                                      #再使用的时候提示未找到命令
-bash: lspro: 未找到命令
 
四、通配符
1.  *   通配符,可以代表任何字,
[root@localhost ~]# ls *.txt            #列出所有以”.txt“结尾的文件或目录
11_hard.txt  11.txt  555.txt
[root@localhost ~]# ls 1*                #列出所有的以"1"开头的文件,不管是目录还是文件都会列出来
11_hard.txt  11.txt
2.  ? 表示一个任意的字符
[root@localhost ~]# ls ?.txt             #”?“表示任意的一个字符,所以只列出一个字符开头的文件
2.txt  c.txt
3. [0-9] [a-z] 可以写数字或字母,表示0到9或者a-z任意一个
    {1,2,3} {a,b,c}作用和[]类似,不过中间要有逗号分隔
[root@localhost ~]# ls [0-3].txt           #列出0到3开头的文件
1.txt  2.txt  3.txt
[root@localhost ~]# ls [123].txt           #列出1、2、3开头的文件
1.txt  2.txt  3.txt
[root@localhost ~]# ls [13].txt             #列出1和3
1.txt  3.txt
[root@localhost ~]# ls [23].txt             #列出2和3
2.txt  3.txt
 
五、输入输出重定向
1.   >        重定向,将一个命令的结果输出,原文件会删除
      >>     追加重定向,原来的文件不会删除
2.   2>      错误重定向,将错误的信息输出
      2>>   错误追加重定向,将错误的信息输出
[root@localhost ~]# fgdddd 2> xx.txt    运行一个错误的命令,将错误的信息重定向到xx.txt文件里面去
[root@localhost ~]# cat xx.txt
-bash: fgdddd: 未找到命令
3.   &>    将错误和正确的信息都输出,重定向
      &>>  将错误和正确的信息都输出,追加重定向
[root@localhost ~]# ls [123].txt sss.txt &>xx.txt    #ls 1、2、3.txt以及sss.txt,将错误和正确的结果都重定向到xx.txt
[root@localhost ~]# cat xx.txt                    
ls: 无法访问sss.txt: 没有那个文件或目录
1.txt
2.txt
3.txt
4. 将错误和正确的信息分别写在不同文件里
[root@localhost ~]# ls [123].txt sss.txt > bb.txt 2>cc.txt   #将正确的信息写在bb.txt   错误的信息写在cc.txt
[root@localhost ~]# cat bb.txt
1.txt
2.txt
3.txt
[root@localhost ~]# cat cc.txt
ls: 无法访问sss.txt: 没有那个文件或目录
5.   <     输入重定向
[root@localhost ~]# wc -l <1.txt     
posted @ 2020-12-01 20:40  25岁男孩的梦想  阅读(93)  评论(0编辑  收藏  举报