Bash的常见特性及文本查看命令实战

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bash的常见特性及文本查看命令实战相关的知识,希望对你有一定的参考价值。

bash的基础特性之一:

bash有很多特性能辅助我们完成系统管理

命令历史:shell进程会在其会话中保存此前用户提交执行过的命令

~]# history

我们这个命令第一能保存多少个?第二如果我们系统出现关机了,下次我们在
重启以后这些命令历史还有没有?有的。为什么会有呢?因为它会将命令历史中
运行的命令保存在文件中。如果是正常关机的它都会把缓存中的数据给输出持久
保存于文件当中。为什么会有这个功能?

那我们先来看history
是内部命令还是外部命令,history是一个内嵌命令。因此我们可以理解
history是bash自己所提供的功能,所以就称它为bash特性。

既然是内嵌的命令,刚才说过history到底能保存多少命令?保存在那个文
件中?所有用户的命令历史的视图是一样的吗?我们能不能让普通用户看到
管理员此前执行过什么命令?

当然是不应该能看到的,我们该不该把命令历史保存下来呢?

定制history的功能,可通过环境变量实现:

HISTSIZE: shell进程可保留的命令历史的条数
HISTFILE: 持久保存命令历史的文件

每一个用户登陆时,命令历史它的shell会首先从命令历史
文件中加载此前所有的命令到内存中来,而后新执行的命令就补充在
附加在内存中的命令历史的后面。

命令历史文件不会保存刚刚执行的命令,因为它是在用户shell登录
时自动进行的。

HISTFILESIZE: 命令历史文件的大小

命令用法:
history [-c] [-d [偏移量]] [n]
或 history -anrw [文件名]
或 history -ps 参数[参数...]

-c:清空命令历史
-d offset: 删除指定命令历史
-r: 从文件读取命令历史至历史列表中
-w: 把历史列表中的命令追加至历史文件中
history #: 显示最近的#条命令

调用命令历史列表中的命令:
!#:再一次执行历史列表中的第#条命令
!!: 再一次执行上一条命令
!STRING: 在一次执行命令历史列表中最近一个以STRING开头的命令

注意:命令的重复执行有时候依赖于幂等性
幂等性:多次重复执行不出错

调用上一条命令的最后一个参数:
快捷键:ESC + .
字符串:!$

控制命令历史记录的方式:
环境变量:HISTCONTROL
ignoredups: 忽略重复的命令
ignorespace: 忽略以空白字符开头的命令,这样下次输入命令时以
空格开头就不会被记录自己输入的命令了。
ignoreboth: 以上两者同时生效

修改变量的值:
NAME=VALUE 只对当前shell进程有效

bash的基础特性之二:

命令补全: 使用tab键补充

shell程序在接收到用户执行命令的请求,分析完成之后,最左侧的字符串会被
当作命令。

命令处理机制:
查找内部命令:
根据PATH环境变量中设定的目录,自左向右逐个搜索目录下的文件名;

给定的打头字符串如果能唯一标识某命令程序文件,则直接补全;
不能唯一标识某命令程序文件,再击tab键一次,会给出列表

路径补全:
在给定的起始路径下,以对应路径下的打头字串来逐一匹配起始路径下的每个文件;
tab:
如果能唯一标识,则直接补全;
否则,再一次tab,给出列表;

目录管理类的命令: mkdir,rmdir

mkdir: make directory

mkdir [OPTION]... DIRECTORY.
-p: 自动按需创建父目录;
-v: verbose,显示创建目录详细过程;
-m: MODE:创建目录时直接给定权限;

注意:路径基名方为命令的作用对象,基名之前的路径必须得存在。

rmdir: remove empty directories
仅能用于删除空目录,删除不为空的目录会直接报错。

rmdir [OPTION]... DIRECTORY...

-p: 删除某目录后,如果其父目录为空,则一并删除之;
-v: 显示过程;

问题1:如何创建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b ?
问题2:如何创建a_c,a_d,b_c,b_d?

bash的基础特性之三:命令行展开机制

~: 自动展开为用户的家目录,或指定的用户家目录
: 可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径;
例如:/tmp/a,b 相当于 /tmp/a /tmp/b

问题1:mkdir -pv /tmp/x/y1/a,b,y2
问题2:mkdir a,b_c,d

问题3:创建如下目录结构:
/tmp/mysysroot/
bin
sbin
etc
sysconfig
network-scripts
usr
bin
sbin
local
bin
sbin
etc
lib
lib
lib64
var
cache
log
run

