1.Linux目录结构

2. /boot/

存放系统内核文件,如vmlinuz,initrd,System.map等。其中,

a. vmlinuz是可引导的、压缩的内核,“vm”即“Virtual Memory”;

b. initrd 的英文含义是 boot loader initialized RAM disk,就是由 boot loader 初始化的内存盘。在linux内核启动前, bootloader 会将存诸介质中的 initrd 文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的 initrd 文件系统。第一阶段启动的目的是为第二阶段的启动扫清一切障碍,最主要的是加载根文件系统存储介质的驱动模块。initrd是“initial ramdisk”的简写。

c. system.map是一个特定内核的内核符号表。在进行程序设计时,会命名一些变量名或函数名之类的符号。Linux内核是一个很复杂的代码块,有许许多多的全局符号。Linux内核不使用符号名,而是通过变量或函数的地址来识别变量或函数名。比如不是使用size_t BytesRead这样的符号,而是像c0343f20这样引用这个变量。(以上描述摘自WEB)

[2]中指出系统启起时文件的加载顺序是Kernel文件->initrd文件->其它系统模块文件,其中kernel文件用于让系统认识CPU、内存等信息,而initrd用于让系统知道哪些重要外设文件需要在启动时加载(比如硬盘),这里我的理解即是引导启动程序去哪里找这些诸如驱动的文件,当然initrd也可以让写入启动时要加载的模块,或执行一些特殊命,这取决于管理员的配置。但文中说的kernel文件具体指什么文件没有例举,一头雾水,我猜应该是vmlinux文件。[2]如下图所示描述加载顺序:

3. /dev,/proc,/sys

虚拟文件系统(VFS)是由Sun microsystems公司在定义网络文件系统(NFS)时创造的。它是一种用于网络环境的分布式文件系统,是允许和操作系统使用不同的文件系统实现的接口。虚拟文件系统(VFS)是物理文件系统与服务之间的一个接口层,它对Linux的每个文件系统的所有细节进行抽象,使得不同的文件系统在Linux核心以及系统中运行的其他进程看来,都是相同的。严格说来,VFS并不是一种实际的文件系统。它只存在于内存中,不存在于任何外存空间。VFS在系统启动时建立,在系统关闭时消亡[4]

VFS的功能包括:纪录可用的文件系统的类型;将设备同对应的文件系统联系起来;处理一些面向文件的通用操作;涉及到针对文件系统的操作时,VFS把它们影射到与控制文件、目录以及inode相关的物理文件系统[4]

  当某个进程发布了一个面向文件的系统调用时,核心将调用VFS中相应的函数,这个函数处理一些与物理结构无关的操作,并且把它重定向为真实文件系统中相应的函数调用,后者则用来处理那些与物理结构相关的操作。

虚拟文件系统作为User Space与Kernel Space之间的桥梁,当用户的应用程序(Application)需要任何的硬件设备时,要先通过虚拟文件系统或系统模块,向Kernel请求支持。也就是说User Space中的应用程序无法直接和Kernel Space交互,必须通过中间的虚拟文件系统。

3.1 /dev目录

/dev目录放置所有设备文件,LINUX中设备以文件的形式展现给用户;其中,常用的设备文件直接放置/dev目录,其他设备文件则分类置于各个子目录下,如/dev/bus,/dev/disk等,可通过ls -l /dev | grep "^d"查询所有子目录。

/dev目录下的基本设备文件:

/dev/hd[a-t]:IDE设备,如IDE硬盘或光驱 /dev/sd[a-z]:SCSI设备,包括SATA硬盘等 /dev/fd[0-7]:标准软驱 /dev/md[0-31]:软raid设备 /dev/loop[0-7]:本地回环设备 /dev/ram[0-15]:内存 /dev/null:无限数据接收设备,相当于回收站 /dev/zero:无限零资源 /dev/tty[0-63]:虚拟终端,一般为远程终端 /dev/ttyS[0-3]:串口 /dev/lp[0-3]:并口 /dev/console:控制台 /dev/fb[0-31]:framebuffer /dev/cdrom => /dev/hdc /dev/modem => /dev/ttyS[0-9] /dev/pilot => /dev/ttyS[0-9]

/dev的子目录:

/dev/bus:根据不同的总线将硬件进行分类

/dev/disk:对所有硬盘按不同分类供用户查询,分类方式见诸三个目录by-id,by-uuid,by-path

/dev/input:输入设备的目录

/dev/VolGroup00:

/dev/mapper:

/dev/net:默认只有tun文件,用来建立VPN通道

/dev/pts:pts全名Pseudo-terninal slave,和终端相关的设备文件

/dev/shm:shm(share memory)提供分享内存的一种机制,以tmpfs的方式

/dev/snd:

3.2 /dev/proc

程序信息与系统设置目录,由procfs(process file system)产生,也是虚拟文件系统(procfs格式),提供系统一些实时的信息,包括主机硬件信息、系统配置信息等,可通过更改这些文件来修改系统配置(如修改网络配置)、调整系统内存和性能、调整系统执行时的参数等。

The proc file system is a pseudo-file system which is used as an interface to kernel data structures.  It is commonly mounted at /proc.  Most of  it  is  read-only,  but  some  files  allow  kernel variables to be changed[3] .

上述这段描述引自man手册,可以知道proc下文件提供内核数据结构的接口(比较难懂),大部分文件是只读的,有些是可配置的。

3.3 /dev/sys

