4. 文件管理命令:ls、cd、pwd、mkdir、rm、cp、mv、find、locate
文件管理,说白了就是你在操作系统里最频繁的操作。我见过不少新手,甚至有些老手,在这些基础命令上栽过跟头。今天咱们就把这九个命令彻底聊透。
4.1 目录导航三剑客:pwd、cd、ls
这三个命令,我习惯叫它们「定位三件套」。你想想看,在文件系统里迷路了怎么办?
4.1.1 pwd —— 我在哪?
pwd 全称 Print Working Directory。每次你打开终端,它都告诉你当前所在的绝对路径。我曾经遇到过一位同事,在脚本里写死了相对路径,结果换了个目录执行,整个脚本崩了。从那以后,我写脚本第一件事就是 pwd 确认位置。
$ pwd
/home/ubuntu/projects
4.1.2 cd —— 我要去哪?
cd 是 Change Directory 的缩写。用法很简单,但有几个小技巧值得记住:
cd ~或cd:回到当前用户的家目录cd -:回到上一个目录。这个我天天用,在两个目录间切换时特别顺手cd ..:返回上一级目录cd ../../:返回上两级目录
cd - 配合 ls,在两个项目目录间来回切换,效率极高。
4.1.3 ls —— 这里有什么?
ls 是 List 的缩写。别看它简单,参数组合起来威力不小:
| 参数 | 作用 | 我常用的场景 |
|---|---|---|
-l |
长格式显示(权限、大小、时间) | 查看文件详情 |
-a |
显示隐藏文件(以 . 开头的) | 排查配置文件 |
-h |
人类可读的大小(K、M、G) | 配合 -l 使用,看文件大小一目了然 |
-t |
按修改时间排序 | 找最近改过的文件 |
-S |
按文件大小排序 | 清理大文件时用 |
$ ls -lah
total 128K
drwxr-xr-x 5 ubuntu ubuntu 4.0K Mar 15 10:30 .
drwxr-xr-x 3 ubuntu ubuntu 4.0K Mar 14 09:00 ..
-rw-r--r-- 1 ubuntu ubuntu 12K Mar 15 10:30 app.log
-rw-r--r-- 1 ubuntu ubuntu 2.3K Mar 13 16:45 config.yaml
4.2 文件操作四兄弟:mkdir、rm、cp、mv
这四个命令,我管它们叫「增删改查」里的增、删、改、移。嗯,查是 find 和 locate 的事。
4.2.1 mkdir —— 创建目录
mkdir 是 Make Directory 的缩写。最常用的参数是 -p,可以递归创建多级目录:
$ mkdir -p project/src/utils
# 一次性创建 project、project/src、project/src/utils 三层目录
-p 时,如果父目录不存在,命令会直接报错。写脚本时一定要记得加 -p,否则目录结构一变,脚本就挂了。
4.2.2 rm —— 删除文件或目录
rm 是 Remove 的缩写。这个命令要格外小心:
rm file.txt:删除文件rm -r dir/:递归删除目录及其内容rm -f file:强制删除,不提示rm -rf /:千万别试! 这是删库跑路的经典命令
ls 确认要删什么,再用 rm。重要操作前,先 cp 备份一份。
4.2.3 cp —— 复制文件或目录
cp 是 Copy 的缩写。常用参数:
| 参数 | 作用 |
|---|---|
-r |
递归复制目录 |
-p |
保留原文件的权限、时间戳 |
-i |
覆盖前提示确认 |
-u |
只复制源文件比目标文件新的文件 |
$ cp -rp /var/log/app/ /backup/logs/
# 递归复制,保留所有属性
4.2.4 mv —— 移动或重命名
mv 是 Move 的缩写。它有两个用途:
- 移动文件:
mv file.txt /target/dir/ - 重命名文件:
mv oldname.txt newname.txt
你想想看,其实重命名就是把文件「移动」到同一个目录下的另一个名字。这个逻辑我当年想明白后,觉得 Linux 的设计真的很优雅。
4.3 文件查找双雄:find 与 locate
文件多了,找起来就头疼。我管理过上千台服务器,找文件全靠这两个命令。
4.3.1 find —— 真正的搜索利器
find 功能极其强大,但语法也相对复杂。我挑几个最常用的场景:
# 按名称查找
$ find /var/log -name "*.log"
# 按大小查找(大于 100MB 的文件)
$ find / -size +100M
# 按修改时间查找(最近 7 天内修改的)
$ find . -mtime -7
# 找到后直接执行操作(删除 30 天前的日志)
$ find /var/log -name "*.log" -mtime +30 -exec rm {} \;
find 的 -exec 参数非常实用。比如批量改权限、批量删除旧文件,一条命令搞定。但要注意,{} 和 \; 的格式不能写错。
4.3.2 locate —— 极速查找
locate 比 find 快得多,因为它查的是预建的数据库:
$ locate nginx.conf
/etc/nginx/nginx.conf
/etc/nginx/sites-available/default
locate 的数据库不是实时更新的。如果你刚创建了一个文件,马上用 locate 可能找不到。这时候需要先运行 updatedb 更新数据库,或者直接用 find。
4.4 知识结构图:文件管理命令全景
下面这张图,我把这九个命令的关系和用途画了出来。你一看就明白它们各自负责什么:
4.5 实战经验总结
说了这么多,我最后分享几个实战中的小经验:
pwd 看位置,cd 去那里
ls 看内容,mkdir 建目录
cp 做备份,mv 搬家去
rm 要小心,find 找东西
locate 查得快,updatedb 要记牢
嗯,这些命令看着简单,但用好它们,你的工作效率能提升一大截。我当年刚入行时,就是靠把这些基础命令练得滚瓜烂熟,才在故障排查时比别人快一步。