科普文:Linux目录详解

在 Linux/Unix 操作系统中,一切都是文件,甚至目录也是文件,文件是文件,鼠标、键盘、打印机等设备也是文件。

这篇文章,我们将一起学习 Linux 中的目录结构及文件。

Linux 的文件类型

Linux系统中的文件系统,一般分为 3种类型:

  1. 普通文件:也称为一般文件,可能是图像、视频、程序或简单的文本文件,这些文件可以是 ASCII 或二进制格式。普通文件是 Linux 系统中最常用的文件类型。

  2. 目录文件:这些类型的文件是其他文件类型的仓库或者集合,它可以是目录中的目录(子目录)。

  3. 设备文件:在类似 Windows 的操作系统中,设备如 CD-ROM 和硬盘驱动器用驱动器字母表示,如 F:、G:、H:,而在 Linux 系统中,设备表示为文件,例如,/dev/sda1、/dev/sda2 等。

在类似 Windows 的操作系统中,文件存储在不同数据驱动器上的不同文件夹中,如 C:、D:、E:,而在 Linux/Unix 操作系统中,文件存储在一个类似树状结构中,以根目录开始,如下图所示。

目录结构

Linux/Unix 文件系统层次结构以根目录为基础,一切都从根目录开始,总起来说分为以下 2种:

  • 顶级目录

  • 其他目录

顶级目录

目录描述
/bin二进制或可执行程序。
/etc系统配置文件。
/home用户的主目录。它是默认的当前目录。
/opt可选或第三方软件。
/tmp临时空间,通常在重启时清空。
/usr用户相关的程序。
/var日志文件。

其他目录

目录描述
/boot包含所有启动相关的信息文件和文件夹,如 conf、grub 等。
/dev设备文件的位置,如 dev/sda1、dev/sda2 等。
/lib包含内核模块和共享库。
/lost+found用于查找恢复的损坏文件的碎片。
/media包含插入的可移动媒体设备的子目录。
/mnt包含用于挂载文件系统的临时挂载目录。
/proc一个虚拟和伪文件系统,包含有关运行进程的信息,特定的进程 ID 或 PID。
/run存储易失的运行时数据。
/sbin管理员的二进制可执行程序。
/srv包含特定于服务器的文件。
/sys一个用于现代 Linux 发行版的虚拟文件系统,用于存储和允许修改连接到系统的设备。

文件类型

Linux 是一个非常复杂的系统,需要一种高效的方式来启动、停止、维护和重启系统,在 Linux 系统中,每个进程都有一些定义良好的配置文件、二进制文件、手册页信息文件可用。

在 Linux系统中,文件可以分为以下几种:

  • 内核文件

  • 设备文件

  • 系统配置文件

  • 用户相关文件

  • 虚拟和伪进程相关文件

  • 版本信息文件

  • 日志文件

各种文件的具体信息说明如下:

内核文件

  • /boot/vmlinux:Linux 内核文件。

设备文件

  • /dev/hda:第一个 IDE 硬盘的设备文件。

  • /dev/hdc:一个伪设备,将垃圾输出重定向到 /dev/null。

系统配置文件

系统配置文件及其描述如下表:

配置文件描述
/etc/bashrc由 bash shell 使用,包含系统默认设置和别名。
/etc/crontab一个 shell 脚本,在预定义时间间隔运行指定命令。
/etc/exports包含网络上可用的文件系统的信息。
/etc/fstab磁盘驱动器及其挂载点的信息。
/etc/group一个文本文件,定义安全组的信息。
/etc/grub.confgrub 引导加载程序配置文件。
/etc/init.d服务启动脚本。
/etc/lilo.conflilo 引导加载程序配置文件。
/etc/hostsIP 和相应主机名的信息。
/etc/hosts.allow允许访问本地机器上服务的主机列表。
/etc/host.deny拒绝访问本地机器上服务的主机列表。
/etc/inittabINIT 进程及其在各个运行级别的交互。
/etc/issue允许编辑登录前消息。
/etc/modules.conf系统模块的配置文件。
/etc/motd包含当天的消息。
/etc/mtab当前挂载的块信息。
/etc/passwd包含系统用户的用户名、密码的影子文件。
/etc/printcap打印机信息。
/etc/profileBash shell 默认设置。
/etc/profile.d包含其他脚本,如应用程序脚本,登录后执行。
/etc/rc.d避免脚本重复。
/etc/rc.d/init.d运行级别初始化脚本。
/etc/resolv.conf系统使用的 DNS。
/etc/security包含允许 root 登录的终端名称。
/etc/skel初始化新用户主目录的脚本。
/etc/termcap一个 ASCII 文件,定义不同类型终端的行为。
/etc/X11目录树,包含 X-window 系统的所有配置文件。

