概要:

linux文件系统(FHS)介绍;文件路径;文件名;程序命令的位置;程序格式(ELF);命令分类;命令帮助;



一、linux的哲学思想包括以下几个方面:

1、一切都由文件组成(包括硬件设备、以及通信接口等),使用文本文件保存配置信息(好处:一款文本编辑器完成大多数系统操作)。

2、由众多功能单一的程序组成:保证一个程序只做一件事,并且能做好他。

3、尽量避免与用户交互。(易于以编程的方式实现自动化任务)


二、文件系统及文件介绍:

 linux采用目录、文件的树形层级结构形式的文件系统。其中目录主要是做路径映射;文件是存储空间存储的一段数据流,对数据可以做到按名存取。


        FHS(Filesystem Hierarchy Standard(文件系统目录标准)的缩写)定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如/etc应该要放置设置文件,/bin与/sbin则应该要放置可执行文件等等。因为Linux的开发人员实在太多了,如果每个人都使用自己的目录配置方法,那么将可能会带来很多管理问题。你能想象,你进入一个企业之后,所接触到的Linux目录配置方法竟然跟你以前学的完全不同吗?很难想象。所以,后来就有所谓的文件系统层次标准(Filesystem Hierarchy Standard,FHS)出台。

第二层则是针对/usr及/var这两个目录的子目录来定义。例如/var/log放置系统登录文件、/usr/share放置共享数据等等



        linux文件系统:(FHS:文件系统层级标准)

FHS定义了linux文件系统根目录下应有的目录及文件:

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

/sbin:系统管理员使用的工具程序(/usr/sbin;/usr/local/sbin);

/boot:启动过程中需要的静态文件(kernel、initramfs(initrd)、grub),系统启动后将不需要此文件。

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

                设备类型(字符设备\(线性设备)(如:键盘)、块设备\(随机设备)(如:硬盘))

/etc:主机程序特有的配置文件只能为静态的,不能为二进制的;(大多数都是文本文件),其下也遵循                文件系统层级分级

/home:普通用户家目录(可选目录)

/root:管理员家目录

/lib:系统启动过程中或启动程序调用/bin、/sbin下的用到的库文件,以及为内核提供内核文件

        /lib下的三个重要的库:    

            libc.so.*:动态链接的c库

            ld*:运行时链接器/加载器

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

/lib(64):64位系统启动过程中或启动程序调用/bin、/sbin下的用到的库文件,以及为内核提供内核文件

/media:为便携性设备(如:软盘、光盘、U盘等)提供挂载点;(不严格限制)

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

/opt:非关键性的第三方的程序安装位置;(非限制性)

/srv:主机为服务提供的数据;

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

/usr:全局共享的只读数据路径;除根目录(/),第二重要目录。

            usr也是一个层级结构,里面必有目录:

                bin、sbin、

                lib、                            

                include:c程序头文件  

                share:命令手册页和自带文档等架构特有的文件存储路径、

                local:用来存储第三方程序;另一个层级目录

                            /usr/local:让系统管理安装本地应用程序,通常也安装第三方程序

              usr也是一个层级结构,里面可选目录:

                lib64、

                x11r6:x-windows程序安装位置

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

/var:存储经常发生变化的目录(如日志);它也是一个层级文件。

                    cache、lib、local、lock、log、opt、run、spool、tmp

/proc:基于内存的虚拟文件系统,用来为内核及进程存储其相关信息,他们多为内核参数。

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


程序的编译方式:(动态编译、静态编译)

动态编译:库文件不被复制在源程序中,而是被调用。(程序编译时要指定库文件所在路径)

静态编译:程序调用的库直接编译在源程序文件中(将库文件复制一份在源程序中)。    

linux库:glibc


        由于FHS仅是定义出最上层(/)及子层(/usr, /var)的目录内容应该要放置的文件数据,因此,在其他子目录层级内,就可以随开发人员自行配置了。


1、文件路径的表示:

绝对路径:从根起始的路径。

相对路径:从当前位置开始表示的路径。


2、文件名使用法则:

严格区分字符大小写;

目录也是文件,在同一路径下,两个文件不能同名;

支持除/以外的任意字符;

最长不能超过255个字符。

以.(点)开头的文件为隐藏文件        // 目录中的.文件代表当前目录,..代表上级目录



3、linux文件系统结构:

/:系统原始起点,根目录。

家目录:/home:用户家目录(用户起始目录),普通用户管理文件的位置。

