您的位置:首页 > 运维架构 > Linux

Linux运维学习笔记之六:Linux中的文件类型、属性、正则表达式、权限体系

2017-07-30 13:36 786 查看

第十章 Linux中的文件类型

一、扩展名:

   windows利用文件扩展名来区分文件类型

   Linux中文件扩展名和文件类型没有关系

    为了容易区分和兼容用户使用windows的习惯,Linux中也会用扩展名来表示文件类型

二、常见文件扩展名:

    .tar、.tar.gz、.tgz、.zip、.tar.bz:表示压缩文件,创建命令一般是tar、gzip、zip等

    .sh:表示shell脚本,使用shell写成的。

    .pl:表示perl语言文件

    .py:表示python语言文件

    .html、.htm、.php、.jsp、.do:表示网页文件

    .conf:表示系统服务的配置文件

    .rpm:表示rpm安装包文件

三、运维开发语言:

shell/python/php三者之一(perl快被淘汰),至少一个,最好两个  

四、LINUX中的七种文件类型

    Linux中,一切皆文件。常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等

     七种文件类型

    d  目录文件。

    l  符号链接(指向另一个文件,类似于瘟下的快捷方式)。

    s  套接字文件。

    b  块设备文件,二进制文件。

    c  字符设备文件。

    p  命名管道文件。

    -  普通文件(3种),或更准确地说,不属于以上几种类型的文件

        纯文本文件(ASCII):内容可直接读取,字母,数字等。如配置文件等,Linux中绝大多数文件是纯文本文件。

       file a.txt

           ASCII text

        二进制文件(inary):Linux中的可执行文件,如命令文件等

       file /bin/cat

           ELF 64-bit LSB executable

        数据格式的文件(data):具有特定格式的

       file /var/log/wtmp

           data

   

     ls -l 的结果中的第一个字符表示文件类型

    ls-l

        -rw-r--r-- 1 root root  2 03-27 02:00   fonts.scale

        drwxr-xr-x 2 root root  4.0K 04-19 10:53 mydir

 

    ls-la /dev/hda1

        brw-r----- 1 root disk 3, 1 2006-04-19/dev/hda1

   

    ls-lh /var/lib/mysql/mysql.sock

        srwxrwxrwx 1 mysql mysql 0 04-19 11:12/var/lib/mysql/mysql.sock

        

    ls-lh setup.log

        lrwxrwxrwx 1 root root 11 04-19 11:18setup.log -> install.log

   

    find/var/spool -type p | xargs ls -l  

           prw--w--w-. 1 postfix postfix 0 Jan 2 17:08 pickup

           prw--w--w-. 1 postfix postfix 0 Jan 2 17:08 qmgr

               

    ln-s kernel-6.15-1.2025_FC5.i686.rpm kernel.rpm  #创建链接文件

    ls-lh kernel*

        -rw-r--r-- 1 root root 14M 03-16 07:53kernel-6.15-1.2025_FC5.i686.rpm

        lrwxrwxrwx 1 root root  33 04-19 11:27 kernel.rpm ->kernel-6.15-1.2025_FC5.i686.rpm

第十一章 Linux中的文件属性

一、查看文件属性

    ls-lhi

    inode 文件类型及权限硬链接数 属主  属组  文件/目录大小最后修改时间(月日时间)   文件名

    403848 -rw-------.   1      root root   2.5K       Jan 2  00:00   anaconda-ks.cfg

    403862drwxr-xr-x.    2      root  root    4.0K       Jan 1  16:03   Desktop

    403866drwxr-xr-x.    2      root  root    4.0K       Jan 1  16:03   Documents

    403863drwxr-xr-x.    2      root root    4.0K       Jan  1  16:03  Downloads

 

二、各属性说明

1、inode: 索引节点(index node)
(1)理解inode
     文件储存在硬盘上(硬盘格式化后分为inode和block两部分,inode存文件信息,block存文件数据),硬盘

    的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,

    不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。

    这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成

    一个 block。文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件

    的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

 

(2)inode的内容
    inode包含文件的元信息,具体来说有以下内容,但不包含文件名:

      * 文件的字节数

      * 文件拥有者的User ID

      * 文件的Group ID

      * 文件的读、写、执行权限

      * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,

atime指文件上一次打开的时间。

      * 链接数,即有多少文件名指向这个inode

      * 文件数据block的位置(指针,inode节点和block的对应关系)

   

(3)inode的特殊作用
    由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。

      1.有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。

      2.移动文件或重命名文件,只是改变文件名,不影响inode号码。

      3.打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无

法从inode号码得知文件名。

          第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode

号码,识别运行中的文件,

       不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等

到下一次运行这个软件的时候,

       文件名就自动指向新版文件,旧版文件的inode则被回收。

       

(4)查看系统inode的大小:
    dumpe2fs /dev/sda3 | grep -i "Inodesize"

    CentOS6's / inode size 256

    CentOS6's boot inode size 128

   

    CentOS5's / inode size 128

   

(5)查看到系统inode的总量和使用量
    df -i

   

