博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell介绍,命令历史,命令补全和别名,通配符,输入输出重定向
阅读量:7297 次
发布时间:2019-06-30

本文共 1780 字,大约阅读时间需要 5 分钟。

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

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

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

8.2 命令历史

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

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

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

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

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

 


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

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

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

具体操作如下:

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

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

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

 


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

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

 

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

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

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

8.3 命令补全和别名

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

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

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

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

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

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

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

取消自定义的别名:

8.4 通配符

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

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

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

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

8.5 输入输出重定向

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

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

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

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

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

&>> 就能追加内容:

还有以下这种用法:

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

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

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

你可能感兴趣的文章
可能是目前轻量级弹幕控件中功能最强大的一款
查看>>
SpringCloud Ribbon源码探索学习
查看>>
[Redis源码阅读]redis持久化
查看>>
分布式系统开发——调度技术
查看>>
Js传递数组参数到后台controller的方式
查看>>
前端日拱一卒D9——ES6笔记之基础篇
查看>>
Qtum量子链作客第四届拉美商业科技大会
查看>>
volatile变量与普通变量的区别
查看>>
[MetalKit]34-Working-with-memory-in-Metal内存管理
查看>>
@ngrx入坑angular的schema,爽的一逼!
查看>>
教你用JS手写简单的秒表(精确到10ms,没有延迟)
查看>>
vue.js响应式原理解析与实现
查看>>
Block
查看>>
Android 导航栏如何轻松搞定
查看>>
LeetCode 406 Queue Reconstruction by Height
查看>>
dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire
查看>>
Android-MeasureSpec那些事
查看>>
聊聊flink的logback配置
查看>>
开发了个 Flipper 调试工具的 Flutter 版本 SDK,让 Flutter 应用调试起来更容易
查看>>
spring cloud config将配置存储在数据库中
查看>>