关于shell,一个广义的解释就是在用户与操作系统之间,提供一个工具或接口给用户来操作计算机系统;用户在shell中通过输入命令行,按下回车键,shell执行命令后就能返回结果,达到操作计算机的效果。
但有很多人会问,为什么要学习shell呢?以下是我对为什么要学习shell的看法:
而shell有很多种:Bourne Shell, C Shell,Korn Shell,Bourne-again Shell,TENEX C Shell等,通过命令cat /etc/shells可以查看系统支持哪些shell:
System Support Shell.png
Linux/Unix默认都是使用Bash(Bourne-again Shell),但我更倾向于使用zsh,但由于配置过于复杂,前期很少人使用,但后来有外国程序员弄出一个Oh My ZSH来管理zsh的配置和支持更多插件,使得zsh变得更容易使用和更加强大。
zsh shell.png
Shell有哪些功能
命令历史记录
一旦你在shell敲入正确命令并能执行后,shell就会存储你所敲入命令的历史记录(存放在~/.bash_history文件),方便你再次运行之前的命令。
你可以按方向键↑和↓来查看之前执行过的命令
Shell Command History.gif
可以用!!来执行上一条命令,但最常用还是使用ctrl-r来搜索命令历史记录
Shell Search Command History.gif
命令和文件补全(按tab键)
当你输入命令或文件名时,你可以通过按tab键来补全命令或文件名,这样可以让你更快敲入命令和敲入正确的命令。
有时你忘记具体某个命令,但你记住命令开头的几个字母是gi,可以敲入字母gi,按tab键来显示与前几个字母有关的所有命令:
Shell Command Complete.gif
当用cd命令前往某个目录时,你不必敲入整个路径的所有目录名,你只需敲入目录前几个字母,然后按tab键逐个补全目录名即可。
Shell Auto Complete Dir.gif
命令别名
命令别名是一个比较有用的东西,特别适应用于简化命令输入。比如,你要更新cocoapods时,在shell输入以下命令行
pod update --verbose --no-repo-update但每次都输入这么长的命令行,多么麻烦啊。所以,这时使用命令别名来简化命令行的输入:
alias pod_update='pod update --verbose --no-repo-update'下次你只需要输入pod_update就可以更新cocoapod
你可以使用alias命令来显示所有命令别名
list all alias .png
任务控制(job control)
使用shell登陆系统后,想要一边复制文件、一边查找文件、一边进行编译代码、一边下载软件,当然可以通过开启多个shell来完成,但如果想只在一个shell来完成以上多个任务时,此时可以使用shell的一个特性任务控制。
在学会如何使用命令来控制任务之前,先了解两个概念:前台(foreground)和后台(background)。前台就是出现提示符让用户操作的环境,而后台就是不能与用户交互的环境,你无法使用 ctrl-c 终止它,可使用 bg/fg 呼叫该任务。
下面介绍一些命令如何控制任务:
1. 将任务放在后台运行:命令行 + &