一、Linux文件角色
Linux为了方便对文件针对不同用户做权限控制,针对文件定义了三种角色:文件所有者(owner)、用户组(group)和其他人(others)。
二、文件权限
r:读权限 w:写权限 x:执行权限
三、Linux文件属性
Linux查看文件属性最常用的命令ls,在终端执行ls -al显示全部文件的详细文件属性,内容显示如下:
这里我们解释一下各列标识的信息。
第一列代表整个文件的类型与权限。第一个字符标识文件的类型:d表示目录,-表示文件,l表示连接文件,b表示设备文件里面可供存储的接口设备,c表示设备文件了里面的串行端口设备,例如鼠标或者键盘,linux与windows不同,linux没有严格的文件概念,无论是目录、设备可执行程序在linux中具备识别为文件。接下来的字符以三个为一组,一共有三组以rwx分别表示文件所有者、用户组和其他非本用户组人的文件权限,减号-代表没有权限。
第二列标识多少文件名连接到此节点。关于文件系统的节点i-node暂时不讲解
第三列表示文件的所有者账号。这里当前目录文件的所有者是zhangyanqing.
第四列表示文件所属的用户组
第五列表示文件的容量大小
第六列显示文件的创建或者最近的修改日期
第七列为该文件的文件名,文件名前缀是英语句号的表示是隐藏文件。
四、改变文件属性
1 - chown 既可以改变文件所有者也可以改变文件所属用户组
chown [-R] 账号名称:组名 文件或者目录
参数说明
-R : 进行权限的递归更改也就是连同目录下所有的子目录和文件都更改
注意点:
改变的文件所有者和所属用户组必须是在系统中出现的账号和用户组,账号可以查看/etc/passwd确定,用户组名是否有效可以查看
/etc/group文件
使用示例:
## 1.将install.log文件的所有者修改为user1
chown user1 install.log
## 2.将install.log的文件所有者修改为user1,所属用户组修改为group1
chown user1:group1 install.log
## 3.将install.log文件所属用户组修改为group2
chown :group install.log
2 - chgrp 改变文件所属用户组
chgrp [-R] 用户组名 文件名或目录名
参数说明:
-R : 进行文件所属用户组的递归更改,也就是连同子目录下的所有文件、目录权限一起更改
注意点:
修改的用户组名必须是在系统中存在的,可以查看/etc/group确认
使用示例
## 1.修改目录/tmp/install.log文件的所属用户组为group2
chgrp group2 /tmp/install.log
3 - chmod修改文件的权限
1.数字类型改变文件权限
权限分数:
r:4 w:2 x:1
用户权限的数字表示即为用户所属身份权限分数的累加
chmod [-R] xyz 文件或目录
-R 递归修改文件或者目录的权限
x:文件所有者文件权限的数字表示
y:文件所属用户组的文件权限的数字表示
z:不属于用户组的其他用户的文件权限的数字表示
使用示例:
## 1.修改/temp/install.log文件的权限为所有者可读可写可执行,用户组可读可执行,其他用户无读写执行权限
chmod 750 /temp/install.log
2.符号类型改变文件权限
chmod [ugoa] [+-=] [rwx] 文件或目录
参数说明:
ugoa : 分别表示文件所有者(u)、文件所属用户组(g)、其他人(o)、所有用户(a)
+-= : 分别表示增加权限、去除权限、设置权限
rwx :分别表示读、写和执行权限
## 1.设置文件.bashrc的权限为文件所有者可读可写可执行,用户组可读可执行
chmod u=rwx,g=rx .bashrc
## 2.剥夺用install.log文件户组对它的写权限
chmod g-w install.log
4 - touch修改文件时间
Linux会记录文件的三个变动时间:
mtime(modification time):文件内容修改时会更新这个时间,这个也是ls -l默认显示的时间
atime(access time):文件内容被访问时会更新该时间
ctime(status time): 文件状态发生改变,这里指的状态不是指的内容而是例如权限与属性被修改了会更新时间
touch可用于修改文件时间或者创建文件
touch [-acdmt] 文件
参数说明
-a 仅修改访问时间atime
-c 仅修改状态时间ctime,若文件不存在则不创建新的文件
-m 仅文件内容修改时间mtime
-d 后面接可以修改的日期而不用目前的日期,也可以使用--date="日期或者时间"
-t 后面接可以修改的时间而不用目前的时间,格式为YYMMDDhhmm
注意点:
除了可选项-c所有的其他可选项或者默认的touch命令当指定的文件不存在均会新建一个文件
使用示例
## 1.修改文件test.txt的访问日期为20190101
touch -a --date=2019-01-01 test.txt
五、Linux文件隐藏属性
1 - lsattr查看文件的隐藏属性
lsattr [-adR] 文件或目录
参数说明
-a 将隐藏文件的隐藏属性也显示出来
-d 如果命令后接的是目录则只显示目录本身的隐藏属性而非目录内的子目录和子文件
-R 连同子目录的属性数据一并列举出来
使用示例:
lsattr -R 123.txt
终端显示结果: ----ia---j--- /home/zhangyanqing/Documents/123.txt
终端返回的结果----ia---j--就是文件的隐藏属性,下面我们列举下文件的隐藏属性
A : 当设置了该属性,若你访问此文件或目录时,文件或目录的访问时间atime将不会被修改,可用于避免I/O较慢的机器过度访问磁盘对机器较慢的机器有帮助
S :一般文件时异步写入磁盘,如果加上S这个属性那么你对该文件内容的任何修改均会同步写入到磁盘中
a : 当设置了该属性之后,这个文件只能增加数据而不能删除或者修改数据,只有root用户才能设置这个属性
c : 当设置该属性之后,将会自动在存储的时候先对此文件进行压缩再存储,在读取的时候会自动进行解压缩,对大文件比较有用
d : 当dump程序被执行的时候,设置该属性可以使文件和目录不被dump备份
i : 设置该属性可以使一个文件不能被删除、重命名、设置连接也无法写入或者添加数据,只有root有权限设置这个属性
s : 当设置了这个属性,当文件被用户使用rm等命令删除,他将会完全从硬盘中删除
u : 与s属性相反,如果设置了u属性即使文件被删除了但是实际上文件内容仍然存在于磁盘中,可以后期恢复该文件
2 - chattr设置文件的隐藏属性
chattr [+-=][ASacdistu] 文件或目录名称
参数说明:
+ : 增加一个文件隐藏属性,其他原本存在的属性不变
- : 删除某一个隐藏属性,其他原本存在的属性不变
= : 将文件的隐藏属性重置为后面接的参数
隐藏属性ASacdistu的说明参考前面lsattr关于文件隐藏属性的说明
使用示例:
## 1.为文件test.sh添加i权限,设置之后test.sh不能被修改、删除、重命名
chattr +i test.sh