(6)inode小结
      (a)磁盘分区格式化文件系统后,会分为inode和block两部分内容

      (b)inode存放文件的属性以及指向文件实体的指针,文件名不在inode里,一般在上级目录的了block里

      (c)访问文件的过程:文件名--->inode(判断权限等)--->blocks

      (d)inode一般情况默认大小256B,block大小1 2 4K,默认4K。引导分区等特殊分区一般为inode128B,Block 1K

      (e)通过df -i查看inode的数量及使用情况,dumpe2fs /dev/sda? 来查看分区的inode和block的大小和数量

      (f)一个文件至少要占用一个inode和一个block,多个文件可以占用同一个inode(硬链接)

      (g)一个block只能被一个文件使用,如果文件很小而block很大,剩余空间浪费,无法被其它文件使用

      (h)block不是越大越好,要根据业务的文件大小进行选择,一般默认为4K

      (i)可以在格式化磁盘时改变indoe和block的大小

          mkfs.ext4-b 2048 -l 2048 /dev/sdb1

          dumpe2fs/dev/sdb1 | grep "Block size"

          dumpe2fs/dev/sdb1 | grep "Inode size"

 

2、文件权限
 drwxr-xr-x.

    第一个字符代表文件(-)、目录(d),链接(l)

    其余字符每3个一组(rwx),读(r)、写(w)、执行(x)、无权限(-)

    第一组(第2、3、4位):  rwx,文件所有者的权限是读、写和执行

    第二组(第5、6、7位):  r-x,与文件所有者同一组的用户的权限是读、执行,但不能写

    第三组(第8、9、10位): r-x,不与文件所有者同组的其他用户的权限是读、执行,但不能写

    也可用数字表示为:r=4,w=2,x=1  因此rwx=4+2+1=7      

就是在权限的最后面有一个.(英文句号)这个符号,CentOS6中才有,CentOS5 没有。这个符号与SELinux 有关。关闭SELinux后再创建的文件就不会有这个符号了。

   

3、硬链接数
(1)硬链接介绍     
    硬链接是指通过索引节点(Inode)来进行链接,是文件的又一个入口,是已经存在的文件的一个别名,当原文件删除时,新建的文件仍然可以使用。inode信息中有一项叫做"硬链接数",记录指向该inode的文件名总数,删除一个文件名,就会使得inode节点中的"硬链接数"减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。

   目录文件的"硬链接数"。创建目录时,默认会生成两个目录项:"."和".."。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";

   后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录),

  这里的2是父目录对其的“硬链接”和当前目录下的".硬链接“。

 

(2)硬链接数小结
a、硬链接文件是具有相同inode节点号的不同文件

b、删除硬链接文件或删除源文件之一,文件实体并未被删除

c、只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除

d、当所有的硬链接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者在磁盘fsck检查的时候,数据也会被回收

e、硬链接文件是文件的又一个入口

f、通过执行命令ln 源文件 硬链接文件,即可完成创建硬链接文件

g、通过rm -f硬链接文件,来删除硬链接文件

h、可以通过给文件设置硬链接文件,来防止文件被误删除

i、目录不能创建硬链接,并且目录的硬链接不能跨越文件系统

j、向源文件中写入内容后后,它的软、硬链接同样都有相同的内容

 

(3)软硬链接的区别(面试题)
在Linux系统中,链接分为两种,一种是硬链接(HardLink),另一种是符号链接或软链接(SymbolicLink),两者区别如下:

a、默认不带参数的情况下,ln命令创建的是硬链接,带-s参数的ln命令创建的是软链接

b、硬链接文件与源文件的inode节点号相同,而软链接文件的inode节点号与源文件不同

c、ln命令不能对目录创建硬链接,但可以创建软链接,对目录的软链接会经常在生产系统是用到

d、删除软链接文件,对源文件及硬链接文件无任何影响

e、删除硬链接文件,对源文件及硬链接文件无任何影响

f、删除链接文件的源文件,对硬链接文件无任何影响,但会导致共软链接文件失效(红底白字闪烁)

g、很多硬件设备中的快照功能,使用的就是类似硬链接的原理

h、软链接可以跨文件系统,但硬链接不能跨越文件系统

4、用户(属主)和用户组(属组)
(1)概念:
Linux是一个真实的、完整的多用户多任务操作系统,多用户多任务就是可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行各自不同的任务,而互不影响。Linux中用户是分角色,通过UID和GID来识别。UID是一个系统用户账号的唯一标识,相当于身份证号。用户账号的名称(如test)是给人看的,Linux系统只是识别UID和GID。用户是能够获取系统资源的权限的集合。基于某种特定联系将多个用户集合在一起,即构成一个用户组,用于表示该组内所有用户的账号称为组账号。每一个用户账号至少属于一个组,这个组称为该用户的基本组(或私有组);如果该用户同时还包括在其他的组中,则这些组称为该用户的附加组(或公共组)。用户和组的对应关系为多对多,即某个用户可加入/属于一个或多个组,某个组可以有0个、1个或多个用户。

(2)查看用户信息
id kkk

