- hello,大家好,我是 Lorin,今天和大家分享一期 Linux 命令实战教学,作为一个开发者熟悉并掌握常见的 Linux 命令可以说是基本功,这一期我将总结一些文本与文件处理的常见 Linux 命令以及一些日常工作中的常用使用技巧,如果大家喜欢后续还会分享一到两期网络、进程、内存相关的的实战系列。
文本查看和处理
cat
- cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。
命令格式:
cat [-AbeEnstTuv] [--help] [--version] fileName
常用参数:
-n 或 --number:由 1 开始对所有输出的行数编号
-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行
// 日常工作中我们可以用来读取文件
cat log.txt
// 读取 log.txt 的数据进行编号并写入到 log1.txt
cat -n log.txt > log1.txt
// 清空 log.txt 文件 注:这个只是为了炫技没有任何用处,劝大家少用
// 在类 Unix 系统中,/dev/null 称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个 EOF。
cat /dev/null > log.txt
tail
- tail 命令常用于查看文件的内容,经常和 -f 一起使用常看正在改变的文件,比如程序正在打印的日志。
- 默认只打印文件末尾 10 行。
命令格式:
tail [参数] [文件]
tail log.txt
常用参数:
-f:循环打印正在发生改变的文件,如我们在工作中常用于读取正在程序正在打印的日志文件
tail -f log.txt
-n:命令默认打印文件末尾 10 行数据,可以使用 -n 指定行数
tail -n 20 log.txt // 读取文件末尾 20 行数据
tail -n +20 log.txt // 读取从 20 行开始到末尾的数据
// 这里推荐一个缩写的写法:读取末尾 200 行同时循环打印正在改变的文件
tail -200f log.txt
head
- 前面我们使用 tail 来读取文件的末尾,如果我们现在要读取文件的首行内容怎么办呢?当然我们可以使用 tail 从读取,那么你要读取的数据也太多了,我们可以使用 head 实现
命令格式:
head [参数] [文件]
// 默认读取文件前 10 行数据
head log.txt
常用参数:
-c<数目> 显示的字节数
-n<行数> 显示的行数
// 显示文件前 20 行
head -n 20 log.txt
// 显示文件前 20 个字节
head -c 20 log.txt
more & less
- 前面我们了解了 tail & head 可以从头或者尾查看文件,如果我们文件很大且需要每页依次读取怎么办呢?别慌我们还有 more 和 less 命令。
more
- Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似).
命令格式:
more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]
more log.txt
常用参数:
-num 一次显示的行数
+/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示
fileNames 欲显示内容的文档,可为复数个数
// 比如我们读取文件 log.txt 从第 5 行开始显示 一次显示 10 行 且匹配文件前匹配 nginx 字符串后开始显示
more -10 +3 +/nginx log.txt
less
- less 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页,大家有兴趣可以了解一下。
命令格式:
less [参数] 文件
grep
- Linux grep (global regular expression) 命令用于查找文件里符合条件(字符串或正则表达式)的文件或对应行。
命令格式:
grep [参数] pattern [文件]
grep -c 2 'test' log.txt
grep -c 2 'test' log.txt
常用参数:
-i:忽略大小写进行匹配
-v:反向查找,只打印不匹配的行
-r:递归查找子目录中的文件
-l:只打印匹配的文件名
-c:只打印匹配的行数
// 日常我们使用经常的参数有 -i 和 -c , 如实现匹配 log.txt 中 包含 test 字符串(忽略大小写)的行,并展示匹配行的上下两行
grep -i -c 2 'test' log.txt
-E 或 --extended-regexp : 将样式为延伸的正则表达式来使用,看着有点绕,我们来看看具体的案例,你会发现也可以使用直接使用正则表达式实现这个功能
// 当我们需要匹配多个关键字时是一个很有用的功能,比如我们可以这样使用:
// 匹配包含 test 或 hello 关键字的行
grep -c 2 -e 'test|hello' log.txt
// 匹配同时包含 test 和 hello 关键字
grep -c 2 -e 'test&hello' log.txt
组合融合技
- 我们日常工作中会有这样一个场景,读取正在打印的日志文件同时匹配包含对应字符串的行,我们可以这样实现:
tail -f log.txt | grep -i 'test'
注:此处 grep 不支持 -c 仅使用 grep 匹配功能
// 或者我们只想匹配前 20 行
head -n 20 log.txt | grep -C 2 -i 'bash'
- 在日常开发中,我们可以去尝试使用这些命令的组合使用,你可能会收获到想不到的惊喜。
awk
- AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
- awk 命令很强大也很复杂,但在日常实际工作场景中其实使用得不多,这里我做一些简单的介绍,有兴趣的朋友可以去了解。
命令格式:
awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)
// 用法简单示例
log.txt文本内容如下:
2 this is a test
3 Do you like awk
This's a test
10 There are orange,apple,mongo
# 每行按空格或TAB分割,输出文本中的1、4项
$ awk '{print $1,$4}' log.txt
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
文本编辑
vi & vim
- 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是 vim 编辑器。
- vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计,比如有一些大佬使用 vim 写程序,我还没体验过。
三种模式
- vi/vim 共分为三种模式,命令模式(Command Mode)、输入模式(Insert Mode)和命令行模式(Command-Line Mode)。
用户刚刚启动 vi/vim,便进入了命令模式。
在命令模式下按下i就进入了输入模式,使用Esc键可以返回到普通模式。
在命令模式下按下 :(英文冒号)就进入了底线命令模式。
使用
基本使用
- 使用 vi/vim 进入一般模式 vim test.text(若 test.text 保存时会创建)
- 按下i就进入了输入模式
- 按下 :(英文冒号)就进入了底线命令模式并输入 wq 命令保存退出
其它使用技巧
- 进入一般模式后我们可以使用 /匹配字符 进行搜索
- Ctrl + U 可以进行整行删除
文件搜索
find
- Linux find 命令用于在指定目录下查找文件和目录,它可以使用不同的选项来过滤和限制查找的结果。
命令格式:
find [path] [expression]
expression:是可选参数,用于指定查找的条件,可以是文件名、文件类型、文件大小等等,可以使用的选项非常多,这里我举一些常见的示例:
-name pattern:按文件名查找,支持使用通配符 * 和 ?
-type type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等
-user username:按文件所有者查找
-group groupname:按文件所属组查找
-amin n:查找在 n 分钟内被访问过的文件
-atime n:查找在 n*24 小时内被访问过的文件
-mmin n:查找在 n 分钟内被修改过的文件
-mtime n:查找在 n*24 小时内被修改过的文件
// 查询当前目前及其子目录中下名为 log.txt 的文件
find . -name log.txt
// 将当前目录及其子目录中的所有文件列出
# find . -type f
// 查找 /home 目录下大于 1MB 的文件
find /home -size +1M
最后
- 如果文章对你有帮助,请一键三连,关注、点赞、收藏,你的支持是我创作的最大动力,谢谢大家。