用户相关文件

用户相关文件及其描述如下表:

用户相关文件描述
/usr/bin包含大多数可执行文件。
/usr/bin/X11/usr/bin 的符号链接。
/usr/include包含 C 程序使用的标准文件。
/usr/share包含架构无关的可共享文本文件。
/usr/lib包含目标文件和库。
/usr/sbin包含超级用户的命令,用于系统管理。

虚拟和伪进程相关文件

虚拟和伪进程相关文件及其描述如下表:

虚拟和伪进程相关文件描述
/proc/cpuinfoCPU 信息
/proc/filesystems保存当前运行的进程的有用信息。
/proc/interrupts保存每个 IRQ 中断次数的信息。
/proc/ioports包含服务器上设备使用的所有输入输出地址。
/proc/meminfo报告内存使用信息。
/proc/modules当前使用的内核模块。
/proc/mount挂载文件系统信息。
/proc/stat显示当前系统的详细统计信息。
/proc/swaps包含交换文件信息。

版本信息文件

  • /version:显示 Linux 版本信息。

日志文件

日志文件及其描述如下表:

日志文件描述
/var/log/lastlog存储用户的最后登录信息。
/var/log/messages包含所有全局系统消息。
/var/log/wtmp保留登录和注销信息的历史记录。

要检查 Linux 目录,可以打开终端并执行 cd / 切换到根目录,列举根目录下所有可用目录的列表使用 ls 指令查看。

到此为止,我们已经把 Linux中的目录和文件都系统性的总结完了,接下来,我们需要说说 Linux中一切皆文件的设计思想。

一切皆文件的设计思想

在 Linux 中“一切皆文件”这一理念是其设计哲学的核心之一,这个理念有助于简化系统的设计和使用,使得不同类型的资源可以通过统一的接口进行管理和访问。这种设计哲学有以下几个主要原因和优势:

统一接口

通过将所有资源(包括硬件设备、进程、网络接口等)都视为文件,Linux 提供了一个统一的接口来访问和管理这些资源。这样,用户和程序不需要为不同类型的资源编写不同的代码,只需使用标准的文件操作接口(如打开、读取、写入和关闭文件)即可。

简化编程

因为所有资源都被视为文件,程序员可以使用相同的系统调用来操作不同类型的资源。这大大简化了编程任务,使得代码更容易编写、阅读和维护。

灵活性

这种设计使得系统更具灵活性。例如,通过创建设备文件(如 /dev/sda1)可以轻松地访问硬件设备,而无需了解底层的硬件细节。也可以通过挂载网络文件系统来访问远程资源,就像访问本地文件一样。

模块化设计

Linux 系统的模块化设计允许不同的文件系统、设备驱动和其他内核模块通过统一的文件接口进行集成和交互。这使得系统可以更容易地扩展和维护。

易于调试和监控

因为所有资源都可以通过文件系统访问,系统管理员可以使用熟悉的文件操作工具(如 cat、ls、echo 等)来调试和监控系统。例如,可以通过访问 /proc 文件系统来查看和修改内核参数,或通过 /sys 文件系统来查看和控制硬件设备。

增强安全性

通过将资源表示为文件,Linux 可以利用文件系统的权限机制来控制对这些资源的访问。这有助于增强系统的安全性,因为可以精确地控制哪些用户和进程可以访问哪些资源。

下面,我们将使用 Python 代码来读取一个普通文件、访问一个设备文件和读取 /proc 文件系统中的信息:

import osdef read_text_file(file_path):with open(file_path, 'r') as file:return file.read()def read_device_file(device_path):with open(device_path, 'rb') as file:return file.read(1024)  # 读取前 1024 字节def read_proc_file(proc_path):with open(proc_path, 'r') as file:return file.read()if __name__ == "__main__":# 读取普通文件text_file_content = read_text_file('/etc/hostname')print("Content of /etc/hostname:")print(text_file_content)# 读取设备文件(需要超级用户权限)try:device_file_content = read_device_file('/dev/sda')print("\nContent of /dev/sda (first 1024 bytes):")print(device_file_content)except PermissionError:print("\nPermission denied: Unable to read /dev/sda. Please run as root.")# 读取 /proc 文件系统中的信息proc_file_content = read_proc_file('/proc/cpuinfo')print("\nContent of /proc/cpuinfo:")print(proc_file_content)

