b97902HW 板


LINE

简介 link, stat, chdir, opendir 我们在上一篇得到了不少档案系统的基本概念了!不过在我介绍 link, stat, chdir, opendir 等 API 之前,我先介绍一下一些相关的指令。 相关指令 我第一个想要介绍的指令是 ln 与 unlink。这二个指令分别是用来建立 与删除一个 Link。他们的使用方式如下: ln [-s] 目标路径 档案连结 unlink 档案连结路径 对与 ln 指令,我们可选择我们要建立的连结是 Symbolic Link 还是 Hard Link。例如: $ echo content > test.txt $ ls -al 总计 12 drwxr-xr-x 2 logan logan 4096 2010-04-11 03:43 . drwxr-xr-x 5 logan logan 4096 2010-04-11 03:42 .. -rw-r--r-- 1 logan logan 8 2010-04-11 03:43 test.txt # 我们可以看到,只有 test.txt 这一个 Hard Link 指向那个 inode, # 而指向这个目录的 inode 的 Hard Link 有二个。另外我们可以注 # 意到:test.txt 的档案大小是 8bytes。 $ ln test.txt test2.txt # 建立一个新的 Hard Link $ ls -al 总计 16 drwxr-xr-x 2 logan logan 4096 2010-04-11 03:47 . drwxr-xr-x 5 logan logan 4096 2010-04-11 03:42 .. -rw-r--r-- 2 logan logan 8 2010-04-11 03:43 test2.txt -rw-r--r-- 2 logan logan 8 2010-04-11 03:43 test.txt # 我们可以注意到 test.txt 与 test2.txt 指向的 inode 其 st_nlink # 的值都是 2。而且二个档案的大小都是 8bytes。 $ unlink test.txt # 我们可以用 unlink 去除 test.txt 这一个 Hard Link。我们会发 # 现为一个档案建立一个新的 Hard Link 再使用 unlink,其效果类 # 似 rename。 $ ls -al 总计 12 drwxr-xr-x 2 logan logan 4096 2010-04-11 03:57 . drwxr-xr-x 5 logan logan 4096 2010-04-11 03:42 .. -rw-r--r-- 1 logan logan 8 2010-04-11 03:50 test2.txt $ cat test2.txt content $ ln -s test2.txt test3.txt # 尝试建立 Symbolic Link $ ls -al 总计 12 drwxr-xr-x 2 logan logan 4096 2010-04-11 04:00 . drwxr-xr-x 5 logan logan 4096 2010-04-11 03:42 .. -rw-r--r-- 1 logan logan 8 2010-04-11 03:50 test2.txt lrwxrwxrwx 1 logan logan 9 2010-04-11 04:00 test3.txt -> test2.txt # 我们可以注意到:Symbolic Link 的显示方式与 Hard Link 的显 # 示方式略有不同。而且二者的 st_nlink 似乎都只有 1。另外, # Symbolic Link 的档案大小也不同!似乎刚好就是 "test2.txt" # 这一个字串的长度。我们再看一个例子: $ ln -s /home/logan/桌面/tutorial/test2.txt test4.txt $ ls -al 总计 12 drwxr-xr-x 2 logan logan 4096 2010-04-11 04:05 . drwxr-xr-x 5 logan logan 4096 2010-04-11 03:42 .. -rw-r--r-- 1 logan logan 8 2010-04-11 03:50 test2.txt lrwxrwxrwx 1 logan logan 9 2010-04-11 04:00 test3.txt -> test2.txt lrwxrwxrwx 1 logan logan 37 2010-04-11 04:05 test4.txt -> /home/logan/桌面 /tutorial/test2.txt 如果一个档案只剩一个 Hard Link,这个档案还被 unlink 会怎样? $ unlink test2.txt $ ls -al 总计 8 drwxr-xr-x 2 logan logan 4096 2010-04-11 04:08 . drwxr-xr-x 5 logan logan 4096 2010-04-11 03:42 .. lrwxrwxrwx 1 logan logan 9 2010-04-11 04:00 test3.txt -> test2.txt lrwxrwxrwx 1 logan logan 37 2010-04-11 04:05 test4.txt -> /home/logan/桌面 /tutorial/test2.txt # 我们可以注意到:test2.txt 好像就消失了!他的效果和 remove # 很像!事实上,只要一个档案其 st_nlink 变成 0 其空间会被回收。 # 我们再看一个比较大的档案: $ dd if=/dev/zero of=test.dat bs=4096 count=25600 $ df | grep "/home" /dev/sda7 39373712 13972728 23400896 38% /home $ unlink test.dat $ df | grep "/home" /dev/sda7 39373712 13870324 23503300 38% /home # 相差接近 102400kb! 接下来我们来试试其怪的 link: $ ln -s test5.txt test5.txt $ cat test5.txt cat: test5.txt: Too many levels of symbolic links $ touch test6_16 $ for i in {0..15}; do j=`echo $i+1|bc`; ln -s test6_$j test6_$i; done $ ls -al lrwxrwxrwx 1 logan logan 7 2010-04-11 04:30 test6_0 -> test6_1 lrwxrwxrwx 1 logan logan 7 2010-04-11 04:30 test6_1 -> test6_2 lrwxrwxrwx 1 logan logan 8 2010-04-11 04:30 test6_10 -> test6_11 lrwxrwxrwx 1 logan logan 8 2010-04-11 04:30 test6_11 -> test6_12 lrwxrwxrwx 1 logan logan 8 2010-04-11 04:30 test6_12 -> test6_13 lrwxrwxrwx 1 logan logan 8 2010-04-11 04:30 test6_13 -> test6_14 lrwxrwxrwx 1 logan logan 8 2010-04-11 04:30 test6_14 -> test6_15 lrwxrwxrwx 1 logan logan 8 2010-04-11 04:30 test6_15 -> test6_16 -rw-r--r-- 1 logan logan 0 2010-04-11 04:30 test6_16 lrwxrwxrwx 1 logan logan 7 2010-04-11 04:30 test6_2 -> test6_3 lrwxrwxrwx 1 logan logan 7 2010-04-11 04:30 test6_3 -> test6_4 lrwxrwxrwx 1 logan logan 7 2010-04-11 04:30 test6_4 -> test6_5 lrwxrwxrwx 1 logan logan 7 2010-04-11 04:30 test6_5 -> test6_6 lrwxrwxrwx 1 logan logan 7 2010-04-11 04:30 test6_6 -> test6_7 lrwxrwxrwx 1 logan logan 7 2010-04-11 04:30 test6_7 -> test6_8 lrwxrwxrwx 1 logan logan 7 2010-04-11 04:30 test6_8 -> test6_9 lrwxrwxrwx 1 logan logan 8 2010-04-11 04:30 test6_9 -> test6_10 $ cat test6_8 # ok $ cat test6_7 # ELOOP 接下来我要谈的是最後一个指令:stat。我们可以用 stat 指令来看 一个档案的 inode 的相关资讯。使用方法如下: stat 档案路径 例如: $ stat test5.txt File: `test5.txt' -> `test5.txt' Size: 9 Blocks: 0 IO Block: 4096 symbolic link Device: 807h/2055d Inode: 925583 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 1000/ logan) Gid: ( 1000/ logan) Access: 2010-04-11 04:12:21.961974851 +0800 Modify: 2010-04-11 04:12:20.741974396 +0800 Change: 2010-04-11 04:12:20.741974396 +0800 # 使用 stat 指令,我们可以看到一个档案的 st_ino,st_nlink, # 档案的种类,UID,Access Time 与 Modify Time。 $ stat test6_16 File: `test6_16' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 807h/2055d Inode: 925592 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ logan) Gid: ( 1000/ logan) Access: 2010-04-11 04:31:54.541996399 +0800 Modify: 2010-04-11 04:30:02.580974470 +0800 Change: 2010-04-11 04:30:02.580974470 +0800 # 这是一个 regular file 的范例 $ stat . File: `.' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 807h/2055d Inode: 925582 Links: 2 Access: (0755/drwxr-xr-x) Uid: ( 1000/ logan) Gid: ( 1000/ logan) Access: 2010-04-11 04:30:13.885998161 +0800 Modify: 2010-04-11 04:30:12.704972352 +0800 Change: 2010-04-11 04:30:12.704972352 +0800 # 这是一个 directory 的范例 $ ln -s . rec $ stat rec File: `rec' -> `.' Size: 1 Blocks: 0 IO Block: 4096 symbolic link Device: 807h/2055d Inode: 925609 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 1000/ logan) Gid: ( 1000/ logan) Access: 2010-04-11 04:38:55.788996368 +0800 Modify: 2010-04-11 04:38:55.788996368 +0800 Change: 2010-04-11 04:38:55.788996368 +0800 # 这是一个 symbolic link 的范例,我直接把 rec 这个 symbolic # link 指向 " . " $ ln test6_16 test6_16-2 $ stat test6_16-2 File: `test6_16-2' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 807h/2055d Inode: 925592 Links: 2 Access: (0644/-rw-r--r--) Uid: ( 1000/ logan) Gid: ( 1000/ logan) Access: 2010-04-11 04:31:54.541996399 +0800 Modify: 2010-04-11 04:30:02.580974470 +0800 Change: 2010-04-11 04:40:21.604996580 +0800 # 这个范例是想要展示 stat 指令会怎麽处理一个 hard link。 # 我们可以看到 stat 指令是直接看那个档案的 inode 资讯, # 所以既然 Hard Link 的 inode 一样,显示的结果也会一样。 怎麽好像写了半天还是文不对题? ... 未完.待续 -- LoganChien ----- from PTT2 个板 logan ----- --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.224.97.11 ※ 编辑: LoganChien 来自: 61.224.97.11 (04/11 04:51)
1F:推 Bingojkt:教学文全消推4@w< 04/19 18:16







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP