Linux下修改文件属性 —— chattr和lsattr命令介绍

本文介绍了Linux系统中用于修改和查看文件属性的chattr和lsattr命令。chattr可以设置如append-only、immutable、comprssed等特殊属性,而lsattr用于显示这些属性。文章详细阐述了这两个命令的选项、用法以及使用限制,帮助用户更好地管理和保护文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 介绍

chattr可用于修改Linux文件系统上的文件属性。例如,使用chattr将某个文件设置为’i’属性(不可修改),则即使在root用户下给文件chmod成777模式,也是无法修改、删除和重命名的。可借助这个命令对某些文件进行锁定。chattr可作用于文件或目录。

相应的,lsattr命令用于打印文件的属性。

2. chattr命令

2.1 选项

-R 递归地作用于所有子目录及文件(默认不递归)。
-V 将chattr命令的输出变得详细些,并且会打印出chattr命令的版本。
-f 不打印错误信息。
-v version 给文件设置一个版本号。

2.2 命令用法

命令格式如下:
chattr [ -RVf ] [ -v version ] [ mode ] files…
即,对文件’files’设置为属性’mode’。其中mode可以设置为 “+-=[acdeijstuADST]” 。

例如:

[jc_gbd@ubuntu]test:$ sudo chattr +a main.c

上述mode中:

  • ‘+’ 表示在文件的现有属性上增加后面的属性。
  • ‘-’ 表示在文件的现有属性上删除后面属性。
  • ‘=’ 不管原有属性,直接设置为后面的属性。

可以同时增加/删除/设置多个属性。

  • ‘A’ 文件的atime(access time)记录不可被修改。
  • ‘a’ 将文件设置为append-only-file,即只可向文件追加内容,而不能覆盖和删除。只有特权用户或者拥有CAP_LINUX_IMMUTABLE的普通用户可以设置这个属性。
  • ‘c’ 文件会自动在内核中压缩后存储。读取文件操作会得到未压缩的数据,而写入文件操作会先把数据压缩再存到磁盘中。
  • ‘D’ 有这个属性的目录被修改时,其更改会同步写到磁盘上。相当于mount命令的dirsync选项。
  • ‘d’ 文件不会成为dump程序的备份目标。
  • ‘e’ 文件使用extents来映射磁盘上的块。chattr可能无法删除这个属性。
  • ‘i’ 文件不能被修改,包括写入、删除、重命名和建立符号链接等。只有特权用户或者拥有CAP_LINUX_IMMUTABLE的普通用户可以设置这个属性。
  • ‘j’ 对于日志文件系统ext3,如果挂载时使用”data=ordered”或者”data=writeback”选项,’j’属性会增加”data=journal”的作用,即,向文件写入的新数据会先写到日志,再写到文件里。如果挂载时本来就使用了”data=journal”,则’j’没有作用。只有特权用户或者拥有CAP_LINUX_IMMUTABLE的普通用户可以设置这个属性。
  • ’s’ 当文件被删除时,它占用的block会被清零并回收,即完全删除,保护你的隐私。
  • ‘S’ 当文件被修改时,修改会同时写到磁盘。相当于mount时的sync选项。
  • ‘T’ 设置该属性的目录,会被认为是Orlov block allocator机制的顶层目录,它告诉ext3/ext4,它的各个子目录是没有关系的,在为子目录分配磁盘块时也应尽量分离来。而在没有设置该属性的目录下,子目录通常会分配相近的块。该属性很适用于设置到/home目录,来隔离各用户文件夹。
  • ‘t’ 文件在于其他文件合并(tail-merging)时,不会产生尾部块碎片。
  • ‘u’ 文件在被删除后,其内容仍被保存,允许用于请求数据恢复。

另外,还有一些文件固有或只读的属性,chattr无法更改,但仍可以通过lsattr命令查看到:

  • ‘h’ huge file (文件以blocksize为单位存储它的块而不是以sector为单位,意味着文件大小超过(或曾经超过)2TB。)
  • ‘E’ a compressed file has a compression error
  • ‘I’ indexed directory using hashed trees
  • ‘X’ raw contents of a compressed file can be accessed directly
  • ‘Z’ a compressed file is dirty

3. lsattr命令

通过lsattr打印文件属性的用法很简单,形如:

[jc_gbd@ubuntu]test:$ lsattr main.c
-------A-----e- main.c

也可以加选项,除了上面介绍的-R, -V, -v选项,lsattr还有如下选项:
-a 列出隐藏文件(’.’开头的文件名)。
-d 像文件一样打印目录的属性(只列出目录,而不列出目录中内容)。

4. 使用限制

属性’c’, ‘s’和’u’可能在内核中并没有实现。’j’只适用于ext3文件系统。

chattr属于e2fsprogs包的一部分,因此可认为你系统中的chattr命令和文件系统肯定是配套的。也意味着chattr/lsattr主要用于ext2/ext3/ext4文件系统中的文件或目录(可通过mount命令查看你要更改属性的文件是否位于ext文件系统中)。
实际上,只要文件系统在内核中实现了相应操作的ioctl(request为FS_IOC32_SETFLAGS/FS_IOC_SETFLAGS)的处理,就可以支持chattr。例如jfs、ubifs、reiserfs等文件系统目前也支持了chattr命令处理。对于不支持该命令的文件系统(如tmpfs、vfat、fuseblock等),在执行chattr时会报错:

[jc_gbd@ubuntu]run:$ sudo chattr +i call.sh 
chattr: Inappropriate ioctl for device while reading flags on call.sh
### 解决 Linux 操作系统中权限不足的问题 在 Linux 中,当用户尝试访问某些资源时可能会因为权限不足而失败。以下是几种常见的解决方案: #### 使用 `chmod` 修改文件或目录的权限 可以通过 `chmod` 命令修改目标文件或目录的权限设置。例如: - 添加执行权限可以使用命令 `chmod a+x 文件名`[^2]。 - 如果需要赋予所有用户对该文件完全控制权,则可以运行 `chmod 777 文件名`。 需要注意的是,更改权限应谨慎行事,过度开放权限可能带来安全风险。 #### 利用 `sudo` 提升当前用户的权限 如果普通用户试图执行需要管理员特权的任务,那么可以借助 `sudo` 命令临时获取更高层次的权利来完成特定操作。例如要编辑某个受保护配置文件 `/etc/hosts` ,可以这样调用文本编辑器 nano 或 vi : ```bash sudo nano /etc/hosts ``` #### 更改文件所属者或者组成员身份 有时仅仅调整访问模式还不够解决问题所在;此时还可以考虑改变该对象归属关系——即重新指定其拥有者以及关联群体信息。这可通过如下两条指令达成目的: - 将某文档转交给另一账户支配:`chown 新用户名 文件路径` - 把它纳入到别的工作组范畴之内:`chgrp 工作组名称 文件位置` 另外还存在一些特殊类型的属性标记方法,在常规 rwx 字符串之外定义额外行为约束条件。像只允许附加数据而不删除已有记录的功能就可以通过设定 "+a" 参数实现 [`chattr +a`] 。 若要查询现有状态则需依靠另一个工具 ——lsattr[]^3]^. 综上所述,针对不同场景采取适当措施能够有效应对因缺乏必要许可而导致的各种障碍情况发生。 ```bash # 示例代码展示如何增加文件执行权限 chmod u+x script.sh ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值