uid=503(kkk)gid=503(kkk) groups=503(kkk)

(3)用户组的分类:
a、管理员(超级用户) root 
具有使用系统所有权限的用户,其UID 为0,GID也为0。root用户是linux系统中维一的,可以操作系统中任何文件和命令,拥有最高的管理权限。在生产环境卫生中,一般会禁止roo用户通过ssh远程连接服务器,用其它用户通过sudo提权。也会更改默认的ssh端口,以加强系统安全。在/etc/passwd中最后一列为/bin/bash
b、普通用户
即一般用户,其使用系统的权限受限,其UID为500-60000之间。这类用户一般是具备系统管理员root的权限的人员添加的,可能登录系统,但仅具备操作自已的home 目录中的文件及目录权限. 在/etc/passwd中最后一列为/bin/bash
c、系统用户(虚拟用户)
保障系统运行的用户,一般不提供密码登录系统,其UID为1-499之间.主要是方便系统管理,满足相应系统进程对文件属主的要求,服务的运行时需要用户角色,但可以不登陆。由于服务器业务角色不同,有部分用不到的系统服务被禁止开机执行,因此可在系统安全优化时将其对应的虚拟用户删除或注释掉。在/etc/passwd中最后一列为/sbin/nologin。
示例:创建mysql虚拟用户
groupadd mysql –g 49
useradd mysql –u 49 –g 49 –s/sbin/nologin -M
tail –l /etc/passwd
id mysql
uid=49(mysql) gid=49(mysql)groups=49(mysql)
     su – mysql
报错,不让访问:su: warning: cannot change directory to /home/mysql: No such file ordirectory。This account iscurrently not available.
(4)用户配置文件: /etc/passwd
/etc/passwd文件中的每一行都代表一个帐号,有几行就代表有几个帐号在你的系统中,每条记录由7个字段组成,字段间用冒号“:”隔开

a、格式:
用户名  用户密码  UID  用户GID  用户说明 用户家目录  shell解释器
root      :x     :0   :0        :root     :/root   :/bin/bash
b、字段说明:
1.username 用户名:它唯一地标识了一个用户帐号,用户在登录时使用的就是它。
2.password 该帐号的口令:早期的 Unix 系统的密码是放在这个档案中的, 但是因为这个档案的特性是所有的程序都能够读取,所以,这样一来很容易造成资料的被窃取,因此后来就将这个栏位的密码资料给他改放到 /etc/shadow 中了
ls –l /etc/passwd
-rw-r--r-- 1 root root 1922 Jan14 12:49 /etc/passwd
ls -l /etc/shadow
---------- 1 root root 1123 Jan14 12:49 /etc/shadow
3.User ID 用户识别码,简称UID。Linux系统内部使用UID来标识用户,而不是用户名。UID是一个整数,用户的UID互不相同。 0是系统管理员账号,1-499是系统保留账号,500+即一般账号
4.Group ID 用户组识别码,简称GID。不同的用户可以属于同一个用户组,享有该用户组共有的权限。与UID类似,GID唯一地标识了一个用户组。用usermod -g 设置
5.comment 这是给用户帐号做的注解它一般是用户真实姓名、电话号码、住址等,当然也可以是空的。
6.home directory 主目录这个目录属于该帐号,当用户登录后,它就会被置于此目录中,就像回到家一样。一般来说,root帐号的主目录是/root,其他帐号的家目录都在/home目录下,并且和用户名同名。 用usermod-d 设置
7.login command 用户登录后执行的命令。一般来说,这个命令将启动一个shell程序。例如,用bbs帐号登录后,会直接进入bbs系统,这是因为bbs帐号的login command指向的是bbs程序,等系统登录到bbs时就自动运行这些命令。
(5)用户密码文件: /etc/shadow
linux系统用户密码存放文件,而且还加入很多的密码限制参数在 /etc/shadow 里头,以‘:’作为分隔符号,共有九个栏位
a、格式:
用户名 用户密码  最近变动日期  不可更动天数 重新变更天数员  警告期限  恕限时间 失效日期  保留

root:$6$Nr...  :17167        :0           
:99999         :7       :       
:       :

