频道栏目
首页 > 资讯 > Linux > 正文

Linux文件权限命令

17-10-11        来源:[db:作者]  
收藏   我要投稿

【文件权限】

一个linux目录或者文件,都会有一个所属主和所属组。所属主,即文件的拥有者,而所属组,即该文件所属主所在的一个组。Linux这样设置文件属性的目的是为了文件的安全。例如,test文件的所属主是user0而test1文件的所属主是user1,那么user1是不能查看test文件的,相应的user0也不能查看test1文件。然后有这样一个应用,我想创建一个文件同时让user0和user1来查看怎么办呢?

这时“所属组”就派上用场了。即,创建一个群组users,让user0和user1同属于users组,然后建立一个文件test2,且其所属组为users,那么user0和user1都可以访问test2文件。

Linux文件属性不仅规定了所属主和所属组,还规定了所属主(user)、所属组(group)以及其他用户(others)对该文件的权限。

文件属性

–使用ls -l列出文件详情

drwxr-xr-x. 4 smile smile 31 9月  25 02:55 Desktop
drwxr-xr-x. 2 smile smile  6 9月  24 20:00 公共
drwxr-xr-x. 2 smile smile  6 9月  24 20:00 模板
drwxr-xr-x. 2 smile smile  6 9月  24 20:00 视频

第1列,包含的东西有该文件类型和所属主、所属组以及其他用户对该文件的权限。第一列共10位。其中第一位用来描述该文件的类型。上例中,我们看到的类型有”d”, “-“,其实除了这两种外还有”l”, “b”, “c”,”s”等。
d表示该文件为目录;
-表示该文件为普通文件;
l表示该文件为连接文件(linux file),上边提到的软连接即为该类型;
b表示该文件为块设备文件,比如磁盘分区
c表示该文件为串行端口设备,例如键盘、鼠标。
s表示该文件为套接字文件(socket),用于进程间通信。

    rwx    r-x     r-x
    1.所属用户用户权限
    2.所属用户所在的用户组 内成员的权限
    3.其他用户的权限
后边的9位,每三个为一组。均为rwx三个参数的组合。其中r代表可读,w代表可写,x代表可执行。前三位为所属主(user)的权限,中间三位为所属组(group)的权限,最后三位为其他非本群组(others)的权限。下面拿一个具体的例子来述说一下。

一个文件的属性为-rwxr-xr--,它代表的意思是,该文件为普通文件,文件拥有者可读可写可执行,文件所属组对其可读不可写可执行,其他用户对其只可读。
对于一个目录来讲,打开这个目录即为执行这个目录,所以任何一个目录必须要有x权限才能打开并查看该目录。例如一个目录的属性为drwxr--r--其所属主为root,那么除了root外的其他用户是不能打开这个目录的。
第2列,表示为连接占用的节点(inode),若为目录时,通常与该目录地下还有多少目录有关系,关于连接(link)在以后章节详细介绍。
第3列,表示该文件的所属主。
第4列,表示该文件的所属组。
第5列,表示该文件的大小。
第6列、第7列和第8列为该文件的创建日期或者最近的修改日期,分别为月份日期以及时间。
第9列,文件名。如果前面有一个.则表示该文件为隐藏文件。

权限说明
在linux中为了方便更改这些权限,linux使用数字去代替rwx,具体规则为r: 4 w:2 x:1 -:0举个例子,-rwxrwx—用数字表示就是770,具体是这样来的:
rwx = 4+2+1=7; rwx= 4+2+1=7; — = 0+0+0=0

[在linux系统中,默认一个目录的权限为755,而一个文件的默认权限为644.]

1.1 chmod 修改文件权限
语法:chmod [-R] xyz文件名
(这里的xyz,表示数字)
-R选项作用同chown,级联更改。

实例:
修改a.txt文件权限为当前用户可读可写,其他用户不可读不可写
chmod 700 a.txt
更改test文件夹以及文件夹内所有内容的权限为可读可写
chmod 777 test

