Linux文件属性查询与管理

Stella981
• 阅读 593

一、Linux文件角色

Linux为了方便对文件针对不同用户做权限控制,针对文件定义了三种角色:文件所有者(owner)、用户组(group)和其他人(others)

二、文件权限

    r:读权限 w:写权限 x:执行权限

三、Linux文件属性

    Linux查看文件属性最常用的命令ls,在终端执行ls -al显示全部文件的详细文件属性,内容显示如下:

Linux文件属性查询与管理

    这里我们解释一下各列标识的信息。

    第一列代表整个文件的类型与权限第一个字符标识文件的类型: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
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
2年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这