学习笔记12-Linux文件权限

一、权限理论

  1. 权限作用

    传统的UNIX系统不同于那些传统的MS-DOS系统,区别在于前者不仅是多任务处理系统,还是多用户系统,意味着多个用户可以同时使用一台计算机;

    为了增强实用性,必须想出一种方法,避免用户之间相互干扰,毕竟,不能因为一个用户的操作就让整个系统崩溃了,用户也不能干涉属于其他用户的文件,所以系统就需要进行权限管理。

  2. 图解权限

    image-20220316195614279

    • 文件权限:

      r 可读,可以使用类似cat等命令查看文件内容;读是文件的最基本权限,没有读权限,普通文件的一切操作行为都被限制

      w 可写,可以使用vim编辑此文件,echo追加写入内容等

      x 可执行,表示文件可由特定的解释器解释并运行。可以理解为windows中的可执行程序或批处理脚本,双击就能运行起来的文件。

    • 目录权限:

      r 可以对目录执行ls以列出目录内的所有文件;读是文件的最基本权限,没有读权限,目录的一切操作行为都被限制。

      w 可以在此目录创建或删除文件/子目录

      x 可进入此目录,可使用ls -l查看文件的详细信息。可以理解为windows中双击就进入目录的动作

      补充说明:

      如果目录没有x权限,其他人将无法查看目录内文件属性(只能查看到文件类型和文件名),所以一般目录都要有x权限。而如果只有执行却没有读权限,则权限拒绝(对于目录x通常与r连用,否则意义不大)。

      普通文件的默认权限是644(没有执行权限),目录的默认权限是755(必须有执行权限,否则进不去),链接文件的权限是777。当然,默认文件的权限设置方法是可以通过umask值来改变的。

    • 属主、属组以及其他用户:

      属主 user :用u表示,表示文件的创建者,也可理解为,某个用户、对这个文件拥有的权限。

      属组 group:用g表示,文件所属的用户组,可以理解为,某一个组的用户,对这个文件的权限。

      其他用户 other:用o表示,既不是文件的创建者,也不是文件属组里的用户。

    • 文件类型:

      - 普通文件

      d 目录

      l 软链接(类似Windows系统的快捷方式)

      b 块设备文件(磁盘、光驱)

      c 字符设备文件(网络串口设备)


