Linux文件权限与文件类型(超详解)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_45160969/article/details/98333590

文件类型

首位字母

首位字母 解释
- 普通文件f
d 目录文件directory
l 符号链接文件link 软链接 快捷方式
b 块文件block 随机读,随机存的设备 (光驱光盘,硬盘) 表示为装置文件里面的可供储存的接口设备(可随机存取装置);
c 字符设备character 顺序存取设备-键盘鼠标 表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
s 套接字文件socket ip port
p 管道文件pipe

文件权限

rwx,st rwxrwxrwx. acl access control list

Linux权限管理:
chgrp:改变档案所属群组
chown:改变档案所属人
chmod:改变档案的属性(文件或文件夹)
代表字符 权限 对文件的含义 对目录的含义
r 读权限 可以读文件的内容 可以列出目录中的文件列表
w 写权限 可以修改该文件 可以在目录中创建删除文件
x 执行权限 可以执行该文件 可以使用cd命令进入该目录

r=4(Read,读取权限):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目 录的权限。

w=2(Write,写入权限):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。

x=1(eXecute,执行权限):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
chmod
更改操作权限(chmod)
系统管理员和文件属主可以根据需要来设置文件的权限,有两种设置方法:文字设定法和数值设定法。
(1)文字设定法
chomd的文字设定法的格式为:chmod [ugoa][±=][rwxugo]
其中第1个选项表示要赋予权限的用户,具体说明如下:
u:属主 g:所属组用户 o:其他用户 a:所有用户
(2)数值设定法
chmod的数值设定法的格式为:chmod n1n2n3
其中n1、n2、n3分别代表属主的权限、组用户的权限和其他用户的权限,这三个选项都是八进制数字。例如:
chmod 755 adduser //对文件adduser的属设置可读、写和执行的权限,所属组和其他用户只设置读和执行权限,没有写权限
chmod 600 user1 //取消组用户和其他用户对文件user1的一切权限(原权限为-rw-rCrC)
chown
更改属组或同组人
改变文件的属主和组可以用chown命令,命令格式为:chown [-R] 。 例如:

        chown osmond user1      //将文件user1的属主改为osmond
        chown osmond.osmond user1      //将文件user1的属主和组都改成osmond
        chown -R osmond.osmond mydir      //将mydir目录及其子目录下的所有文件或目录的属主和组都改成osmond

设置文件和目录的生成掩码
用户可以使用umask命令设置文件夹的默认生成掩码。默认的生成掩码告诉系统当创建一个文件或目录时不应该赋予哪些权限。如果用户将umask命令放 在环境文件(.bash_profile)中,就可以控制所有的新建文件或目录的访问权限。其命令格式为:umask [u1u2u3]
其中,u1、u2、u3分别表示的是不允许属主有的权限、不允许同组人有的权限和不允许其他人有的权限。例如:
umask 022 //设置不允许同组用户和其他用户有写权限
umask //显示当前的默认生成掩码

  1. 对文件操作的权限:

三种: 读、写、执行。

  1. 文件的访问方式:

三种: owner/group/other。

拥有者 owner
也就是文件的所有者,通常是建立文件的用户。在linux系统中,每个文件都有一个所有者。每一个用户都会被分配唯一的uid。

用户组
一个用户组包含若干用户。值得注意的是:一个用户也可以属于多个用户组,也可以不属于任何用户组。每一个用户组都会被分配唯一的gid。

其他人
对于一个文件来说,如果某用户既不是owner,也和owner不在同一个用户组,那么该用户对于文件来说就是其他人。

另外:在linux系统中,

     ①各个用户账号的信息都保存在/etc/passwd文件中;

     ②密码保存在/etc/shadow文件中;

     ③用户组信息保存在/etc/group文件中。 

用数字表示:

1.第一个属性,表示这个文件的类型,常见的有:文件、目录或连接文件等。

  1. 第二列表示链接占用的节点,这个主要是和link node有关,初学linux的可以先不用研究。

  2. 第三列表示文件的“拥有者”,即owner。

  3. 第四列表示拥有者的“用户组”。

  4. 第五列表示这个文件的大小。

  5. 第六列表示文件的最后“修改时间”(即modification time, 简称mtime),对于新创建的文件就是指其创建的时间。

Linux的文件权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以
控制文件如何被他人所存取。利用ls -l显示的文件属性中,第一个字段是档案的权限,共有十个位

例如:-rwxr-xr-w

第一种表示方法:文件类型

接下来的9位,按照每三个字符为一组共三组,每一组均为『rwx』 的三个参数的组合,每一组又依次代表使用者(u)、群组(g)、其他人(o)的权限,每组中的r(可读),w(可写),x(可执行),-(没有权限)代表一种权限,要注意的是,这三个权限的位置不会改变

当权限用数字表示时,4,2,1分别代替r,w,x;此时上述-rwxr-xr-w权限属性用数字表示就是chmod 755 qmfsun.txt

755:共有三个数字,按照顺序,

第一个数字代表u(拥有者)权限,

第二个数字代表g(群组)权限,

第三个数字代表o(其他人)权限

每一个数字都是通过4(表示r),2(表示w),1(表示x)三个数字相加得到的

所以数字表示:只是将字符中的r,w,x分别用4,2,1替换在相加的结果
用法:

chmod [{ugo} {±=} {xrw}] 文件或目录(可以是多个文件,以空格分开的要改变权限的文件列表,支持通配符)

操作符号可以是:
  + 添加某个权限。
  - 取消某个权限。
  = 赋予给定权限并取消其他所有权限(如果有的话)。
设置 mode 所表示的权限可用下述字母的任意组合:
  r 可读;w 可写;x 可执行。
第二种表示方法:数字类型

chmod 权限 文件名

r=4(Read,读取权限):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目 录的权限。

w=2(Write,写入权限):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。

x=1(eXecute,执行权限):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。

0表示没有权限,用"-"表示,

通过r=4;w=2;x=1将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。

即:u,g,o分别对应一个八进制数字,每个数字都是是由r=4;w=2;x=1相加的结果得出来的

-rw------- (600) – 只有属主有读写权限。
-rw-r–r-- (644) – 只有属主有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) – 只有属主有读、写、执行权限。
-rwxr-xr-x (755) – 属主有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx–x--x (711) – 属主有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) – 所有用户都有文件读、写权限。这种做法不可取。
-rwxrwxrwx (777) – 所有用户都有读、写、执行权限。更不可取的做法。

[root@localhost ~]# chmod 664 a.txt

按照上面的规则,rwx合起来就是4+2+1=7,一个rwxrwxrwx权限全开放的文件,数值表示为777;而完全不开放权限的文件“---------”其数字表示为000。

用助记语法比较灵活,组合起来比较方便;比如:

u=r+x 为文件属主添加读写权限;

ug=rwx,o=r 为属主和属组添加读、写、执行权限,为其它用户设置读权限。

a+x 为文件的属主、属组和其它用户添加执行权限;

g=u 让文件的属组和属主和权限相同;

对于目录权限的设置,要用到-R参数;

参数:-R 递归更改,即目录下的所有子目录以及子目录下的所有文件 、目录的属性都更新成为这个属性。

用法:chmod -R 755 /opt/huawei;-R表示递归处理,如果不加-R,则改的只是文件夹huawei的属性,文件夹里面的文件属性没改,如果我们为一个目录及其下的子目录和文件具有相同的属性,就可以用-R参数;

[root@localhost ~]# chmod -R a+rwx testdir/
对于一个文件夹

1.对于一个文件夹bin,不加-R参数,执行chmod 644 bin,只会改变文件夹本身的权限而不改变其子文件的权限

  1. 改变自身和子文件夹权限,递归改权限需要加-R参数

3.对一个目录,即便你有read的权限,但是没有x权限,也无法进入目录

chmod u=rwx,go=rx .bashrc

即便我是一个普通用户,用户root的文件在我是属主的目录下,我也一样可以删除。

很多时候我们仅仅是想为目录或者子目录提供可执行的权限使得其可以被搜寻到,却不想改变在这些目录中的文件的权限。在我知道这个命令之前,我一般都是找到所有的目录然后改变它们的权限。但是在Lunix中我们可以使用chmod有一个更好地方法来做到。你可以使用‘X’(大写的X)参数来仅仅改变文件目录的的权限而不影响到文件。
example@localhost~/test chmod a+X *

