inux 目录体系详解说明

0.前言

在 Linux 中,所有的文件和目录都组成了一个单一的、倒置的树状结构,这就是 Linux 的目录体系。这种体系中,所有的目录和文件都从根目录 `/` 开始,结构清晰而有条理,这也是 Linux 文件系统的一个重要特点。下面来详解一下 Linux 的目录体系。

1. `/`(根目录):这是整个 Linux 文件系统的起点,所有的文件和目录都是从这里开始的。其他任何目录都可以通过它的全路径名来表示,如 `/usr/bin`。

2. `/bin`:这个目录存放着最经常使用的命令。这些命令是直接由操作系统执行的,例如 cp、mv、rm 等。

3. `/sbin`:这个目录存放的是系统管理者使用的系统管理程序。这些命令只能由 root 用户执行,例如 fdisk、shutdown、mount 等。

4. `/home`:用户的主目录,在 Linux 中,每个用户都有一个自己的目录,通常是在 `/home` 下一个以用户名命名的目录,如 `/home/username`。

5. `/root`:该目录为系统管理员,也就是超级权限者的用户主目录。

6. `/usr`:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下。它包含了许多子目录,如 `/usr/bin` 存放应用程序,`/usr/share` 存放共享的数据。

7. `/etc`:这个目录用来存放所有的系统管理所需要的配置文件和子目录。

8. `/var`:这个目录存放着在不断扩充着的东西,我们常见的有日志文件。

9. `/tmp`:这个目录是用来存放一些临时文件的。

10. `/boot`:这里存放的是启动 Linux 时使用的一些核心文件,包括 Linux 内核文件以及数据文件。

11. `/dev`:特殊文件目录,Linux 是用文件形式来表示设备的,如硬盘、光驱、打印机、声卡等等。

12. `/lib`:系统库保存目录,这个目录里存放着系统最基本的动态连接共享库,它的存在让系统占用的空间能够小一些。

13. `/opt`:给主机额外安装软件所摆放的目录。如你安装一个 ORACLE 数据库则就可以放到这个目录下。

14. `/mnt` 和 `/media`:挂载文件系统时常用的挂载点目录,你也可以建立其他目录作为挂载点。

15. `/proc`:这是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。

16. `/srv`:该目录存放一些服务启动之后需要提取的数据。

以上就是 Linux 目录体系的大体结构,每个目录都有它特定的用途和存放的文件。了解这些目录的结构和作用,对于我们使用和管理 Linux 系统非常有帮助。

 1. 目录结构

/
|-- bin
|-- boot
|-- dev
|-- etc
|   |-- X11
|   |-- sysconfig
|   `-- ...
|-- home
|   |-- user1
|   |-- user2
|   `-- ...
|-- lib
|-- lib64
|-- media
|-- mnt
|-- opt
|-- proc
|-- root
|-- run
|-- sbin
|-- srv
|-- sys
|-- tmp
|-- usr
|   |-- bin
|   |-- include
|   |-- lib
|   |-- lib64
|   |-- local
|   |   `-- bin
|   |-- sbin
|   |-- share
|   |-- src
|   `-- ...
`-- var
    |-- cache
    |-- lib
    |-- local
    |-- lock
    |-- log
    |-- run
    |-- spool
    `-- tmp


以下是目录的基本解释:

  • /bin: Binary的缩写,此目录存放着最经常使用的命令。
    /boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
    /dev: Device的缩写,该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
    /etc: 这个目录用来存放所有的系统管理所需要的配置文件和子目录。
    /home: 用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
    /lib: 系统软件运行所需要的共享库和内核模块。
    /media: linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux会把识别的设备挂载到这个目录下。
    /mnt: 系统提供该目录是为了让用户临时挂载别的文件系统,我们可以将外部的存储挂载在/mnt/下,然后进入该目录就可以查看该存储设备里的内容了。
    /opt: 这是给主机额外安装软件所摆放的目录。
    /proc: 这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
    /root: 该目录为系统管理员,也称作超级权限者的用户主目录。
    /run: 是tmpfs(临时文件系统)的挂载点,存储系统运行时必要的信息。
    /sbin: s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
    /srv: 该目录存放一些服务启动之后需要提取的数据。
    /sys: 这是Linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
    /tmp: 这个目录是用来存放一些临时文件的。
    /usr: 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
    /var: 这个目录中存放着在不断扩充着的东西,习惯将那些经常被修改的目录放在这个目录下,包括各种日志文件。

 2. /proc 目录详解

