type
status
date
slug
summary
tags
category
icon
password
Property
计算机硬件是由运算器、控制器、存储器、输入/输出设备等共同组成的,而让各种硬件设备各司其职且又能协同运行的东西就是系统内核。Linux系统的内核负责完成对硬件资源的分配、调度等管理任务。
系统内核对计算机的正常运行来讲是太重要了,一般不建议直接去编辑内核中的参数,而是让用户通过基于系统调用接口开发出的程序或服务来管理计算机,以满足日常工作的需要。
Shell就是这样的一个命令行工具。Shell(也称为终端或壳)跟 kernel(内核)相对应,比喻内核外面的一层,充当的是人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端,它就会调用相应的程序服务去完成某些工作。
首先,Shell 是一个程序,提供一个与用户对话的环境。这个环境只有一个命令提示符,让用户从键盘输入命令,所以又称为命令行环境(command line interface,简写为 CLI)。Shell 接收到用户输入的命令,将命令送入操作系统执行,并将结果返回给用户。
其次,Shell 是一个命令解释器,解释用户输入的命令。它支持变量、条件判断、循环操作等语法,所以用户可以用Shell命令写出各种小程序,又称为脚本(script)。这些脚本都通过 Shell 的解释执行,而不通过编译。
Shell 有很多种,只要能给用户提供命令行环境的程序,都可以看作是 Shell,主要的 Shell 有下面这些:
- Bourne Shell(sh)
- Bourne Again shell(bash)
- C Shell(csh)
- TENEX C Shell(tcsh)
- Korn shell(ksh)
- Z Shell(zsh)
- Friendly Interactive Shell(fish)
Bash是目前最常用的 Shell。查看当前设备的默认 Shell:
当前正在使用的
Shell
不一定是默认Shell
,一般来说,ps
命令结果的倒数第二行是当前Shell
:查看当前的
Linux
系统安装的所有Shell
:Linux 允许每个用户使用不同的 Shell,用户的默认 Shell 一般都是 Bash,或者与 Bash 兼容。
命令行环境
如果是不带有图形环境的 Linux 系统(比如专用于服务器的系统),启动后就直接是命令行环境。不过,现在大部分的 Linux 发行版,尤其是针对普通用户的发行版,都是图形环境。用户登录系统后,自动进入图形环境,需要自己启动终端模拟器,才能进入命令行环境。
所谓“终端模拟器”(terminal emulator)就是一个模拟命令行窗口的程序,让用户在一个窗口中使用命令行环境,并且提供各种附加功能,比如调整颜色、字体大小、行距等等。
不同 Linux 发行版(准确地说是不同的桌面环境)带有的终端程序是不一样的,比如 KDE 桌面环境的终端程序是 konsole,Gnome 桌面环境的终端程序是 gnome-terminal,用户也可以安装第三方的终端程序。所有终端程序,尽管名字不同,基本功能都是一样的,就是让用户可以进入命令行环境,使用 Shell。
命令行提示符
进入命令行环境以后,用户会看到 Shell 的提示符。提示符往往是一串前缀,最后以一个美元符号
$
结尾,用户可以在这个符号后面输入各种命令。完整的提示符是
[user@hostname] $
,其中前缀是用户名(user
)加上@
,再加主机名(hostname
)。比如,用户名是bill
,主机名是home-machine
,前缀就是bill@home-machine
。注意,根用户(root)的提示符,不以美元符号(
$
)结尾,而以井号(#
)结尾,用来提醒用户,现在具有根权限,可以执行各种操作,务必小心,不要出现误操作。进入和退出方法
进入命令行环境以后,一般就已经打开 Bash 了。如果 Shell 不是 Bash,可以输入
bash
命令启动 Bash。退出 Bash 环境,可以使用
exit
命令,也可以同时按下Ctrl + d
。Bash 的基本用法就是在命令行输入各种命令,可以输入
pwd
命令。按下回车键,就会显示当前所在的目录。如果不小心输入了
pwe
,会返回一个提示,表示输入出错,没有对应的可执行程序。用户可以通过
bash
命令的--version
参数或者环境变量$BASH_VERSION
,查看本机的 Bash 版本。命令格式
命令行环境中,主要通过使用 Shell 命令,进行各种操作。Shell 命令基本都是下面的格式:
命令对象一般是指要处理的文件、目录、用户等资源;
命令参数可以用长格式(完整的选项名称),也可以用短格式(单个字母的缩写),两者分别用--与-作为前缀。
空格
Bash 使用空格(或 Tab 键)区分不同的参数。
上面命令中,
foo
和bar
之间有一个空格,所以 Bash 认为它们是两个参数。如果参数之间有多个空格,Bash 会自动忽略多余的空格。分号
分号(
;
)是命令的结束符,使得一行可以放置多个命令,上一个命令执行结束后,再执行第二个命令。上面例子中,Bash 先执行
clear
命令,执行完成后,再执行ls
命令。注意,使用分号时,第二个命令总是接着第一个命令执行,不管第一个命令执行成功或失败。
命令的组合符&&
和||
除了分号,Bash 还提供两个命令组合符
&&
和||
,允许更好地控制多个命令之间的继发关系。快捷键
Ctrl + L
:清除屏幕并将当前行移到页面顶部。
Ctrl + C
:中止当前正在执行的命令。
Shift + PageUp
:向上滚动。
Shift + PageDown
:向下滚动。
Ctrl + U
:从光标位置删除到行首。
Ctrl + K
:从光标位置删除到行尾。
Ctrl + W
:删除光标位置前一个单词。
Ctrl + D
:关闭 Shell 会话。
↑
,↓
:浏览已执行命令的历史记录。
Bash 还具有自动补全功能。命令输入到一半的时候,可以按下
Tab
键,Bash 会自动完成剩下的部分。比如,输入tou
,然后按一下 Tab 键,Bash 会自动补上ch
。除了命令的自动补全,Bash 还支持路径的自动补全。有时,需要输入很长的路径,这时只需要输入前面的部分,然后按下 Tab 键,就会自动补全后面的部分。如果有多个可能的选择,按两次 Tab 键,Bash 会显示所有选项,让你选择。