Linux 权限学习
Linux 一般将文件的读写权限分为三类: owner / group / others ,并且这三类各有 read / write / execute 等权限。
owner 文件拥有者
group 角色
others 其他人
特殊的是, root 不受系统权限限制
Linux 的用户信息记录在 /etc/passwd 文件中
个人密码存在 /etc/shadow 文件中
角色记录在 /etc/group 文件中
使用 ls -al 命令后,输出的内容各列意思是: 权限 、连接数 、 拥有者、角色、文件大小( bytes )、新建或修改日期(不同年份的只显示年月日,不显示 时间)、文件名
如果要显示完整的时间格式,可以使用 ls -la --full-time
文件名前面有 . 的,表示是隐藏文件, -a 可以列出隐藏文件( -la 等于 -l -a )
文件名不要带有 * ? > < ; & ! [ ] | \ / @ ' " ~ ( ) { } ^ 等符号,以免访问时出现异常。
文件开头也要避免 . - + 等字符( . 表示隐藏文件)
在权限这一列,每行有 10 个字符,分别表示:
文件类型, d 目录 - 文件 l 链接 b 可移动设备 c 串口设备(键盘鼠标等)s 接口文件 p 数据传输文件(pipe)
文件拥有者可读, r 或者 - , r 可读 - 无权限
文件拥有者可写,w 或者 -,这个权限不包括删除权限
文件拥有者可执行,x 或者 -
角色可读, r 或者 -
角色可写,w 或者 -
角色可执行,x 或者 -
其他人可读, r 或者 -
其他人可写,w 或者 -
其他人可执行,x 或者 -
在目录的权限设定上,与文件同样用 rwx 表示,但具体权限稍有不同:
r 可读取目录及里面文件或目录名称
w 可在目录下新建文件或目录,可删除目录下的文件或目录,可重命名目录下的文件或目录,可移动目录下的文件或目录
x 可以将此目录设置为工作目录
./ 表示当前目录
../ 表示上一层目录
- 表示前一个工作目录
~ 表示当前用户的工作目录
~user 表示 user 家的工作目录
按 FHS 标准,Linux 的目录结构如下:
可分享的(shareable) | 不可分享的(unshareable) | |
不变的 (static) |
/usr 软件放置处 | /etc 配置文件 |
/opt 第三方软件 | /boot 开机与核心文件 | |
可变动的 (variable) |
/var/mail 邮箱 | /var/run 程序相关 |
/var/spool/news 新闻 | /var/lock 程序相关 |
还有 / 根目录、 /bin 常用命令、 /boot 开机时使用的文件、/dev 与设备相关的文件、/etc 系统配置文件(通常可读不可写)
/lib 函式库、/media 媒体库、/mnt 挂载设备、/opt 第三方软件、/run 程序相关、/sbin 系统级命令、/srv 服务、/tmp 临时文件
/home 用户工作目录、/proc 虚拟内存目录、/sys 虚拟目录
使用 su root 可以切换用户身份,此时会提示输入 root 用户的密码,成功后会发现只是角色变更,但工作目录还没有切换。
使用 su - root 就可以切换身份并切换工作目录, su - 也可以(省略了 root )
使用 exit 可以退出切换的身份,回到原来的身份。
chgrp 改变文件的角色(change group),修改后的角色要在 /etc/group 中
chown 改变文件的拥有者,修改后的用户要在 /etc/passwd 中
chmod 改变文件的权限
命令加 -R 表示子文件夹中的权限也一起修改
修改 XXX 文件的角色为 users : chgrp users XXX
如果提示:Operation not permitted ,表示不允许的操作,需要用 su 提权
修改 XXX 文件的拥有者为 mysql : chown mysql XXX
chown 也能用来修改角色,chown users.root XXX 就是拥有者、角色一起修改的命令
如果只修改角色,chown .root XXX / chown :root XXX 就能达到目的(在这个命令里 . :都可以用于分隔)
修改 XXX 文件的权限时,可以用数字或符号来修改: chmod 770 XXX
数字: r:4 w:2 x:1 ,所以 770 表示 拥有者、角色 有全部权限,其他人无权限,7 = 4 + 2 + 1
7 可读可写可执行
6 可读可写
5 可读可执行
4 可读
3 可写可执行
2 可写
1 可执行
0 无权限
符号: u g o a + - = r w x
chmod u=rwx,g+rw,o-x XXX 这行命令表示,对 XXX 文件修改权限为:
拥有者设定为可读可写可执行权限
角色加上可读可写权限
其他人移除可执行权限
改变工作目录: cd 工作目录
复制文件: cp 来源文件 目标文件( -a 连同权限、修改时间等属性一起复制 )
移动文件: mv 来源文件 目标文件
删除文件: rm 目标文件
显示当前目录: pwd ( -P 参数会显示实际路径 )
新建一个目录: mkdir ( -m 711 会同时设置权限 -p 如果上层目录不存在,则创建它)
删除一个空的目录:rmdir (-p 如果上层目录是空的,也删除它)
Linux 支持环境变量 echo $PATH 可以输出当前设定的环境变量,环境变量可以修改
ls 命令是最常用的命令,它支持的参数列举如下:
-a 全部文件,包括 . .. 隐藏文件
-A 全部文件,包括 隐藏文件
-d 只列出文件夹
-f 直接列出,不按文件名排序
-F 在文件名前添加类型,* 表示可执行 / 表示目录 = 表示 Socket | 表示FIFO文件
-h 将文件大小以 KB、GB 换算后显示
-i 列出 index
-l 详细输出(不加 -l 时只输出文件名,加了会输出 权限、用户、角色、修改时间 等信息)
-n 列出 UID 与 GID 而非用户、角色名称
-r 反向排序
-R 展开子目录下的文件列表
-S 按文件大小进行排序
-t 按时间排序
--color=never 不加颜色区分
--color=always 加上颜色区分
--color=auto 加上预设的颜色区分
--full-time 输出完整的时间格式
--time={ atime , ctime } 输出 access 时间或权限变更时间 ctime 而非内容变更时间
basename 路径 返回路径最后的文件名
dirname 路径 返回路径最后的文件夹名
cat \ more \ less 查阅文件
head 显示头几行
tail \ tac 显示最后几行
nl 显示行号
od 以二进制方式显示 ( od -t xCc XXX 可以输出 hex 样式的内容)
如果想输出一个字符串的 Ascii ,可以输入命令: echo 字符串 | od -t dCc
文件有三个时间:modification time 、status time、access time
内容变更时,mtime(modification time)会随之变化
权限与属性变更时,ctime (status time)会随之变化
文件内容被读取时,atime(access time)会随之变化
可以多个命令用 ; 连接后一次执行: date; ls -l XXX ; ls -l --time=atime XXX ; \
ls -l --time=ctime XXX
上面这个命令里,尾部的 \ 表示换行接着输入。这个命令是由四个命令组合到一起的。
touch -a -c -d -m -t 修改文件时间,这个指令通常还会被用来建立一个空的文件
umask 可以看到系统的预设权限( 0022 ,表示新的文件或目录会去掉角色可写权限、其他人可写权限),加 -S 会以符号显示
通常,新建文件时,默认权限是 666,新建目录时,默认权限是 777
所以新建文件的权限最终是 -rw-r--r-- ( -rw-rw-rw - -----w--w-)
新建目录的权限最终是 drwxr-xr-x ( drwxrwxrwx - -----w--w-)
在新建文件或目录前,可以先修改预设权限 umask 002 表示把预设权限改成 新的文件或目录 去掉 其他人可写权限
除此之外,还有 chattr 和 lsattr 用于修改文件的隐藏权限
此文章中的内容来自:《鸟哥的Linux私房菜-基础篇》第四版
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2017-07-17 [C#]反射相关