目录
[1. 怎么理解"Linux 中一切皆文件"?Linux是如何组织文件的?](#1. 怎么理解“Linux 中一切皆文件”?Linux是如何组织文件的?)
[2. Linux 目录树中有哪些重要的目录及其用途?](#2. Linux 目录树中有哪些重要的目录及其用途?)
[3. 如何识别一个路径名是绝对路径名还是相对路径名?](#3. 如何识别一个路径名是绝对路径名还是相对路径名?)
[4. rm -r 和 rmdir (rm -d) 有什么区别?](#4. rm -r 和 rmdir (rm -d) 有什么区别?)
[5. 怎么理解文件间的链接?有几种方式可以管理文件间的链接?它们有什么区别?](#5. 怎么理解文件间的链接?有几种方式可以管理文件间的链接?它们有什么区别?)
[6. 如何创建软连接和硬链接? 如何查看?](#6. 如何创建软连接和硬链接? 如何查看?)
[7. 说出以下通配符的匹配项:* 、? 、??? 、 a* 、*b、*c* 、ac* 、\^abc 、!abc](#7. 说出以下通配符的匹配项:* 、? 、??? 、 a* 、b、c 、[ac] 、[^abc] 、[!abc])
[8. HOSTNAME 、{HOSNAME} 、(hostname) 这三个字符串的区别是什么?](#8. HOSTNAME 、{HOSNAME} 、(hostname) 这三个字符串的区别是什么?)
[9. 为防止shell 命令参数被扩展,使用单引号和双引号有什么区别?](#9. 为防止shell 命令参数被扩展,使用单引号和双引号有什么区别?)
1. 怎么理解"Linux 中一切皆文件"?Linux是如何组织文件的?
"一切皆文件" 的意思是:系统中的绝大多数资源(普通文件、目录、硬件设备、进程信息、网络套接字、管道等)都通过文件系统接口来访问。用户可以使用相同的系统调用(例如 open、read、write)和命令(如 cat、ls)来操作这些资源。
Linux组织文件的方式:Linux采用树状目录结构。整个文件系统从"根" / 开始,所有文件和目录都以倒挂的树形结构分层组织,每个分支(目录)可以包含子目录和文件。与Windows的多盘符(C:、D:)不同,Linux只有一个根,其他存储设备(例如U盘、硬盘分区)需要通过挂载(mount)操作连接到目录树中的某个点才能访问。
2. Linux 目录树中有哪些重要的目录及其用途?
(1)/(根目录) :是整个文件系统的起点,所有其他目录都挂载在它下面。
(2)/boot :存放启动引导程序和Linux内核文件、初始化镜像。
(3)/dev :设备文件目录,包含硬盘(如/dev/sda)、终端、随机数生成器等设备接口。
(4)/etc :系统配置文件目录,大多数为文本文件。例如网络配置、用户密码(/etc/passwd)、软件配置等。
(5)/home :普通用户的家目录。
(6)/root :超级用户(root)的家目录,普通用户无权访问。
(7)/var :存放经常变化的数据,如系统日志(/var/log)、邮件队列(/var/spool/mail)、缓存等,重启后也永久保存。
(8)/usr :系统软件和用户程序的存放位置。例如/usr/bin(普通用户命令)、/usr/lib(库文件)、/usr/local(手动编译安装的软件)。
(9)/run: 自系统启动以来启动的进程的运行时数据**。**
(10)/tmp :临时文件目录,重启后通常清空。所有用户可读写,但默认设置了粘滞位(sticky)。10天内未访问、未更改或未修改的文件将自动从这个目录中删除。
(11)/var/tmp:这个目录中的文件如果在 30天内未曾访问、更改或修改过,将被自动删除。
3. 如何识别一个路径名是绝对路径名还是相对路径名?
绝对路径 :以斜线 / 开头,从根目录开始完整描述一个文件的位置。例如:/home/alice/notes.txt。
相对路径 :不以 / 开头,是相对于当前工作目录来描述位置。例如:当前在 /home 下,alice/notes.txt 就是相对路径。需要认识两个特殊符号:. 表示当前目录,.. 表示上一级目录。
识别方法 :看路径的第一个字符 ------ 如果是 / 就是绝对路径,否则是相对路径。
4. rm -r 和 rmdir (rm -d) 有什么区别?
rmdir (rm -d) 专门用于删除空目录,不能删除非空目录,会报错。
rm -r 递归的删除目录及其所有内容(包括子目录和文件),功能强大,可以删除非空目录。
5. 怎么理解文件间的链接?有几种方式可以管理文件间的链接?它们有什么区别?
文件链接是指为一个文件创建多个"名字",使不同的路径指向同一个文件数据。Linux 通过硬链接和软链接(符号链接) 两种方式管理文件链接。
硬链接 :多个文件名指向同一个 inode(文件数据块),相当于给文件起了多个别名。所有硬链接地位平等,删除其中一个不影响其他链接访问数据,只有当最后一个硬链接被删除时文件数据才会真正释放。硬链接不能跨文件系统,也不能链接目录。它的用途是节省磁盘空间(同一文件多位置出现)或确保重要文件有备用入口。
软链接 :是一个特殊的文件,其内容是指向目标文件的路径(类似于 Windows 的快捷方式)。它可以跨文件系统,也可以链接目录。但如果原文件被删除,软链接会变成悬空链接。它的用途是为深层路径创建便捷入口、解决版本兼容问题、或实现快速切换不同配置。
6. 如何创建软连接和硬链接? 如何查看?
创建硬链接:ln 源文件 链接名
创建软链接:ln -s 源文件 链接名(源文件建议使用绝对路径)
查看方式:
ls -l:软链接显示 -> 指向目标,硬链接没有特殊标记。
ls -li:用于查看inode号,硬链接的inode号相同。
7. 说出以下通配符的匹配项:* 、? 、??? 、 a* 、*b、*c* 、ac* 、\^abc 、!abc
(1)*:匹配任意长度(包括零个)的任意字符。
(2)?:匹配单个任意字符。
(3)???:匹配恰好三个任意字符。
(4)a*:匹配以字母 a 开头的任意字符串。
(5)*b:匹配以字母 b 结尾的任意字符串。
(6)*c*:匹配包含字母 c 的任意字符串。
(7)ac*:匹配以 a 或 c 开头的任意字符串。
(8)\^abc:匹配不是 a、b、c 的单个字符(^ 表示取反)。
(9)!abc:作用同 \^abc(在部分Shell中 ! 等同于 ^)。
8. HOSTNAME 、{HOSNAME} 、$(hostname) 这三个字符串的区别是什么?
$HOSTNAME :读取名为 HOSTNAME 的变量值。
**{HOSTNAME}** :和 HOSTNAME 一样,花括号用来隔开变量名和其他字符,例如 ${HOSTNAME}123 可以正确解析变量后拼接123 。
$(hostname) :执行 hostname 命令,把命令的输出结果替换到当前位置。
重要区别:HOSTNAME 和 {HOSTNAME} 读取的是Shell变量(可能为空或未定义),而 $(hostname) 执行的是外部命令 /bin/hostname。在红帽系统中,HOSTNAME 变量通常在用户登录时由系统自动设置(值为当前主机名),与直接执行 hostname 命令获得的输出通常相同,但二者原理完全不同。
9. 为防止shell 命令参数被扩展,使用单引号和双引号有什么区别?
单引号完全保留字面值。所有特殊字符都失去其特殊含义,当作普通字符处理。
双引号部分保留。大多数特殊字符被保护,但 $(变量)、`(反引号)、\(转义)、!(历史命令,开启时)依旧会被解释。
如果想原样输出所有内容(包括 符号),就使用单引号;如果想在字符串中保留变量扩展功能(允许使用 ),那么使用用双引号。