鸟哥的Linux私房菜学习笔记(一):文件、目录与磁盘格式

第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功能)
  • cp:复制文件(也可以创建连接)
    • -i:覆盖时询问
      -l:进行硬链接的文件创建(ln命令也可以)
      -p:连同属性一起复制过去,而非使用默认属性(备份常用)
      -a:整个数据权限完全一样
      -r:用于目录复制
    • 源文件有两个以上,最后一个文件必须是目录
    • 目的文件所有者一般是命令操作者本身,因此在某些特殊文件(如密码文件)复制时必须加上-a或者-p参数才行
    • 没有加参数时复制连接文件,复制的是那个被连接的文件
    • -r参数可以复制目录,但是权限可能被改变
    • 与所有者、用户组相关的,一般用户无法进行,即使加上-a参数也无法完整复制权限
  • 通配符*可以表示多个字符,?表示一个字符
  • 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] 文件或目录
  • 文件特殊权限:
    • 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
  • 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
  • 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内的文件数据,再一层一层地往下读到正确的文件名
  • 新增一个文件,文件系统的行为:
    1. 确定用户对该目录是否有w和x权限
    2. 根据inode bitmap找到未使用的inode号码,将权限/属性写入
    3. 根据block bitmap招到未使用的block号码,写入数据并更新inode
    4. 同步更新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的时候修改的其实是源文件
  • 新增一块硬盘时,需要的操作:
    • 对磁盘进行分区,以新建可用的分区
    • 对分区进行格式化,以创建系统可用的文件系统
    • 对新建的文件系统进行检验(可选)
    • 创建挂载点(目录),将其挂载上来
  • 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命令来操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值