Linux操作系统 §3:基本命令Ⅱ(Bash常用功能,文件查询)

Posted 秒五

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux操作系统 §3:基本命令Ⅱ(Bash常用功能,文件查询)相关的知识,希望对你有一定的参考价值。

本篇你将掌握的内容(文末有总结全图):

文章目录

3.0 引入

除了文件和目录可以操作外,类似win10里不是有C盘和D盘还有一些双击查看的操作对吧,本章讲的就是Linux下的各个基本的Shell命令,也是基本命令的第二个内容,这章我会尽量用易懂的操作来演示各个功能,概括来说都是对桌面上的file1,file2,file3进行操作,那咱们开始吧!


3.1 补全命令/文件名:[Tab键]

这个功能很简单实用,习惯了之后敲命令飞快还能防止手抖。

  • 单击:补全
  • 双击:显示可能的命令/文件名

    双击tab显示可能的文件或命令

3.2 查看文件 cat/more

3.2.1 cat (concatenate)

3.2.1.1 概念

连接文件并打印到标准输出设备上。

3.2.1.2 示例

显示file1内容

3.2.1.3 参数列表

cat [-AbeEnstTuv] [–help] [–version] fileName
参数说明:
-n 或 --number:由 1 开始对所有输出的行数编号。
-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
-v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。
-E 或 --show-ends : 在每行结束处显示 $。
-T 或 --show-tabs: 将 TAB 字符显示为 ^I。
-A, --show-all:等价于 -vET。
-e:等价于"-vE"选项;
-t:等价于"-vT"选项;


3.2.2 more

3.2.2.1 概念

命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,q退出。

3.2.2.2 示例

逐屏显示.bash_history(命令历史)文件。

3.2.2.3 参数列表

more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames…]
参数:
-num 一次显示的行数
-d 提示使用者,在画面下方显示 [Press space to continue, ‘q’ to quit.] ,如果使用者按错键,则会显示 [Press ‘h’ for instructions.] 而不是 ‘哔’ 声
-l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
-f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
-p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
-c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行
-u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
+/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示
fileNames 欲显示内容的文档,可为复数个数


3.3 给命令起别名:alias

alias lm = ‘ls -al’ →输入lm等同于输入ls -al。


3.4 命令历史:history

3.4.1 文件所在位置

命令历史记录在主目录下的.bash_history

3.4.2 示例

  • history 10:显示最近10条历史命令。

  • !145:执行编号为145的命令。

  • !!:执行上一条历史命令。


3.5 数据流重定向:< ,>,2>

3.5.1 概念

首先我们需要知道,Bash默认已打开的三个流:

  1. stdin标准输入(键盘)
  2. stdout标准输出(屏幕)
  3. stderr标准错误输出(屏幕)

不难理解,我们输入命令通过的就是stdin,屏幕输出通过stdout。

3.5.2 示例

3.5.2.1 输出流重定向 >

我想要保存一条命令(ls)的输出内容到file1,除了复制粘贴外更直接的方法就是输出流重定向,如下

可见ls的输出已经重新定向到file1文件中了。

3.5.2.2 输入流重定向 <

3.5.2.2 错误输出流重定向 2>


因为file4是不存在的(桌面只有file1,file2和file3),所以错误输出被重定向到file3中而不在屏幕上显示。

更加详细的说明可参考:Shell 输入/输出重定向-菜鸟教程


3.6 管道:|

3.6.1 概念

Com1 | Com2 → 将Com1的输出作为Com2的输入。

3.6.2 示例


由于/etc目录下的内容太多,一屏显示不完,所以通过管道 “|”将ls -l /etc命令的输出作为more命令的输入,这样就可以逐屏查看ls -l /etc命令的输出结果。


3.7 命令替换:` `

3.7.1 概念

注:不是单引号,是键盘【~】上的字符。

Com1 `Com2` → 将Com2命令的输出作为Com1命令的输入。

3.7.2 实例(见3.11)


3.8 多个命令一起执行:; && ||

3.8.1 概念

语句含义
Com1 ; Com2无论Com1是否成功,都执行Com2(独立)
Com1 && Com2只有Com1执行成功,才会执行Com2(逻辑与)
Com1 || Com2只有Com1执行失败,才会执行Com2(逻辑或)

3.8.2 示例


3.9 通配符:*,?,[abc]

3.9.1 概念

符号含义
*匹配任意数目的字符
?匹配单个任意的字符
[ ]匹配 [ ] 内的字符。

3.9.2 示例


3.10 正则表达式:[],^, ,+ ⭐

3.10.1 正则表达式是什么?

  • 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")

  • 正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。

3.10.2 正则表达式可以干什么?

  • 测试字符串内的模式
    例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
  • 替换文本
    可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
  • 基于模式匹配从字符串中提取子字符串
    可以查找文档内或输入域内特定的文本。

3.10.3 常用的正则表达式符号

符号含义
^开头
$结尾
[ ]集合字符
.任意一字符
*任意多个字符
限定字符重复个数范围
\\转义字符,字符匹配

3.10.4 示例

表达式含义
^[a-zA-Z]\\w5,17$匹配以字母开头,长度在6-18之间,只能包含字符、数字和下划线的字符串

3.10.5 正则可视化工具

这里强推两个在线工具!

正则表达式可视化工具
正则表达式调试工具

