46Linux-chattr文件系统属性

文件系统属性chattr权限


man chattr  


命令格式:  chattr [+-=] [选项] 文件名或者目录
+ 增加权限
- 删除权限
= 等于某权限


i 如果对文件设置i属性,这样就不允许对文件进行删除,改名,也不能添加和修改数据,如果对目录设置i属性,那么只能修改目录下的文件数据,但是不允许建立和删除文件(连root都可以限制)


a 如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据,入股哦对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除




lsattr 选项 文件名            查看文件的系统属性
-a 显示所有的文件和目录
-d 如果目标是目录,仅仅列出目录本身的属性,而不是子文件的




ls
touch abc
ll
chattr +i abc
ll           看不到变化
lsattr -a abc      就可以见到多了一个i和一个e,e表示ext4文件格式
echo llll >> abc     会显示权限不够,因为
rm -rf abc           也会显示不能操作


cd/// 
mkdir /test
touch /test/bcd
chattr +i /test/
lsattr -a /test/
echo 2222 >> /test/bcd
cat /test/bcd
rm -rf /test/bcd   权限不够
chattr -i /test/
rm -rf /test/bcd  没有报错
ls      




ls touch cde
echo 333 >> cde
chattr +a cde
echo 444 >> cde  
vim cde
编辑一下,发现不能添加,因为vim无法判断你是删除还是添加,所以一律禁止。要添加,用echo
echo 555 >> cde

VXWORKS文件系统属性和相关操作描述(dosFS)

07-23

