linux命令是运维工作的基础也是核心,下来将介绍运维工作中常用的基础命令。
u(user):文件所有者;
g(group):文件所属组;
o(other):其他所有用户;
a(all):以上三类(默认)
使用语法:
chmod[选项] 权限设置 文件名/目录名
使用方法:
| 用3位数字表示权限,每一位对应u/g/o:r=4、w=2、x=1,相加得值 |
| |
chmod 755 test.txt # u=rwx, g=rx, o=rxchmod 644 demo.txt # u=rw, g=r, o=rchmod g+w demo.txt # 给所属组加写权限chmod -R 775 /var/www/html # 递归目录下所有文件/子目录设为775chmod o= demo.txt # 移除其他用户的所有权限。等于chmod o-rwx demo.txt
chown [选项] 用户名[:组名] 文件名/目录名# 仅修改所有者为 rootchown root demo.txt# 同时修改所有者和所属组(用:分隔)chown user1:staff demo.txt# 递归修改目录所有者(网站目录归属常用)chown -R www-data:www-data /var/www/html# 只修改所属组(省略用户名,保留:)chown :admin demo.txt # 等价于 chgrp admin demo.txt
# 修改文件所属组为 staffchgrp staff demo.txt# 递归修改目录所属组为 adminchgrp -R admin /data/project
- 新目录默认权限 =
777 - umask(目录默认有执行权限,用于进入); - 新文件默认权限 =
666 - umask(文件默认无执行权限,需手动加);
#查看当前 umask(系统默认通常是 022)umask0022(前两位是特殊权限,后三位是核心掩码)# 计算默认权限(umask=022)# 新目录:777 - 022 = 755(u=rwx, g=rx, o=rx)# 新文件:666 - 022 = 644(u=rw, g=r, o=r)# 临时设置 umask 为 002umask 002# 新目录:777 - 002 = 775(u=rwx, g=rwx, o=rx)# 新文件:666 - 002 = 664(u=rw, g=rw, o=r)# 验证:新建文件/目录看权限touch new_file.txtmkdir new_dirll-rw-rw-r-- 1 user staff 0 Jan 21 10:00 new_file.txt # 664drwxrwxr-x 2 user staff 64 Jan 21 10:00 new_dir/ # 775
设置比 chmod 更底层的保护规则 —— 比如让文件无法被修改/删除(即使是 root 用户),优先级高于普通权限(rwx),是系统安全和重要文件保护的核心工具。 chattr [选项] [属性符号] 属性 文件名/目录名- 属性符号:+(添加属性)、
-(移除属性)、=(设置唯一属性); - 关键前提:仅支持 ext2/ext3/ext4、XFS 等主流文件系统;
1.保护系统核心文件:防止误删 / 篡改 /etc/passwd、/etc/shadow、/etc/fstab 2.保护日志文件:让日志只能追加(防止被篡改/删除) | | |
| | 最高级保护:文件不能被修改、删除、重命名、追加内容,root 也不行,除非解除该属性 |
| | 只能向文件追加内容(>>),不能修改/删除已有内容,不能删除/重命名文件 |
# 添加 `i` 属性(设为不可修改)chattr +i chattr_demo.txt# 查看属性(验证是否生效)lsattr chattr_demo.txt----i----------- chattr_demo.txt(i 出现在属性列)# 测试:尝试修改/删除(即使 root 也会失败)echo "new content" > chattr_demo.txt-bash: chattr_demo.txt: 权限不够rm -f chattr_demo.txtrm: 无法删除 'chattr_demo.txt': 不允许的操作# 移除 `i` 属性(恢复正常)chattr -i chattr_demo.txt# 再次测试:修改/删除正常echo "new content" > chattr_demo.txt # 成功
# 添加 `a` 属性(仅允许追加)chattr +a chattr_demo.txt# 测试:追加内容(成功)echo "append content" >> chattr_demo.txtcat chattr_demo.txttest contentappend content# 测试:修改/删除内容(失败)echo "overwrite" > chattr_demo.txt-bash: chattr_demo.txt: 权限不够sed -i '1d' chattr_demo.txt # 删除第一行,失败# 移除 `a` 属性(恢复正常)chattr -a chattr_demo.txt
#递归授权目录,此目录将不能新建,删除文件chattr -R +i dir