Linux 常用命令学习笔记(续):查找、压缩、vi 编辑器与其他命令

Linux 常用命令学习笔记(续):查找、压缩、vi 编辑器与其他命令

本文承接上一部分,继续介绍 Linux 中的查找/搜索命令、压缩/解压缩命令、vi 编辑器的详细用法,以及其他实用命令(file、which、whereis)。所有示例均基于 Ubuntu 系统,力求通俗易懂,适合零基础入门。

文章目录

  • [Linux 常用命令学习笔记(续):查找、压缩、vi 编辑器与其他命令](#Linux 常用命令学习笔记(续):查找、压缩、vi 编辑器与其他命令)
    • [1. 查找/搜索命令](#1. 查找/搜索命令)
      • [1.1 `find` -- 在目录树中查找文件](#1.1 find – 在目录树中查找文件)
      • [1.2 `grep` -- 在文件内容中搜索字符串](#1.2 grep – 在文件内容中搜索字符串)
        • 基本格式
        • 常用选项
        • [示例 1:在单个文件中搜索](#示例 1:在单个文件中搜索)
        • [示例 2:在当前目录(包括子目录)递归搜索所有文件](#示例 2:在当前目录(包括子目录)递归搜索所有文件)
        • [示例 3:全字匹配 `-w`](#示例 3:全字匹配 -w)
        • [管道 `|` 的高级用法:在搜索结果中再次搜索](#管道 | 的高级用法:在搜索结果中再次搜索)
    • [2. 压缩/解压缩命令](#2. 压缩/解压缩命令)
      • [2.1 `gzip` -- 压缩单个文件(后缀 `.gz`)](#2.1 gzip – 压缩单个文件(后缀 .gz))
      • [2.2 `bzip2` -- 压缩单个文件(后缀 `.bz2`)](#2.2 bzip2 – 压缩单个文件(后缀 .bz2))
      • [2.3 `tar` -- 打包(并压缩)目录](#2.3 tar – 打包(并压缩)目录)
        • 常用选项
        • [示例 1:使用 gzip 打包并压缩目录](#示例 1:使用 gzip 打包并压缩目录)
        • [示例 2:使用 bzip2 打包并压缩目录](#示例 2:使用 bzip2 打包并压缩目录)
    • [3. vi 编辑器](#3. vi 编辑器)
    • [4. 其他常用命令](#4. 其他常用命令)
    • [5. 总结](#5. 总结)

1. 查找/搜索命令

在 Linux 中,查找文件或搜索文件内容是非常常见的需求。我们主要学习两个命令:find(按文件名等条件查找文件)和 grep(在文件内容中搜索字符串)。

1.1 find -- 在目录树中查找文件

find 命令类似于 Windows 的搜索框,但功能更强大。你只需要告诉它两个信息:从哪里找 (目录)和 找什么(条件)。

基本格式

bash

复制代码
find 目录名 选项 查找条件
  • 目录名 :从哪个目录开始搜索(如果不写,默认是当前目录 .
  • 选项 :比如 -name 表示按文件名查找
  • 查找条件:具体的文件名或模式
示例 1:按文件名精确查找

bash

复制代码
find /home/book/dira/ -name "test1.txt"
  • /home/book/dira/ 目录下(包括其所有子目录)查找名字为 test1.txt 的文件。
  • -name 选项表示"名字"。
示例 2:使用通配符 * 模糊查找

bash

复制代码
find /home/book/dira/ -name "*.txt"
  • * 代表任意多个字符。这条命令会找到所有以 .txt 结尾的文件。
  • 例如:a.txttest.txtmyfile.txt 都会被找到。
示例 3:查找目录或文件名为特定字符串

bash

复制代码
find /home/book/dira/ -name "dira"
  • 只要名字叫 dira(无论是目录还是文件)都会被找到。
如果不指定目录,默认是当前目录

bash

复制代码
find . -name "*.txt"   # 明确指定当前目录
find -name "*.txt"     # 省略目录,等同于上面
高级用法:按时间查找

find 还能根据文件的修改时间来查找,非常实用。

bash

复制代码
find /home/book -mtime -2
  • -mtime -2:查找最近 2 天以内 修改过的文件。
  • -mtime +2:查找 2 天以前 修改过的文件。
  • -mtime 2:查找恰好 2 天前 当天修改过的文件。

💡 小提示find 还有更多用法,比如按文件大小(-size)、按用户(-user)等,可以用 man find 查看。


1.2 grep -- 在文件内容中搜索字符串

如果说 find 是按"名字"找文件,那么 grep 就是按"内容"找信息。它会打开文件,一行一行地查找是否包含你指定的字符串。

基本格式

bash

复制代码
grep [选项] [查找模式] [文件名]
常用选项
选项 含义
-r 递归搜索,进入子目录查找
-n 显示匹配行在文件中的行号
-w 全字匹配(只匹配完整单词,不匹配单词的一部分)
-i 忽略大小写
示例 1:在单个文件中搜索

假设 test1.txt 文件内容为:

text

复制代码
aaaaa abc abcbabc bccbcabca match_pattern nand->erase

执行:

bash

复制代码
grep -n "abc" test1.txt
  • 输出:1:aaaaa abc abcbabc ...(行号和匹配的行)
  • -n 显示行号。
示例 2:在当前目录(包括子目录)递归搜索所有文件

bash

复制代码
grep -rn "abc" *
  • * 表示当前目录下的所有文件(也包括目录,grep 会递归进去)。
  • -r 递归,-n 显示行号。
  • 输出会显示:文件名:行号:匹配的行内容
示例 3:全字匹配 -w

bash

复制代码
grep -nw "abc" test1.txt
  • 只匹配独立的单词 abc,不会匹配 abcbabc 中的 abc
管道 | 的高级用法:在搜索结果中再次搜索

有时候搜索结果太多,想进一步筛选。可以用 管道 把前一个命令的输出交给后一个命令继续处理。

例如:搜索所有包含 ABC 的文件,但只关心 .h 头文件:

bash

复制代码
grep "ABC" -w -nr | grep "\.h"
  • 第一个 grep 找到所有包含 ABC 的行(递归、显示行号)。
  • | 将结果传给第二个 grep
  • 第二个 grep 只保留包含 .h 的行(即头文件)。

🧠 理解管道| 就像一根管子,把左边命令的输出"灌进"右边命令作为输入。


2. 压缩/解压缩命令

Linux 下常见的压缩工具有 gzipbzip2,以及打包工具 tar。通常我们会组合使用 tar 和压缩命令来打包并压缩整个目录。

2.1 gzip -- 压缩单个文件(后缀 .gz

gzip 只能压缩单个文件 ,不能压缩目录。压缩后原文件会被删除(除非用 -k 保留)。

常用选项
选项 含义
-k (keep) 压缩或解压时保留原文件
-d (decompress) 解压缩
-l (list) 列出压缩文件的信息
示例

bash

复制代码
# 压缩文件(保留原文件)
gzip -k mypwd.1          # 生成 mypwd.1.gz

# 查看压缩文件内容信息
gzip -l mypwd.1.gz

# 解压缩(保留压缩包)
gzip -kd mypwd.1.gz      # 得到 mypwd.1,原压缩包还在

⚠️ 注意 :如果不加 -k,直接执行 gzip mypwd.1,压缩后原文件 mypwd.1 会被删除,只剩下 .gz 文件。推荐总是使用 -k 保留原文件。

缺点
  • 只能压缩单个文件,不能处理目录。
  • 压缩率一般(比 bzip2 低)。

2.2 bzip2 -- 压缩单个文件(后缀 .bz2

bzip2gzip 类似,也只能压缩单个文件,但压缩率更高(文件更小),不过压缩速度稍慢。

常用选项
选项 含义
-k (keep) 保留原文件
-d (decompress) 解压缩
示例

bash

复制代码
# 压缩(保留原文件)
bzip2 -k mypwd.1          # 生成 mypwd.1.bz2

# 解压缩(保留压缩包)
bzip2 -kd mypwd.1.bz2     # 得到 mypwd.1
gzip vs bzip2 对比
特性 gzip bzip2
后缀 .gz .bz2
压缩速度 较慢
压缩率(文件大小) 一般 更高(更小)
适用场景 小文件 大文件,追求高压缩比

💡 经验之谈 :普通文本文件用 bzip2 能压缩得更小;临时用一下或者文件不大时用 gzip 更方便。


2.3 tar -- 打包(并压缩)目录

tar 的本意是"磁带归档"(tape archive),可以把多个文件和目录打包成一个大文件 (后缀 .tar)。通常我们会结合 gzipbzip2 进一步压缩,得到 .tar.gz.tar.bz2 文件。

常用选项
选项 含义
-c (create) 创建打包文件
-x (extract) 解包(提取)
-t (list) 查看打包文件的内容列表
-z 通过 gzip 压缩/解压(生成 .tar.gz
-j 通过 bzip2 压缩/解压(生成 .tar.bz2
-v (verbose) 显示详细过程
-f (file) 指定文件名(必须放在选项最后,因为它后面紧跟着文件名)
-C 指定解压到的目标目录

📌 注意-f 选项必须紧挨着文件名,通常写作 -f 文件名。常见写法如 tar czvf dira.tar.gz dira,其中 czvf 连写。

示例 1:使用 gzip 打包并压缩目录

bash

复制代码
# 压缩:将目录 dira 打包并压缩为 dira.tar.gz
tar czvf dira.tar.gz dira
  • c:创建
  • z:用 gzip 压缩
  • v:显示被处理的文件
  • f dira.tar.gz:指定输出文件名
  • dira:要打包的源目录

bash

复制代码
# 查看压缩包内容(不解压)
tar tvf dira.tar.gz
  • t:查看列表
  • v:显示详细信息

bash

复制代码
# 解压到当前目录
tar xzvf dira.tar.gz

# 解压到指定目录(例如 /home/book)
tar xzvf dira.tar.gz -C /home/book
  • x:解包
  • z:用 gzip 解压
  • C:指定目标目录
示例 2:使用 bzip2 打包并压缩目录

bash

复制代码
# 压缩:使用 bzip2,选项变为 j
tar cjvf dira.tar.bz2 dira

# 查看内容
tar tvf dira.tar.bz2

# 解压到当前目录
tar xjvf dira.tar.bz2

# 解压到指定目录
tar xjvf dira.tar.bz2 -C /home/book

💡 记忆技巧

  • tar czf → 创建 .tar.gz
  • tar xzf → 解压 .tar.gz
  • tar cjf → 创建 .tar.bz2
  • tar xjf → 解压 .tar.bz2
  • 中间加个 v 只是显示过程,不影响功能。

3. vi 编辑器

vi 是 Linux 命令行下的文本编辑器,几乎所有 Linux 系统都自带。虽然现在有 vim(vi improved)更强大,但基础用法是一样的。在服务器调试、修改配置文件等场景下,vi 是必备技能

3.1 vi 的三种模式

vi 有三种模式,不同的操作要在不同的模式下进行:

模式 主要功能 如何进入
一般模式(Normal) 移动光标、复制、粘贴、删除、撤销 刚打开文件时默认模式;按 ESC 从其他模式返回
编辑模式(Insert) 输入文本内容 iao 等键(见下文)
命令行模式(Command-line) 保存文件、退出、查找、替换 在一般模式下按 : 进入

⚠️ 重要 :如果你不确定当前在什么模式,多按几次 ESC 就能回到一般模式。

3.2 打开/新建/保存文件

bash

复制代码
vi 文件名
  • 如果文件存在,则打开它。
  • 如果文件不存在,则新建一个空文件(但还没有保存到磁盘,需要执行保存操作才会真正创建)。
保存与退出(在命令行模式下)
命令 含义
:w 保存文件(write)
:q 退出(quit)
:wq 保存并退出
:q! 强制退出,不保存修改
:x 保存并退出(等同于 :wq

📌 对于新文件,必须先 :w:wq 才会实际创建文件。

3.3 进入编辑模式(输入文本)

在一般模式下,按下以下任意键即可进入编辑模式(此时屏幕下方会出现 -- INSERT -- 提示):

按键 作用
i 光标所在字符的前面开始插入
I 当前行的行首开始插入
a 光标所在字符的后面开始插入
A 当前行的行尾开始插入
o 当前行的下方新建一行,并进入编辑模式
O 当前行的上方新建一行,并进入编辑模式

编辑完成后,按 ESC 返回一般模式。

3.4 光标移动(一般模式下)

基本移动
按键 作用
h 左移一个字符
l 右移一个字符
j 下移一行
k 上移一行
快速跳转(行定位)
按键 作用
1Ggg 跳到文件第一行(文件头)
G 跳到文件最后一行(文件尾)
nGngg 跳到第 n 行(例如 15G 跳到第 15 行)
n+ 向下移动 n 行
n- 向上移动 n 行
屏幕翻页
按键 作用
Ctrl + f 向下翻一页(forward)
Ctrl + b 向上翻一页(backward)
行内快速定位
按键 作用
0(数字零) 跳到当前行的行首
$ 跳到当前行的行尾
fx 在当前行中搜索下一个字母 x 并跳过去(例如 fa 跳转到下一个 a

3.5 复制、粘贴、删除、撤销(一般模式下)

复制(yank)
命令 作用
yy 复制当前行
nyy 复制当前行及其下方的 n-1 行(例如 3yy 复制当前行和下面两行,共3行)
粘贴(paste)
命令 作用
p 在光标下方粘贴(如果是整行,则粘贴到下一行)
P 在光标上方粘贴
删除(delete)
命令 作用
dd 删除当前行
ndd 删除当前行及其下方的 n-1 行(例如 5dd 删除5行)
x 删除光标所在位置的一个字符
X 删除光标前面的一个字符
cc 删除整行,并立即进入编辑模式(相当于替换整行)
s 删除光标所在字符,并进入编辑模式
撤销(undo)
命令 作用
u 撤销上一步操作(可以连续撤销)

💡 多按几次 u 可以逐步撤销更早的操作。

3.6 查找和替换(命令行模式)

查找字符串

在一般模式下,输入 / 然后输入要查找的字符串,回车:

text

复制代码
/pattern
  • pattern 是你要查找的文本。
  • n 键:向同一个方向继续查找下一个匹配。
  • N 键:向反方向查找上一个匹配。

如果要从头到尾全文搜索,建议先按 gg 跳到文件开头,再执行 /pattern

替换字符串

在命令行模式(输入 :)下执行替换命令:

命令 作用
:%s/p1/p2/g 将文件中所有p1 替换为 p2
:%s/p1/p2/gc 全局替换,但每次替换前都会询问确认(c = confirm)
  • % 表示整个文件范围。
  • s 表示替换(substitute)。
  • g 表示全局(global),如果不加 g 则只替换每行的第一个匹配。

3.7 vi 完整使用示例

让我们从头创建一个 hello.txt 文件,内容为两行:

text

复制代码
www.100ask.net
wiki.100ask.net

步骤 1:打开/新建文件

bash

复制代码
vi hello.txt

屏幕上出现一个空白文件,底部显示文件名和行数。当前处于一般模式

步骤 2:进入编辑模式并输入内容

按下 i 键(光标前插入),屏幕底部显示 -- INSERT --。现在可以输入内容了:

text

复制代码
www.100ask.net
wiki.100askx.net

(注意第二行我故意多打了一个 x,后面要删除它)

步骤 3:退出编辑模式

ESC 键,-- INSERT -- 消失,回到一般模式。

步骤 4:移动光标并删除错误的字符

使用方向键(或 h/j/k/l)将光标移动到第二行的 x 字符下方。在一般模式下,按 x 删除该字符。

步骤 5:保存并退出

输入 : 进入命令行模式,然后输入 wq,回车。文件已保存。

步骤 6:验证

bash

复制代码
cat hello.txt

输出:

text

复制代码
www.100ask.net
wiki.100ask.net

📌 注意:本教程不涉及 Ubuntu 下中文输入法的安装。建议编写代码或注释时使用英文。如需中文,可自行搜索配置。


4. 其他常用命令

4.1 file -- 查看文件类型

在 Linux 中,文件扩展名(如 .txt.c)并不像 Windows 那样严格。一个文件到底是什么类型(文本、可执行程序、图片等),可以用 file 命令查看。

bash

复制代码
file 文件名
典型用途:检查编译出来的程序是给哪个平台用的

初学者经常把在 PC(x86 架构)上用 gcc 编译的程序,复制到 ARM 开发板上运行,结果报错"无法执行"。这时用 file 就能看出原因:

bash

复制代码
file myprogram
  • 如果是 PC 程序,输出会包含 x86-64ELF 64-bit LSB executable, x86-64
  • 如果是 ARM 程序,输出会包含 ARMELF 32-bit LSB executable, ARM

💡 交叉编译时,file 是验证编译结果是否正确的好帮手。

4.2 whichwhereis -- 查找命令的位置

当我们执行一个命令(如 lsgcc)时,系统会在 PATH 环境变量指定的目录中寻找该命令。whichwhereis 可以帮助我们找到命令的实际位置。

命令 作用 示例
which 显示命令的可执行程序路径 which pwd/bin/pwd
whereis 显示命令的可执行程序路径源代码 (如果有)、手册页位置 whereis pwd/bin/pwd /usr/share/man/man1/pwd.1.gz
示例

bash

复制代码
which gcc          # /usr/bin/gcc
whereis gcc        # /usr/bin/gcc /usr/lib/gcc /usr/share/man/man1/gcc.1.gz

📌 当你安装了多个版本的软件(比如 Python 2 和 Python 3),可以用 which python 确认当前使用的是哪一个。


5. 总结

本文涵盖了 Linux 中非常重要的查找、压缩、vi 编辑以及其他辅助命令。下面是速查表:

分类 命令 常用示例
查找文件 find find /home -name "*.txt"
查找内容 grep grep -rn "error" *
压缩(单文件) gzip gzip -k file.txt
压缩(单文件,高压缩比) bzip2 bzip2 -k file.txt
打包+压缩目录 tar tar czvf dir.tar.gz dir/
解压 tar tar xzvf dir.tar.gz -C /target
文本编辑 vi vi file.txt(然后 i 编辑,ESC:wq
查看文件类型 file file a.out
查找命令位置 which / whereis which ls

🎉 练习建议 :在虚拟机上亲手敲一遍这些命令,从 findvi 创建一个文件并修改,再到 tar 打包压缩,你会很快掌握它们。Linux 命令的学习没有捷径,多敲几次自然就记住了。

相关推荐
萧行之2 小时前
Linux 下 Miniconda3 清华源极速安装教程(含报错解决、一键复制)
linux·运维·服务器
AI成长日志2 小时前
【笔面试算法学习专栏】链表操作·基础三题精讲(206.反转链表、141.环形链表、21.合并两个有序链表)
学习·算法·面试
ZzzZZzzzZZZzzzz…2 小时前
MySQL备份还原方法2----LVM
linux·运维·数据库·mysql·备份还原
JasmineX-12 小时前
数据结构(笔记)——单向循环链表
c语言·数据结构·笔记·链表
x²+(y-√³x²)²=12 小时前
Linux 或者 Ubuntu 离线使用 vllm启动大模型
linux·ubuntu·vllm
沉鱼.442 小时前
第十五届题目
linux·运维·算法
华法林的小助手2 小时前
[学习笔记]在ros humble里使用qt
笔记·qt·学习
red_redemption2 小时前
自由学习记录(158)
学习
凤年徐2 小时前
Linux权限详解:从入门到掌握
linux·运维·服务器