header-bg.jpg
bash 基础特性及文本查看命令
发表于 2019-06-15 11:14
|
分类于 Linux
|
评论次数 0
|
阅读次数 402

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 命令执行成功后,将返回列表数据。如下图:

$?.png

如果需要引用命令的执行结果使用 $(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...

效果如下图:

stat.png

touch 命令

上图可以看到使用 stat 命令后会输出一些关于文件的元数据,其中包含 AccessModifyChange 3 个时间戳。

顾名思义,Access 代表文件最后一次被访问的时间,Modify 代表文件内容最后一次被修改的时间,Change 代表文件元数据最后一次被修改的时间(也就是说 AccessModify 任意一个被修改,Change 就会同时更新为最后一次被修改的时间)。

当然我们也可以主动更改前 2 个时间戳( Change 无法主动更改,系统会自动更新),使用 touch 命令即可。

格式:touch [OPTION]... FILE...

OPTION:

-c:该命令默认情况,文件路径不存在时会主动创建一个空文件,若使用 -c 选项则不会主动创建。

-a:该命令默认情况,会同时修改所有的时间戳,若使用 -a 选项则只修改 Access 时间戳。

-m:该命令默认情况,会同时修改所有的时间戳,若使用 -m 选项则只修改 Modify 时间戳

-t:该命令默认情况,会修改时间戳为当前时间,若使用 -t 选项则可以指定时间,格式为:
[[CC]YY]MMDDhhmm[.ss],例如修改 error.logAccess 时间戳Modify 时间戳2019 年 6 月 16 日 0 时 0 分 0 秒touch -t 1906160000.00 error.log

发布评论
还没有评论,快来抢沙发吧!