小奥的学习笔记

  • Home
  • Learning & Working
    • Speech Enhancement Notes
    • Programming language
    • Computer & DL
    • MOOC
  • Life
    • Life Time
    • Thinking & Comprehension
    • Volunteer
    • Plan
    • Travel
  • Footprints
  • GuestBook
  • About
    • About Me
    • 个人履历
    • 隐私策略
  1. 首页
  2. Study-notes
  3. Computer & DL
  4. Linux
  5. 正文

《鸟哥的Linux私房菜》(基础篇)笔记整理(第7章)Part.2

2019年1月5日 1084点热度 0人点赞 0条评论

二、文件系统的简单操作

1.磁盘与目录的容量:df,du

(1)df

df是列出文件系统的整体磁盘使用量。

[root@study ~]# df [-ahikHTm] [目录或文件名]

选项与参数:

-a:列出所有的文件系统,包括系统特有的/proc等文件系统;

-k:以KBytes的容量显示各文件系统;

-m:以MBytes的容量显示各文件系统;

-h:以人们较易阅读的GBytes,MBytes,KBytes等格式自行显示;

-H:以M=1000K取代M=1024K的进位方式;

-T:连同该partition的文件系统名称(例如xfs)也列出;

-i:不用磁盘容量,而以inode的数量来显示。

注意,/dev/shm/目录是利用内存虚拟出来的硬盘空间,通常是总物理内存的一半。由于我分配给虚拟机的内存为2G,所以大小为986MB。在这个目录下面新建的任何数据文件访问速度非常快,但是缺点是一旦关机,数据就会消失。

(2)du

du是评估文件系统的的磁盘使用量(常用在推测估计目录所占容量)。

[root@study~]#du [-ahskm] 文件或目录名称

选项与参数:

-a:列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。

-h:以人们较易读的容量格式(G/M)显示;

-s:列出总量而已,而不列出每个各别的目录占用容量;

-S:不包括子目录下的总计,与-s有点差别。

-k:以KBytes列出容量显示;

-m:以MBytes列出容量显示。

2.硬连接与符号连接:ln

在Linux下连接文件有两种,一种是类似于Windows快捷方式的文件,可以快速的连接到目标文件(目录);另一种则是通过文件系统的inode连接来产生新文件名,而不是产生新文件。后者称为硬链接(hard link)。

(1)硬连接:在某个目录下新增一个文件名连接到某个inode号码的关联记录。

图2.1 硬连接

两个文件名都连接到了1048716这个inode号码,这两个文件名的权限和属性完全一致。再注意一下,root前面的数字在第一行为1,第二行为2,其实意思是有多少个文件名连接到了这个inode号码。这个过程就如图2.2所示的这样一个结构。

图2.2 硬连接的文件读取示意图

可以看出,从1或2的目录的inode指定的block找到了两个不同的文件名,但是它们都指向了同一个inode(名为real的inode),然后inode再去读取最终数据。这样的好处是非常安全,即如果将任何一个文件名删除,inode和block都还是存在的,依旧可以通过另一个文件名来读取到正确的文件数据;此外,不论用哪个文件名编辑,最终结果都会写入到相同的inode和block中。

hard link有以下限制:

①Hard link不能跨文件系统;

②Hard link不能指向目录

(2)Symbolic Link(符号连接)

符号连接亦称软连接(Soft link),它是建立一个独立的文件,而这个文件会让数据的读取指向其连接的文件的文件名。当来源文件被删除之后,symbolic link就会打不开。其读取示意图如图2.3所示。

图2.3 符号连接的文件读取示意图

这里需要注意的是,Symbolic Link与Windows快捷方式可以划等号,由Symbolic link所建立的文件为一个独立的新文件,会占用掉inode和block。

下面介绍一下ln这个指令。

[root@study ~]# ln [-sf] 来源文件 目标文件

选项与参数:

-s:如果不加任何参数就进行连结,那就是hardlink,至于-s就是symboliclink

-f:如果目标文件存在时,就主动的将目标文件直接移除后再建立!

(3)关于目录的link数量

一个空目录里面至少会存在什么呢?存在.与..这两个目录,那么我们新建一个/tmp/testing的目录的时候,基本会有三个东西,分别是:

/tmp/testing

/temp/testing/.

/temp/testing/..

其中/tmp/testing和/tmp/testing/,是一样的,而/tmp/testing/..则代表/tmp目录。所以我们在新建一个目录的时候,新的目录的link数为2,而上层目录的link数则会增加1。

 

三、磁盘的分区、格式化、检查与挂载

如果我们想要在系统里面新增一个磁盘时,应该有哪些动作需要做的呢?

