王美洁

1.3 文件与目录管理

1. 最常见的文件命令

命令全称主要作用
pwdprint working directory显示当前所在目录
lslist列出当前目录下的文件和文件夹
cdchange directory切换目录
mkdirmake directory创建目录
cpcopy复制文件或目录
mvmove移动文件,或者给文件重命名
rmremove删除文件或目录

说是命令,其实就是英文的首字母缩写。然后哪为了增加不同的功能我们需要添加不同的参数。

结合参数更常见的用法:

bash
pwd                        # 显示当前所在目录
ls                         # 列出当前目录下的文件和文件夹
ls -l                      # 以详细格式显示文件信息
ls -a                      # 显示隐藏文件
ls -t                      # 按修改时间排序,新的排前面
ls -r                      # 反序显示
ls -R                      # 递归显示子目录内容

cd ..                      # 切换到上一级目录
cd -                       # 切换回上一次所在的目录
cd ~                       # 切换到用户家目录
                           #  Linux 系统中 . 表示本目录 .. 表示上一级目录 ~ 表示 HOME 目录
cd /                       # 回到根目录
cd relative/path           # 进入相对路径
cd /absolute/path          # 进入绝对路径

mkdir test                 # 创建一个名为 test 的目录
mkdir -p project/run1/logs # 递归创建多级目录

cp input.in backup.in      # 复制文件并另存为 backup.in
cp -r old_dir new_dir      # 递归复制整个目录

mv file1 file2             #  file1 重命名为 file2
mv *.txt results/          # 将当前目录下所有 txt 文件移动到 results 目录

这里的参数是可以叠加使用的,比如 ls -la 相当于同时启用了 -l-a 两个功能,即以长格式显示所有文件(包括隐藏文件)

如果你忘了某个命令怎么用,也不用硬背,最直接的办法就是先查帮助:

bash
man ls        # 查看 ls 的完整手册
ls --help     # 查看命令的简要帮助
mkdir --help  # 查看 mkdir 常用参数
cp -h         # 有些命令也支持 -h,但不是所有命令都统一

你可以先这样理解:

  • man:更完整,像正式说明书
  • --help:更简短,适合先快速扫一眼
  • -h:有些命令支持,但不是通用标准,不能默认所有命令都有

现在还有一个很实用的办法,就是直接问 LLM。比如:

  • cp mv 有什么区别?
  • ls -a ls -l 分别是什么意思?
  • rm -r rmdir 有什么区别?

但要注意,LLM 适合帮你快速理解概念、解释参数、给出例子;真正执行前,尤其是删除、移动、覆盖文件这类操作,最好还是结合 man--help 再确认一下。

2. 隐藏文件

Linux 里有一类文件和目录是以 . 开头的,例如:

  • .git
  • .ssh
  • .zshrc
  • .DS_Store

这类文件通常不会被普通的 ls 直接显示。

最常见的查看方式是:

bash
ls -a   # 显示所有文件,包括隐藏文件
ls -la  # 用详细格式显示所有文件,包括隐藏文件

另外你会看到:

  • .:当前目录
  • ..:上一级目录

它们也会在 ls -a 里出现,但这两个不是普通隐藏文件。

3. 文件名、后缀和脚本

很多同学刚接触 Linux 时,会下意识地沿用 Windows 的习惯,觉得文件类型主要靠后缀区分,比如:

  • .txt 是文本文件
  • .sh 是 shell 脚本
  • .py 是 Python 脚本

这样理解在日常使用里不算错,因为后缀确实能帮助人快速判断文件大概是干什么的。

但在 Linux 里,更准确的说法是:

  • 文件名只是文件名
  • 后缀更多是给人看的
  • 系统并不是只靠后缀判断一个文件能不能执行

比如:

  • run.sh
  • script.py
  • POSCAR
  • OUTCAR

它们本质上都只是文件。

所谓“脚本”,通常也可以先理解成一种文本文件。里面写了一串命令,交给某个解释器去执行。

比如:

  • bash run.sh
  • python test.py

真正决定怎么执行它的,通常是这些东西:

  • 文件内容本身
  • 你是用什么命令去执行它
  • 文件开头有没有类似 #!/bin/bash#!/usr/bin/env python 这样的解释器声明
  • 它有没有执行权限

所以这里先记一句最重要的话:

在 Linux 里,后缀主要是给人看的,不是系统判断文件类型和执行方式的唯一依据。

你后面看到没有后缀的输入文件、输出文件、配置文件时,就不会太困惑。

4. Tab 补全

是不是感觉敲命令很麻烦?前人早就想到了答案!自动补全。

在终端里输入一部分文件名、目录名或者命令后,按 Tab 键,shell 会尝试帮你自动补全。 默认的 shell 一般是 bash,zsh 的补全功能会更强大。

bash
cd proj<Tab>          # 自动补全目录名
cp INC<Tab> backup    # 自动补全文件名
ssh gp<Tab>           # 自动补全别名或命令

它的好处很直接:

  • 少打字
  • 少拼写错误
  • 文件路径很长时更省事

但也要注意:补全出来的内容不一定就是你真正想操作的对象。

5. 对 rm 保持敬畏

rm 是最需要小心的命令之一。

bash
rm file    # 删除一个文件
rm -r dir  # 递归删除目录
rm -rf dir # 强制递归删除目录,危险

rm 没有回收站。删了就是真删,恢复成本很高。

所以这里给一个很实际的建议:

  • 尽量不要形成无脑 rm -rf 的习惯
  • 删除前先 pwd
  • ls
  • 再确认当前目录和目标路径

一个更稳的删除目录思路是:

  1. cd 进入目标目录
  2. rm -r * 删除内部内容
  3. rm -r .* 删除隐藏文件内容,如果有的话
  4. 确认目录已空
  5. 回到上一级后再 rmdir

这里的 rmdir 是 remove directory 的缩写,用来删除空目录。它和 rm -r 的区别在于:rmdir 只能删除已经清空的目录,所以更收敛一些,也更适合放在最后一步做确认性删除。

6. 磁盘空间怎么快速看

很多时候你会遇到这种情况:

  • 目录越来越大,不知道是谁占了空间
  • 任务突然写不进去文件
  • 服务器提示磁盘快满了

这时最常用的就是:

bash
du -sh . # 查看当前目录总大小
du -sh * # 查看各子目录大小
df -h    # 查看磁盘空间使用情况

可以先这样理解:

  • du:更关心“某个目录到底占了多大”
  • df:更关心“整块磁盘还剩多少空间”

这里的参数:

  • -s:summary,只看汇总
  • -h:human readable,用更适合人看的单位显示

所以:

  • du -sh . 适合先看当前目录总大小
  • du -sh * 适合看哪个子目录最占空间
  • df -h 适合先判断是不是整块磁盘快满了

7. 软链接

软链接很像 Windows 里的快捷方式。

bash
ln -s /home/user/file.txt /home/user/links/mylink # 创建软链接

这里的:

  • ln:link,创建链接
  • -s:symbolic,表示创建的是软链接

你可以先把它理解成:

  • 不复制文件本体
  • 只创建一个指向原文件的入口

它适合的场景包括:

  • 给很长的路径做一个短入口
  • 给常用目录建一个顺手的跳转点
  • 不复制文件本体,只建立引用

所以对新手来说,最重要的不是背更多链接类型,而是先记住:

ln -s 就是在 Linux 里创建“快捷方式”。