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

简介:

Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)shell类似于DOS下的command和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。Linux下的shell有很多种,CentOS7默认shell为bash。

  如果想安装zsh、ksh可以使用命令搜索,然后选择合适的版本安装:

wKioL1njP5mxLniZAAcD8_8cITc461.png


  同时shell又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。在排序算法中,shell是希尔排序的名称。




8.2 命令历史

wKioL1njP5_woJJ8AAu5pGBoyfI760.png


众所周知CentOS中使用键盘向上方向键可以查看历史使用过的命令,实际上这些历史命令是在用户家目录下的一个叫.bash_history的文件中存放着,可以使用cat命令查看一下:

wKiom1njQlWCz0pgAAENhZu-hwc407.png


使用history命令可以查看到这个文件存放了多少条历史命令:

wKioL1njP6HDtVmVAAOwRAHofmQ224.png


这个文件最大可以存一千条历史命令,这个数量是由一个HISTSIZE环境变量决定的:

wKiom1njQleQ8We0AAFPIFKMRiU991.png


  history -c命令可以把当前内存的历史命令清空,这条命令仅清空内存中的历史命令,.bash_history文件立的历史命令不会被清空:

wKioL1njP6HBz2naAACaVy3YOhA223.png


只有当退出终端的时候,内存中的历史命令才会保存到.bash_history文件里。

 


etc目录下的profile文件中可以定义HESTSIZE环境变量:

wKiom1njQljzjH7qAAIQ5aBOVY4109.png

修改完后可以使用source /etc/profile 命令让文件生效。


如果想要记录历史命令的时候还能记录这些命令的执行时间的话,可以重新赋值一下环境变量:

具体操作如下:

HISTTIMEFORMAT=“%Y/%m%d %H:%M:%S ”

wKioL1njP6LCmAdgAAIfcg2vwY0402.png

wKiom1njQlrgoNlIAAPsraPxKlY059.png


因为以上定义环境变量方式只在当前终端下有效,如果打开新的终端就不存在此环境变量了,如果想要在所有的终端都生效的话,需要把这个环境变量配置进etc目录下的profile文件中:

wKiom1njQl3Ddu8qAAZODPtzISg658.png

修改完后,重新登录终端就可以生效了。

 


想要永久保存.bash_history文件中的内容,只需要授予a权限即可:

wKioL1njP6eDAwpOAAEZWXfF49c981.png


注意:如果不是正常退出终端的话,内存中的历史命令会保存不全,或者不会被保存。

 

!!可以执行上一条执行的命令,例如我先执行一条ls命令然后再执行!!

wKioL1njP6igeo5aAAFbdVFEhPM546.png


!+数字可以指定运行某条命令,例如我指定运行第10条命令:

wKiom1njQmHzLZFNAAYf7y8JMrs905.png


!+命令字符串的话,会倒序往上找到那个命令并执行:

wKiom1njQmPBBLcDAAaihcmA6wo828.png




8.3 命令补全和别名

wKioL1njP7GRUMmEAAjPrEwplQc595.png



  敲一下Tab键可以补全命令或者文件目录的名称,当一个命令或文件目录的名称有一个以上时,按两下Tab键可以列出这些命令的名称和文件目录的名称:

wKioL1njP7GzjFYgAANBFdZlM3g604.png


CentOS7可以自动补全命令的参数,但是默认是不支持的,需要安装一个工具:

wKiom1njQmjSdHFuAAEyUU7N0Qg116.png


安装完这个包后,需要重启操作系统后才能生效。

wKiom1njQmniifYSAAIiRlVB9O0052.png

wKioL1njP7Tj7ALpAAJdHmPvf7Y655.png


当一个命令太长的时候,可以给这条命令起一个简化的别名,以方便使用:

wKioL1njP7WyFNh-AAJZuczGzeE476.png


输入alias可以查看系统里的命令别名:

wKioL1njP-vSktZ-AAbyldHHTWI738.png


用户家目录下的.bashrc文件里只存放了最基本几个命令别名:

wKioL1njP-ywHG6GAAPoLGF-4FY756.png


剩下的大部分别名相关文件都在etc目录下的profile.d目录里放着:

wKiom1njQqPgkX--AAJw6-YjzNs737.png


取消自定义的别名:

wKiom1njQqOyhl9fAAHCp8JhMTI059.png




8.4 通配符

wKioL1njP_fQsde4ABBMrLY7n2s514.png



*表示通配,也就是任意字符都可以的意思:

wKioL1njP_iA9O3QAAHNVIkGmok382.png

wKiom1njQq7yucx9AADJ680XlVQ380.png


?表示任意一个字符,仅限单个字符,一个以上的字符则不包括,*则是包括多个字符的:

wKioL1njP_nQQmJyAAK2UPs192U728.png


方括号里可以指定一个范围:

wKiom1njQq-TpIXhAADvw7vcwtE474.png

wKioL1njP_qBiQJuAAD3vLI1odE861.png

wKiom1njQrDCQfYlAAEVVhbAI90960.png