[另:umask语法 (了解)
umask值为文件或目录默认权限需要减掉的数值
umask可以在/etc/bashrc里面更改,预设情况下,root的umask为022,而一般使用者则为002,因为可写的权限非常重要,因此预设会去掉写权限。]

1.2 更改文件拥有者和群组
语法:chown [选项]… [所有者][:[组]] 文件…

选项:
-c 显示更改的部分的信息
-f 忽略错误信息
-h 修复符号链接
-R 处理指定目录以及其子目录下的所有文件
-deference 作用于符号链接的指向,而不是链接文件本身
[注:通过chown改变文件的拥有者和群组。在更改文件的所有者或所属群组时,可以使用用户名称和用户识别码设置。普通用户不能将自己的文件改变成其他的拥有者。其操作权限一般为管理员。]

[实例]
改变拥有者和群组:
chown root:root zhiyou
改变拥有者:
chown root a.txt
改变群组:
chown :smile  a.txt
改变指定目录以及其子目录下的所有文件的拥有者和群组 :
chown -R -v root:mail test6

1.3 特殊属性
—-chattr修改文件的特殊属性
语法:chattr [+-=][ASaci [文件或者目录名]
+-=:分别为增加、减少、设定
A:增加该属性后,文件或目录的atime将不可被修改;
S:增加该属性后,会将数据同步写入磁盘中;
a:增加该属性后,只能追加不能删除,非root用户不能设定该属性;
c:自动压缩该文件,读取时会自动解压;
i:增加后,使文件不能被删除、重命名、设定连接、写入、新增数据;

增加i属性后不能在该目录中建立文件。
增加a属性后,只能追加不能删除。

[实例:]
用chattr命令防止系统中某个关键文件被修改:
chattr +i /zhiyou/test.conf
[然后用mv /etc/resolv.conf等命令操作于该文件,都是得到Operation not permitted 的结果。vim编辑该文件时会提示W10: Warning: Changing a readonly file错误。要想修改此文件就要把i属性去掉: chattr -i /etc/resolv.conf]
让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:
chattr +a /zhiyou/msg.txt


----lsattr列出文件/目录的特殊属性
语法:lsattr [-aR] [文件/目录名]
-a:类似与ls的-a选项,即连同隐藏文件一同列出;
-R:连同子目录的数据一同列出
[chattr的属性是级联生效的,不仅对当前目录生效而且会对目录下的文件同样生效。]

【其他命令】
2.1 which
which 命令的作用是,在 PATH 变量指定的路径中搜索可执行文件的所在位置。它一般用来确认系统中是否安装了指定的软件。

语法:which 可执行文件名称

[实例:]
[root@localhost Desktop]# which gcc
/bin/gcc
[root@localhost Desktop]# which ls
alias ls='ls --color=auto'
/bin/ls
[root@localhost Desktop]# which cd
/bin/cd

[注:查看环境变量:
echo $PATH]

【命令可以是下面四种形式之一:

是一个可执行程序,就像我们所看到的位于目录/usr/bin 中的文件一样。 属于这一类的程序,可以编译成二进制文件,诸如用 C 和 C++语言写成的程序, 也可以是由脚本语言写成的程序,比如说 shell,perl,python,ruby,等等。

是一个内建于 shell 自身的命令。bash 支持若干命令,内部叫做 shell 内部命令 (builtins)。例如,上面我本地环境中的 cd 命令,就是一个 shell 内部命令。

是一个 shell 函数。这些是小规模的 shell 脚本,它们混合到环境变量中。 比如上面讲到的 cd 命令,在实验楼环境中就是一个 shell 函数。

是一个命令别名。我们可以定义自己的命令,建立在其它命令之上】

2.2 whereis (了解)
whereis命令主要用于定位可执行文件、源代码文件、帮助文件在文件系统中的位置。whereis 命令还具有搜索源代码、指定备用搜索路径和搜索不寻常项的能力。
(1)命令语法
whereis [选项] 命令

(2)常用参数
参数  描述
-b  定位可执行文件
-m  定位帮助文件
-s  定位源代码文件
-u  搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件
-B  指定搜索可执行文件的路径
-M  指定搜索帮助文件的路径
-S  指定搜索源代码文件的路径

[实例:]
搜索 ls 帮助文件的路径:
whereis -m ls

2.3 locate
locate命令跟whereis命令类似,且它们使用的是相同的数据库。但whereis命令只能搜索可执行文件、联机帮助文件和源代码文件,如果要获得更全面的搜索结果,可以使用 locate 命令。

(1)命令格式
locate [选项] [搜索字符串]

(2)常用参数
参数  描述
-q  安静模式,不会显示任何错误讯息
-n  至多显示 n 个输出
-r  使用正规表达式做寻找的条件
-V  显示版本讯息

【实例】
搜索 Desktop 目录下所有以 zhi 开头的文件:    
locate Desktop/zhi
搜索etc目录下所有的cfg文件:
locate /etc/*.cfg

2.4 find【掌握】
find命令主要作用是沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作。Linux 下 find 命令提供了相当多的查找条件,功能很强大,对应的学习难度也比较大。

(1)命令格式
find [选项] [搜索路径] [表达式]
默认路径是当前目录,默认表达式为-print。
表达式可能由下列成份组成:操作符、选项、测试表达式以及动作。

(2)常用参数
参数  描述
-print  find 命令将匹配的文件输出到标准输出
-exec   shell 命令find 命令对匹配的文件执行该参数所给出的 
-name   按照文件名查找文件
-type   查找某一类型的文件
-prune  使用这一选项可以使 find 命令不在当前指定的目录中查找,如果同 时使用-depth 选项,那么-prune 将被 find 命令忽略
-user   按照文件属主来查找文件
-group  按照文件所属的组来查找文件
-mtime -n +n    按照文件的更改时间来查找文件,-n 表示文件更改时间距现在小于 n天,+n 表示文件更改时间距现在大于 n 天,find 命令还有-atime 和 -ctime 选项

[实例1:]
打印当前目录下的文件目录列表:
find  .  -print
打印当前目录下所有以.txt 结尾的文件名:
find  .  -name "*.txt" -print
打印当前目录下所有以.txt 或.pdf 结尾的文件名:
find  . 
\( -name "../../article/20220623/file.html" -or -name "*.txt" \)
打印当前目录下所有不以.txt 结尾的文件名:
find  .  ! -name "*.txt"

[实例2:]
打印当前目录下所有以.txt 结尾的符号链接:
find  .  -type l -name "*.txt" -print
打印当前目录下所有权限为 777 的 java 文件:
find  .  -type f -name "*.java" -perm 777
打印当前目录下 root 用户拥有的所有文件
find  .  -type f -user root

nl(number of line)

2.5 ln
ln命令用来为文件创件连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用”-s”选项。
注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。

语法 ln [选项] 源文件  目标文件
选项:
-b或--backup:删除,覆盖目标文件之前的备份; -d或-F或——directory:建立目录的硬连接; -f或——force:强行建立文件或目录的连接,不论文件或目录是否存在; -i或——interactive:覆盖既有文件之前先询问用户; -n或--no-dereference:把符号连接的目的目录视为一般文件; -s或——symbolic:对源文件建立符号连接,而非硬连接;

【注:源文件:指定连接的源文件。如果使用-s选项创建符号连接,则“源文件”可以是文件或者目录。创建硬连接时,则“源文件”参数只能是文件;】

在默认情况下,ln命令创建硬链接。ln命令会增加链接数,rm命令会减少链接数。一个文件除非链接数为0,否则不会从文件系统中被物理地删除。

对硬链接有如下限制: 不能对目录文件做硬链接。 不能在不同的文件系统之间做硬链接。就是说,链接文件和被链接文件必须位于同一个文件系统中。
相关TAG标签
上一篇:qcow2转vmdk后windows系统蓝屏了怎么办?
下一篇:虚拟机与Docker有什么不同?虚拟机与Docker的对比
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站