①对磁盘进行分区,以建立可用的partition;

②对该partition进行格式化,以建立系统可用的文件系统;

③(可选)对刚刚建立好的文件系统进行校验;

④在linux系统上,需要建立挂载点,并将其挂在上来。

1.查看磁盘分区状态

(1)lsblk可以看做为“list block device”的缩写。使用方法如下:

[root@study ~]# lsblk [-dfimpt] [device]

选项与参数:

-d:仅列出磁盘本身,并不会列出该磁盘的分区数据

-f:同时列出该磁盘内的文件系统名称

-i:使用ASCII的线段输出,不要使用复杂的编码(再某些环境下很有用)

-m:同时输出该设备在/dev底下的权限数据(rwx的数据)

-p:列出该设备的完整文件名!而不是仅列出最后的名字而已。

-t:列出该磁盘设备的详细数据,包括磁盘队列机制、预读写的数据量大小等

如图所示3.1所示是输入lsblk命令后我的硬盘的情况的一部分。图中的各列解释如下:

①NAME:设备名称。会省略/dev等前导目录。

②MAJ:MIN:主要:次要设备代码。

③RM:是否为可移除设备。如U盘等。

④SIZE:容量。

⑤RO:是否为只读设备。

⑥TYPE:是磁盘(disk)、分区(partition,part)、只读存储器(rom)、loop设备(loop)。

⑦MOUNTPOINT:挂载点。

图3.1 lsblk情况

(2)blkid:列出设备的UUID参数。UUID是全局单一标识符(universally unique identifier)的意思。

(3)parted:列出磁盘的分区表类型和分区信息。格式如下:

[root@study ~]# parted device_name print

2.磁盘分区:gdisk/fdisk

MBR分区使用fdisk,GPT分区使用gdisk。partprobe可以用来更新Linux核心的分区表信息。

3.磁盘格式化

格式化,又被称为“制作文件系统(make 文件系统)”,所以这个综合指令名为mkfs。对于xfs来说为mkfs.xfs,对于ext4来说为mkfs.ext4。

(1)XFS文件系统:mkfs.xfs

 

[root@study ~]# mkfs.xfs [-b bsize] [-d parms] [-i parms] [-l parms] [-L label] [-f] \

[-r parms] 设备名称

选项与参数:

关于单位:底下只要谈到“数值”时,没有加单位则为bytes值,可以用k,m,g,t,p(小写)等来解释。比较特殊的是s这个单位,它指的是sector的个数。

-b:后面接的是block容量,可由512到64k,不过最大容量限制为Linux的4k。

-d:后面接的是重要的data section的相关参数值,主要的值有:

agcount=数值:设定需要几个储存群组的意思(AG),通常与CPU有关;

agsize=数值:每个AG设定为多少容量的意思,通常agcount/agsize只选一个设定即可;

file:指的是『格式化的设备是个文件而不是个设备』的意思!(例如虚拟磁盘);

size=数值:data section的容量,亦即你可以不将全部的设备容量用完的意思;

su=数值:当有RAID时,那个stripe数值的意思,与底下的sw搭配使用;

sw=数值:当有RAID时,用于储存数据的磁盘数量(须扣除备份盘与备用盘);

sunit=数值:与su相当,不过单位使用的是『几个sector(512bytes大小)』的意思;

swidth=数值:就是su*sw的数值,但是以『几个sector(512bytes大小)』来设定。

-f:如果设备内已经有文件系统,则需要使用这个-f来强制格式化才行。

-i:与inode有较相关的设定,主要的设定值有:

size=数值:最小是256bytes最大是2k,一般保留256就足够使用了;

internal=[0|1]:log设备是否为内建?默认为1内建,如果要用外部设备,使用底下设定;

logdev=device:log设备为后面接的那个设备上头的意思,需设定internal=0才可;

size=数值:指定这块登录区的容量,通常最小得要有512个block,大约2M以上才行。

-L:后面接这个文件系统的标头名称Labelname的意思。

-r:指定realtimesection的相关设定值,常见的有:

extsize=数值:就是那个重要的extent数值,一般无需设定,但有RAID时,最好设定与swidth的数值相同较佳!最小为4K最大为1G。

(2)EXT4文件系统mkfs.ext4

[root@study ~]# mkfs.ext4 [-b size] [-L label] 设备名称

选项与参数:

-b:设定block的大小,有1K、2K、4K的容量。

-L:后面接这个装置的标头名称。

4.文件系统检查

(1)xfs_repair:当有xfs文件系统错乱的时候用这个指令。

[root@study ~]# xfs_repair [-fnd] 设备名称

选项与参数:

-f  :后面的设备其实是个文件而不是硬件。

-n  :单纯检查并不修改文件系统的任何数据 (检查而已)

-d  :通常用在单人维护模式底下,针对根目录 (/) 进行检查与修复的动作!很危险!不要随便使用。

xfs_repair可以检查/修复文件系统,不过,因为修复文件系统是个很庞大的任务!因此,修复时该文件系统不能被挂载。Linux系统有个装置无法被卸除,这就是根目录啊。如果你的根目录有问题怎办?这时得要进入单人维护或救援模式,然后通过-d这个选项来处理。加入-d这个选项后,系统会强制检验该装置,检验完毕后就会自动重新启动。

(2)fsck.ext4:fsck是一个综合指令,针对ext4的话,使用fsck.ext4检测比较好。

[root@study ~]# fsck.ext4 [-pf] [-b superblock] 设备名称

选项与参数:

-p:当文件系统在修复时,若有需要回复y的动作时,自动回复y来继续进行修复动作。

-f:强制检查。一般来说,如果fsck没有发现任何unclean的标志,不会主动进入检查的,如果您想要强制fsck进入检查,就得加上-f标志。

-D:针对文件系统下的目录进行优化配置。

-b:后面接superblock的位置!一般来说这个选项用不到。但是如果你的superblock因故损坏时,通过这个参数即可利用文件系统内备份的superblock来尝试救援。一般来说,superblock备份在:1Kblock放在8193,2Kblock放在16384,4Kblock放在32768。

无论是xfs_repair或fsck.ext4,这都是用来检查与修正文件系统错误的指令。注意:只有身为root且你的文件系统有问题的时候才使用这个指令,否则在正常状况下使用此指令可能会造成对系统的危害。

另外,如果你怀疑刚刚格式化成功的磁盘有问题的时后,也可以使用xfs_repair/fsck.ext4来检查磁盘。此外,由于xfs_repair/fsck.ext4在扫瞄磁盘的时候,可能会造成部分文件系统的修订,所以『执行xfs_repair/fsck.ext4时,被检查的partition务必不能挂载到系统上,也就是说需要在卸除的状态。

5.文件系统的挂载与卸载

挂载前的注意事项:

①单一文件系统不应该被重复挂载在不同的挂载点(目录)中;

②单一目录不应该重复挂载多个文件系统;

③要作为挂载点的目录,理论上应该都是空目录才是。当然,若没有使用空目录,那么挂载后该目录中的文件会被暂时隐藏,当卸载的时候文件就会再次显示出来。

(1)挂载使用mount,下面简单做一些介绍。

[root@study ~]# mount -a

[root@study ~]# mount [-l]

[root@study ~]# mount [-t 文件系统] LABEL=''  挂载点

[root@study ~]# mount [-t 文件系统] UUID=''   挂载点(推荐)

[root@study ~]# mount [-t 文件系统] 设备文件名  挂载点

选项与参数:

-a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来。

-l:单纯的输入mount会显示目前挂载的信息。加上-l可增列Label名称。

-t:可以加上文件系统种类来指定欲挂载的类型。常见的Linux支持类型有:xfs,ext3,ext4,reiserfs,vfat,iso9660(光盘格式),nfs,cifs,smbfs(后三种为网络文件系统类型)。

-n:默认情况下,系统会将实际挂载情况实时写入/etc/mtab,助于其他程序运行。但在某些情况下(例如单人维护模式)为了避免问题会刻意不写入。此时就得要使用-n选项。

-o:后面可以接一些挂载时额外加上的参数!比方说账号、密码、读写权限等:

async,sync:此文件系统是否使用同步写入(sync)或异步(async)的内存机制,预设为async;

atime,noatime:是否修订文件的读取时间(atime)。为了效能,某些时刻可使用noatime

ro,rw:挂载文件系统成为只读(ro)或可擦写(rw);

auto,noauto:允许此文件系统被以mount-a自动挂载(auto);

dev,nodev:是否允许此文件系统上,可建立装置文件,dev为可允许;

suid,nosuid:是否允许此文件系统含有suid/sgid的文件格式;

exec,noexec:是否允许此文件系统上拥有可执行binary文件;

user,nouser:是否允许此文件系统让任何使用者执行mount?一般来说,mount仅有root可以进行,但下达user参数,则可让一般user也能够对此partition进行mount;

defaults:默认值为:rw,suid,dev,exec,auto,nouser,andasync。

remount:重新挂载,这在系统出错,或重新更新参数时,很有用。