由sysfs(system file system)文件系统建立,为用户访问kernel对象、属性提供接口,所有系统信息以类的方式的呈现给用户。具体分类包括:

/dev/block:以块设备分类信息,例如内存、硬盘、光驱 /dev/bus:以主板上的总线类型分类,例如serie、pci /dev/class:按功能进行分类,例如网卡、打印机 /dev/devices:? /dev/firmware:kernel默认支持的固件信息,可看成默认支持的驱动 /dev/fs:存放sysfs对象信息 /dev/kernel:内核信息 /dev/module:系统加载的模块信息 /dev/power:电源相关信息

参考文献

[1] http://proton.pathname.com/fhs/

[2] 邱世华. 《系统架构与目录解析》(烂书,建议别买,本人深受其害,虽出自国人之手,但内容与售价完成不符)

[3] man手册. http://man.he.net/

[4] 百度百科. http://baike.baidu.com/view/671797.htm?func=retitle

Linux架构和目录-基础篇的更多相关文章

  1. Linux 网络协议栈开发基础篇—— 网桥br0

    一.桥接的概念 简单来说,桥接就是把一台机器上的若干个网络接口"连接"起来.其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去.以使得网口之间的报文能够互相转发. 交换机 ...

  2. Linux设备模型:基础篇

    linux提供了新的设备模型:总线(bus).设备(device).驱动(driver).其中总线是处理器与设备之间通道,在设备模型中,所有的设备都通过总线相连:设备是对于一个设备的详细信息描述,驱动 ...

  3. vue详细操作目录-基础篇

    目录结构:-lib-main.js -lib-vue.js index.html 每个网页第一个均为HTML页面,第二个为js文件(主要文件) 1.vue的安装以及语法介绍 2.v-for指令 3.v ...

  4. Re:从零开始的Linux之路(基础篇)

    基于 Red Hat Enterprise Linux 7.5 或者 CentOS 7.4 Linux的命令一定遵循以下格式:command指令  [-options]选项  parameter1参数 ...

  5. 鸟哥Linux私房菜(基础篇)——第十一章:认识与学习Bash

    1.变量的取用与设定 ●变量的取用:echo ●变量的设定规则 变量与变量内容以一个等号『=』来连结. 等号两边不能直接接空格符. 变量名称只能是英文字母和数字,但是开头字符不能是数字. 变量内容若有 ...

  6. 鸟哥Linux私房菜(基础篇)——第五章:首次登入与在线求助 man page笔记

    1.X Winsows与文本模式的切换 ●[Ctrl] + [Alt] + [F1] ~ [F6] :文字接口登入 tty1 ~ tty6 终端机.        ●[Ctrl] + [Alt] + ...

  7. linux系统命令解析(0基础篇)

    经常使用命令 ctrl+W+T    当进入gvim文档编辑界面后,假设是C文件,能够列出当前文件里的全部函数. Shift+*    当进入gvim文档编辑页面,能够搜索当前keyword. ech ...

  8. Linux系统文件系统及文件基础篇

    学习Linux,重难点在于掌握不同类别的文件系统及其作用.通过对Linux系统的安装,我们首先来了解下Linux系统里各个目录文件夹下的大致功能:主要的目录树的有/./root./home./usr. ...

  9. 罗列Linux发行版的基础目录名称,命令法则和功能

    罗列Linux发行版的基础目录名称命名法则及功用规定 目录描述 /主层次 的根,也是整个文件系统层次结构的根目录 /bin存放在单用户模式可用的必要命令二进制文件,所有用户都可用,如 cat.ls.c ...

随机推荐

  1. Oracle 提示符

    http://blog.csdn.net/wyzxg/article/details/5647905

  2. Java字符串常见实例与函数

    字符串比较 字符串函数 compareTo (string) ,compareToIgnoreCase(String) 及 compareTo(object string) 来比较两个字符串,并返回字 ...

  3. activeMQ 持久化配置

    Mac 中安装activeMQ brew install activemq 启动 activemq start 控制台:在浏览器中输入url: http://localhost:8161/ A:持久化 ...

  4. python学习day4软件目录结构规范

    为什么要设计好目录结构? 参考:http://www.cnblogs.com/alex3714/articles/5765046.html "设计项目目录结构",就和"代 ...

  5. openfire 部署后报错: java.lang.IllegalArgumentException: interface xx is not visible from class loader

    该异常是创建代理时加载接口的类加载器与创建时传入的不一致. 在本地eclipse做openfire二次开发,本地运行没错,部署到服务器上后报异常:  java.lang.IllegalArgument ...

  6. 8-1 binpacking uva1149(贪心)

    题意:给定N个物品的重量Li  背包的容量M 同时要求每个背包最多装两个物品 求至少要多少个背包才能装下所有物品 简单贪心  注意输出: #include<bits/stdc++.h> u ...

  7. sort sign numeric

    //JS001   EXEC PGM=SORT                                 //*                                          ...

  8. Java时间间隔问题在Android中的使用

    转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6606720.html 假设我们在做项目的时候,获取到了一段音频,也知道音频长度,那么我们想对音频做一些处理 ...

  9. 让Xcode8.0支持iOS11.2设备真机测试

    最新支持11.2 (15C5097c)! 11.1 全版本! Xcode只可以支持iPhone手机对应iOS系统以下的真机测试.一般想要支持最新的iPhone手机系统,有两个方法. 第一.就需要更新X ...

  10. 1025 PAT Ranking (25)(25 point(s))

    problem Programming Ability Test (PAT) is organized by the College of Computer Science and Technolog ...