Linux-2020-spring-5-20

来自SUDA-HLT
跳到导航 跳到搜索


文件系统的介绍

一些概念

 分区(partition)
 格式化(formatting)
 windows下的文件系统:NTFS(能存储大文件), FAT
 linux下的文件系统:EXT2/3/4 linux extended file system
  • 文件系统的定义
 文件系统是一个软件,从而实现在磁盘上存储、增加、删除、读文件。
 百度上的定义:文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区,或文件系统种类。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:与文件管理有关软件、被管理文件以及实施文件管理所需数据结构。从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。

EXT2文件系统

  • 一个文件如何存储
    • 每个文件对应一个唯一的inode (128或256个字节):存储文件的属性(读写权限、创建时间、修改时间、访问时间等)、block的指针列表
    • 对应0~n个block(通常设置为4K字节):存储文件的真实内容
    • 整个文件系统有一个superblock:记录文件系统共有多少个inode、多少个block、多少个空闲的block、inode的bitmap、block的bitmap等
      • 注意理解bitmap中bit的概念
 ls -li a.txt  # -i显示inode编号
  • 相关命令
   $ sudo dumpe2fs /dev/sda1/ | less # 查一下dump啥意思,挺好玩的。把ext2 file system的信息dump出来
   $ du -sh main.c 查看文件的真实物理大小 (要考)
   $ du -sh .

挂载和卸载(mount, umount)

  • 定义:挂载是指把一个文件系统挂到目录树中的一个点上
    • 挂载点对应一个空目录(不是空目录也可以,但是会出现盖被子的情况)
  • windows(分区文件系统)
    • C:/;D:/;E:/
  • linux(目录结构)
    • /bin;/home;/etc
  • 命令
 sudo mount dev_name dir_name
 sudo umount dir_name 
 $ sudo umount /media/zhenghua8G  # 卸载一个U盘
 $ mkdir to_mount
 $ sudo fdisk -l 
 $ sudo mount /dev/sdb1 /media/to_mount
 $ vim /etc/fstab
 $ df -h
 $ du -sh *
  • 课堂讨论
  du -sh a_dir # 输出磁盘占用量,包含a_dir的大小
  
  • 思考问题
    • Linux启动的时候,整个目录树是怎么建立起来的?假设有多个分区(甚至多个硬盘)。(/etc/fstab)

链接文件(link file)

  • 思考问题
    • ls -l a_dir,也会显示a_dir这个目录的链接数。那么这个链接数是的是什么?

hard link (硬链接)

  • 特点
    • 同一个文件,有多个名字
    • 只可以是文件,不支持目录
    • 不能跨文件系统
  • 命令
    $ ln main.c hlink.c
    $ ls -li *.c
    $ rm hlink.c

symbolic link (符号链接,有时候也叫软链接soft link)

需要画几个图来解释,参考视频

  • 特点
    • 符号链接文件和所指文件为不同文件
    • 符号链接文件可以指向目录
    • 可以跨文件系统
  • 命令
    $ ls -lid linux/vim _awk
    $ ls -li cur(指向linux/vim _awk的软连接)  
    $ ln -s main.c slink.c
    $ ls -li *.c
    $ ln -s ~/home/zhenghua/linux-teach/c-multi-arr/main.c slink2.c
    $ ln main.c hmain.c
    $ ls -lid c-multi-arr
    $ cd c-multi-arr
    $ ls -lid .
    $ mkdir a
    $ ls -lid c-multi-arr(硬链接增加一个)
   
  • 注意一个问题
    • 如何删除链接文件?rm时删除的是所指的文件,还是链接文本本身。
    • 软链接的block中存储了什么?
 ln -s a.c soft-a.c 
 ls -sh *.c
 du -sh *.c  (和上面是一样的)
 ls -l *.c (这个显示真正的字节数) 
 ls -s中,-s表示分配的磁盘大小
 如果符号链接文件指向的目标(字符串,包含路径)特别长,才会创建block。否则应该存储在inode中。算是一个优化。

其他思考

cat /etc/password 怎么找到password的iNode?

/etc/fstab这个文件的作用?