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. 20155309南皓芯2016-2017 2《Java程序设计》第一周学习总结

    关于java学习笔记的思考问题 第一章:JDK与JRE,JVM之间有没有必然的联系 第二章:可执行文件夹找到相关链接库 第三章:for与while循环的用法与比较,break与continue跳出的注 ...

  2. Dev控件删除按钮的两种方式

    测试版本15.2.10:在Dev控件中删除按钮空间有两种方式:1.鼠标右键出现Delete选项,这种删除是不完全的删除,只是删除了按钮的显示,实际上按钮还是存在于代码中的.2.用键盘上的Delete键 ...

  3. 一步一步学习IdentityServer3 (12) 授权模式

    Idr3中的授权模式也是基于OAuth2 来看看例子中的说明 // // 摘要: // OpenID Connect flows. public enum Flows { // // 摘要: // a ...

  4. 2014-2015 ACM-ICPC, NEERC, Moscow Subregional Contest B - Bring Your Own Bombs 离散化+扫描线+计算期望

    扫描线一边扫一边算期望,细节比较多. #include<bits/stdc++.h> #define LL long long #define fi first #define se se ...

  5. 002 使用Appender扩展logger框架

    这个地方,在看公司的源代码的时候,写的知识点: 现在再看,竟然不是太懂,重新写一份新的文档,外加示例说明. 一:说明 1.log4j 环境的三个主要组件: logger(日志记录器):控制要启用或禁用 ...

  6. Kylin启动时错误:Failed to find metadata store by url: kylin_metadata@hbase 解决办法

    一.问题背景 安装kylin后使用命令 $ kylin.sh start 后出现Failed to find metadata store by url: kylin_metadata@hbase的错 ...

  7. Ionic Tabs

    Ionic 默认的 Tabs 模板 ,Android的在上方,IOS的在下方.在www/js/app.js修改配置,添加一个变量,再修改相应属性: .config(function($statePro ...

  8. Xiaoguang Tu's Home Page

    Xiaoguang Tu (涂晓光): CV: Ph.D. Candidate of School of Communication and Information Engineering, Univ ...

  9. 洛谷P3527 [POI2011]MET-Meteors [整体二分]

    题目传送门 Meteors 格式难调,题面就不妨放了. 分析: 一道整体二分的练手题. 就是一般的整体二分的套路,但是要注意,将修改和询问加入队列的时候要先加修改再加询问.另外,博主代码打得太丑,常数 ...

  10. CodeForces 140C New Year Snowmen(堆)

    题面 CodeForces 题解 因为要保证两两不同,所以不能单纯的开堆来维护,堆维护一个二元组,个数为第一关键字,编号为第二关键字,对于一个相同的颜色,统计一下这个颜色的个数再用堆来维护就好了. # ...