二、权限管理命令

  1. chown:用来变更文件或目录的拥有者或所属群组

    补充说明:

    chown命令 改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是uid,用户组可以是组名或gid。

    此命令只有属主和超级用户才可以便用该命令

    选项:

    -R		# 递归处理,将指定目录下的所有文件及子目录一并处理;
    -v		# 显示指令执行过程;
    -h		# 只对符号连接的文件作修改,而不更改其他任何相关文件
    --reference=<参考文件或目录>	# 把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;
    
    # chown指定所有者和所属组的方式有两种,使用冒号和点
    ➜  ~  chown root.root test
    ➜  ~  chown root:root test
    ➜  ~  chown root test     # 只修改所有者
    ➜  ~  chown :root test    # 只修改组
    ➜  ~  chown .root test
    ➜  ~  chown root. test	  # 将test文件属主属主修改为root
    

    示例:

    将目录/data及其下面的所有文件、子目录的属主和属组改成普通用户jack

    ➜  ~ chown -R jack. /data
    ➜  ~ ll -d /data         
    drwxr-x---. 4 jack jack 93 Mar 16 12:04 /data
    

  2. chmod:用来变更文件或目录的权限

    补充说明:

    • Linux文件的用户权限说明:

        -rw-r--r--   1 root  root   651 Oct 12 12:53 test.txt
      
      -	# 第1位如果是d则代表目录,是-则代表普通文件
      rw-	# 第2到4位代表当前用户的权限。
      r--	# 第5到7位代表组用户的权限。
      r--	# 第8到10位代表其他用户的权限
      
    • u符号代表当前用户。

    • g符号代表和当前用户在同一个组的用户。

    • o符号代表其他用户。

    • a符号代表所有用户。

    • r符号代表读权限以及八进制数4

    • w符号代表写权限以及八进制数2

    • x符号代表执行权限以及八进制数1

    • X符号代表如果目标文件是可执行文件或目录,可给其设置可执行权限。

    • s符号代表设置权限suid和sgid,使用权限组合u+s设定文件的用户的ID位,g+s设置组用户ID位。

    • t符号代表只有目录或文件的所有者才可以删除目录下的文件。

    • +符号代表添加目标用户相应的权限。

    • -符号代表删除目标用户相应的权限。

    • =符号代表添加目标用户相应的权限,删除未提到的权限。

    选项:

    -R   #  --recursive:对目录以及目录下的文件执行递归更改权限操作。
    -c   #  --changes:当文件的权限更改时输出操作信息。
    -v   #  --verbose:无论文件是否更改了权限,一律输出操作信息。
    --preserve-root		# 不能在根目录下递归操作。
    --reference=RFILE	# 使用参考文件或参考目录RFILE的权限来设置目标文件或目录的权限。
    

    示例:

    (1)添加属组用户的写权限

    ➜  ~ chmod g+w test.txt 
    ➜  ~ ls -l test.txt 
    -rw-rw-r-- 1 jack jack 12 Mar 16 14:28 test.txt
    

    (2)删除其他用户的所有权限

    # 方法1:
    ➜  ~ chmod o= test.txt 
    
    # 方法2:
    ➜  ~ chmod 640 test.txt 
    
    # 查看结果:
    ➜  ~ ls -l test.txt 
    -rw-r----- 1 jack jack 12 Mar 16 14:28 test.txt
    

    (3)使得所有用户都没有写权限

    ➜  ~ chmod a-w test.txt 
    
    
    ➜  ~ ll test.txt 
    -r--r----- 1 jack jack 12 Mar 16 14:28 test.txt
    

    (4)属主具有所有权限,属组用户有读写权限,其他用户只有读权限

    # 方法1:
    ➜  ~ chmod u=rwx,g=rw,o=w test.txt 
    
    # 方法2:
    ➜  ~ chmod 764 test.txt 
    
    # 查看结果:
    ➜  ~ ll test.txt
    -rwxrw--w- 1 jack jack 12 Mar 16 14:28 test.txt
    

    (5)将目录以及目录下的文件都设置为所有用户拥有读写权限

    ➜  ~ chmod -R a=rw,u=rwx directory_test
    
    # 注意,使用-R选项一定要保留当前用户的执行和读取权限,否则会报错(u=rwx即可保证当前属主的权限,root用户忽略)
    
    ➜  ~ ls -l directory_test 
    total 0
    -rwxrw-rw- 1 jack jack 0 Mar 16 14:37 file1.txt
    -rwxrw-rw- 1 jack jack 0 Mar 16 14:37 file2.txt
    -rwxrw-rw- 1 jack jack 0 Mar 16 14:37 file3.txt
    

    (6)根据其他文件的权限设置文件权限

    # 1.查看参考文件passwd.txt权限
    ➜  ~ ll
    ---------- 1 jack jack  0 Mar 16 14:47 passwd.txt
    -rwxrw-r-- 1 jack jack 12 Mar 16 14:28 test.txt
    
    # 2.根据参考文件修改test.txt文件
    ➜  ~ chmod --reference=/home/jack/passwd.txt ./test.txt 
    
    # 3.检查test.txt修改后的权限
    ➜  ~ ll
    ---------- 1 jack jack  0 Mar 16 14:47 passwd.txt
    ---------- 1 jack jack 12 Mar 16 14:28 test.txt
    

    (7)递归为目录中的子目录和执行文件添加执行权限,普通文件不添加执行权限

    # 1. 子目录及文件都没有执行权限
    ➜ ll directory_test 
    total 0
    drwxrw-rw- 2 jack jack 6 Mar 16 14:59 dir01
    drwxrw-rw- 2 jack jack 6 Mar 16 14:59 dir02
    -rw-rw-r-- 1 jack jack 0 Mar 16 15:13 file1.txt
    -rw-rw-r-- 1 jack jack 0 Mar 16 15:13 file2.txt
    -rw-rw-r-- 1 jack jack 0 Mar 16 15:13 file3.txt
    
    # 2.递归修改directory_test目录(只为子目录添加执行权限,不添加文件的执行权限)
    ➜  ~ chmod -R +X directory_test 
    ➜  ~ ll directory_test 
    total 0
    drwxr-xr-x 2 jack jack 6 Mar 16 14:59 dir01        # 子目录权限添加成功
    drwxr-xr-x 2 jack jack 6 Mar 16 14:59 dir02        # 子目录权限添加成功
    -rw-rw-r-- 1 jack jack 0 Mar 16 15:13 file1.txt    # 使用 -R +X 文件没有添加执行权限
    -rw-rw-r-- 1 jack jack 0 Mar 16 15:13 file2.txt    # 使用 -R +X 文件没有添加执行权限
    -rw-rw-r-- 1 jack jack 0 Mar 16 15:13 file3.txt    # 使用 -R +X 文件没有添加执行权限
    

  3. chgrp:用来变更文件或目录的所属群组

    补充说明:

    如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组

    选项:

    -R 		# 递归式地改变指定目录及其下的所有子目录和文件的所属的组
    --reference=<参考文件或目录> 		# 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同
    

    示例:

    /usr/jack_data及其子目录下的所有文件的用户组改为adny

    # 修改之前
    ➜  ~ ll -d /usr/jack_data
    drwxr-xr-x 2 root root 6 Mar 16 15:45 /usr/jack_data
    
    # 修改后
    ➜  ~ sudo chgrp -R andy /usr/jack_data
    ➜  ~ ll -d /usr/jack_data
    drwxr-xr-x 2 root andy 6 Mar 16 15:45 /usr/jack_data
    

三、拓展知识

快捷的执行 cmatrix 代码⾬命令,用两种办法实现

  1. 通过软链接实现

    1. 查看当前环境变量
    ➜  ~ echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    
    2. 找到cmatrix程序所在目录
    ➜  bin pwd
    /usr/local/cmatrix12/bin
    
    3. 创建软链接到PATH变量中的任意目录(推荐根据程序实际情况放入相应目录)
    ➜  ~ ln -s /usr/local/cmatrix12/bin/cmatrix /usr/bin/cmatrix
    
    4. 执行命令
    ➜  ~ cmatrix 		# 运行成功
    
  2. PATH变量配置

    1. 查看当前环境变量
    ➜  ~ echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    
    2. 找到cmatrix程序所在目录
    ➜  bin pwd
    /usr/local/cmatrix12/bin
    
    3. 将cmatrix程序目录添加到环境变量中(临时生效)
    ➜  ~ PATH=$PATH:/usr/local/cmatrix12/bin
    ➜  ~ echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/cmatrix12/bin
    
    4.将cmatrix程序目录添加到环境变量中(永久生效)
    ➜  ~ echo 'PATH=$PATH:/usr/local/cmatrix12/bin' >> /etc/profile
    
    5.执行命令
    ➜  ~ cmatrix 		# 运行成功
    

posted @   echo勇往直前  阅读(86)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示