RH124问答3:从命令行管理文件

目录

[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 命令参数被扩展,使用单引号和双引号有什么区别?

单引号完全保留字面值。所有特殊字符都失去其特殊含义,当作普通字符处理。

双引号部分保留。大多数特殊字符被保护,但 $(变量)、`(反引号)、\(转义)、!(历史命令,开启时)依旧会被解释。

如果想原样输出所有内容(包括 符号),就使用单引号;如果想在字符串中保留变量扩展功能(允许使用 ),那么使用用双引号。

相关推荐
凡人叶枫1 小时前
Effective C++ 条款30:透彻了解 inlining 的里里外外
linux·开发语言·c++·嵌入式开发·effective c++
guslegend2 小时前
大模型驱动大数据SRE智能运维
大数据·运维
遇见火星2 小时前
Docker Compose 完全入门:一键启动所有容器
运维·docker·容器·docker compose
火山上的企鹅2 小时前
Codex实战:APP远程升级服务搭建(三)后台管理页面(APK 上传、版本管理、多应用页签)
服务器·网络·数据库·oracle·qgc
Net_Walke2 小时前
【Linux系统】静态链接库与动态链接库
linux·嵌入式硬件
小啊曼2 小时前
CIO实战方法论_11_组织变革打破部门墙
运维
syc78901233 小时前
中文语境下AI编码工具实战对比:从迭代体验看日常开发选择
linux·人工智能·ubuntu
❀搜不到3 小时前
远程服务器codex使用本地cc-switch的deepseek api
运维·服务器
凡人叶枫3 小时前
Effective C++ 条款22:将成员变量声明为 private
linux·开发语言·c++