工作目录:(working )directory

    /etc/sysconfig/network-scripts/ifcfg-eno16777736

basename:最右侧的文件或目录名,如上述的ifcfg-eno16777736;

dirname:basename左侧的路径,如上述的 /etc/sysconfig/network-scripts/;


获取文件路径的basename:

#basename /etc/sysconfig/network-scripts/ifcfg-eno16777736

获取文件路径的dirname:

#dirname /etc/sysconfig/network-scripts/ifcfg-eno16777736


4、程序、

多数系统程序文件一般存在 :/bin,/sbin,/usr/bin,/usr/sbin,

第三方安装的程序文件一般存在:/usr/local/bin,/usr/local/sbin

普通命令:/bin,/usr/bin,/usr/local/bin

管理命令:/sbin,/usr/sbin,/usr/local/sbin


库文件(不能单独执行,需被调用执行)一般存于:放:/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64

32位库文件:/lib,/usr/lib,/usr/local/lib

64位库文件:/lib64,/usr/lib64,/usr/local/lib64elf



5、linux命令遵循的特定格式规范:ELF

#file  /bin/ls        //查看特定路径下可执行程序的文件格式的类型;

并非所有的命令都有一个在某个目录下与之对应的可执行程序,如cd就没有。


命令分类:

a)、由shell程序自带的命令:内置命令(bulitin)

b)、独立的可执行程序文件、文件名即命令名:外部命令


shell程序是独特的程序,负责解析用户提供的命令。(借助于环境变量实现)

环境变量:    PATH                      //定义了从哪些路径中查找用户键入的命令字符串所对应的命令文件。

查看环境变量#echo  $PATH         //(路径中自左向右查找,按照查找次序执行命令)

以上是外部命令查找方法,内部命令不在上述查找内。


查看命令类型:

#type  命令    //查看命令是内部或外部命令。


6、命令的使用帮助:

内部命令:#help 命令

外部命令:

a)、#command --help

b)、#man  command        //man手册/usr/share/man,

命令帮助分段(section):

    NAME:功能性说明

    SYNOPSIS:语法格式(摘要)    //[ ]可选内容;< > 必选内容;a | b | c,a、b、c项选一项;。。。同类内容可 出现多个,{ }命令分组。

    DESCRIPTION:描述

    OPTIONS:选项

    EXAMPLS:使用事例

    AUTHOR:作者

    BUGS:报告程序bugs的方式

    SEE ALSO:参考命令。


命令帮助章节说明:(/usr/share/man)

#man # command     //man后的#表示要看的帮助章节。并非每个command在每个章节都有帮助手册。

#whatis command    //显示command在哪些章节有帮助。

#man -f command   //作用同whatis command

#makewhatis            //手动更新whatis数据库。因为用whatis command命令查看时,是查询数据库的出来的。

    man1、用户命令(普通用户、管理员)

    man2、系统调用命令,一般程序员会用到

    man3、c库调用

    man4、设备文件及特殊文件

    man5、文件配置格式的说明

    man6、游戏帮助

    man7、杂项

    man8、管理工具及守护进程


man命令打开后操作方法:

翻屏:

空格键:一次向后翻一屏

b建:一次向前翻一屏

ctrl+d键:向后翻半屏

ctrl+u键:向前翻半屏

回车键:向后翻一行

k键:向前翻一行

G键:跳转至最后一样

#+G键:跳转至指定行

1+G键:跳转至首行。

文本搜索:

/keyword       //从文件首部向文件尾部依次查找;不区分字符大小写

?keyword     //从文件尾部向文件首部依次查找

找到关键字后,如果有多个敲入n(与查找命令方向相同)查找,N(与查找命令方向相反)查找。

退出:

q:quit


选项

    #-M  /path/to/somewhere    //到指定目录下查找命令手册并打开它。

    #man -f         //相当于whatis,查找man所有文件帮助所在的章节

    #man  -w        //--where, --path, --location
              不实际显示手册页,但打印将格式化的 nroff 文件的位置。


#id user    //查看用户的id

#tail -1 /some/where    //查看最后一行。


c)、info command  获取命令的在线帮助文档(不是每个命令都有)

d)、很多应用程序会自带帮助文档,文档位置:/usr/share/doc/app-version(应用程序+版本号)

        README:程序相关信息

        INSTALL:安装帮助

        CHANGES:版本变动

e)、主流发行版官方文档:

        http://www.redhat.com/doc

f)、程序的官方文档:(document)

g)、搜索引擎(keyword filetype:pdf)