基础文件操作

LinuxBeginner
立即练习

介绍

欢迎来到 Linux 基础文件操作实验!在 Linux 中,几乎所有内容都被视为文件,这使得文件操作成为使用系统的基础。本实验将引导你学习管理文件和目录最常用的命令,帮助你更熟练地在 Linux 系统中进行导航和组织。

这是一个引导实验,提供了逐步指导来帮助你学习和练习。请仔细遵循说明完成每个步骤并获得动手经验。历史数据表明,这是一个中级水平的实验,完成率为 67%。它获得了学习者 99% 的好评率。

了解你的工作环境

在 Linux 中,每个用户通常都有一个「主目录」(Home Directory),用 ~ 表示。不过,在本实验环境中,我们将从 /home/labex/project 目录开始,这是我们的默认工作目录。

首先,请在桌面上打开一个终端,或者切换到实验环境中的终端选项卡。

终端界面截图

让我们先来了解当前所处的位置:

pwd

pwd 代表「打印工作目录」(print working directory)。它会显示你在文件系统中的当前位置。这个命令对于在 Linux 文件结构中定位自己至关重要。你应该会看到输出为 /home/labex/project

现在,让我们探索一下当前目录与主目录之间的关系:

echo ~

注意:如果你因为某些国家的键盘布局差异而无法在桌面终端输入 ~ 符号,可以尝试切换到虚拟机界面左上角的独立终端(Terminal)选项卡。

该命令将显示主目录的路径,应该是 /home/labex

要查看当前目录的内容,请使用:

ls

这将列出你当前工作目录(/home/labex/project)下的文件和目录。

我们也来检查一下主目录的内容:

ls ~

此命令会列出主目录的内容,它可能与你当前的工作目录不同。

理解当前工作目录和主目录之间的区别,对于有效地在 Linux 文件系统中导航非常重要。

在文件系统中导航

Linux 使用的是所谓的「层级文件系统」。你可以把它想象成一棵带有分支的大树。主干被称为「根目录」(Root Directory),用一个正斜杠 / 表示。所有其他目录和文件都从这个根部延伸出来。

让我们探索如何在这个树状结构中移动:

  1. 检查当前位置:
pwd

这里应该显示 /home/labex/project。如果没有显示这个,说明你可能在其他目录。使用 cd /home/labex/project 即可回到起点。

  1. 查看当前目录的内容:
ls

这会列出当前位置的所有文件和文件夹。由于 /home/labex/project 目前是空的,所以你什么也看不到。

  1. 向上移动一级到父目录:
cd ..

.. 代表「上一级目录」。执行此命令后,再次输入 pwd。你现在应该处于 /home/labex 中。

  1. 返回你的项目目录:
cd project

这会带你回到 /home/labex/project

  1. 前往你的主目录:
cd ~

~ 是主目录的快捷方式。输入 pwd 确认你处于 /home/labex

  1. 使用绝对路径返回项目目录:
cd /home/labex/project

这被称为「绝对路径」,因为它从根目录(/)开始并提供了完整的定位信息。

创建文件并列出目录内容

既然我们已经知道如何导航,现在来创建一些文件并探索如何列出目录内容。

首先,确保你处于 /home/labex/project 目录中:

cd /home/labex/project
  1. 让我们创建几个文件:
touch file1.txt

touch 命令用于创建一个空文件。如果文件已经存在,它会更新文件的时间戳而不改变其内容。这是创建新的空文件的一种简单方法。

echo "Hello, Linux" > file2.txt

这个命令做了两件事:

  • echo 是一个打印文本的命令。
  • > 符号将 echo 的输出重定向到一个名为 file2.txt 的文件中。如果该文件不存在,则创建它;如果已存在,则覆盖其内容。
echo "Hidden file" > .hiddenfile

这会创建一个隐藏文件。在 Linux 中,任何以点(.)开头的文件或目录名都被视为隐藏的。

  1. 现在,让我们创建一个目录:
mkdir testdir

mkdir 命令(make directory 的缩写)会创建一个名为 testdir 的新目录。

  1. 基础列表显示:
ls
目录内容列出输出

这会显示当前目录的内容。你应该能看到 file1.txtfile2.txttestdir

  1. 详细列表显示:
ls -l

-l 选项(那是小写的 L,不是数字 1)提供「长格式」列表。你会看到额外的详细信息,如文件权限、所有者、大小和修改日期。

  1. 显示隐藏文件:
ls -a

这将显示所有文件,包括我们创建的隐藏文件 .hiddenfile

  1. 组合选项:
ls -la

这将长格式(-l)与显示所有文件(-a)的功能结合在了一起。

  1. 列出特定目录的内容:
ls -l testdir

这会列出 testdir 目录的内容(此时该目录应该是空的)。

复制文件和目录

现在我们有了一些可以操作的文件,让我们学习如何复制它们:

  1. 复制文件:
cp file1.txt file1_copy.txt

这会在当前目录下创建一个 file1.txt 的副本,命名为 file1_copy.txt

让我们验证一下副本:

ls
  1. 将文件复制到另一个目录:
cp file2.txt testdir/

这会将 file2.txt 复制到 testdir 目录中。

  1. 复制目录:
cp -r testdir testdir_copy

-r 选项代表「递归」(recursive)。在复制目录时必须使用此选项,以确保目录内的所有内容都被一并复制。

  1. 验证我们的复制操作:
ls
ls testdir
ls testdir_copy
终端显示已复制的文件

移动与重命名文件和目录

在 Linux 中,mv 命令既用于移动也用于重命名:

  1. 重命名文件:
mv file1.txt newname.txt

这会将 file1.txt 重命名为 newname.txt

  1. 将文件移动到目录:
mv newname.txt testdir/

这会将 newname.txt 移动到 testdir 目录中。

  1. 重命名目录:
mv testdir_copy new_testdir

这会将 testdir_copy 重命名为 new_testdir

  1. 在一个命令中同时完成移动和重命名:
mv testdir/newname.txt ./original_file1.txt

这会将 newname.txttestdir 中移出,并重命名为当前目录下的 original_file1.txt

  1. 验证我们的更改:
ls
ls testdir
命令执行结果显示

删除文件和目录

删除文件和目录是一项强大的操作。与图形界面不同,命令行通常没有「回收站」。使用 rm 进行的删除通常是永久性的。在执行命令之前,请务必仔细检查!

让我们清理一下创建的文件和目录。确保你处于 /home/labex/project 目录中。

pwd
ls -a

你应该能看到类似 original_file1.txt.hiddenfilefile2.txt 的文件,以及 testdirnew_testdir 等目录。

-rw-rw-r-- 1 labex labex   12 May  3 08:44 .hiddenfile
-rw-rw-r-- 1 labex labex    0 May  3 08:45 file1_copy.txt
-rw-rw-r-- 1 labex labex   13 May  3 08:44 file2.txt
drwxrwxr-x 2 labex labex   23 May  3 08:45 new_testdir
-rw-rw-r-- 1 labex labex    0 May  3 08:44 original_file1.txt
drwxrwxr-x 2 labex labex   23 May  3 08:45 testdir
  1. 删除单个文件:

    rm original_file1.txt

    rm 命令(remove 的缩写)用于删除文件。让我们检查一下:

    ls

    original_file1.txt 应该已经消失了。

  2. 交互式删除(更安全):

    让我们尝试删除 file2.txt,但这次使用交互式标志 -i

    rm -i file2.txt

    -i 选项会在删除每个文件之前提示你确认。输入 y(代表 yes)并按回车键确认删除。如果你输入 n 或其他任何内容,文件将不会被删除。

    ls

    如果你确认了,file2.txt 就会消失。

  3. 删除空目录:

    还记得我们通过重命名 testdir_copy 创建的 new_testdir 吗?让我们检查它是否为空:

    ls new_testdir

    如果它是空的(不显示任何文件),我们可以使用 rmdir 删除它:

    rmdir new_testdir

    rmdir(删除目录)仅适用于目录。

    ls

    如果 new_testdir 无法删除,那是因为它不是空的。

  4. 尝试删除非空目录:

    现在,让我们对 testdir 尝试使用 rmdir,它里面还包含我们在步骤 4 中复制的 file2.txt

    ls testdir
    rmdir testdir

    你可能会看到类似 rmdir: failed to remove 'testdir': Directory not empty 的错误消息。这是正常的,因为 rmdir 无法删除包含文件或其他目录的目录。

  5. 删除目录及其内容(递归删除):

    要删除一个为空的目录,我们需要使用带有 -r(递归)选项的 rm

    rm -r testdir

    此命令会删除 testdir 目录及其内部的所有内容。请谨慎使用此命令。

    ls

    testdir 现在应该已经消失了。

  6. 强制删除(极其谨慎使用):

    有时,你可能希望在不出现提示的情况下删除文件,即使它们是写保护的(尽管我们这里没有这样的文件)。-f(强制)选项可以实现这一点。

    让我们删除隐藏文件:

    rm .hiddenfile
    ls -a

    现在,让我们结合使用 -r-frm -rf 命令极其强大且具有潜在危险。它会递归地删除目录(-r)并强制删除而不进行提示(-f)。

    !!!危险区域!!!
    在运行 rm -rf 之前,请绝对确定你知道自己在删除什么。一个小小的拼写错误就可能删除关键的系统文件或你的个人数据,且无法撤销。例如,rm -rf / 可能会尝试删除你的整个系统(如果你有权限的话)。务必反复检查路径。

    让我们创建一个临时目录和文件来演示(安全操作):

    mkdir temp_dir
    touch temp_dir/temp_file.txt
    ls -R temp_dir

    注意:你可能注意到我们在 ls 中使用了大写的 -R,而不是像在 cprm 中那样使用小写的 -r。这不仅仅是大小写的区别——它们是完全不同的选项!对于 ls-R 表示「递归列出」(列出子目录),而 -r 表示「反向排序」。对于 cprm,递归选项是小写的 -r。请务必查阅手册(man 命令)以了解每个命令的具体选项。

    现在,让我们强制删除它:

    rm -rf temp_dir

    验证删除结果:

    ls

    temp_dir 应该已经消失了。

请记住:在 Linux 命令行中,删除的文件通常永远找不回来了。请谨慎使用 rm

总结

恭喜你!你已经学习了 Linux 中核心的文件操作:

  • 使用 cdpwd 在文件系统中导航
  • 使用 touchmkdir 创建文件和目录
  • 使用 ls 及其选项列出内容
  • 使用 cp 复制文件和目录
  • 使用 mv 移动和重命名
  • 使用 rmrmdir 删除文件和目录

这些命令构成了 Linux 文件管理的基础。通过练习,你将能够熟练地从命令行管理你的文件和目录。

请记住要谨慎使用这些命令,尤其是 rm,因为它会永久删除文件和目录,且无法恢复。

在继续你的 Linux 探索之旅时,可以查阅联机帮助页(例如 man ls)来深入了解每个命令及其选项。祝你探索愉快!