网站首页 > 教程分享 正文
chmod 基本概念
- chmod是一个GNU实用程序,在Linux发行版中作为coreutils rpm的一部分提供。
- chmod是“Change Mode”的简写。
- chmod根据模式更改每个给定文件/目录的文件模式位。
- 用户可以使用符号表示更改,也可以使用八进制数标识的位模式表示新模式位。
- 符号模式的格式为:[ugoa...][[-+=][perms...]...]。其中perms可以为0,或者rwxXst其中的字符。
- 用户也可以添加、修改、删除特殊权限,例如 setuid, setgid, sticky bit。
chmod的防止删库跑路参数: --preserve-root
最好是所有的chmod都使用--preserve-root参数。
特别是在递归修改文件属性的时候,这个参数尤为重要。
为什么呢?这里必须要划重点:防止误操作根路径/。下面的操作在任何时候都不要执行,会直接摧毁操作系统:
# chmod --changes --recursive 755 /
上面的操作,和执行“rm -rf /”有类似的功效。
如果在执行命令时,添加参数--preserve-root,程序就会拒绝执行。
问题来了,不是每个人都会记得添加这个参数,也不会有人在每次执行chmod的时候都记得添加这个参数。怎么办呢?
我们可以使用alias,修改chmod的命令默认带参数--preserve-root。
alias chmod='chmod --preserve-root'
当然,可以在/etc/bashrc 或者 用户的.bashrc文件中添加此命令。
一个小知识点:bashrc,.bashrc,.bash_profile 什么关系?
环境变量一般通过三个文件设置:/etc/profile,bashrc, ~/.bash_profile.
- /etc/profile对所有用户生效。当用户登录时,文件会被执行。
- bashrc用于配置函数或别名,对shell生效,在shell终端启用的时候调用。不管是否登录。分为两个,一个是系统级的:/etc/bashrc,一个是用户级的:~/.bashrc.
- ~/.bash_profile在用户登录的时候调用。只对一个用户生效,可用于配置环境变量和启动程序。
一般来说,没啥事可以修改~/.bash_profile
linux权限映射关系
权限 | 八进制 | 符号 |
read+write+execute | 4+2+1=7 | rwx |
read+write | 4+2+0=6 | rw- |
read+execute | 4+0+1=5 | r-x |
read | 4+0+0=4 | r-- |
write+execute | 0+2+1=3 | -wx |
write | 0+2+0=2 | -w- |
execute | 0+0+1=1 | --x |
chmod 递归修改文件权限
如果想要修改文件夹下所有的文件权限,且目标权限是一致的,可以使用-R 或者 --recursive 参数。
为了明确哪些文件的权限发生了变化,最好添加另外一个参数:--changes或者-c
命令格式:
chmod [--changes|-c] {--recursive|-R} {PATH}
示例:
drwxr-xr-x 2 yunzhong yunzhong 4096 Nov 17 11:01 dir2
yunzhong@DESKTOP-9VB7LN7:/tmp/chmodtest$ chmod -c -R 775 ./dir1/
mode of './dir1/' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)
mode of './dir1/friutes.txt' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)
mode of './dir1/test.file' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)
mode of './dir1/dir11' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)
mode of './dir1/dir11/friutes.txt' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)
上面的例子,文件夹dir1的权限也被更改了。如果不想修改参数文件夹的权限,只是修改其子文件的权限,可以通过以下命令:
yunzhong@DESKTOP-9VB7LN7:/tmp/chmodtest$ chmod -c -R 755 ./dir1/*
mode of './dir1/dir11' changed from 0775 (rwxrwxr-x) to 0755 (rwxr-xr-x)
mode of './dir1/dir11/friutes.txt' changed from 0775 (rwxrwxr-x) to 0755 (rwxr-xr-x)
mode of './dir1/friutes.txt' changed from 0775 (rwxrwxr-x) to 0755 (rwxr-xr-x)
mode of './dir1/test.file' changed from 0775 (rwxrwxr-x) to 0755 (rwxr-xr-x)
在上面的示例中,我们都是通过八进制来标识权限,也可以通过符号标识来标识权限。符号标识的意义,以及和八进制的映射关系,可以参考上面的表格。
示例:
yunzhong@DESKTOP-9VB7LN7:/tmp/chmodtest$ chmod -c -R u+rx,g+rx,o-rwx ./dir1
mode of './dir1' changed from 0775 (rwxrwxr-x) to 0770 (rwxrwx---)
mode of './dir1/friutes.txt' changed from 0755 (rwxr-xr-x) to 0750 (rwxr-x---)
mode of './dir1/test.file' changed from 0755 (rwxr-xr-x) to 0750 (rwxr-x---)
mode of './dir1/dir11' changed from 0755 (rwxr-xr-x) to 0750 (rwxr-x---)
mode of './dir1/dir11/friutes.txt' changed from 0755 (rwxr-xr-x) to 0750 (rwxr-x---)
使用find 和exec协助修改文件权限
为何要使用find和exec协助?
1 上面的示例会更改一个文件夹下的文件、文件夹属性。如果需要修改多个文件夹下的文件或文件夹,则需要多次执行chmod命令。
2 chmod不能区分文件和文件夹。如果只想更改子文件夹,或者子文件,只使用chmod命令是做不到的。
3 类似地,如果您想更改特定命名语法的某些文件或目录的权限,chmod自己不能处理这样的情况。
因此,需要使用find命令过滤需要修改的文件、文件夹。
chmod不能直接接收find的过滤结果,需要通过使用exec或者xargs对接信息。
使用了find,chmod命令不再需要--recursive 或者 -R 参数。find的结果会逐条传递给chmod。
使用find exec配合chmod修改权限
find命令语法:
find {PATH} [OPTIONS] -exec chmod <permission> {} \;
PATH 是目标文件夹。
OPTIONS 是find命令的参数。例如通过类型搜索用-type, 通过名称搜索用-name。
注意结尾:{} ; 。 这个是必不可少的,{}表示命令的参数即为所找到的文件,命令的末尾必须以“ ;”结束,”{}”和”;”之间必须有一个空格。
示例:
yunzhong@DESKTOP-9VB7LN7:/tmp$ find /tmp/chmodtest/ -type f -exec chmod --changes 644 {} \;
mode of '/tmp/chmodtest/dir1/friutes.txt' changed from 0750 (rwxr-x---) to 0644 (rw-r--r--)
mode of '/tmp/chmodtest/dir1/test.file' changed from 0750 (rwxr-x---) to 0644 (rw-r--r--)
mode of '/tmp/chmodtest/dir1/dir11/friutes.txt' changed from 0750 (rwxr-x---) to 0644 (rw-r--r--)
当然,也可以使用符号来修改权限:
yunzhong@DESKTOP-9VB7LN7:/tmp$ find /tmp/chmodtest/ -type f -exec chmod --changes u=rxw,go=r {} \;
mode of '/tmp/chmodtest/dir1/friutes.txt' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of '/tmp/chmodtest/dir1/test.file' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of '/tmp/chmodtest/dir1/dir11/friutes.txt' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
只修改文件夹的属性:
yunzhong@DESKTOP-9VB7LN7:/tmp$ find /tmp/chmodtest/ -type d -exec chmod --changes 755 {} \;
mode of '/tmp/chmodtest/dir1' changed from 0770 (rwxrwx---) to 0755 (rwxr-xr-x)
mode of '/tmp/chmodtest/dir1/dir11' changed from 0750 (rwxr-x---) to 0755 (rwxr-xr-x)
使用find xargs配合chmod修改权限
和exec类似,通过xargs将find结果传递给chmod。
命令格式:
find {PATH} [OPTIONS] -print0 | xargs -0 [COMMAND]
-print0 让find的结果打印到标准输出, 每个结果都通过 ASCII NUL 字符: ‘\000’分割。
-0 告知xargs每个输入都通过ASCII NUL 字符: ‘\000’ 来分割。
下面示例,将指定文件夹下的属性都改成644:
# find /tmp -type f -print0 | xargs -0 chmod --changes 644
同样,也可以通过符号。
yunzhong@DESKTOP-9VB7LN7:/tmp$ find /tmp/chmodtest/ -type f -print0 | xargs -0 chmod --changes u=rxw,go=rxw
mode of '/tmp/chmodtest/dir1/friutes.txt' changed from 0766 (rwxrw-rw-) to 0777 (rwxrwxrwx)
mode of '/tmp/chmodtest/dir1/test.file' changed from 0766 (rwxrw-rw-) to 0777 (rwxrwxrwx)
mode of '/tmp/chmodtest/dir1/dir11/friutes.txt' changed from 0766 (rwxrw-rw-) to 0777 (rwxrwxrwx)
猜你喜欢
- 2024-09-09 Linux如何设置目录和文件的权限/Linux如何管理目录和文件属性
- 2024-09-09 IT之家:强大的网盘管理工具Rclone安装教程
- 2024-09-09 系统管理员必备的Linux命令(linux操作系统管理员)
- 2024-09-09 《调教命令行03》认识一下,感觉不是说来就来的
- 2024-09-09 Linux命令行的艺术:高效管理你的服务器
- 2024-09-09 Linux 文件与目录管理的详解(linux文件和目录管理)
- 2024-09-09 shell——chmod命令(shell cmd)
- 2024-09-09 Python OS 文件/目录方法(python os.path)
- 2024-09-09 Linux知识点之文件传输(linux传文件夹命令)
- 2024-09-09 Linux知识点之文件管理(linux文件管理常用命令)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)