文件系统各个列的含义

[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


第一列: inodeindex node 索引节点编号;它是文件或目录在磁盘里的唯一标识,linux读取文件首先要读取到这个索引节点

 

第二列:

1个字符,代表文件类型,-普通文件   d目录

2-10个字符,rw-r--r--  文件权限(r w x)读 执行  -代表没有

11个字符, . SELINUX相关

 

第三列: 文件的硬链接数,硬链接是文件的又一个入口

 

第四列: 文件对应的属主或者用户

 

第五列: 文件对应的属组或者用户组(团体)

 

第六列: 文件的大小

第七八九列: 文件被改动的时间

第十列: 文件和目录的名字



inodeblock详解

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

BlockInode知识点小节:

1)磁盘分区格式化为ext4文件系统后会生成一定数量的inodeblock

2inode是索引节点,作用是存放文件的属性信息以及作为文件的索引(指向文件的实体block

3ext3/ext4文件系统的block存放的是文件的实际内容

4inode是一块磁盘存储空间,C6C7非启动分区inode默认大小为256字节,C5128字节

5inode是一串数字,不同的文件对应的inode在文件系统里是唯一的

6inode相同的文件,互为硬链接文件

7)一个文件被创建后至少要占用一个inode和一个block

8block的大小一般有1K2K4K几种,其中引导分区等为1K,其他普通分区为4KC6

9)如果一个文件很大,可能占多个block

10)如果文件很小,至少占一个block,并且剩余空间不可以使用了,例如:block4K,存放的文件1K,剩余3K就浪费了。

11inodeblock数量和大小查看:

dumpe2fs /dev/sda3|egrep -i "Inode count|block count"

dumpe2fs /dev/sda3|egrep -i "Inode size|block size"

12mkfs.ext4 -b2048 -I256 /dev/sdb  指定生成的inode大小(没必要修改)

13)磁盘读取数据是按block为单位读取的

14)一个文件可能占用多个block,每读取一个block就会消耗一次磁盘I/O

15block太大,文件小就会浪费磁盘空间;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、硬链接文件就是文件的另一个入口,可以通过给文件设置硬链接文件,来防止重要文件被误删

6ln + 源文件目标文件  创建一个硬链接    目录不能用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_count1),进程调用

文件删除的条件:

i_link=0 and i_count=0

软链接

1)软链接类似于windows的快捷方式(可以通过readlink查看其指向)

2)软链接类似一个文本文件,里面存放的是源文件的路径,指向源文件实体

3)删除源文件,软链接依然在,但是无法访问指向的源文件内容了,失效一般是红色闪烁提示

4ln -s   源文件   软链接文件    创建一个软链接          目录能用ln来创建软链接

5)软链接和源文件是不同的文件,inode号不同

6rm 删除软链接

 

 

 

创建一个软链接:

[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


用户和用户组

UIDGID

用户的角色是通过UIDGID识别的

UID=user Identify        用户ID,相当于×××

GID=group Identify       ID,相当于家庭

用户的分类

用户分为3类:

1、超级用户:root  uid=0 gid=0uid0的用户为超级用户

2、虚拟用户:存在linux中,满足文件或者程序运行的需要而创建的。多数不能登录,不能使用 uid,gid=1-499

3、普通用户:uidgid == 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注释掉帐号

修改登录shellnologinuseradd -s /sbin/nologin users

passwd锁定密码,passwd –l users

usermod账户过期等方式来停掉帐号,待以后处理

 

groupdel

usermod

绝大部分参数和useradd一样

-L 冻结用户的密码  -U  取消冻结

查询用户相关信息的命令

 

idfinger已经不装了、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命令查看时间等的属性



正则表达式*****

什么是正则表达式?

正则表达式就是为处理大量的字符串而定义的一套规则和方法

通过定义的这些特殊符号的辅助,可以实现快速过滤,替换或输出需要的字符串。

正则表达式分类

1linux正则表达式(grepawksed

2PHP,JAVA,PERL,PYTHONPerl兼容的正则)

 

正则表达式注意事项

1 正则表达式和通配符*是有本质区别的

2 linux正则表达式一般以行为单位处理的

3 alias grep='grep --color=auto'别名设置颜色可以更准确的看到匹配结果

4 注意字符集,export LC_ALL=C

基础正则表达式

举例:

1^word   搜索以word开头的

2word$   搜索以word结尾的

3^$      表示空行

4.       代表任意一个字符

5\       转义符

6*       重复0个或多个前面的一个字符

7.*      匹配所有

8[abc]   匹配字符集合内的任意一个字符[a-z][0-9]

9[^abc]  匹配不包含^后的任意字符的内容

   中括号里的^为取反,注意和以...开头区分

10a\{n,m\}   重复前面nm次;前一个重复的字符,如果用egrep/(sed -r) 可以去掉斜线

     \{n,\}    重复至少n次;前一个重复的字符,如果用egrep/(sed -r) 可以去掉斜线

     \{n\}     重复n次,如果用egrep/(sed -r) 可以去掉斜线

     \{,m\}    重复最多m次,。。。。。。。。。。

 

注意:egrepgrep -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

 

扩展正则

扩展正则:EREegrepgrep -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的权限才能执行,

3root都可以执行

 

linux目录的读、写、执行权限说明:

r---表示具有浏览目录下面文件及子目录的权限,即ls dir(不能进到目录里,无法cd dir

    如果没有x权限,ls时可以看到文件名,但是无法看到里面文件的属性

w---表示具有增加、删除或修改目录内文件名的权限(需要x权限配合)

x---表示具有进入目录的权限,但是没有r权限无法列表,没有w无法新建和删除

文件权限体系(八进制权限)

r read      可读  4 

w write     可写  2

x execute   执行  1

-          没有  0

权限的修改

1chmod  [数字组合文件名

[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知识小结:针对命令和二进制程序的

1suid位的作用就是让普通用户在执行一条命令的时候,拥有这条命令对应的用户(属主)的权限

2)用户或属主对应的前三位权限的x位上如果有s就表示suid权限,当x位上没有x执行权限的时候suid就显示为大S

setgid

setgid知识总结:了解

1)与suid不同的是,sgid既可以针对文件也可以针对目录设置

2sgid是针对用户组权限位修改的

对于文件来说,sgid的功能如下:   

1sgid仅对二进制命令程序有效

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