命令行文件管理入门

发布于 2025-09-03 分类: Linux

为了避免在你的真实文件中造成混乱,我们会先创建一个安全的“沙盒”环境进行练习。

1. 准备一个安全的“沙盒”环境

我们将在系统的临时文件夹 /tmp 中创建一个名为 tutorial 的新目录。/tmp 目录下的文件通常在系统重启后会被清空,非常适合用来做临时实验。

# 创建一个新目录
mkdir /tmp/tutorial

# 进入这个新目录
cd /tmp/tutorial

知识点解析:

  • mkdir (make directory) 用于创建新目录。
  • cd (change directory) 用于切换当前工作目录。
  • /tmp/tutorial 是一个绝对路径。它以根目录 / 开始,告诉系统从最顶层开始寻找路径。如果只写 mkdir tmp/tutorial(没有开头的 /),命令会试图在当前目录下寻找 tmp 目录,如果找不到就会报错。
  • 你可以随时使用 pwd (print working directory) 命令来确认自己当前所在的目录位置。

2. 创建与管理目录

现在我们已经进入了安全的沙盒环境,让我们来创建一些子目录。

创建多个目录

mkdir 命令非常灵活,你可以一次性给它传递多个参数 (arguments),它会为你一次性创建所有目录。

mkdir dir1 dir2 dir3

使用 ls (list) 命令查看一下当前目录的内容:

ls

你会看到 dir1dir2dir3 这三个目录并列存在。

创建嵌套目录

有时候,你需要创建像 a/b/c 这样的层级目录。如果直接使用 mkdir a/b/c,在 a 目录不存在的情况下命令会失败。这时,我们可以使用一个非常有用的选项 (option) -p

选项通常以 --- 开头,用来改变命令的默认行为。-p 选项告诉 mkdir “请一并创建所有必要的父目录 (parent)”。

mkdir -p dir4/dir5/dir6
ls

这次 ls 只会显示新增了一个 dir4 目录。dir5dir4 里面,dir6dir5 里面。我们可以用 cdls 来验证一下:

cd dir4
ls      # 你会看到 dir5
cd dir5
ls      # 你会看到 dir6

# 使用 ".." 返回上一级目录,我们可以连用两次返回两级
cd ../..
pwd     # 确认回到了 /tmp/tutorial

关于选项(Options)的多种形式

命令行工具的选项有很多种写法,这主要是历史原因造成的。你无需全部记住,但了解一下会很有帮助。以下命令效果完全相同:

# 以下命令仅为演示,无需输入
mkdir --parents --verbose dir4/dir5  # 长单词形式
mkdir -p --verbose dir4/dir5         # 长短形式混合
mkdir -p -v dir4/dir5                # 多个短形式
mkdir -pv dir4/dir5                  # 合并短形式

处理带空格的名称

如果你想创建一个名字里带空格的目录,比如 "my photos",直接输入 mkdir my photos 会发生什么?

mkdir my photos
ls

你会发现,系统创建了两个目录:myphotos。这是因为在命令行中,空格是用来分隔参数的。为了让系统把 "my photos" 当作一个整体,你需要进行转义 (escaping),有三种常见方法:

# 1. 使用双引号
mkdir "folder 1"

# 2. 使用单引号
mkdir 'folder 2'

# 3. 使用反斜杠 `\` 来转义紧跟其后的空格
mkdir folder\ 3

ls

专家建议:告别空格

尽管命令行可以处理带空格的名称,但这无疑增加了操作的复杂性。资深的命令行用户倾向于使用下划线 _ 或连字符 - 来代替空格,例如 my_photosmy-photos。这会让你的生活轻松很多。

3. 创建与查看文件

目录已经够多了,现在来创建一些文件。

使用 echo> 创建文件

echo 命令会把它接收到的参数直接打印在屏幕上。

echo "这是一行测试文本"

> 符号是一个强大的功能,叫做输出重定向 (output redirection)。它能将一个命令原本要输出到屏幕的内容,转而写入到一个文件中。

# 这条命令不会在屏幕上显示任何东西
echo "这是第一个测试文件" > test_1.txt

# 让我们再创建几个
echo "这是第二个测试文件" > test_2.txt
echo "这是第三个测试文件" > test_3.txt

ls

现在你的目录里多了三个 .txt 文件。如果 > 指向的文件已存在,它会覆盖掉文件原有的所有内容。请务必小心使用!

使用 cat 查看和合并文件

cat 命令(来自 "concatenate",意为“连接”)可以用来查看文件内容。

cat test_1.txt

它最强大的功能是连接多个文件的内容并一次性输出。

cat test_1.txt test_2.txt test_3.txt

使用 >> 追加内容

如果你不想覆盖文件,而是想在文件末尾追加内容,可以使用 >>

echo "这是追加的一行!" >> test_1.txt
cat test_1.txt

现在 test_1.txt 会包含两行内容。

4. 提高效率的技巧

当文件变多时,手动输入每个文件名会很麻烦。命令行提供了一些强大的工具来简化这个过程。

使用通配符 *?

通配符是特殊的字符,可以匹配文件名中的模式。

  • ?:匹配任意单个字符。
  • *:匹配任意数量(包括零个)的字符。

假设你想查看所有 test_ 开头的 .txt 文件,以下命令是等效的:

# 手动输入所有文件名
cat test_1.txt test_2.txt test_3.txt

# 使用 ? 匹配单个数字
cat test_?.txt

# 使用 * 匹配数字及之后的所有字符
cat test_*.txt

现在,让我们用这个技巧把所有测试文件的内容合并到一个新文件中:

cat test_*.txt > combined.txt
cat combined.txt

使用 less 浏览长文件

当一个文件内容太多,一屏显示不完时,cat 会一次性把所有内容刷过去,你根本来不及看。这时,你需要一个分页器 (pager) 程序。

less 是一个现代且功能强大的分页器(它的名字是个玩笑,因为它比老旧的 more 命令功能“更多”)。

# 试着多追加几次内容,让 combined.txt 变长
cat test_*.txt >> combined.txt
cat test_*.txt >> combined.txt

# 使用 less 查看
less combined.txt

less 界面中,你可以:

  • 使用 上/下箭头键PageUp/PageDown 键来滚动。
  • 使用 Home/End 键跳转到文件开头/结尾。
  • q 键退出并返回到命令行。

5. 重要规则与最佳实践

最后,记住几个能让你避免很多麻烦的规则。

大小写敏感

在 Linux 和 macOS 中,文件名是大小写敏感的。File.txtfile.txtFILE.TXT 是三个完全不同的文件。

echo "小写" > a.txt
echo "大写" > A.TXT
ls

然而,在 Windows 系统中,文件名是大小写不敏感的,这三者会被视为同一个文件,可能导致数据丢失。

为了避免混淆和跨平台问题,强烈建议始终使用小写字母。

文件命名好习惯

综合以上所有内容,一个好的文件命名习惯是:

  1. 全部小写:避免因大小写混淆而出错。
  2. 使用字母、数字、下划线和连字符:即 a-z, 0-9, _, -
  3. _- 替代空格:让文件在命令行中更容易处理。
  4. 避免特殊字符:如 *, ?, &, $ 等,它们在命令行中有特殊含义。
  5. 包含文件扩展名:如 .txt, .md, .jpg,方便识别文件类型。

遵循这些简单的规则,将使你在命令行的旅程中更加顺畅。


-- 感谢阅读 --