b、字段说明:
1. 帐号名称:必须要与 /etc/passwd 相同才行
2. 密码:这个才是真正的密码,而且是 经过编码过的密码, 如果是在密码栏的第一个字元为‘ * ’或者是‘ ! ’,表示这个帐号并不会被用来登入的意思。
3. 最近更动密码的日期:这个栏位记录了‘更动密码的那一天’的日期,计算 Linux 日期的时间是以 1970 年 1 月 1 日作为 1 ,而 1971 年 1 月 1 日则为 366 。
4. 密码不可被更动的天数: 第四个栏位记录了这个帐号的密码需要经过几天才可以被变更!如果是 0 的话, 表示密码随时可以更动的意思。这的限制是为了怕密码被某些人一改再改而设计的!如果设定为 20 天的话,那么当你设定了密码之后,20 天之内都无法改变这个密码。
5. 密码需要重新变更的天数:必须要在这个时间之内重新设定你的密码,否则这个帐号将会暂时失效。 而如果像上面的 99999 的话,那就表示,呵呵,密码不需要重新输入。
6. 密码需要变更期限前的警告期限:当帐号的密码失效期限快要到的时候, 就是上面那个‘必须变更密码’的那个时间时,系统会依据这个栏位的设定,发出‘警告’言论给这个帐号,提醒他‘再过 n 天你的密码就要失效了,请尽快重新设定你的密码呦!’,如上面的例子,则是密码到期之前的 7 天之内,系统会警告该用户。
7. 密码过期的恕限时间:当密码失效后,你还可以用这个密码在 n 天内进行登入。 而如果在这个天数后还是没有变更密码,那么您的帐号就失效无法登入。
8. 帐号失效日期:这个日期跟第三个栏位一样,都是使用 1970 年以来的总日数设定。这个栏位表示: 这个帐号在此栏位规定的日期之后,将无法再使用。
9. 保留:最后一个栏位是保留的,看以后有没有新功能加入。
(6)用户密码文件: /etc/ group
a、格式:
组名:口令:组标识号:组内用户列表

b、字段说明:
1)“组名”是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。
2)“口令”字段存放的是用户组加密后的口令字。一般Linux系统的用户组都没有口令,即这个字段一般为空,或者是*。
3)“组标识号”与用户标识号类似,也是一个整数,被系统内部用来标识组。
4)“组内用户列表”是属于这个组的所有用户的列表/b],不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。
(7)用户密码文件: /etc/gshadow
a、格式:
用户组  : 用户组密码   : 用户组管理者1, 用户组管理者2,...  : 组成员1, 组成员2,...

b、字段说明:
第一字段:用户组
第二字段:用户组密码,这个段可以是空的或!,如果是空的或有!,表示没有密码;
第三字段:用户组管理者,这个字段也可为空,如果有多个用户组管理者,用,号分割;
第四字段:组成员,如果有多个成员,用,号分割;
5、文件时间戳
(1)linux系统是的文件有3种时间
mtime: 最后修改时间(ls -lt)(默认)

ctime: 状态改变时间(ls -lc)

atime: 最后访问时间(ls -lu)

 

stat install.log

    Access: 2017-01-0123:32:26.238999717 +0800  #访问时间

    Modify: 2017-01-0200:00:41.324999404 +0800  #修改时间

    Change: 2017-01-0200:01:11.062999379 +0800  #改变时间

ls –l install.log

   默认显示的是Modify时间

(2)文件3种时间变化
a、创建一个新文件时,Access、Modify、Change的值是一样的

b、读取文件时,Access变、Modify、Change不变

c、文件内容改变后,Access不变、Modify、Change变且一样

d、改变文件状态后,Access不变、Modify不变、Change变。如chmod

e、文件已存在,touch文件时, Access变、Modify变、Change变

f、touch –a 文件时,Access变、Modify不变、Change变

g、touch –m 文件时,Access不变、Modify变、Change变

h、touch –c 文件时,Access变、Modify变、Change变

(3)ls -l命令显示完整时间
ll --time-style=long-iso install.log

-rw-r--r--. 1 root root 62057 2017-01-14 14:32install.log

6、文件名
(1)文件的文件名不在inode中,而是在上级目录的block中。
一个目录下可放多少文件,与文件名的长度大小有关。

(2)Linux查找文件的过程
以查找/tmp/aaa.txt文件为例:

a、查找根目录/的inode及其属性信息

b、通过根目录的inode对应的block中找到记录tmp目录对应的inode

c、查找/tmp目录的inode及根目录/的属性信息

d、通过/tmp目录的inode对应的block中找到aaa.txt文件对应的inode

e、通过aaa.txt文件的inode找到对应的block

f、打开对应的block,读取内容

第十二章 正则表达式

一、概念

正则表达式就是一套处理字符串的规则和方法,以行为单位对字符串进行处理,通过特殊的符号的辅助,可以快速的过滤、替换某些特定的字符串。实际上就是一些特殊字符,赋予了特定的含义。

运维工作中,会有大量访问日志、错误日志、大数据。如何能够快速的过滤出需要的内容,就需要正则表达式。

awk、sed、grep(egrep)三剑客想要工作的更高效,那一定离不开正则表达式。想学好三剑客,首先就要掌握正则表达式。

Linux中正则表式主要是awk、sed、grep(egrep)三剑客的正则表达式。

二、语法符号含义

1、测试用例如下(oldboy.log):
I am oldboylinux teacher.

I like chinesechess,  table tennis.

My blog isthhp://oldboy.blog.51cto.com

my qq is49000448

my god, my nameis not oldbey, but OLDBOY

4900000448

49448

is not boog

2、^ :表示以....开头
(1)^abc :以abc开头
(2)查找以I开头的行
grep"^I" oldboy.log

I am oldboy linux teacher.

I like chinese chess,  table tennis.

(3)查找以M开头的行
grep --color=auto  "^M" oldboy.log

My blog is thhp://oldboy.blog.51cto.com

