Linux 文件权限、文件压缩与文件查找

发布时间:2023年12月26日

一、文件权限管理

Linux 一切皆文件

先从如何查看文件类型开始:
? ? file filename ?查看文件类型和编码
? ? stat filename 查看文件详情

(一)文件属性

# ls -a
drwxr-xr-x ?5 ? ? ?root ? ? ? root ? ? ? 39 ? ? Nov 17 11:16 aaa
-rw-------. 1 ? ? ?root ? ? ? root ? ? 5060 ? ? Jun ?3 ?2020 anaconda-ks.cfg
-rw-r--r-- ?1 ? ? ?root ? ? ? root ? ? ?101 ? ? Dec 22 15:02 test.sh

[ 权限 ]  [连接数]  [拥有者]  [所属组]  [文件大小] [修改时间]   [文件名]
[ 权限 ]
    字符1 (文件类型)
        d 目录
        - 普通文件
        l 链接文件
        b 设备文件
        c 串行端口文件
        s socket 文件
    字符2:10 (文件权限,3位一组)
        字段意思
            [拥有者] [同组用户] [其他用户]
        字母意思
            r 可读
            w 可写
            x 可执行
        其他写法
            rwx = 111(7)
        特殊权限 (如果没有执行权限,那么就是大写字母)
            SUID 位置在拥有者的执行权限上's',能拥有拥有者的权限,只能用在二进制文件上
            SGID 位置在群组执行权限上's',能拥有群组权限
            SBIT 位置在其他用户执行权限上't',针对目录有效,只有自己和root可以管理此目录

[连接数]
    描述:记录着指向该目录的硬链接数目
    文件      链接数: 1 + 硬链接文件数
    空目录    链接数: 2 (. 和 ..)
    非空目录  链接数: 目录个数(. .. 加其他目录总数)
    
    备注:目录下新建文件不会增加目录链接数,因为文件是目录的内容,另外目录不支持硬链接

[拥有者]
    文件拥有者

[所属组]
    文件所属组

[文件大小]
    文件大小,默认单位bytes

[修改时间]
    创建时间或者修改时间,如果时间太长就只显示年份
    ctime 文件创建时间
    atime 文件读取时间
    mtime 文件修改时间

[文件名]
    文件名  如果开头有'.',就是隐藏文档,需要ls -a 才会显示
    .      表示当前目录
    ..     表示上层目录

上述文件有个'.',是ACL类型,没有限制就没有,这个可以在ls的源码中看到,另外就是SELinux开启的原因,这些后续记录;

  • getfacl filename 查看是否是ACL的原因,没有明显不同就不是
  • ls -Z filename 查看是否是SELiunx的原因,,开启后会有一些权限关联

关于SELinux的导致的文件权限多一个.的问题,可以从ls -Z filename可以看到,另外就是man selinux 8?可以看到相关的信息

FILE LABELING
? ? ? ?All ?files, ?directories, ?devices ... have a security context/label associated with them. ?These context are stored in the extended attributes of
? ? ? ?the file system. ?Problems with SELinux often arise from the file system being mislabeled. This can be caused by booting the machine ?with ?a ?non
? ? ? ?SELinux ?kernel. ?If you see an error message containing file_t, that is usually a good indicator that you have a serious problem with file system
? ? ? ?labeling.

? ? ? ?The best way to relabel the file system is to create the flag file /.autorelabel and reboot. ?system-config-selinux, ?also ?has ?this ?capability.
? ? ? ?The restorecon/fixfiles commands are also available for relabeling files.

连接文件:

软连接(可以理解为快捷方式):

ln -s /path/to/fileordir soft_link

建立一个独立的文件,而这个文件会让数据的读取指向它 link 的那个文件的文件名

硬链接:

ln /path/to/file hard_link_name

直接指向inode(理解为,目录中新增了一笔记录文件名对应的inode,并不会新增inode);

硬链接不能跨文件系统;

硬链接不能链接到目录;


(二)了解文件权限

理解文件权限 (目录也是文件)

文件权限
  • r ????????读取文件内容
  • w? ? ? ?编辑文件内容
  • x? ? ? ? 被系统执行的权限
