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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值