当前位置: 首页 > news >正文

Linux系统详解

Linux系统详解

  • Linux系统详解
    • 1. Linux系统概述
    • 2. Linux内核
      • 2.1 内核架构
      • 2.2 内核模块
      • 2.3 系统调用
      • 2.4 内核态与用户态
    • 3. 进程管理
      • 3.1 进程的生命周期
      • 3.2 进程的创建与终止
      • 3.3 进程调度
      • 3.4 进程间通信(IPC)
    • 4. 内存管理
      • 4.1 虚拟内存
      • 4.2 内存分配
      • 4.3 交换空间(Swap Space)
      • 4.4 内存回收
      • 4.5 内存区域
    • 5. 设备管理
      • 5.1 设备文件
      • 5.2 设备驱动程序
      • 5.3 Udev
    • 6. 网络管理
      • 6.1 网络接口
      • 6.2 路由
      • 6.3 DNS解析
      • 6.4 防火墙
      • 6.5 网络服务
    • 7. 安全机制
      • 7.1 用户和权限管理
      • 7.2 文件权限
      • 7.3 SELinux / AppArmor
      • 7.4 加密
    • 8. 文件系统
      • 8.1 常见文件系统类型
      • 8.2 文件系统结构
      • 8.3 日志文件系统
      • 8.4 挂载与卸载
      • 8.5 软链接与硬链接
    • 9. Linux目录结构详解

Linux系统详解

1. Linux系统概述

Linux是一种自由和开放源码的类UNIX操作系统。它由林纳斯·托瓦兹于1991年首次发布。Linux以其稳定性、安全性、灵活性和开源特性而闻名,广泛应用于服务器、嵌入式设备、桌面环境以及超级计算机等领域。Linux操作系统的核心是Linux内核,它负责管理系统的硬件资源,并为应用程序提供服务。

Linux的特点包括:

  • 开源和自由:Linux的源代码是公开的,任何人都可以查看、修改和分发。这促进了全球开发者社区的协作和创新。
  • 多用户多任务:Linux支持多个用户同时登录系统,并且每个用户可以同时运行多个任务。
  • 高度稳定和安全:Linux在设计上注重稳定性和安全性,使其成为服务器和关键任务系统的理想选择。
  • 强大的网络功能:Linux内置了强大的网络功能,支持各种网络协议和服务。
  • 广泛的硬件支持:Linux支持从嵌入式设备到大型服务器的各种硬件平台。
  • 可定制性强:用户可以根据自己的需求定制Linux系统,选择不同的桌面环境、软件包和配置。
  • 命令行界面和图形用户界面:Linux提供了强大的命令行工具,同时也支持各种图形用户界面(GUI),如GNOME、KDE等。

2. Linux内核

Linux内核是Linux操作系统的核心,它负责管理系统的所有硬件资源,并为上层应用程序提供统一的接口。内核是操作系统中权限最高的程序,直接与硬件交互。它的主要功能包括:

  • 进程管理:内核负责创建、调度、终止进程,并管理进程之间的通信。
  • 内存管理:内核管理系统内存的分配和回收,确保每个进程都能获得所需的内存空间,并防止进程之间相互干扰。
  • 文件系统:内核提供文件系统接口,允许用户和应用程序以统一的方式访问各种存储设备上的文件。
  • 设备管理:内核通过设备驱动程序管理各种硬件设备,如磁盘、网卡、键盘、鼠标等,使其能够被应用程序使用。
  • 网络管理:内核实现了网络协议栈,负责处理网络通信,包括数据的发送和接收。

2.1 内核架构

Linux内核采用宏内核(Monolithic Kernel)架构,这意味着内核的所有功能模块(如进程管理、内存管理、文件系统、设备驱动等)都运行在同一个地址空间中。这种架构的优点是效率高,因为模块之间可以直接调用函数,无需通过消息传递。缺点是如果某个模块出现问题,可能会影响整个内核的稳定性。

