✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:Java案例分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:Linux文件的默认权限、软硬链接和属性
文章目录
- Linux文件的默认权限
- 创建默认权限
- 文件权限的一般计算方法
- Linux文件的软硬链接
- 硬链接
- 软链接(符号链接)
- Linux文件属性
- 第1列——文件权限
- 第2列——链接数或子目录数
- 第3列——文件所有者
- 第4列——文件所属组
- 第5列——文件大小
- 第6列——最后一次修改时间
- 第7列——文件名
Linux文件的默认权限
创建默认权限
每次新建一个文件或者目录后,用ls –l去查看的时候,新建的文件或者目录本身就有些权限存在。
通过实例总结规律如下
说明:通过实例发现,在 seashorewang 账户下创建的所有目录的权限是一样的,将新建目录的权限值转换为八进制数字是 775;新建的所有文件的权限也都是一样的,将新建文件的权限值转换为八进制数字是 664。
新建的目录和文件是有一定规律的,会有一个默认的权限。这个默认的权限就是umask。
umask设置了用户创建文件的默认权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般在/etc/bashrc、/etc/profile、$ [HOME]/.bash_profile或$ [HOME]/.profile中设置umask值。但是强烈建议不要通过文件修改umask的值。
名称:umask
使用权限:root
使用方式:umask [-S] [权限掩码]
参数:
-S:以文字的方式来表示权限掩码。
说明:umask可以用来设定[权限掩码]。[权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。
查看本系统中root账户与seashorewang账户下的umask。
说明:不同账户的默认umask可能是不同的。
umask的值为4为八进制数,其中第一位是特殊权限的设置,在此不作介绍。后面所说的umask都使用三位数字,指的是后三位。
创建文件默认最大权限为666(-rw-rw-rw-),默认创建的文件没有可执行权限x位。对于文件来说,umask的设置是在假定文件拥有八进制666的权限上进行的,文件的权限就是666减去umask的掩码数值;如果umask的部分位或全部位为奇数,那么,在对应为奇数的文件权限位计算结果分别再加1就是最终文件权限值。
创建目录默认最大权限777(-rwxrwxrwx),默认创建的目录属主是有x权限,允许用户进入。对于目录来说,umask的设置是在假定文件拥有777权限上进行,目录八进制权限777减去umask的掩码数值。
文件权限的一般计算方法
(1) 默认文件权限计算方法
-
假设umask值为:022(所有位为偶数)。
6 6 6 = = >文件的起始权限值
0 2 2 = = >umask的值
6 4 4 -
假设umask值为:045(其他用户组为奇数)。
6 6 6 = = >文件的起始权限值
0 4 5 = = >umask的值
6 2 1 = = >计算出来的权限,由于umask的最后一位数字是5,所以在其他用户组位再加1
0 0 1 +
6 2 2 = = >真实文件权限
(2) 默认目录权限计算方法
- 7 7 7 = = >目录的起始权限值
0 2 2 = = >umask的值
7 5 5
在wei目录下使用seashorewang账户与root账户分别创建一个文件与一个目录,然后用ls查看其详细信息。
说明1:seashorewang账户下的umask为0002,按照上面说的减法,所以seashorewang账户创建的文件的权限为666-002=664,也就是rw-rw-r–,创建的目录的权限为777-002=775,也就是rwxrwxr-x。而root账户创建的文件的权限为666-022=644,也就是rw-r—r–,创建目录的权限为777-022=755,也就是rwxr-xr-x。
说明2:通过比较我们发现使用root账户创建的文件与目录权限反而比seashorewang账户创建的文件与目录权限少,主要体现在对于group上,这是因为root的权限实在太大了,为了防止使用root时出现问题,所以通过umask对root创建的文件和目录加了限制。
将seashorewang账户的umask更改为022
说明:umask后面接数字用于修改umask的值。
将当前账户的umask改为044,建立目录与文件进行测试。
将当前账户的umask改为023,建立目录与文件进行测试。
注意:umask为偶数的位不要加1.
将当前账户的umask改为551,建立目录与文件进行测试。
说明:umask为0551,根据掩码方法计算:目录权限为777-551=226,也就是-w—w-rw-;文件的权限为666-551=115,115+111=226(因为umask的三个权限位都是奇数,所以每个位分别加1就是正确的权限)也就是-w–w-rw-。
Linux文件的软硬链接
Linux文件系统中的每一个对象都有唯一的inode索引,每一个inode号和文件系统的一个对象一一对应,要查看文件或目录的inode号可在ls命令中使用-i选项,每个目录下的.(当前目录)和…(上级目录)都是硬链接。
在Linux系统中内核为每一个新建立的文件分配一个inode(i节点),每个文件都有一个唯一的inode号。文件属性保存在索引节点里,在访问文件时,索引节点被复制到内存中,从而实现文件的快速访问。链接是在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。
Linux具有为一个文件起多个名字的功能,称为 链接。被链接的文件可以存放在相同的目录下,但必须有不同的文件名,而不用在硬盘上为同样的的数据重复备份。被链接的文件可以有相同的文件名,但是要存放在不同的目录下,只要对一个目录下的该文件进行修改,就可以完成对所有目录下同名链接文件的修改。对某个文件的各链接文件,可以给它们指定不同的权限,以控制对信息的共享和增强安全性。
硬链接
建立硬链接时,在别的目录或本目录中增加目标文件的一个目录项,这样一个文件就登记在多个目录中。创建硬链接后,已经存在的文件的i节点号会被多个目录文件项使用。
文件的硬链接数可以在用ls –l查看信息的第2列中看到,无额外链接的文件的链接数为1.默认情况下,ln 命令创建硬链接。ln命令会增加链接数,rm命令会减少链接数。
(1)普通用户不能对目录文件创建硬链接;不能在不同的文件系统至之间做硬链接。即链接文件和被链接文件必须处于同一个文件系统中。
(2)硬链接是文件的一个拷贝,其i节点号是一样的。 类似于复制,但复制只是一个简单的拷贝,是静态的;而硬链接不但是拷贝,是动态的,而且是可以共享资源。
硬链接是一个指针,指向文件inode号,系统并不为硬链接重新分配inode。硬链接可以节省空间,也是Linux系统整合文件系统的传统方式,但是不可以在不同文件系统的文件之间建立链接;只有root用户可以为目录创建硬链接。
软链接(符号链接)
软链接也称符号链接,是一个新文件。符号链接类似于Windows的快捷方式,符号链接实际上是特殊文件的一种。在符号链接中,文件实际上是一个文本文件,其中包含有另一个文件的位置信息。另一个文件是实际包含所有数据的文件。所有读、写文件内容的命令被用于符号链接时,将沿着链接方向前进来访问实际的文件。
使用 ln –s 命令建立符号链接。
硬链接和软链接的区别
(1) 符号链接是一个新文件,具有自己的i节点号;硬链接没有建立新文件,其只是一个指针。
(2) 符号链接没有硬链接的限制,可以对目录文件建立符号链接,也可以在不同文件系统之间建立符号链接。
(3) 当源文件被删除后,硬链接文件同样可以被使用,而符号链接文件将无法使用。
(4) 符号链接会显示为“链接文件名->指向的实际文件”,而硬链接通过文件名无法判断。
名称:ln
全称:link
使用权限:ln [options] source(源路径) dest(目标路径)
说明:创建软硬链接。
参数:
-s:创建软链接,如果不加参数默认创建的是硬链接。
-f:删除目标文件,然后创建连接。
Linux文件属性
通过ls –l或者ls –al命令来解读Linux文件属性
利用ls –al查看的信息一共有7列,每个文件信息由7个部分组成,分别为①文件权限;②链接数或子目录数;③文件所有者;④文件所属用户组;⑤文件大小;⑥文件最后被修改时间mtime;⑦文件名
第1列——文件权限
第一部分由10个字符组成,每个字符都有其自身的含义,其中10个字符的具体含义分别是:
第1个字符代表文件的类型:
[-]该文件是一个普通文件。
[d]该文件是一个目录,字母[d]是directory的缩写。
[l]该文件是一个符号链接,字母[l]是link(链接)的缩写。
[b]该文件是一个块设备文件,字母[b]是block的缩写。
[p]代表管道。
注意:
一个目录或者一个文件夹是一个特殊文件,里面存放的是其他文件和文件夹的相关信息。
符号链接的概念类似于windows里的快捷方式。
在UNIX类系统中,一个文件可以有多个文件名,一个文件的多个文件名之间互称为硬链接(Hard Link),这些文件名可以指向同一个文件,删除其中一个文件名并不能删除该文件,只有把指向该文件的所有硬链接都删除,这个文件所占用的空间才真正被释放,该文件才真正被删除。
设备文件是普通文件和程序访问硬件设备的入口,是很特殊的文件,它没有文件大小,只有一个主设备号和一个辅设备号。
操作系统对文件的权限管理可以总结为“两个三”:第一个三就是文件的所属分为 自己、同组与其他;第二个三是对文件的 读、写与执行。
文件属性第一列除了第一个字符外的其它9个字符可以3个一组分为三组,分别代表自己、同组与其他。每组有且只有三个字符,分别是[r]代表可读read;[w]代表可写write;[x]代表可以执行execute。这三个字符的顺序是不能改变的,每组中的第一个字符都代表可读;第二个字符都代表可写;第三个字符都代表可执行。如果不具有读写执行的某个权限则用[-]填补,也就是即使没有这个权限,也不能为空,用[-]代替。如下所示:
将/etc/passwd文件复制到/tmp/sanguo目录下,查看其详细信息并说明其文件权限情况。
说明:从passwd文件的权限部分的第一个字符可以看出这是一个普通文件;从其24个字符可以看到,创建文件的用户对该文件具有读写权限,但不可以执行,也间接说明了这个文件是个不可执行文件;从57个字符可以看出该文件对同组成员仅开放了读的权限;从8~10个字符可以看出该文件对其他用户也是仅开放了读的权限。
第2列——链接数或子目录数
如果所查看的文件为目录,则该字段表示的是该目录下面有多少个子目录;如果查看的是文件,则表示该文件的硬链接数。其实在Linux操作系统中文件的权限与属性都会记录到文件系统的inode之中,每个文件名都是指向这个inode的。即:这个字段表示的是该文件有多少个文件名。
查看passwd文件的链接数,为其创建2个硬链接后再查看其链接数,为其创建1个软链接后继续查看。
说明:在没有创建任何硬链接前passwd 文件的链接数为1,每次为其创建一个硬链接,该文件的链接数就增肌1,创建软链接不改变其链接数。从而说明,这项值指的是硬链接数,其中passwd_1与passwd_2互为硬链接。
说明:从查看的结果看,建立硬链接后的文件和原来的passwd文件的inode号是一样的,而创建软链接的inode号是不一样的。再次说明,硬链接其实指向的是同一个文件,只是不同的文件名而已。
第3列——文件所有者
该字段表示这个文件是属于哪个用户的 。UNIX类系统都是多用户系统,每个文件都有它的拥有者。只有文件的拥有者才具有改动文件属性的权利,当然root用户具有改动任何文件属性的权利。对于一个目录来说,只有拥有该目录的用户,或者具有写权限的用户才有在目录下创建文件的权利。该列指的是该文件的所属,也就是拥有者是谁。
第4列——文件所属组
组的概念可以想象成一个共同完成一个项目的团队,通过组的概念可以控制文件,让特定的用户查看、修改或运行;而不是一棍子打死要么全不让看,要么全让看。一个用户可以加入很多个组,但其中有一个是主组,就是显示在第4列的名称。该列指的是该文件所属的组。
第5列——文件大小
第5字段表示文件大小,如果是一个文件夹,则表示该文件夹的大小(注意是文件夹本身的大小,不是文件夹以及它下面文件的总大小)。文件大小在Linux操作系统中默认的大小单位是B,即你的文件大小是多少B。
第6列——最后一次修改时间
该列指的是文件的创建时间或者最后一次被修改的时间。
说明:这两个文件的最后一次修改时间是不一样的,因为/tmp/sanguo下的passwd文件是刚复制过来的,它的最后一次被修改时间肯定改变了。
第7列——文件名
即文件的名字,如果是一个符号链接,就会有一个“->”箭头符号,后面跟一个它指向的文件。符号链接类的文件的大小是所指向的文件的名称的字符数。文件名的第1个字符是“.”的文件为 隐藏文件。
查看/tmp/sanguo目录下的文件名称,尤其是软链接的文件名。
说明:软链接的文件名颜色有所区别并且用“->”,软链接的大小为其指向的文件名的名称字符数。
码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识,点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。