`

Linux文件系统权限及用户

 
阅读更多

Linux下修改文件及目录的权限和用户

修改用户和用户组

Linux下修改文件属主可以通过如下函数进行:

#include <unistd.h>

int chown(const char *path, uid_t owner, gid_t group);
int fchown(int fd, uid_t owner, gid_t group);
int lchown(const char *path, uid_t owner, gid_t group);

各函数描述如下:

chown:修改文件的属主,文件通过路径path指定,对于符号链接会进行解析,即如果指定的为符号链接的话,该函数会修改实际文件的属性。

fchown:修改文件的属主,文件通过文件描述符fd指定。

lchown:和chown一样,不同是它不解析符号链接,即如果指定的为符号链接的话,该函数会修改链接的属性,而不是文件的。

修改权限

Linux修改文件权限可以通过如下函数进行:

#include <sys/stat.h>

int chmod(const char *path, mode_t mode);
int fchmod(int fd, mode_t mode);

 chmod:修改文件的权限,文件通过path参数指定的路径名指定,对于符号链接会进行解析,即如果指定的式链接的话,会修改文件的权限。

fchmod:修改文件的权限,文件通过文件描述符fd参数指定。

示例代码

#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <libgen.h>
#include <pwd.h>
#include <string.h>
#include <fcntl.h>

void print_file_info(const char *filename)
{
    struct stat sb;

    if (lstat(filename, &sb) == -1) {
        printf("lstat failed. errno: %d, failed reason: %s.\n", errno, strerror(errno));
        perror("stat");
        exit(EXIT_SUCCESS);
    }

    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));

    return;
}
  int main(int argc, char *argv[])
{
    int ret;
    int fd;
    struct passwd *pwd;

    if (argc != 3)
    {
        printf("usage: create a symbolic link from second file to first file. \n%s <source_file_name> <dest_file_name>.\n", basename(argv[0]));
        return -1;
    }

    pwd = getpwuid(getuid());
    if (NULL == pwd)
    {
        printf("getpwnam failed, errno: %d, fail reason: %s.\n", errno, strerror(errno));
        return -1;
    }
    printf("user info: \n");
    printf("user name:        %s.\n", pwd->pw_name);
    printf("user password:    %s.\n", pwd->pw_passwd);
    printf("user uid:         %d.\n", pwd->pw_uid);
    printf("user group id     %d.\n", pwd->pw_gid);
    printf("real user name:   %s.\n", pwd->pw_gecos);
    printf("home directory:   %s.\n", pwd->pw_dir);
    printf("shell program:    %s.\n", pwd->pw_shell);

    ret = symlink(argv[1], argv[2]);
    if (0 != ret)
    {
        printf("symlink failed. errno: %d, fail reason: %s.\n", errno, strerror(errno));
        //return -1;
    }
    printf("========after symlink======\n");
    print_file_info(argv[2]);

    ret = chmod(argv[2], 0644);
    if (0 != ret)
    {
        printf("chmod failed. errno: %d, fail reason: %s.\n", errno, strerror(errno));
        //return -1;
    }
    printf("========after chmod======\n");
    print_file_info(argv[2]);

    fd = open(argv[2], O_RDONLY);
    if (fd < 0)
    {
        printf("open failed. errno: %d, fail reason: %s.\n", errno, strerror(errno));
        return -1;
    }
    ret = fchmod(fd, 0755);
    if (0 != ret)
    {
        printf("fchmod failed. errno: %d, fail reason: %s.\n", errno, strerror(errno));
        return -1;
    }

    printf("========after fchmod======\n");
    print_file_info(argv[2]);

    ret = chown(argv[2], pwd->pw_uid, pwd->pw_gid);
    if (0 != ret)
    {
        printf("chown failed. errno: %d, fail reason: %s.\n", errno, strerror(errno));
        //return -1;
    }
    printf("========after chown======\n");
    print_file_info(argv[2]);

    //unlink(argv[2]);
   
    return 0;
}
 

 

分享到:
评论

相关推荐

    linux文件系统管理-权限管理(基础权限设置实验)

    实验目的 1、掌握Linux文件系统权限的设置 2、掌握linux用户帐号与组管理 3、掌握linux 文件共享的设置方法 4、掌握linux 文件共享的权限设置方法

    如何设置Linux系统下的文件权限

    Linux 是一个多用户操作系统,它允许多个用户同时登录和工作。因此 Linux 将一个文件或目录与一个用户或组联系起来。访问控制列表(ACL:Access Control List)为计算机提供更好的访问控制,它的作用是限制包括root...

    Linux系统 文件权限.mp4

    Linux文件权限详解,Linux系统中不仅是对用户与组根据UID,GID进行了管理,还对Linux系统中的文件,按照用户与组进行分类,针对不同的群体进行了权限管理,用他来确定谁能通过何种方式对文件和目录进行访问和操作。

    linux修改目录和文件权限的简单命令解释

    今天遇到的问题,如何一个用户如www的权限复制给我的用户? 目录的权限表示:dwrxr–r– ... 您可能感兴趣的文章:Linux中改变文件权限的chmod命令详析修改linux文件权限命令:chmod命令详解Linux 下目录文件权限(命

    linux文件属性和更改文件权限详解

    1.2 linux文件系统介绍 2.更改目录/文件权限 2.1 用户和用户组的相关指令 2.2 chgrp命令 2.3 chown命令 2.4 chmod命令 2.5 umask命令  1.文件属性 1.1 ls命令 ls命令是我们最常用的命令之一,用来查看当前目录下的...

    Linux文件管理的总结

    Linux文件管理; Linux文件和目录的权限管理和区别; Linux文件和目录的内容操作; Linux文件系统EXT2的详解

    linux下文件管理系统的研究与实现

    Linux操作系统是现在流行的一种免费的...在研究了Linux文件系统及网络传输的原理基础上系统主要实现了对文件的管理,包括创建、删除、重命名、复制、移动和文件权限的修改的功能,以及对字符的搜索和对文件的网络传输。

    Linux操作系统试题及答案.pdf

    Linux操作系统试题及答案.pdfLinux操作系统试题及答案.pdfLinux操作系统试题及答案.pdfLinux操作系统试题及答案.pdfLinux操作系统试题及答案.pdfLinux操作系统试题及答案.pdf

    Linux文件权限防护设置方法详细介绍

    Linux 是一个多用户操作系统,它允许多个用户同时登录和工作。因此 Linux 将一个文件或目录与一个用户或组联系起来。访问控制列表(ACL:Access Control List)为计算机提供更好的访问控制,它的作用是限制包括root...

    LINUX文件系统模拟

    模拟Linux文件系统,实现了基本的文件操作和用户管理系统,加上了权限管理。 默认用户名root 默认密码xiaox 使用说明登陆后键入help即可见

    linux用户权限管理

    这个文件记录了Linux系统中每个用户的一些基本属性,并且对所有用户可读。/etc/passwd中每一行记录对应一个用户,每行记录又被冒号分割,其格式和具体含义如下: 用户名:口令:用户标识号:组标识号:注释性描述:主目录...

    Linux操作系统实验二.doc

    1、 通过实验了解和熟悉Linux文件系统 2、 掌握文件操作命令 3、 了解文件与目录的默认权限,掌握文件权限的设置 4、 掌握文件的链接 二、 开发工具和运行环境 1、虚拟机VMware 2、Linux操作系统 三、 实验内容 ...

    Linux操作系统基础教程.pdf

    小白课,总结得很好、很容易看懂,看完一遍你就入门了! 讲得都是精华,IT大佬当年... Linux 文件权限与目录权限:chmod chown bash、shell 查找、比较、统计、甄别文件:grep find tee等 makefile ssh、samba、 gcc

    Linux系统中的超级权限的控制

    在Linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者。普通用户无法执行的操作,root用户都能完成,所以也被称之为超级管理用户。在系统中,每个文件、目录和进程,都归属于某一个用户,没有用户许可...

    Linux(红帽)操作系统9.0版本学习资料

    用户和组管理、第八章Linux文件系统权限、第九章管理Linux的联网、第十章管理Linux软件包和进程、第十一章 磁盘管理。 2、适合人群:目前学习Linux的人群(属于Linux学习的基础,所必要了解的东西) 3、能学到什么?...

    Linux系统的文件模式和访问权限介绍

    Linux系统每个文件都有三种类型用户ID:文件拥有者ID、同组用户ID、所有剩下用户ID。并且每种类型用户都有三种类型的访问权限:读、写、执行。文中还介了进程的分类及进程读/写/执行文件的过程。

    Linux系统C语言编程连接MySql数据库实现的用户用户组色权限管理系统(图形界面)

    《Mysql 最后程序的总结—— Linux系统C语言编程连接MySql数据库实现的用户角色权限管理系统》 修改的问题: 1、新增 添加用户组模块; 2、新增 显示用户组模块; 3、修改 新增用户模块 选择 其所属用户组 并把...

    详解Linux系统中设置SFTP服务用户目录权限的方法

    在工作或者学习的时候,我们常常会遇到这样的需求,限制一个Linux用户,让他只能在指定的目录下进行添加、修改、删除操作,并且只能使用sftp登录服务器,不能用ssh操作。这些可以通过配置sftp服务实现。 方法如下 ...

    Linux 操作系统开发手册.CHM

    3、Linux操作系统文件目录 4、Xshel1和Xftp的安装 5、Vi和Vim编辑器的使用 6、Linux用户管理相关操作 7、Linux运行级别和帮助指令 8、Linux指令之文件目录、时间日期、搜索查找、压缩和解压 9、Linux组管理和...

    Linux系统文件权限1

    用户数字修改文件权限:chmod chmod 665 syge.txt修改目录的权限:chmod –R 递归修改文件权限修改权限的字符表示法:chmod [用户

Global site tag (gtag.js) - Google Analytics