第三部php
# ls -lhi (i: inode,每一个文件前的数字表明文件身份ID;h: human 人类可读)html
显示:25091 -rw-r--r-- 1 root root 81 4月 15 00:33 oldboy.txtjava
第1列:inode=>index node 索引节点编号。node
第2列:文件类型及权限(共10个字符,第一个字符为类型,后9个字符为文件权限)。python
第3列:硬连接个数( 详细参看ln命令的讲解)。硬连接是文件的又一个入口。mysql
第4列:文件或目录所属的用户(属主)。linux
第5列: 文件或目录所属的组。ios
第6列:文件或目录的大小。nginx
第七、八、9列:文件或目录的修改时间。面试
第10列:实际的文件名或目录名。
第2列:2-10个字符 rw-r--r--. 文件权限(r: read ; w: write x: 执行; -: 无) 第11个字符是一个点符号,与SELinux相关。
第四列:文件对应的属主或者用户。
第五列:文件对应的属组或用户主。
inode概述:硬盘要分区,而后格式化,建立文件系统。
Innode,中文意思是索引节点(index node)。在每一个Linux存储设备或存储设备的分区(存储设备能够是硬盘、软盘、U盘.......)被格式化为EXT4文件系统后,通常都有两部分:第一部分是Inode(不少个),第二部分是Block(不少个)。Block是用来存储实际数据用的,例如:照片、视频等普通文件数据。而inode就是用来存储这些数据属性信息的(也就是ls -l的结果),inode包含的属性信息包括文件大小、属主、归属的用户主、读写权限、文件类型、修改时间,还包含指向文件实体的指针的功能(inode节点 --block的对应关系)等。可是,inode里惟独不包含文件名。
查看inode大小的命令:
# dumpe2fs /dev/sda3(1) | grep -i "inode size"
显示:Inode size: 256字节
查看:inode各个分区总量(使用多少,空闲多少,使用百分比) # df -i
查看block总量(硬盘使用状况) # df -h
有关inode的小结:
a. 磁盘分区格式化为ext4文件系统后会生成必定数量的inode和block 。
b. inode是索引节点,做用是存放文件的属性信息以及做为文件的索引(指向文件的尸体block)
c. ext3/ext4文件系统的block存放的是文件的实际内容。
d. inode是一块存储空间,Centos6非启动分区inode默认大小256字节,Centos5是128字节。
e. inode是一串数字,不一样的文件对应的inode(一串数字)在文件系统里是惟一的。
f. inode号相同的文件,互为硬连接文件(文件的又一个入口)
g. 一个额外你见被建立后至少要占用一个inode和一个 block.
h. block的大小通常有1k,2k,4k几种。其中引导分区等为1k,其余普通分区为4k(Centos6) (查看命令 # dumpe2fs /dev/sda/ | grep -i "block size" )
i. 若是一个文件很大,可能占多个block(4k).
j. 若是文件很小,至少占一个block,而且剩余空间浪费了。
k. inode大小和总量查看
# dumpe2fs /dev/sda3 |egrep -i "block size | inode size" ; # dumpe2fs /dev/sda3 | egrep -i "block count | inode count "
l. 查看inode的总量和使用量命令 df -i
m. 如何生成及指定inode大小 # mkfs . ext4 -b 2048 -I 256 /dev/sdb
有关Block的知识总结:
a. 硬盘读取数据是按Block为单位读取的。
b. 一个文件可能占用多个block,每读取一个block就会消耗一次硬盘I/O 。
c. 若是要提高磁盘I/O性能,那么就要尽量一次性读取数据尽可能的多。
d. 一个block只能存放一个文件的内容,不管内容有多少。若是block 4k,那存放1k的文件,剩余3k 就浪费了。
e. Block并不是越大越好。Block太大对于小文件存放就会浪费磁盘空间。例如:1000K的文件,BLOCK为4K,占用250个BLOCK,BLOCK为1k,占1000个BLOCK。 访问效率谁更高?消耗I/O分别为250次和1000次。
f. 大文件(大于16k)通常设置Block大一点,小文件(小于1K)通常设置BLOCK 小一点。
g. BLOCK太大例如4K,文件都是0.1k,大量浪费磁盘空间。
h. Block太大例如1K,文件都是1000K,消耗磁盘I/O。
i. 恩健较大时,block 设置大一些会提高磁盘访问效率。
j. ext3/ext4文件通常设置为4K.
k. Block的设置也是格式化分区时候,mkfs ext4 -b 2048 -l 2048 -l 256 /dev/sdb
见视频画图说明block占用空间的理解
企业面试题1:一个100M(100000K)的磁盘分区,分别写入1K的文件或写入1M的文件,分别能够写多少个?
解答知识点:
a. 上面的考试题考察的是文件系统inode和block的知识。
b. inode是存放文件属性信息的(也包含指向文件实体的指针),默认大小128 byte (C58),256 byte (C 64)
c. Block是存放文件实际内容的,默认大小1K(boot)或4K(非系统分区默认给4K),通常企业多用4K的block。
d. 一个文件至少要占用一个inode及一个block。
e. 默认较大分区常规企业真是场景状况下,inode数量是足够的,而block数量消耗的会更快。
正确答案:
a. 默认分区常规状况下,对大文件来说inode是足够的。而block数量消耗的会更快,block为4k的状况,1M的文件不会有磁盘浪费状况,因此 文件数量大概为100/1=100个。
b. 对于小文件0.1K,inode会消耗的更快。默认分区的时候block数量是大于inode数量的。
每一个小文件都会占用一个inode和一个block。因此最终文件的数量:inode会先消耗完,文件总量是inode的数量。
企业面试题2:若是想磁盘写入数据提示以下错误:No space left on device,经过df -h 查看磁盘空间,发现没满,请问可能缘由是什么?
解答:多是inode数量被消耗尽了。
a. df -i 查看是否耗尽了inode 数量。
b. 企业工做中邮件临时队列/var/spool/clientmquene这里很容易被大量小文件沾满致使No space left on device的错误。clientmquene目录只有安装了sendmail,才会有。centos5.8默认就会装
sendmail ,centos6.6 默认没有sendmail。
a. windows里是经过扩展名(.txt)来区分文件类型的。oldboy.txt
b. linux里文件扩展名和文件类型没有关系。
c. 为了容易区分和兼容用户使用windows的习惯,咱们也会用扩展名文件类型。oldboy.sh ,oldboy.tar.gz
在Linux系统中,能够说一切皆文件。文件类型包含有普通文件,目录文件,块设备文件,符号连接文件等等。
Linux文件类型分为如下几种(带*号的必需要掌握):
**b: block(buffered) special 设备文件
c: character (unbuffered) special 字符文件
*****d: directory 目录文件
p: named pipe (FIFO) 管道文件
*****f : regular file (-) 普通文件
***l : symbolic link ; soft link 连接文件
s : socket 套接字文件
# mkmod oldboy c 5 1 建立oldboy为字符设备文件
文件类型小结:
Linux系统里常见的文件扩展名以下:
运维开发缘由呢:shell/python/php三者之一,至少会一个,最好会两个。
在Linux系统中,连接可分为两种:一种为硬连接(Hard Link),另外一种为软连接或符号连接(symbolic link or soft link)。咱们在前面讲解过ln这个命令就是建立连接文件的,在默认不带参数的状况下,执行ln命令建立的连接是硬连接。
若是使用ln -s建立连接则为软连接。
实践直观演示理解。
硬连接:ln 源文件 目标文件
软连接:ln -s 源文件 目标文件(目标文件不能事先存在) -s (soft)
硬连接是指经过索引节点(inode)来进行连接。在Linux(ext2,ext3,ext4)文件系统中,保存在磁盘分区中的文件无论是什么类型都会给它分配一个编号,这个编号被称为硬连接。提示:硬连接文件就至关于文件的另一个入口。硬连接的做用之一是容许一个文件拥有多个有效路径名(多个入口),这样用户就能够创建硬连接到重要的文件,以防止"误删" 原数据。
在Linux系统中,删除静态文件(没有进程调用)(目录也是文件)的条件是与之相关的全部硬连接文件均被删除。
硬连接的建立:
直接执行命令"ln 源文件 硬连接文件"便可完成建立硬连接。
硬连接知识小结:
建立硬连接命令:
文件删除控制的变量。
i_link文件的硬连接数量。
i_count引用计数(有一个陈格许使用i_count+1)
文件删除的条件:i_link=0 and i_count=0
企业案例:若是向磁盘写入数据提示以下错误:No space left on device,经过df -h 查看磁盘空间,发现没满,请问可能缘由是什么?
解答:多是 inode数量被消耗尽了。
Centos5.8默认就会装sendmail,centos6.6默认没有sendmail。
*保留视频实践知识。(多看)未了解 *****
# df -h 磁盘分区信息命令
# du -sh /(*) 查看根(/)分区目录文件的大小
企业案例:文件删除生产场景案例解决实战
WEB服务器磁盘满故障深刻解析 (http://oldboy.blog.51cto.com/2561410/612351) 多看本视频,未了解 (*****)
23. linux系统目录的硬连接知识介绍
以点(.)开头的文件表明隐藏文件
# ls -a 显示隐藏文件 ls -al 显示全部隐藏文件
#每一个目录与目录下的点(当前目录)互为硬连接文件。因此目录有2个入口
若是一个目录含有8个硬连接数。说明该目录下含有一个当前目录(.)和7个目录文件里上一级目录(..)。
软连接(soft link)也称为符号连接(symbolic link),Linux里的软连接文件就相似于windows系统中的快捷方式。Linux里的软连接文件其实是一个特殊的文件,文件类型是I 。软连接文件实际上能够
理解为一个文本文件,这个文件中包含有软连接指向另外一源文件的位置信息内容。所以,经过访问这个“快捷方式”就能够迅速定位到软连接所指向的源文件实体。
建立软连接命令: # ln -s oldboyfile oldboyfile_soft_link
执行命令 "ln -s 源文件 软连接文件“ ,便可完成建立软连接。
误区:建立软连接源文件是须要存在的,要建立的软连接文件是不能存在的,是要用ln命令建立的。
软连接知识总结:
看视频实践
有关文件的连接小结:
经过以上的测试,咱们能够获得如下几个结论:
有关目录连接小结:
企业面试题:描述Linux下软连接和硬连接的区别
解答:在Linux系统中,连接分两种:一种被称为硬连接;另外一种被称为符号连接或软连接。
a. 编译软件时指定版本号(/application/apache2.2.23),访问时但愿去掉版本号(/application/apache),能够设置软连接到编译的路径。全部程序都访问软连接文件(/application/apache),当软件升级高版 本后,只需删除连接文件重建到高版本路径的软连接便可(/application/apache)。
b. 企业代码发布时(php程序),须要把全部代码传到一个新发布的临时目录或者新的站点目录。发布时要么一个mv,也能够重建软连接指向到这个新的临时目录挥着新的站点。
c. 不方便目录移动,使用ln -s 。
解答1:硬连接数2个,查看方法为:ls -ld /oldboy/etc
这是由于: a. 建立的目录自己为一个硬连接。
b. 新目录ett下的隐藏目录(点号)为建立的新目录的又一个硬连接 ,也算一个连接数。所以,硬连接数是2。
解答2:硬连接数3个。
经过上面的题,咱们发现ett目录的inode节点数字编号,和ett目录下的(.)点目录。 inode编号是同样的,而ett目录下的(..) 两个点和ett的上级目录oldboy的inode数字编号是同样的。
用户的角色是经过UID和GID识别的。
UID: User Identify 用户ID,至关于各位的身份证,在系统中是惟一 的。
GID: Group Identify 组ID,至关于各位的家庭或者大家的学校。
用户分为三类:
a. 超级用户:root ( uid = 0 , gid = 0 , uid = 0 的用户就是超级用户) # vi /etc/passwd (修改passwd文件,可更改uid,gid)
b. 虚拟用户: 它存在Linux中,知足文件或程序运行的须要而建立的。不能登录,不能使用,是傀儡。 uid-->gid (1-->499)
c. 普通用户:管理员root建立的用户,uid-->gid (500-->65535)
虚拟用户Linux安全优化:1. 安装系统后能够删除用不到的虚拟用户,但最好不删而是注释掉,万一回复过来。
2. 咱们本身部署服务的时候,也会建立虚拟用户,知足服务的需求:例如:apache, nginx, mysql, nfs, rsync, nagios, zabbix, redis
用户和用户组的对应关系有:一对一,一对多,多对一和多对多。
一对一:即一个用户能够存在一个组中,也能够是组中的惟一成员。如 root 。
一对多:即一个用户能够存在于多个用户组中。
多对一:多个用户能够存在于一个组中,这些用户具备和组相同的权限。
多对多: 多个用户能够存在多个组中。而且几个用户能够归属相同的组。
Linux系统下的帐户文件主要有/etc/passwd , /etc/shadow , /etc/group , /etc/gshadow文件
帐号名称 帐号密码 帐号UID 帐号组GID 用户说明 用户家目录 shell解释器
root :x :0 :0 :root :/root :/bin/bash
2. shadow文件中一行的各个字段详细说明
字段名称 注释说明
帐号名称 用户的帐号名称
帐号密码 用户密码,这是加密的口令
最近更改密码的时间 从1970年1月1日起,到用户最近一次更改口令的天数
禁止修改密码的天数 从1970年1月1日起,到用户能够更改密码的天数
用户必须更改口令的天数 从1970年月1日起,到用户必须更改密码的天数
警告更改密码的天数 在用户密码过时前多少天提醒用户更改密码
不活动时间 在用户密码过时以后到禁用帐户的天数
失效时间 从1970年1月1日起,到用户被禁用的天数(useradd -f)
标志 保留
3. group文件中一行的各个字段详细说明
字段名称 注释说明
用户组名 该组的名称
用户组密码 一般不须要设置该密码,因为安全缘由,该密码被记录在/etc/gshadow中,所以,显示为"X"。这相似/etc/shadow
GID 就是用户组的ID
用户组成员 加入这个组的全部用户帐号
4. gshadow文件中一行的各个字段详细说明
用户组名 注释说明
用户组密码 用户组密码,这个段能够是空的或!,若是是空的或有!。表示没有密码
用户组管理源帐号 用户组管理者,这个字段也可为空,若是有多个用户组管理者,用,号分割
用户主成员 加入这个组的全部用户帐号,对表中多个用户经过“,” 分割
# ls -l 显示的时间是修改时间 (文件名在上一级目录的block,删文件是产出上一级目录的block,block受上一级目录的权限控制)
# ls -l --time -style = long - iso (显示友好的长格式时间为:2018-03-23)
# stat /etc/hosts (显示文件的时间)(显示文件或文件系统的状态)
什么是正则表达式?
简单的说,正则表达式就是为助理大量的字符串而定义的一套规则和方法。
例如:假设“@”表明oldboy,“!”表明oldgirl。 echo "@!"==" oldboyoldgirl "
经过定义的这些特殊符号的辅助,系统管理员就能够快速过滤,替换或输出须要的字符串。
Linux正则表达式通常以行为为单位处理的。
Linux正则表达式只针对命令三剑客 (grep , egrep , awk, sed)
在企业工做中,咱们天天作的Linux运维工做中,时刻都会面对大量带有字符串的文本配置、程序。命令输出及日志文件等。而咱们常常会有迫切的须要,从大量的字符串内容中查找符合工做须要的
特定的字符串。这就要靠正则表达式。所以,能够说正则表达式就是为过滤这样字符串的需求而生的!
例如:ifconfig的输出取IP 。 例如:cat /var/log/message输出等。
容易混淆的两个注意事项:
a. 正则表达式应用很是普遍,存在于各类语言中。例如:php, python,java等。可是,咱们今天将的是Linux系统运维工做中的正则表达式。即Linux正则表达式,最常应用正则表达式的命令就是
grep (egrep),sed,awk换句话说Linux三剑客要想能工做的更高效,那必定离不开正则表达式配合的。
b. 正则表达式和咱们经常使用的通配符特殊字符是有本质区别的。
例子: ls *.log这里的*就是通配符(表示全部),正则表达式的*表示。重复前面的一个字符的0次或屡次。
注意事项:
a. linux正则通常以行为单位匹配处理。
b. alias grep = 'grep --color = auto',讲课是以grep为例(能够看到匹配颜色)
c. 注意字符集: (export LC_ALL=C)
咱们要想玩好三剑客,首先就要掌握正则表达式 (找大量例子练习),Linux里正则表达式,主要是awk,sed,grep(egrep)三剑客的正则表达式。
实战准备:
2. 注意字符集可能带来的问题: # export LC_ALL = C
基础正则表达式
a. ^word 搜索以word开头的。 vi ^一行的开头
b. word$ 搜索以word结尾的。 vi $一行的开头
c. ^$ 表示空行,能理解么?
例: # grep "^m" a.txt (过滤以m开头的整行)
# grep "m$" a.txt (过滤以m结尾的整行)
# grep -v "^$" a.txt (过滤(去掉)空行所剩下的内容)
d. . 点表明且只能表明任意一个字符。
e. \ 例\.就表明点自己,转义符号,让有着特殊身份意义的字符脱掉马甲,还原原型。
f. * 例0*重复0个或多个前面的一个字符。
g. .* 匹配全部字符。延伸^.*以任意多个字符开头。*¥ 以任意多个字符结尾。
例: # grep "." a.txt (匹配全部内容,空行除外)
# grep ".*" a.txt (匹配全部内容,包括空行)
# grep "raymo.d" raymond.txt (匹配raymo.d,点号表明任一字符)
# grep "\.$" raymond.txt (匹配以点(.)结尾的行的内容)
# grep "0* " raymond.txt (匹配以0开头的相同的字符串)
h. [abc] 匹配字符集合内的任意一个字符[a-z A-Z],[0-9]
i. [^abc] 匹配不包含^后的任意字符的内容,中括号例^为取反,注意和...开头区别。
j. a\{n,m\}重复n到m次,前一个重复的字符。若是用egrep/sed -r 能够去掉斜线。
\{n,\}重复至少n次,前一个重复的字符。若是用egrep/sed -r 能够去掉斜线。
注意:egrep或sed -r 过滤通常特殊字符能够不转义。
grep通常经常使用参数:
-a: 在二进制文件中,以文本文件的方式搜索数据。
-c: 计算找到 ‘搜索字符串’ 的次数。
-o: 反显示出匹配regxp的内容(用于统计出如今文中的次数)
-i : 忽略大小写的不一样,因此大小写视为相同 *****
-n: 在行首显示行号 *****
-v: 反向选择,即显示没有‘搜索字符串’ 内容的那一行 *****
-E: 扩展的grep,即egrep *****
--color=auto : 以特定颜色高亮显示匹配关键字 ***
提示: -i , -v为经常使用参数
-A: After的意思,显示匹配字符串及其后几行的数据。
-B: Before的意思,显示匹配字符串及其前几行的数据。
-C: 显示匹配字符串及其先后各num 行。
例:#ifconfig eth0 (取命令所打印出来的IP地址)
解答:1. #ifconfig eth0 | sed -n 'ip' | sed -r ' s# .*addr:##g ' | sed ' s#Bc.*$##g '
2. # ifconfig eth0 | sed -n 'ip' | sed ' s#^.*dr: ##g ' | sed ' s#B.*$##g '
以44节例题为例 (取命令ifconfig eth0 打印内容中的IP字符串)
解答:a. # ifconfig eth0 | sed -n 'ip' | sed -r ' s#^.*dr:(.*) Bc.*$#\1#g '
b. # ifconfig eth0 | sed -nr ' 2s#^.*dr:(.*) Bc.*¥#、1#gP '