(4)查找以M开头的行,并且不区分大小写
grep --color=auto -i "^M"oldboy.log

My blog is thhp://oldboy.blog.51cto.com

my qq is 49000448

my god, my name is not oldbey, but OLDBOY

3、$ :表示以....结尾
(1)abc$ :以abc结尾
(2)查找以M开头的行
grep "m$" oldboy.log

My blog is thhp://oldboy.blog.51cto.com

4、^$ :表示空行
 grep -v ^# /etc/ssh/sshd_config       #过滤文件/etc/ssh/sshd_config中所有的注释

 grep -Ev "^#|^$"/etc/ssh/sshd_config #过滤文件/etc/ssh/sshd_config中所有的注释和空行

5、. :匹配任意单字符
grep "bl.g" oldboy.log

My blog is thhp://oldboy.blog.51cto.com  #此时.代表o

6、\ :转义字符,将特殊字符转义为普通字符
grep "\." oldboy.log

I am oldboy linux teacher.

I like chinese chess,  table tennis.

My blog is thhp://oldboy.blog.51cto.com

7、* :表示重复0个或多个前面的一个字符
grep "490*448" oldboy.log

my qq is 49000448

4900000448

49448

8、.* :匹配所有字符。^.* :以任意字符开头
9、[]:匹配方括号中定义的字符集中任意一个字符。
grep "b[lo]og" oldboy.log   

My blog is thhp://oldboy.blog.51cto.com  #匹配[]中的l:blog

is not boog      #匹配[]中的o:boog

 

10、[^word]:匹配不包含^后面的任意字符的内容。^在[]中是非的意思,相当于find命令中的!
grep "[^oldboy]" /wddg/log/oldboy.log

I am oldboy linux teacher.

I like chinese chess,  table tennis.

My blog is thhp://oldboy.blog.51cto.com

my qq is 49000448

my god, my name is not oldbey, but OLDBOY

4900000448

49448

is not boog

由于alias grep=grep--color=auto,所以上面的命令将所有非oldboy这6个字母的字符全部匹配上(显示为红色),而oldboy这6个字母为非选中状态(显示为白色)

11、{n,m}:重复{}前面的一个字符至少n次,至多m次
(1){n,m} :重复{}前面的一个字符至少n次,至多m次
grep "490\{2,3\}448" oldboy.log   #重复490的0这个数字最少2次,最多3次

my qq is 49000448

grep "490\{2,10\}448" oldboy.log   #重复490的0这个数字最少2次,最多10次

my qq is 49000448

4900000448

(2){,m} :重复{}前面的一个字符至多m次
grep "490\{,5\}448" oldboy.log   #重复490的0这个数字最多5次,可以是0次,也就是没有0

my qq is 49000448

490000

(3){n,} :重复{}前面的一个字符至少n次
grep "490\{2,\}448" oldboy.log   #重复490的0这个数字最少2次,可以是无限次

my qq is 49

(4){n} :重复{}前面的一个字符n次({}必须用\来转义,便用-E或egrep则不需要转义)
grep "490\{2\}448" oldboy.log   #重复490的0这个数字2次

grep "490\{3\}448" oldboy.log   #重复490的0这个数字3次

my qq is 49000448

grep -E "490{5}448" oldboy.log  #不需要转义

4900000448

grep "490\{5\}448" oldboy.log   #重复490的0这个数字5次

4900000448

grep "490\{0\}448" oldboy.log   #重复490的0这个数字0次

49448

12、+ :重复一个或一个以上前面的字符(扩展的正则表达式,必须用egrep或grep -E)
grep -E "490+448" oldboy.log

my qq is 49000448

4900000448

13、? :重复0个或一个前面的字符(扩展的正则表达式,必须用egrep或grep -E)
grep -E "490?448" oldboy.log

49448

14、|:用或的方式查找多个符合的字符串(扩展的正则表达式,必须用egrep或grep -E)
grep -E "3306|1521" /etc/services

mysql           3306/tcp                        # MySQL

mysql           3306/udp                        # MySQL

15、():将正则表达式的一部分括起来组成一个单元(用户组),可以对整个单元进行匹配(扩展的正则表达式)
grep -E "b(lo|oo)g" oldboy.log

My blog is thhp://oldboy.blog.51cto.com

is not boog

三、正则表达式过滤口决:

过滤以。。。开头用^.*来匹配。过滤...结尾用.*$来匹配。

 

第十三章 Linux文件权限体系

一、改变权限属性命令chmod

1、数字权限方法
chmod 644 oldboy.txt

chmod 575 test.txt

chmod –R 755 oldboy/

2、字符权限方法
ls -l a.sh

---x-wxrw-. 1 rootroot 0 Jan 19 09:20 a.sh

 

chmod u+x a.sh

ls -l a.sh   

---x-wxrw-. 1 rootroot 0 Jan 19 09:20 a.sh

 

chmod g=wx a.sh

ls -l a.sh    

---x-wxrw-. 1 rootroot 0 Jan 19 09:20 a.sh

chmod u=wx a.sh

ls -l a.sh    

