Bash 零基础教程

Bash 文件与目录操作

无论你是管理服务器配置的系统管理员、编写脚本以自动化任务的开发人员,还是处理大型数据集的数据科学家,在命令行中导航、创建、修改和删除文件与目录的能力都是必不可少的。

本章将为你提供在 Bash 中执行这些任务的全面指南,为更高级的脚本编写和自动化打下坚实的基础。

1. 理解文件系统层级结构

Linux 和其他类 Unix 操作系统中的文件系统被组织成一个层级树状结构。这个结构的基础是根目录(Root Directory),用 / 表示。所有其他的文件和目录都组织在这个根目录之下。理解这种层级结构对于有效地在文件系统中导航至关重要。

  • 根目录 (/): 最高级别的目录。其他所有内容都是根目录的子目录。
  • 家目录 (/home/username): 每个用户都有一个用于存放个人文件的专属目录。快捷符号 ~ 代表当前用户的家目录。

常见系统目录:

  • /bin: 包含基本的用户命令二进制文件(可执行程序)。
  • /boot: 包含启动系统所需的核心文件。
  • /dev: 包含设备文件(硬件映射)。
  • /etc: 包含系统全局的配置文件。
  • /lib: 包含程序所需的共享库代码。
  • /media: 可移动媒体(如 U 盘)的挂载点。
  • /mnt: 临时文件系统的挂载点。
  • /opt: 可选的应用程序软件包安装位置。
  • /proc: 包含进程和系统信息的虚拟目录。
  • /root: 系统超级管理员(root 用户)的家目录。
  • /sbin: 系统管理员使用的二进制命令。
  • /tmp: 临时文件存放地。通常在系统重启时会被清空。
  • /usr: 与用户相关的程序、库、文档等。
  • /var: 可变数据存放地(如日志文件、数据库等)。

层级结构示例:

  • Apache Web 服务器的配置文件可能位于 /etc/apache2/apache2.conf
  • 用户名为 john 的个人文档可能存储在 /home/john/Documents

   假设场景: 想象你正在开发一个 Web 应用程序。该应用程序的配置文件可能存放在 /opt/myapp/config,Web 服务器的文档根目录可能是 /var/www/myapp,而日志文件可能会写入 /var/log/myapp。理解这一套层级标准有助于你高效地组织和管理应用程序的文件。

2. 创建文件与目录

Bash 提供了专门的命令来创建新的文件和目录:

  • touch: 创建一个空文件。如果文件已经存在,它会更新该文件的时间戳(最后修改时间)。
  • mkdir: (Make Directory) 创建一个新的目录。

命令示例:

创建一个名为 newfile.txt 的空文件:

touch newfile.txt

创建一个名为 newdir 的目录:

mkdir newdir

newdir 内部创建一个名为 anotherdir 的目录(使用 -p 选项可以确保如果父目录不存在则自动创建它们):

mkdir -p newdir/anotherdir

注意:如果不加 -p 选项,当 newdir 不存在时,此命令将会报错失败。

一次性创建多个并列目录:

mkdir dir1 dir2 dir3

假设场景:
想象你正在设置一个项目目录结构。你可以使用 mkdir -p project/src/main/java 一次性创建出完整的目录树。然后,你可以使用 touch project/README.md 为该项目创建一个基础的自述文件。

3. 删除文件与目录

Bash 同样提供了用于删除文件和目录的命令:

  • rm: (Remove) 删除文件。
  • rmdir: (Remove Directory) 删除空目录。
  • rm -r: 递归删除目录及其内部的所有内容。这是一个非常强大的命令,必须谨慎使用。

命令示例:

删除名为 oldfile.txt 的文件:

rm oldfile.txt

删除名为 emptydir 的空目录:

rmdir emptydir

删除名为 fulldir 的目录及其包含的所有内容:

rm -r fulldir

警告: 此命令将永久删除该目录及其所有内容,命令行中没有“回收站”或“撤销”选项。一个好的习惯是,在执行删除前先用 ls -R fulldir 查看一下到底有哪些内容会被删掉。

使用通配符(*)删除多个文件:

rm *.txt

此命令将删除当前目录下所有以 .txt 结尾的文件。使用通配符时请务必小心!

交互式删除(增加安全性):

rm -i important_file

-i 标志会在删除每个文件之前弹出一个提示,要求你确认(输入 y 或 n)。

假设场景: 你有一个包含不再需要的日志文件的临时目录。你可以使用 rm -r /tmp/old_logs 来删除整个目录及其内容。但是,在按下回车键执行此类命令之前,一定要再三核对路径是否正确。

4. 复制与移动文件和目录

在管理文件时,经常需要复制或移动它们:

  • cp: (Copy) 复制文件和目录。
  • mv: (Move) 移动文件和目录。它也常被用来重命名文件。

命令示例:

将名为 myfile.txt 的文件复制并命名为 myfile_copy.txt

cp myfile.txt myfile_copy.txt

将名为 myfile.txt 的文件复制到名为 backup 的目录中:

cp myfile.txt backup/

递归复制一个名为 mydir 的目录及其所有内容,命名为 mydir_copy(使用 -r 选项处理目录):

cp -r mydir mydir_copy

将名为 oldfile.txt 的文件移动(实际上是重命名)为 newfile.txt

mv oldfile.txt newfile.txt

将名为 myfile.txt 的文件移动到名为 destination 的目录中:

mv myfile.txt destination/

将名为 olddir 的目录移动并重命名为 newdir

mv olddir newdir

假设场景:
你重组了项目结构,需要将几个文件从一个目录移动到另一个目录。你可以使用 mv file1.txt file2.txt file3.txt destination_directory/ 一次性移动所有这三个文件。

5. 文件权限简介

文件权限控制着谁可以读取(read)、写入(write)和执行(execute)特定的文件和目录。在 Bash 中,你可以分别使用 ls -l 命令来查看权限,使用 chmod 命令来修改权限。不过,关于文件权限的深入探讨超出了本章的范围,我们将在后续模块中专门讲解。