?目录权限
  • r?????????读取目录结构 ls
  • w? ? ? ?改变文件目录结构;创建和删除文件;重命名和移动文件
  • x? ? ? ??用户能否进入该目录成为工作目录,**是目录rw的基础权限**
隐藏权限

常见属性:

  • a ???????当设定 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据
  • i? ? ? ? ?让一个文件『不能被删除、改名、设定链接也无法写入或新增数据!』包括root

不常见属性:

  • A 文件或目录的atime不会被修改,可避免 I/O 较慢的机器过度的存取磁盘
  • c 将会自动的将此文件『压缩』,读取时解压
  • S 同步写入磁盘,默认是异步缓存写入
  • s 删除将被完全删除,无法恢复
  • u 删除后数据还在,可以恢复

注意:

  1. chattr 指令只能在Ext2/Ext3/Ext4 的 Linux 传统文件系统上面完整生效
  2. xfs 文件系统仅支援 AadiS?
  3. 查看方式 lsattr
特殊权限
  • SUID 位置在拥有者的执行权限上's',能拥有拥有者的权限,只能用在二进制文件上
  • SGID 位置在群组执行权限上's',能拥有群组权限
  • SBIT 位置在其他用户执行权限上't',针对目录有效,只有自己和root可以删除此目录下的文件

注意:S 或者 T 表示 执行权限是空的,就是没有x权限,也没有特殊权限

(三)管理文件权限

常见权限配置
chmod 改变文件权限
    普通权限: 
        r:4     w:2     x:1     -:0
    特殊权限:
        SUID s:4     SGID s:2     SBIT t:1     -:0
    配置权限:
        Each MODE is of the form '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'.
        
        chmod 0777/777 filename

        chmod [a/u/o/g][+/-/=][r/w/x] file
        
        递归给目录以及下所有文件和目录授权
        chmod -R 777 dir
    
        改变指定目录下,所有目录权限
        find /dir -type d -exec chmod g+w {} \;
        
        改变指定目录下,所有文件权限
        find /dir -type f -exec chmod g+w {} \;

chown 改变文件所有者
    chown user[:group] path/to/file
    chown -R user:group path/to/dir

chgrp 改变文件属组(不常用)
    chgrp groupname path/to/file
    chgrp groupname -R path/to/dir

chattr 改变隐藏权限(介绍查看上一节特殊权限)
    
    chattr [+-=] 权限 文件或目录

ACL 文件权限控制
    setfacl -R -m d:u:usera:rwx /tmp/test   设置目录后期添加的所有文件,usera都有rwx权限
预设权限

umask 文件创建时初始权限

文件默认值 (*初始没有执行权限*)
    -rw-rw-rw- (0666)

目录默认值
    drwxrwxrwx (0777) 

umaks 初始值 (0022)

计算方式:
    umask 0022 即-----w--w- 
    文件: (-rw-rw-rw-) - (-----w--w-) = -rw-r--r--
    目录: (drwxrwxrwx) - (d----w--w-) = drwxr-xr-x

二、压缩与解压

常见压缩类型
常见压缩类型
    *.Z          compress 程序压缩的文件;
    *.zip        zip 程序压缩的文件;
    *.gz         gzip 程序压缩的文件;
    *.bz2        bzip2 程序压缩的文件;
    *.xz         xz 程序压缩的文件;
    *.tar        tar 程序打包的数据,并没有压缩过;
    *.tar.gz     tar 程序打包的文件,其中并且经过 gzip 的压缩
    *.tar.bz2    tar 程序打包的文件,其中并且经过 bzip2 的压缩
    *.tar.xz     tar 程序打包的文件,其中并且经过 xz 的压缩