--wx-wxrw-. 1 rootroot 0 Jan 19 09:20 a.sh

chmod u=x,g=rw,o=w a.sh

ls -l a.sh

---xrw--w-. 1 rootroot 0 Jan 19 09:20 a.sh

chmod a-x a.sh

ls -l a.sh   

----rw--w-. 1 root root 0 Jan 19 09:20 a.sh

二、改变文件属主和属组命令chown

格式:
chown [选项]...[属主][:[组]] 文件...

仅仅授权用户格式

chown 用户 文件或目录

仅授权组格式

chown :组 文件或目录 (等同于chgrp 组 文件或目录)

授权用户和组格式

chown 用户:组 文件或目录(其中冒号:也可以用点.替代。要授权的用户和组名必须存在)

 

示例:
chown oldboy a.sh

chown oldboy.oldboy a.sh  或 chown oldboy:oldboy a.sh等价于 chgrp oldboy a.sh

chown .oldboy a.sh   或 chown :oldboy a.sh

对整个目录下所有文件进行chown

chown -R oldboy:oldboy wddg/

模拟演示
(1)一个用户组(incahome),成员member1和member2
groupadd incahome

useradd member1 -g incahome

useradd member2 -g incahome

useradd test

id member1

uid=503(member1) gid=503(incahome) groups=503(incahome)

id member2

uid=504(member2) gid=503(incahome) groups=503(incahome)

(2)创建测试文件
touch abc.sh

echo "echo hello linux" > abc.sh

(3)改变文件abc.txt的属主(member1)和属组(incahome)
chown member1.incahome abc.sh

chmod 755 abc.sh

ls -l

-rwxr-xr-x. 1 member1 incahome 0 Jan 19 14:27 abc.sh

(4)测试:
member1:

cat abc.sh  #正常

vi abc.sh   #正常编辑保存

./abc.sh    #通过tab可以补全,表示有权限,可执行

member2:

cat abc.sh  #正常

vi abc.sh   #编辑时提示只读,加w!强制保存也不行

./abc.sh    #通过tab可以补全,表示有权限,可执行

test:

cat abc.sh  #正常

vi abc.sh   #编辑时提示只读,加w!强制保存也不行

./abc.sh    #通过tab可以补全,表示有权限,可执行

(5)再次改变文件abc.sh的权限为561(r-xrw---x)
chmod 561 abc.sh

ll

-r-xrw---x. 1 member1 incahome  0 Jan 20 14:52 abc.sh

(6)再测试:
member1:

cat abc.sh  #正常

vi abc.sh   #编辑时提示只读,加!可强制保存,说明文件的拥有者权限比较特殊,可以超越指定权限

./abc.sh    #通过tab可以补全,表示有权限,可执行

rm -f abc.sh #报错,提示Permission denied.

member2:

cat abc.sh  #正常

vi abc.sh   #编辑时提示只读,加w!强制保存也不行

./abc.sh    #通过tab无法补全,表示无权限,不能执行

rm -f abc.sh #报错,提示Permission denied.

test:

cat abc.sh  #报错(Permission denied)

vi abc.sh   #编辑时提示Permission denied,加w!强制保存也不行,只能q!强制退出

./abc.sh    #通过tab可以补全,表示有权限,可执行,便执行报Permissiondenied。

rm -f abc.sh #报错,提示Permission denied.

(7)删除文件测试:
ls -l

rwxr-xr-x. 2 root root 4096 Jan 20 14:52 oldboy

chown member1 oldboy/

drwxr-xr-x. 2 member1 root 4096 Jan 20 14:52 oldboy

rm -f abc.sh #删除成功

touch oldboy/abc.sh

chmod 444 abc.sh

ls -l abc.sh

-r--r--r--. 1 root root   0Jan 20 15:49 abc.sh

ll -ld ../oldboy/

drwxr-xr-x. 2 member1 root 4096 Jan 20 15:49 ../oldboy/

chown root.incahome ../oldboy/

chmod 775 ../oldboy/

ll -ld ../oldboy/

drwxrwxr-x. 2 root incahome 4096 Jan 20 15:49 ../oldboy/

test用户:

rm -f abc.sh #报错,提示Permission denied.

member2用户:

rm -f abc.sh #删除成功

(8)结论:
对文件:

a、root用户拥有最高权限,等同于文件所有者,也可对没有权限的文件进行修改。

b、文件所有者权限比较特殊,可以超越指定权限,强制对文件进行修改

c、同组用户和其它用户严格遵守指定权限

d、 如果同组用户和其它用户只有可执行权限,没有只读权限,则可通过tab可以补全,但执行报Permission

denied。说明只有可执行权限,没有可读权限,实际上是不能执行的,必须要有读权限。

e、可读r:表示具有读取文件内容的权限

可写w:表示具有新增、修改文件内容的权限,不能删除文件和修改文件名

可执行x:表示具有执行文件的权限,文件本身要能够执行,普通用户还同时要具备r的权限(root不需要)。

f、由于文件的权限在inode中,但文件名确在该文件的上级目录的block中,所以删除文件或修改文件名

