科普文:Linux目录详解

news2024/9/24 2:35:04

在 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 os

def 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.coloradmin.cn/o/1964088.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图片太大怎么压缩变小?图片太大压缩变小的几个方法

图片太大怎么压缩变小?在当今数字化时代,图像的处理和分享已经成为日常工作和生活中不可或缺的一部分。然而,有时我们会遇到一个普遍的问题:图片文件太大,需要压缩以便于存储、传输或发布。为什么要压缩图片呢&#xf…

【PCB prepreg】PP 参数比选 四 <预浸料树脂流>

预浸料树脂在压力下加热时会熔化和流动。这通常被称为树脂流动。树脂的流动取决于压力和树脂使用的热量。树脂可以自由流动的时间有限。在成为流体一段时间后,树脂会变成凝胶。 预浸料树脂的流动性对层压操作至关重要,而层压条件会影响这种流动性。此外…

程序员修炼之路

成为一名优秀的程序员,需要广泛而深入地学习多个领域的知识。这些课程不仅帮助建立扎实的编程基础,还培养了问题解决、算法设计、系统思维等多方面的能力。以下是一些核心的必修课: 计算机基础 计算机组成原理:理解计算机的硬件组…

国内备受好评PostgreSQL数据库性能如何?

为什么国内很多数据库采用PostgreSQL数据库作为基础,再次开发自己的产品呢?不仅仅是因为PostgreSQL数据库开源免费、PostgreSQL 数据库的性能也是相当出色的,具有以下几个方面的特点: 1. 处理大规模数据: - 能够有效地管理和处…

外设购物平台

目 录 一、系统分析 二、系统设计 2.1 系统功能设计 2.2 数据库设计 三、系统实现 3.1 注册功能 3.2 登录功能 3.3 分页查询所有商品信息功能 3.4 分页条件(精确、模糊)查询商品信息功能 3.5 购物车功能 3.6 订单管理功能 四、项…

javafx的ListView代入项目的使用

目录 1. 创建一个可观察的列表,用于存储ListView中的数据,这里的User是包装了用户的相关信息。 2.通过本人id获取friendid,及好友的id,然后用集合接送,更方便直观一点。 3.用for遍历集合,逐个添加。 4.渲染器&…

css各种使用案例合集(二)

1、hover动画 场景1&#xff1a;要求有旋转、变色&#xff0c;有变化过程 场景结果&#xff1a; 代码示例&#xff1a; <div class"box"><div class"headUp"></div><div class"head"></div><div class"mo…

全面整理人工智能(AI)学习路线图及资源推荐

在人工智能&#xff08;AI&#xff09;飞速发展的今天&#xff0c;掌握AI技术已经成为了许多高校研究者和职场人士的必备技能。从深度学习到强化学习&#xff0c;从大模型训练到实际应用&#xff0c;AI技术的广度和深度不断拓展。作为一名AI学习者&#xff0c;面对浩瀚的知识海…

FPC焊接座子和FPC线的线序问题,弄个转接口

焊接fpc底座 可以发现&#xff0c;也可以焊接上&#xff0c;但在原理图中的顺序连接不同可能导致顺序完全相反 FPC线顺序也可能不同 所以还是弄个转换接口&#xff0c;可是临时测试使用

智能制造有哪些发展阶段?企业推进数字化制造容易走进什么误区?

随着智能制造的浪潮席卷全球&#xff0c;我们正目睹一场前所未有的工业变革。智能制造这一集精益生产、柔性制造、敏捷制造和云制造等先进范式于一体的全新制造模式&#xff0c;正在重塑制造业的未来。 本文将深入探讨智能制造的三个发展阶段&#xff1a;数字化制造、网络化制…

Studying-代码随想录训练营day49| 42. 接雨水、84.柱状图中最大的矩形