尽管Linux内核是宏内核,但它也借鉴了微内核的一些优点,例如支持模块化。许多内核功能可以作为可加载模块(Loadable Kernel Modules, LKM)在运行时动态加载或卸载,而无需重新编译整个内核。这提高了内核的灵活性和可扩展性。

2.2 内核模块

内核模块是独立编译的代码块,可以在需要时动态加载到内核中,并在不再需要时卸载。这使得内核可以保持较小的体积,并且可以根据需要加载特定的功能。常见的内核模块包括设备驱动程序、文件系统驱动程序和网络协议模块等。

管理内核模块的常用命令有:

  • lsmod:列出当前已加载的内核模块。
  • insmod:加载一个内核模块。
  • rmmod:卸载一个内核模块。
  • modprobe:更智能地加载或卸载模块,它会考虑模块的依赖关系。

2.3 系统调用

系统调用(System Call)是用户空间程序与内核进行交互的唯一途径。当用户程序需要访问硬件资源或执行特权操作时,它不能直接访问,而是通过系统调用向内核发出请求。内核接收到请求后,会执行相应的操作,并将结果返回给用户程序。

系统调用提供了一个抽象层,使得应用程序无需关心底层硬件的细节。常见的系统调用包括文件操作(如openreadwrite)、进程控制(如forkexecexit)和内存管理(如mmap)等。

2.4 内核态与用户态

Linux系统将CPU的运行状态分为两种:

  • 内核态(Kernel Mode):也称为特权态,CPU在内核态下可以执行任何指令,访问任何内存地址,拥有对硬件的完全控制权。内核代码运行在内核态。
  • 用户态(User Mode):也称为非特权态,CPU在用户态下只能执行有限的指令,不能直接访问硬件,也不能访问内核空间内存。用户应用程序运行在用户态。

这种分离机制增强了系统的稳定性和安全性。用户程序无法直接破坏内核或访问其他程序的内存,从而避免了恶意程序或错误程序对整个系统的影响。当用户程序需要执行特权操作时,它必须通过系统调用切换到内核态,由内核代为执行。

3. 进程管理

在Linux系统中,进程是程序的一次执行实例。每个进程都有自己独立的内存空间、文件描述符和执行上下文。进程管理是操作系统的核心功能之一,它负责进程的创建、调度、终止以及进程间的通信。

3.1 进程的生命周期

一个进程从创建到终止会经历多个状态:

  • 新建(New):进程刚被创建,但尚未被操作系统调度执行。
  • 运行(Running):进程正在CPU上执行指令,或者正在等待被调度执行。
  • 等待(Waiting)/阻塞(Blocked):进程正在等待某个事件的发生,例如等待I/O操作完成、等待获取资源或等待其他进程的信号。处于等待状态的进程不会占用CPU。
  • 停止(Stopped):进程被暂停执行,通常是由于接收到特定的信号(如SIGSTOPSIGTSTP)。停止的进程可以被恢复执行。
  • 僵尸(Zombie):进程已经终止,但其父进程尚未读取其退出状态。僵尸进程不会占用内存或CPU资源,但会占用进程表中的一个条目。如果父进程不处理,僵尸进程会一直存在,直到父进程终止。
  • 孤儿(Orphan):父进程在子进程之前终止,子进程成为孤儿进程。孤儿进程会被init(或systemd)进程收养,并由init进程负责回收其资源。

3.2 进程的创建与终止

在Linux中,进程的创建通常通过fork()系统调用实现。fork()会创建一个当前进程的副本(子进程),子进程继承父进程的内存空间、文件描述符等。子进程和父进程会从fork()调用后的下一条指令开始执行,但它们的返回值不同:父进程的fork()返回子进程的PID,子进程的fork()返回0。

创建子进程后,通常会使用exec()系列系统调用加载并执行一个新的程序。exec()会用新的程序替换当前进程的内存空间和执行上下文,但进程的PID保持不变。

进程的终止可以通过以下方式:

  • 正常终止:程序执行完毕,调用exit()系统调用。
  • 异常终止:程序发生错误,如除零错误、非法内存访问等,导致操作系统发送信号终止进程。
  • 外部终止:其他进程通过kill命令或kill()系统调用发送信号终止进程。