时,此时的操作用户要有该文件的上级目录的写权限。跟文件本身的权限没有任何关系。

对目录:

a、x权限表示可以进入目录(cd 目录名),不能列表,创建、删除文件

b、r权限表示可以对目录的内容列表,即ls 目录,但不能cd 目录名进入目录。如查没有x权限,ls列表时会报错。ls –l目录名会出现乱码。

c、w权限表示可以对目录内文件名进行修改、增加、删除,但需要x权限配合。如果没有x权限,则不能进行操作。

(9)Linux文件与目录权限对比说明:
a、r(read,读取权限):

对文件:表示具有读取阅读文件内容的权限

对目录:表示具有浏览目录内容的权限(不是进入目录),需要x 权限配合

b、w(write,写入权限):

对文件:表示具有新增、修改文件内容的权限(删除和移动文件和文件本身属性无关,看上级目录的权限)

对目录:表示具有新增、删除、移动目录内文件的权限,需要x 权限配合

c、x(Execute,执行权限):

对文件:表示具有执行文件的权限(普通用户同时还需要r的权限,root用户不需要r权限也能执行)

对目录:表示具有进入目录的权限

d、-(无任何权限)

三、默认权限分配命令umask

默认情况下,创建目录的权限是755,创建文件的权限是否644。这是在Linux生产系统中相对安全的权限

(要求是root用户和root组的目录和文件)。这个权限只能浏览查看,但禁止创建、修改和删除。Linux系统中文件的默认权限由umask值来决定。

1、 什么是umask?
 当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中设置umask值。

  你的系统管理员必须要为你设置一个合理的 umask值,以确保你创建的文件具有所希望的缺省权限,防止其他非同组用户对你的文件具有写权限。在已经登录之后,可以按照个人的偏好使用umask命 令来改变文件创建的缺省权限。相应的改变直到退出该shell或使用另外的umask命令之前一直有效。一般来说,umask命令是在/etc /profile文件中设置的,每个用户在登录时都会引用这个文件,所以如果希望改变所有用户的umask,可以在该文件中加入相应的条目。如果希望永久 性地设置自己的umask值,那么就把它放在自己$HOME目录下的.profile或.bash_profile文件中。

2、查看系统默认umask值(CentOS6.5)
root用户:

umask

0022

普通用户:

umask

0002

3、计算umask
(1)说明:
创建目录时,目录起始权限默认是最大权限777,创建文件时,文件起始权限默认是最大权限666。然后根

据umask值进行掩码计算,得到创建目录或文件的最终权限。

Linux中用户home目录的umask值在/etc/login.defs文件中,并定义umask值为077,保证用户的

home目录权限为700

(2)计算方法(加减法)
a、umask值所有位均为偶数时,用目录或文件的起始权限直接减umask的值

假设umask值为022

则创建的目录权限为777 - 022 = 755

创建的文件权限为666 – 022 = 644

b、umask值位上有奇数时,目录无影响,用目录起始权限直接减umask的值,文件在起始权限直接减umask的值后,结果要在相应奇数位上加1

假设umask值为045

则创建的目录权限为777 - 045 = 732(无影响)

创建的文件权限为666 – 045 = 621 + 001 = 622

假设umask值为111

则创建的目录权限为777 - 333 = 444(无影响)

创建的文件权限为666 – 333 = 333 + 111 = 444

(3)示例:
umask 333

umask

0333

mkdir a1

ll -d a1/

dr--r--r-- 2 root root 4096 Jan 21 07:41 a1/

touch b1

ll b1

-r--r--r-- 1 root root    0Jan 21 07:41 b1

四、Linux特殊权限

1、什么是SUID
SUID 是 SetUser ID的意思

文件的权限显示:

11 10 9 8 7 6 5 4 3 2 1 0 

S G T r w x r w x r w x

第8-6位、5-3位、2-0位分别表示文件所有者的权限,同组用户的权限,其他用户的权限,其形式为rwx:

r表示可读,可以读出文件的内容

w表示可写,可以修改文件的内容

x表示可执行,可运行这个程序

如果一个文件被设置了SUID位,会分别表现在所有者或同组用户的权限的可执行位上。例如:

(1)rwsr-xr-x 表示SUID和所有者权限中可执行位被设置

(2)rwSr--r-- 表示SUID被设置,但所有者权限中可执行位没有被设置

给文件加SUID和SUID的命令如下:

chmod u+s filename 设置SUID位,数字方式下用户以4开头(4755),组以2开头(2755)

chmod u-s filename 去掉SUID设置

2、SUID的作用
Linux内核主要是根据euid来确定进程对资源的访问权限。一个进程如果没有SUID位,则euid=uid分别是运行这个程序的用户的uid。例如kevin用户的uid为204,foo用户的uid 200,kevin运行foo用户的my.exe(假定kevin也有x权限)程序形成的进程的euid=uid=204内核根据这些值来判断进程对资源访问的限制,其实就是kevin用户对资源访问的权限,和foo没关系。 

