在 Linux 上操作目录
创始人
2024-03-02 00:23:02
0

让我们继续学习一下 Linux 文件系统的树形结构,并展示一下如何在其中创建你的目录。

如果你不熟悉本系列(以及 Linux),请查看我们的第一部分。在那篇文章中,我们贯穿了 Linux 文件系统的树状结构(或者更确切地说是 文件层次结构标准 File Hierarchy Standard ,FHS)。我建议你仔细阅读,确保你理解自己能安全的做哪些操作。因为这一次,我将向你展示目录操作的魅力。

新建目录

在破坏之前,先让我们来创建。首先,打开一个终端窗口并使用命令 mkdir 创建一个新目录,如下所示:

mkdir 

如果你只输入了目录名称,该目录将显示在您当前所在目录中。如果你刚刚打开一个终端,你当前位置为你的家目录。在这个例子中,我们展示了将要创建的目录与你当前所处位置的关系:

$ pwd # 告知你当前所在位置(参见第一部分)
/home/
$ mkdir newdirectory # 创建 /home//newdirectory

(注:你不用输入 后面的文本。# 后面的文本为注释内容,用于解释发生了什么。它会被 shell 忽略,不会被执行)。

你可以在当前位置中已经存在的某个目录下创建新的目录,方法是在命令行中指定它:

mkdir Documents/Letters

这将在 Documents 目录中创建 Letters 目录。

你还可以在路径中使用 .. 在当前目录的上一级目录中创建目录。假设你进入刚刚创建的 Documents/Letters/ 目录,并且想要创建Documents/Memos/ 目录。你可以这样做:

cd Documents/Letters # 进入到你刚刚创建的 Letters/ 目录
mkdir ../Memos

同样,以上所有内容都是相对于你当前的位置做的。这就是使用了相对路径。

你还可以使用目录的绝对路径:这意味着告诉 mkdir 命令将目录放在和根目录(/)有关的位置:

mkdir /home//Documents/Letters

在上面的命令中将 更改为你的用户名,这相当于从你的主目录执行 mkdir Documents/Letters,通过使用绝对路径你可以在目录树中的任何位置完成这项工作。

无论你使用相对路径还是绝对路径,只要命令成功执行,mkdir 将静默的创建新目录,而没有任何明显的反馈。只有当遇到某种问题时,mkdir才会在你敲下回车键后打印一些反馈。

与大多数其他命令行工具一样,mkdir 提供了几个有趣的选项。 -p 选项特别有用,因为它允许你嵌套创建目录,即使目录不存在也可以。例如,要在 Documents/ 中创建一个目录存放写给妈妈的信,你可以这样做:

mkdir -p Documents/Letters/Family/Mom

mkdir 会创建 Mom/ 之上的整个目录分支,并且也会创建 Mom/ 目录,无论其上的目录在你敲入该命令时是否已经存在。

你也可以用空格来分隔目录名,来同时创建几个目录:

mkdir Letters Memos Reports

这将在当前目录下创建目录 LettersMemosReports

目录名中可怕的空格

……这带来了目录名称中关于空格的棘手问题。你能在目录名中使用空格吗?是的你可以。那么建议你使用空格吗?不,绝对不建议。空格使一切变得更加复杂,并且可能是危险的操作。

假设您要创建一个名为 letters mom/ 的目录。如果你不知道如何更好处理,你可能会输入:

mkdir letters mom

但这是错误的!错误的!错误的!正如我们在上面介绍的,这将创建两个目录 letters/mom/,而不是一个目录 letters mom/

得承认这是一个小麻烦:你所要做的就是删除这两个目录并重新开始,这没什么大不了。

可是等等!删除目录可是个危险的操作。想象一下,你使用图形工具DolphinNautilus 创建了目录 letters mom/。如果你突然决定从终端删除目录 letters mom,并且您在同一目录下有另一个名为 letters 的目录,并且该目录中包含重要的文档,结果你为了删除错误的目录尝试了以下操作:

rmdir letters mom

你将会有删除目录 letters 的风险。这里说“风险”,是因为幸运的是rmdir 这条用于删除目录的指令,有一个内置的安全措施,如果你试图删除一个非空目录时,它会发出警告。

但是,下面这个:

rm -Rf letters mom

(注:这是删除目录及其内容的一种非常标准的方式)将完全删除 letters/ 目录,甚至永远不会告诉你刚刚发生了什么。)

