linux下测试文件属性

该博客主要围绕在Linux系统中使用C语言进行文件属性测试展开,涉及信息技术领域中操作系统与编程语言结合应用的内容。

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

#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
   struct stat sb;

   if (argc != 2) {
       fprintf(stderr, "Usage: %s <pathname>\n", argv[0]);
       exit(EXIT_FAILURE);
   }

   if (stat(argv[1], &sb) == -1) {
       perror("stat");
       exit(EXIT_FAILURE);
   }

   printf("File type:                ");

   switch (sb.st_mode & S_IFMT) {
   case S_IFBLK:  printf("block device\n");            break;
   case S_IFCHR:  printf("character device\n");        break;
   case S_IFDIR:  printf("directory\n");               break;
   case S_IFIFO:  printf("FIFO/pipe\n");               break;
   case S_IFLNK:  printf("symlink\n");                 break;
   case S_IFREG:  printf("regular file\n");            break;
   case S_IFSOCK: printf("socket\n");                  break;
   default:       printf("unknown?\n");                break;
   }

   printf("I-node number:            %ld\n", (long) sb.st_ino);





	printf("Mode:                     %lo (octal)\n",
           (unsigned long) sb.st_mode);

   printf("Link count:               %ld\n", (long) sb.st_nlink);
   printf("Ownership:                UID=%ld   GID=%ld\n",
           (long) sb.st_uid, (long) sb.st_gid);

   printf("Preferred I/O block size: %ld bytes\n",
           (long) sb.st_blksize);
   printf("File size:                %lld bytes\n",
           (long long) sb.st_size);
   printf("Blocks allocated:         %lld\n",
           (long long) sb.st_blocks);

   printf("Last status change:       %s", ctime(&sb.st_ctime));
   printf("Last file access:         %s", ctime(&sb.st_atime));
   printf("Last file modification:   %s", ctime(&sb.st_mtime));

   exit(EXIT_SUCCESS);
}

 

<think>我们正在讨论如何在Linux中设置文件属性。用户的问题是如何在Linux中设置文件属性。在Linux中,设置文件属性通常指的是使用`chmod`命令更改文件权限,使用`chown`命令更改文件所有者,以及使用`chgrp`命令更改文件所属组。此外,还有一些高级属性可以使用`chattr`命令来设置。但是,用户的问题中提到了“fileattributes”,这可能包括基本权限(读、写、执行)和扩展属性(如不可修改属性、只追加属性等)。因此,我们需要分两部分回答:1.基本权限设置(使用chmod,chown,chgrp)2.扩展属性设置(使用chattr和lsattr)另外,注意用户是在Linux系统中操作,所以我们以常见的Linux发行版(如CentOS、Ubuntu)为例。同时,根据系统指令,我们需要在回答中生成相关问题。参考引用:引用[1]是关于在CentOS7上安装Docker的步骤,但我们的主题是设置文件属性,所以可能不直接相关。引用[2]是关于Python注释和文档字符串的,也不直接相关。因此,我们主要根据用户的问题来回答。步骤:1.基本权限设置:-使用`chmod`命令修改文件权限。权限可以用符号表示(如u+rwx)或数字表示(如755)。-使用`chown`命令修改文件所有者和所属组。-使用`chgrp`命令修改文件所属组(也可以使用`chown`来完成)。2.扩展属性设置:-使用`chattr`命令设置扩展属性,例如设置文件为不可修改(immutable)可以防止文件被删除或修改。-使用`lsattr`命令查看扩展属性。注意:扩展属性需要文件系统支持(如ext2,ext3,ext4等)。我们将分别给出示例。同时,根据指令,我们需要在回答中生成相关问题。回答结构:1.解释基本权限设置,并给出示例。2.解释扩展属性设置,并给出示例。3.生成相关问题。注意:使用中文回答,代码块使用正确格式。</think>### 如何在 Linux 中设置文件属性Linux 中设置文件属性主要通过以下核心命令实现,分为基础权限设置和扩展属性设置两类: #### 一、基础权限设置 1. **`chmod` - 修改文件权限** 权限分为三类用户:所有者(u)、所属组(g)、其他用户(o) ```bash # 符号模式(示例:所有者添加执行权限,所属组移除写权限) chmod u+x,g-w filename # 数字模式(示例:rwxr-xr-- 对应 754) chmod 754 filename ``` 2. **`chown` - 修改文件所有者和所属组** ```bash # 修改所有者 chown username filename # 修改所有者和组 chown username:groupname filename # 递归修改目录内所有文件 chown -R username:groupname directory/ ``` 3. **`chgrp` - 修改文件所属组** ```bash chgrp groupname filename ``` #### 二、扩展属性设置 1. **`chattr` - 设置特殊属性** 常用属性: - `+i`:不可修改/删除(immutable) - `+a`:仅可追加内容(append-only) - `+c`:启用透明压缩(需文件系统支持) ```bash # 设置文件不可修改 chattr +i important_file.txt # 允许追加日志但禁止修改 chattr +a /var/log/service.log ``` 2. **`lsattr` - 查看扩展属性** ```bash lsattr filename ``` #### 三、操作示例 ```bash # 创建测试文件 touch testfile # 设置权限:所有者读写执行,组读写,其他无权限 chmod 760 testfile # 设置所有者为 root,组为 admin sudo chown root:admin testfile # 添加不可删除属性 sudo chattr +i testfile # 验证属性 lsattr testfile # 输出:----i--------- testfile ``` > ⚠️ 注意事项: > 1. 修改系统文件需 `sudo` 权限 > 2. 扩展属性需要文件系统支持(如 ext4/XFS) > 3. 设置 `+i` 属性后,即使 root 用户也无法删除 #### 四、属性恢复技巧 若误设 `+i` 属性导致无法修改: ```bash # 移除不可修改属性 sudo chattr -i locked_file ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liu-Eleven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值