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

旧城冷巷雨未停 提交于 2020-03-15 23:50:38

什么是shell

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

命令历史

  • history命令,查看命令的输入历史
  • .bash_history,命令输入历史保存文件,默认1000条
  • 变量HISTSIZE,在/etc/profile中修改;HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S ",历史命令中时间格式化显示
  • /etc/profile文件生效方式: 重新进终端或者source /etc/profile
  • 永久保存命令输入历史 chattr +a ~/.bash_history
  • !! # 执行上一条命令
  • !n # 执行命令历史文件中第n条命令
  • !word 根据时间在命令历史文件中从新到老找到的第一个word命令执行
  • history -c # 清空内存中缓存的命令,不会清空.bash_history文件的内容
  • 退出终端时会把内存中的命令写到.bash_history文件中

命令补全及别名

  • tab键,敲一下会补全能唯一确定的一个命令,敲两下列出可选的命令
  • 命令参数补全,安装bash-completion,安装完成后需要重启系统才能生效(CentOS7支持)
  • alias 别名 # 给命令重新起个名字
  • 各用户都有自己配置别名的文件 ~/.bashrc,另外的别名配置文件在目录/etc/profile.d/下
  • 自定义的alias放到 ~/.bashrc
[root@centos01 ~]# alias cat1='cat 1.txt'
[root@centos01 ~]# cat1
1
[root@centos01 ~]# unalias cat1
[root@centos01 ~]# cat1 # 取消别名
-bash: cat1: command not found

通配符、输入输出重定向

  • ls *.txt # *通配任意个字符
  • ls ?.txt # ?表示一个任意字符
  • ls [0-9].txt # [0-9] 取0到9之间的任意一个
  • ls {1,2}.txt # 列出1.txt和2.txt 等价于 [12].txt
  • cat 1.txt > 2.txt # 把命令cat 1.txt输出的内容直接写到2.txt(重写前会清空2.txt) -cat 1.txt >> 2.txt # 把命令cat 1.txt输出的内容追加写到2.txt(重写前不会清空2.txt)
  • ls aaa.txt 2>err # 命令ls aaa.txt产生的错误信息输入到err文件
  • ls aaa.txt 2>>err # 命令ls aaa.txt产生的错误信息追加输入到err文件
  • wc -l < 1.txt # 输入重定向,左边必须是命令
  • command > 1.txt 2>&1 # command执行的正确和错误结果输出到1.txt,其中&1表示标准正确输出目标,而命令command > 1.txt已经定义了正确输出的文件1.txt,所以&1指代1.txt
[root@centos01 ~]# ls
1.txt  anaconda-ks.cfg  a.txt  d0917  link_test  s_link0.log  test.txt
[root@centos01 ~]# ls *txt
1.txt  a.txt  test.txt
[root@centos01 ~]# ls
1.txt  anaconda-ks.cfg  a.txt  d0917  link_test  s_link0.log  test.txt
[root@centos01 ~]# ls aaaa.txt 2>err.txt
[root@centos01 ~]# cat err.txt
ls: cannot access aaaa.txt: No such file or directory
[root@centos01 ~]#
[root@centos01 ~]# ls aaaa.txt >> err.txt
ls: cannot access aaaa.txt: No such file or directory
[root@centos01 ~]# cat err.txt
ls: cannot access aaaa.txt: No such file or directory
[root@centos01 ~]#
[root@centos01 ~]# ls
1.txt  anaconda-ks.cfg  a.txt  d0917  err.txt  link_test  s_link0.log  test.txt
[root@centos01 ~]# ls {1,2}.txt
ls: cannot access 2.txt: No such file or directory
1.txt
[root@centos01 ~]# ls {1,2}.txt > err.txt
ls: cannot access 2.txt: No such file or directory
[root@centos01 ~]# cat err.txt
1.txt
[root@centos01 ~]# ls {1,2}.txt &> err.txt
[root@centos01 ~]# cat err.txt
ls: cannot access 2.txt: No such file or directory
1.txt
[root@centos01 ~]# ls {1,2}.txt &> err.txt
[root@centos01 ~]# cat err.txt
ls: cannot access 2.txt: No such file or directory
1.txt
[root@centos01 ~]# ls {1,2}.txt &>> err.txt
[root@centos01 ~]# ls {1,2}.txt &>> err.txt
[root@centos01 ~]# cat err.txt
ls: cannot access 2.txt: No such file or directory
1.txt
ls: cannot access 2.txt: No such file or directory
1.txt
ls: cannot access 2.txt: No such file or directory
1.txt
[root@centos01 ~]# ls {1,2}.txt > res.txt 2>err.txt
[root@centos01 ~]# cat res.txt
1.txt
[root@centos01 ~]# cat err.txt
ls: cannot access 2.txt: No such file or directory

[root@centos01 ~]# ls {1,2}.txt > ttt.log 2>&1
[root@centos01 ~]# cat ttt.log
ls: cannot access 2.txt: No such file or directory
1.txt
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!