设为首页 收藏本站
查看: 1498|回复: 0

shell介绍/命令历史/命令补全/通配符/输出输入重定向

[复制链接]

尚未签到

发表于 2018-8-22 11:55:12 | 显示全部楼层 |阅读模式
shell介绍
  

* shell是一个命令解释器,提供用户和机器之间的交互。  

  
* 支持特定语法,比如逻辑判断、循环。
  

  
* 每个用户都可以有自己特定的shell。
  

  
* Centos7默认shell为bash。
  

  
* 还有zsh、ksh
  

命令历史
  我们在终端上敲过的命令,都有它的历史记录,比如此时按下向上键就会看到你之前最后输入的一条命令,再按就再往前翻,这里就开始学习认识命令历史
  使用history命令查看历史命令;

  [root@Ask-02 ~]# history

DSC0000.jpg

  这里可以看到我已经输入过429条命令。
  历史命令是有个文件保存的,在root用户的家目录下,名为.bash_history,它是一个隐藏文件所以别忘记小点;

  [root@Ask-02 ~]# ls /root/.bash_history
  /root/.bash_history
  [root@Ask-02 ~]# cat /root/.bash_history

DSC0001.jpg

  该命令历史环境变量系统设定最大保存1000条命令,可以通过以下命令查看;

  [root@Ask-02 ~]# echo $HISTSIZE
  1000

  在目前中输入的命令还只是存在内存中,并为已经写入到命令历史文件中,通过以下命令,可以将当前输入过(内存记忆)的命令记录删除;

  [root@Ask-02 ~]# history -c

  这个时候再按向上的方向键,你就发现看不到你前面输入过的命令了,而这个操作是不会删除掉你命令历史中的内容。
  如果你觉得最大保存一千条命令不够,可以在以下路径中的配置文件里进行修改;

  [root@Ask-02 ~]# vi /etc/profile

  找到以下图中这行将数量修改,这里我将数值改为:5000
DSC0002.jpg

  想要这个数值生效还需要重新进入终端,或者执行以下命令;

  [root@Ask-02 ~]# source /etc/profile
  [root@Ask-02 ~]# echo $HISTSIZE
  5000

  可以看到数值已经变为5000
  目前当我们输入history命令的时候,显示的仅仅是行号和命令,如果想要知道它操作的详细时间,我们可以更改以下环境变量即可;

  [root@Ask-02 ~]# HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
  [root@Ask-02 ~]# history
  1  2018/01/10 18:07:50 vi /etc/profile
  2  2018/01/10 18:12:13 cat /etc/profile
  3  2018/01/10 18:13:55 source /etc/profile
  4  2018/01/10 18:14:49 echo $HISTSIZE
  5  2018/01/10 18:21:19 HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
  6  2018/01/10 18:21:28 history****

  但是这样的操作仅限于当前,只要退出重进后又恢复原来的样子,想让它永久生效,进入到profile配置文件中,在HISTSIZE数量值下面添加上刚才那段参数即可。修改完别忘执行source命令。

  [root@Ask-02 ~]# vim /etc/profile
  [root@Ask-02 ~]# source /etc/profile

DSC0003.jpg

  如果想要永久保存命令历史记录,那么你可以给文件加上隐藏权限,好比加上a权限,这样就只能增加不能删除,这时就算不设置最大数值它也不会被删除;

  [root@Ask-02 ~]# chattr +a ~/.bash_history

  如果没有正常的关闭终端,或者重启终端,那之前登录时使用过的命令将不被记录到命令历史文件里。
  !!:两个叹号为快速执行最后一条命令。
  !n:n=(数字),该命令用于执行命令历史中的第几个命令,比如!400就是执行命令历史中第400条的命令
  !echo:叹号后更一个命令你个,会在命令历史中重复执行一次距离历史最近的一次(也是该命令最后执行的一次)这里我们拿echo命令打比方。

