到底该如何理解Unix/Linux的文件系统?看这篇就知道了
上周在部署 rails 应用时遇到一个和文件权限有关的问题,后来通过查阅 “UNIX/Linux 系统管理技术手册” 这本书解决了问题, 解决问题后, 觉得不能浅尝而止于是又花了些时间把”UNIX/Linux 系统管理技术手册” 这本书的第 6 章” 文件系统” 读了几遍, 读完了还是觉得有些不过瘾, 那就写个读书笔记吧。
文件树的组织
关于 UNIX 家族的文件系统的组织说的好听点是约定优于配置,说的难听点就是组织混乱,互不兼容,各有山头。 幸运的是对于一些比较重要的目录, 在各系统中逐渐形成了一种比较通用的标准,其内容如下表,我们在安放文件时可以参考此表。
标准目录及内容
路径名 操作系统 内容 /bin 所有 最核心的操作系统命令 /boot LS 内核和加载内核所需要的文件 /dev 所有 伪终端, 磁盘, 打印机等的设备项 /etc 所有 关键的启动文件和配置文件 /home 所有 用户默认的主目录 /kernel S 内核组件 /lib 所有 库, 共享库和部分 C 编译器 /media LS 可移动介质上文件系统的挂载点 /mnt LSA 可移动介质的临时挂载点 /opt 所有 可选的应用软件包 (尚未广泛使用) /proc LSA 所有正在运行进程的信息 /root LS 超级用户的主目录 /sbin 所有 系统最小规模运行所需的命令 /stand H独立的工具,磁盘格式化工具
,诊断工具等
/tmp 所有 每次重新引导就消失的临时文件 /usr 所有 次要文件和命令的层次结构 /usr/bin 所有 大多数命令和可执行文件 /usr/include 所有 编译 C 程序的头文件 /usr/lib 所有 库; 供标准程序使用的支持文件 /usr/lib64 L 在 64 位 Linux 发行版本上的 64 位库 /usr/local 所有本地软件 (用户所编写或者安装的软件);
/usr/ 的镜像结构
/usr/sbin 所有 不太关键的系统管理命令和修复命令 /usr/share 所有 多种系统共同的东西 /usr/share/man 所有 联机用户手册 /usr/src LSA 非本地包软件的源代码 (非广泛使用) /usr/tmp 所有 更多的临时空间 (每次重新引导仍然保留) /var 所有 系统专用数据和配置文件 /var/adm 所有各种不同的东西: 日志, 系统设置记录
,奇怪的管理信息
/var/log LSA 各种系统日志文件 /var/spool 所有 供打印机,邮件等使用的假脱机目录 /var/tmp 所有更多的临时空间 (在重新引导以后
,文件予以保留)
PS: L=Linux, S=Solars, H=HP-UX, A=AIX
文件类型
可以认为 UNIX 家族的文件有 7 种类型,
- 普通文件
- 目录
- 字符设备文件
- 块设备文件
- 本地域套接口
- 有名管道 (FIFO)
- 符号链接
可以使用命令 ls -ld 来查看文件的类型。ls 命令输出的***个字符表示类型。
- $ ls -ld /usr/include
- drwxr-xr-x 257 root wheel 8738 12 12 00:27 /usr/include
第 1 个字符是 d, 表示 /usr/include 是一个目录。
ls 命令使用的文件类型代码
文件类型 符号 创建方式 删除方式 普通文件 - 编辑器, cp 等 rm 目录 d mkdir rmdir, rm -r 字符设备文件 c mknod rm 块设备文件 b mknod rm 本地域套接口 s socket(2) rm 有名管道 p mknod rm 符号链接 l ln -s rm文件权限
使用命令 ls -ld 查看某个文件 file.txt,
- -rw-rw-r-- 1 hope 123 Feb 03 15:36 file.txt
- - rw- rw- r-- 1 hope 123 Feb 03 15:36 file.txt
- File owner group everyone else links owner size mod date file name
***个符号: -, 表示这是个文件,如果此符号是 d 则表示这是个目录 第二个符号: rw-, 表示用户对此文件有读写权限, 用二进制表示是: 110, 用八进制表示是: 6 第三个符号: rw-, 表示用户所在的组对此文件有读写权限, 用二进制表示是: 110, 用八进制表示是: 6 第四个符号: r–, 表示其他的人对此文件有读权限, 用二进制表示是: 100, 用八进制表示是: 4
file.txt 完整的权限 (即包括了用户,用户所在组和其他人的权限) 可以用八进制数表示为: 664。
如果我们需要让某个文件有和 file.txt 的一样的权限,可以使用下面的命令:
- chmod 664 abcfile.txt
可以通过 chmod 的权限编码表 来生成合适的八进制数权限。
chmod 的权限编码
八进制 二进制 权限 0 000 — 1 001 –x 2 010 -w- 3 011 -wx 4 100 r– 5 101 r-x 6 110 rw- 7 111 rwx
chmod 助记语法例子
为文件的属组添加写的权限, 比如 chmod u+w
file.txt
ug=rw,o=r 赋予属主和属组读 / 写的权限, 赋予其他人读的权限 a-x删除全部 3 种类别用户 (属主 / 属组 / 其他人)
的执行权限
ug=srx,o=设置文件的 setuid 和 setgid 位, 并且只给属主
和属组赋予读 / 执行的权限
g=u 让属组的权限跟属主的权限完全一样- u 代表 user 即属主
- g 代码 group 即属组
- o 代表 other 即其他人
- a 代表 all 即所有人
更多信息来自:东方联盟网 vm888.com
- 11-131分钟学会U盘启动安装Linux系统
- 11-13克隆MAC地址来绕过强制门户
- 11-13Linux运维常见故障及处理的 32 个锦囊妙计
- 11-13如何快速以管理员权限运行Linux命令?
- 11-13超全面的Linux应急响应技巧
- 11-136 款面向 Linux 用户的开源绘图应用程序
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 12-05亚马逊推出新一代基础模型 任意模态生成大模
- 12-05OpenAI拓展欧洲业务 将在苏黎世设立办公室
- 12-05微软质疑美国联邦贸易委员会泄露信息 督促其
- 12-05联交所取消宝宝树上市地位 宝宝树:不会对公
- 12-04企业微信致歉:文档打开异常已完成修复