文件系统各个列的含义
[root@localhost data]# ls -lhi
总用量 4.0K
400338 -rw-r--r--. 1 root root 29 5月 21 16:35 wangxin.txt
400337 -rw-r--r--. 1 root root 0 5月 21 15:18 yuehan.txt
第一列: inode(index node) 索引节点编号;它是文件或目录在磁盘里的唯一标识,linux读取文件首先要读取到这个索引节点
第二列:
第1个字符,代表文件类型,-普通文件 d目录
第2-10个字符,rw-r--r-- 文件权限(r w x)读 写 执行 -代表没有
第11个字符, . SELINUX相关
第三列: 文件的硬链接数,硬链接是文件的又一个入口
第四列: 文件对应的属主或者用户
第五列: 文件对应的属组或者用户组(团体)
第六列: 文件的大小
第七八九列: 文件被改动的时间
第十列: 文件和目录的名字
inode与block详解
linux存储设备被格式化为ext4文件系统后,一般被分为2个部分:
第一部分是inode,存放实际数据的属性信息的,还包含指向文件实体的指针的功能,文件名不是文件的属性
第二部分是Block,存放实际数据用的
inode里面不包含文件名
查看挂载的磁盘inode使用情况
[root@localhost ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 610800 65586 545214 11% /
tmpfs 125551 1 125550 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
查看inode大小: CentOS6默认是256字节
[root@localhost ~]# dumpe2fs /dev/sda3|grep -i "Inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size: 256
[root@localhost ~]# dumpe2fs /dev/sda3|grep -i "block size"
dumpe2fs 1.41.12 (17-May-2010)
Block size: 4096
[root@localhost ~]# dumpe2fs /dev/sda1|grep -i "block size"
dumpe2fs 1.41.12 (17-May-2010)
Block size: 1024
Block和Inode知识点小节:
1)磁盘分区格式化为ext4文件系统后会生成一定数量的inode和block
2)inode是索引节点,作用是存放文件的属性信息以及作为文件的索引(指向文件的实体block)
3)ext3/ext4文件系统的block存放的是文件的实际内容
4)inode是一块磁盘存储空间,C6、C7非启动分区inode默认大小为256字节,C5是128字节
5)inode是一串数字,不同的文件对应的inode在文件系统里是唯一的
6)inode相同的文件,互为硬链接文件
7)一个文件被创建后至少要占用一个inode和一个block
8)block的大小一般有1K,2K,4K几种,其中引导分区等为1K,其他普通分区为4K(C6)
9)如果一个文件很大,可能占多个block
10)如果文件很小,至少占一个block,并且剩余空间不可以使用了,例如:block为4K,存放的文件1K,剩余3K就浪费了。
11)inode,block数量和大小查看:
dumpe2fs /dev/sda3|egrep -i "Inode count|block count"
dumpe2fs /dev/sda3|egrep -i "Inode size|block size"
12)mkfs.ext4 -b2048 -I256 /dev/sdb 指定生成的inode大小(没必要修改)
13)磁盘读取数据是按block为单位读取的
14)一个文件可能占用多个block,每读取一个block就会消耗一次磁盘I/O
15)block太大,文件小就会浪费磁盘空间;block太小,文件大就会消耗磁盘I/O,降低磁盘访问效率
文件类型
-type c
File is of type c:
**b block (buffered) special 设备文件,如硬盘,光驱
c character (unbuffered) special 字符设备,如串口,USB接口
*****d directory 目录
p named pipe (FIFO)
*****f regular file 普通文件(纯文本文件,二进制文件,数据文件)
***l symbolic link 软链接或者符号链接
扩展名 虽然没什么实际意义,但是习惯通过这个来区分文件的不同
.sh shell脚本
.pl perl语言文件
.py python文件
.html、.htm、.php、.jsp、.do网页语言的文件
.conf系统服务的配置文件
.rpm表示rpm安装包文件
linux系统链接
linux系统链接:硬链接,软链接或者符号链接
硬链接:ln 源文件 目标文件
软链接:ln -s 源文件 目标文件(不能事先存在)
多个文件名指向同一个inode,这种情况的文件就称为硬链接,硬链接文件就相当于文件的另一个入口
硬链接
1、具有相同的inode节点号的多个文件是互为硬链接文件
2、删除硬链接文件之一,文件实体并未被删除
3、只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除
4、删除了源文件及所有对应的硬链接文件之后,再存放新的数据就会占用这个文件的空间,或者磁盘fsck检查的时候,删除的数据也会被系统回收
5、硬链接文件就是文件的另一个入口,可以通过给文件设置硬链接文件,来防止重要文件被误删
6、ln + 源文件+ 目标文件 创建一个硬链接 目录不能用ln来创建硬链接
创建一个硬链接
[root@localhost wangxin]# echo "i am wangxin linux" >wangxinfile
[root@localhost wangxin]# cat wangxinfile
i am wangxin linux
[root@localhost wangxin]# ln wangxinfile wangxinfile_hard_link
[root@localhost wangxin]# ls -li
260637 -rw-r--r--. 2 root root 18 5月 21 22:28 wangxinfile
260637 -rw-r--r--. 2 root root 18 5月 21 22:28 wangxinfile_hard_link
[root@localhost wangxin]# cat wangxinfile_hard_link
i am wangxin linux
文件删除控制的变量:
i_link 文件的硬链接数量
i_count 引用计数(有一个程序使用i_count加1),进程调用
文件删除的条件:
i_link=0 and i_count=0
软链接
1)软链接类似于windows的快捷方式(可以通过readlink查看其指向)
2)软链接类似一个文本文件,里面存放的是源文件的路径,指向源文件实体
3)删除源文件,软链接依然在,但是无法访问指向的源文件内容了,失效一般是红色闪烁提示
4)ln -s 源文件 软链接文件 创建一个软链接 目录能用ln来创建软链接
5)软链接和源文件是不同的文件,inode号不同
6)rm 删除软链接
创建一个软链接:
[root@localhost wangxin]# touch wangxinfile
[root@localhost wangxin]# ln -s wangxinfile wangxinfile_soft_link
[root@localhost wangxin]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月 22 00:06 wangxinfile
lrwxrwxrwx. 1 root root 10 5月 22 00:07 wangxinfile_soft_link -> wangxinfile
[root@localhost wangxin]# ls -li
总用量 0
260637 -rw-r--r--. 1 root root 0 5月 22 00:06 wangxinfile
260644 lrwxrwxrwx. 1 root root 10 5月 22 00:07 wangxinfile_soft_link -> wangxinfile
[root@localhost wangxin]# readlink wangxinfile_soft_link
wangxinfile
文件的链接小结
1、删除软链接对源文件及硬链接文件无任何影响
2、删除硬链接对源文件及软链接文件无任何影响
3、删除源文件对硬链接文件没有影响,但是会导致软链接失效
目录链接小结:
1、对于目录。不可以创建硬链接,但可以创建软链接
2、目录的硬链接不能跨越文件系统
3、每个目录下面都有一个硬链接“.”号,和对应上级目录的硬链接“..”
4、在父目录里创建一个子目录,父目录的链接数增加1(子目录里都有..来指向父目录)
企业生产目录软链接作用
1、编译软件时指定版本号(/application/apache2.2.23),访问时希望去掉版本号(/application/apache),
可以设置软链接到编译的路径。所有程序都访问软链接文件(/application/apache),当软件升级高版本后,
只需删除链接文件重建到高版本路径的软链接即可(/application/apache)。
2、企业代码发布时(PHP程序),需要把所有代码传到一个新的临时目录或者新的站点目录。发布时要么
一个mv,也可以重建软链接指向到这个新的临时目录或者新的站点目录。
3、不方便目录移动,使用ln -s
用户和用户组
UID和GID
用户的角色是通过UID和GID识别的
UID=user Identify 用户ID,相当于×××
GID=group Identify 组ID,相当于家庭
用户的分类
用户分为3类:
1、超级用户:root uid=0 gid=0,uid为0的用户为超级用户
2、虚拟用户:存在linux中,满足文件或者程序运行的需要而创建的。多数不能登录,不能使用 uid,gid=1-499
3、普通用户:uid,gid == 500-65535
用户相关的配置文件
/etc/passwd
/etc/group
/etc/shadow
/etc/gshadow
[root@localhost ~]# ls -l /etc/passwd /etc/group /etc/shadow /etc/gshadow
-rw-r--r--. 1 root root 605 5月 22 01:18 /etc/group
----------. 1 root root 495 5月 22 01:18 /etc/gshadow
-rw-r--r--. 1 root root 1148 5月 22 01:18 /etc/passwd
----------. 1 root root 953 5月 22 01:19 /etc/shadow
passwd文件中一行的各个字段简述:
kingroll :x :501 :501 : :/home/kingroll :/bin/bash
帐号 密码 UID GID 用户说明 用户家目录 shell解释器
shadow文件中一行的各个字段简述:
密码相关的参数,名称,帐号,更改时间等
group文件中一行的各个字段简述:
用户组名。用户组密码,GID,用户组成员
gshadow文件中一行的各个字段简述:
用户组名,用户组密码,用户组管理员帐号,用户组成员
PS:以上4个都不重要,只需要了解即可
/etc/skel
存放新用户配置文件的目录 当添加了一个新用户后,此目录下的文件复制到新用户的/home/users目录下
/etc/default/useradd
root@localhost ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
用户和用户组管理命令
useradd
和useradd关联的文件,useradd修改的文件:
/etc/passwd /etc/shadow /etc/group /etc/gshadow
默认行为控制
/etc/default/useradd
/etc/login.defs
useradd 选项参数
useradd -e "2017/06/01" users users帐号停止日期为2017/06/01
useradd -g 指定属于什么用户组 -M不创建家目录
useradd -D ==vim /etc/default/useradd
groupadd
/etc/group -用户组相关文件
/etc/gshadow -用户组加密相关文件
默认行为:
/etc/login.defs
groupadd -g 指定GID值 groupadd -newgroups -g 888
passwd
passwd --stdin 从stdin读入密码
echo 123456|passwd --stdin wangxin 将wangxin密码从stdin读入,修改为123456
chage
chage -E "2017/06/11" wangxin 修改wangxin账户过期时间为2017/06/11
chage -l 显示账户年龄信息
userdel
/etc/passwd --用户帐号资料文件
/etc/shadow --用户帐号资讯加密文件
/etc/group --用户组资讯文件
userdel -r 递归删除,连目录一起删掉 userdel -r wangxin 不要轻易用-r
管理多余帐号,可以用以下方式来处理
进入/etc/passwd注释掉帐号
修改登录shell为nologin,useradd -s /sbin/nologin users
用passwd锁定密码,passwd –l users
usermod账户过期等方式来停掉帐号,待以后处理
groupdel
略
usermod
绝大部分参数和useradd一样
-L 冻结用户的密码 -U 取消冻结
查询用户相关信息的命令
id、finger已经不装了、groups显示当前用户的组
w - Show who is logged on and what they are doing.
[root@localhost ~]# w
18:26:31 up 1 day, 11:56, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.163.1 12:29 0.00s 0.60s 0.00s w
who - show who is logged on
[root@localhost ~]# who
root pts/0 2017-05-31 12:29 (192.168.163.1)
users
[root@localhost ~]# users
root
id 查看用户基本信息 id root
last 用户登录和登录过的记录列表
lastlog 用户登录过的日志
users,groups,newgrp 了解
su
su -c 以某个用户的身份执行命令,执行之后切换到当前用户
分用户方案启动服务命令
su - users -c '/bin/sh /home/users/bin/deploy.sh'
sudo
sudo的配置文件/etc/sudoers
sudo -l 查看用户在主机上可用和被禁止的命令
visudo========vi /etc/sudoers
visudo -c检查语法是否正确
主机别名Host_Alias 一个别名对应多个主机
用户别名User_Alias ……………………用户
命令别名Cmnd_Alias ……………………命令
角色别名Runas_Alias ……………………角色
root ALL =(ALL) ALL
User_Alias Host_Alias Runas_Alias Cmnd_Alias
sudo配置文件/etc/sudoers授权规则注意事项总结:
1、授权规则中的所有ALL字符串必须为大写字母
2、禁止的命令尽量放在后边
3、一行内容超长可以用‘\’换行
4、“!”叹号表示非,就是命令取反的意思,即禁止执行的命令
5、命令为绝对路径
用户和用户组的一些常用命令
用户和用户组更改命令:
chgrp---change group -R递归 递归改变目录下的所有文件和目录
[root@localhost ~]# chgrp incahome test.txt
[root@localhost ~]# ls -l test.txt
-rw-r--r--. 1 root incahome 7 5月 30 17:06 test.txt
chown------change owner -R 递归
chown修改用户
[root@localhost ~]# chown wangxin test.txt
[root@localhost ~]# ls -l test.txt
-rw-r--r--. 1 wangxin incahome 7 5月 30 17:06 test.txt
chown将用户和用户组一次性全改
[root@localhost ~]# chown wangxin.root test.txt
[root@localhost ~]# ls -l test.txt
-rw-r--r--. 1 wangxin root 7 5月 30 17:06 test.txt
chown只改组
[root@localhost ~]# chown :incahome test.txt
[root@localhost ~]# ls -l test.txt
-rw-r--r--. 1 wangxin incahome 7 5月 30 17:06 test.txt
PS:冒号可以用点号代替;要授权的用户和组必须存在
设置不可修改
[root@localhost ~]# chattr +i test.txt
[root@localhost ~]# lsattr test.txt
----i--------e- test.txt
[root@localhost ~]# rm -f test.txt
rm: 无法删除"test.txt": 不允许的操作
[root@localhost ~]# chattr +a test.txt +a只能追加,不能删除
[root@localhost ~]# lsattr test.txt
-----a-------e- test.txt
系统文件属性的各类时间戳
ls -l 显示的时间是修改时间。
[root@localhost ~]# ls -l --time-style=long-iso 以long-iso的时间格式显示
-rw-------. 1 root root 1073 2017-05-20 16:56 anaconda-ks.cfg
drwxr-xr-x. 2 root root 4096 2017-05-21 16:35 data
文件的时间:
Access: 访问时间 find -atime
Modify: 修改时间,内容发生变化 find -mtime
Change: 变化时间,包含Modify,权限、用户、用户组改变会导致这个时间改变 find -ctime
stat命令查看时间等的属性
正则表达式*****
什么是正则表达式?
正则表达式就是为处理大量的字符串而定义的一套规则和方法
通过定义的这些特殊符号的辅助,可以实现快速过滤,替换或输出需要的字符串。
正则表达式分类
1)linux正则表达式(grep,awk,sed)
2)PHP,JAVA,PERL,PYTHON(Perl兼容的正则)
正则表达式注意事项
1、 正则表达式和通配符*是有本质区别的
2、 linux正则表达式一般以行为单位处理的
3、 alias grep='grep --color=auto'别名设置颜色可以更准确的看到匹配结果
4、 注意字符集,export LC_ALL=C
基础正则表达式
举例:
1)^word 搜索以word开头的
2)word$ 搜索以word结尾的
3)^$ 表示空行
4). 代表任意一个字符
5)\ 转义符
6)* 重复0个或多个前面的一个字符
7).* 匹配所有
8)[abc] 匹配字符集合内的任意一个字符[a-z],[0-9]。
9)[^abc] 匹配不包含^后的任意字符的内容
中括号里的^为取反,注意和以...开头区分
10)a\{n,m\} 重复前面n到m次;前一个重复的字符,如果用egrep/(sed -r) 可以去掉斜线
\{n,\} 重复至少n次;前一个重复的字符,如果用egrep/(sed -r) 可以去掉斜线
\{n\} 重复n次,如果用egrep/(sed -r) 可以去掉斜线
\{,m\} 重复最多m次,。。。。。。。。。。
注意:egrep,grep -E 或sed -r过滤一般特殊字符可以不转义
sed 利用正则取IP地址:
[root@localhost ~]# ifconfig eth0|sed -n '2p'|sed -r 's#.*addr:##g'|sed -r 's# B.*$##g'
192.168.163.128
[root@localhost ~]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*dr:(.*) Bc.*$#\1#g'
192.168.163.128
[root@localhost ~]# ifconfig eth0|sed -nr '2s#^.*dr:(.*) Bc.*$#\1#gp'
192.168.163.128
扩展正则
扩展正则:ERE(egrep或grep -E) PS:扩展正则几乎用不到
1)+ 重复一个或多个前面的字符
2) ? 重复0个或一个前面的字符
3)| 用或的方式查找多个符合的字符串
4) () 找出“用户组”字符串
3正则练习
找到stat /etc/hosts的权限 数字显示出来
[root@localhost ~]# stat /etc/hosts
File: "/etc/hosts"
Size: 158 Blocks: 8 IO Block: 4096 普通文件
Device: 803h/2051d Inode: 39 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-05-21 17:23:17.723369740 +0800
Modify: 2010-01-12 21:28:22.000000000 +0800
Change: 2017-05-20 17:03:18.055560838 +0800
[root@localhost ~]# stat /etc/hosts|sed -nr '4s#^.*\(0(.*)/-.*$#\1#gp'
644
[root@localhost ~]# stat /etc/hosts|awk -F '[0/]' 'NR==4 {print $2}'
644
[root@localhost ~]# stat /etc/hosts|sed -n '4p'|awk -F '[0/]' '{print $2}'
644
[root@localhost ~]# stat -c %a /etc/hosts 直接用命令参数取出来
644
时间date
[root@localhost ~]# date
2017年 05月 22日 星期一 10:44:45 CST
[root@localhost ~]# date +%F
2017-05-22
[root@localhost ~]# date +%y-%m-%d
17-05-22
[root@localhost ~]# date +%Y-%m-%d
2017-05-22
[root@localhost ~]# date +%Y-%m-%d\ %H:%M:%S
2017-05-22 10:47:11
[root@localhost ~]# date +%F\ %T
2017-05-22 10:48:04
date -d的使用 显示以前或者未来的时间
[root@localhost ~]# date +%F
2017-05-30
[root@localhost ~]# date +%F -d "-1day"
2017-05-29
[root@localhost ~]# date +%F -d "+1day"
2017-05-31
date –s 修改时间
[root@localhost ~]# date -s 2018-03-06
Tue Mar 6 00:00:00 CST 2018
[root@localhost ~]# date -s "2018-03-06 10:44:59"
Tue Mar 6 10:44:59 CST 2018
linux权限
linux普通文件的读、写、执行权限说明:
r:表示具有读取文件内容的权限
w:表示具有新增、修改文件内容的权限
(如果没有r,那么vi无法编辑,如果强制写入内容,当前内容会被覆盖,可用echo追加)
(特别注意:删除文件,修改文件名等的权限是受父目录的权限控制,和文件本身没关系)
x:表示具有执行文件的权限
1、文件本身要能够执行,
2、普通用户同时还需要有r的权限才能执行,
3、root都可以执行
linux目录的读、写、执行权限说明:
r---表示具有浏览目录下面文件及子目录的权限,即ls dir(不能进到目录里,无法cd dir)
如果没有x权限,ls时可以看到文件名,但是无法看到里面文件的属性
w---表示具有增加、删除或修改目录内文件名的权限(需要x权限配合)
x---表示具有进入目录的权限,但是没有r权限无法列表,没有w无法新建和删除
文件权限体系(八进制权限)
r read 可读 4
w write 可写 2
x execute 执行 1
- 没有 0
权限的修改
1、chmod [数字组合] 文件名
[root@localhost wangxin]# chmod 531 test.sh
2、字符修改权限方法:了解一下就行了
chmod [用户类型] [+ | - | =] [权限字符] 文件名
u,g,o,a=all r,w,x,-
rw-rw-r-x=======>rwx--xr-x:
[root@localhost wangxin]# chmod u+x,g=x test.sh
案例
网站的服务用户为test,为了防止木马入侵,文件与目录的权限控制
文件和目录给什么权限,安全临界点:
d 755 root root 目录权限755
f 644 root root 文件权限644
umask
控制文件和目录默认权限的值 修改umask的值 写入profile永久生效,工作基本不会改动,不常用
文件 666-umask==文件创建的权限值 如果umask有奇数位 得到的值对应umask奇数位+1才会得到准确值
目录 777-umask==目录创建的权限值
setuid
setuid知识小结:针对命令和二进制程序的
1)suid位的作用就是让普通用户在执行一条命令的时候,拥有这条命令对应的用户(属主)的权限
2)用户或属主对应的前三位权限的x位上如果有s就表示suid权限,当x位上没有x执行权限的时候suid就显示为大S
setgid
setgid知识总结:了解
1)与suid不同的是,sgid既可以针对文件也可以针对目录设置
2)sgid是针对用户组权限位修改的
对于文件来说,sgid的功能如下:
1、sgid仅对二进制命令程序有效
2、二进制命令或程序需要有可以执行权限x
3、执行程序的任意用户可以获得该命令程序执行期间所属组的权限
针对目录的sgid可以用来设置目录属于同一个用户组,设置了sgid之后不同用户在此目录下创建的文件就都属于该用户组,不同用户之间能共享
粘滞位sbit
用途一般是把一个文件夹的权限都打开,然后来共享文件,像/tmp目录一样。生产环境一般都不使用,了解
[root@localhost test]# ls -ld /tmp/
drwxrwxrwt. 3 root root 4096 5月 30 17:52 /tmp/
特殊权限位总结:
用户位上x位设置 chmod 4755 test.txt chmod u+s test.txt
用户组位x位设置 2755 g+s
其他用户x位设置 1755 o+t
[root@localhost ~]# locate ifconfig|head -1 一般不用
/sbin/ifconfig