第49天&#xff0c;单调栈part02&#xff0c;两个很经典的例题&#xff0c;编程语言&#xff1a;C 目录 42. 接雨水 84.柱状图中最大的矩形 总结&#xff1a; 42. 接雨水 文档讲解&#xff1a;代码随想录接雨水 视频讲解&#xff1a;手撕接雨水 题目&#xff1a; 42. 接雨…

轻松上手Scikit-learn——评估模型性能(准确率、精确率、召回率、ROC和AUC)

轻松上手Scikit-learn——评估模型性能&#xff08;准确率、精确率、召回率、ROC和AUC&#xff09; 安装scikit——learn pip install -U scikit-learn常用模型性能评估指标 在开始介绍之前先规定几个表示&#xff1a; 模型预测正确的正样本&#xff0c;称为真正样本&#…

AI会带来新的就业岗位吗?

最近&#xff0c;百度的首席执行官Roy在世界人工智能大会&#xff08;WAIC&#xff09;上提出了一个观点。他表示&#xff0c;大家无需过于担心人工智能会导致大量失业&#xff0c;相反&#xff0c;人工智能会创造一批新的就业岗位。他特别提到了几个核心的典型代表&#xff0c…

visual Studio怎么设置背景图片

想在visual Studio设置一个自己喜欢的背景图片&#xff0c;效果如下&#xff1a; 废话不多说&#xff0c;以Vs2022为例&#xff0c;操作步骤如下&#xff1a; 1.打开“扩展”>“管理扩展”>“搜索ClaudiaIDe”安装 或者直接下载官方安装版https://kbuchi.gallerycdn.vs…

网安科班精选!爱荷华大学教授的网络安全零基础入门教程!

网络就像一把双刃剑&#xff0c;给我们的生活、交流、工作和发展带来了便利&#xff0c;但同时也给信息安全以及个人隐私带来了威胁。网络和信息安全问题不仅影响了网络的普及和应用&#xff0c;还关系到企国家、军队、企业的信息安全和社会的经济安全&#xff0c;让人又爱又恨…

用栈实现队列(双栈思路 + 代码实现)

题目 ①双栈大体思路 1.切入点 栈先进后出&#xff0c;队列先进先出。 两个栈&#xff0c;其中一个栈可以用于颠倒顺序。顺序就跟队列一样 2.明确双栈作用 1.第一个栈接收输入&#xff08;输入栈&#xff09; 2.第二个栈转换顺序&#xff08;输出栈&#xff09; 3.四个功…

学习记录——day23 多进程编程

目录 一、多进程引入 1.1、引入目的 1.2、进程的概念 1.3、进程的种类 1.4、进程号的概念 1.5、特殊进程 0号 1号 2号 孤儿 僵尸 1.6、进程的相关命令 1&#xff09;查看进程信息的命令&#xff1a;ps 跟不同的选项&#xff0c;执行不同的状态 2&…

springboot的轻量替代框架-Solon

Java之所以是广泛使用的编程语言&#xff0c;不仅仅因为其具有跨平台性、面向对象、可靠性&#xff0c;还有很重要的一点是强大的生态系统&#xff0c;spring家族的一系列框架&#xff0c;对Java的崛起有着不可忽视的作用。 学Java的不可能不知道Spring&#xff0c;今天给大家…

品致差分探头和泰克差分探头的优势和特点分析

品致差分探头和泰克差分探头各有其独特的优势和特点&#xff0c;选择哪个更好主要取决于具体的应用场景、测试需求以及预算等因素。以下是对两个品牌差分探头的详细比较&#xff1a; 品致差分探头优势与特点&#xff1a; 高精度测量&#xff1a;品致差分探头具有高精度的测量…

docker(一):Develop faster. Run anywhere.

前言 在进行微服务部署时&#xff0c;首先需要进行部署环境的搭建。目前&#xff0c;Docker 已经成为了微服务部署的主流解决方案之一。Docker 可以帮助我们更快地打包、测试以及部署应用程序&#xff0c;从而缩短从编写到部署运行代码的周期。 在本文中&#xff0c;我们将对…