`/proc` 是 Linux 系统中一个非常特殊的目录,它其实是一种伪文件系统(也被称为进程文件系统),并且它只存在内存当中,而不占用外部磁盘空间。它以文件系统的方式为用户空间提供了与内核系统信息交互的接口。

接下来我们来详细说明一下 `/proc` 目录下的一些重要文件和子目录:

要注意的是,/proc 中的许多文件是只读的,但也有一些文件是可写的,通过向这些文件写入数据,可以修改内核的某些设置。例如,`/proc/sys/kernel/hostname` 文件就可以修改系统的主机名。

1. `/proc/[pid]`:这里的 `[pid]` 是每个进程的进程 ID。每当系统产生一个进程,系统就会在 `/proc` 目录中以进程号为名创建一个目录,这个目录中包含了该进程的所有信息。

2. `/proc/cpuinfo`:这个文件包含了处理器的详细信息。

3. `/proc/meminfo`:这个文件报告了当前系统的内存使用情况。

4. `/proc/mounts`:列出了系统中挂载的文件系统。

5. `/proc/partitions`:展示了系统中的分区列表。

6. `/proc/version`:该文件包含了描述 Linux 内核的版本信息。

7. `/proc/cmdline`:显示传递给内核的启动参数。

8. `/proc/stat`:记录了大量的关于系统运行状态的信息,包括 CPU 利用率,任务数量,上下文切换数量等。

9. `/proc/uptime`:显示系统自上次启动以来的运行时间。

10. `/proc/net`:关于网络子系统的信息,包含了大量的网络状态、配置和统计信息。

1. /proc目录

Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。
用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。下面列出的这些文件或子文件夹,并不是都是在你的系统中存在,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和sys。 Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi 目录不存在。
除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。

2. proc子文件或子文件夹

/proc/buddyinfo: 每个内存区中的每个order有多少块可用,和内存碎片问题有关
/proc/cmdline: 启动时传递给kernel的参数信息
/proc/cpuinfo: cpu的信息
/proc/crypto: 内核使用的所有已安装的加密密码及细节
/proc/devices: 已经加载的设备并分类
/proc/dma: 已注册使用的ISA DMA频道列表
/proc/execdomains: Linux内核当前支持的execution domains
/proc/fb: 帧缓冲设备列表,包括数量和控制它的驱动
/proc/filesystems: 内核当前支持的文件系统类型
/proc/interrupts: x86架构中的每个IRQ中断数
/proc/iomem: 每个物理设备当前在系统内存中的映射
/proc/ioports: 一个设备的输入输出所使用的注册端口范围
/proc/kcore: 代表系统的物理内存,存储为核心文件格式,里边显示的是字节数,等于RAM大小加上4kb
/proc/kmsg: 记录内核生成的信息,可以通过/sbin/klogd或/bin/dmesg来处理
/proc/loadavg: 根据过去一段时间内CPU和IO的状态得出的负载状态,与uptime命令有关
/proc/locks: 内核锁住的文件列表
/proc/mdstat: 多硬盘,RAID配置信息(md=multiple disks)
/proc/meminfo: RAM使用的相关信息
/proc/misc: 其他的主要设备(设备号为10)上注册的驱动
/proc/modules: 所有加载到内核的模块列表
/proc/mounts: 系统中使用的所有挂载
/proc/mtrr: 系统使用的Memory Type Range Registers (MTRRs)
/proc/partitions: 分区中的块分配信息
/proc/pci: 系统中的PCI设备列表
/proc/slabinfo: 系统中所有活动的 slab 缓存信息
/proc/stat: 所有的CPU活动信息
/proc/sysrq-trigger: 使用echo命令来写这个文件的时候,远程root用户可以执行大多数的系统请求关键命令,就好像在本地终端执行一样。要写入这个文件,需要把/proc/sys/kernel/sysrq不能设置为0。这个文件对root也是不可读的
/proc/uptime: 系统已经运行了多久
/proc/swaps: 交换空间的使用情况
/proc/version: Linux内核版本和gcc版本
/proc/bus: 系统总线(Bus)信息,例如pci/usb等
/proc/driver: 驱动信息
/proc/fs: 文件系统信息
/proc/ide: ide设备信息
/proc/irq: 中断请求设备信息
/proc/net: 网卡设备信息
/proc/scsi: scsi设备信息
/proc/tty: tty设备信息
/proc/net/dev: 显示网络适配器及统计信息
/proc/vmstat: 虚拟内存统计信息
/proc/vmcore: 内核panic时的内存映像
/proc/diskstats: 取得磁盘信息
/proc/schedstat: kernel调度器的统计信息
/proc/zoneinfo: 显示内存空间的统计信息,对分析虚拟内存行为很有用

