bash 基础特性
命令补全
shell 程序在接受到用户执行命令的请求,分析完成后,最左侧的字符串会被当做命令。
命令查找机制:
先查找内建命令,再根据 PATH 环境变量
中设定的目录,自左而右逐个搜索目录下的文件名。给定的打头字符串如果能唯一标识某命令程序文件,则直接补全;如果不能,则再按 Tab 键
一次,将给出命令程序列表。
路径补全
在给定的起始路径下,以对应路径下的打头字符串来逐一匹配起始路径下的每个文件。如果能唯一标识某目录或文件,则直接补全;如果不能,则再按 Tab 键
一次,将给出文件列表。
命令行展开
~
:自动展开为用户的家目录,或指定的用户的家目录。
{}
:可承载一个以逗号分隔的路径列表,并且能够将其展开为多个路径。例如:/tmp/{a,b}
相当于 /tmp/a /tmp/b
。
示例:
# 一条命令同时创建 4 个目录 /tmp/x/y1、/tmp/x/y2、/tmp/x/y1/a、/tmp/x/y1/b:
mkdir -p /tmp/x/{y1/{a,b}, y2}
# 一条命令同时创建 4 个目录 a_b、a_d、c_b、c_d:
mkdir {a, c}_{b, d}
命令的执行状态
命令的执行状态分为成功和失败,bash
通过返回值来输出这两个状态:
成功:0
失败:1 至 255
命令执行完成后,其状态返回值保存于 bash
的特殊变量 $?
中。
很多命令执行成功后,会返回其命令自身功能的返回值,根据功能不同,返回值各不相同,例如 ls
命令执行成功后,将返回列表数据。如下图:
如果需要引用命令的执行结果使用 $(COMMAND)
或 `COMMAND`
引用
bash 的引用分为以下 3 种:
强引用:
''
弱引用:
""
命令引用:
$(COMMAND)
或`COMMAND`
可以看出,强引用和弱引用的用法和 PHP 是一样的,单引号不解析变量,双引号解析变量。
示例:
# 根据当前时间创建一个目录,格式为:时-分-秒(即 00-00-00)
mkdir `date +%H-%M-%S`
mkdir $(date +%H-%M-%S)
快捷键
Ctrl 键 + a 键
:跳转至命令行首。
Ctrl 键 + e 键
:跳转至命令行尾部。
Ctrl 键 + u 键
:删除行首至光标所在处之间的所有字符(包含光标所在字符)。
Ctrl 键 + k 键
:删除行尾至光标所在处之间的所有字符(包含光标所在字符)。
Ctrl 键 + l 键
:清屏,相当于 clear
命令。
文本查看类命令
cat、tac、head、tail、more、less
more
命令
使用格式:more [options] file [...]
特点:翻屏至文件尾部后自动退出。
less
命令
man
命令查看手册时调用的就是 less
命令,所以使用此命令查看文本,和使用 man
命令查看手册时相关用法相同,在此不再作过多说明。
使用格式:less file
head
命令
主要用来查看一个文件的头部(前 N 行,默认是 10 行)。
使用格式:head [OPTION]... [FILE]...
options:
-n #
:想要查看的行数,例如:head -n 20
即可查看前 20 行。
-#
:和-n
一样,例如:head -20
即可查看前 20 行。
tail
命令
主要用来查看一个文件的尾部(后 N 行,默认是 10 行)。
使用格式:tail [OPTION]... [FILE]...
options:
-n #
:想要查看的行数,例如:tail -n 20
即可查看前 20 行。
-#
:和-n
一样,例如:tail -20
即可查看前 20 行。
-f
:查看文件尾部内容结束后不会退出,而是跟随显示新增的行。
stat
命令
显示文件或文件系统的状态(display file or file system status)。
使用格式:stat [OPTION]... FILE...
效果如下图:
touch
命令
上图可以看到使用 stat
命令后会输出一些关于文件的元数据,其中包含 Access
、Modify
和 Change
3 个时间戳。
顾名思义,Access
代表文件最后一次被访问的时间,Modify
代表文件内容最后一次被修改的时间,Change
代表文件元数据最后一次被修改的时间(也就是说 Access
和 Modify
任意一个被修改,Change
就会同时更新为最后一次被修改的时间)。
当然我们也可以主动更改前 2 个时间戳( Change
无法主动更改,系统会自动更新),使用 touch
命令即可。
格式:touch [OPTION]... FILE...
OPTION:
-c
:该命令默认情况,文件路径不存在时会主动创建一个空文件,若使用-c
选项则不会主动创建。
-a
:该命令默认情况,会同时修改所有的时间戳,若使用-a
选项则只修改 Access 时间戳。
-m
:该命令默认情况,会同时修改所有的时间戳,若使用-m
选项则只修改 Modify 时间戳
-t
:该命令默认情况,会修改时间戳为当前时间,若使用-t
选项则可以指定时间,格式为:
[[CC]YY]MMDDhhmm[.ss]
,例如修改error.log
的Access 时间戳
和Modify 时间戳
为2019 年 6 月 16 日 0 时 0 分 0 秒
:touch -t 1906160000.00 error.log