Linux服务器开发之:chmod()函数,chmod命令,以及文件屏蔽umask命令,程序修改umask,详细介绍+案例演示



1.依赖的头文件

#include<sys/stat.h>

2.函数定义:

//通过传入path中给定的文件名的方式来改变文件制定的权限

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

//通过传入文件描述符的方式为一个文件重设权限

int fchmod(int fd,mode_t mode);

注意:如果使用Linux的chmod命令时,得有root权限

3.关于mode_t的定义;

A:mode_t的定义实际就是unsigned int 形式的

B:但是函数chmod(const char *path,mode_t mode)在解释mode_t时时将这里的mode当成8进制去解释

4.参数mode有以下几种组合:

S_ISUID  (04000)  set-user-ID  (set  process  effective  user   ID   on

execve(2))                                                                                           //文件的(set user-id on execution)位

S_ISGID  (02000)  set-group-ID  (set  process  effective  group  ID  on

execve(2);  mandatory  locking,   as   described   in

fcntl(2);  take a new file‘s group from parent direc‐

tory, as described in chown(2) and mkdir(2))                                    //文件的(set group-id on execution)位

S_ISVTX  (01000)  sticky bit (restricted deletion flag, as described in

unlink(2))                                                                                           //文件的sticky位

S_IRUSR  (00400)  read by owner                                                                     //文件所有者可读取权限

S_IWUSR  (00200)  write by owner                                                                    //文件所有者具有可写入权限

S_IXUSR  (00100)  execute/search  by owner ("search" applies for direc‐

tories, and means that entries within  the  directory

can be accessed)                                                                             //文件所有者具有可执行权限

S_IRGRP  (00040)  read by group                                                                    //用户组具有可读取权限

S_IWGRP  (00020)  write by group                                                                   //用户组具有可执行权限

S_IXGRP  (00010)  execute/search by group                                                   //用户组具有可执行权限

S_IROTH  (00004)  read by others                                                                   //其他用户具有可读取权限

S_IWOTH  (00002)  write by others                                                                  //其他用户具有可写入权限

S_IXOTH  (00001)  execute/search by others                                                  //其他用户具有可执行权限

5.比如要将文件test的权限修改为644,那么可以采用以下几种方法:

chmod("文件名",S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);

chmod("文件名",0644);

chmod("文件名",420);

说明:

一、第一种方法是将00400和00200和00040和00004进行或运算,最终得到的结果就是0644(八进制),而八进制的0644就等于十进制的420,所以上面的几种方式等价的。

二、当我们给chmod函数传递参数时他会将对应的十进制的mode参数转换为相应的八进制进行运算。所以,当我们要给函数中传入的文件的权限改为644时传递给函数chmod的参数不能直接是644.而应该是420.这是因为十进制的420就等于八进制的644.

三、但是我们使用chmod命令时却可以直接输入644

chmod()函数案例:

6.关于Linux中chmod命令的使用:

数字表示法:

----------------------------------------------------

读取权限(符号:r)-- 4

写入权限(符号:w)-- 2

执行权限(符号:x)-- 1

没有授予权限 -- 0

案例说明:

chmod 644 test

