[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 才有权⼒删除,主要作⽤于⼀个共享的⽂件夹。

浙公网安备 33010602011771号