可读文件、可写文件
这个不多说来,你能打开的就是可读文件,你能修改的就是可写文件。
可执行文件
可执行文件格式ELF,MachO,PE
这个其实可以单独拿出来讲好几次,我们这里只提一提,不去研究可执行文件格式的数据结构。
可执行文件的格式不是指他的后缀名,在unix-like系统中并没有这样严格的概念,只有windows的可执行文件后缀名必须是exe。
这里的格式是指他的二进制的数据结构,一般由很多复杂的字段构成。操作系统可以辨认这些格式并按一定的规则解析程序。
- linux用的可执行文件格式是ELF格式。
- mac用的可执行文件格式是MachO格式。
- windoes用的可执行格式是PE格式。
- 值得一提,还有一种跨平台的可执行格式解决方案,LIEF。
操作权限
linux和mac虽然没有后缀名要求,但是却用操作权限来认证是否可执行。
- r代表可读,w代表可写,x代表可执行。
为了表达他们,我们可以用3位的二进制,一位代表是否可写,一位代表是否可读,一位代表是否可执行。例如:
二进制操作码 | 对应的字母序列 | 十进制 |
---|---|---|
000 | - - - | 0 |
001 | - - x | 1 |
010 | - w - | 2 |
011 | - w x | 3 |
100 | r - - | 4 |
101 | r - x | 5 |
110 | r w - | 6 |
111 | r w x | 7 |
对于一个可执行文件,需要它是可读的,因为操作系统需要读取它,还需要它是可执行的。
因此,我们得到了结论,只有两条可以满足这个条件。
二进制操作码 | 对应的字母序列 | 十进制 |
---|---|---|
101 | r - x | 5 |
111 | r w x | 7 |
现在我们要给每个用户都分配操作权限。但是我的系统中有1000个用户,这可不行。那需要多大的空间。
最简单的解决方案就是给他们分组,unix-like系统用了一套分组方案,只需要9个二进制就可以描述文件对所有用户的权限。
用户和用户组
用户和用户组的概念是在分时操作系统出现的时候被引入的,简单来说,用户就是一个账号,用户组就是用户们被划分成一个个集合,形成的一个个群体。
我们用u来代表一个用户,用g来代表一个用户组。
但是这样不在一个用户组的用户呢?那就用others,用o来代表他们。
这样对于一个文件来说,对操作系统中的每一个用户都有一个关系了。不是u就是g就是o。
文件的操作权限也可以用9个二进制来描述。
更加简单的,我们可以用3个数字来描述,他们的取值在0-7之间。
实战chmod命令
经过来上面的基础,我们终于可以来介绍chmod命令,这条命令可以赋予一个文件操作权限。
# 以下两种方式拥有所有权限
chmod 777 file
chmod a=rwx file # a是all的意思,指的是u、g、o三者
# 添加权限
chmod u+w file
chmod ug+x file
# 添加多种权限
chmod u=rw file
chmod ug=rwx file
# 删除权限
chmod u-w file
chmod ug-x file
# 以数字的形式
chmod 755 file # 请对照上面的表格