例如3.9.4示例中的正则表达式输入到可视化工具中就有十分通俗易懂的导图了,再也不用担心正则表达式逻辑混乱的问题啦哈哈!


3.11 查找文件命令:find ⭐

3.11.1 概念

通常结合通配符或正则表达式使用,用来查找指定目录下的文件。

3.11.2 示例

  1. 在当前目录下查找文件名为file1的文件。
  2. 在当前目录下查找文件名含file的文件。(运用正则表达式)
  3. 删除在当前目录搜索到的空文件。(运用命令替换)
  4. 删除在当前目录文件名以数字开头的文件。(运用通配符和正则表达式)
  5. 查找/root目录最近2个小时内访问过的一般文件。(运用-amin -120)

3.11.3 参数列表

find path -option [ -print ] [ -exec -ok command ] ;
参数说明 :
find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去n天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去n天内被修改过的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
-type c : 文件类型是 c 的文件。
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 具名贮列
f: 一般文件
l: 符号连结
s: socket
-pid n : process id 是 n 的文件


3.12 其他文件查找命令

3.12.1 locate

3.12.1.1 概念

locate是根据文件名从数据库查找文件或目录,相比find更快,因为find搜索的是磁盘,而locate搜索系统的一个数据库文件

3.12.1.2 示例

查找file1位置。

3.12.1.3 参数列表

locate [-d ][–help][–version][范本样式…]
参数:
-b, --basename – 仅匹配路径名的基本名称
-c, --count – 只输出找到的数量
-d, --database DBPATH – 使用 DBPATH 指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db
-e, --existing – 仅打印当前现有文件的条目
-1 – 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。
-0, --null – 在输出上带有NUL的单独条目
-S, --statistics – 不搜索条目,打印有关每个数据库的统计信息
-q – 安静模式,不会显示任何错误讯息。
-P, --nofollow, -H – 检查文件存在时不要遵循尾随的符号链接
-l, --limit, -n LIMIT – 将输出(或计数)限制为LIMIT个条目
-n – 至多显示 n个输出。
-m, --mmap – 被忽略,为了向后兼容
-r, --regexp REGEXP – 使用基本正则表达式
–regex – 使用扩展正则表达式
-q, --quiet – 安静模式,不会显示任何错误讯息
-s, --stdio – 被忽略,为了向后兼容
-o – 指定资料库存的名称。
-h, --help – 显示帮助
-i, --ignore-case – 忽略大小写
-V, --version – 显示版本信息

3.12.2 whereis

3.12.2.1 概念

该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。一般查找的是配置文件。

3.12.2.2 参数列表

whereis [-bfmsu][-B <目录>…][-M <目录>…][-S <目录>…][文件…]
参数:
-b  只查找二进制文件。
-B<目录>  只在设置的目录下查找二进制文件。
-f  不显示文件名前的路径名称。
-m  只查找说明文件。
-M<目录>  只在设置的目录下查找说明文件。
-s  只查找原始代码文件。
-S<目录>  只在设置的目录下查找原始代码文件。
-u  查找不包含指定类型的文件。

3.12.3 which

3.12.3.1 概念

在环境变量$PATH设置的目录里查找符合条件的文件。

3.12.3.2 参数列表

which [文件…]
参数:
-n<文件名长度>  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p<文件名长度>  与-n参数相同,但此处的<文件名长度>包括了文件的路径。
-w  指定输出时栏位的宽度。
-V  显示版本信息。


3.13文件内容查找:grep

3.13.1 概念

用于查找文件里符合条件的字符串。(查找文件内容用的)

3.13.2 示例

  1. 查找/.bash_history(历史命令)文件下包含字符串ls的那些行
  2. 查找/.bash_history(历史命令)文件下不包含总覅出家门ls的那些行

3.13.3 参数列表

grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][–help][范本样式][文件或目录…]
参数:
-a 或 --text : 不要忽略二进制的数据。
-A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
-c 或 --count : 计算符合样式的列数。
-C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
-E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
-f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-F 或 --fixed-regexp : 将样式视为固定字符串的列表。
-G 或 --basic-regexp : 将样式视为普通的表示法来使用。
-h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
-H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
-i 或 --ignore-case : 忽略字符大小写的差别。
-l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
-L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
-n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
-o 或 --only-matching : 只显示匹配PATTERN 部分。
-q 或 --quiet或–silent : 不显示任何信息。
-r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
-s 或 --no-messages : 不显示错误信息。
-v 或 --invert-match : 显示不包含匹配文本的所有行。
-V 或 --version : 显示版本信息。
-w 或 --word-regexp : 只显示全字符合的列。
-x --line-regexp : 只显示全列符合的列。
-y : 此参数的效果和指定"-i"参数相同。


3.14 总结


既然看到最后了,如对您有所帮助,期望您能点个小小的赞👍,或是一个关注🎁,这会是对我莫大的鼓励与支持!
由于个人能力和见识有限,如有不当之处,还请批评指出,一起交流进步🙋‍♂️!

以上是关于Linux操作系统 §3:基本命令Ⅱ(Bash常用功能,文件查询)的主要内容,如果未能解决你的问题,请参考以下文章

Linux常用 bash

[Linux记录] 常用BASH命令(1)——基础

10 分钟学会Linux常用 bash命令

Linux常用基本命令:三剑客命令之-awk模式用法

linux-系统安全账号安全基本措施chattrchagehistory

10分钟就能学会,Linux操作系统21个shell常用命令