大括号里也可以指定一个范围,类似于方括号的第二种用法,只不过大括号里需要加逗号,相对于方括号看起来要直观一些:

wKioL1njP_uDgWk_AAJAvk_0wWM385.png




8.5 输入输出重定向

  > 就是把前面命令的输出的内容输入到后面这个文件中,会覆盖后面那个文件本身的内容:

wKiom1njQrKTYStFAAKyuKGW-4Q518.png


>> 则不会覆盖后面那个文件的内容,也就是追加的意思:

wKioL1njP_yzvWzBAAGggwtv9aI462.png


2> 会把命令产生的错误信息输出到指定的文件里去,会覆盖指定的文件的内容:

wKiom1njQrPCCj3LAAJnc0kx1Jg178.png


2>> 则不会覆盖指定的文件的内容,也就是追加的意思:

wKiom1njQrSTUMawAAIYR0Y7zks573.png


  &> 是结合了>2>,也就是错误信息和正确信息都会输出到指定内容,并且会覆盖指定文件本身的内容:

wKioL1njP_-AL_XWAAOFVb5AsR8503.png


&>> 就能追加内容:

wKioL1njQAGjDSgzAASZEeRrti4963.png


还有以下这种用法:

wKiom1njQrmx8xAKAARWq_nXQdo589.png


输入重定向,可以把右边文件的内容输入到左边的命令里面去:

wKiom1njQrnCyDvDAAJOO4qgTpg260.png


使用 < 输入重定向时左边必须是命令,如果是文件的话是不行的:

wKioL1njQASCs1FEAAEg1xQd6tY499.png



本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/1972521,如需转载请自行联系原作者

相关文章
|
8天前
|
存储 Shell 分布式数据库
Hbase 的基本shell 命令
Hbase 的基本shell 命令
|
8天前
|
敏捷开发 Shell 测试技术
阿里云云效产品使用合集之如何用私有构建机运行shell命令打出的镜像作为下一个阶段的入参
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
1月前
|
存储 Shell 数据安全/隐私保护
Shell 内建命令:Shell 的内在魔力
Shell 内建命令比外部命令执行快,不需额外进程。`type` 命令用来检查命令类型。内建命令如 `cd`、`alias` 和 `echo` 直接在 Shell 中执行,不涉及磁盘 I/O。`type` 示例展示了 `cd` 是内建的,`ifconfig` 是外部的。`bash` 包含多种内建命令,如 `cd` 用于切换目录,`alias` 定义别名,`read` 从输入读取数据。`echo` 默认加换行,`echo -n` 可避免。
26 5
|
1月前
|
Shell 虚拟化
分布式系统详解--框架(Zookeeper-基本shell命令)
分布式系统详解--框架(Zookeeper-基本shell命令)
26 1
|
1月前
|
安全 Shell Linux
探索Linux命令chsh:更改用户的默认shell
`chsh`是Linux命令,用于更改用户的默认登录shell。它涉及用户环境配置和系统安全,允许用户选择更适合自己的shell以提升效率。命令有交互式选项和参数如`-s`来指定新shell。在使用时要注意新shell的可执行性、权限问题及选择合适的shell。例如,要更改为bash,用户可运行`chsh`后按提示操作,而root用户能用`sudo chsh -s /bin/zsh john`为用户`john`设定zsh。在更改前,确认shell路径、权限,并了解不同shell的特点。
|
1月前
|
分布式计算 Hadoop Shell
分布式系统详解--框架(Hadoop-基本shell命令)
分布式系统详解--框架(Hadoop-基本shell命令)
18 0
|
1月前
|
Unix Shell Linux
Shell 重定向:控制数据流向的艺术
在Unix/Linux中,Shell提供输入输出重定向来灵活控制数据流。了解和运用重定向能提升Shell效率。标准输入(0)、输出(1)和错误输出(2)是基础。`&gt;`用于覆盖输出,`&gt;&gt;`用于追加,而`&lt;`用于改变输入源。错误输出可单独重定向,如`2&gt;`或`2&gt;&gt;`。组合使用如`2&gt;&1`可合并输出和错误到同一文件。输入重定向示例:`cat &lt;&lt;END`读取直到`END`。掌握这些,可高效管理命令输出。
23 0
|
1月前
|
Shell
Shell [[]] 命令:条件判断的升级版
`[[ ]]` 是 Bash 中增强型的条件判断命令,提供比 `[ ]` 更多的灵活性,如无需引号包裹变量、直接字符串比较及正则支持。例如: ```markdown - 不加引号比较:`[[ -z $str1 ]]` - 逻辑运算:`[[ -z $str1 ]] || [[ -z $str2 ]]` - 正则匹配:`[[ $phone =~ ^1[0-9]{10}$ ]]` ``` 它不支持 `-a` 和 `-o`,但能用 `&&` 和 `||` 进行逻辑操作。用于复杂字符串验证和文件处理时非常有用。
22 0
|
15天前
|
JavaScript 前端开发 Shell
Shell 脚本编程保姆级教程(上)
Shell 脚本编程保姆级教程(上)