🖥️ 第02章 · 文件与目录操作
ls cd pwd cp mv rm mkdir touch ln find
文件与目录操作¶
这一章讲在文件系统里"搬家"的基本功:看目录、跳位置、复制、移动、删除、建目录、建空文件、做软链接、找文件。这是每天在 /var/www 里部署、备份、改配置都要用的一整套动作。
先记住绝对路径与相对路径¶
| 写法 | 含义 | 例子 |
|---|---|---|
| 绝对路径 | 从根 / 开始的完整路径 |
/var/www/bangdream |
| 相对路径 | 相对当前目录 | ../bangdream |
~ |
当前用户家目录 | /root |
. |
当前目录 | . |
.. |
上一级目录 | .. |
pwd # 我在哪里
ls /var/www # 列出 /var/www 下的内容
ls .. # 列出上一级目录
提示 绝对路径永远可靠,不依赖"当前在哪"。写脚本、定时任务、systemd 里一律用绝对路径,避免因为工作目录不同而找不到文件。
列目录 ls¶
ls 是出现频率最高的命令。记住几个常用组合即可。
| 选项 | 作用 |
|---|---|
-l |
长格式,含权限、属主、大小、修改时间 |
-a |
显示隐藏文件(以 . 开头) |
-h |
大小用人类可读单位(K/M/G) |
-t |
按修改时间排序 |
-S |
按文件大小排序 |
-R |
递归列出子目录 |
ls -lh /root/scripts # 最常用:带大小、可读
ls -la /root # 连隐藏文件一起看
ls -lht | head -5 # 最近修改的 5 个文件
注意
-h单独用没意义,要配合-l(或-s)才能看到"人类可读大小"。ls默认不显示隐藏文件,要加-a。
切换目录 cd 与查看路径 pwd¶
cd /var/www/bangdream # 进入应用目录
cd # 无参数 = 回用户家目录
cd .. # 回上一级
cd - # 回到上一个所在目录,来回切换很好用
pwd # 确认当前位置
提示
cd -是"两端目录来回切"的神器:在/var/www和/etc/nginx之间反复对比配置时,不用记路径。
复制 cp¶
cp 源文件 目标位置 # 复制一个文件
cp -r 源目录 目标位置 # 递归复制整个目录
cp -p 源文件 目标位置 # 保留原属主与时间戳
cp -i 源文件 目标位置 # 覆盖前先询问(推荐!防误覆盖)
在这台服务器备份配置的常见姿势:
cp -a /etc/nginx/nginx.conf /root/backup/nginx.conf.$(date +%F)
# -a 等价于 -p 打开档案模式,保留属主/时间戳/权限
# $(date +%F) 生成形如 2026-09-08 的日期后缀,避免覆盖旧备份
移动与重命名 mv¶
mv 既做移动(跨目录)也做重命名(同目录),两者是同一个动作——改变路径。
mv 旧名 新名 # 重命名
mv 文件 目录/ # 移动到目录
mv -i 文件 目录/ # 覆盖前询问
注意
mv跨文件系统时,其实是"复制后删除"。它不像rm那样危险,但如果目标已存在,会直接覆盖而不提示——所以批量移动时加-i或先确认目标为空明显更保险。
删除 rm¶
删除是不可恢复的(没有回收站),务必谨慎。
rm 文件 # 删除一个文件
rm -r 目录 # 递归删除目录及其内容
rm -f 文件 # 强制删除,不提示(危险)
rm -ri 目录 # 递归删除,每个文件都询问(全人类友好)
rm -rf 目录 # 递归+强制删除(最危险,几乎不可撤销)
警告
rm -rf是 Linux 上公认的"高危按钮"。绝不要对/、/var、/etc这类根目录做rm -rf。宁慢勿错:先在-r前面加-i让系统逐个确认,或用/root/备份先拷一份。
在这台服务器上的安全删除习惯:
# 删应用目录前,先确认路径真的对了
cd /var/www && pwd # 确保人在 /var/www 而不是 /var
rm -ri bangdream # 逐项确认后再删
建目录 mkdir 与建空文件 touch¶
mkdir 新目录 # 建一个目录
mkdir -p a/b/c # 一次性创建多级目录,父目录不存在也自动建
touch app.log # 创建一个空文件;若已存在则只更新修改时间
提示
mkdir -p能避免"No such file or directory"报错,写脚本时几乎必用。touch常用来在部署前"预建"一个会写日志的空文件,或手动刷新文件的修改时间以触发某些监控。
链接 ln:软链接与硬链接¶
软链接(符号链接)相当于 Windows 的"快捷方式",指到另一个位置,删除原文件后软链接失效。
ln -s 目标位置 链接名 # -s 创建软链接
ls -l # 链接会显示为:链接名 -> 目标位置
在这台服务器上的真实例子——很多发行版把 node 符号链接到版本化命名:
ln -sfn /usr/local/bin/node-v24.20.0 /usr/local/bin/node
ls -l /usr/local/bin/node # 显示 node -> node-v24.20.0
注意 软链接与硬链接的区别:硬链接是"同一个文件的另一个名字",删一个,另一个还在,且不能跨文件系统;软链接只是一个"路径引用",跨文件系统没问题,但原文件一删链接就断。日常绝大多数链接需求用软链接
ln -s就够了。
找文件 find¶
| 示例 | 作用 |
|---|---|
find /var/www -name "*.log" |
按文件名找(支持通配符) |
find /var/www -type d |
只找目录 |
find /var/www -type f -size +100M |
找超过 100MB 的文件 |
find /var/www -mtime -1 |
找最近 1 天内修改过的文件 |
find . -name "*.conf" -exec grep -l "server" {} \; |
找出含指定内容的文件 |
在这台服务器上排查磁盘占用:
find /var/log -type f -size +50M -ls # 找 50M 以上的日志,配合 -ls 看大小
提示
mtime -1表示"最近 1 天内被改过",mtime +30表示"超过 30 天没动过",清理旧备份、旧日志很常用。对结果批量施加操作,用-exec ... \;。
易错点¶
.和..别拼错:cd ..(两点)回上两级会出错。- 删除前先
ls:rm没有回收站,任何rm -r之前先ls看清要删什么。 - 路径里有空格要加引号:
"我的 文件"要加引号,否则会被拆成两个参数。 find /别直接跑:全盘搜索很慢且拖垮 IO,尽量用绝对路径限定范围。
相关命令¶
ls、pwd、cd、cp、mv、rm、mkdir、touch、ln、find、du(查目录大小)、tree(目录树)。