2024-03-21
Linux
00
请注意,本文编写于 108 天前,最后修改于 100 天前,其中某些信息可能已经过时。

目录

权限介绍和示例
chmod
chown
文件属性详解

权限介绍和示例

root 用户权限最高,所以一般对它不做什么权限设置。其他用户就要设定权限并且遵守权限了。

文件权限:

bash
[root@localhost ~]# ls -l /tmp/123.txt -rw-r--r--. 1 root root 0 7月 20 23:17 /tmp/123.txt

-rw-r--r--: 第一个字符,表示文件类型

  • -:文件
  • d:目录
  • l:软连接(对应 windows 快捷方式)
  • b:块设备(ls /dev,可以看到硬盘 sda等)

rw-:第2-4字符,表示该文件所属用户的权限

r--:第5-7字符,表示该文件所属用户的权限

r--:第8-10字符,表示其他用户对该文件的权限

r 4 代表读权限 read

w 2 代表写权限 write

x 1 代表可执行权限 executable

- 0 表示没有这个权限,9位权限不能少,没有的权限就用 - 替代

权限值表:

01234567
-----x-w--wxr--r-xrw-rwx

ugo权限体系:

rw-r--r--
UserGroupOther

Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)

chmod

chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令

语法:

bash
chmod [-cfvR] [--help] [--version] mode file ...

参数说明: mode:权限设定字串,格式如下:

bash
[ugoa] [[+-=][rwxX]...][,...]

其中:

  • u :表示该文件的拥有者
  • g :表示与该文件的拥有者属于同一个群体(group)者
  • o :表示其他以外的人
  • a :表示这三者皆是
  • + :表示增加权限
  • - :表示取消权限
  • = :表示唯一设定权限。
  • r :表示可读取
  • w :表示可写入
  • x :表示可执行
  • X :表示只有当该文件是个子目录或者该文件已经被设定过为可执行

其他参数说明:

  • -c : 若该文件权限确实已经更改,才显示其更改动作
  • -f : 若该文件权限无法被更改也不要显示错误讯息
  • -v : 显示权限变更的详细资料
  • -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
  • --help : 显示辅助说明
  • --version : 显示版本

示例:

将文件 file1.txt 设为所有人皆可读取 :

bash
chmod ugo+r file1.txt chmod a+r file1.txt

将文件 file1.txtfile2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入:

bash
chmod ug+w,o-w file1.txt file2.txt

ex1.py 文件拥有者增加可执行权限:

bash
chmod u+x ex1.py

将目前目录下的所有文件与子目录皆设为任何人可读取 :

bash
chmod -R a+r *

此外chmod也可以用数字来表示权限如 :

bash
chmod 777 file

语法为:

bash
chmod abc file

其中 a, b, c 各为一个数字,分别表示 User、Group、及 Other 的权限。

r=4,w=2,x=1

若要 rwx 属性则 4+2+1=7;

若要 rw- 属性则 4+2=6;

若要 r-x 属性则 4+1=5。

chmod a=rwx filechmod 777 file效果相同

chmod ug=rwx,o=x filechmod 771 file 效果相同

若用 chmod 4755 filename 可使此程序具有 root 的权限。

更多说明:

命令说明
chmod a+r file给file的所有用户增加读权限
chmod a-x file删除file的所有用户的执行权限
chmod a+rw file给file的所有用户增加读写权限
chmod +rwx file给file的所有用户增加读写执行权限
chmod u=rw,go= file对file的所有者设置读写权限,清空该用户组和其他用户对file的所有权限(空格代表无权限)
chmod -R u+r,go-r docs对目录docs和其子目录层次结构中的所有文件给用户增加读权限,而对用户组和其他用户删除读权限
chmod 664 file对file的所有者和用户组设置读写权限, 为其其他用户设置读权限
chmod 0755 file相当于u=rwx (4+2+1),go=rx (4+1 & 4+1)。0 没有特殊模式。
chmod 4755 file4设置了设置用户ID位,剩下的相当于 u=rwx (4+2+1),go=rx (4+1 & 4+1)。
find path/ -type d -exec chmod a-x {} \删除可执行权限对path/以及其所有的目录(不包括文件)的所有用户,使用'-type f'匹配文件
find path/ -type d -exec chmod a+x {} \允许所有用户浏览或通过目录path/

chown

修改文件属性,chown,全称 Change Owner,改变拥有者。修改文件的所属,普通用户是不能修改其他用户文件的所属的,需要root用户,所以先切换到root用户来操作

修改所属用户和用户组,test2:test2,前面的 test2 表示用户,后面的 test2 是组

