完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 michael_llh 于 2016-8-8 22:52 编辑
文件权限:故名思议就是我们使用操作一个文件的权限,在windows底下我们如果删除系统文件的时候就会提示你没有管理员权限,而这个就是需要用到系统级别的权限,我们还有一个调侃的说法,就是上帝权限。 在Linux底下我们查看权限的方法可以使用ls -l命令来得到权限的结果。在终端键入这个命令之后我们就可以得到该目录下的文件信息了。其中开头的就是我们的文件权限说明。 这里我们举个例子来说明: -rwxrwxrwx 总共有十个字符来描述一个文件,或者是文件夹。我们来一一分析。第一个“-”在这里表示的是普通文件,关于Linux底下的文件类型我们已经在上一篇中讨论过了,这里我们回顾一下这些文件的标示。 - :普通文件 d :目录文件,现在我们知道了Linux底下,目录也是一个文件 c :字符设备文件 b :块设备文件 p :管道文件 s :套接字文件 l :符号链接文件 所有的这些字母意义都来源于他们的英文缩写,这里我们不一一说明了。大家看到中文对应到英文单词就能够明白了。 后面的9个字符的话就是分成三组,每一组都是由r、w、x、-四个字符表示而成的,三组分别代表的是文件属主的权限,属主所在的用户组的权限,以及其他用户的权限。每一组当中从左往右就是可读、可写、可执行三个权限,标识写的是字母的是代表有这个权限,标识要是为“-”就表示没有这个权限。 对于文件权限的判断方法,比如说我们的编译生成一个a.out,它执行的时候需要输入一个文件,比如说是1.txt,对吧,这个有两种办法实现,一种是我们直接在代码中进行open,另外一种及时在我们执行的时候在./a.out后面跟上1.txt,这是利用main函数的argv对啊,具体的话这里不再进行说明了。 那么当我们执行a.out的时候对于1.txt的权限是怎么样的是我们需要关系的。在这里我们重点要明白的就是,谁!去执行的a.out,这个谁对于1.txt有怎么样的权限是我们要关注的,而对于程序本身而言是没有关系的,程序本身是相对于执行的那个用户而言,而1.txt也是要关注是谁来执行这个a.out.这样有点绕口。我们下面举个例子进行说明好了。 比如我们这里有两个用户:Mike 和 Jack 两个文件都是在Mike用户下创建的。具体的权限如下: 1.txt -rw-rw-r-- a.out -rwxrwxrwx 假设我们Mike和root用户是在同一个用户组,而Jack是在另外一个用户组当中,那么我们在Mike用户在执行a.out的时候我们看到它的权限是-rwxrwxrwx,那么对于Mike而言,它是a.out文件的属主,它对a.out的权限是rwx,所以这里执行和写都是没有问题的,那么这时对于1.txt,同样的话Mike也是它的属主,所以它的权限是rw-,所以这里a.out对他执行读写都是没有问题的。 现在假设我们切到Jack用户上面来执行a.out,我们能够得到它的权限是最后一组,也就是其他用户,权限是rwx,同样的对于Jack用户,对a.out读写和执行都是没有问题的,那么此时对于1.txt而言的话,Jack是其他用户,所以这里的它的权限是r--,所以这里对于Jack而言它只有读权限,写和执行权限都没有。 文字表述的话可能有点不大清楚,具体的话大家可以通过代码的形式来实现。 下面看一下Linux底下提供的一个API函数,access,这个函数就可以帮助我们判断文件权限,这个函数很简单,第一个形参是文件名,这个比较容易理解,第二个参数就是我们要判断的权限,总共有四个: F_OK:文件是否存在 X_OK:文件是否可以执行 W_OK:文件是否可写 R_OK:文件是否可读 很简单,调用之后直接对返回值进行判断就可以,如果返回0就表示有这个权限,如果返回值是-1就表示没有这个权限。很简单的用法。 还有一个就是chmod,这个在Linux基础命令学习的时候有时候我们会涉及到,它既是一个shell命令,同时也是一个API函数,我们可以通过man手册进行查看它的原型以及相应的用法。另外还有一个就是fchmod,两者的区别就在于一个是利用文件名,不需要打开文件就可以完成,另外一个就是打开文件之后得到文件描述符之后再进行更改权限的。 还有一点需要大家进行学习的就是当我们创建一个文件的时候我们会有一个默认的权限,不知道大家有没有注意到这一点。这里面就是涉及到文件权限掩码umask,当我们在终端键入这个命令之后我们就可以看到默认的文件权限了,一般是0044,最高位是没有用到的,后面三位就对应我们的三组权限。但是要注意这里是相反的权限,要进行一个取反的操作,比如这里是0044,那么我们创建一个1.txt的时候的权限就是rw--w--w-。简单解释一下,因为0044的二进制位为0000_0000_0100_0100,所这里对应的就是1111_1111_1011_1011,但是注意这里我们的权限控制只有三位,所以最后的权限应该是111_011_011,理论上我们应该得到的是rwx-wx-wx,但是实际上我们得到的是rw--w--w-,也可以明白,Linux底下做了一层保护,不让我们一开始就创建一个可执行文件。所以要让他获得可执行权限的话我们还需要自己进行更改。 |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
「含关键代码」基于AM3352/AM3354/AM3359的Linux开发案例分享
4874 浏览 0 评论
87366 浏览 0 评论
【高手问答】如何做到精通linux技术?资深工程师带你突破难点
4687 浏览 2 评论
3581 浏览 2 评论
解读Linux :先从创建一个文件夹用来存放jdk压缩文件开始
2459 浏览 0 评论
1962浏览 3评论
这是i.mx6ull的关于usb的宏定义,能解释下这些宏定义的意思
1329浏览 1评论
1239浏览 1评论
求解:aarch64交叉编译工具已经安装成功,环境变量已经配置,怎么将系统架构切换为ARM的架构
1306浏览 0评论
电脑和虚拟机可以互ping,电脑和开发板也可以互ping,但是虚拟机和开发板ping不通是什么原因
1215浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-1 12:22 , Processed in 1.021789 second(s), Total 65, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号