linux文件系统

linux系统结构图

程序编译方式:

​ linux库: glibc库

​ 动态编译: 动态编译是指程序在运行时会去调用一个共享库, 而不会把这个库复制到自己的程序上.

​ 静态编译: 静态编译是指程序在运行时会把用到的依赖库也给编译复制一份, 这样可移植性比较好,但是浪费内存

linux中进程的类型:

​ 终端: 硬件设备, 是一个用户接口, 与操作系统交互的接口

​ 与终端有关: 通过终端命令的形式, 引导程序启动

​ 与终端无关: 操作系统引导启动过程中, 自动启动的

linux中应用程序主要由4类文件组成:

​ 库文件, 帮助文件, 配置文件, 二进制文件..

操作系统组成:

​ 静态视角看: 主要就是内核(kernel)和应用程序(application)

​ 文件系统: 在操作系统运行后, 首先会运行自己的内核文件, 接下来可能会运行许许多多的应用程序文件, 而操作系统统一管理这体积大大大于自身的文件, 就需要一种层级系统.(根文件系统)方便查找到每一个 文件进行组织管理.也就是按名存取. 磁盘分区的概念, 就是找到一个根, 然后依此根创建的目录文件都属与这个根下子目录文件, 甚至操作系统内核也可以看做是一个文件.

​ 动态视角看: 操作系统启动之前, 硬件是由BIOS程序固件来简单管理的. 操作系统启动之后, 在内存中第一个要加载的可以由用户管理的程序就是内核, 内核程序要做的第一件事就是要找到分区中的根. (此处思考, 内核文件也算是根下的文件, 这时根文件系统还没有激活, 主板中的某个程序通过某种机制找到了内核文件, 然后运行内核. 接下来内核程序就接管了硬件的控制权), 找到根分区, 激活, 并加载到内存中(必须要找到根是因为操作系统只是管理硬件系统, 真正跟人交互的还是应用程序). 找到根后, 会依次加载重要的文件(程序)到内存中, 来协助管理整个操作系统.

FHS:

​ FileSystem Hierarchy Standard 文件系统层级结构标准

​ 操作系统的内核需要找到根路径, 并加载其中的重要文件和程序到内存中, 这个文件系统就需要一个统一标准来组织文件, 不然每个linux发行版都使用一套自己的标准来寻找路径, 就不利于整个linux的发展. 每个应用程序也就不能够方便的找到自己的路径.

​ 这个文件系统层级结构有几个标准的文件路径, 每个路径功能的作用都是一样的..

  • /bin: 供所有用户使用的基本的必要的命令程序文件.

  • /sbin: 供系统管理员使用的命令.

  • /boot: 引导加载器必须使用到的静态文件, 但不包括相应配置文件: kernel, inittramfs, grub等

  • /dev: 存储特殊文件(有些文件并不映射到真实物理设备上, 虚拟出的)或设备文件

    设备有两种类型: 字符设备(线性设备): 键盘等, 块设备(随机设备): 硬盘, 读取的时候都是一块一块读取的

  • /etc: 存储配置文件的目录, 自身也是一个层级目录, 包含必要的文件.

  • /home: 普通的家目录的集中位置; 一般普通用户的家目录就是以这个目录就是以home/username为起始的这个目录不是必须的(optional可选的)

  • /root: 管理员的家目录

  • /lib: 基础的共享库和内核模块. 为系统启动或根文件系统上的应用程序(主要指bin, /sbin)提供共享库, 以及为内核文件提供内核模块.

    ​ modules: 存储内核模块的目录

    ​ libc.so.*: The dynamically-linked C library 动态链接的c库

    ​ ld* : The execution time linker/loader 运行时链接库或加载库

    ​ 这些文件可能放在64位lib路径下面.

  • /lib64: 64位系统特有的存放64位共享库的路径.

  • /media: 便携式设备的挂载点: 如Cd 光盘, floppy 软盘等

  • /mnt: 文件的临时挂载点.

  • opt: 附加应用程序的安装位置: 可选安装位置, 也可以像windows一样随意指定位置安装.

  • /srv: 当前主机为服务提供的数据(不常用)

  • /tmp: temporary files 为那些会产生临时文件的应用程序提供的存储临时文件的路径, 可以让所有用户执行读写操作

  • /usr: /usr Hierarchy: 这个目录也是一个层级结构, 是除了根以外最重要的层级目录了, usr的全称是universal sharable readable的缩写, 是存储全局共享只读的数据

    ​ 必须安装的路径.

    ​ bin, sbin 这里存储的不是系统启动就需要用到的命令, 而是系统启动后为用户附加的功能

    ​ lib, lib64: 上面的程序需要用到的库文件会放到这里面.

    ​ include: c语言的头文件放在这个目录下面

    ​ share: 各种架构特有的数据. 命令手册页...

    ​ local: 层级目录

    ​ src: 存放源代码的路径.

    ​ 可选目录

    ​ X1186: X-window的程序安装位置, 这个不是必须的

    ​ src: 程序的源代码放置的位置.

  • /usr/local: local Hierarchy: 让系统管理员安装本地应用程序或安装第三发应用程序的路径, 通常是为了同时保留多个版本的应用程序(usr和usr/local路径只有管理员拥有写权限 )

​ usr/local 和usr很类似, 因为都是安装应用程序的路径, 所以也有那几个通用的路径

​ bin, sbin, include, share, lib, lib64 src 这几个必须的文件路径

  • /var: var Hierarchy: 存放经常需要发生变化的数据的目录

    ​ cache Application cache data 应用程序的缓存数据
    ​ lib Variable state information 变量状态信息
    ​ local Variable data for /usr/local usr/local程序的变量数据
    ​ lock Lock files 锁文件
    ​ log Log files and directories 日志文件和目录
    ​ opt Variable data for /opt opt目录下的应用程序的数据
    ​ run Data relevant to running processes 正在运行的进程产生的相关的数据
    ​ spool Application spool data 应用程序的管道之间的数据
    ​ tmp Temporary files preserved between system reboots 为系统重启预留的临时文件

  • /proc: 基于内存的虚拟文件系统: 为内核和进程存储相关信息 多为内核参数

  • /sys: sysfs虚拟文件系统提供了比proc更理想的访问内核数据的方式, 为管理linux提供了统一的接口

    参考文章: https://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/

posted @ 2019-08-06 10:27  yscl  阅读(112)  评论(0)    收藏  举报