如果一个程序设置了SUID,则euid变成被运行的程序的所有者的uid,例如kevin用户运行myfile,euid=200,uid=204,则这个进程具有它的属主foo的资源访问权限。

SUID的作用就是这样:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源,获得程序属主的资源访问权限。

3、SUID和SGID的设置
(1)suid位的设置用八进制的4000,sgid则占用的是八进制的2000,同时设置则为6000(4000+2000)
(2)数字方式下用户以4开头(4755),组以2开头(2755)
(3)字符方式下用户是u+s,组用g+s;删除权限用户是u-s,组是g-s
4、SUID示例:
(1)要求普通用户wddg使用rm命令来删除没有删除权限的文件test.sh
ll

drwxr-xr-x 2 root root 4096 Jan 21 11:23 test    #wddg用户对test目录没有删除权限

ll test/

-r--r--r-- 1 root root 17 Jan 21 11:24 test.sh  #wddg用户对test.sh没有操作权限

(2)方法一:将rm命令加到sudo中去
root用户下:

visudo

在98行(gg98定位): wddg  ALL=(ALL) NOPASSWD:/bin/rm

wddg用户下:

sudo rm –f test.sh  #删除成功

(3)方法二:设置suid
root用户下:

chmod u+s test.sh

ls –l test/

-r-Sr--r-- 1 root root 17 Jan 21 11:24 test.sh #test.sh属主上没有x权限,所以显示为S

wddg用户下:

rm –f test.sh  #删除不成功,文件没有被删除

root用户下:

which rm

/bin/rm

chmod u+s /bin/rm

ls -l /bin/rm

-rwsr-xr-x. 1 root root 58960 Nov 22 2013 /bin/rm

wddg用户下:

rm –f test.sh  #删除成功

(4)查找有特殊权限的命令
find /bin -type f -perm 4755 -exec ls -l {} \;

-rwsr-xr-x. 1 root root 49796 Jan 9  2013 /bin/umount

-rwsr-xr-x. 1 root root 74764 Jan 9  2013 /bin/mount

-rwsr-xr-x. 1 root root 30092 Apr 17 2012 /bin/su

-rwsr-xr-x. 1 root root 32016 Mar 22 2011 /bin/ping6

-rwsr-xr-x. 1 root root 36892 Mar 22 2011 /bin/ping

5、SUID和SGID小结:
suid:
(1)如果在属主权限位上的x位上有s,就表示suid,且有执行权限。当x位上没有可执行权限x时,suid用S(大写)表示

(2)setuid位是让普通用户可以以root用户的角色来运行只有root用户才能运行的程序和命令,或程序命令对应本来没有权限操作的文件等。

(3)suid修改的是要执行的命令,而不是要处理的目标文件

(4)suid只对二进制程序有效,不能用在shell等类似脚本文件上(因为shell脚本公公是调用二进制命令程序而已,具体权限还需要二进制命令本身)。

(5)二进制命令程序需要有可执行权限x

(6)suid权限公在程序执行过程中有效

(7)执行命令的任意系统用户都可以获得该命令程序在执行期间对应的拥有者的所有权限

(8)suid是双刃剑,是一个比较危险的功能,对系统安全有一定的威胁。应对系统suid的无用功能进行取消(安全优化).

sgid:
(1)sgid只对二进制程序有效,

(2)二进制命令程序需要有可执行权限x

(3)执行命令的任意系统用户都可以获得该命令程序在执行期间对应的所属组的权限

(4)与suid不同,sgid既可针对文件,也可针对目录设置

(5)suid的优先级高于sgid,当一个可执行程序设置了suid,则sgid会自动变成相应的egid

说明:
针对suid和sgid,在工作中尽量不用,多用sudo进行管理

6、粘贴(滞)位sticky
(1)、什么是sticky
粘贴位是Linux/Unix文件系统权限的一个权限位,是在指定目录上设置的一个特殊权限,只能也只能针对目录设置,对目录有效。

(2)、sticky的作用
如果一个目录没有设置粘贴位,则具有该目录写和执行权限的用户都可以删除和移动其中的文件,设置粘贴位后,只有目录内文件的所有者或root才能删除和移动该文件。在实际应用中,一般在/tmp和/var/tmp目录上设置了粘贴位,以防止普通用户删除和移动其它用户的文件。

设置了粘贴位权限的目录,显示的权限中,在其它用户权限的x位将变为t。如查该目录上其它用户没有x权限,则显示为T

ll -d /tmp/

drwxrwxrwt. 9 root root 4096 Jan 22 12:58 /tmp/

ll -d /var/tmp/

drwxrwxrwt. 2 root root 4096 Jan 19 14:40 /var/tmp/

 

(3)、sticky的设置
(1)sticky位的设置用八进制的1000

(2)字符方式下用户是o+t,删除是o-t

(3)同时设置suid、sgid、sticky用7000

(4)sticky示例
chmod o+t test/

chmod o-t test/

chmod 1775 test/

chmod 7755 test/

(5)sticky小结
tmp是经典的粘滞位目录,物点是所有用户都有写权限,因此安全成问题。常常是木马的第一手跳板目录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: