[Linux文件管理之(高级)、⽂件查找、文件权限]

[Linux文件管理之(高级)、⽂件查找]

⽂件管理之:⽂件查找

⼀、查看命令所属⽂件(which命令

which命令  后面跟命令名即可查看命令所属位置

[root@localhost ~]# which ip         
/usr/sbin/ip
# ps: ⼀些命令的路径都被配置到了环境变量PATH⾥
 echo $PATH

二、根据文件属性查找文件(find命令)

	共用参数:
		-a : 并且    			# 必须满足两个的文件
		-o : 或者                          #   ↓  就是或者的意思 满足任意一个即可查到
		[root@python test]# find ./ -size -30M -o -size +50M
        ./
        ./txt
        ./txt2
   ------------------------------------------------------
   总用量 122880
-r--r-----. 1 user1 user1 20971520 6月  17 06:32 txt     # 用户属主为user1 属组为user1
-rw-r--r--. 1 root  root  41943040 6月  17 06:32 txt2
-rw-r--r--. 1 root  root  62914560 6月  17 06:32 txt3
[root@afei test]# find /root/ -size +10M     # 正常查询文件大小超过10M的有以下6个
/root/test/txt
/root/test/txt2
/root/test/txt3
/root/a/b/c/txt
/root/a/b/c/txt2
/root/a/b/c/txt3
# 按照文件大小以及属主来查询
[root@afei test]# find /root/ -size +10M -user user1    # 按照属主来查询就一个(见上面)
/root/test/txt  (结果有1个)

# 按照文件大小以及属组来查询
[root@afei test]# find /root/ -size +10M -group user1   # 按照属组来查询也就一个(见上面)
/root/test/txt  (结果有1个)

# 按照文件大小以及所属类型查找
[root@afei test]# find /root/ -size +10M -type f
/root/test/txt
/root/test/txt2
/root/test/txt3
/root/a/b/c/txt
/root/a/b/c/txt2
/root/a/b/c/txt3  (结果有6个)

# 也可以一起使用 文件大小 所属类型 以及所属用户 以及属组....
[root@afei test]# find /root/ -size +10M -type f -user user1
/root/test/txt                文件大小     文件类型  文件所属用户

1、按文件名查找

[root@localhost ~]# find /etc -name "ifcfg-eth0"
[root@localhost ~]# find /etc -iname "ifcfg-eth0" # -i忽略⼤⼩写
[root@localhost ~]# find /etc -iname "ifcfg-eth*"

2、按⽂件⼤⼩

find [查询的路径] -size [大小]

[root@localhost ~]# find /etc -size +3M # ⼤于3M
[root@localhost ~]# find /etc -size 3M
[root@localhost ~]# find /etc -size -3M
[root@localhost ~]# find /etc -size +3M -ls # -ls找到的处理动作

3、指定查找的⽬录深度:

-maxdepth levels		 #  ↓文件层级 5 
[root@localhost ~]# find / -maxdepth 5 -a -name "ifcfg-eth0" 

# -a并且,-o或者,不加- a,默认就是-a

4、按时间找(atime,mtime,ctime):

[root@localhost ~]# find /etc -mtime +3 # 修改时间超过3天 
[root@localhost ~]# find /etc -mtime 3 # 修改时间等于3天 
[root@localhost ~]# find /etc -mtime -3 # 修改时间3天以内
	-ctime : 按照创建时间查询
	-mtime : 按照修改时间查询
	-atime : 按照访问的时间查询

5、设置查询最高的目录层级(目录层级参数必须放在第一位  -maxdepth

	# find [文件路径]  -maxdepth 指定层级 -a -size 文件大小
	查找从指定文件路径开始计算层级  -a是并且   -size文件大小 后面跟指定文件大小
	不写默认就是-a 并且的意思
	还有-o 是或者的意思 用得话	得指定
	
	[root@python ~]# find /root/  -maxdepth 3 -a  -size +40M
        /root/txt2
        [root@python ~]# find /root/  -maxdepth 6 -a  -size +40M
        /root/txt2
        /root/a/b/c/txt2

6、按照文件类型来查询

# 按照目录查询
		[root@python ~]# find /root/ -type d
		# 按照普通文件来查询
		[root@python ~]# find /root/ -type f
		# 查看设备文件
		[root@python dev]# find /dev/ -type c
        
-----------------------------------------------------------------------------
[root@localhost ~]# find /dev -type f     # f普通
[root@localhost ~]# find /dev -type d     # d⽬录
[root@localhost ~]# find /dev -type l     # l链接
[root@localhost ~]# find /dev -type b     # b块设备
[root@localhost ~]# find /dev -type c     # c字符设备
[root@localhost ~]# find /dev -type s     # s套接字
[root@localhost ~]# find /dev -type p     # p管道⽂件

7、按照权限来查询

# 解释一波: 

# 	    rw-r--r--
#        6  4  4
#        
#        6 所属用户  
#        4 所属用户组  
#        4 其他用户
#        
#        r(4)	: 只读
#        w(2)	:只写
#        x(1)	:执行
#  
#  我们可以指定给用户组里的一个用户给他设置权限  比如只给他读权限 例如 6 4 0
# 	-rw--r-----. 1 root user1 20971520 6月  16 17:33 txt
# 	 6   4  0     给user1这个用户组 设置txt文件为只读权限   
#  而其他用户没有任何权限、那么只要是属于这个用户组的就可以读取这个文件  但不能进行其他操作
# 
#  亦或者 不给某个用户组任何权限 其他用户权限正常   例如 6 0 4 
# 	-rw-----r--. 1 root user1 20971520 6月  16 17:33 txt
# 	 6   0  4     不给user1这个用户组任何权限 其他用户设置txt文件为只读权限
#  只要是这个用户组的、就没有任何权限  而其他用户是可读权限
#
#
#        [root@python ~]# useradd user1
#        [root@python ~]# useradd user2
#        [root@python ~]# useradd user3
#
#       
#
#        chmod : 修改文件权限
#            chmod 755 [文件路径]
#        chown : 修改所属用户及用户组
#            chown 用户.用户组 [文件路径]
#	
#	
#     4  4   0
#    -r--r-----. 1 test user1 20971520 6月  16 17:33 txt
#    -rw-r--r--. 1 root root  41943040 6月  16 17:33 txt1
#    -rwxr-xr-x. 1 root root  62914560 6月  16 17:33 txt2
#    [root@python test]# find ./  -perm 440     # 权限为440  
#    ./txt
#    [root@python test]# find ./  -perm 644
#    ./txt1
#    ./txt2
#    
#    

chmod : 修改文件权限

chmod 755 [文件路径]

chown : 修改所属用户及用户组

chown 用户.用户组 [文件路径]

8、处理查询结果

#		# 直接跟命令  -跟ls是查看文件详情 
#		[root@python test]# find ./  -perm 755 -ls
#        202362858    0 drwxr-xr-x   2 root     root           41 6月 16 17:59 ./
#        134514204 61440 -rwxr-xr-x   1 root     root     62914560 6月 16 17:33 ./txt2
#		
#		
#		# exec(推荐)
#		# {}:代表前面查询出来的内容  /opt/ 路径   \ 为固定搭配
#		find ./ -size +50M -exec cp {} /opt/ \;
#		
#		
#		# 使用管道
#		# xargs是将前面命令执行的结果先用一个{}来保存,然后用{}取出来处理
#		find ./ -size +50M | xargs -I {} cp {} /mnt/  # cp 复制到/mnt/路径下

关于权限

权限管理-⽂件权限

把⼀个⽤户加⼊了⼀个组,该⽤户就拥有了该组的权限,当⼀个⽤户要操作某个⽂件时,系统会依次检索该⽤户是否是该⽂件的拥有者,其次是组成员,最后是其他⼈,如果扫描到是拥有者,则具备拥有者的权限,不必往后扫描,以此类推

⼀ ⽂件权限管理之基本权限

1.1 基本权限介绍

基本权限类型

r:可读=》4
w:可写=》2
x:可执⾏=》1

权限的归属

属主:u
属组:g
其他⼈:o

权限介绍


基本权限类型
    r(4): 只读
    w(2):只写
    x(1):执行

权限的归属
    属主:u
    属组:g
    其他⼈:o

使用ll命令查看文件详情,在每个文件详情最前方,有10个字符来表示文件类型和权限

-rwxr-xr-x. 1 root root  62914560 6月  16 17:33 文件

  -    	   rw-	      r--		  r--
	 		6   	   4  	 	   4
文件类型   所属用户    所属用户组     其他用户
 		  属主:u	   属组:g      其他⼈:o

    第1个 字符表示此文件的文件类型
    
    234 字符表示所属用户对于这个文件的操作权限,权限的归属属主 u 
    
    567 表示所属用户组对于这个文件的操作权限,权限的归属属组 g
    
    89十 表示其他用户对于这个文件的操作权限,权限的归属其他人 o

针对权限对应的所属用户、所属用户组、其他用户的解释

	所属用户:这个文件属于哪个用户,这个用户对这个文件可以修改操作权限、修改所属用户组,不能修改用户!
	
	所属用户组:用户组中所有存在的用户,指定其中某一个用户设定 所属用户组 权限,该所属用户组指定的用户会拥有 文件创建者 设定的所有权限(包括不可读不可写不可执行)。
	
	其他用户:除去 所属用户 和 所属用户组 的 其他所有用户!
	
	注意: 以上所有权限对 root 无效! root 代表至高权限!!!!!!!
	

修改所属用户及用户组


chown : 修改所属用户及用户组

	chown 用户主.用户组 文件路径(修改哪个文件的所属用户主和所属用户组)
	
	chown 用户主 文件路径(修改哪个文件的所属用户主)
	
	chown .用户组 文件路径(修改哪个文件的所属用户组)
	

修改文件权限


chmod : 修改文件权限

	-R: 755 (u+x,g-w,o+r)

修改权限两种方式:
	
	1、按照 基本权限类型 修改  (不支持字符 + - = 模式)
		
		chmod 755 文件路径(修改哪个文件的权限)
		
		补充:
			1xxx : 把权限位是其他用户的权限改为小t,如果其他用户没有可执行权限x则是大T
			2xxx : 把权限位是所属组的权限改为小s,如果所属组没有可执行权限x则是大S
			3xxx : 把权限位是所属组的权限改成s,如果所属组没有可执行权限x则是大S,并且把权限位是其他用户的权限改为小t,如果其他用户没有可执行权限x则是大T
			4xxx : 把权限位是所属主的权限改为小s,如果所属主没有可执行权限x则是大S
			5xxx : 把权限位是所属主的权限改成s,如果所属主没有可执行权限x则是大S,并且把权限位是其他用户的权限改为小t,如果其他用户没有可执行权限x则是大T
			6xxx : 把权限位是所属主的权限改成s,如果所属主没有可执行权限x则是大S,同时把权限位是所属组的权限改为小s,如果所属组没有可执行权限x则是大S
			7xxx : 把权限位是所属主的权限改成s,如果所属主没有可执行权限x则是大S,同时把权限位是所属组的权限改为小s,如果所属组没有可执行权限x则是大S,并且把权限位是其他用户的权限改为小t,如果其他用户没有可执行权限x则是大T
			8xxx : 没有了
			
	2、按照 权限的归属 修改 (不支持数字模式)
	
		chmod u+x,g-w,o+r 文件路径(修改哪个文件的权限)
		
		chmod a=rwx 文件路径(修改哪个文件的权限) # a代表每个权限位,表示每个权限位权限是rwx
		chmod a=- 文件路径(修改哪个文件的权限)	# 表示每个权限位权限都是 - 最后权限为----------
		
		按照权限归属修改权限支持 + - = 
		
		+ 表示给权限的归属 增加 权限
		- 表示给权限的归属 减少 权限
		= 表示给权限的归属 改成 权限
		

文件权限管理之umask

新建文件、目录的默认权限是由umask决定的

linux中⽂件默认权限为666、⽬录权限默认为777,在umask的影响下!!!

1、uid>199并且属主与数组相等的⽤户下,umask: 0002

    ⽂件 664
    ⽬录 775
    
2、除1之外的其他⽤户下,⽐如root⽤户,umask: 0022

    ⽂件 644
    ⽬录 755
    

文件权限计算方法

遇到偶数直接相减,遇到奇数相减后加1

目录权限计算方法

直接相减即可

临时设置umask


# umask 000 //设置umask权限

永久设置umask


# vim /etc/profile # 或者/etc/bashrc内容⼀样
......
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
 umask 002 //表示uid⼤于等于199的默认umask值,表示普通⽤户
else
 umask 022 //表示uid⼩于199的默认umask值,表示root

umask总结


umask设置的越小,权限越大,慎用

特殊权限介绍

详情点我查看

SUID权限前戏


# ll /etc/shadow    查看shadow权限,可以看出除了root其他人都没有权限修改文件
----------. 1 root root 901 6月  19 22:41 /etc/shadow

# cat /etc/shadow  # 查看密码,当前用户还没有密码
user10:!!:18797:0:99999:7:::

# passwd user10   # 修改用户密码  回车即可修改

# cat /etc/shadow # 查看用户密码,已经修改成功
user10:$6$IyrWQ0af$lLDNbREvuWmCax6aYlc.IK5gGdrBXGyEp2xKd48zglcPkGZMKw3J67KKDrft5v8Upc3NoDDS4d5jB8HepVCD11:18798:0:99999:7:::

普通⽤户不是root也不属于root组,于是它对/etc/shadow⽂件没有任何权限
但是普通⽤户却可以⽤passwd命令修改密码,⽽修改密码都是在修改/etc/shadow⽂件,看似是自相矛盾的。  其实看下面 ↓

SUID权限介绍


# ll `which passwd`
-rwsr-xr-x 1 root root 27856 Aug 9 2019 /bin/passwd

查看passwd命令的权限,我们可以看到一个不曾见到过的权限 s  

而 S 权限是一个特殊权限
	
	SUID 权限仅对⼆进制可执⾏⽂件有效
	
    如果执⾏者对于该⼆进制可执⾏⽂件具有 s 的权限,执⾏者将具有该⽂件的所有者的权限
    
    本权限仅在执⾏该⼆进制可执⾏⽂件的过程中有效
    

SUID权限示例


[root@liu ~]# su - user10       	# 切换到普通用户user10

[user10@liu ~]$ cat /etc/shadow	    # 查看用户密码文件
cat: /etc/shadow: 权限不够           # 显示权限不够,没办法访问 

[user10@liu ~]$ ll /etc/shadow      # 查看/etc/shadow 可以看出只有root用户才可以查看
----------. 1 root root 997 6月  20 18:02 /etc/shadow

[root@localhost ~]# ll `which cat`  # 登录root用户,查看cat命令
-rwxr-xr-x. 1 root root 54160 10⽉ 31 2018 /usr/bin/cat

[root@localhost ~]# chmod 4755 `which cat` # 或者 chmod u+s `which cat` 修改权限

[root@localhost ~]# ll `which cat`  # 现在cat命令的权限已经改成了s
-rwsr-xr-x. 1 root root 54160 10⽉ 31 2018 /usr/bin/cat

[root@localhost ~]# su - user10		# 再次切换到user10用户
[egon@localhost ~]$ cat /etc/shadow # 可以看到用户密码文件的内容了

SUID权限了解部分


1、在没有设置suid的情况下,我们登录了⼀个⽤户,来执⾏操作⽬标⽂件的命令

    会依次⽐对当前登录⽤户是否是⽬标⽂件的属主、属组、其他⼈来确定是否拥有操作权限
 
2、在设置了suid的情况下,我们登录了⼀个⽤户,来执⾏操作⽬标⽂件的命令

	当前⽤户会转换成命令这个⽂件的属主身份,然后用转换后的属主身份去找⽬标⽂件,如果该身份不是⽬标⽂件的主⼈(属主),那么就直接被归为其他⼈⼀栏,不会检索组,也就是说只要属主身份对不上,直接不检查是否对应的上属组,直接当作其他用户处理。

SUID权限了解部分示例


[root@egon ~]# ll /usr/bin/cat # cat指令的权限和对应的所属主 egon、所属组 devops
-rwsr-xr-x. 1 egon devops 54160 10⽉ 31 2018 /usr/bin/cat

[root@egon ~]# ll /test/a.txt # 目标文件的权限和对应的所属主user1、所属组group1
----------. 1 user1 group1 4 10⽉ 29 18:31 /test/a.txt

[root@egon ~]# su - lili -c "cat /test/a.txt" # 因为是 s 权限lili用户会切换为egon⽤户执⾏cat,但是egon⽤户没有对上a.txt的属主user1,所以直接被当成其他⼈,没有任何权限
cat: /test/a.txt: 权限不够

[root@egon ~]# chmod o+r /test/a.txt    		# 修改文件权限,允许其他用户可读
[root@egon ~]# su - lili -c "cat /test/a.txt"  # 现在用lili访问(切换成了egon),可以访问
111

[root@egon ~]# chmod o-r,g+r /test/a.txt      # 去掉其他用户可读权限,增加所属组用户可读权限
[root@egon ~]# ll /test/a.txt				 # 查看文件,权限已经修改成功
----r-----. 1 user1 group1 4 10⽉ 29 18:31 /test/a.txt

[root@egon ~]# usermod -a -G group1 egon  # 给egon添加到group1的附加组中,拥有group1的组权限

[root@egon ~]# id egon				# 查看egon,确实已经添加group1附加组成功
uid=1005(egon) gid=1005(egon) 组=1005(egon),1003(group1)

[root@egon ~]# su - lili -c "cat /test/a.txt" # lili--->egon,egon⽤户没有对上a.txt的属主,所以直接被当成其他⼈,虽然此时egon属于⽂件a.txt的属组group1的成员,但是对suid来说那没⽤,这就对应上了 s权限了解部分 的第二条 suid 属主对不上,就不检索组
cat: /test/a.txt: 权限不够

[root@egon ~]# su - egon -c "cat /test/a.txt" # 如果当前⽤户与suid的⽤户重叠,因为是本身,那么就⽆所谓⽤户转换,属于 s权限了解部分 的第一条 。会按照:属主、属组、其他⼈的次序依次对照 ,因此可读。
1111


# 注意:

	sgid规则同suid
	同时设置suid与sgid的情况下,suid优先级⾼于sgid

SGID权限


当SGID 作⽤于普通⽂件时,和 SUID 类似,在执⾏该⽂件时,⽤户将获得该⽂件所属组的权限。

当 SGID 作⽤于⽬录时,意义就⾮常重⼤了

	当⼀个⽤户对某⼀⽬录有写和执⾏权限时,该⽤户就可以在该⽬录下建⽴⽂件
	如果该⽬录同时⽤ SGID 修饰,则该⽤户在这个⽬录下建⽴的⽂件都是属于这个⽬录所属的组。
	

[root@localhost ~]# mkdir /test
[root@localhost ~]# chmod g+s /test/ # 等同于chmod 2755 /test/
[root@localhost ~]# ll -dl /test/
drwxr-sr-x 2 root root 6 8⽉ 11 17:06 /test/ 
[root@localhost ~]#chown .egon /test/ # 后期任何⼈在该⽬录下创建的⽂件or⽬录的属组都是egon
[root@localhost ~]# ll /test/
drwxr-sr-x 2 root egon 6 8⽉ 11 17:06 /test/ 

SBIT权限


SBIT 与 SUID 和 SGID 的关系并不⼤。 
	
SBIT 是 the restricted deletion flag or sticky bit 的简称,有时也称为Sticky。 

SBIT ⽬前只对⽬录有效,⽤来阻⽌⾮⽂件的所有者删除⽂件。⽐较常⻅的例⼦就是 /tmp ⽬录:

    [root@localhost ~]# ls -dl /tmp/ # -d 参数表示不查看目录下文件信息,就查看这个目录的信息
    drwxrwxrwt. 13 root root 4096 8⽉ 11 17:09 /tmp/ 

权限信息中最后⼀位 t 表明该⽬录被设置了 SBIT 权限。

SBIT 对⽬录的作⽤是:

	当⽤户在该⽬录下创建新⽂件或⽬录时,仅有⾃⼰和 root 才有权⼒删除,主要作⽤于⼀个共享的⽂件夹。
	
posted @ 2021-06-17 11:40  刘较瘦丫  阅读(263)  评论(0)    收藏  举报