mkdir -pv /tmp/myroot/bin,sbin,etc/sysconfig/network-scripts,usr/bin,sbin,local/bin,sbin,etc,lib,lib,lib64,var/cachae,log,run

├── bin
├── etc
│ └── sysconfig
│ └── network-scripts
├── sbin
├── usr
│ ├── bin
│ ├── lib
│ ├── lib64
│ ├── local
│ │ ├── bin
│ │ ├── etc
│ │ ├── lib
│ │ └── sbin
│ └── sbin
└── var
├── cachae
├── log
└── run


tree命令:
tree [options] [directory]
-L level: 指定要显示的层级

bash的基础特性之四:命令的执行状态结果

每一个命令它执行结束后会显示给我们一个结果,但同时这个命令是执行成功了还是
失败了应该有其中的一种状态显示给我们。命令执行后要么成功要么失败这个是命令
的执行状态结果。

命令执行的状态结果:
bash通过状态返回值来输出此结果:
成功:返回0
失败:1-255非零

命令执行完成后,其状态返回值保存于bash的特殊变量$?中,我们只需要获取这个
变量的返回值就能知道命令执行成功还是失败了。

$?只能获取刚执行命令的状态结果

命令正常执行时,有的还回有命令返回值
根据命令及其功能不同,结果各不相同

引用命令的执行结果:
$(COMMAND)或
`COMMAND` 这个是反引号在键盘的波浪号键上

bash的基础特性之五:引用

强引用: 
弱引用: ""
命令引用: ``,反引号

bash的基础特性之六:快捷键

Ctrl+a: 跳转至命令行行首
Ctrl+e: 跳转至命令行行尾

Ctrl+u: 删除行首至光标所在处之间的所有字符
Ctrl+k: 删除光标所在处至行尾的所有字符

Ctrl+l: 清屏,相当于clear

文件查看类命令: cat,tac,head,tail,more,less

分屏查看命令:more和less


more命令:
more FILE
特点:翻屏至文件尾部后自动退出

less命令:
less FILE

head命令:
查看文件的前N行:
head [options] FILE
-n # //#代表指定查看的行数
-#
tail命令:
查看文件的后N行
tail [options] FILE
-n # //#代表指定查看的行数
-#
-f: 查看文件尾部内容结束后不退出,跟随显示新增的行
监控日志使用

stat命令:
stat -display file or file system status
显示文件或者文件系统的状态

stat FILE..

时间戳
什么意思呢?这里面记录了文件最近一次的访问时间,最近一次的更改时间和
最后一次的改动时间。

Access time: 2020-08-20 16:06:46.919999379 +0800
Modify time: 2020-08-20 16:07:21.936998132 +0800
Change time: 2020-08-20 16:07:21.936998132 +0800

对我们Linux的文件系统来讲,每一个文件都有两类数据。第一类我们称为元数据
第二类称为数据。 元数据我们称为metadata。而数据是data它们有什么
区别,以及是什么意思?

想象一本书,我们拿到一本书这个书前面都是有索引的。索引是书的正常内容吗
不是的。他只是用来能够帮我们快速检索书籍内容的。但是不管怎么讲这些目录或
者索引本身也得使用几页纸来进行存储的,也需要占据空间。所以对这本书来讲几
页目录可以理解为,他其实就是用来描述这个书的很多内容的元数据,就是描述
属性的。而对应的正文部分才叫做数据部分。


文件:两类数据
元数据:metadata
数据:data

访问:读取文件
更改:数据改变
改动:元数据改变

touch命令:
touch- change file timestamps
修改文件的时间戳,只能修改为当前命令执行的时间。

touch [OPTION]... FILE...

-c: 指定的文件路径不存在时不予创建
-a: 仅修改access time
-m: 仅修改modify time
-t: STAMP
[[CC]YY]MMDDhhmm[.ss] 自己指定时间

touch -m -t 02 1201 0303.03
年 月 时 秒

以上是关于Bash的常见特性及文本查看命令实战的主要内容,如果未能解决你的问题,请参考以下文章

bash的常见特性及文本查看命令

10-IO重定向管道及文本处理工具

003-文本处理排序统计及bash特性用户组权限用户管理配置文件

3-2bash特性详解

6.shell脚本基础和grep文本处理工具企业应用

[鸟哥linux视频教程整理]03_02_Linux文件管理类命令及bash特性详解