3.3 进程调度

进程调度是操作系统决定哪个进程在何时运行的过程。Linux内核采用抢占式多任务调度,这意味着CPU可以在任何时候从一个进程切换到另一个进程。调度器的目标是公平地分配CPU时间,并确保系统响应性。

Linux内核使用了多种调度算法,其中最常用的是完全公平调度器(Completely Fair Scheduler, CFS)。CFS的目标是为所有运行的进程提供公平的CPU时间,它通过维护一个红黑树来跟踪进程的虚拟运行时间,并选择虚拟运行时间最小的进程来运行。

进程的优先级会影响调度。在Linux中,进程的优先级由nice值和实时优先级共同决定。nice值范围从-20(最高优先级)到19(最低优先级),默认值为0。实时进程具有更高的优先级,并且可以抢占普通进程。

3.4 进程间通信(IPC)

进程间通信(Inter-Process Communication, IPC)是不同进程之间交换信息的方式。常见的IPC机制包括:

  • 管道(Pipes):用于具有亲缘关系(如父子进程)的进程之间进行单向通信。分为匿名管道(|)和命名管道(FIFO)。
  • 信号(Signals):用于通知进程发生了某个事件。信号是异步的,可以中断进程的正常执行流程。
  • 消息队列(Message Queues):允许进程通过发送和接收消息进行通信。消息队列是存储在内核中的消息列表。
  • 共享内存(Shared Memory):允许多个进程访问同一块物理内存。这是最快的IPC方式,但需要进程自行处理同步问题。
  • 信号量(Semaphores):用于进程间的同步,通常用于控制对共享资源的访问,避免竞态条件。
  • 套接字(Sockets):用于不同主机或同一主机上不同进程之间的通信。套接字是网络编程的基础。

4. 内存管理

内存管理是操作系统的重要组成部分,它负责有效地分配和管理系统内存,确保每个进程都能获得所需的内存空间,并防止进程之间相互干扰。Linux采用虚拟内存管理技术。

4.1 虚拟内存

虚拟内存(Virtual Memory)是Linux内存管理的核心概念。它为每个进程提供了一个独立的、连续的虚拟地址空间,这个地址空间的大小通常远大于实际的物理内存。虚拟内存的优点包括:

  • 隔离性:每个进程都有独立的虚拟地址空间,互不干扰,提高了系统的稳定性和安全性。
  • 内存扩展:通过将不常用的内存页交换到磁盘(交换空间/Swap Space),系统可以运行比物理内存更大的程序。
  • 内存共享:多个进程可以共享同一块物理内存,例如共享库。
  • 简化编程:程序员无需关心物理内存的布局,只需操作虚拟地址。

当进程访问虚拟地址时,内存管理单元(MMU)会将虚拟地址翻译成物理地址。这个翻译过程通过页表(Page Table)完成。页表存储了虚拟地址到物理地址的映射关系。

4.2 内存分配

Linux内核负责为进程分配内存。内存分配可以分为:

  • 物理内存分配:内核直接管理物理内存,以页(通常为4KB)为单位进行分配。内核使用伙伴系统(Buddy System)来管理物理内存的空闲块。
  • 虚拟内存分配:当进程请求内存时,内核会为其分配一段虚拟地址空间,并建立虚拟地址到物理地址的映射。实际的物理内存分配可能在进程真正访问该虚拟地址时才进行(按需分页)。

用户空间程序可以通过malloc()calloc()realloc()等库函数来动态分配内存。这些函数最终会通过brk()mmap()等系统调用向内核请求内存。

4.3 交换空间(Swap Space)

交换空间(Swap Space)是磁盘上的一块区域,用于临时存储不活跃的内存页。当物理内存不足时,内核会将一些不常用的内存页从物理内存移动到交换空间,从而释放物理内存供其他进程使用。当这些被交换出去的页再次被访问时,它们会被重新加载到物理内存中。

交换空间的存在使得系统可以运行更多的程序,但由于磁盘I/O的速度远低于内存,频繁的交换会导致系统性能下降(称为“颠簸”)。

4.4 内存回收

当系统内存紧张时,内核会启动内存回收机制。内存回收的主要目标是释放不活跃的内存页,以便为新的内存请求腾出空间。常见的内存回收策略包括:

  • 页面置换算法:当需要回收内存页时,内核会选择一些页将其从物理内存中移除。常见的页面置换算法有LRU(最近最少使用)、FIFO(先进先出)等。Linux内核主要使用一种基于LRU的算法。
  • OOM Killer(Out Of Memory Killer):当系统内存严重不足,无法满足新的内存请求时,OOM Killer会被激活。它会选择并终止一个或多个进程,以释放内存,避免系统崩溃。OOM Killer通常会选择占用内存较多且优先级较低的进程进行终止。

4.5 内存区域

一个进程的虚拟地址空间通常包含以下几个主要区域:

  • 代码段(Text Segment):存放可执行程序的机器指令。
  • 数据段(Data Segment):存放已初始化的全局变量和静态变量。
  • BSS段(Block Started by Symbol Segment):存放未初始化的全局变量和静态变量。在程序加载时,BSS段会被初始化为零。
  • 堆(Heap):用于动态内存分配,例如通过malloc()分配的内存。堆从低地址向高地址增长。
  • 栈(Stack):用于存放局部变量、函数参数和函数调用信息。栈从高地址向低地址增长。
  • 内存映射区(Memory Mapping Segment):用于内存映射文件、共享内存和动态链接库等。

5. 设备管理

Linux系统将所有硬件设备都抽象为文件,这使得用户和应用程序可以通过统一的文件I/O接口来访问和控制设备。设备管理是内核的重要职责之一,它通过设备驱动程序来实现对硬件的控制。

5.1 设备文件

在Linux中,设备文件通常位于/dev目录下。设备文件分为两种类型:

  • 块设备(Block Devices):用于处理以固定大小的数据块进行访问的设备,如硬盘、CD-ROM等。块设备可以随机访问数据,并且通常有自己的文件系统。例如,/dev/sda代表第一个SCSI硬盘。
  • 字符设备(Character Devices):用于处理以字节流进行访问的设备,如键盘、鼠标、串口、打印机等。字符设备通常不支持随机访问。例如,/dev/ttyS0代表第一个串口。

设备文件只是一个接口,它不包含实际的数据,而是指向内核中的设备驱动程序。通过对设备文件的读写操作,实际上是调用了设备驱动程序中相应的函数来与硬件进行交互。

5.2 设备驱动程序

设备驱动程序是操作系统内核的一部分,它负责管理和控制特定的硬件设备。驱动程序将硬件的复杂性封装起来,向上层提供统一的接口。当应用程序需要访问某个硬件时,它会通过系统调用请求内核,内核再调用相应的设备驱动程序来完成操作。

设备驱动程序通常以内核模块(LKM)的形式存在,可以在系统运行时动态加载和卸载。这使得系统可以支持各种各样的硬件设备,而无需重新编译整个内核。

5.3 Udev

Udev是Linux内核的设备管理器,它负责在设备插入或移除时动态创建或删除设备文件,并根据规则为设备设置权限和名称。Udev使得设备管理更加灵活和自动化。

当一个新设备连接到系统时,内核会检测到这个事件并通知Udev。Udev会根据预定义的规则(通常位于/etc/udev/rules.d/目录下)来识别设备,并执行相应的操作,例如创建设备文件、加载设备驱动程序、设置设备权限等。

6. 网络管理

Linux系统内置了强大的网络功能,支持各种网络协议和服务,使其成为构建网络服务器和网络应用的首选平台。网络管理涉及网络接口的配置、路由、防火墙以及各种网络服务的管理。

6.1 网络接口