代码解释

  • 读取普通文件:使用 read_text_file 函数读取 /etc/hostname 文件的内容,并将其打印出来。

  • 读取设备文件:使用 read_device_file 函数尝试读取 /dev/sda 设备文件的前 1024 字节内容。这需要超级用户权限,如果权限不足,会捕获 PermissionError 异常并打印提示信息。

  • 读取 /proc 文件系统中的信息:使用 read_proc_file 函数读取 /proc/cpuinfo 文件的内容,并将其打印出来。这个文件包含关于 CPU 的详细信息。

通过这个示例,我们可以看到如何在 Linux 中使用统一的文件接口来访问不同类型的资源,包括普通文件、设备文件和虚拟文件系统中的信息。

总结

本文,我们系统性的总结了 Linux的目录和文件,作为程序员,我们很多时候都需要和 Linux或者类 Linux系统打交道,因此,如果我们能正确理解 Linux 目录和文件结构,就可以快速的适应和掌握 Linux的相关知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/387764.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【初阶数据结构】11.排序(2)

文章目录 2.3 交换排序2.3.1 冒泡排序2.3.2 快速排序2.3.2.1 hoare版本2.3.2.2 挖坑法2.3.2.3 lomuto前后指针2.3.2.4 非递归版本 2.4 归并排序2.5 测试代码:排序性能对比2.6 非比较排序2.6.1 计数排序 3.排序算法复杂度及稳定性分析 2.3 交换排序 交换排序基本思想…

【包邮送书】码农职场:IT人求职就业手册

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

遗传算法与深度学习实战——进化深度学习

遗传算法与深度学习实战——进化深度学习 0. 前言1. 进化深度学习1.1 进化深度学习简介1.2 进化计算简介 2. 进化深度学习应用场景3. 深度学习优化3.1 优化网络体系结构 4. 通过自动机器学习进行优化4.1 自动机器学习简介4.2 AutoML 工具 5. 进化深度学习应用5.1 模型选择&…

鸿蒙开发——axios封装请求、拦截器

描述:接口用的是PHP,框架TP5 源码地址 链接:https://pan.quark.cn/s/a610610ca406 提取码:rbYX 请求登录 HttpUtil HttpApi 使用方法

Qt基础 | 主机信息查询 | QHostInfo的介绍和使用 | QNetworkInterface的介绍和使用

文章目录 一、Qt 网络模块介绍二、主机信息查询1.QHostlnfo 和 QNetworkInterface 类2.QHostlnfo 的使用2.1 获取本机主机名和 IP 地址2.2 查找主机的地址信息 3.QNetworkInterface 的使用 Qt 网络模块: Qt基础 | 主机信息查询 | QHostInfo的介绍和使用 | QNetworkI…

常见的jmeter面试题及答案

1、解释什么是JMeter? JMeter是一款Java开源工具, 用于性能负载测试。它旨在分析和衡量Web应用程序和各种服务的性能和负载功能行为。 2、说明JMeter的工作原理? JMeter就像一群将请求发送到目标服务器的用户-样。它收集来自目标服务器的响应以及其他统计数据&…

python爬虫【3】—— 爬虫反反爬

一、常见的反爬手段和解决方法 二、splash 介绍与安装 三、验证码识别 图片验证码的处理方案 手动输入(input) 这种方法仅限于登录一次就可持续使用的情况图像识别引擎解析 使用光学识别引擎处理图片中的数据,目前常用于图片数据提取,较少用于验证码…

彻底搞懂jdk1.8中的haspMap原理(源码解析+ 对比jdk1.7)

彻底搞懂jdk1.8中的haspMap原理(源码解析 对比jdk1.7)_jdk1.8 hashmap效果演示-CSDN博客文章浏览阅读484次。前言:本博客只对jdk1.7中的hashMap进行文字性的说明,源码的说明只针对jdk1.8,因为现在开发多数都是jdk1.8.一…

【简单图解 最强计网八股】HTTP 和 HTTPS 的区别

