概要:
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)、主流发行版官方文档:
f)、程序的官方文档:(document)
g)、搜索引擎(keyword filetype:pdf)