第6章 Linux的文件权限与目录配置
Page: 139-160
- Linux是一个多用户、多任务的系统,因此可能常常有多人同时使用这台主机来工作,考虑到个人隐私和喜好,文件所有者这个概念的就显得很重要了。
- 每个账号都可以有多个用户组支持。
- root是万能的“天神”。
- 出现“Permission deny”是权限设置错误。
- 文件属性:
linux@linux-Lenovo-Y50-70:~$ ls -dl ..
drwxr-xr-x 3 root root 4096 11月 28 10:49 ..
第一列代表文件的类型与权限:
[d] :目录
[-] : 文件
[l] : 设备里面可供存储的接口设备
[c]: 串行端口设备,如键盘,鼠标(一次性读取设备)
接下来的字符中以3个为一组,均为"rwx"的3个参数的组合,
r代表可读,w代表可写,x代表可执行,-代表缺省
第二列表示有多少文件名连接到此节点(i-node)
第三列表示所有者账号
第四列表示所属用户组
第五列表示文件容量大小,默认单位为B
第六列表示创建日期或最近修改时间(时间过长仅显示年份)
第七列表示文件名(前面多一个 **.**表示隐藏文件,ls -a可以打出来)
- 文件权限重要性主要在“数据安全性”上
有系统保护功能、团队开发软件或数据共享功能 - chgrp:改变用户组
linux@linux-Lenovo-Y50-70:~$ chgrp [-R] groupname dirname/filename
-R: 递归持续更改,连同子目录下的文件和目录
- chown: 改变文件所有者
linux@linux-Lenovo-Y50-70:~$ chown [-R] user:group dirname/filename
可以顺便修改用户组名称,建议用分号隔开user和group
- cp会复制执行者的属性和权限
- chmod: 改变权限
linux@linux-Lenovo-Y50-70:~$ chmod [-R] xyz 文件或目录
xyz为数字类型的权限属性,r为4,w为2,x为1
亦可以用符号类型:
用u,g,o表示user,group,others,a表示all(所有人)
+为加入,-为除去,=为设置
案例:
linux@linux-Lenovo-Y50-70:~$ chmod [-R] u=rwx,go=rx 文件或目录
- 权限对文件的重要性:
r:可读取实际内容,如读取文本中的文字内容
w:可编辑、新增或是修改文件内容(不包括删除)
x:具有被系统执行的权限
Windows下文件是否可执行通过扩展名判断,Linux下则通过x,与文件名没有绝对关系
w是针对文件内容而言的 - 权限对目录的重要性:
r:读取目录结构列表的权限(可以ls)
w:更改目录结构列表的权限(很强大)
能够新增文件和目录,删除文件和目录,重命名,转移文件和目录的位置,总之与文件名变动有关
x:能否进入该目录成为工作目录(可以cd) - 如果在某目录下不具有x权限,就无法切换到该目录下,也就无法执行该目录下的命令,即使你具有r权限,(ls一下就出现一堆问号)因此要开放目录给任何人浏览时,至少要给r和x权限,w不可以随便给
- su -user可以切换身份,exit切换回原来身份
- 任何设备在Linux下都是文件
- 数据格式文件(data):程序运行中读取的特定格式的文件,cat会出现乱码,因为它是一种特殊格式的文件
- 连接文件(link)类似Windows的快捷方式
- 文件内容没有可执行的数据,即使有x权限也不能执行成功
- 用合适的扩展名来表示该文件是什么种类的
- Ext2/Ext3中:
单一文件或目录最大容许文件名是255字符
包含完整路径名称及目录(/)的完整文件名为4096字符 - 设置文件名最好避免特殊字符
- Linux目录配置标准:FHS
主要目的是希望让用户可以了解到软件通常放在哪个目录下,重点在于规范每个特定的目录下应该放什么样子的数据。 - 根目录不仅衍生其他目录,还与开机、还原、系统修复等操作有关
- 每一个目录不只能使用本地端的文件系统,也可以使用网络上的文件系统。例如用NFS(Netword File System)服务器挂载某特定目录
- 每一个文件的目录名(含完整路径)都是独一无二的
- 绝对路径:由/开始写起
- 相对路径:相对于目前路径的文件名写法
- . 表示当前目录,两个点表示父目录
第7章 Linux文件与目录管理
Page: 163-195
- -表示前一个工作目录
- ~表示当前用户所在的主文件夹(home里面)
- cd:切换工作目录
- Tab有文件补齐功能,可以快速完整输入目录
- pwd:显示目前所在目录
-P参数:不以连接文件的数据显示,而是显示正确的完整路径 - mkdir:新建新目录
linux@linux-Lenovo-Y50-70:~$ mkdir [-mp] 目录名称
-m:直接配置文件的权限,不需要看默认权限(umask)
-p:将所需要的目录一并创建
- rmdir: 删除空目录
-p:连同上层的空目录一起删除
-r:将目录下的东西一并删除 - 执行文件路径的变量:$PATH
- 我们可以在任何地方执行/bin/ls是因为有环境变量。
- 执行ls时:系统会依照PATH的设置去每个PATH定义的目录下查询名为ls的可执行文件,先查询到的同名命令先执行
- echo $PATH可以显示出环境变量($表示后面的是变量)
- PATH内容由一堆目录组成,每个目录中间由冒号隔开
- 若PATH没有规范到可执行文件所在文件夹,可以使用绝对路径执行
- 通过:PATH=$PATH:/dirname来修改PATH
- 不同用户默认的PATH不同
- ls:查看文件与目录
- -d:仅列出目录本身
-a:列出全部文件(包括隐藏文件)
-l:列出长数据串(权限/属性…) - 默认:显示非隐藏文件,以文件名进行排序
- ll默认为ls -l(bash shell的alias功能)
- -d:仅列出目录本身
- cp:复制文件(也可以创建连接)
- -i:覆盖时询问
-l:进行硬链接的文件创建(ln命令也可以)
-p:连同属性一起复制过去,而非使用默认属性(备份常用)
-a:整个数据权限完全一样
-r:用于目录复制 - 源文件有两个以上,最后一个文件必须是目录
- 目的文件所有者一般是命令操作者本身,因此在某些特殊文件(如密码文件)复制时必须加上-a或者-p参数才行
- 没有加参数时复制连接文件,复制的是那个被连接的文件
- -r参数可以复制目录,但是权限可能被改变
- 与所有者、用户组相关的,一般用户无法进行,即使加上-a参数也无法完整复制权限
- -i:覆盖时询问
- 通配符*可以表示多个字符,?表示一个字符
- rm:移除文件或目录
- -r:递归删除
- root身份自动加入-i(询问)
- 文件名最好不要以-开头(参数误判)
- mv:移动文件与目录或更名
- -u:目标文件比较新时才会更新(update)
- rename:字符串替换方式批量改变文件名
usage: rename [原文件名] [新文件名] [文件] - basename:取得文件名
- dirname:取得路径名
- 文件内容查阅:
- cat:由第一行开始显示文件内容
- tac:从最后一行开始,tac是cat倒写形式
- nl:显示时输出行号
- more:一页一页的显示
- less:与more类似但可以翻页
- head:只看头几行
- tail:只看尾几行
- od:二进制方式读取
- touch:修改文件时间或创建文件
- 三个时间:
- mtime(modification time):文件内容修改时更新
- ctime(status time):状态改变时更新(如权限/属性)
- atime(access time):内容被取用时更新
- 可通过touch修改日期和时间
- 三个时间:
- umask:文件默认权限
- 文件默认权限为666,目录为777
- umask的分数指的是:该值需要减掉的权限
- chattr、lsattr:文件隐藏属性
- chattr:设置文件隐藏属性
chattr [±=] [ASacdistu] 文件或目录名称
a:设置后只能增加数据,不能删除和修改(仅root能设置)
i:使文件无法改动(仅root能设置) - lsattr:显示隐藏属性
lsattr [-adR] 文件或目录
- chattr:设置文件隐藏属性
- 文件特殊权限:
- SUID:
- s出现在所有者的x权限上被称为SUID
- SUID仅对二进制程序有效
- 执行者需要有x权限
- 仅在执行该程序过程(run time)中有效
- 执行者将具有所有者的权限
- SGID:
- 与SUID不同的是,SGID可以针对目录和文件设置
- 执行者需要有x权限
- 执行时执行者将获得用户组的支持
- 对于目录:
- 用户具有r、x权限就能够进入目录
- 用户在该目录下的有效用户组将会变成该目录的用户组
- 新建文件的用户组与此目录的用户组相同(开发时很重要)
- SBIT:
- 只对目录生效
- 用户在该目录下创建文件或目录时,仅有自己和root有权利删除该文件
- 权限设置:
仍然是4+2+1,将这个得到的数字加在chmod的三个数字前面
例:chmod 4755 filename
符号法下:SUID、SGID为s,SBIT为t - 空权限:S、T
例:7666,连所有者都没有x权限,group和others就更没办法执行该文件,所以是S和T
- SUID:
- file:查看文件类型
#:file dirname - 查找命令的完整文件可用which和type,这两个命令都通过PATH变量来查找文件名
- 要查找命令的完整文件名可用whereis或locate到数据文件去查找,不查找实际文件系统
- 利用find可以加入许多参数来直接查询文件系统
- 用户所能使用的命令是通过PATH命令去查找的
第8章 Linux磁盘与文件系统管理
- 磁盘组成:
- 圆形的盘片(主要记录数据的部分)
- 机械手臂和机械手臂上的磁头(读写磁盘上的数据)
- 主轴马达(转动盘片,让磁头在盘片上读写数据)
- 扇区为最小的物理存储单位,每个扇区大小为512字节
- 扇区组成圆是柱面,柱面是分区最小单位
- 第一个扇区最重要,里面有硬盘主引导记录及分区表
- 磁盘分区意味指定分区的起始与结束柱面
- 分区表记录指定分区的柱面范围,仅有64字节,所以只能记录4条分区的记录
- 这4条记录称为主分区或扩展分区,其中扩展分区能再分出逻辑分区,能被格式化的只有分区和逻辑分区
- 主分区和扩展分区最多4个(硬盘限制)
- 扩展分区最多一个(操作系统限制)
- 逻辑分区是逻辑分区持续分出来的分区
- 能够被格式化后作为数据访问的分区为主要分区和逻辑分区,扩展分区无法格式化
- 逻辑分区数量依操作系统而不同
- 为什么要格式化?
每种操作系统设置的文件属性/权限不同,为了存放这些文件所需数据,使之成为操作系统能够利用的格式 - 每种操作系统能够使用的文件系统并不相同
- U盘使用的文件系统一般为FAT格式,这种系统没有inode存在,因此没办法将文件所有block在一开始就读出来,每个block号码都记录在前一个block里
- 碎片整理的原因是文件写入的block过于分散,汇总后数据读取会变得容易(无inode)
- 含inode和block的系统称为索引式文件系统
- Ext2文件系统
- 文件系统一开始就将inode和block规划好,除非重新格式化,否则固定后不再变动
- 文件系统很大时将inode和block放在一起不容易管理,所以Ext2系统格式化时基本是区分为多个block group,每个块组都有独立的inode/block/superblock系统
- 文件系统前面有一个启动扇区来安装引导装载程序,这样就能将不同的引导装载程序安装到个别文件系统前端,而不用覆盖唯一的MBR。
- 块组的6个主要内容:
- data block(数据块):放置文件内容的地方
- Ext2支持1/2/4KB三种,每个block都有编号,方便inode记录
- 每个block最多只能放置一个文件的数据
- 文件大于一个block大小占用多个block,小于则占一个
- 大的block可能造成容量浪费
- 小的可能有不良的读写性能(更多的inode号码)
- inodetable(inode表格):
- inode主要记录文件属性和block号码
- inode数量和大小也在格式化时就固定
- inode大小为128字节
- 每个文件占用一个inode
- 能够创建的文件数量与inode有关
- 读取文件时先找到inode,分析记录的权限与用户的是否符合,符合才能读取block内容
- inode记录一个block号码花费4字节
- inode记录号码的区域定义为12个直接、一个间接、一个双间接和一个三间接记录区,间接就是再拿一个block当做记录block号码的记录区,文件太大就会使用间接block编号
- 间接:256*1K(记录号码花费4字节,所以是256)
- 双间接:256*256*1K(以1K为例子)
第一个block会指定256个第二层,每个第二层指定256个号码 - 大于2K的block将会受到系统本身限制,计算结果不符上述
- superblock(超级块):
superblock是记录整个文件系统相关信息的地方,没有它就没有文件系统 - File system Description(文件系统描述说明):
记录每个block group的开始与结束的block号码,以及每个区段分别介于哪一个block号码之间 - block bitmap(块对照表):
记录未使用的block号码,系统能够快速找到可用空间 - inode bitmap(inode对照表):
- 记录未使用的inode号码,类似block bitmap
- data block(数据块):放置文件内容的地方
- df:调出目前挂载的设备
linux@linux-Lenovo-Y50-70:~$ df
-h:仅列出superblock
- dumpe2fs:查看文件系统相关信息(superblock)
linux@linux-Lenovo-Y50-70:~$ dumpe2fs [-bh] 设备文件名
-h:仅列出superblock的数据,不会列出其他的区段内容
- 目录容量为1024整数倍,其中/proc存在于内存中,所以容量为0
- inode本身并不记录文件名,文件名的记录在目录的block中,因此读取某文件时必会经过目录的inode和block,然后才能招到那个待读取文件的inode号码,最终才会读到正确的文件的block内的数据
- 由于目录树从从根目录读起,因此系统通过挂载的信息可以找到挂载点的inode号码,得到根目录的inode内容,并根据该inode读取根目录的block内的文件数据,再一层一层地往下读到正确的文件名
- 新增一个文件,文件系统的行为:
- 确定用户对该目录是否有w和x权限
- 根据inode bitmap找到未使用的inode号码,将权限/属性写入
- 根据block bitmap招到未使用的block号码,写入数据并更新inode
- 同步更新block bitmap和inode bitmap,并更新superblock内容
- inode table和data block称为数据存放区域,其他例如superblock、block bitmap、inode bitmap等区段就称为meda data(中间数据)
- 数据不一致状态:
- 写入文件系统时因为不明原因中断,所以写入的只有inode table和data block,最后一个同步更新meda data的步骤没有做完
- 早期Ext2中发生该问题,系统就会重启时对比superblock中的记录。因为要针对meda data区域和实际数据存放区来对比,需要搜寻整个文件系统,于是兴起了日志文件系统。
- 日志文件系统:
在文件系统中规划出一个块,专门记录写入或修订文件时的步骤 - 数据需要加载到内存中CPU才能够对该数据进行处理
- 异步处理:解决磁盘的效率问题
系统加载一个文件到内存后,如果没有改动,在内存区段的文件数据会被设置为clean,更改过被设置为dirty,此时操作都在内存中进行,没有写入磁盘,系统会不定时地将dirty内存写入磁盘来保持内存和磁盘数据的一致性,可以通过sync命令强迫写入磁盘 - 正常关机时,关机命令会主动调用sync
- 不正常关机时,由于数据尚未写回磁盘,重启时可能会花很多时间在磁盘检验,甚至导致文件系统的损坏
- 系统会将常用的文件数据放置到主存储器的缓冲区,加速读写
- 挂载:将文件系统与目录树结合的操作
挂载点一定是目录,必须要挂载到目录树的某个目录后才能使用该文件系统 - 文件系统最顶层的目录的inode号码一般是2号
- df:列出文件系统的整体磁盘用量
-h:以较易阅读的格式显示
-i:以inode数量显示 - du:评估文件系统的磁盘用量
du会直接到文件系统内去查找所有的文件数据
df和du的区别和联系 - 连接文件:ln
- 硬链接(hard link):
- # ln 源文件 新文件
- 通过inode来产生新文件名,而不是产生新文件(只是在目录的block多写入一个关联数据,在目录的block还没满的情况下既不会增加inode也不会耗用block数量)
- 简单来说:
hard link只是在某个目录下新建一条文件名连接到某inode号码而已 - 好处:将任何文件名删除,block和inode都存在,能通过另一个文件名来进行读写
- hard link不能跨文件系统,也不能连接到目录(因为新目录下的文件名也需要硬链接源目录的文件,复杂度大,暂时不支持)
- 新建目录时,新的目录连接数为2,上层目录的连接数会增加1(因为.和…)
- 符号连接(symbolic link):
- 使用加上-s参数即可,不加就是hard link
- 源文件被删除后无法打
- 新的文件跟原来的inode号码不同,大小取决于连接文件名长度
- 修改symbolic的时候修改的其实是源文件
- 硬链接(hard link):
- 新增一块硬盘时,需要的操作:
- 对磁盘进行分区,以新建可用的分区
- 对分区进行格式化,以创建系统可用的文件系统
- 对新建的文件系统进行检验(可选)
- 创建挂载点(目录),将其挂载上来
- fdisk:磁盘分区
- 只有root能执行,先用df找磁盘文件名
- 输入m获得帮助(不用背命令)q退出,w保存
- 使用的设备文件名不加数字,因为分区针对的是整个磁盘设备而不是某个分区
- 可用partprobe强制让内核重载分区表,而不用启动
- mkfs(make file system):磁盘格式化
- # mkfs [-t 文件系统格式] 设备文件名
- 连按两下tab查找mkfs支持的文件格式
- mkfs实际上是综合命令,例如:-t ext3时就调用mkfs.ext3这个命令
- 由于没有详细指定文件系统的选项,系统会使用默认值来格式化,指定这些选项可用mke2fs
- fsck、badblocks:磁盘检验
- fsck在扫描硬盘时可能造成文件系统损坏,所以执行时被检查的分区不可挂载到系统上
- badblocks:检查硬盘或软盘扇区有没有坏轨
- fsck:检查文件系统有没有损坏
- 磁盘挂载与卸载:
- 挂载文件系统后,原目录下的东西会暂时消失,新分区被卸载时会再次显现
- # mount [block文件] [挂载点]
- 挂载后的光驱/软盘卸载后才能退出
- # umount [-fn] 设备文件名或挂载点
- 磁盘参数:linux内核中表示不同的设备是通过major 和minor number实现的,通过major和minor Number来加载相应的驱动程序,可以用mknod修改。
- e2label:修改卷标
- 通过修改/etc/fstab来让系统开机时自动挂载
- 镜像文件不用刻录,loop挂载到目录上也能使用
- 挂载格式化的大文件能解决不良分区的情况,用途广泛,可以在原本的分区在不改动原有分区的情况下制作出想要的环境
- swap:内存交换空间
- 作用应付物理内存不足的情况下所造成的内存扩展记录的功能
- 内存不足时,为了让后续程序顺利运行,内存中暂不使用的程序和数据会被挪到swap,把内存空出来给需要执行的程序加载
- swap利用硬盘存放内存信息,用到时硬盘灯会闪个不停
- 是Linux安装的必须的两个分区之一(另一个是根目录)
- 最好预留一下swap来缓冲系统的内存用量
- 休眠时的程序状态会被记录到swap去
- 使用到2TB以上的磁盘使用parted命令来操作