命令补全和别名
  tab键:敲以下补全命令,敲两下显示包含当前输入的字符的多个命令,比如ls敲两下显示出含有ls的多个命令,当我输入lsb按一下tab键会补全lsblk这个命令;

  [root@Ask-02 ~]# ls
  ls        lscgroup  lsipc     lsmcli    lsns      lsscsi    lsusb.py
  lsattr    lscpu     lslocks   lsmd      lsof      lssubsys
  lsblk     lsinitrd  lslogins  lsmod     lspci     lsusb
  [root@Ask-02 ~]# lsblk

  tab补全用法不仅可以补全命令,还可以补全文件路径,在centos6的时候系统是不支持补全命令参数的,需要安装了bash_completion包后,而Centos7是系统支持不全参数;

  [root@Ask-02 ~]# yum install -y bash_completion    //安装完后需要重启以下系统后才会生效。

  当你输入一条命令时你觉得命令很长使用起来降低了效率,那么你可以使用自定义该命令使用alias命令;

  [root@Ask-02 ~]# alias restartnet='systemctl restart network.service'    //比我们将systemctl restart network.service这条命令重命名为restartnet

  alias的自定义配置文件在etc下的profile.d里,还有一个地方在root用户的家目录下;

  [root@Ask-02 ~]# cd /etc/profile.d/
  [root@Ask-02 profile.d]# ls
  256term.csh                   colorgrep.csh  flatpak.sh  less.sh        vte.sh
  256term.sh                    colorgrep.sh   lang.csh    PackageKit.sh  which2.csh
  abrt-console-notification.sh  colorls.csh    lang.sh     vim.csh        which2.sh
  bash_completion.sh            colorls.sh     less.csh    vim.sh
  [root@Ask-02 profile.d]# ls /root/.bashrc
  /root/.bashrc

  unalias:需要自定义的别名

  [root@Ask-02 ~]# unalias restartnet


通配符
  [*****:]当你使用星号的时候来查看的时候,你会得到含有星号前或后的有关文件,比如;

  [root@Ask-02 文档]# ls ****.txt
  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  测试.txt
  或者是
  [root@Ask-02 文档]# ls 测试
  测试1.txt  测试2.txt  测试3.txt  测试4.txt  测试.txt

  [?:]使用问号查看任意以一个字符为名称的文件

  [root@Ask-02 文档]# ls ?.txt
  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt

  [0-9]:使用方括号,可以列出一个范围内的文件,比如1-3;

  [root@Ask-02 文档]# ls [1-3].txt
  1.txt  2.txt  3.txt

  {1,2}:使用花括号和方括号的用法相似,只是操作略有不同他是使用“,”来区分开的;

  [root@Ask-02 文档]# ls {1,2}.txt
  1.txt  2.txt

  输入输出重定
  [>:]大于号,表示输出将前者显示的内容输出写入到后面的文件中去(注意写入到后者的文件中原文件内容将被替换);

  [root@Ask-02 文档]# cat 1.txt
  hello world
  [root@Ask-02 文档]# cat 1.txt >2.txt
  [root@Ask-02 文档]# cat 2.txt
  hello world

  [>>:]两个大于号,表示追加,即将前者显示的内容追加到后者文件中去且不会替换掉原文件的内容;

  [root@Ask-02 文档]# cat 1.txt >>2.txt
  [root@Ask-02 文档]# cat 2.txt
  hello world
  hello world

  [2>:]大于号前面加个2表示错误输出,即将前者执行的错误结果输出到后者文件中去;

  [root@Ask-02 文档]# car 1.txt
  bash: car: 未找到命令...
  相似命令是: 'sar'
  [root@Ask-02 文档]# car 1.txt 2>3.txt
  [root@Ask-02 文档]# cat 3.txt
  bash: car: 未找到命令...
  相似命令是: 'sar'

  [2>>:]表示追加输出,即将前者执行的错误结果追加输出到后者文件中去;

  [root@Ask-02 文档]# car 4.txt 2>>3.txt
  [root@Ask-02 文档]# cat 3.txt
  bash: car: 未找到命令...
  相似命令是: 'sar'
  bash: car: 未找到命令...
  相似命令是: 'sar'

  [&>:]结合了正确和错误输出的结果,写入到后者文件中

  [root@Ask-02 文档]# cat 1.txt 8.txt &>5.txt
  [root@Ask-02 文档]# cat 5.txt
  hello world
  cat: 8.txt: 没有那个文件或目录

  [>+2>:]可以同时将一条命令的执行结果正确和错误输出写入不同的文件当中;

  [root@Ask-02 文档]# cat 1.txt 8.txt >2.txt 2>3.txt
  [root@Ask-02 文档]# cat 2.txt
  hello world
  [root@Ask-02 文档]# cat 3.txt
  cat: 8.txt: 没有那个文件或目录

  [

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-555106-1-1.html 上篇帖子: shell实现对mysql数据库的增、删、改、查操作 下篇帖子: Shell标准输出、标准错误 >/dev/null 2>&1
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表