写在开始之前:文章所有内容均为自己理解,如有错误请告知!
文件的类型:
在linux中一切皆文件,任何的设备,目录,内存中的数据,执行的进程,都以文件的方式表现,
在linux中文件类型可以使用ls 加l选项查看,每种文件类型使用一个字符表示,如下:
- :
普通文件
d:
目录文件
l :
软连接
c:
字符设备
b:
块设备
s:
套接字文件
p:
管道文件
在linux中文件的类型不需要依靠后缀确定,在linux中确定文件类型使用的是文件开头的魔数,bz等程序要求特定的后缀名称只是程序的需要,与操作系统无关。
在linux中可以使用hexdump查看文件的魔术
如: hexdump -C -n 10 /bin/bash
#hexdump -C -n 10 /bin/bash
00000000 7f 45 4c 46 02 01 01 00 00 00 |.ELF......|
linux 中程序文件的魔术 ELF
虽然linux不依靠文件后缀区分文件类型,但是不同的文件后缀可以使文件拥有不同的着色,该配置在/etc/DIR_COLORS中定义。
文件的权限:
文件的权限在进程进行文件操作时,对进程发起者身份进行权限审核。现实了系统资源隔离及对操作系统安全防护。
linux,文件的权限需要文件系统来支撑,也就是说文件的权限信息并非存储在数据块中,而是存放在了inode中,或者说不同的文件系统,其组织数据的格式并不相同。
linux文件的权限可以分为两种,一种是文件的操作权限,一种是文件的所有者。文件的操作权限约束了除root外的所有人包括文件的所有者,文件的所有者同样受文件的操作权限控制,但文件的所有者可以更改文件属性信息中的权限信息,也就是文件的操作权限。所有者无法更改文件的所有者,
文件的操作权限将发起者划分成为了三个部分,即文件的所有者,文件的所属组,其他用户。并分别赋予对应的权限。这是文件的基本权限,但是这种文件属主属组的划分方法过于单一,所以acl作为文件访问者身份的扩展。
文件的所有者:
文件的所有者,就是文件的所有者。一般是文件的创建者,而文件的属组一般是文件创建者的主组。即passwd文件中对应的组id,但是以上判定并不绝对。文件的所有者可以后期更改。但是只能使用root身份进行更改。普通用户即便是文件的所有者也无法更改文件的所有者为其他用户。文件的所有者也可后期进行更改,root可以随意更改,即便所有者并不在所属组中。而所有者可以更改所属组为所有者所在的组的其中一个。
文件的操作权限:
文件的操作权限约束了,对文件发起访问的访问者所能具体执行操作,操作行为分为三种,即读·写·执行(read·write·execute)。在文件权限设定中通常是权限相配合使用。即文件可以同时拥有三种权限的一种,或多种。
文件权限表示使用对应的字母,或八进制数。表示时将每类用户划分为一组,一组中包含rwx三种权限。每组使用3个对应权限的字母或一个八进制的数字表示,每类发起者对应一组相应的权限。
或者说权限的表示法,采用的标志位表示法,文件权限一共针对三类,每类用户都有3种操作,所以表示文件的权限一共需要 9位标识位。即--- --- ---,每一位对应相应用户的具体操作权限。具有权限的位置使用对应功能的字母进行占位,无权限使用-占位。或者使用二进制数字进行占位,表示时每组转换为一位八进制数。
drwxr-xr-x. 2 root root 6 3月 18 22:58 图片
创建文件的默认权限:
创建文件与创建目录时都会有默认的权限,决定这个权限的是umask值,其中umask值起到的作用是,文件的初始权限减去umask值对应的权限,得到的权限便为文件或文件夹的最终权限。其中文件的初始权限为666,文件夹的初始权限为777.系统在用户登录时会根据id判断登录的用户具有的umask值得大小。该段判断语句在/etc/bashrc文件中,bash加载时调用执行。
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002
else
umask 022
fi
umask:
设定umask值,umask决定了创建文件的默认权限的最终权限,umask值是以八进制数显示的二进制数,一共9位2进制数每一位表示对应的身份及对应的权限。如果umask值被置位则表示创建的新文件不应该具有该权限。或文件的权限+umask=666,文件夹的权限+umask=777.umask值的计算不是数值计算而是对应权限位的删除。然后以八进制数表示最终结果。
umask:查看umask值
umask:设定umask值
数值表示:umask 777
即设置umask值为777或 rwx,rwx,rwx。最终结果
文件:rw-,rw-,rw-,减去 rwx,rwx,rwx,即---,---,---,或000;什么权限都没有
目录:rwx,rwx,rwx,减去rwx,rwx,rwx,即---,---,---,或000;同样什么权限也没有
模式表示:umask u=rwx,g=rwx,o=rwx
该表示法表示的最终能获取到的权限,如果转换为数值,则对位取反。
u=rwx表示所有者最终可以获取到rwx权限,g,o同样这时的umask值应该为000
-S:显示以模式法表示的umask
手动设置umask值,无法长期保持有效,即只在本次登录有效,如果需要长期有效。则在/etc/bashrc定义后重新进行定义。可以写入文件~/。bashrc中,以命令的形式
文件的权限:
文件的权限分为:基本权限与特殊权限,基本权限是为了与特殊权限做区分。
我在欠你一张图吧,反正之前已经欠你3张了。
文件的操作发起者被分为三类。文件的所有者,文件的所属组。以及其他用户。每类用对应3种操作权限,即读写执行。
访问文件,进行权限匹配之前,首先进行身份匹配,身份匹配顺序为:文件的所有者,文件的所属组,其他用户(我为啥想起了临时工,好吧他们也是背锅侠)一旦身法匹配,不再去匹配下一个身份,即权限无法叠加。如某用户既是文件的所有者,同时也在文件的所属组中,身份匹配时首先进行文件的所有者匹配,匹配成功。不进行后续匹配,所以发起者访问的文件使用的身份是文件的所有者。所具有的文件权限为所有者的权限。后续的身份不对权限产生影响。
对于root用户,对任何的文件都有rw权限。而且3种身份中只要有一种具有执行权限,即只要具有一个执行位,无论是谁的,root便具有该文件的执行权限。
当一个文件为可执行的程序时用户对该文件发起访问。该可执行的文件会对发起者的身份进行审核。即单纯的验证发起者是否有权限执行该程序。如果有权限执行该程序,那么该文件如果需要进行权限审核的操作,被审核的身份为该用户的权限,这里的用户权限包括用户的权限以及该用户加入的全部组的权限。,其中程序的权限仅是用于验证用户权限,如果具有特殊权限位除外。
基本权限:
r:read读权限,即有此权限,用户可以读取文件的内容。
w:write写权限,即有此权限,用户可以将内容写入文件,包括文件的属性。
一般w的使用需要配合r。当无r权限是只是不能读取,但不意味着不能写入。可以使用>重定向进行写入。而且使用命令更改文件的属性同样需要文件的w权限,比如touch更新时间。也就是说w权限不光决定着数据块的数据写入,同时也决定着inode表的属性写入。
x:execute执行权限,即有此权限,用户可以执行文件,可执行的文件一般是二进制程序,或者脚本文件。
文件夹的权限:
目录的权限对于root来说并没有影响,即便000,也就是说都没有执行权限。root一样可以进入目录,并查看,创建,删除文件
基本权限:
r:read文件夹的读权限。文件夹的内容包括两部分,一部分是文件夹自身的属性,一部分是文件夹中文件的名称与inode的映射关系。文件夹的读权限决定能否读取文件夹的数据,也就是文件的名称与inode的映射关系
w:write文件夹的写权限。决定了能否删除文件夹中的内容,也就是更改文件夹文件的数据块,即映射关系。
x:execute文件夹的执行权限,决定了能否将工作目录更改为该文件夹。没有该权限位,意味着无法读写删除文件,即便没有读写权限,也可以通过路径访问文件,但是需要具有被访问的文件的相关权限。