• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

Linux Shell全面介绍

系统管理 彭东稳 9年前 (2015-08-25) 29603次浏览 已收录 0个评论

一、Shell

通常我们操作系统有图形界面(GUI)和命令界面(CLI)。

Linux 中常用 GUI 有GnomeKDEXfacexwindow协议)。

Linux 中常用 CLI 有bshcshksh(商业化也有社区版bash(bshcshksh的功能;也是Linux默认shell)zsh(最新的功能非常强大)。

查看 Linux 支持的 Shell。

Shell 称为命令解释器,通常是用户与操作系统交互的界面。在 Redhat 系列发行版系统中,bash 就是实现 shell 的其中一种程序。Bash 自身是一个外部程序但是当它启动之后就会有一些内部命令,bash 也是一个进程。每一个用户或是一个用户登录多次就会开启多个 bash 也是多个进程但是每一个进程之间的 PID 号不同,在每个进程看来;当前主机上只有内核和当前进程,进程同时是程序的副本是程序执行的实例。每个用户登录的 shell 的工作环境都可以是不同的做装饰,在一个 bash 中可以打开子 shell 如 cshksh 或是 bash 等。

二、Bash特性(man bash)

1. 支持命令历史

Bash会自动记录过去曾经执行过的命令,并保存在一段内存的缓冲区中,当用户正常退出系统之后,内存缓冲区中的那些命令就会追加到用户家目录隐藏文件.bash_history中。默认保存1000条,其对应的环境变量为“echo $HISTSIZE”。

支持的命令如下:

另外很多发行版的默认的history是没有用户和操作时间的,这个对于需要查看原来的操作内容的时候就提供了麻烦,man 了下history,发现有个变量是可以设定history这个显示格式的,这个变量就是HISTTIMEFORMAT,使用方法如下:

然后就可以看到带有用户和时间的history了,把这个保存到当前用户的.bash_profile里面,就可以开机自动加载了。

另外使用history还有一个非常实用的功能,就是CTRL+R组合键,会出现如下提示符:

在提示符内输入相应的任意字符,可以进行历史命令搜索匹配显示,然后直接回车,就会执行匹配到的命令。

2. 支持命令补全

命令补全:搜索PATH环境变量所指定的每个路径下以我们给出的字符串开头的可执行文件,如果多于一个,两次tab,可以给出列表,否则将直接补全。

路径补全:搜索我们给出的起始路径下的每个文件名并试图补全。

3. 支持管道符“|

|”管道是Linux系统提供的多任务协调机制的一种,应用十分广泛。管道可分为匿名和命名两种,但是不管怎样它们都拥有一个共同的特性,就是数据只能从管道的一端写入并从另一端读取,而且读出的顺序与写入的顺序是相同的。所以管道也叫做FIFO(first input first output)

如命令:

这条命令就是通过echo输出字符串redhat,然后通过管道送给root当密码使用;其中–stdin表示标准输入。还有stdout表示标准输出,stderr表示错误输出。

4. 支持I/O重定向

I/O重定向也是Linux中提供的一种多任务协调机制,所谓I/O重定向,就是把输出给A的东西重定向给B,或者反过来说将要从A处获得的输入重定向到B处去获得了。

常用定向符如下:

5. 支持命令别名

shell中定义的别名仅在当前shell生命周期中有效;别名的有效范围仅为当前shell进程

支持的别名命令如下:

6. 命令替换“$()

命令替换在shell中就是把此命令中某个子命令的执行结果作为此命令的执行对象,如:

7. 支持命令行编辑

8. 支持文件名通配

*:匹配任意长度的任意字符

?:配置任意单个字符

[]:配指定范围内的指定字符,大概有以下这些(man 7 glob可以查看帮助)

案例:

[^]:匹配指定范围外的所有字符

9. 管理员和普通用户登录格式

10. 支持变量变量是什么后面有讲)

11. 截取一个变量的字符串

12. 取一个变量的子串

13. 查看变量的字符个数

14. 元字符:元字符是有特殊含义的特殊字符,shell遇到这类字符会先做翻译而不是直接把它们传递给命令

15. 转义符

{}:花括号是用在当变量名称容易和紧跟其后的其他字符相混淆时

” “:双引号主要起一个界定字符串的作用当要赋值的内容中包括空格时,不会识别不了

‘ ’:单引号表示变量中赋值的内容有$\等特殊含义字符会视为普通字符显示(在单引号范围内不能引用其他的变量、$视为普通的字符)

` `:反撇号用于主要命令替换允许将执行某个命令的屏幕输出的结果赋值给变量、反撇号扩起来的内容必须是能够执行的命令行

$(): 使用反撇号难以在一行命令中实现嵌套命令替换操作这时可以用$()来代撇号

还有如:

16. 逻辑运算符

案例:

17. 支持编程(就是shell脚本编程


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (0)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!