Linux架构和目录-基础篇
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架构和目录-基础篇的更多相关文章
- Linux 网络协议栈开发基础篇—— 网桥br0
一.桥接的概念 简单来说,桥接就是把一台机器上的若干个网络接口"连接"起来.其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去.以使得网口之间的报文能够互相转发. 交换机 ...
- Linux设备模型:基础篇
linux提供了新的设备模型:总线(bus).设备(device).驱动(driver).其中总线是处理器与设备之间通道,在设备模型中,所有的设备都通过总线相连:设备是对于一个设备的详细信息描述,驱动 ...
- vue详细操作目录-基础篇
目录结构:-lib-main.js -lib-vue.js index.html 每个网页第一个均为HTML页面,第二个为js文件(主要文件) 1.vue的安装以及语法介绍 2.v-for指令 3.v ...
- Re:从零开始的Linux之路(基础篇)
基于 Red Hat Enterprise Linux 7.5 或者 CentOS 7.4 Linux的命令一定遵循以下格式:command指令 [-options]选项 parameter1参数 ...
- 鸟哥Linux私房菜(基础篇)——第十一章:认识与学习Bash
1.变量的取用与设定 ●变量的取用:echo ●变量的设定规则 变量与变量内容以一个等号『=』来连结. 等号两边不能直接接空格符. 变量名称只能是英文字母和数字,但是开头字符不能是数字. 变量内容若有 ...
- 鸟哥Linux私房菜(基础篇)——第五章:首次登入与在线求助 man page笔记
1.X Winsows与文本模式的切换 ●[Ctrl] + [Alt] + [F1] ~ [F6] :文字接口登入 tty1 ~ tty6 终端机. ●[Ctrl] + [Alt] + ...
- linux系统命令解析(0基础篇)
经常使用命令 ctrl+W+T 当进入gvim文档编辑界面后,假设是C文件,能够列出当前文件里的全部函数. Shift+* 当进入gvim文档编辑页面,能够搜索当前keyword. ech ...
- Linux系统文件系统及文件基础篇
学习Linux,重难点在于掌握不同类别的文件系统及其作用.通过对Linux系统的安装,我们首先来了解下Linux系统里各个目录文件夹下的大致功能:主要的目录树的有/./root./home./usr. ...
- 罗列Linux发行版的基础目录名称,命令法则和功能
罗列Linux发行版的基础目录名称命名法则及功用规定 目录描述 /主层次 的根,也是整个文件系统层次结构的根目录 /bin存放在单用户模式可用的必要命令二进制文件,所有用户都可用,如 cat.ls.c ...
随机推荐
- sass问题
用sass的minix定义一些代码片段,且可传参数 /** * @module 功能 * @description 生成全屏方法 * @method fullscreen * @version 1. ...
- Visual Studio 2017 百度云下载
链接: https://pan.baidu.com/s/1kFjGwyj5HwabvmJKiyLF_g 提取码: 关注公众号[GitHubCN]回复获取 秘钥Enterprise:NJVYC-BM ...
- CCF CSP 201709-2 公共钥匙盒
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-2 公共钥匙盒 问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须 ...
- Django实战(12):增加目录页,设定统一布局
针对上一节的新需求,界面设计师还为我们设计了一个新的界面,不仅仅是目录页,还包含了站点的整体风格,如下图: 感谢界面设计师为我们提供的“又黑又硬”的工具条,这个看起来真的很酷.下面,让我们来享用她的工 ...
- kylin加载hive表错误:ERROR [http-bio-7070-exec-10] controller.TableController:189 : org/apache/hadoop/hive/conf/HiveConf java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf 解决办法
一.问题背景 在kylin中加载hive表时,弹出提示框,内容是“oops!org/apache/hadoop/hive/conf/HiveConf”,无法加载hive表,查找kylin的日志时发现, ...
- mac 用密钥远程登陆
window远程登陆命令:mstsc A为本地主机(即用于控制其他主机的机器) ;B为远程主机(即被控制的机器Server), 假如ip为192.168.60.110;A和B的系统都是Linux 在A ...
- R语言实战(八)广义线性模型
本文对应<R语言实战>第13章:广义线性模型 广义线性模型扩展了线性模型的框架,包含了非正态因变量的分析. 两种流行模型:Logistic回归(因变量为类别型)和泊松回归(因变量为计数型) ...
- Java设计模式 - 持续更新
注意,此博客来源于我的 OneNote 笔记本 因此属于图片形式进行展示,这意味着你可以: 不经过我的同意进行保存 不经过我的同意进行发布 我仍然希望搬运时留一个网址指明来处:我的博客园 多谢!以下是 ...
- 美团外卖iOS App冷启动治理
一.背景 冷启动时长是App性能的重要指标,作为用户体验的第一道“门”,直接决定着用户对App的第一印象.美团外卖iOS客户端从2013年11月开始,历经几十个版本的迭代开发,产品形态不断完善,业务功 ...
- 机器学习之路:python 字典特征提取器 DictVectorizer
python3 学习使用api 将字典类型数据结构的样本,抽取特征,转化成向量形式 源码git: https://github.com/linyi0604/MachineLearning 代码: fr ...