第六章:文件与目录操作:命令行中的“瑞士军刀”

第六章:文件与目录操作:命令行中的“瑞士军刀”

本章将聚焦于 Linux 命令行中最核心、最频繁使用的文件与目录操作命令。掌握这些工具是高效进行系统管理和开发的基础。我们将从文件系统的基本导航开始,逐步深入到文件的创建、删除、复制、移动,并最终学习如何在庞大的文件系统中高效、精确地查找所需的文件和命令。


6.1. 导航三剑客:pwd, ls, cd

在文件系统的“大树”中自由穿梭是所有操作的前提。pwdlscd 这三个命令构成了命令行导航的基石。

pwd (Print Working Directory)

此命令用于显示您当前所在的完整、绝对路径。当您在复杂的目录结构中感到迷失时,pwd 是您定位自身位置最可靠的工具。

1
2
$ pwd
/home/your_username/projects/my-first-project

ls (List)

ls 命令用于列出当前目录下的文件和子目录。它是您观察环境、获取信息的“眼睛”。ls 的强大之处在于其丰富的选项,可以组合使用以获得不同维度的信息。

  • ls -l (Long Format): 以长格式(详细信息)列出内容。

    1
    2
    $ ls -l
    -rw-r--r-- 1 prorise prorise 0 Sep 17 10:24 index.html

    输出解读(从左到右):

    1. 文件类型与权限: 第一个字符(- 代表文件, d 代表目录)。后面九个字符代表所有者、所属组、其他人的读®写(w)执行(x)权限。
    2. 硬链接数: 指向此文件的硬链接数量。
    3. 所有者: 文件或目录的拥有者。
    4. 所属组: 文件或目录所属的用户组。
    5. 大小: 文件大小(默认为字节)。
    6. 最后修改时间: 文件内容的最后修改日期和时间。
    7. 名称: 文件或目录的名称。
  • ls -a (All): 显示所有文件,包括以 . 开头的隐藏文件(通常是配置文件)。

  • ls -h (Human-readable): 必须与 -l 配合使用 (ls -lh),它会将文件大小以更易读的单位(如 K, M, G)显示。

  • ls -t (Time): 按最后修改时间排序,最新的文件会显示在最前面。

  • ls -r (Reverse): 反转当前的排序顺序。

常用组合: ls -alhtr 是一个非常实用的组合,它会以详细、易读的格式,列出所有文件(包括隐藏文件),并按时间从最旧到最新排序,让您能快速定位最近发生变化的文件。


cd (Change Directory)

cd 命令用于在目录之间切换。它有一些特殊的快捷方式,极大提升了导航效率。

  • cd <目录路径>: 切换到指定目录,如 cd /var/log
  • cd .: 切换到当前目录(. 代表当前目录),这在某些脚本场景中有用。
  • cd ..: 切换到上一级(父)目录(.. 代表父目录)。
  • cd ~ 或直接 cd: 快速返回当前用户的家目录 (/home/<username>)。
  • cd -: 切换到 上一次 所在的目录。这是一个非常高效的快捷方式,用于在两个目录间来回跳转。

6.2. 增删改查:touch, mkdir, rm, cp, mv

这是文件系统的基本“CRUD”(Create, Read, Update, Delete)操作在命令行中的体现。

  • touch <文件名>:
    主要有两个功能:1. 如果文件不存在,则创建一个空的文本文件。 2. 如果文件已存在,则更新其访问和修改时间为当前时间。

  • mkdir <目录名>:
    创建一个新的目录。

    • -p (parents): 这是一个极其有用的选项,允许您一次性创建多层嵌套的目录,即使父目录不存在也会被自动创建。例如:mkdir -p new_project/src/components
  • rm <文件名>:
    删除文件。

    • -r (recursive): 递归删除。要删除一个目录及其内部所有内容,必须使用此选项。
    • -f (force): 强制删除,忽略不存在的文件并且从不提示。

删库跑路警告: rm -rf / 是 Linux 中最危险的命令之一。rm -rf 会无提示地强制递归删除指定目录下的所有内容。在使用 rm -rf 时,请务必再三确认您所在的路径和要删除的目标,一旦执行,数据恢复将极其困难甚至不可能。

  • cp <源> <目标>:
    复制文件或目录。

    • -r (recursive): 复制目录时必须使用此选项,它会复制整个目录及其内容。示例:cp -r ~/projects/app1 /var/www/app1 整个目录复制到 /var/www/ 下。
  • mv <源> <目标>:
    移动或重命名文件/目录。mv 命令有两个核心用途:

    1. 移动: 如果“目标”是一个已存在的目录,mv 会将“源”移动到该目录下。
      mv server.js ./config/
    2. 重命名: 如果“目标”是一个不存在的文件名(且在同一目录下),mv 会将“源”重命名。
      mv server.js app.js

6.3. 搜索利器 find

find 是一个功能极其强大的文件搜索工具,它通过遍历文件系统来根据指定的条件进行实时查找。基本语法为:find [起始路径] [表达式选项] [操作]

  • 按名称查找 (-name):
    支持通配符 *-iname 为不区分大小写的版本。
    find /home/your_username -name "*.js"
  • 按类型查找 (-type):
    find . -type d (查找所有目录)
    find . -type f (查找所有普通文件)
  • 按大小查找 (-size):
    + 表示大于,- 表示小于。单位:c(字节), k(KB), M(MB), G(GB)。
    find /var/log -type f -size +100M (查找 /var/log 目录下大于 100MB 的文件)
  • 按修改时间查找 (-mtime):
    -n (n 天内修改过), +n (n 天前修改过)。
    find . -mtime -7 (查找 7 天内被修改过的文件)

6.4 核心速查总结

分类关键命令核心描述
文件系统导航pwd显示当前工作目录的绝对路径,用于精确定位。
ls (及 -l, -a, -h, -t, -r 选项)列出目录内容。-l 提供详细信息,-a 显示隐藏文件,-h 使大小易读。是观察环境的主要工具。
cd (及 . .. ~ - 特殊符号)切换目录。~ 用于快速返回家目录,- 用于在最近两个目录间快速跳转,极大提升效率。
文件/目录管理touch <文件名>创建空文件或更新已存在文件的时间戳。
mkdir <目录名> (及 -p 选项)创建目录。-p 选项可以一次性创建多层嵌套目录,非常实用。
rm <文件/目录> (及 -r, -f 选项)删除文件或目录。-r 用于递归删除目录,-f 用于强制删除。rm -rf 是高危操作,需谨慎使用。
cp <源> <目标> (及 -r 选项)复制文件或目录。复制目录时必须使用 -r 选项。
mv <源> <目标>移动或重命名文件/目录。其具体行为取决于“目标”是否存在。
文件内容搜索find <路径> <表达式>实时、递归地在文件系统中按名称、类型、大小、修改时间等多种条件查找文件,是强大的搜索工具。