【学习笔记】Linux 基本命令
在日常工作中遇到的Linux常用基本命令的笔记。
Linux常用文件操作命令
find命令
man find 的文档非常冗长且包含大量生僻用法,对于 99% 的日常工作和开发场景,只需要掌握以下几个核心维度。
我们可以把 find 的逻辑简化为一个公式:
find [在哪里找] [找什么] [找到后做什么]
以下是提炼出的绝对重点,按使用频率排序:
1. 基础查找:按名称 (Name)
这是最常用的功能。
- 基本用法: ```bash find . -name “config.yaml”
1
2
3
4
5
6
7
*解释:在当前目录 (`.`) 及其子目录下找名为 `config.yaml` 的文件。*
* **模糊匹配 (通配符):**
```bash
find /var/log -name "*.log"
解释:在 /var/log 下找所有后缀为 .log 的文件。注意:通配符最好用引号包起来,防止 Shell 提前展开。
- 忽略大小写: 使用
-iname(i = ignore case)。 ```bash find . -iname “readme.md”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#### 2. 过滤杂讯:按类型 (Type)
Linux 下一切皆文件,但你通常只想找“文件”或“目录”。
* **只找文件:** `-type f` (file)
* **只找目录:** `-type d` (directory)
**组合示例:**
```bash
# 只找名为 build 的目录(不找名为 build 的文件)
find . -type d -name "build"
3. 清理磁盘:按大小 (Size)
用于寻找大文件或空文件。
- 语法:
-size [+/-]大小[单位] +表示大于,-表示小于。- 常用单位:
k(KB),M(MB),G(GB)。
示例:
1
2
3
4
5
6
# 查找大于 100MB 的文件
find . -type f -size +100M
# 查找空文件(大小为0)
find . -empty
4. 追溯历史:按时间 (Time)
这是 man 文档中最难懂的部分,记住 -mtime (修改时间) 就够用了。
- 语法:
-mtime [+/-]天数 -n:n 天以内(最近 n 天)。+n:n 天以前(超过 n 天)。
示例:
1
2
3
4
5
6
# 查找最近 7 天内修改过的文件 (用于排查最近改坏了什么)
find . -mtime -7
# 查找 30 天前修改过的旧日志 (用于清理)
find /var/log -name "*.log" -mtime +30
注: 如果需要按“分钟”算,使用
-mmin。
5. 进阶大招:执行操作 (Exec)
默认情况下,find 只是把找到的文件打印出来 (-print)。如果你想对找到的文件进行操作(比如删除、移动、重命名),有两个方法:
A. 危险但快捷:-delete
直接删除找到的文件。一定要先不加 -delete 运行一次,确认没找错文件!
1
2
3
# 删除所有 .tmp 文件
find . -name "*.tmp" -delete
B. 万能操作:-exec
这是 find 最强大的地方,可以配合任何 Linux 命令。
- 标准格式:
-exec 命令 {} \; {}代表找到的文件名占位符。\;代表命令结束(反斜杠是必须的,防止分号被 Shell 吞掉)。
经典示例:
1
2
3
4
5
6
# 找到所有 .py 文件,并修改它们的权限为 644
find . -name "*.py" -exec chmod 644 {} \;
# 找到所有 log 文件,并用 grep 搜索里面的 "Error" 关键字
find . -name "*.log" -exec grep "Error" {} \;
6. 性能优化:限制深度 (Maxdepth)
如果你的目录结构非常深(比如 node_modules),全盘扫描会很慢。
-maxdepth 1:只查当前目录,不进子目录。-maxdepth 2:只查两层。
1
2
3
# 只在当前层级找文件,不递归
find . -maxdepth 1 -name "*.txt"
总结:高频速查表
| 场景 | 参数/命令 | 示例 |
|---|---|---|
| 找名字 | -name / -iname | find . -name "*.jpg" |
| 找类型 | -type f / -type d | find . -type d -name "src" |
| 找大小 | -size +1G | find . -size +100M |
| 找时间 | -mtime +7 / -mtime -1 | find . -mtime -1 (最近24h) |
| 做操作 | -exec ... {} \; | find . -name "*.sh" -exec chmod +x {} \; |
| 只删文件 | -delete | find . -name "temp" -delete |
| 逻辑非 | ! 或 -not | find . ! -name "*.c" (找不是.c的文件) |
建议: 虽然 find 很强大,但在文件特别多(数百万级)时,它会很慢。如果你只是想快速找个文件在哪,用 locate 命令(基于索引)通常会快得多。
locate命令
locate 就像是 Windows 下的 “Everything” 搜索工具,或者 macOS 的 Spotlight。
它的核心优势只有一个:快。 但它有一个致命弱点:不实时。
以下是 locate 的使用重点:
1. 核心逻辑:查数据库
find 是直接去硬盘上一个目录一个目录地“翻箱倒柜”,所以慢。 locate 是查一个预先建好的“清单”(数据库 /var/lib/mlocate/mlocate.db),所以极快。
基本用法:
1
2
locate config.yaml
解释:全盘秒搜所有名字里包含 config.yaml 的路径。
2. 必知必会:手动更新数据库
这是新手最容易掉的坑。 如果你刚新建了一个文件 new_file.txt,马上运行 locate new_file.txt,你会发现找不到。因为“清单”还没更新。
Linux 系统通常每天自动更新一次数据库。如果你想找最新文件,必须先运行:
1
2
sudo updatedb
注:运行后稍等几秒,待数据库更新完毕后再 locate 就能找到了。
3. 常用参数 (Top 3)
locate 的参数不多,记住这三个足够应对 90% 的场景:
- 忽略大小写 (
-i): ```bash locate -i readme.md
1
2
3
4
5
6
7
8
*能找到 `README.MD`, `ReadMe.md` 等。*
* **限制输出数量 (`-n`):**
有时候结果成千上万,你只想看前几个确认一下路径格式。
```bash
locate -n 5 "*.jpg"
只显示前 5 个结果。
- 使用正则表达式 (
-r): 当你需要精确匹配复杂模式时。 ```bash查找以 .conf 结尾的文件(注意:默认 locate 是模糊匹配,只要路径里包含 .conf 就算)
locate -r “.conf$”
```
4. locate vs find:怎么选?
| 特性 | locate | find |
|---|---|---|
| 速度 | 极快 (毫秒级) | 慢 (取决于硬盘大小和文件数) |
| 实时性 | 差 (新建文件找不到,删掉的文件还能搜到) | 好 (直接读硬盘,所见即所得) |
| 查找范围 | 全盘搜索 | 可以指定某个特定目录 |
| 功能 | 仅限按名字搜索 | 按名、大小、时间、权限…还能执行操作 |
| 适用场景 | “我不记得文件在哪了,只想快速找出来” | “我要精确找某个目录下最近修改过的文件” |
5. 如果提示 command not found
很多精简版的 Linux 发行版(如 CentOS Minimal 或某些 Docker 容器)默认不预装 locate。
- Debian/Ubuntu:
sudo apt install mlocate - CentOS/RHEL:
sudo yum install mlocate(安装完后记得第一次先运行sudo updatedb)
1
