今天被csdn坑了!昨晚写了一夜的博客,保存到线上草稿了!可是今天打开博客,草稿箱里也找不到,发布的文章中也找不到!作为一家专门研讨技术的网站,居然还会在技术上出现这种问题,这分明就是在打自己的脸啊!
抱怨的话不多说,现在只好重起炉灶、自认倒霉了。为就接着从文件权限管理开始说,等那天有精力了再把消失的那一段内容给补上。
文件/目录的默认权限和隐藏权限
在前面几篇博客中为也已经提过,文件/目录的基本权限有rwx,那么除了这三个基本权限,Linux使用的ext2/ext3文件系统还存在着文件/目录的隐藏权限。隐藏权限可以使用chattr来设置,用lsattr来查看。隐藏权限最重要的特性就是它可以设置让文件主都无法修改,这对于系统安全性来说是至关重要的。
文件的默认权限umask
我们都知道,文件在创建时如果不指定具体的权限,那么系统会给它分配一个默认的权限,这个默认权限就是umask。
//我们可以使用umask命令来查看默认权限
umask
0022
直接输入umask而不带任何参数,我们就会得到0022这四个数字。第一个数字我们先不要管,后面三个数字022就是文件系统的默认权限!
这里有个注意点,022表示文件/目录在默认权限的基础上被剥夺的权限,除此之外,文件和目录的默认权限是不同的,文件的默认权限是rw-rw-rw,目录的默认权限是rwxrwxrwx;因此,当我们创建一个文件,那么文件的默认权限就是:(rw-rw-rw)-(—-w–w-)=(rw-r–r–);
那么目录的默认权限就是:(rwxrwxrwx)-(—-w–w-)=(rwxr-xr-x)。
umask除了上述数字表现形式,还有字符表示形式:
//只要增加参数-S,即可以字符表示
umask -S
u=rwx,g=rx,o=rx
- 修改umask
umask 002 //这样即可修改umask值
PS:不同的用户身份所对应的默认umask值是不一样的!root的默认umask是022,也就是root下的umask会拿掉较多的权限,这是出于安全性的考虑;普通用户身份默认的饿umask值是002,即保留用户对文件/目录的读/写权。
关于umask的设置可以查看etc/bashrc这个文件,但不要修改这里面的值。
文件的隐藏属性
- 设置文件的隐藏属性chattr
chattr [+-=] [option] 文件/目录
以下这些参数都是指文件的隐藏属性:
A | 设置了A后,当访问文件/目录后,它的atime不会被改变,这可以防止IO慢的机器频繁的访问磁盘,对于速度慢的计算机很有帮助 |
---|---|
S | 一般文件都是异步写入磁盘的,设置了S之后,文件是同步写入磁盘 |
a | 只能增加数据,不能删除和修改数据,这个参数职能root设置 |
c | 设置这个参数之后,文件会自动压缩,要读的时候自动解压 |
i | 设置它之后,文件无法删除、改名字、设置连接、无法写入数据,对于文件的安全性很有帮助,但只有root才能使用它 |
s | 设置它之后,如果一旦文件被删除,那么它将永久地从硬盘中删除 |
u | 设置它之后,如果文件被删除,其实它还在磁盘中,可以找回该文件 |
Ps:a和i比较常见,他们都需要root权限。
例1:
//取消文件chai的隐藏属性i
chattr -i /chai
例2:
//给文件chai增加隐藏属性i
chattr +i /chai
PS:常见的隐藏属性是a、i,a只能增加数据,i是啥也不允许干。就像日志文件,它的隐藏属性是a,即只能增加数据,无法修改原有的数据,更不能删除、修改文件名。
- 显示文件隐藏属性lsattr
lsattr [option] 文件/目录
a | 设置它之后,能将隐藏文件的隐藏属性也显示出来 |
---|---|
d | 它后面必须接目录,表示只显示目录本身的隐藏属性,而不显示目录中文件和目录的隐藏属性 |
R | 后面接目录,连同子目录的隐藏属性都显示出来 |
查看文件的类型:file
当我们要查看一个文件是由什么类型的数据组成的,例如这个文件是ASCII文件,还是data文件,还是二进制文件,可以使用file命令查看。
输入:file /chai
显示:Ascii、data……
命令与文件的查询
- 脚本文件的查询
which [-a] 命令的名字
-a:将所有path路径下符合条件的命令都列出来,而不仅仅只列出找到的第一个命令。
例子:
which ipconfig
PS:由于不同用户身份的path是不一样的,所以which得到的结果也是不一样的。
- 寻找指定文件whereis
一般,我们不使用find进行文件的查找,因为速度很慢,一般用locate和whereis来查找;因为locate和whereis是对数据库进行查询,并没有对硬盘进行查询,所以速度相对较快,而find则是对硬盘进行查询。
whereis [option] 文件/目录
-b:只找二进制文件
-m:只找在说明文件manual中出现的文件
-s:只找源文件source
-u:查找不在上述三个选项中的其他文件
PS:which的一般用户找不到ipconfig指令,因为which只在path中找,而whereis是在整个文件系统中找;虽然一般用户不具备ipconfig的使用权限,但这个文件确实存在于文件系统中,所以whereis能找到。
PS:Linux会将所有的文件记录在一张数据库表中,那么在使用whereis和locate查找文件时是在这张表中查找,有时候由于这张表更新的比较慢,所以可能会查找到已经删除的文件,也有可能找不到最新创建的文件。
- locate
locate [option] 关键字
-i:忽略关键字大小写
-r:关键字可以用正则表达式代替
locate和whereis一样,都是去查找数据库,而这个数据库一般是一天只更新一次,所以我们找不到文件时使用updatedb命令来更新数据库,这个更新可能要等上几分钟。
- find
find [PATH] [option] [action]
//PATH表示在哪个目录下寻找
//newer file中file是一个文件,表示寻找比这个文件更新的文件
option+action的第一种取值:
option=mtime/ctime/atime
action=n/+n/-n/newer file
//n是一个数字,若n为4表示:往前推第四到第五天的那一天;若n为+4表示:往前推第五天到很久以前;若n为-4表示往前推第四天到今天。
option与action的第二种取值:
gid/uid = 用户/用户组的id号
user/group 用户/用户组的名字
nouser:寻找在文件etc/passwd中不存在的用户
nogroup:寻找在etc/group中不存在的用户组
//PS:若一个文件从网上下载来,或者etc/passwd下把一个用户删了,这时候才会出现无主的文件,才可能使用到最后两个参数
option与action的第三种取值:
name 文件名:根据文件名查找
size [+-] SIZE:查找比SIZE大/小的文件
type TYPENAME:查找文件类型是TYPE的文件,文件类型有:f(普通文件)\b\c\s\d\l\p