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 知识结构图:文件管理命令全景

下面这张图,我把这九个命令的关系和用途画了出来。你一看就明白它们各自负责什么:

文件管理命令知识结构图 文件管理命令全景图 文件管理命令 目录导航 pwd cd ls 文件操作 mkdir rm cp mv 文件查找 find locate 使用建议 • 日常导航:pwd + cd + ls 组合使用 • 文件操作:先 cp 备份,再 rm 删除,mv 移动 • 文件查找:快速查找用 locate,精确查找用 find

4.5 实战经验总结

说了这么多,我最后分享几个实战中的小经验:

日常操作口诀:
pwd 看位置,cd 去那里
ls 看内容,mkdir 建目录
cp 做备份,mv 搬家去
rm 要小心,find 找东西
locate 查得快,updatedb 要记牢

嗯,这些命令看着简单,但用好它们,你的工作效率能提升一大截。我当年刚入行时,就是靠把这些基础命令练得滚瓜烂熟,才在故障排查时比别人快一步。