如果你用非图形化界面登陆,那么登陆系统之后默认会启动一个shell.一般来说会启动bash(也可以通过配置设置成别的文件).
如果用图形化界面启动了系统,那么就需要先启动虚拟终端.一般来说虚拟终端一启动就会自动在其中打开一个shell.
进入bash后$
或者#
之前的内容为shell提示符($
表示普通用户,#表示管理员用户)。在其后输入命令,回车执行。
例如输入:
exit
会退出bash.
输入
bash
会启动一个新的bash(注意是多了一个bash进程,而不一定会对应地创建一个新的虚拟终端窗口).
在命令之后空一格(或者若干空格)然后再写上的非空格的内容就是调用这个命令时候的参数.参数用于表示命令操作的对象,选择命令功能或者配置命令行为等.
例如bash有内置命令help.把bash的内置命令名当作help的参数,help就会返回相关的帮助信息.例如:
help help
注意,help命令(或者man,info等其他帮助信息工具)显示出来的帮助信息中,关于命令和命令参数的时候格式的语法规则是用简化的EBNF写的.
如果调用help的时候没有任何参数,则会返回全部bash内置命令的列表.
用bash启动一个新bash的时候也可以后接参数.但是这些功能相对不常用,我就不介绍了.另外注意bash这个命令本身不是bash的内置命令.
刚刚提到一个'bash内置命令'的概念.现在来简单解释一下.
在bash中,输入一个字符串然后回车,bash就会执行这个命令.实际上bash在字符串之间和程序之间建立了一种对应关系,可以简单认为bash有一个表格文件会记录这种对应.输入一个字符串后,bash就会去查表,如果查到了就执行对应的程序.如果没有查到就返回一些错误信息.
在Linux上安装程序后,这些程序一般都会去bash的那个表格文件里登记一下.用一个预设的字符串(一般是软件名或者软件名简写)来对应到自己的可执行文件上.这样安装完成后用户输入刚刚登记的字符串就能启动那个刚刚安装的程序.
我们也可以自己修改这个表格,从而改变命令和程序之间的对应关系或者新增,删除一些对应关系.
然而,归根结底.bash中的命令其实都是可执行文件的快捷调用方式.不论有没有为一个可执行文件登记对应命令,我们都可以通过直接输入可执行文件的路径来执行它.比如启动一个新bash,可以直接输入其安装路径来启动:
/bin/bash
效果和仅仅输入bash一样.bash把'bash'这个字符串对应到了'/bin/bash'这个可执行文件上.
除了绑定可执行文件的命令.还有一类命令是不需要绑定具体文件的.即使你的计算机上除了bash,其他什么可执行文件都没装也是能用的.这类命令就来自于bash本身.当输入这个命令之后会启动bash自身的一些功能.就比如help命令.其实没有一个单独的可执行文件和help命令对应,显示帮助信息是bash自带的功能.
当然,输入一个字符串后,bash其实还会在特定路径下进行搜索,并且尝试执行搜到的可执行文件或者脚本.这个我们后续再详细介绍.
这里介绍一个工具命令type.它也是一个需要参数的内置命令.把别的命令(不管是不是内置的)名当作type的参数.type就会显示这个命令的类型,可执行文件位置等信息.例如:
type bash
type type
除此之外,还可以使用which命令来查看命令来源(如果命令是一个别名,则显示其代表的原命令).例如:
which which
which type
which ls
使用whereis命令可以同时查出命令的可执行文件位置和帮助文件位置.例如:
whereis ls
这是bash的内置命令.
如果一条命令输入了一般或者开头几个字符,你可以直接按Tab键进行自动补全(bash自动猜测你要输入的命令并且自动填充). 当有多个可能的匹配项目时,连续按两下TAB键,就会显示所有备选项目.
对于命令参数,文件路径等也可用这个自动补全功能.但是bash本身的补全并不算太智能,有的情形是不能很好地不全的.一些拓展和插件可以解决这个问题.换用zsh也是一个不错的解决方案.
bash还增加了一些快捷键,来使得工作更高效.使用快捷键本质上是在调用bash内置的函数来实现功能.例如C-l(Ctrl键加l)就有清空屏幕功能.
另外,光标左右移动,删除字符,删除行,粘贴等大部分快捷键同emacs。emacs用于上下移动光标的快捷键在bash中用于翻找命令输入记录。如果想要查看全部bash历史记录,可以使用history命令.
关于历史记录我这里简单介绍一下.bash会记录你输入的命令.比如刚刚键入执行了type bash
,现在你想再执行一遍.这时就无需重复输入,使用向上的方向键或者快捷键,上一次输入的命令就会自动复制过来.按回车就可以执行.
连续按向上的方向键可以不断往前翻找,向下的方向键则是向后翻找.
以上介绍的是bash处于emacs模式时的快捷键。vi模式会不同。要把bash设置为vi模式,需要用到set命令。
set -o vi
如果要改回emacs式就用
set -o emacs
另外说明一下.使用compgen、complete、compopt三个命令可以编写自己的自动补全匹配规则。但是由于这本身就可以独立算作一门小语言,在此不做详细介绍。
已经有人编写了很多自动补全规则的shell脚本。bash-completion就是其中之一。其中预编写了许多自动补全匹配规则。
对于bash的内置命令来说,这两种写法一般是等价的
builtin pwd
pwd
但是,在一些特殊情况下,如果直接写内建命令名不能使用.可以通过加builtin的版本来调用内建命令.
使用util-linux的cal
命令可以查看日历.使用Coreutils的date
命令可以查看当前的日期,时间等.
使用命令arch
可以查看计算机硬件信息.此类的命令还有nproc
, uname
, hostname
, hostid
, uptime
等.
如果屏幕上显示了太多文字,你想清除这些文字。可以使用clear
命令。(这个命令不属于Coreutils,而是ncurses库提供的。)