linux根文件系统

linux filesystem hierarchy  //linux 文件系统层级结构

推荐一本书:《奇点临近》

回顾:

如何获取使用帮助:

    内部命令:help

    外部命令:--help,man,info

复制程序时:

    官方文档

    自带文档(README,CHANGELOG,INSTALL)

操作系统时

    发行版的文档

Google搜索引擎

 

linuxKernel:linux内核:Documentation(文件)

 

man :是manual的简写,手册

whatis 关键字   //查看一个命令在那些章节下有帮助

man 数字 关键字  //查看指定章节

 

打开一个man文档后,里面有各个分段

SECTION:

    NAME

    SYNOPSIS

        [],<>,|,{},...,

 

man的控制命令:

    向后翻屏:space (空格)

    向前翻屏:b

    向下走一行:Enter

    向前走一行:k

    向下翻半屏:ctrl+d

    向前翻半屏:ctrl+u

    退出:q

    到指定的行:#G (数字加G)

    到文件末尾:G

    到文件开头:1G

    /关键词(keyword)

    ?关键词(keyword)

        n向下找

        N向上找

 

基础命令

pwd, cd, ls, echo, date, clock, cal,hwclock, cat, tac, file, type, tty, halt, poweroff, shutdown, reboot

 

任何程序要想使用内核,必须通过系统调用。

程序员开发程序:可以基于系统调用开发,也可以基于库函数开发。

 

linux文件系统:

linux公共库:glibc

    程序编译方式:

编译:就是将程序源代码,转换成汇编语言,计算机能识别的代码

        动态编译:程序所用的库不被编译进程序内部,只是指明库函数的接口,程序运行的时候,由内核将库函数加载到内存的过程就叫编译。

    动态编译,有点是节约空间。

        静态编译:程序所用的库直接被编写到程序内部,运行时不用再加载库函数。

静态编译减少了程序的依赖性,但是容易出现代码重复。

库函数进一步封装了系统调用。

 

进程的类型:

    与终端相关:通过终端启动

    与终端无关:操作引导启动过程当中自动启动。

终端:硬件设备,关联一个用户接口。实现用户与操作系统交互

 

操作系统的组成:

    静态视角看:kernel,application

   

文件系统:层级结构FHS

    文件系统都在硬盘上存放。

文件系统的关联关系:

    实际上就是将一个新硬盘挂载到原来文件系统下某个文件,则这个硬盘的空间就属于这个文件的空间。

   

系统启动:

    一开机linux系统要启动起来

        所谓启动

            要先找内核,因为由内核来控制程序,但是在启动内核之前,是由主板上的BIOS中的程序来控制,这个程序来加载硬盘中的某段程序来控制,这个程序叫bootloader

 

操作系统在刚启动的时候,文件系统是没有被激活的,而是通主板上的某些程序来控制,当内核启动的时候,就由内核来控制硬件,然后由内核来加载程序,而这些程序文件是在文件系统上存放的,所以内核就要激活这个文件系统。

 

    内核启动后,先找根,然后再将根下的一些必要文件放到内存中,最后启动shell,用户就可以登陆了。

    内核可以根据我们的提示,去指定的路径下寻找一些文件。

FHS:(全称:Filesystem HierarchyStandard:文件系统层级结构标准)

    FHS定义了linux发行版必须遵循的定义那些目录,目录的意义。

 

可以去下载FHS的层级标准文档:

http://www.pathname.com/fhs/pub/fhs-2.3.pdf

[root@centOS7 ~]# ls /

bin  dev  home  lib64 mnt  proc  run  srv  testdir  usr

boot etc  lib   media opt  root  sbin sys  tmp      var

[root@centOS7 ~]#

   

    /bin:所有用户可用的基本命令程序文件

    /sbin:供系统管理员使用的工具程序

    /boot:引导加载器必须用到的各静态文件:kernel,initramfs(initrd), grub等;启动过程中用到的配置文件 内核启动后这个文件就没用了

    /dev:存储特殊文件或设备文件;

        设备有两种类型:字符设备,块设备:

            字符设备(又叫线性设备:有时序的):键盘,鼠标

            块设备(又叫随机设备,只能实现一定大小存取):硬盘,光盘,U盘

    /etc:系统程序的配置文件,只能为静态:

        /etc也有层级结构的目录

    /home:系统可选目录,不是系统的基本组成目录,普通用户的家目录集中位置:一般每个普通的家目录默认为此目录下与用户名同名的子目录:/home/USERNAME

    /root:管理员的家目录,可选;

    /lib:为系统启动或根文件系统上的应用程序(/bin,/sbin等)提供共享库,以及为内核提供内核模块,对于32位系统是可选的,但是对于64位系统是必要的,

        在lib文件夹下要注意下面这三个文件

        lib.so.*:动态链接的C库

        ld*:运行是连接器/加载器

        modules:用于存储内核模块的目录

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

    /media:为便携式设备提供挂载点,cdrom, floppy 等U盘,光盘,移动硬盘,

    /mnt:其他文件系统的临时挂载点。

    /opt:附加应用程序的安装位置:一般称为第三方安装位置,是可选路径;

    /srv:是service的简写,当前主机为服务提供的数据;

    /tmp:为那些会产生临时文件的程序提供的用于存储临时文件的目录,可供所有用户执行写入操作,有特殊权限。

    /usr:usr Hierarchy,usr本身就是一个层级结构,全局共享的只读数据路径

        bin,sbin

        lib,lib64

        include:C程序头文件

        share:命令手册页,名字自带文档等架构特有的存放位置

        local:另一个层级目录:

        X11R6:X-Window程序的安装位置

        src:程序源码文件的存储位置

    /usr/local:Local hierarchy,/usr isshareable, read-only data(只读共享的数据存放位置)让系统管理员安装本地应用程序,也通常用于安装第三方程序的,

The following directories, or symboliclinks to directories, are required in /usr

(翻译:以下目录,或符号链接目录,/ usr是必需的

    linux根文件系统的层级标准_层级标准

    /var:var Hierarchy,也有自己的层级目录,存储常发生变化的数据的目录

        cache      Application cache data

        lib        Variable state information

        local      Variable data for /usr/local

        lock       Lock files

        log        Log files and directories

        opt        Variable data for /opt

        run        Data relevant to running processes

        spool      Application spool data

        tmp        Temporary files preserved betweensystem reboots

        cache:应用程序的缓存数据

        lib:程序的状态数据

        local:为/usr/local提供经常发生变化的数据

        lock:锁文件

        log:日志文件

        opt:专门为/opt目录下应用程序存放变化的数据

        run:运行中的进程变化的数据提供存储

        spool:应该程序的spool数据,可以理解成管道等

        tmp:系统重启后依然需要留存的临时数据

    /proc:基于内存的虚拟文件系统,用于为内核及进程存储其相关信息,他们多为内核参数,例如:net.ipv4.ip_forward,存储于/proc/sys/,因此其完整路径为/proc/sys/net/ipv4/ip_forward:

       

    /sys:sysfs基于内存的虚拟文件系统,提供了一种比proc更为理想的访问内核数据的途径,其主要作用在于为管理Linux设备提供一种统一模型的接口。主要管理设备的。

        基于内存的意思就是,临时的,关机就会消失。

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

注意:以后我们在调优的时候,/proc和/sys这连个目录是用到的最多的。

总结:

    linux启动以后,无非就是在内核中有一个文件系统,这个文件系统是关联到内核上的,内核可以通过这个文件系统访问任何文件,必要的时候把一个程序启动起来,让这个程序访问他自己的配置文件。