rn打开整个设备(raw模式)。rn警告:因为设备名是被使用简单子链匹配的i/o系统识别的,所以文件系统不使用单独的斜杠(/)作为文件名。如果使用斜杠可能发生意外的结果。rn可以使用usrfdconfig()装载卷,但是这个程序不返回dos_vol_desc结构。用usrfdconfig()装载的卷不能使用许多dosfs命令,包括dosfsvolunmount()。不过dofs的ioctl()命令(包括fiounmount)通过fd存取卷信息,所以可以和usrfdconfig()一起使用。 rnrn文件i/orndosfs文件系统设备上的文件创建、删除、读写都使用标准vxworks i/o程序: creat( )、 remove( )、 write( )和read( )。rnrnrn整个设备的打开(raw模式)rn可以打开整个的dosfs卷。这是在open()和creat()调用期间通过只指定设备名来实现。当一个合法文件被打开时返回一个文件描述符;然而,在文件操作符上的操作影响整个设备。以这种方式打开整个卷叫作raw模式。rn打开整个设备的通常原因是为ioctl()函数获得一个不属于某个文件的文件描述符。如fionfree函数,它返回在卷上的有效字节数。然而,对于许多此类函数,文件描述符可以是任何打开的此卷的,甚至一个特定文件的文件描述符。rn当一个磁盘用ms-dos数据结构初始化(引导扇区、空的根目录、fat)时,以raw模式打开此设备。ioctl()函数fiodiskinit执行初始化。rn可以以raw模式读写磁盘上的数据。在这种模式下,整个的磁盘数据区被看作一个单独的大文件。没有目录条目用来描述用raw模式写的任何数据。rn有关对整个设备(包括使用ms-dos的数据结构的区域)低级i/o,,见4.4 raw文件系统:rawfs和有关“vxworks 参考手册>库”下的rawfslib的在线参考。rnrn子目录创建 rn当子目录达到最大条目数时,子目录可以在根目录以外的任何目录下创建。子目录有两种创建方式:rn1. 使用带有fiomkdir函数的ioctl():目录名传递给ioctl()。ioctl()调用使用的文件描述符可以通过以下方式获得:打开整个卷(raw模式)、一个正规文件或卷上的另一个目录。rn2. 使用open():创建一个目录,o_creat选项必须设置在标记参量中打开,fstat_dir选项必须设置在模式参量中。open()调用返回一个文件描述符(描述新目录)。这个文件描述符用于只读,当不再需要时关闭这个描述符。rn使用以上两种方法的任意一种方法创建目录,新目录名必须被指明。这个名字可以是一个全称路径名,或是一个相对于当前工作目录的路径名。rnrn子目录删除rn被删除的目录必须是空的(除了“.”和“..”条目)。删除目录有两种方法:rn1. 使用带有fiormdir函数的ioctl()调用,指定目录名。另外,文件描述符可以指向卷上的任何文件、目录、或卷自己。rn2. 使用remove()函数,指定目录名。rnrn目录条目rn每个dosfs目录包含一组条目描述它的文件和子目录。每个条目包含有关文件或子目录的信息:rn文件名rn一个8字节字符串(如果需要,空格填补)指定文件名。(命名可以长至40个字符;详情见4.2.18长文件名支持)rn文件扩展名rn一个3字节的字符串(空格填补)指定文件名或子目录名的一个延长部分。(如果选择了不受8.3版本限制的高级文件名,扩展概念是不适用的。)rn文件属性rn一个字节域指定文件的特征;rn时间rn文件编码创建修改的时间rn日期rn文件编码的创建修改的日期rn簇号rn文件内开始簇的数目。通过搜索fat找后来的簇rn文件大小 rn文件的大小,对描述子目录的条目来说这个域通常为零。rnrn读目录条目rn在dosfs卷上的目录可以使用opendir(),readdir(),rewinddir(),和closedir()程序来搜索。这些调用可以用来确定文件名和子目录。rn使用fstat()或stat()函数可以获得有关指定文件更详细的信息。连同标准文件信息,被这些程序使用的结构还从目录条目返回文件属性字节。rnrnrn文件属性rn在dosfs目录条目中的文件属性字节由一组标记位组成,每位标志一个特殊的文件特征。文件属性字节描述的特征见下表。rn表:文件属性字节中的标记rnrnvxworks 标记名 十六进制值 描述 rnrndos_attr_rdonly 0x01 只读 rndos_attr_hidden 0x02 隐藏文件 rndos_attr_system 0x04 系统文件 rndos_attr_vol_label 0x08 卷标 rndos_attr_directory 0x10 子目录 rndos_attr_archive 0x20 存档文件 rnrnrn当一个文件被打开为o_wronly或o_rdwr时,dos_attr_rdonly被选中。如果标记设置了,open()返回error,并且设置errnos为_dosfslib_read_only。rn警告:ms-dos隐藏文件和系统文件标记(dos_attr_hidden和dos_attr_system)被dosfslib忽略。虽然他们保持完整,但他们不产生特殊的处理(例如,带有这些标记的条目当搜索目录时被公布)。rnrn卷标标记dos_attr_vol_label用来说明一个包含磁盘的dosfs卷标的目录条目。标签不是必须的,如果使用了,每卷只有一个卷标条目,在根目录中。当读一个目录的内容时,卷标条目不被报告(用readdir())。只有使用ioctl()函数fiolabelget时,卷标条目才被确定。使用ioctl()函数fiolabelset,卷标可以被设置成任何11个字符或更少字符的字符串。在这些ioctl()调用期间任何打开到此卷的文件描述符都可以使用。rn目录标记dos_attr_directory用来指出这个条目不是一个正规的文件而是一个子目录。rn存档标记dos_attr_archive在文件被创建或修改时被设置。这个标记被其他搜索卷的程序(寻找修改过的文件并选择存档)使用。这样的程序必须清除存档标记,因为vxworks不做这个工作 。rn属性字节中的所有标记(除了目录和卷标标记)可以使用ioctl()函数filoattribset设置或清除。这个函数调用在指定文件打开后改变其属性。在filattribset调用中指定的属性字节值被直接复制;为了保护存在的标记设置,使用stat()或fstat()确定当前的属性,然后使用and和or操作改变他们。rn例:设置dosfs文件属性rn这个例子使一个dosfs文件只读,并保持其他属性不变rn#include "vxworks.h" rn#include "iolib.h" rn#include "dosfslib.h" rn#include "sys/stat.h" rn#include "fcntl.h"rnstatus changeattributes (void) rn rnint fd; rnstruct stat statstruct;rn/* open file */rnif ((fd = open ("file", o_rdonly, 0)) == error) rnreturn (error);rn/* get directory entry data */ rnif (fstat (fd, &statstruct) == error) rnreturn (error);rn/* set read-only flag on file */rnif (ioctl (fd, fioattribset, (statstruct.st_attrib | dos_attr_rdonly)) rn== error) rnreturn (error);rn/* close file */rnclose (fd); rn rnrnrn文件日期和时间rn目录条目包含一个文件和目录的时间和日期。这个时间在文件创建时被设置,并在文件被修改后关闭时被更新。描述子目录的条目不被更新——它们总是包含目录的创建日期和时间。rndosfslib库在内在结构中维持日期和时间。然而通常没有一个装置来自动更新时间和日期,这提供了两种不同的设置日期和时间的方法。rn第一种方法应用两个程序dosfsdateset()和dosfstimeset()。使用如下:rnrndosfsdateset(1990,12,25)/*设置日期为1990年12月25日*/rndosfstimeset(14,30,22)/*设置时间为14:30:22*/rnrn必须按时调用这些程序来更新日期和时间的值。rn第二种方法要求一个用户支持的钩子程序。如果使用dosfsdatetimeinstall()安装了时间和日期的钩子程序,只要dosfslib要求获取当前日期和时间,程序就被调用。这样可以利用可被读取硬件日历时钟来获取当前时间。也可以用于其它的维持当前时间日期的应用软件。rn定义日期/时间钩子程序如下(datetimehook是一个例子名,真正的程序名可以是任何名)rnvoid datetimehook rn( rndos_date_time * pdatetime /* ptr to dosfs date & time struct */ rn)rn在钩子程序的入口,包含最近的时间和日期的dos_date_time结构设置在dosfslib中。接下来,钩子程序用当前正确的时间和日期填充结构。结构中没有发生改变的区域保持先前的值。rnms-dos规格在文件时间标记上仅提供了2秒间隔的时间戳。如果在dosfstimeset()或日期/时间钩子程序里指定的秒数是带零头的,那么它四舍五入到下一个偶数。rn

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试