本章目标:
- 描述Linux如何组织文件,以及文件系统层次结构中各种目录的用途
- 指定文件相对于当前工作目录的位置,并按绝对路径,确定和更改工作目录,并列出目录的内容
- 创建、复制、移动和删除文件和目录
- 使用硬链接和符号(或“软”)链接使多个文件名引用同一文件
- 通过使用Bash Shell的模式匹配特性,有效地运行影响许多文件的命令
Linux文件系统的层次结构
路径 | 子目录 | 作用 |
---|---|---|
/ | - | 文件系统层次结构顶部的根目录 |
/usr | - | 已安装的软件、共享库、包含文件和只读程序数据 |
-> | /usr/bin | 用户命令 |
-> | /usr/sbin | 系统管理命令 |
-> | /usr/local | 本地定制软件 |
/etc | - | 特定于此系统的配置文件 |
/var | - | 特定于此系统的变量数据,应在启动之间保持不变。可以在此目录下找到动态更改的文件,如数据库、缓存目录、日志文件、打印机假脱机文档和网站内容 |
/run | - | 自上次启动以来启动的进程的运行时数据。这包括进程ID文件和锁文件等。重新启动时将重新创建此目录的内容 |
/home | - | 此目录是普通用户存储个人数据和配置文件的地方 |
/root | - | 此目录是超级用户root存储个人数据和配置文件的地方 |
/tmp | - | 临时文件的全局可写空间。已10天未被访问、更改或修改的文件将自动从此目录中删除。在/var/tmp目录下,则是30天的期限 |
/boot | - | 启动过程所需的文件 |
/dev | - | 包含系统用来访问硬件的特殊设备文件 |
课后习题
-
1. Which directory contains persistent, system-specific configuration data?
a. /etc
b. /root
c. /run
d. /usr -
2. Which directory is the top of the system’s file system hierarchy?
a. /etc
b. /
c. /home/root
d. /root -
3. Which directory contains user home directories?
a. /
b. /home
c. /root
d. /user -
4. Which directory contains temporary files?
a. /tmp
b. /trash
c. /run
d. /var -
5. Which directory contains dynamic data, such as for databases and websites?
a. /etc
b. /run
c. /usr
d. /var -
6. Which directory is the administrative superuser’s home directory?
a. /etc
b. /
c. /home/root
d. /root -
7. Which directory contains regular commands and utilities?
a. /commands
b. /run
c. /usr/bin
d. /usr/bin -
8. Which directory contains non-persistent process runtime data?
a. /tmp
b. /etc
c. /run
d. /var -
9. Which directory contains installed software programs and libraries?
a. /etc
b. /lib
c. /usr
d. /var
文件命名
绝对路径与相对路径
绝对路径:
绝对路径是完全限定名,指定文件在文件系统层次结构中的确切位置,它从根目录(/)开始,并指定要到达特定文件必须遍历的每个子目录。文件系统中的每个文件都有一个唯一的绝对路径名,可以用一个简单的规则识别:以正斜杠(/)作为第一个字符的路径名是绝对路径名。
当前工作目录与相对路径
与绝对路径一样,相对路径标识唯一的文件,仅指定从工作目录到达该文件所需的路径。当用户登录并打开命令窗口时,初始位置通常是用户的主目录。系统进程也有一个初始目录。用户和进程根据需要导航到其他目录;当前工作目录指的是它们的当前位置。而识别相对路径名遵循一个简单的规则:路径名的第一个字符不是正斜杠(/),而是相对路径名。
注意:Linux文件系统,包括但不限于ext4、XFS、GFS2和GlusterFS,是区分大小写的。
路径相关命令
命令 | 常用的选项 | 作用 |
---|---|---|
pwd | - | 显示该shell当前工作目录的完整路径名,这可以帮助您确定使用相对路径名访问文件的语法 |
ls | 列出指定目录的目录内容,若未指定目录,则列出当前工作目录的目录内容 | |
-> | -l | 显示长列表格式 |
-> | -a | 显示所有文件,包括隐藏文件 |
-> | -R | 显示所有子目录内容 |
cd | 更改shell的当前工作目录。若未指定命令的任何参数,则该命令将更改为主目录 | |
-> | - | 返回到用户上一个活动的目录 |
-> | .. | 返回到父目录 |
-> | . | 指定当前目录,其中当前位置是源目标参数,这样就不需要键入目录的绝对路径名 |
touch | 将文件的时间戳更新为当前日期和时间,而不会对其进行其他修改。同时也经常用于创建空文件 |
课后习题
-
1. Which command is used to return to the current user’s home directory, assuming the current working directory is /tmp and their home directory is /home/user?
a. cd
b. cd ..
c. cd .
d. cd *
e. cd /home -
2. Which command displays the absolute path name of the current location?
a. cd
b. pwd
c. ls ~
d. ls -d -
3. Which command will always return you to the working directory used prior to the current working directory?
a. cd -
b. cd -p
c. cd ~
d. cd .. -
4. Which command will always change the working directory up two levels from the current location?
a. ~
b. cd ../
c. cd ../..
d. cd -u2 -
5. Which command lists files in the current location, using a long format, and including hidden files?
a. llong ~
b. ls -a
c. ls -l
d. ls -al -
6. Which command will always change the working directory to /bin?
a. cd bin
b. cd /bin
c. cd ~bin
d. cd -bin -
7. Which command will always change the working directory to the parent of the current location?
a. cd ~
b. cd ..
c. ../..
d. cd -u1 -
8. Which command will change the working directory to /tmp if the current working directory is /home/student?
a. cd tmp
b. cd ..
c. cd ../../tmp
d. cd ~tmp
命令行文件管理
常用文件管理的命令
命令 | 作用 |
---|---|
mkdir <directory> | 创建一个目录 |
cp <file> <new-file> | 复制一个文件 |
cp -r <directory> <new-directory> | 复制一个目录及其内容 |
mv <file> <new-file> | 移动或重命名一个文件或目录 |
rm <file> | 移除一个文件 |
rm -r <directory> | 移除一个目录及其内容 |
rmdir <directory> | 移除一个空目录 |
创建目录
mkdir命令创建一个或多个目录或子目录。它将要创建的目录的路径列表作为参数。如果目录已经存在,或者如果试图在不存在的目录中创建子目录,则执行失败。-p 选项为请求的目标创建缺少的父目录,因此需要谨慎使用 mkdir -p 命令,因为拼写错误可能会导致意外的目录,而不会生成错误消息。
复制文件
cp命令复制文件,在当前目录或指定目录中创建新文件。它还可以将多个文件复制到一个目录。需要注意的是,如果目标文件已经存在,则cp命令覆盖文件。
用一个命令复制多个文件时,最后一个参数必须是目录。
移动文件
mv命令将文件从一个位置移动到另一个位置。如果将文件的绝对路径视为其全名,则移动文件实际上等同于重命名文件。文件内容保持不变。
移除文件和目录
rm命令删除文件。如果需要删除目录,则要加上 -r 或 -recursive 选项。rm -r命令首先遍历每个子目录,在删除每个目录之前分别删除它们的文件。而rm -ri 命令会以交互方式在删除前提示确认。这本质上与使用**-f** 选项相反,该选项在不提示用户确认的情况下强制删除。
文件之间创建链接
图中文件列表中第一列权限位标识第一个字符显示的是文件类型,- 为一般文件,d 为目录,而 l 显示的就是链接文件。
硬链接:
硬链接是指通过索引节点来进行链接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为索引节点编号号(Inode Index)或者Inode,它是文件或者目录在一个文件系统中的唯一标识,文件的实际数据放置在数据区域(data block),它存储着文件重要参数信息,也就是元数据(metadata),比如创建时间、修改时间、文件大小、属主、归属的用户组、读写权限、数据所在block号等。
在Linux系统中,多个文件名指向同一索引节点(Inode)是正常且允许的。一般这种链接就称为硬链接。硬链接的作用之一是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要的文件,以防止“误删”源数据。
注意:硬链接存在一些限制。首先,硬链接只能用于常规文件。不能使用 ln 创建指向目录或特殊文件的硬链接。其次,只有当两个文件都在同一个文件系统上时,才可以使用硬链接。而文件系统层次结构可以由多个存储设备组成;根据系统的配置,当切换到新目录时,该目录及其内容可能存储在不同的文件系统中。
这时候,可以使用 df 命令列出不同文件系统上的目录。
注释:“Mounted on”即挂载点,两个不同“Mounted on”目录中的文件及其子目录位于不同的文件系统中。因此,在本例中,系统可以在 /var/tmp/link1 和 /home/user/file 之间创建硬链接,因为它们都是 / 的子目录,而不是列表中的任何其他目录。但是不能在 /boot/test/badlink 和 /home/user 之间创建硬链接。
软链接:
软链接(也叫符号链接),类似于windows系统中的快捷方式,与硬链接不同,软链接就是一个普通文件,只是数据块内容有点特殊,文件用户数据块中存放的内容是另一文件的路径名的指向,通过这个方式可以快速定位到软连接所指向的源文件实体。软链接可对文件或目录创建。
软链接的作用:
- 便于文件的管理,比如把一个复杂路径下的文件链接到一个简单路径下方便用户访问。
- 节省空间解决空间不足问题,某个文件文件系统空间已经用完了,但是现在必须在该文件系统下创建一个新的目录并存储大量的文件,那么可以把另一个剩余空间较多的文件系统中的目录链接到该文件系统中。
用shell扩展匹配文件名
Bash Shell有多种扩展命令行的方法,包括模式匹配、主目录扩展、字符串扩展和变量替换。
模式匹配(Pattern Matching):
Globbing是一个shell命令解析操作,它将通配符模式扩展为匹配路径名列表。在执行命令之前,命令行元字符将替换为匹配列表。不返回匹配项的模式将原始模式请求显示为文本。注意这里的pattern不是正则表达式。以下是常见的元字符和模式分类程序。
元字符 | 匹配 |
---|---|
* | 任意多个字符的字符串 |
? | 任意单个字符 |
[abc…] | 中括号内的任意单个字符 |
[!abc…] | 中括号内字符以外的任意单个字符 |
[^abc…] | (同上) |
[[:alpha:]] | 任意字母字符 |
[[:lower:]] | 任意小写字母字符 |
[[:upper:]] | 任意大写字母字符 |
[[:alnum:]] | 任意字母或数字字符 |
[[:punct:]] | 任意非空格或字母数字的可打印字符 |
[[:dight:]] | 任意0到9的单个数字 |
[[:space:]] | 任间一个空白字符。包括制表符、换行符、回车符、换行符或空格 |
示例:
假设已经运行了以下命令来创建一些示例文件:
匹配:
波浪号扩展(Tilde Expansion):
波浪号字符(~)与当前用户的主目录匹配。如果开始的字符串不是斜杠(/),shell将把斜杠前的字符串解释为用户名,并用该用户主目录的绝对路径替换该字符串。
花括号扩展(Brace Expansion):
花括号扩展用于生成任意字符串。同时,双点语法(..)扩展到序列,这样**{m..p}将扩展到m n o p**
变量扩展(Variable Expansion):
变量的作用类似于一个命名的容器,它可以在内存中存储一个值。变量使从命令行或shell脚本中访问和修改存储的数据变得容易。
命令替换(Command Substitution):
&emps;命令替换允许命令的输出替换命令行上的命令本身。当命令括在圆括号中,并且前面有符号 $ 时,将发生命令替换。 $(command) 表单可以在彼此内部嵌套多个命令扩展。
转义扩展(Protecting Arguments from Expansion):
许多字符在Bash Shell中有特殊的含义。为了防止shell在命令行的某些部分执行shell扩展,可以引用和转义字符和字符串。