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