chown 更改文件或文件夹的所属用户和用户组

chown :更改与文件、目录的所有者和所属组

功能:更改某个文件或目录的属主和属组。这个命令也很常用。例如root用户把自己的一个文件拷贝给用户xu,为了让用户xu能够存取这个文件,root用户应该把这个文件的属主设为xu,否则,用户xu无法存取这个文件。
用法:chmod [-R] user[:group] 文件名/目录
或者
chown [-R] 账号名称:组名 文件或目录

参数:-R 递归更改,即目录下的所有子目录以及子目录下的所有文件 、目录的拥有者都更新成为这个拥有者。

1.chown userA:group 文件名;用户和用户组同时改变,:也可以用.(最好多用:格式)

将文件file1.txt 的拥有者设为users, 群体的使用者 jessie :
chown jessie:users file1.txt

2.chown -R userA:group 文件名/目录;递归改变目录下所有文件的拥有者和群组

将目录/tmp/src下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport :

chown -R lamport:users /tmp/src

3.chown user 文件名/目录(chown . user 文件名/目录)

把目录/his及其下的所有文件和子目录的属主改成wang,属组改成users.
$ chown - R wang.users /his

[root@localhost ~]# ls -l

-rwxrwxrwx 1 root root 12172 8月 15 23:18 qmfsun.txt
可以看到qmfsun.txt文件的所属用户组为root,所有者为root。执行下面命令,把qmfsun.txt文件的所有权转移到用户qmf:

[root@localhost ~]# chown qmf qmfsun.txt(chown . qmf qmfsun.txt);这个.可要可不要
[root@localhost ~]# ls -l

-rwxrwxrwx 1 qmf root 12172 8月 15 23:18 qmfsun.txt
4.chown :group 文件名/目录(或chown _:group 文件名/目录)
要改变所属组,可使用下面命令:

[root@localhost ~]# chown :group qmfsun.txt
[root@localhost ~]# ls -l
总用量 1
-rwxrwxrwx 1 user group 12172 8月 15 23:18 conkyrc.sample

如果没有指定所有者,则不会更改。 所属组若没有指定也不会更改,但当加上
“:”时 GROUP 会更改为指定所有者的所属组。

示例:
chown root /u 将 /u 的属主更改为”root”。
chown root:staff /u 和上面类似,但同时也将其属组更改为”staff”。
chown -hR root /u 将 /u 及其子目录下所有文件的属主更改为”root”。

范例:将install.log的拥有者改为bin这个账号:
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r–r-- 1 bin users 68495 Jun 25 08:53 install.log