网络接口是Linux系统与网络通信的硬件或虚拟设备。每个网络接口都有一个唯一的名称(如eth0wlan0lo等)和一个IP地址。常见的网络接口类型包括:

  • 以太网接口(Ethernet Interface):用于有线网络连接,通常命名为ethXenpXsY
  • 无线接口(Wireless Interface):用于无线网络连接,通常命名为wlanXwlpXsY
  • 回环接口(Loopback Interface):一个特殊的虚拟接口,通常命名为lo,IP地址为127.0.0.1。用于本地进程间通信和网络服务的测试。

配置网络接口的常用命令有:

  • ip addr:显示或配置网络接口的IP地址。
  • ip link:显示或配置网络接口的状态。
  • ifconfig(旧版):显示或配置网络接口信息。
  • nmcli:NetworkManager命令行工具,用于管理网络连接。
  • nmtui:NetworkManager文本用户界面工具。

6.2 路由

路由是指数据包从源主机到目的主机所经过的路径。Linux内核维护一个路由表,用于决定如何转发数据包。当一个数据包到达系统时,内核会根据目的IP地址在路由表中查找匹配的路由规则,然后将数据包发送到相应的网络接口或下一跳路由器。

管理路由表的常用命令有:

  • ip route:显示或配置路由表。
  • route(旧版):显示或配置路由表。

6.3 DNS解析

DNS(Domain Name System)将人类可读的域名(如www.example.com)解析为机器可读的IP地址。Linux系统通过/etc/resolv.conf文件配置DNS服务器的地址。当应用程序需要解析域名时,它会查询该文件中配置的DNS服务器。

6.4 防火墙

防火墙用于控制网络流量,保护系统免受未经授权的访问和恶意攻击。Linux系统中最常用的防火墙工具是Netfilter框架,它通过iptablesnftables命令进行配置。

  • iptables:一个命令行工具,用于配置Linux内核的Netfilter防火墙规则。它允许管理员定义规则集,以过滤、修改或转发网络数据包。
  • nftables:Netfilter的下一代包过滤框架,旨在取代iptables。它提供了更灵活、更高效的规则定义方式。

6.5 网络服务

Linux系统可以运行各种网络服务,如Web服务器(Apache、Nginx)、FTP服务器(vsftpd)、SSH服务器(OpenSSH)、DNS服务器(Bind)、邮件服务器(Postfix)等。这些服务通常由独立的守护进程(daemon)提供,并通过特定的端口监听网络请求。

管理网络服务的常用工具包括:

  • systemctl:用于管理systemd服务,包括启动、停止、重启、查看状态等。
  • netstat:显示网络连接、路由表、接口统计等信息。
  • ssnetstat的替代品,用于显示套接字统计信息。
  • lsof -i:列出打开网络连接的进程。

7. 安全机制

Linux系统在设计上非常注重安全性,提供了多层次的安全机制来保护系统和用户数据。这些机制包括用户和权限管理、文件权限、SELinux/AppArmor、防火墙以及加密等。

7.1 用户和权限管理

Linux是一个多用户操作系统,每个用户都有一个唯一的用户名和用户ID(UID)。用户可以属于一个或多个用户组,每个用户组也有一个唯一的组ID(GID)。

  • 用户:通过用户名和密码进行身份验证,拥有对系统资源的访问权限。
  • 用户组:用于简化权限管理,将多个用户归类到同一个组中,然后为组分配权限。

常用的用户和组管理命令:

  • useradd:创建新用户。
  • usermod:修改用户属性。
  • userdel:删除用户。
  • passwd:设置或修改用户密码。
  • groupadd:创建新用户组。
  • groupmod:修改用户组属性。
  • groupdel:删除用户组。
  • id:显示用户和组信息。
  • whoami:显示当前用户名。
  • su:切换用户。
  • sudo:以其他用户(通常是root)的身份执行命令。

7.2 文件权限

Linux文件系统对文件和目录的访问权限进行了严格的控制。每个文件和目录都有所有者(User)、所属组(Group)和其他人(Others)三种权限。