rm 命令用于删除文件和目录。当你将它与选项 -R(递归删除)和 -f(强制删除)一起使用时,它会深入到目录及其子目录中,删除它们包含的所有文件,然后删除子目录本身,然后它将删除所有顶层目录中的文件,再然后是删除目录本身。

rm -Rf 是你必须非常小心处理的命令。

我的建议是,你可以使用下划线来代替空格,但如果你仍然坚持使用空格,有两种方法可以使它们起作用。您可以使用单引号或双引号,如下所示:

mkdir 'letters mom'
mkdir "letters dad"

或者,你可以转义空格。有些字符对 shell 有特殊意义。正如你所见,空格用于在命令行上分隔选项和参数。 “分离选项和参数”属于“特殊含义”范畴。当你想让 shell 忽略一个字符的特殊含义时,你需要转义,你可以在它前面放一个反斜杠(\)如:

mkdir letters\ mom
mkdir letter\ dad

还有其他特殊字符需要转义,如撇号或单引号('),双引号()和&符号():

mkdir mom\ \&\ dad\'s\ letters

我知道你在想什么:如果反斜杠有一个特殊的含义(即告诉 shell 它必须转义下一个字符),这也使它成为一个特殊的字符。然后,你将如何转义转义字符(\)?

事实证明,你转义任何其他特殊字符都是同样的方式:

mkdir special\\characters

这将生成一个名为 special\characters/ 的目录。

感觉困惑?当然。这就是为什么你应该避免在目录名中使用特殊字符,包括空格。

以防误操作你可以参考下面这个记录特殊字符的列表。(LCTT 译注:此处原文链接丢失。)

总结

  • 使用 mkdir 创建新目录。
  • 使用 rmdir 删除目录(仅在目录为空时才有效)。
  • 使用 rm -Rf 来完全删除目录及其内容 —— 请务必谨慎使用。
  • 使用相对路径创建相对于当前目录的目录: mkdir newdir
  • 使用绝对路径创建相对于根目录(/)的目录: mkdir /home//newdir
  • 使用 .. 在当前目录的上级目录中创建目录: mkdir ../newdir
  • 你可以通过在命令行上使用空格分隔目录名来创建多个目录: mkdir onedir twodir threedir
  • 同时创建多个目录时,你可以混合使用相对路径和绝对路径: mkdir onedir twodir /home//threedir
  • 在目录名称中使用空格和特殊字符真的会让你很头疼,你最好不要那样做。

有关更多信息,您可以查看 mkdirrmdirrm 的手册:

man mkdir
man rmdir
man rm

要退出手册页,请按键盘 q 键。

下次预告

在下一部分中,你将学习如何创建、修改和删除文件,以及你需要了解的有关权限和特权的所有信息!

通过 Linux 基金会和 edX 免费提供的“Introduction to Linux”课程了解有关Linux的更多信息。


via: https://www.linux.com/blog/learn/2018/5/manipulating-directories-linux

作者:Paul Brown 选题:lujun9972 译者:way-ww 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

“韭菜免收通行费韭菜薹要收...
近日,在四川乐雅高速符溪收费站外,一名司机与收费站员工因运输的韭菜...
2025-07-12 11:41:09
VS2022配置工程的编译...
VS2022配置工程的编译路径(输出目录和中间目录&...
2025-06-01 19:24:39
【CMake入门教程】CM...
CMake教程专栏文章列表 【实例篇】01.第一个程序【实例篇】0...
2025-06-01 10:01:50
教你如何快速在Linux中...
工作中经常会有查看某个目录下最大的文件的需求,比如在...
2025-06-01 03:02:47
最新CCF目录推荐, 不容...
【本周推荐】我处近期新增多本计算机领域高质量SCI,...
2025-05-28 22:45:10
【Linux】目录结构、路...
目录 1. Linux目录结构 2. Linux路径 2.1 绝对...
2025-05-28 20:19:14

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
从 Yum 更新中排除特定/某... 作为系统更新的一部分,你也许需要在基于 Red Hat 系统中由于应用依赖排除一些软件包。如果是,如...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...
如何检查你的 Linux 系统... 不知道在使用哪个初始化系统?以下是方法。每个主流 Linux 发行版(包括 Ubuntu、Fedor...