目录
前言
一、chattr命令介绍
二、语法及常用参数和模式
2.1 一样用help或man查看语法
2.2 常用参数
2.3 命令的模式
三、参考实例
3.1 给文件添加无法修改的权限
3.2 从指定文件移除隐藏属性
3.3 给目录添加隐藏属性,递归操作
3.4 设置文件只能添加内容,无法覆盖
3.5 不再修改文件或目录的访问时间
四、chattr的问答题
4.1 模拟找命令的过程
4.2 解决方法
总结
前面了解了文件的权限和特殊权限,今天讲一下chattr这个命令,主要是用来更改文件隐藏属性,下面一起来看下。
chattr命令来自于英文词组“chang attribute”的缩写,其功能是用于更改文件隐藏属性。常用的ls命令仅能能够查看到文件的一般权限、特殊权限、SELinux安全上下文与是否有FACL访问控制列表的情况,且无法查看到文件隐藏属性。
NAME
chattr - change file attributes on a Linux file system
SYNOPSIS
chattr [ -RVf ] [ -v version ] [ mode ] files...
语法:chattr 【参数】【模式】文件
这里语法的格式除了可以加参数,还需要加模式。
先来讲讲参数方面有哪些比较常用到的,以表格形式列出
-R | 递归处理目录下的所有文件 |
-v | 设置文件或目录版本 |
-V | 显示指令执行过程 |
+ | 开启文件或目录的该项属性 |
-- | 关闭文件或目录的该项属性 |
= | 指定文件或目录的该项属性 |
命令的模式有以下这些内容,以表格形式呈现,即设置的权限和对应的作用
权限 | 作用 |
i | 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件 |
a | 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only) |
S | 文件内容在变更后立即同步到硬盘(sync) |
s | 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域) |
A | 不再修改这个文件或目录的最后访问时间(atime) |
b | 不再修改文件或目录的存取时间 |
D | 检查压缩文件中的错误 |
d | 使用dump命令备份时忽略本文件/目录 |
c | 默认将文件或目录进行压缩 |
u | 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复 |
t | 让文件系统支持尾部合并(tail-merging) |
x | 可以直接访问压缩文件中的内容 |
可以看到文件设置了无法修改的权限后,文件不能被删除;
[root@localhost ~]# chattr +i anaconda-ks.cfg
[root@localhost ~]# lsattr anaconda-ks.cfg
----i----------- anaconda-ks.cfg
[root@localhost ~]# rm -r anaconda-ks.cfg
rm:是否删除普通文件 "anaconda-ks.cfg"?y
rm: 无法删除"anaconda-ks.cfg": 不允许的操作
[root@localhost ~]# chattr -i anaconda-ks.cfg
[root@localhost ~]# lsattr anaconda-ks.cfg
---------------- anaconda-ks.cfg
[root@localhost ~]# chattr -R +i data/
[root@localhost ~]# lsattr data/
----i----------- data/a.txt
----i----------- data/b.txt
[root@localhost ~]# lsattr data/ -d
----i----------- data/
[root@localhost ~]# echo "123456" > a.txt
[root@localhost ~]# chattr +a a.txt
[root@localhost ~]# echo "123456" > a.txt
bash: a.txt: 不允许的操作
[root@localhost ~]# echo "123456" >> a.txt
[root@localhost ~]# cat a.txt
123456
123456
[root@localhost ~]# chattr +A anaconda-ks.cfg
[root@localhost ~]# lsattr anaconda-ks.cfg
-------A-------- anaconda-ks.cfg
[root@localhost ~]# vim anaconda-ks.cfg
[root@localhost ~]# stat anaconda-ks.cfg
文件:"anaconda-ks.cfg"
大小:1371 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:67259498 硬链接:1
权限:(0444/-r--r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:admin_home_t:s0
最近访问:2023-02-18 10:43:12.451650907 +0800
最近更改:2023-02-18 10:43:12.451650907 +0800
最近改动:2023-02-18 10:43:12.453650916 +0800
创建时间:-
[root@localhost ~]# vim anaconda-ks.cfg
[root@localhost ~]# stat anaconda-ks.cfg
文件:"anaconda-ks.cfg"
大小:1384 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:67664943 硬链接:1
权限:(0444/-r--r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:admin_home_t:s0
最近访问:2023-02-18 10:43:31.555734612 +0800
最近更改:2023-02-18 10:43:31.555734612 +0800
最近改动:2023-02-18 10:43:31.555734612 +0800
创建时间:-
[root@localhost ~]# echo "123456" > anaconda-ks.cfg
[root@localhost ~]# tail -n 1 anaconda-ks.cfg
123456
A模式的访问时间不变,但是可以修改文件的内容以及覆盖。
如果你需要用到这个chattr命令去取消文件的隐藏权限,但是你执行命令的时候显示命令不存在,这时如何将它找回来。(你不知道这个命令被修改成什么名字了)
[root@localhost ~]# which chattr
/usr/bin/chattr
[root@localhost ~]# mv /usr/bin/chattr /usr/bin/sanlian
以上为实验步骤
[root@localhost ~]# lsattr data/
----i----------- data/a.txt
----i----------- data/b.txt
[root@localhost ~]# chattr -i data/
bash: /usr/bin/chattr: 没有那个文件或目录
[root@localhost ~]# which chattr #找不到命令位置
/usr/bin/which: no chattr in (/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin)
[root@localhost ~]#
[root@localhost ~]# yum search chattr #找这个命令的软件包也找不到
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.ustc.edu.cn
* extras: mirrors.aliyun.com
* updates: mirrors.ustc.edu.cn
警告:没有匹配 chattr 的软件包
No matches found
[root@localhost ~]# yum install chattr
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.ustc.edu.cn
* extras: mirrors.aliyun.com
* updates: mirrors.ustc.edu.cn
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
没有可用软件包 chattr。
错误:无须任何处理
[root@localhost ~]# find / -name chattr #find命令也找不到
可以直接从同系统的服务器把/usr/bin/chattr这个命令拷出来就行了
另外一台服务器上输入这个命令,把chattr传输到需要chattr的服务器
scp /usr/bin/chattr [email protected]:/usr/bin #IP填写要传输到的服务器位置
The authenticity of host '192.168.212.166 (192.168.212.166)' can't be established.
ECDSA key fingerprint is SHA256:r7pA/vg/8gpqLgC3rG/hfxy//gF73wAsy3Kzg/Hrq1Q.
ECDSA key fingerprint is MD5:64:24:cf:fa:e9:24:e6:e9:41:c7:9f:44:9a:9e:00:6e.
Are you sure you want to continue connecting (yes/no)? yes #按yes确认
Warning: Permanently added '192.168.212.166' (ECDSA) to the list of known hosts.
[email protected]'s password: #输入对端的密码
chattr 100% 10KB 10.8MB/s 00:00
已经可以使用这个命令了
[root@localhost ~]# chattr -i data/
[root@localhost ~]# lsattr data/
----i----------- data/a.txt
----i----------- data/b.txt
[root@localhost ~]# lsattr data/ -d
---------------- data/
chattr命令修改文件和目录的隐藏属性,要查看文件是否设置了隐藏属性是使用latter命令去查看的,使用起来也比较简单;如果要给文件设置隐藏权限,在模式前面写上一个加号,若要取消隐藏权限,则加个减号;觉得以上内容还行的话,可以一键三连支持一下!