权限类型包括:

  • 读(Read, r):允许读取文件内容或列出目录内容。
  • 写(Write, w):允许修改文件内容或在目录中创建/删除文件。
  • 执行(Execute, x):允许执行文件或进入目录。

权限可以用符号(rwx)或数字(八进制)表示。例如,rwx对应数字7,rw-对应数字6,r-x对应数字5。

文件权限的表示格式通常是rwxrwxrwx,分别代表所有者、所属组和其他人的权限。例如,rwxr-xr--表示所有者有读写执行权限,所属组有读执行权限,其他人只有读权限。

除了基本权限,还有一些特殊权限位:

  • SUID(Set User ID):当可执行文件设置了SUID位时,任何用户执行该文件时,都会以文件所有者的权限运行。常用于需要临时提升权限的程序,如passwd命令。
  • SGID(Set Group ID):当可执行文件设置了SGID位时,任何用户执行该文件时,都会以文件所属组的权限运行。当目录设置了SGID位时,在该目录下创建的新文件或目录的所属组会继承父目录的所属组。
  • Sticky Bit(粘滞位):当目录设置了Sticky Bit时,只有文件或目录的所有者、目录的所有者或root用户才能删除或移动该目录下的文件。常用于共享目录,如/tmp

常用文件权限管理命令:

  • chmod:修改文件或目录的权限。
  • chown:修改文件或目录的所有者。
  • chgrp:修改文件或目录的所属组。

7.3 SELinux / AppArmor

SELinux(Security-Enhanced Linux)和AppArmor是Linux内核的安全模块,它们提供了强制访问控制(Mandatory Access Control, MAC)机制,进一步增强了系统的安全性。与传统的自主访问控制(Discretionary Access Control, DAC,即文件权限)不同,MAC模型强制执行安全策略,即使是root用户也可能受到限制。

  • SELinux:由美国国家安全局(NSA)开发,提供非常细粒度的访问控制。它基于类型强制(Type Enforcement)模型,为每个文件、进程和端口都分配一个安全上下文,并根据策略规则决定它们之间的交互。
  • AppArmor:由Novell开发,相对SELinux更容易配置和管理。它通过为程序定义安全配置文件(profile)来限制程序的行为,例如程序可以访问哪些文件、可以执行哪些操作等。

7.4 加密

Linux提供了多种加密工具和技术来保护数据,包括文件系统加密、磁盘加密和网络通信加密。

  • 文件系统加密:例如eCryptfs,可以在文件系统级别对文件进行加密,透明地保护用户数据。
  • 磁盘加密:例如LUKS(Linux Unified Key Setup),可以在块设备级别对整个磁盘或分区进行加密,即使磁盘被盗,数据也无法被未经授权地访问。
  • 网络通信加密:通过SSL/TLS协议(如HTTPS、SSH、VPN)对网络传输的数据进行加密,防止数据被窃听或篡改。

8. 文件系统

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构。它负责管理文件的存储、检索、命名、组织和访问。Linux支持多种文件系统。

8.1 常见文件系统类型

  • Ext系列(Ext2, Ext3, Ext4):Linux中最常用的文件系统。Ext4是Ext3的改进版,支持更大的文件系统和文件大小,性能更好,并引入了日志功能(Journaling),提高了数据完整性。
  • XFS:高性能的日志文件系统,特别适用于大型文件和高并发访问的场景。
  • Btrfs:下一代文件系统,提供了许多高级特性,如写时复制(CoW)、快照、校验和、多设备支持和子卷等。
  • ZFS:一个功能强大的文件系统和逻辑卷管理器,提供了数据完整性、快照、克隆、数据压缩和重复数据删除等高级特性。
  • FAT/NTFS:主要用于与Windows系统兼容,通常用于U盘、移动硬盘等。
  • Swap:用于交换空间,不用于存储常规文件。

8.2 文件系统结构

Linux文件系统采用树形结构,所有文件和目录都挂载在根目录/下。即使文件存储在不同的物理设备上,它们也通过挂载点(mount point)统一呈现为一个逻辑文件系统。