将install.log的拥有者与群组改回为root:
[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r–r-- 1 root root 68495 Jun 25 08:53 install.log
当你复制文件给你之外的其他人时,由于复制行为(cp)会复制执行者的属性与权限,那么别人会无法使用你复制给他的文件所以你要更改这个文件的拥有者与群组

要更改文件 program.c 的所有者:

chown jim program.c;
program.c的用户访问权限现在应用到 jim。作为所有者,jim 可以使用
chmod
命令允许或拒绝其他用户访问 program.c。

要将目录 /tmp/src 中所有文件的所有者和组更改为用户 john 和组 build:
chown -R john:build /tmp/src
文件
/usr/bin/chown
chown命令
/etc/group
包含组标识的文件
/etc/passwd
包含用户标识的文件

权限规划:
前三位-》自己
中三位-》组
后三位-》其他人
d:代表目录
*

chgrp 改变文件或文件夹组的所属组*

chgrp命令
  功能:改变文件或目录所属的组。
  用法:chgrp [ -R] 群组名称 文件/目录;-R 递归更改,即目录下的所有子目录以及子目录下的所有文件 、目录的用户组都更新成为这个用户组。

该命令改变指定指定文件所属的用户组。其中group可以是用户组ID,也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通配符。如果用户不是该文件的属主或超级用户,则不能改变该文件的组。

例1:$ chgrp -R group /opt/local /book

改变/opt/local /book/及其子目录下的所有文件的属组为group。

改变用户和组所有权
为了改变文件或其它文件系统对象的所有者或组,分别使用 chown 或chgrp。这两个命令都要一个用户名或组名作参数,后面跟上一个或多个文件名。
#chown root /etc/passwd
chgrp wheel /etc/passwd
也可以用 chown 命令的另一种形式同时设置所有者和组:
#chown root:wheel /etc/passwd(chown root.wheel /etc/passwd),这种方式用的比较多,所以chgrp用的少
另外:chown改变文件的所属组,需要用:
chgrp 群组名 文件名
除非您是超级用户,否则您不可以使用 chown,然而任何人都可以使用 chgrp 来将文件的组所有权改为他们所属的组。
范例:
[root@www ~]# chgrp users install.log
[root@www ~]# ls -l
-rw-r–r-- 1 root users 68495 Jun 25 08:53 install.log

文件默认权限:umask
umask 就是指定 『目前使用者在创建文件或目录时候的权限默认值』

[root@www ~]# umask
0022 <==与一般权限有关的是后面三个数字!
[root@www ~]# umask -S
u=rwx,g=rx,o=rx
[root@www ~]# umask 002
umask 的分数指的是『该默认值需要减掉的权限!』因为 r、w、x 分别是 4、2、1 分

在默认权限的属性上,目录与文件是不一样的。 x 权限对於目录是非常重要的! 但是一般文件的创建则不应该有运行的权限,默认的情况如下:

若使用者创建为『文件』则默认『没有可运行( x )权限』,亦即只有 rw 这两个项目,也就是最大为 666 分
若使用者创建为『目录』,则由於 x 与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为 777 分
例题:
假设你的 umask 为 003 ,请问该 umask 情况下,创建的文件与目录权限为?
答:
umask 为 003 ,所以拿掉的权限为 --------wx,因此:
文件: (-rw-rw-rw-) - (--------wx) = -rw-rw-r–
目录: (drwxrwxrwx) - (--------wx) = drwxrwxr–

umask决定了文件创建(包括目录)时默认访问权限。对于文件,执行权限不可以在创建时赋予。必须在创建后使用chmod命令。

umask值是777减去默认权限。

如umask为022,则文件默认访问权限为644,目录为755。

查看用户当前umask

[oracle@odilab ~]$ umask
0022
[oracle@odilab ~]$ umask 066
[oracle@odilab ~]$ umask
0066
[oracle@odilab ~]$ touch aa.txt
[oracle@odilab ~]$ ls -ltrh aa.txt
-rw------- 1 oracle oinstall 0 Jan 15 08:16 aa.txt

在bash中,通常在~/.bash_profile中配置umask。

1. 文件的默认权限

linux下当我们新建一个文件和目录时,该文件和目录的默认权限是什么?
通过umask命令来查看:
[plain] view plaincopy在CODE上查看代码片派生到我的代码片

$ umask
0002

$ umask -S
u=rwx,g=rwx,o=rx
权限我们知道有r, w, x三种,umask返回4位的数字,第一位是特殊权限,先看后三位。
002权限表示 --------w-
通过-S参数,以符号类型显示。

2. 文件与目录权限

文件:
文件一般为数据记录,不需要执行(x)权限, 即 -rw-rw-rw-,最大为666.
目录:
目录的x权限表示用户能否进入, 默认应该所有权限打开, 即 drwxrwxrwx, 为777权限。

3. 用户默认权限计算

文件权限:
为最大权限减去umask权限
666 - 002 = (-rw-rw-rw-)- ( --------w-) = -rw-rw-r-- = 664

目录权限:
777 - 002 = (drwxrwxrwx)- ( d-------w-) = drwxrwxr-x = 775
[plain] view plaincopy在CODE上查看代码片派生到我的代码片

$ touch a
$ mkdir b
$ ll
-rw-rw-r-- 1 work work 0 Jun 15 18:59 a
drwxrwxr-x 2 work work 4096 Jun 15 19:00 b

一般root账号的umask为022,
一般用户为002.保留同组用户的写入权限。

在Linux下,目录的x权限具有特殊的意义,举例说,如果用户Hi对A目录没有执行权限,即使有读写权限,也无法进入该目录,无法读取目录里面的文件b的内容,即使他对b拥有完全的权限rwx.相反,如果对A仅有执行权限,也可以进入该目录并读取其中的文件内容。

猜你喜欢

转载自blog.csdn.net/weixin_45160969/article/details/98333590