简介
Linux 使用目录和文件组成的树状结构来组织数据。命令会在这棵树中的某个位置上执行,因此,可靠地处理文件需要先回答三个问题:我在哪里?这里有什么?我要操作的项目由哪个路径标识?
本实验将在 /home/labex/project/file-basics 中逐步练习这些概念。你将使用绝对路径和相对路径进行导航,查看可见和隐藏的条目,创建文件和目录,使用通配符选择名称,并安全地复制、移动和删除练习文件。最后,你还将学习终端快捷键,在不改变这些操作含义的情况下提高操作速度。
定位工作目录
在本步骤中,你将了解终端提示符与命令实际执行目录之间的关系。
Shell 始终有一个当前工作目录。相对路径从该目录开始解析,因此先确认当前位置可以避免许多初学者常见错误。使用该实验工作区的完整路径进入工作区:
cd /home/labex/project/file-basics
以 / 开头的路径称为绝对路径。它从文件系统根目录开始,无论你从哪里开始操作,都能标识同一个位置。
输出当前工作目录:
pwd
你应该看到:
/home/labex/project/file-basics
将这个位置保存下来作为证据。> 运算符会把输出重定向到 starting-location.txt;由于输出被写入文件,这次不会显示在终端中:
pwd > starting-location.txt
读取文件,确认保存的内容:
cat starting-location.txt
终端屏幕和文件中应该显示相同的绝对路径。
使用相对路径进行导航
在本步骤中,你将使用相对路径以及特殊名称 . 和 ..,在相邻目录之间移动。
如有需要,先返回工作区:
cd /home/labex/project/file-basics
列出其中的可见条目:
ls
你应该看到 path-map 和 starting-location.txt。使用相对路径进入 path-map。相对路径会从当前目录开始解析:
cd path-map
pwd
现在进入 north,并读取其中的参考文件:
cd north
cat reference.txt
输出应为 north reference。名称 .. 表示父目录,也就是当前目录上一级的位置:
cd ..
从 path-map 进入其子目录 south:
cd south
cat reference.txt
名称 . 表示当前目录。将当前绝对路径保存到实验根目录中:使用 pwd,并将相对目标路径设置为向上返回两级:
pwd > ../../relative-location.txt
使用绝对路径直接返回实验根目录:
cd /home/labex/project/file-basics
cat relative-location.txt
保存的路径应以 /path-map/south 结尾。你已经同时使用了相对路径移动和绝对路径返回。
查看目录内容
在本步骤中,你将使用 ls 选项查看隐藏名称和文件详细信息。
在实验根目录中执行普通列表查看:
cd /home/labex/project/file-basics
ls
Linux 通常会隐藏以点号开头的名称。-a 选项表示「全部」,会将这些条目也显示出来:
ls -a
现在你应该能看到 .practice-note,以及表示当前目录的 . 和表示父目录的 ..。
-l 选项会生成长格式列表,其中包含权限、所有者、大小、时间和名称:
ls -l
组合这些选项,以长格式查看所有条目:
ls -la
输出的每一行都以类型和权限字段开头。开头的 d 表示目录;开头的 - 表示普通文件。权限将在后续内容中详细学习。
保存包含隐藏条目在内的名称。ls 在这个受控工作区中已经按字母顺序显示名称,因此暂时不需要额外的排序命令:
ls -A > all-names.txt
与 -a 不同,-A 会省略特殊条目 . 和 ..,但保留其他隐藏名称。显示保存的结果:
cat all-names.txt
列表中应包含 .practice-note、path-map 以及前面步骤创建的文件。
创建目录和文件
在本步骤中,你将创建一个小型项目目录树,并向普通文件中写入文本。
mkdir 用于创建目录。它的 -p 选项还会创建缺少的父目录,因此一条命令就能建立嵌套路径:
cd /home/labex/project/file-basics
mkdir -p workspace/docs workspace/logs
这会创建 workspace 以及它的子目录 docs 和 logs。查看创建结果:
find workspace -maxdepth 2 -type d
当指定名称不存在时,touch 会创建空文件。一次创建两个文件:
touch workspace/docs/guide.txt workspace/logs/app.log
向指南文件写入内容。单个 > 会使用命令输出替换目标文件的内容:
echo "Linux file practice" > workspace/docs/guide.txt
使用 >> 追加第二行;该运算符会保留已有内容:
echo "Paths make locations predictable" >> workspace/docs/guide.txt
读取整个文件:
cat workspace/docs/guide.txt
你应该按原有顺序看到两行内容。空的 app.log 也已经存在,稍后将用于练习通配符。
使用通配符选择名称
在本步骤中,你将创建多组文件,并根据文件名模式选择它们。
进入日志目录:
cd /home/labex/project/file-basics/workspace/logs
大括号展开会在命令运行前生成多个字面名称。创建编号日志文件:
touch app{1..3}.log worker{1..2}.log notes.txt
Shell 会将 {1..3} 展开为 1 2 3,因此 app{1..3}.log 会变成三个参数。
通配符有所不同:它会匹配已经存在的名称。* 可以匹配任意长度的字符序列:
ls *.log
输出会包含所有以 .log 结尾的名称,但不包括 notes.txt。
? 通配符恰好匹配一个字符。只列出带编号的 app 日志:
ls app?.log
Shell 会按字母顺序展开文件名模式。printf 会将展开后的每个名称分别打印在单独一行,> 则保存这些行:
printf '%s\n' *.log > matched-logs.txt
cat matched-logs.txt
保存的列表应包含 app.log、app1.log、app2.log、app3.log、worker1.log 和 worker2.log。如果将 *.log 放在引号中,就会阻止通配符展开,因此这里特意不加引号。
安全地复制、移动和删除文件
在本步骤中,你将先比较 cp、mv 和 rm 的作用,然后在后续挑战中使用它们。
返回工作区目录:
cd /home/labex/project/file-basics/workspace
cp SOURCE DESTINATION 会创建另一个文件,同时保留源文件不变。为指南文件创建备份:
cp docs/guide.txt docs/guide-backup.txt
确认两个文件的内容完全相同。cmp 会逐字节比较两个文件;如果文件匹配,它不会输出任何内容;如果出现错误消息,则表示两个文件不同:
cmp docs/guide.txt docs/guide-backup.txt
mv SOURCE DESTINATION 会移动或重命名项目。将备份移动到工作区根目录,并为它指定一个更清晰的名称:
mv docs/guide-backup.txt archived-guide.txt
分别列出这两个位置:
ls docs
ls
你应该在 docs 下看到 guide.txt,并在当前目录中看到 archived-guide.txt。
rm 会永久删除指定的文件;终端通常没有回收站。只删除可丢弃的 notes 文件:
rm logs/notes.txt
再次列出该目录,使删除结果清晰可见:
ls logs
其中不应再出现 notes.txt。原始指南文件和移动后的副本仍然可用,只有明确指定的可丢弃文件被删除。
使用终端快捷键提高效率
在本步骤中,你将练习四个终端控制操作,减少输入量,并帮助处理持续运行的命令。
先进入文档目录:
cd /home/labex/project/file-basics/workspace/docs
运行一个稍后会重复使用的命令:
cat guide.txt
按一次向上方向键(Up Arrow)。上一条 cat guide.txt 命令应重新出现在命令行提示符处。按 Enter 键再次运行它。命令历史调取功能可以避免重复输入,而且在执行前仍然可以编辑调取出的命令行。
接下来输入 cat g,但不要按 Enter 键,然后按 Tab 键。由于只有 guide.txt 与之匹配,Shell 应该会自动补全文件名。按 Enter 键运行补全后的命令。
现在启动一个会持续等待的命令:
tail -f /dev/null
tail -f 会持续跟踪文件并等待新数据。/dev/null 不会提供有用的行,因此该命令看起来会静默停留。按 Ctrl+C 发送中断信号并返回命令行提示符。当需要停止前台命令时,这是通常采用的第一种响应方式。
按 Ctrl+L 清除屏幕上显示的旧输出。与 clear 一样,这不会删除文件或命令历史。
返回命令行提示符后,创建一个完成标记:
echo "Shortcuts practiced" > /home/labex/project/file-basics/shortcuts-complete.txt
cat /home/labex/project/file-basics/shortcuts-complete.txt
看到该标记,说明你已经在交互式练习后成功恢复了命令行提示符。
总结
你学习了工作目录和路径如何控制文件操作。你使用绝对路径和相对路径进行导航,查看隐藏条目和元数据,创建目录树和文本文件,使用通配符选择名称,并比较复制、移动和永久删除的区别。你还练习了调取命令历史、Tab 补全、Ctrl+C 和 Ctrl+L。下一个实验将介绍当遇到不熟悉的命令或选项时,如何查找可靠的帮助信息。



