文件操作
关于文件的操作这里只列出一些基础的命令,不做详细介绍,有需要用到的再去查详细用法即可。
- 文件目录管理命令:
- ls,查看目录下文件,-a查看全部,-l查看完整信息
- 复制、删除、移动:cp,rm,mv。如果不带任何参数,cp命令默认复制的文件的所有者何权限会被改变,通常复制的目的文件所有者是命令操作者本身。这时候要“cp -a”才可以把文件所有特性复制过来。另外scp命令可以通过ip把文件复制到另外一台机器上。
- 文件内容查询命令:
- cat(concatenate):由第一行开始显示文件内容
- head:只看头几行
- tail:只看结尾几行
- more:一页一页显示内容
- touch:修改文件时间或者创建新文件
- 权限与命令间关系:
- 让用户进入某目录成为“可工作目录”(例如在目录下使用一些命令),用户至少需要有x权限。
- 让用户创建一个文件,用户至少需要在文件所在目录具有对目录的w限(x权限更是基本的)
文件系统Ext2
操作系统要操作磁盘分区上的文件,需要将分区格式化成操作系统能够利用的文件系统格式。Linux的Ext2文件系统是索引式文件系统,每个block通过inode索引(记录block号码)。以下是Ext2文件系统的三个数据:
- super block:记录此文件系统的整体信息,包括inode或block总量、使用量、剩余量等信息;(df查看文件系统的整体磁盘使用量,就是从super block获取信息)
- inode:记录文件属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码(可能有多个);
- block:实际记录文件内容,文件太大可能占用多个block。Ext2支持的一个block大小有1kb,2kb和4kb三种。
inode
每个inode大小固定为128bytes,每个文件只占用一个inode,除了记录文件属性,还要记录block号码。inode记录一个block号码要花掉4bytes,如果一个文件block太多,需要通过间接记录区来记录。所谓的间接就是再拿一个block来当作记录block号码的记录区。此外还有双间接和三间接。
目录树与inode关系
新建一个目录时,ext2会分配一个inode和至少一块block给该目录(记住目录也是一种文件),其中inode记录目录权限与属性,并可以记录分配到的那个block号码,而block则记录这个目录下的文件名和该文件名占用的inode号码数据。
上面所说可以知道目录inode本身不记录文件名而是记录在block,所以文件的增删改与目录的w权限有关。另外可以看到我们是通过目录下的文件名来定位到该文件的inode。
Ext3的日志文件系统
上面说过super block用于记录文件系统的整体信息。但如果断电什么的原因,可能导致super block的记录的数据和真实的文件数据不一致(写了block和inode,但还没有更新block数量等信息到superblock)。
ext2在系统重启时会通过搜寻整个文件系统来做检测进行数据一致性检查,但很明显这很费时。ext3在文件系统划出一个块用于记录写入或修订文件时的步骤(日志),这样通过检查日志就可以知道哪里有问题了。
连接文件:ln
Linux的连结文件有两种,一种是类似Windows的快捷方式功能的文件,可以让你快速的链接到目标文件(或目录); 另一种则是透过文件系统的 inode连结来产生新档名,而不是产生新文件!这种称为实体链接 (hard link)。
hard link
只是在某个目录下新建一条文件名连接到某inode号码的关联记录,也就是说可以有两个文件名连接到同一inode,两个文件名的所有相关信息会一模一样(除了文件名)。ln命令不加参数默认就是硬连接,删除一个“文件名”另一个没有影响,不能垮文件系统,也不能连接到目录,连接到目录会造成很大的复杂度。
symbolic link(符号连接,也是快捷方式)
基本上就是创建一独立文件,有独立的inode。文件记录了目标文件的完整文件名(从根目录下来的完整路径),文件数据的读取指向目标文件的文件名(不是inode),而通过目标文件文件名就可以拿到该文件的inode进而拿到文件数据。ln命令加上-s参数创建的连接就是符号连接,符号连接限制较少所以使用更广。
以上,下一篇记录bash的使用。