常见压缩软件
常见压缩软件
    gzip
        gzip 压缩
        gunzip 解压
    bzip2
    xz
    zip/unzip
        压缩文件 zip -r myfile.zip ./*            递归压缩当前目录下的所有文件
        解压文件 unzip -d /home/user myfile.zip   解压到指定目录下,如例子/home/user/目录下
常用打包软件
tar
常用打包命令 (tar.gz == tgz)
    压 缩:tar -zcv -f filename.tar.gz 要被压缩的文件或目录名称
    压缩带时间:tar -zcvf filename$(date +%Y%m%d).tgz dirname
    解压缩:tar -zxv -f filename.tar.gz -C target_dir
    解打包:tar -xvf filename.tar -C target_dir

    注意:解压目录以及当前目录还有解压后的目录名,以及目录容量


如下报错应该是指当前目录没有可用空间了
tar -xf mysql_dump20211207.tar 
tar: test20211207.sql: Wrote only 1536 of 10240 bytes
tar: Exiting with failure status due to previous errors

常用参数解析
    -c :建立打包文件,可搭配 -v 来查看过程中被打包的档名
    -x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开

    -z :透过 gzip 的支持进行压缩/解压缩:此时文件名最好为 *.tar.gz
    -j :透过 bzip2 的支持进行压缩/解压缩:此时文件名最好为 *.tar.bz2
    -J :透过 xz 的支持进行压缩/解压缩:此时文件名最好为 *.tar.xz

    -v :在压缩/解压缩的过程中,将正在处理的文件名显示出来
    -f filename:-f 后面要立刻接要被处理的文件
    -C 目录 :这个选项用在解压缩,若要在特定目录解压缩


不常用参数解析
    --exclude=FILE:在压缩的过程中,不要将 FILE 打包
    --newer-mtime="2015/06/17" 压缩修改时间比这个晚的文件
    -p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
    -P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意,尽量不要用

注意事项:

  • 打包参数:-c, -t, -x 不可同时出现
  • 解压参数:-z, -j, -J 不可以同时出现
  • 如果只是打包,生成的文件叫tarfile
  • 如果是打包压缩,生成的文件叫tarball

三、文件查找

find
日志清理:
    查找文件,并挨个提示是否删除
    find /var/log/ -type f -name "messages-20*" -mtime +200 -exec rm -i {} \;

    下面方式会直接删除检索到的结果,没有返回信息(比较危险)
    find /var/log/ -type f -name "messages-20*" -mtime +200 -delete

参数解析:
    /var/log/ 指定查找目录
    -type f   指定查找文件类型,d 是目录
    -o        或者
    -maxdepth 2 表示最大搜索深度为2,这个参数最好放在前面不要放在末尾

    -newer file   查找比file文件修改时间更晚的文件,类似的还有 -anewer and -cnewer,

    -name "messages-20*" 文件名正则匹配
    -mtime +200 修改日期据今200天以上的
        1)  另外如果是 0 则是表示目前时间
        2)  4 表示4天前的那一天内修改过的文件
        3)  +4 4天以前修改过的文件
        4)  -4 4天内修改过的文件
    -mmin +60  修改时间是60分钟以前的,类似mtime

    -exec commond {} \; 要执行的操作,'{}'后的空格不能少,符号不能少,末尾的'\;'不能多空格
        -exec 一直到 \; 是关键词,因为;是特殊字符需要转义
        {} 代替前面返回的参数
        commond 不用放进引号里面,直接写就是,不支持别名*

-exec + 与 \; 的区别

find -type f
./A
./B
./C
./D

find -type f -exec echo {} +
./A ./B ./C ./D

等价于 echo ./A ./B ./C ./D

find -type f -exec echo {} \;
./A
./B
./C
./D

等价于:
echo ./A
echo ./B
echo ./C
echo ./D
locate
参数:
    -i :忽略大小写的差异;
    -c :不输出文件名,仅计算找到的文件数量
    -l :仅输出几行的意思,例如输出五行则是 -l 5
    -S :输出 locate 所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等
    -r :后面可接正则表示法的显示方式
描述:
    1、locate:依据 /var/lib/mlocate 内的数据库记载,找出用户输入的关键词文件名
    2、updatedb:根据 /etc/updatedb.conf 的设定去搜寻系统硬盘内的文件名,并更新 /var/lib/mlocate 内的数据库文件

文章来源:https://blog.csdn.net/weixin_43839586/article/details/135214790
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。