以下是/proc目录中进程N的信息

/proc/[pid]: pid为N的进程信息
/proc/[pid]/cmdline: 进程启动命令
/proc/[pid]/cwd: 链接到进程当前工作目录
/proc/[pid]/environ: 进程环境变量列表
/proc/[pid]/exe: 链接到进程的执行命令文件
/proc/[pid]/fd: 包含进程相关的所有的文件描述符
/proc/[pid]/maps: 与进程相关的内存映射信息
/proc/[pid]/mem: 指代进程持有的内存,不可读
/proc/[pid]/root: 链接到进程的根目录
/proc/[pid]/stat: 进程的状态
/proc/[pid]/statm: 进程使用的内存的状态
/proc/[pid]/status: 进程状态信息,比stat/statm更具可读性
/proc/self: 链接到当前正在运行的进程

 fd

在 Linux 中,"句柄" 和 "文件描述符"(File Descriptor,FD) 实际上是同一个概念。在操作系统中,句柄通常被用来作为对某种资源(例如文件、套接字等)的引用或标识,而在 Unix 和 Linux 系统中,这种句柄被称为文件描述符。

一个进程的打开的文件描述符的数量,就是这个进程当前的句柄数。当我们说一个进程的 "句柄数" 或 "文件描述符数" 时,我们是在讨论这个进程当前打开的文件、设备、套接字等资源的数量。

操作系统会对每个进程打开的文件描述符数量进行限制,这是为了防止进程过度消耗系统资源。如果一个进程达到了文件描述符的最大数量,它将无法再打开新的文件或创建新的套接字,除非它关闭已打开的某些文件描述符。

socket 

在这个上下文中,像这样的条目 `15 -> socket:[2419864]` 表示文件描述符 15 是一个套接字。套接字是一种特殊的文件类型,通常用于进程间通信和网络通信。

在Linux中,套接字和其他文件类型(如管道,设备文件等)一样,都可以通过文件描述符来访问和管理。每个套接字都有一个唯一的标识符,如上述示例中的 `[2419864]`,这个标识符只在系统内部使用,对于用户来说通常没有太大的意义。

总的来说,看到一个文件描述符链接到 `socket:[xxxxxx]`,就表示该进程正在使用一个套接字进行某种形式的通信。

 pipe

最后一列,例如0 -> pipe[2417496]14 -> /usr/local/product/jdk8u201/jre/lib/charsets.jar表示文件描述符的类型和它引用的资源。例如,pipe[2417496]表示这是一个管道,/usr/local/product/jdk8u201/jre/lib/charsets.jar表示这是一个文件。

这个列表非常有用,因为它可以帮助你理解进程正在使用的文件、设备和其他资源。

 

在这个上下文中,像这样的条目 `15 -> socket:[2419864]` 表示文件描述符 15 是一个套接字。套接字是一种特殊的文件类型,通常用于进程间通信和网络通信。

在Linux中,套接字和其他文件类型(如管道,设备文件等)一样,都可以通过文件描述符来访问和管理。每个套接字都有一个唯一的标识符,如上述示例中的 `[2419864]`,这个标识符只在系统内部使用,对于用户来说通常没有太大的意义。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰点.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值