Linux十分聪明,我们不需要加上-t选项,系统会自动分析最恰当的文件系统来尝试挂载你的设备。Linux是利用分析文件系统superblock搭配linux自己的驱动程序来测试挂载,如果成功了,就立刻自动使用该类型的文件系统挂载起来。系统是参考下面两个文件进行挂载:

①/etc/文件系统s:系统指定的测试挂载文件系统类型的优先级;

②/proc/文件系统s:Linux系统已经加载的文件系统类型。

注意:

①光驱挂载成功以后就无法退出光盘,除非将其卸载才可以退出。

②如果参数要改变或者根目录出现“只读”状态,根目录需要重新挂载,可以通过使用“mount -o remount, rw, auto”来进行。

(2)卸载挂载使用umount。

[root@study ~]# umount [-fn] 设备文件名称或挂载点

选项与参数:

-f:强制卸载。可用在类似网络文件系统(NFS)无法读取到的情况下。

-l:立刻卸载文件系统,比-f还强。

-n:不更新/etc/mtab情况下卸载。

对于有其它挂载的项目,一定要用挂载点来写出才可以。

6.磁盘/文件系统参数修订

Linux下所有设备都以文件来代表,通过文件的major于minor数值来代替,这两个数值是由特殊意义的。

磁盘文件名 Major Minor
/dev/sda 8 0-15
/dev/sdb 8 16-31
/dev/loop0 7 0
/dev/loop1 7 1

手动处理设备文件使用mknod。

[root@study ~]# mknod 设备文件名 [bcp] [Major] [Minor]

选项与参数:

装置种类:

b:设定装置名称成为一个外部存储设备文件,例如磁盘等。

c:设定装置名称成为一个外部输入设备文件,例如鼠标/键盘等。

p:设定装置名称成为一个FIFO文件。

Major:主要装置代码。

Minor:次要装置代码。

xfs_admin可以修改XFS文件系统的UUID和Label name。

[root@study ~]# xfs_admin [-lu] [-L label] [-U uuid] 设备文件名

选项与参数:

-l:列出这个设备的labelname;

-u:列出这个设备的UUID;

-L:设定这个设备的Labelname;

-U:设定这个设备的UUID。

tune2fs可以修改ext4的label name和UUID。

[root@study ~]# tune2fs [-l] [-L Label] [-U uuid] 设备文件名

选项与参数:

-l:类似dumpe2fs-h的功能,将superblock内的数据读出来;

-L:修改LABEL name;

-U:修改UUID。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: linux 鸟哥的linux私房菜
最后更新:2019年1月5日

davidcheung

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

搜索
欢迎关注我的个人公众号
最新 热点 随机
最新 热点 随机
DEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架 奥地利匈牙利九日游旅程 论文阅读之Study of the General Kalman Filter for Echo Cancellation 小奥看房之鸿荣源珈誉府 杭州往返旅途及西溪喜来登和万怡的体验报告 2022年的第一篇碎碎念
奥地利匈牙利九日游旅程小奥看房之鸿荣源珈誉府论文阅读之Study of the General Kalman Filter for Echo CancellationDEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架
Python chapter 5 learning notes 论文阅读之Study of the General Kalman Filter for Echo Cancellation [leetcode]题目解析(191015) 下学期微机课的第一篇日志 A very interesting View 山东省机器人大赛双足(交叉足)翔梦技术报告
标签聚合
高中 Python 鸟哥的linux私房菜 算法 Java leetcode python学习 linux 生活 学习
最近评论
davidcheung 发布于 5 个月前(02月09日) The problem has been fixed. May I ask if you can s...
tk88 发布于 5 个月前(02月07日) Hmm is anyone else having problems with the pictur...
cuicui 发布于 9 个月前(10月20日) :wink:
niming 发布于 10 个月前(09月19日) 同级校友,能刷到太巧了
davidcheung 发布于 2 年前(08月16日) 我得找一下我之前整理的word文档看一下,如果找到了我就更新一下这篇文章。
Nolan 发布于 2 年前(07月25日) 您的笔记非常有帮助。贴图不显示了,可以更新一下吗?
davidcheung 发布于 3 年前(06月19日) 到没有看webrtc的代码。现在主要在看我们公司的代码了。。。只是偶尔看一看webrtc的东西。。。
aobai 发布于 3 年前(03月13日) gain_change_hangover_ 应该是每三个block 只能够调整一次,这样保证每帧...
匿名 发布于 5 年前(12月30日) 烫
小奥 发布于 5 年前(12月12日) webRTC里面的NS本身我记得就是在C++里面呀

COPYRIGHT © 2025 小奥的学习笔记. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

陕ICP备19003234号-1

鲁公网安备37120202000100号