bash
[root@localhost tmp]# chown test2:test2 ls [root@localhost tmp]# ls -l 总用量 404 -rwxr-xr-x. 1 test2 test2 159024 7月 20 17:43 grep -rwxr-xr-x. 1 test2 test2 117608 7月 20 17:38 ls -rwxr-xr-x. 1 test1 test1 130360 7月 20 17:43 mv -rw-rw-rw-. 1 test1 test1 14 7月 20 17:38 test1.txt

修改所属用户

bash
[root@localhost tmp]# chown test1 ls [root@localhost tmp]# ls -l 总用量 404 -rwxr-xr-x. 1 test2 test2 159024 7月 20 17:43 grep -rwxr-xr-x. 1 test1 test2 117608 7月 20 17:38 ls -rwxr-xr-x. 1 test1 test1 130360 7月 20 17:43 mv -rw-rw-rw-. 1 test1 test1 14 7月 20 17:38 test1.txt

用root用户创建一个文件夹,文件夹默认所属用户和组为root

,那么普通用户是没全限制在这个目录中创建文件的,也可以使用uid和gid修改文件的所属用户和所属用户组 属主,属组

文件属性详解

bash
[root@localhost ~]# ls -l -rw-rw-rw-. 1 lisi lisi 0 3月 20 16:00 222.txt

第一段 1-10 的字符前面有解释

第一段第11个字符 .:表示开启 selinux 的状态下创建的,也证明 selinux 是开启状态的。

selinux

这个东西很安全,但是有了它变 得很麻烦,安全和便利一般是冲突的。主要是红帽系的系统(redhat\centos\阿里的龙蜥\华为的欧拉)有这 个机制。我们一般上来就是关闭它,安全方面我们通过其他方法来控制。

bash
[root@localhost ~]# sestatus SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: enforcing Mode from config file: enforcing Policy MLS status: enabled Policy deny_unknown status: allowed Max kernel policy version: 31

enabled 表示开启状态,disabled 表示禁用状态

关闭和开启selinux,需要root权限才能修改

bash
[root@localhost tmp]# ls -l /etc/selinux/config -rw-r--r--. 1 root root 543 3月 15 20:11 /etc/selinux/config [root@localhost tmp]# vim /etc/selinux/config 把7行改为: SELINUX=disabled # 然后保存退出,并且重启系统才会生效。 # 然后再登录创建文件,查看文件信息,就看不到.了

第二段的数字,表示该文件的硬链接数量

第三段的字符串,表示该文件所属用户

第四段的字符串,表示该文件所属用户组

第五段的数字,表示该文件的大小,默认单位为B,如果想按照KB来显示,那么可以通过ls -lh指令来查看。h是human的意思,以人类可读的方式显示,会自动按照文件大小来设定显示单位

第六段到倒数第二段,都是该文件的修改时间,只要改动了文件内容,这个时间就会自动变为修改文件时的时 间。

其实linux系统会记录三个时间:

  • 访问时间(access time) :文件被打开时自动变化这个时间
  • 修改时间(modify time) :文件内容发生变化时自动改变这个时间,ls -l 显示的就是这个时间。
  • 改变时间(change time) :文件属性发生变化时自动改变这个时间,文件大小也是文件的属性,

所以修改文件内容导致大小变化的时候,这个时间也会自动改变。

windows系统也会记录三个时间:访问时间、创建时间、修改时间

linux下通过stat指令来查看:

bash
[root@localhost rrx]# touch 1.txt [root@localhost rrx]# stat 1.txt 文件:"1.txt" 大小:0 块:0 IO 块:4096 普通空文件 设备:801h/2049d Inode:51443079 硬链接:1 权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root) 最近访问:2024-03-21 19:54:59.146373949 +0800 最近更改:2024-03-21 19:54:59.146373949 +0800 最近改动:2024-03-21 19:54:59.146373949 +0800 创建时间:-

我们改一下文件权限,然后再看时间

bash
[root@localhost rrx]# chmod 777 1.txt [root@localhost rrx]# stat 1.txt 文件:"1.txt" 大小:0 块:0 IO 块:4096 普通空文件 设备:801h/2049d Inode:51443079 硬链接:1 权限:(0777/-rwxrwxrwx) Uid:( 0/ root) Gid:( 0/ root) 最近访问:2024-03-21 19:54:59.146373949 +0800 最近更改:2024-03-21 19:54:59.146373949 +0800 最近改动:2024-03-21 19:56:03.543898223 +0800 创建时间:-
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:@Rrx

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!