第七天:文件系统层级

补充:history相关概念:

history: history [-c] [-d 偏移量] [n] 或 history -anrw [文件名] 或 history -ps 参数 [参数…]
显示或操纵历史列表。
带行号显示历史列表,将每个被修改的条目加上前缀 `*’。
参数 N 会仅列出最后的 N 个条目。

选项:

  • -c    删除所有条目从而清空历史列表。
  • -d 偏移量    从指定位置删除历史列表。
  • -a    将当前绘画的历史行追加到历史文件中
  • -n    从历史文件中读取所有未被读取的行
  • -r    读取历史文件并将内容追加到历史列表中
  • -w    将当前历史写入到历史文件中并追加到历史列表中
  • -p    对每一个 ARG 参数展开历史并显示结果而不存储到历史列表中
  • -s    以单条记录追加 ARG 到历史列表
  • HISTSIZE:命令历史记录的条数;
  • HISTFILE:指定历史文件,默认为~/.bash_history;
  • HISTFILESIZE:命令历史文件记录历史的条数;
  • HISTTIMEFORMAT=“%F %T“ 显示时间
  • HISTIGNORE=“str1:str2:… “ 忽略string1,string2历史

控制命令历史的记录方式:

环境变量: HISTCONTROL

  • ignoredups:忽略重复的命令;连续且相同方为“重复”
  • ignorespace:忽略所有以空白开头的命令
  • ignoreboth: ignoredups, ignorespace
  • erasedups:删除重复命令
  • export 变量名=”值“
  • 存放在 /etc/profile 或 ~/.bash_profile

补充:printenv:输出所有或部分环境变量

ls 命令

用法:ls [选项]… [文件]…

  •   -a, –all            不隐藏任何以. 开始的项目
  • -A, –almost-all        列出除. 及.. 以外的任何项目
    –author            与-l 同时使用时列出每个文件的作者
  •   -h, –human-readable        与-l 一起,以易于阅读的格式输出文件大小
  •   -r, –reverse            逆序排列
  • -R, –recursive        递归显示子目录

补充: -i : 显示文件的索引节点

常用键盘组合操作命令:

  • Ctrl+l 清屏,相当于clear命令
  • Ctrl+c 取消命令的执行
  • 支持多个“标签” shell的图形化终端模拟器
  • Ctrl-Shift-t 创建一个标签页
  • Ctrl-PaUp/PgUn 切换到下一个/前一个标签页
  • Ctrl-Shift-c 复制选中的文本
  • Ctrl-Shift-v 把文本粘帖到提示符后

man:

使用方法: man # command (keyword search : man -k keyword)

#:所选章节 (查看章节使用命令 : whatis command)

常见章节:

  1. 用户命令
  2. 系统调用
  3. 库调用(库才有库调用)
  4. 特殊文件
  5. 文件格式(配置文件的具体使用格式)
  6. 游戏
  7. 杂项
  8. 管理命令(/sbin;/usr/sbin;/usr/local;)

man手册中搜索:

  • / keyword
  • ? keyword

终端的概念:

  • 硬件设备,关联一个用户接口
  • 与终端相关:通过操作系统启动
  • 与终端无关:操作系统

文件系统层级标准:FHS

Image 201607271138 文件和目录被组织成一个单根倒置树结构

  1. 文件系统从根目录下开始,用“ /”表示
  2. 根文件系统(rootfs)root filesystem
  3. 文件系统对文件操作时文件名的大小写敏感
  4. .开头的文件为隐藏文件
  5. 路径分隔的 /
  6. 包括路径在内文件名称最长4095个字节,用/分隔的路径不能超过255个字节。
  7. 文件有两类数据:
  • 元数据: metadata
  • 数据: data

文件系统基本目录介绍:

 

  • /dev:设备文件及特殊文件存储位置
  • /tmp:临时文件存储位置
  • /srv:系统上运行的服务用到的数据
  • /opt:第三方应用程序的安装位置
  • /mnt:临时文件系统挂载点
  • /media:便携式移动设备挂载点 一般有 cdrom/ & usb/
  • /root:管理员的家目录(尽量使用普通用户登录)
  • /home/USERNAME:普通用户家目录(可选,可独立挂载)
  • /etc:配置文件目录(纯文本或xml文件格式),opt/为 /opt目录提供配置文件
  • /lib64:专用于x86_64系统上的辅助共享库文件存放位置
  • /lib:启动时程序依赖的基本共享库文件以及内核模块文件
    (/lib/modules)
  • /sbin:管理类的基本命令;不能关联至独立分区, OS启动即
    会用到的程序
  • /bin:供所有用户使用的基本命令;不能关联至独立分区,
    OS启动即会用到的程序
  • /boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器
    (bootloader, grub)都存放于此目录
  • b: block device,随机访问
  • c: character device,线性访问
  • /usr: universal shared, read-only data
  • bin: 保证系统拥有完整功能而提供的应用程序
  • sbin:
    lib32位使用
    lib64:只存在64位系统
    include: C程序的头文件(header files)
    share:结构化独立的数据,例如doc, man
  • local:第三方应用程序的安装位置
  •             bin, sbin, lib, lib64, etc, share

 

/var: variable data files

  • cache: 应用程序缓存数据目录
  • lib: 应用程序状态信息数据
  • local:专用于为/usr/local下的应用程序存储可变数据;
  • lock: 锁文件
  • log: 日志目录及文件
  • opt: 专用于为/opt下的应用程序存储可变数据;
  • run: 运行中的进程相关数据;通常用于存储进程pid文件
  • spool: 应用程序数据池
  • tmp: 保存系统两次重启之间产生的临时数据

/proc: 用于输出内核与进程信息相关的虚拟文件系统

/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统

/selinux: security enhanced Linuxselinux相关的安全策
略等信息的存储位置

Linux上的应用程序的组成部分

  1. 二进制程序: /bin, /sbin, /usr/bin, /usr/sbin,/usr/local/bin, /usr/local/sbin
  2. 库文件: /lib, /lib64, /usr/lib, /usr/lib64,/usr/local/lib, /usr/local/lib64
  3. 配置文件: /etc, /etc/DIRECTORY, /usr/local/etc
  4. 帮助文件: /usr/share/man, /usr/share/doc,/usr/local/share/man, /usr/local/share/doc

Linux下的文件类型

  •  :普通文件
  •  d: 目录文件
  • b: 块设备
  • c: 字符设备
  •  l: 符号链接文件
  •  p: 管道文件pipe
  •  s: 套接字文件socket

Image 201607271522cd 命令:

使用方法:

  • cd [-L|[-P ] [dir]
  •         -L    到链接所在位置
  •         -P    到链接所连接到的实际位置

Image 201607271526

绝对路径

以正斜杠开始

完整的文件的位置路径

可用于任何想指定一个文件名的时候

相对路径名

不以斜线开始

指定相对于当前工作目录或某目录的位置

可以作为一个简短的形式指定一个文件名

补充命令:stat:查看文件的元数据

Image 201607271532 cd 改变目录

  • 为绝对或相对路径:
  • cd /home/joshua/work
  • cd project/docs
  • 到上一级目录:
  • cd ..
  • 为了你的主目录:
  • cd
  • 到以前的工作目录:
  • cd –
  • 相关的环境变量:
  • PWD:保存了当前目录路径
  • OLDPWD:上一次所在目录路径

附:作业

只显示某目录下隐藏文件

Image 201607271544
只显示某目录下目录列表

Image 201607271554

Linux Btrfs 文件系统

扩展性:应对大型机器对文件系统的扩展性要求,Extent,B-Tree和动态inode保证了其整体性能不会随着系统容量的增加而降低。

数据一致性:采用COW事物技术来保证文件系统的一致性。

设备管理相关特性:Btrfs 支持创建快照(snapshot)和克隆(clone)

41030c81e732fedc99d0829c2ba0b7b9

扩展性:

所有的metadata都由B-Tree管理,便于查找,插入和删除操作都很高效。

btrfs 内部不同的元数据由不同的tree管理。在superblock中,所有指针指向这些BTree的根。

FS Tree管理文件相关的数据,如inode,dir等,Chunk tree 管理设备,每一个磁盘设备都在Chunk Tree中有一个item; ExtentTree 管理磁盘空间的分配,btrfs每分配一段磁盘空间,Tree of tree root 能保存很多的BTree的根节点。Extent是btrfs 管理磁盘空间的最小单位,由extent tree 管理。btrfs 分配data 或者metadata 都需要查询extent tree以便获得空闲空间的信息。

动态inode分配:

每一个inode只是Btree中的一个节点,用户可以无限制的任意插入新的inode,其物理存储位置是动态分配的,所以btrfs对文件的个数没有限制。

对数据的存放平均到每个存储颗粒上。文件系统再对SSD设备的优化起到了延长使用寿命的作用。从而提高SSD设备的IO效率。

数据一致性的特性:

COW:每次写磁盘数据时,先将更新数据写入到一个新的block,当新数据写入成功后,再更新相关的数据结构指向新的block。

COW事务能保证文件系统的一致性,并且系统reboot之后不需要执行fsck。

checksum:保证了数据的可靠性,避免了silent corruption现象,(由于硬件原因,数据在保存后再次读取时会发生改变,这种改变不容易被系统察觉)btrfs 提供了文件的校验和,即在读出数据时能通过校验和的正确与否判断读出的数据的正确性。采用checksum tree来管理数据块的校验和,把checksum 和checksum所保护的数据分开,从而提供了更加严格的保护。

多设备管理相关的特性:

Chunk灵活的大小适应不同容量的存储设备

Subvolum:文件系统的一部分配置为一个完整的子文件系统,充分利用磁盘带宽,简化磁盘空间的管理的存储池模型。