chmod 666 /mydoc/*          //设置目录mydoc中所有文件的权限

chmod -R 666 /mydoc/*     //包括目录

----------------------------------------------------

使用文字改变权限

chmod u = rwx file1         file1文件的拥有者权限为rwx,    这句也可以改成:chmod u+rwx file1

chmod g = rwx file1         file1文件的组拥有的权限为rwx,这句也可以改成:chmod g+rwx file1

chmod o = rwx file1         file1文件的其他用户权限为rwx,这句也可以改成:chmod o+rwx file1

chmod u-x filex                删除file1文件拥有者的x权限

chmod ug=rw file1           同时将file1文件拥有者及组的权限设为rwx

chmod ug+x  file              同时增加file1文件拥有者及组的x权限

-------------------------------------------------------

文件权限屏蔽

umask [-S] [权限屏蔽]

所谓权限屏蔽是由4个八进制数字所组成的,这4个八进制数字会被用来决定新产生文件的访问权限。umask命令的设置就是不希望新文件的权限被开放。

一般而言,系统默认新建文件的访问权限是0666,新建目录的默认值是0777.而这个访问权限减去umask的设置,就是此文件真正的访问权限。

例如:若将umask值设为0222,则每个新建文件的默认权限为:

0666 - 0022 = 0644(等于rw-r--r--)

而目录的默认权限则为:

0777 - 0022 = 0755(等于rwxr-xr-x)

案例说明:

运行结果:



时间: 2024-10-05 06:02:39

Linux服务器开发之:chmod()函数,chmod命令,以及文件屏蔽umask命令,程序修改umask,详细介绍+案例演示的相关文章

Linux服务器开发之:stat(),fstat(),lstat()详细介绍+案例演示

 1.依赖的头文件 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> 2.函数定义: //通过传入文件路径,struct stat结构体指针的方式 int stat(const char *path, struct stat *buf); //通过文件描述符获取文件对应的属性.文件打开后这样操作 int fstat(int fd, struct stat *buf); //通过文件描述符

linux驱动开发之HelloWorld

最近实习,公司项目搞的是平板开发,而我分配的任务是将驱动加载到内核中. 准备工作,必要知识了解:加载有两种方式,一种是动态加载和卸载即模块加载,另一种是直接编译进入内核:Linux内核把驱动程序划分为3种类型:字符设备.块设备和网络设备.字符设备和块设备可以像文件一样被访问.它们的主要区别不在于能否seek,而是 在于系统对于这两种类型设备的管理方式.应用程序对于字符设备的每一个I/O操作,都会直接传递给系统内核对应的驱动程序:而应用程序对于块设备的操作, 要经过系统的缓冲区管理,间接传递给驱动

如何快速找出Linux服务器上不该存在恶意或后门文件

如何快速找出Linux服务器上不该存在恶意或后门文件.前段时间我在APT写作时注意到一个问题,我发现网上大多都是关于Windows恶意软件检测的文章以及教程,而关于如何寻找Linux系统上恶意软件的资料却少之又少.因此,这篇文章主要是向大家介绍一些有关检查Linux系统恶意软件的技巧和方法.话不多说,让我们进入正题. 校验二进制文件 有一件事需要检查确认即没有运行的二进制文件被修改.这种类型的恶意软件可以用sshd的版本来支持,以允许使用特定的密码连接到系统,甚至是一些二进制文件的修改版本,它以

DOS批处理器移动指定数量文件到一个临时文件夹,上传到linux服务器,并删除临时文件夹下的文件

DOS批处理器移动指定数量文件到一个临时文件夹,上传到linux服务器,并删除临时文件夹下的文件,上传需要依赖pscp.exe. 脚本如下: @echo off&setlocal enabledelayedexpansion #将400个xml文件从M:\dockerEPG\目录下移动到M:\scpepg\tmp\目录下 for /f "delims=" %%i in ('dir/a-d/b/s "M:\dockerEPG\*.xml"') do (set

(56)Linux驱动开发之二

内核基础 1.linux内核主要是由进程调度.内存管理.虚拟文件系统(字符设备驱动和块设备驱动).网络接口(网络设备驱动)和进程通信5个子系统组成的. 1)进程调度控制系统中的多个进程对CPU的访问,使得多个进程能在CPU中"微观串行,宏观并行"地执行. 2)内存管理的主要作用就是控制多个进程安全的共享主内存区域,当CPU提供内存管理单元时,linux内存管理完成为每个进程进行虚拟内存到物理内存的转换.一般而言,linux的每一个进程享有4GB的内存空间.0~3GB为用户空间,3~4G

linux命令(16)---文件权限管理命令

在之前使用过windows系统的都知道,可为文件设置权限,那么这权限是怎么设置的,之前在"linux(15)---用户管理命令"中提到,系统中的用户主要是实现资源分享,那在系统中的文件权限自然也是针对用户而言设置的权限,如果没有系统没有用户,那设置权限也无意义,文件权限彻底是"某用户针对该文件有哪些权限"可对文件进行哪些相关操作. 在linux系统中具有着"一切皆文件的概念",当然也分了很多文件类型,但是在文件权限设置上只分为"文件权限

Linux平台开发之Samba和Source Insight

有时我们使用windows平台惯了或者想远程连接服务器,直接在服务器上修改自己的程序.那么Samba将是一个不错的选择.随着Linux的普及,如何共享Linux下的文件成为用户关心的问题.其实,几乎所有的Linux发行套件都提供了一个很好的工具Samba--通过它可以轻松实现文件的共享.可以说Samba是架起Windows和Linux的桥梁. 关于Samba的安装与使用,不在本文过多详述,需要的朋友可以去网上搜索. 既然Samba将Windows与Linux之间实现了文件共享,那么问题来了,方便

嵌入式Linux驱动开发之helloword心得

自从选择了物联网这个专业,智能XX的字样牵动着每一个学习这个专业的孩子. 大家兴致勃勃的来到了学校,结果一切想象和自己的设想并不一样.想象中的各种智能般梦幻的场景变成了真实的高数/电路/模电等等诸如此类!不知道这个世界什么时候变得如此的浮躁,当大家的一段时间的努力看不到结果的时候就往往会不太感兴趣,模电大家都没听懂,于是大家自我安慰tmd学这玩意到底干什么?本人当初也是这样,可是到了后来接触了单片机,接触了应用电路的设计才知道那些课程那个没用啊!当初还是too young,too simple呀

linux驱动开发之GCC问题

最近正在学习驱动开发,进展到字符设备驱动开发阶段. 先不多说,首先把刚看的一篇学习驱动步骤的帖子记录如下: 1. 学会写简单的makefile 2. 编一应用程序,可以用makefile跑起来 3. 学会写驱动的makefile 4. 写一简单char驱动,makefile编译通过,可以insmod, lsmod, rmmod. 在驱动的init函数里打印hello world, insmod后应该能够通过dmesg看到输出. 5. 写一完整驱动, 加上read, write, ioctl, p