8.3 日志文件系统

日志文件系统(Journaling File System)通过记录文件系统的元数据更改日志来提高文件系统的可靠性。在系统崩溃或断电时,日志文件系统可以通过回放日志来快速恢复文件系统的一致性,而无需进行耗时的文件系统检查。

Ext3、Ext4、XFS、Btrfs等都是日志文件系统。

8.4 挂载与卸载

在Linux中,要访问一个存储设备(如硬盘分区、U盘、光盘),必须将其挂载到文件系统树中的一个目录上。这个目录被称为挂载点。

  • 挂载(Mount):将一个文件系统连接到文件系统树中的某个目录。例如,mount /dev/sdb1 /mnt/usb/dev/sdb1分区挂载到/mnt/usb目录。
  • 卸载(Unmount):将一个已挂载的文件系统从文件系统树中分离。例如,umount /mnt/usb

系统启动时,/etc/fstab文件定义了需要自动挂载的文件系统。

8.5 软链接与硬链接

  • 硬链接(Hard Link):指向同一个inode(文件在文件系统中的唯一标识)的多个文件名。硬链接只能链接到同一文件系统中的文件,不能链接目录,并且删除其中一个链接不会影响其他链接和文件本身,只有当所有硬链接都被删除时,文件才会被真正删除。
  • 软链接(Symbolic Link)/符号链接:一个特殊的文件,它包含另一个文件或目录的路径。软链接可以跨文件系统,可以链接文件或目录。删除软链接不会影响源文件,但如果源文件被删除,软链接将失效(成为“死链接”)。

常用链接管理命令:

  • ln:创建链接。ln file link创建硬链接,ln -s file link创建软链接。

9. Linux目录结构详解

Linux文件系统采用统一的树形结构,所有文件和目录都挂载在根目录/下。这种结构使得文件和目录的组织清晰有序,并且遵循FHS(Filesystem Hierarchy Standard)标准,确保了不同Linux发行版之间的一致性。

以下是Linux系统中一些重要的目录及其作用:

  • / (根目录):文件系统的最顶层目录,所有其他目录都直接或间接挂载在它下面。这是整个文件系统的起点。

  • /bin (用户二进制文件):存放所有用户都可以使用的基本命令,如lscpmvmkdir等。这些命令在系统启动和修复时也需要用到。

  • /sbin (系统二进制文件):存放系统管理员使用的基本命令,用于系统管理和维护,如fdiskifconfigmount等。这些命令通常需要root权限才能执行。

  • /etc (配置文件):存放系统和应用程序的配置文件。例如,/etc/passwd存放用户账户信息,/etc/fstab存放文件系统挂载信息,/etc/resolv.conf存放DNS配置。

  • /dev (设备文件):存放所有设备文件,包括块设备和字符设备。这些文件是访问硬件设备的接口,例如/dev/sda(硬盘)、/dev/tty(终端)。

  • /proc (进程信息):一个虚拟文件系统,存放当前运行进程的信息以及内核和系统状态信息。这个目录下的文件不是真实存在于磁盘上的,而是内核在内存中动态生成的。例如,/proc/cpuinfo(CPU信息)、/proc/meminfo(内存信息)、/proc/<PID>(特定进程的信息)。

  • /sys (系统文件):一个虚拟文件系统,提供了对内核数据结构的访问接口。它与/proc类似,但更侧重于硬件设备的抽象和管理。例如,可以通过/sys/class/net查看网络接口信息。

  • /tmp (临时文件):存放临时文件,所有用户都可以访问。系统重启后,该目录下的内容通常会被清空。

  • /usr (Unix System Resources):存放用户程序和数据,是Linux系统中最大的目录之一。它包含了许多子目录:

    • /usr/bin:存放非基本的用户命令,如应用程序的二进制文件。
    • /usr/sbin:存放非基本的系统管理命令。
    • /usr/local:存放本地安装的软件,通常是用户从源代码编译安装的程序。
    • /usr/lib:存放库文件。
    • /usr/share:存放共享数据,如文档、man手册、图标等。
  • /var (可变数据):存放经常变化的文件,如日志文件、邮件队列、打印队列等。它包含了许多子目录:

    • /var/log:存放系统和应用程序的日志文件。
    • /var/mail:存放用户邮箱。
    • /var/spool:存放打印队列、邮件队列等。
    • /var/tmp:另一个存放临时文件的目录,与/tmp不同的是,/var/tmp下的文件在系统重启后通常不会被清空。
  • /home (用户主目录):存放普通用户的主目录。每个用户都有一个以其用户名命名的子目录,例如/home/username。用户可以在自己的主目录中存放个人文件和配置。

  • /root (root用户主目录):root用户(系统管理员)的主目录,与普通用户的主目录分开存放,以提高安全性。

  • /boot (引导文件):存放引导加载程序(如GRUB)所需的文件,以及Linux内核的镜像文件。这些文件在系统启动时被加载。

  • /lib (基本共享库):存放/bin/sbin目录下的程序所需的共享库文件。

  • /lib64 (64位基本共享库):在64位系统上,存放64位程序所需的共享库文件。

  • /opt (可选应用软件):存放第三方独立软件包,通常是大型商业软件或非标准软件。

  • /mnt (临时挂载点):用于临时挂载文件系统,如CD-ROM、U盘等。

  • /media (可移动媒体挂载点):用于自动挂载可移动媒体设备,如CD-ROM、DVD、USB驱动器等。

  • /srv (服务数据):存放服务相关的数据,例如Web服务器的网页文件、FTP服务器的数据等。

  • /run (运行时数据):存放系统启动以来生成的运行时数据,例如进程ID文件(PID文件)、锁文件等。该目录是临时的,系统重启后会被清空。

  • /snap (Snap包):存放Snap包的挂载点,Snap是Canonical公司推出的一种通用软件包管理系统。

  • /lost+found (文件系统恢复):在文件系统修复过程中,存放找回的、但无法确定所属目录的文件碎片。每个文件系统分区都有一个/lost+found目录。

理解这些目录的作用对于Linux系统的管理和故障排除至关重要。

http://www.xdnf.cn/news/1009747.html

相关文章:

  • LeetCode 72. 编辑距离(Edit Distance)| 动态规划详解
  • 网络调试中的难题与破解:跨平台抓包方案实战对比与技巧分享(含Sniffmaster经验)
  • mapstruct中的@Mapper注解详解
  • linux日志工具Rsyslog
  • 【力扣 简单 C++】206. 反转链表
  • 网络的那些事——初级——路由策略
  • 数据库专家 OCP 认证培训:开启职业黄金赛道
  • 关于机器驾驶和人工驾驶的安全若干问题
  • 江苏艾立泰引领塑料包装绿色革命:闭环布局实现环保与经济效益双赢
  • 取得客运资格证后,可以从事哪些具体岗位?(如网约车、班线客车等)
  • 汇编语言深度指南:从基础到字符串操作
  • SimpleDateFormat线程安全终极方案:ThreadLocal魔法抽屉实践
  • 天猫代运营哪个公司比较靠谱
  • 黑马教程强化day2-4
  • Python爬虫实战:快手数据采集与舆情分析
  • AIAgent,Prompt,MCP是什么?
  • Eplan2022更改用户界面颜色
  • SAP会计凭证抬头增强
  • 【学习笔记】H264视频编码
  • python虚拟环境
  • JavaScript 中 apply、call 和 bind 方法的手写实现
  • cf1742D
  • <论文>自注意力序列推荐模型SASRec
  • 负氧离子监测站在景区的作用
  • 详解HarmonyOS NEXT系统中ArkTS和仓颉的混合开发
  • sqlmap 的基本用法
  • 树莓派-ubuntu 24.04开启桌面远程访问
  • MD从入门到荒废-Markdown文件插入多个动态徽章
  • linux驱动开发(6)-内核虚拟空间管理
  • python 在基因研究中的应用,博德研究所:基因编辑