只要是磁盘就得格式化,好像已经是天经地义的事情了,几乎没有人去问为什么。很多有经验的同学似乎都有过这样的经历,就是风风火火的从朋友那里借来了一张装满高清岛国爱情动作片的移动硬盘,暗爽过后还想留下一些待以后慢慢品味,可是总有那么一些质量比较好的片子(尺寸超过 4G)复制失败。追问原因还往往被高手们嘲笑:“都什么年代了你还用 FAT32,赶紧换 NTFS 吧。”我想这个时候你就不得不追问一下,为什么 FAT32 不行而 NTFS 却能行吧?
display file system status instead of file status
文件:"/work/workspace/so/main"
ID:1371e0e3c96e0461 文件名长度:255 类型:ext2/ext3
块大小:4096 基本块大小:4096
块:总计:23151106 空闲:14056882 可用:12880870
Inodes: 总计:5881856 空闲:5836277


一. 文件相关
1. 节点(inode)
在 Linux 的文件系统中,保存在磁盘分区中的文件,不管是什么类型,都有一个编号,即节点号。
通过 ls -i 可以查看。
2. atime/ctime/mtime 访问时间/更改时间/修改时间
后 2 者的区别是,ctime 会同时跟踪文件属性和数据,mtime 仅关系到文件数据。
例如,修改一个 .sh 文件的内容,mtime 会发生变化,但是仅修改 .sh 文件的权限,例如 chmod a+x test.sh,ctime 会发生变化
通过 stat filename 可以查看文件的 inode 节点信息:
3. 链接
分为软链接(符号链接)和硬链接。不论哪一种,都会保持链接文件的同步性;可以使用相对路径链接文件。
a. 软链接(符号连接)
ln -s 源 目
类似于 Windows 中的快捷方式,实际上是一个文本文件,包含了被链接文件的位置信息,但与被链接文件的节点号不同;支持跨分区链接
既然是快捷方式,其大小就不是所链接文件的大小,而是只有几个字节。
stat 命令查看源文件和软链接的结果如下:
weiyuzhang@weiyuzhang:/work/workspace$ stat client.c
File: "client.c"
Size: 686
Blocks: 8(表示为了存储该文件,使用了几个 data block,其结果,并不是严格的 Size/512) IO Block: 4096 普通文件
Device: 809h/2057d Inode: 131252 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/weiyuzhang) Gid: ( 1000/weiyuzhang)
Access: 2012-09-20 10:26:40.466391743 +0800
Modify: 2012-09-18 17:33:15.405397461 +0800
Change: 2012-09-20 10:25:06.786254344 +0800
weiyuzhang@weiyuzhang:/work/workspace$ stat fake
File: "fake" -> "client.c"
Size: 8
Blocks: 0 IO Block: 4096 符号链接
Device: 809h/2057d Inode: 131318 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 1000/weiyuzhang) Gid: ( 1000/weiyuzhang)
Access: 2012-09-20 10:24:12.236174347 +0800
Modify: 2012-09-20 10:24:11.486173237 +0800
Change: 2012-09-20 10:24:11.486173237 +0800
也可以看到,增加软连接,stat 信息中的 Links 不会增加
b. 硬链接
ln 源 目
通过节点号进行链接,即多个文件名指向同一个节点号;windows 中不具备该功能;
其功能是,允许一个文件拥有多个有效路径名称,防止误删。只删除一个链接,并不影响节点本身和其它链接,只有当最后一个链接被删除后,文件的数据块才会被释放。即,文件真正删除的条件是,与之相关的所有硬链接文件均被删除。
只能在同一分区内,否则提示:
“ln: 创建硬链接"test" => "/work/out": 无效的跨设备连接”
stat 命令查看源文件和硬链接的结果如下:
weiyuzhang@weiyuzhang:/work/workspace$ stat client.c
File: "client.c"
Size: 686 Blocks: 8 IO Block: 4096 普通文件
Device: 809h/2057d Inode: 131252 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 1000/weiyuzhang) Gid: ( 1000/weiyuzhang)
Access: 2012-09-20 10:26:40.466391743 +0800
Modify: 2012-09-18 17:33:15.405397461 +0800
Change: 2012-09-20 10:25:06.786254344 +0800
weiyuzhang@weiyuzhang:/work/workspace$ stat fake2
File: "fake2"
Size: 686
Blocks: 8 IO Block: 4096 普通文件
Device: 809h/2057d Inode: 131252 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 1000/weiyuzhang) Gid: ( 1000/weiyuzhang)
Access: 2012-09-20 10:26:40.466391743 +0800
Modify: 2012-09-18 17:33:15.405397461 +0800
Change: 2012-09-20 10:25:06.786254344 +0800
此外,ll 命令输出的第二列也显示对应文件的硬链接数目。
weiyuzhang@weiyuzhang:/tmp$ ll
总用量 68
drwxrwxrwt 11 root root 4096 11月 26 14:46 ./
drwxr-xr-x 25 root root 4096 11月 9 16:42 ../
drwx------ 2 weiyuzhang weiyuzhang 4096 11月 26 09:10 .com.google.Chrome.X8rA1c/
drwx------ 2 weiyuzhang weiyuzhang 4096 11月 26 09:16 CRX_75DAF8CB7768/
prw-rw-r-- 1 weiyuzhang weiyuzhang 0 11月 26 10:06 fifo|
4. 编辑文件
除了 vi,还有一个常用的工具是 nano。
在其底部有效的命令列表中,^ 表示 Control。
5. touch
用于更新文件的访问时间和更改时间,虽然实际上不会编辑文件的内容。
6. 压缩和解压
提供 gzip 和 bzip2 两种压缩方法。
tar zcvf archive.tar.gz [file1 file2...]
tar jcvf archive.tar.bz2 [file1 file2...]
7. 挂载
在 /dev 目录中,有些可用的设备是存储设备,例如软驱或者 CD-ROM。访问它们提供的内容不是简单的 cd 进入驱动器,存储驱动器需要挂载到文件系统。换句话说,驱动器需要附加到一个固定的目录。
mount /dev/md1 /mnt/alexdrive
将驱动器 /dev/md1 附加到系统中现有的目录 /mnt/alexdrive。一旦驱动器被挂载,就可以使用文件系统的任何指令访问驱动器。
查看已启用的驱动器名,可通过 df -h。
在现代的 Linux 发行版本中,CD-ROM、U盘等一些常见设备能够由系统自动挂载。
此外,不带参数的 mount 指令,可以输出系统中每一个被挂载的驱动器及使用的文件系统。
例如,插入 U 盘,通过 mount 指令可以看到:
......
/dev/sdb1 on /media/username/PENDRIVE type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks2)
这是系统自动挂载的结果。/dev/sdb1 即为 U 盘对应的驱动器名。可以使用 umount /dev/sdb1 来取消挂载。但是如果再次打开文件,又会被自动挂载。
如果想让一个驱动器在开机时自动挂载,或者简单设置一个目录作为一个驱动器的默认挂载点,需要修改 /etc/fstab 文件。
8. 文件查找
a. locate & updatedb
locate filename
该命令与 updatedb 关联,完全依赖于索引,如果新建一个文件,使用 locate 是找不到的,除非执行过 updatedb
updatedb 需要 root 权限,一般通过 cron 定期执行。