HTTP(HyperText Transfer Protocol 超文本传输协议) HTTPS(Hypertext Transfer Protocol Secure,超文本传输安全协议) 通过 传输内容加密 和 身份认证 保证了传输过程的安全性 协议传输内容加密身份认证响应效率端口号…

IP Fabric三层路由

IP Fabric指的是在IP网络基础上建立起来的Overlay隧道技术。即为基于胖树的SpineLeaf拓扑结构的IP Fabric组网图。 在这种组网方式中,任何两台服务器间的通信不超过3台设备,每个Spine和Leaf节点全互连,可以方便地通过扩展Spine节点来实现网络…

Orcale(备份导入导出)

1.备份恢复 1.1.备份定义 备份就是把数据库复制到转储设备的过程。其中,转储设备是指用于放置数据库副本的磁带或磁盘。通常也将存放于转储设备中的数据库的副本称为原数据库的备份或转储。备份是一份数据副本 1.2.备份分类 从物理与逻辑的角度来分类&#xff1a…

在docker中安装MongoDB 5.0+

文章目录 1、查看物理机是否支持avx指令集:安装资料中的cpu-z_2.10-cn.exe,并打开2、查看虚拟机是否支持avx指令集:3、创建目录4、使用Docker来运行一个MongoDB数据库实例5、进入容器6、查看当前db版本7、查看当前db的链接机器地址8、帮助指令…

浮点数的二进制表示

浮点数的二进制表示 浮点数在C/C中对应 float 和 double 类型,我们有必要知道浮点数在计算机中实际存储方式。 IEEE754规定: 单精度浮点数字长32位,尾数长度23,指数长度8,指数偏移量127;双精度浮点数字长64位&#xf…

达梦数据库DPI 实现两个数据库数据互通

链接字符串是目标访问链接 目标访问用户名 口令实现 31 里访问33库的数据 如果在31上建立视图访问33的某个表 AS SELECT SZZJ.sys_user.id FROM SZZJ.sys_userszzj31_szzj33;

研0 冲刺算法竞赛 day25 P1223 排队接水

P1223 排队接水 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 考点&#xff1a;贪心算法 思路&#xff1a;很简单&#xff0c;快的先接水即可&#xff0c;要注意重复项 代码: #include<iostream> #include<algorithm> using namespace std;int arr[1000005];…

C语言进阶 10. 字符串

C语言进阶 10. 字符串 文章目录 C语言进阶 10. 字符串10.1. 字符串10.2. 字符串变量10.3. 字符串输入输出10.4. 字符串数组10.5. 单字符输入输出10.6. 字符串函数strlen()10.7. 字符串函数strc()10.8. 字符串函数strcpy()10.9. 字符串搜索函数10.10. PAT10-0. 说反话 (20)10-1.…

七天打造一套量化交易系统:Day6-人工智能在量化投资中的应用

七天打造一套量化交易系统&#xff1a;Day6-人工智能在量化投资中的应用 步骤一&#xff1a;数据获取步骤二&#xff1a;对股票样本进行初步处理步骤三&#xff1a;遗传算法选股遗传算 kmeans 类的主要代码 步骤四&#xff1a;回测结果 遗传算法是一种基础的人工智能算法&#…

CSS实现图片边框酷炫效果

一、前言 我们在浏览一些网页时&#xff0c;经常会看到一些好看酷炫的元素边框效果&#xff08;如下图&#xff09;&#xff0c;那么这些效果是怎么实现的呢&#xff1f;我们知道&#xff0c;一般的边框&#xff0c;要么是实线&#xff0c;要么是虚线&#xff08;点状&#xf…

快速识别音频文件转成文字

一、SenseVoice概述 阿里云通义千问开源了两款语音基座模型 SenseVoice&#xff08;用于语音识别&#xff09;和 CosyVoice&#xff08;用于语音生成&#xff09;。 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测&#xff0c;有以下特点&#xff1a; 多语言…

spark 3.0.0源码环境搭建

环境 Spark版本&#xff1a;3.0.0 java版本&#xff1a;1.8 scala版本&#xff1a;2.12.19 Maven版本&#xff1a;3.8.1 编译spark 将spark-3.0.0的源码导入到idea中 执行mvn clean package -Phive -Phive-thriftserver -Pyarn -DskipTests 执行sparksql示例类SparkSQLExam…