<?xml version="1.0" encoding="UTF-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
  <title>Tsung&apos;s Blog</title>
  <link rel="alternate" type="text/html" href="http://blog.longwin.com.tw/" />
  <modified>2005-04-19T15:44:23Z</modified>
  <tagline>廢話的定義:
 聽起來好像很具體，實際上是很空洞的話，看起來好像講到問題的徵結了，實際上是在迴避所有的答案，所以這段話聽起來很流暢，但是他註定是要作廢的。</tagline>
  <id>tag:blog.longwin.com.tw,2006://1</id>
  <generator url="http://www.movabletype.org/" version="2.661">Movable Type</generator>
  <copyright>Copyright (c) 2005, jon</copyright>
  <entry>
    <title>此 MT Blog 宣告終結</title>
    <link rel="alternate" type="text/html" href="http://blog.longwin.com.tw/archives/000594.html" />
    <modified>2005-04-19T15:44:23Z</modified>
    <issued>2005-04-19T23:44:23+08:00</issued>
    <id>tag:blog.longwin.com.tw,2005://1.594</id>
    <created>2005-04-19T15:44:23Z</created>
    <summary type="text/plain">最近花了不少時間在做 MT - pLog 的轉換, 但是到最後考量到一些原因, 所以決定還是重頭開始比較好. 詳細請看 此頁. 以後最新的網址為 http://plog.longwin.com.tw 希望大大繼續給予指小弟指點. 若無法有無法留言或任何異常狀況, 麻煩能否寫信通知小弟.. 因為小弟剛架設完成, 尚未全部測試完成. 麻煩大家教導小弟.. 有什麼特別需要的文章. 小的若不小心忽略掉, 麻煩也請大家通知小弟一下. 謝謝.....</summary>
    <author>
      <name>jon</name>
      <url>http://plog.longwin.com.tw</url>
      <email>jon@longwin.com.tw</email>
    </author>
    <dc:subject>日記</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blog.longwin.com.tw/">
      <![CDATA[<p>最近花了不少時間在做 MT - pLog 的轉換,<br />
但是到最後考量到一些原因, 所以決定還是重頭開始比較好.<br />
詳細請看 <a href="http://plog.longwin.com.tw/post/1/1">此頁</a>.<br />
以後最新的網址為 <a href="http://plog.longwin.com.tw">http://plog.longwin.com.tw</a><br />
希望大大繼續給予指小弟指點.<br />
若無法有無法留言或任何異常狀況, 麻煩能否寫信通知小弟..<br />
因為小弟剛架設完成, 尚未全部測試完成. 麻煩大家教導小弟..<br />
有什麼特別需要的文章. 小的若不小心忽略掉, 麻煩也請大家通知小弟一下.<br />
謝謝..</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>CSS &amp; Html 編碼問題</title>
    <link rel="alternate" type="text/html" href="http://blog.longwin.com.tw/archives/000593.html" />
    <modified>2005-04-07T00:52:29Z</modified>
    <issued>2005-04-07T08:52:29+08:00</issued>
    <id>tag:blog.longwin.com.tw,2005://1.593</id>
    <created>2005-04-07T00:52:29Z</created>
    <summary type="text/plain">本文最新網址位於CSS &amp; Html 編碼問題 CSS file 若是 Big5 編碼, 網頁頁面是 UTF-8 編碼, 會發現 CSS 完全沒有作用. 因為 瀏覽器會判斷不出來, 而無法轉換. 因此那 CSS 會 load 不進來. CSS 樣式表的編碼...</summary>
    <author>
      <name>jon</name>
      <url>http://plog.longwin.com.tw</url>
      <email>jon@longwin.com.tw</email>
    </author>
    <dc:subject>Program</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blog.longwin.com.tw/">
      <![CDATA[<p>本文最新網址位於<a href="http://plog.longwin.com.tw/post/1/39">CSS & Html 編碼問題</a></p>

<p>CSS file 若是 Big5 編碼, 網頁頁面是 UTF-8 編碼, 會發現 CSS 完全沒有作用.<br />
因為 瀏覽器會判斷不出來, 而無法轉換. 因此那 CSS 會 load 不進來.<br />
<b>CSS 樣式表的編碼 要 跟網頁編碼 都一樣才行.</b></p>]]>
      
    </content>
  </entry>
  <entry>
    <title>濾掉一些特殊符號</title>
    <link rel="alternate" type="text/html" href="http://blog.longwin.com.tw/archives/000592.html" />
    <modified>2005-04-07T00:48:13Z</modified>
    <issued>2005-04-07T08:48:13+08:00</issued>
    <id>tag:blog.longwin.com.tw,2005://1.592</id>
    <created>2005-04-07T00:48:13Z</created>
    <summary type="text/plain">抓回來的東西有太多的特殊符號(特別是拍賣. 購物等等的站).. 將那些符號濾掉比較好瀏覽. 寫個小 function 來小濾一下~ :) //filter out symbols 濾掉一些星星等等的碼 function replace_char($s) { $s = preg_replace(&quot;/([\x80-\xFF].|[\x02-\x7F])/&quot;, &quot;\x01\$1&quot;, $s); $pattern = &quot;/(\x01\xa1[\xb3-\xbf]|\x01\xa2[\xa1-\xae])/&quot;; $s = preg_replace($pattern,...</summary>
    <author>
      <name>jon</name>
      <url>http://plog.longwin.com.tw</url>
      <email>jon@longwin.com.tw</email>
    </author>
    <dc:subject>Program</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blog.longwin.com.tw/">
      <![CDATA[<p>抓回來的東西有太多的特殊符號(特別是拍賣. 購物等等的站)..<br />
將那些符號濾掉比較好瀏覽. 寫個小 function 來小濾一下~ :)</p>

<p>//filter out symbols 濾掉一些星星等等的碼<br />
function replace_char($s) {<br />
  $s = preg_replace("/([\x80-\xFF].|[\x02-\x7F])/", "\x01\$1", $s);<br />
  $pattern = "/(\x01\xa1[\xb3-\xbf]|\x01\xa2[\xa1-\xae])/";<br />
  $s = preg_replace($pattern, " ", $s);</p>

<p>  $s = preg_replace("/[\x01]/", "", $s);</p>

<p>  // 內碼表除了全形 0~9 和 ㄅㄆㄇ外全濾掉, 不過可能會造成有些中文字異常.<br />
  // 下述的不建議使用.<br />
  $s = preg_replace("/(\xa1[\x4a-\xfe])|(\xa2[\x40-\xae])/", "", $s);</p>

<p>  return $s;<br />
}</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>PCMan Plugin for Mozilla/Firefox</title>
    <link rel="alternate" type="text/html" href="http://blog.longwin.com.tw/archives/000591.html" />
    <modified>2005-04-06T01:33:32Z</modified>
    <issued>2005-04-06T09:33:32+08:00</issued>
    <id>tag:blog.longwin.com.tw,2005://1.591</id>
    <created>2005-04-06T01:33:32Z</created>
    <summary type="text/plain">本文最新網址位於 Firefox Plugin - PCMan PCMan Plugin for Mozilla/Firefox 蠻炫的.. 再這樣下去會把 Firefox 搞成 KKman... XD 只不過這是只有 For Windows :)...</summary>
    <author>
      <name>jon</name>
      <url>http://plog.longwin.com.tw</url>
      <email>jon@longwin.com.tw</email>
    </author>
    <dc:subject>Application</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blog.longwin.com.tw/">
      <![CDATA[<p>本文最新網址位於 <a href="http://plog.longwin.com.tw/post/1/11">Firefox Plugin - PCMan</a></p>

<p><a href="http://forum.moztw.org/viewtopic.php?t=7476&postdays=0&postorder=asc&start=0&sid=d6d5f6c6f201ea059178921feea14f04" target="_blank">PCMan Plugin for Mozilla/Firefox</a><br />
蠻炫的.. 再這樣下去會把 Firefox 搞成 KKman... XD<br />
只不過這是只有 For Windows :)</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>XFCE 設鍵盤快速鍵</title>
    <link rel="alternate" type="text/html" href="http://blog.longwin.com.tw/archives/000590.html" />
    <modified>2005-04-05T04:13:15Z</modified>
    <issued>2005-04-05T12:13:15+08:00</issued>
    <id>tag:blog.longwin.com.tw,2005://1.590</id>
    <created>2005-04-05T04:13:15Z</created>
    <summary type="text/plain">本文最新網址位於 XFCE 設鍵盤快速鍵 XFCE 要設鍵盤快速鍵 於 設定 -&gt; 視窗管理程式 -&gt; 鍵盤 -&gt; 新增 -&gt; 再來就看自己要如何設定了. 再來就會發現自己 ~/.theme 下會有 自己剛剛新增的那個名字. 之後要換機器或環境. 把這個帶著走就可以囉 :)...</summary>
    <author>
      <name>jon</name>
      <url>http://plog.longwin.com.tw</url>
      <email>jon@longwin.com.tw</email>
    </author>
    <dc:subject>OS-Linux_BSD</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blog.longwin.com.tw/">
      <![CDATA[<p>本文最新網址位於 <a href="http://plog.longwin.com.tw/post/1/15">XFCE 設鍵盤快速鍵</a></p>

<p>XFCE 要設鍵盤快速鍵<br />
於 設定 -> 視窗管理程式 -> 鍵盤 -> 新增 -> 再來就看自己要如何設定了.<br />
再來就會發現自己 ~/.theme 下會有 自己剛剛新增的那個名字.<br />
之後要換機器或環境. 把這個帶著走就可以囉 :)</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Xwindow ICON 預設路徑</title>
    <link rel="alternate" type="text/html" href="http://blog.longwin.com.tw/archives/000589.html" />
    <modified>2005-04-05T04:07:47Z</modified>
    <issued>2005-04-05T12:07:47+08:00</issued>
    <id>tag:blog.longwin.com.tw,2005://1.589</id>
    <created>2005-04-05T04:07:47Z</created>
    <summary type="text/plain">本文最新網址位於Xwindow ICON 預設路徑 Xwindow 每次要找 ICON 時. 總是會不知道在哪裡 ... :( 還是記一下好了.. 預設: /usr/share/pixmaps/ 而平常自己的 MAC 的 ICON 通常都會放在 ~/.icon 裡面....</summary>
    <author>
      <name>jon</name>
      <url>http://plog.longwin.com.tw</url>
      <email>jon@longwin.com.tw</email>
    </author>
    <dc:subject>OS-Linux_BSD</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blog.longwin.com.tw/">
      <![CDATA[<p>本文最新網址位於<a href="http://plog.longwin.com.tw/post/1/38">Xwindow ICON 預設路徑</a></p>

<p>Xwindow 每次要找 ICON 時. 總是會不知道在哪裡 ... :(<br />
還是記一下好了.. 預設: /usr/share/pixmaps/<br />
而平常自己的 MAC 的 ICON 通常都會放在 ~/.icon 裡面.</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>抓檔 &amp; 更改檔名</title>
    <link rel="alternate" type="text/html" href="http://blog.longwin.com.tw/archives/000588.html" />
    <modified>2005-04-05T01:45:31Z</modified>
    <issued>2005-04-05T09:45:31+08:00</issued>
    <id>tag:blog.longwin.com.tw,2005://1.588</id>
    <created>2005-04-05T01:45:31Z</created>
    <summary type="text/plain">本文最新網址位於抓檔和更改檔名 老師說過~ 程式設計師就是要 &quot;懶&quot;~.. 只要做一次的事情就不做第二次. 需要重覆做的事情就交給電腦去做就好了~~ 也就因此.. 為了 抓圖片 &amp; 改檔名 等等~ 寫了隻小程式.. 只要是連續數字要做任何命令的. 就靠它了~ :p...</summary>
    <author>
      <name>jon</name>
      <url>http://plog.longwin.com.tw</url>
      <email>jon@longwin.com.tw</email>
    </author>
    <dc:subject>Program</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blog.longwin.com.tw/">
      <![CDATA[<p>本文最新網址位於<a href="http://plog.longwin.com.tw/post/1/71">抓檔和更改檔名</a></p>

<p>老師說過~ 程式設計師就是要 "懶"~..<br />
只要做一次的事情就不做第二次.<br />
需要重覆做的事情就交給電腦去做就好了~~<br />
也就因此.. 為了 抓圖片 & 改檔名 等等~ 寫了隻小程式..<br />
只要是連續數字要做任何命令的. 就靠它了~ :p</p>]]>
      <![CDATA[<p>&lt;?php<br />
$url = &lt;&lt;&lt;EOF<br />
&lt;br&gt;&lt;img src=http://url/filename011.jpg&gt;<br />
..... 這邊放要抓的整批 url 位址<br />
&lt;br&gt;&lt;img src=http://url/filename020.jpg&gt;<br />
EOF;</p>

<p>// 先把上面的資料轉成 array.<br />
$url = explode("\n", $url);</p>

<p>// 取出 url, 準備使用 wget 抓取~<br />
foreach($url as $key => $value) {<br />
    preg_match('/.*[^http](http.*[^jpg]jpg*).*/', $value, $real_url);</p>

<p>    if(preg_match('/^http/', $real_url[1]))<br />
        $wget_url[] = $real_url[1];<br />
}</p>

<p>$num = count($wget_url);<br />
for($i = 0; $i < $num; $i++) {<br />
    $comm = "wget ".$wget_url[$i];<br />
    `$comm`;</p>

<p>    // 若有需要更改檔名的話.<br />
    //$comm = "mv *".sprintf("%03s", $i).".jpg ".sprintf("%03s", $i).".jpg";<br />
    //`$comm`;<br />
}<br />
?&gt;</p>]]>
    </content>
  </entry>
  <entry>
    <title>檔案刪除的回復救援</title>
    <link rel="alternate" type="text/html" href="http://blog.longwin.com.tw/archives/000587.html" />
    <modified>2005-04-04T03:38:52Z</modified>
    <issued>2005-04-04T11:38:52+08:00</issued>
    <id>tag:blog.longwin.com.tw,2005://1.587</id>
    <created>2005-04-04T03:38:52Z</created>
    <summary type="text/plain">今天幹了件很蠢的事情~.. 想要將 a電影.srt 改成跟 電影.avi 同名字. 於是就下了 mv a電影.srt 電影.avi ... 當按下 enter 時清醒了過來... 發現到那 avi 已經被我清掉了.. 變 srt 了... :~ 於是就有這篇文章的由來.... 嗚... :~ 雖然是寫說檔案刪除的回復救援,...</summary>
    <author>
      <name>jon</name>
      <url>http://plog.longwin.com.tw</url>
      <email>jon@longwin.com.tw</email>
    </author>
    <dc:subject>OS-Linux_BSD</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blog.longwin.com.tw/">
      <![CDATA[<p>今天幹了件很蠢的事情~.. 想要將 a電影.srt 改成跟 電影.avi 同名字.<br />
於是就下了 mv a電影.srt 電影.avi ... 當按下 enter 時清醒了過來...<br />
發現到那 avi 已經被我清掉了.. 變 srt 了... :~<br />
於是就有這篇文章的由來.... 嗚... :~<br />
雖然是寫說檔案刪除的回復救援, 但事實上我沒有成功救回來.. XD<br />
主要是因為還要 mount -ro 而且我砍的檔案是在 "/". 很麻煩~ :(<br />
而且也並不是那麼重要的檔案~ 大不了就那影片別看罷了... :p<br />
但是看了這麼多~ 來做點小筆記比較好.. 希望未來不會需要用到這篇...</p>]]>
      <![CDATA[<p>先簡單看一下幾種常用的 filesystem - <a href="http://www.it.com.cn/f/edu/0411/24/51091.htm" target="_blank">Linux日誌式文件系统面面觀</a><br />
(這篇下面有許多相關文件蠻不錯的)</p>

<p><hr /><br />
重點摘要:<br />
主要是下面這三篇文章. 若已經是死連結. 就參考下面轉載回來的吧~ :)</p>

<p>說明系統rm, mv 等等動作是做何種事情, 流程, 該如何救回來 - <a href="http://www.lslnet.com/linux/docs/linux-3334.htm" target="_blank">UNIX系统被删文件的恢复策略</a></p>

<p>簡易說明實作步驟: <a href="http://www.linuxuser.com.tw/power/list2.php?id=2215" target="_blank">Linux檔系統的反刪除方法</a></p>

<p>實作搶救的心得:<a href="http://bbs.ee.ntu.edu.tw/boards/Linux/19/1/84.html" target="_blank">[chat] 搶救過去!!!! (ext2 undelete)</a></p>

<p>救援主要就是靠 debugfs 這個程式.<br />
debugfs 的程式就兩個 file, 大約共 500 行. 有興趣的就於下處去看看吧~(kernel 2.6.11)<br />
/usr/src/linux/fs/debugfs/<br />
<hr /></p>

<p>以下都是轉載自原網站, 怕原網站資料遺失就頭痛了~ :(</p>

<p><hr /><br />
下面這兩篇事實上是一樣的, 不過怕資料會遺失. 先記起來~ :)<br />
<a href="http://bbs.ee.ntu.edu.tw/boards/Linux/19/1/84.html" target="_blank">[chat] 搶救過去!!!! (ext2 undelete)</a><br />
<a href="http://study.99net.net/study/system/linux/1084931749.html" target="_blank">ext2文件系统下恢复误删除的文件</a><br />
轉載上述連結:</p>

<p>發信人: thhsieh (居士), 信區: SM<br />
標  題: [Sys] 搶救過去!!!! (ext2 undelete)<br />
發信站: 冷月流蘇BBS驛站 (Mon Feb  1 17:21:11 1999) , 轉信</p>

<p>本系的 BBS 系統真是多災多難 (嗯 .... 其實是因為我的疏忽，才會這麼多災<br />
多難 ....) ，繼這幾日系統時間不正確，造成許多人的 ID 被誤砍後，又一次<br />
因系統設定上的問題，將 BBS 的重要備份檔給殺了。這件事是學弟發現後告訴<br />
我的，當我上站來一見到他的 mail, 當真是欲哭無淚，差點沒去撞牆。那個備<br />
分檔有多重要呢? 這麼說吧! 所有等待我們恢復舊信件的使用者資料全在裏頭。</p>

<p>那時已是週六晚 11:00 左右，我一邊想著要編一套說辭向大家解釋無法替大家<br />
恢復舊信件與設定了，一邊還在想是否能夠挽回局面。大家知道， UNIX like<br />
的系統是很難像 M$ 的系統一樣，做到 undelete 的，所有網管前輩都曾再三<br />
警告我們，要小心! 小心! 砍檔之前三思而後行，砍了之後再後悔也沒用。雖<br />
然我已漸漸做到砍檔三思而後行，但之次誤砍事件是系統在背景中定時執行的，<br />
等到我找出原因時已是檔案被砍後一個多小時。</p>

<p>我憑著一點點的印象，想起在網路上，有人討論過在 Linux ext2 filesystem<br />
中 undelete 的可能性，但我所見到的多半是負面的答案，但好像真的有人做過<br />
這件事，於是我第一個所做的，就是馬上將該檔案原來所在的 partition mount<br />
成 read-only, 禁止任何的寫入動作，不是怕再有檔案被誤砍 (因為已沒什麼可<br />
砍的了) ，而是怕有新檔案寫進來，新資料可能會覆蓋到舊資料原本存在的磁區<br />
(block) 。我們現在唯一個指望，就是企圖將檔案原來存在的磁區一個個找回來，<br />
並且「希望」這些磁區上的舊資料都還在，然後將這些磁區串成一個檔案。</p>

<p>終於被我找到了!! 原來這方面的技術文件就存在我自己的系統中 :-))</p>

<p>        /usr/doc/HOWTO/mini/Ext2fs-Undeletion.gz</p>

<p>於是我就按照這份文件的指示一步步來，總算將一個長達 8MB 的壓縮檔救回了<br />
99%, 還有一個長達 1.1 MB 的壓縮檔完整無缺地救了回來。感謝上帝、 Linux<br />
的設計者、寫那篇文件的作者、曾經討論過此技術的人、以及 Linux 如此優秀<br />
的 ext2 filesystem, 讓我有機會搶救過去。現在，我將我的搶救步驟做一個整<br />
理讓大家參考，希望有派得上用場的時候 (喔! 不，最好是希望大家永遠不要有<br />
機會用到以下的步數 :-)))</p>

<p>************************************************************************</p>

<p>在此嚴正聲明!! 寫這篇文章的目的，是給那些處於萬不得已情況下的人們，有<br />
一個挽回的機會，並不意味著從此我們就可以大意，砍檔不需要三思。前面提<br />
到，我有一個檔案無法 100% 救回，事實上，長達 8MB 的檔案能救回 99% 已是<br />
幸運中的幸運，一般的情況下若能救回 70% - 80% 已經要愉笑了。所以，不要<br />
指望 undelete 能救回一切。預防勝於治療! 請大家平時就養成好習慣，砍檔前<br />
請三思!!!</p>

<p>************************************************************************</p>

<p><br />
我們能救回的機會有多大? 在 kernel-2.0.X 系列中 (本站所用的 kernel 是<br />
2.0.33) ，取決以下兩點:</p>

<p>1. 檔案原來所在的磁區是否沒有被覆寫?<br />
2. 檔案是否完全連續?</p>

<p>第一點我們可以與時間競賽，就是當一發現檔案誤砍時，要以最快的速度 umount<br />
該 filesystem, 或將該 filesystem remount 成唯讀。就這次的情況而言，檔案<br />
誤砍是在事發一個小時後才發現的，但由於該 filesystem 寫入的機會很少 (我<br />
幾乎可確定一天才只有一次，做 backup)，所以第一點算是過關了。</p>

<p>第二點真的是要聽天由命了，就本站所使用的 kernel, 必須要在假設「長檔案」所<br />
佔的 block 完全連續的情況下，才有可能完全救回來! 一個 block 是 1024 bytes,<br />
長達 8 MB 的檔案就有超過 8000 個 block。在經常讀寫的 filesystem 中，可以<br />
想見長檔案很難完全連續，但在我們的系統中，這一點似乎又多了幾分指望。同時，<br />
Linux ext2 如此精良的 filesystem, 能做到前 7950 多個 block 都連續，這一點<br />
也功不可沒。</p>

<p>好了，以下我就講一下我的步驟。</p>

<p><br />
1. mount filesystem readonly:</p>

<p>   該檔案的位置原來是在 /var/hda/backup/home/bbs 下，我們系統的 filesystem<br />
   組態是:</p>

<p>root@bbs:/home/ftp/rescue# df<br />
Filesystem         1024-blocks  Used Available Capacity Mounted on<br />
/dev/sda1             396500  312769    63250     83%   /<br />
/dev/sda3             777410  537633   199615     73%   /home<br />
/dev/hda1             199047   36927   151840     20%   /var/hda<br />
/dev/hda2            1029023  490998   485710     50%   /home/ftp</p>

<p>   因此 /var/hda 這個 filesystem 要馬上 mount 成 readonly (以下請用 root 身<br />
   份):</p>

<p>        mount -o remount,ro /var/hda</p>

<p>   當然也可以直接 umount 它，但有時候可能有某些 process 正在此 filesystem<br />
   下運作，您可能無法直接 umount 它。因此我選擇 mount readonly。但您也可以<br />
   用:</p>

<p>        fuser -v -m /usr</p>

<p>   看一下目前是那些 process 在用這個 filesystem, 然後一一砍掉，再 umount。</p>

<p><br />
2. 執行</p>

<p>        echo lsdel | debugfs /dev/hda1 | less</p>

<p>   看一下該 filesystem 最近被砍的 inode (檔案) 有那些 (為什麼是 /dev/hda1?<br />
   請見上頭的 df 列表)? 在這裏要說一下，在 UNIX like 的系統中，所有的檔案都<br />
   有一個 inode 指向它， inode 中記錄了檔案的重要資訊，如大小、時間、屬性等<br />
   等。就我們的系統而言，其列示如下:</p>

<p>debugfs:  92 deleted inodes found.<br />
 Inode  Owner  Mode    Size    Blocks    Time deleted<br />
.................................................................</p>

<p> 29771      0 100644 1255337   14/  14 Sat Jan 30 22:37:10 1999<br />
 29772      0 100644 5161017   14/  14 Sat Jan 30 22:37:10 1999<br />
 29773      0 100644 8220922   14/  14 Sat Jan 30 22:37:10 1999<br />
 29774      0 100644   5431    6/   6 Sat Jan 30 22:37:10 1999</p>

<p><br />
   請注意! inode 裏頭不會記錄檔案的檔名，檔名是記錄在該檔案所在的目錄的<br />
   data block 中，故在此我們見不到。因此，我們必須要在檔案大小、被砍時間<br />
   等資訊中判斷出要救回的檔案是那一個。在此，我們要救回 29773 這個 inode。</p>

<p><br />
3. 執行</p>

<p>        echo &quotstat &lt29773>" | debugfs /dev/hda1</p>

<p>   列出該 inode 的所有資訊，如下:</p>

<p>debugfs:  stat &lt29773><br />
Inode: 29773   Type: regular    Mode:  0644   Flags: 0x0   Version: 1<br />
User:     0   Group:     0   Size: 8220922<br />
File ACL: 0    Directory ACL: 0<br />
Links: 0   Blockcount: 16124<br />
Fragment:  Address: 0    Number: 0    Size: 0<br />
ctime: 0x36b31916 -- Sat Jan 30 22:37:10 1999<br />
atime: 0x36aebee4 -- Wed Jan 27 15:23:16 1999<br />
mtime: 0x36adec25 -- Wed Jan 27 00:24:05 1999<br />
dtime: 0x36b31916 -- Sat Jan 30 22:37:10 1999<br />
BLOCKS:<br />
123134 123136 123137 123138 123140 131404 131405 131406 131407 131408 131409 131<br />
410 131411 131668<br />
TOTAL: 14</p>

<p><br />
   現在的重點是，必須將該 inode 所指的檔案，所指的 block 全部找回來。在這裏，<br />
   列出的資訊顯示只有 14 個 block? 不對啊! 應該要有 8000 多個 block 才對啊!<br />
   在這裏要談一下 UNIX like filesystem 的「奧密」了。上頭所列的前 12 個 block<br />
   是真正指到檔案資料的 block, 稱之為 direct block 。第 13 個稱為第一階<br />
   indirect block, 第 14 個稱為第二階 indirect block 。什麼意思? 該檔的資料<br />
   所在的 block 位置如下:</p>

<p>123134<br />
123136<br />
123137<br />
123138<br />
......<br />
131409<br />
131410<br />
131411 =========>  131412<br />
                   131413<br />
                   131414   (第一階，共 256 個)<br />
                   ......<br />
                   131667</p>

<p>131668 =========>  131669 ==========>  131670<br />
                                       131671<br />
                                       131672    (共 256 個)<br />
                                       ......<br />
                                       131925<br />
                   131926 ==========>  131927<br />
                                       131928<br />
                                       131929    (共 256 個)<br />
                                       ......<br />
                                       132182<br />
                   132183 ==========>  132184<br />
                                       132185    (共 256 個)<br />
                                       ......</p>

<p>   各位明白嗎? 第 13 個 (131411) 與第 14 個 block 其實不是 data, 而是 index,<br />
   它指出接下來的 block 的位置。由於一個 block 的大小是 1024 bytes, 一個 int<br />
   在 32 位元系統中是 4 bytes, 故一個 block 可以記錄 256 筆資料。以 131411<br />
   block 為例，它所記錄的資料即為 (在檔案未砍前):</p>

<p>        131412  131413  131414  ....  131667   (共 256 筆)</p>

<p>   而這 256 個 block 就真正記錄了檔案資料，所以我們稱為第一階。同理，第二階<br />
   就有兩個層 index, 以 131668 來說，它可能記錄了:</p>

<p>        131669  131926  132182  ....           (最多有 256 筆)</p>

<p>   而 131669 的 block 記錄為:</p>

<p>        131670  131671  131672  ....  131925   (共 256 筆)</p>

<p>   而這 256 個 block 才是真正儲存檔案資料的。而我們要的，就是這些真正儲存檔<br />
   案資料的 block 。</p>

<p>   理論上，我們只要將這些 index block 的內容全部讀出來，然後照這些 index 把<br />
   所有的 block 全部讀到手，就能 100% 救回檔案 (假設這些 block 全部沒有被新<br />
   檔案覆寫的話)。工程很大，但是可行。不幸的是，在 kernel-2.0.33, 其設計是，<br />
   如果該檔案被砍了，則這些 index block 全部會規零，因此我所讀到的是</p>

<p>        0  0  0  0  0  .....  (共 256 筆)</p>

<p>   哇! 沒辦法知道這些 data block 真正所在的位置。所以，在此我們做了一個很大<br />
   的假設: 整個檔案所在的 block 是連續的! 也就是我上頭的例子。這也就是為什<br />
   麼說，只有連續 block (是指後頭的 indirect block) 的檔案才能完整救回，而<br />
   這一點就要聽天由命了。</p>

<p><br />
4. 好了，現在我們只好假設所有的檔案處於連續的 block 上，現在請用</p>

<p>        http://archie.ncu.edu.tw</p>

<p>   去找這個工具:  fsgrab-1.2.tar.gz, 並將它安裝起來。因為步驟很簡單，故在此<br />
   我就不多談。我們要用它將所需的 block 全部抓出來。它的用法如下:</p>

<p>        fsgrab -c count -s skip device</p>

<p>   其中 count 是只要 (連續) 讀幾個， skip 是指要從第幾個開始讀，例如我要從<br />
   131670 開始連續讀 256 個，就這樣下指令:</p>

<p>        fsgrab -c 256 -s 131670 /dev/hda1 > recover</p>

<p>   現在我們就開始救檔案吧! 以上頭的資料，我們必須用以下的指令來救:<br />
   (注意到頭開的 12 個 block 並沒有完全連續!!!)</p>

<p>fsgrab -c 1 -s 123134 /dev/hda1 > recover<br />
fsgrab -c 3 -s 123136 /dev/hda1 >> recover<br />
fsgrab -c 1 -s 123140 /dev/hda1 >> recover<br />
fsgrab -c 7 -s 131404 /dev/hda1 >> recover</p>

<p>   這是開頭的 12 個 block, 對於第一階 indirect, 就資料來看好像是連續的 :-))</p>

<p>fsgrab -c 256 -s 131412 /dev/hda1 >> recover</p>

<p>   注意要跳過 131411, 因為它是 index block。對於第二階 indirect, 我們 *假設*<br />
   它們都是連續的:</p>

<p>fsgrab -c 256 -s 131670 /dev/hda1 >> recover<br />
fsgrab -c 256 -s 131927 /dev/hda1 >> recover<br />
fsgrab -c 256 -s 132184 /dev/hda1 >> recover<br />
............................................</p>

<p>   要一直做，直到 recover 的大小超過我們所要救回的檔案大小 (8220922) 為止。<br />
   要注意在這裏我們已很小心地跳過那些 index block (如 131668, 131669, 131926,<br />
   132183, ....) 了。</p>

<p><br />
5. 最後一步，就是把檔案「剪」出來，並看看我們救回多少了。在這裏我們可以用<br />
   split 這個工具，假設我們重覆上述步驟，弄出來的 recover 檔大小為 8294400,<br />
   而我們要的大小是 8220922, 那就這樣下指令:</p>

<p>        split -b 8220922 recover rec</p>

<p>   則會做出兩個檔，一個是 recaa, 大小是 8220922, 另一個是 recab 則是剩下的大<br />
   小，後者是垃圾，扔了即可。現在我們可以檢查這個檔案是不是「完整」的那個被<br />
   誤砍的檔案了。由於我們的那個檔案是 .tar.gz 的格式，於是我們這個方法來檢查:</p>

<p>        mv recaa recaa.tar.gz<br />
        zcat recaa.tar.gz > recaa.tar</p>

<p>   如果沒有錯誤訊息，那表示成功了! 完全救回來了。但不幸的是，我們沒有成功，<br />
   將弄出的 recaa.tar 改名再 gzip 之後，與原來的 recaa.tar.gz 比一下大小，發<br />
   現少了 1%, 表示說該檔原來所在的 block 中最後有 1% 是不連續的 (或者被新寫<br />
   入的檔案覆寫了)，但這已是不幸中的大幸了。</p>

<p>=============================================================================</p>

<p><br />
對於在 undelete 時 *必需* 假設所有 block 連續的問題，那份 HOWTO 文件說 Linus<br />
與其他 kernel 設計者正著手研究，看能否克服這個困難，也就是在檔案砍掉時，不要<br />
將 index block 規零。我剛剛試一下 kenrel-2.2.0 的環境，發現已做到了!! 以下是<br />
一個已砍的檔案的 inode data (由 debugfs 所讀出):</p>

<p>debugfs:  Inode: 36154   Type: regular    Mode:  0600   Flags: 0x0   Version: 1<br />
User:     0   Group:     0   Size: 2165945<br />
File ACL: 0    Directory ACL: 0<br />
Links: 0   Blockcount: 4252<br />
Fragment:  Address: 0    Number: 0    Size: 0<br />
ctime: 0x36b54c3b -- Mon Feb  1 14:39:55 1999<br />
atime: 0x36b54c30 -- Mon Feb  1 14:39:44 1999<br />
mtime: 0x36b54c30 -- Mon Feb  1 14:39:44 1999<br />
dtime: 0x36b54c3b -- Mon Feb  1 14:39:55 1999<br />
BLOCKS:<br />
147740 147741 147742 147743 147744 147745 147746 147747 147748 147769 147770 157<br />
642 157643 157644 157645 157646 157647 157648 157649 157650 157651 157652 157653<br />
 157654 157655 157656 157657 157658 157659 157660 157661 157662 157663 157664 15<br />
7665 157666 157667 157668 157669 157670 157671 157672 157673 157674 157675 15767<br />
6 157677 157678 157679 157680 157681 157682 157683 157684 157685 157686 157687 1<br />
............................................................................<br />
9745 159746 159747 159748 159749 159750 159751 159752 159753 159754 159755 15975<br />
6<br />
TOTAL: 2126</p>

<p>真是太完美了!! 這意味著在 kernel-2.2.X 的環境下，我們不必假設所有的 block 都<br />
連續，而且可以百分之百找回所有砍掉的 block! 因此上述的第二個風險就不存在了。</p>

<p>以上資料，謹供參考。</p>

<p>參考文件:  Ext2fs-Undeletion  Mini HOWTO<br />
<hr /></p>

<p><br />
<hr /><br />
<a href="http://www.lslnet.com/linux/docs/linux-3334.htm" target="_blank">UNIX系统被删文件的恢复策略</a><br />
以下轉載自上述連結:<br />
蓝森林 http://www.lslnet.com 2001年1月17日 20:19<br />
作者: 李贵林 陈朝晖<br />
与DOS/Windows不同，UNIX文件被删除后很难恢复，这是由UNIX独特的文件系统结构决定的。UNIX文件目录不像 DOS/Windows那样，文件即使被删除之后仍保存有完整的文件名、文件长度、始簇号(即文件占有的第一个磁盘块号)等重要信息;相反，它的文件信息全部依靠一种被称为i节点的数据结构来描述，而i节点在相应文件被删除之后即被清空，因此，要想直接恢复被删除的文件内容几乎是不可能的，必须另辟蹊径。本文结合实际，讨论几种文件恢复策略及其关键步骤的具体实现。<br />
　　一、UNIX文件系统结构<br />
　　我们知道，UNIX是以文件卷作为其文件系统存储格式的，而不同的UNIX系统，文件卷格式是有差异的，甚至即使是同一UNIX操作系统的不同版本，其文件系统未必完全相同，例如：SCO UNIX 4.1版与5.0版文件系统结构就有明显差异，但只要是UNIX系统，其文件卷的基本结构是一致的。分析如下：<br />
　　不管是什么UNIX系统，不管什么版本，其文件卷至少包括引导块、超级块、i节点表、数据区等几个部分。除此之外，不同UNIX版本可能还有不同的差异。例如：SCO UNIX系统的位图索引块和位图块AIX的逻辑卷表等。这些系统的特殊性不影响下文的恢复策略，故这里不作讨论，仅介绍标准UNIX文件卷结构。</p>

<p>  　1. 引导块<br />
　　位于文件卷最开始的第一扇区，这512字节是文件系统的引导代码，为根文件系统所特有，其他文件系统这512字节为空。</p>

<p>　　2. 超级块<br />
　　位于文件系统第二扇区，紧跟引导块之后，用于描述本文件系统的结构。如i节点长度、文件系统大小等，其结构存放于/usr/include/sys/filsys.h中，其结构如下：</p>

<p>　　struct filsys<br />
　　{<br />
　　ushort s_isize; /*磁盘索引节点区所占用的数据块数*/<br />
　　daddr_t s_fsize; /*整个文件系统的数据块数*/<br />
　　short s_nfree; /*在空闲块登录表中当前登记的空闲块数目*/<br />
　　daddr_t s_free[NICFREE]; /*空闲块登记表*/<br />
　　short s_ninode; /*空闲索引节点数*/<br />
　　ino_t s_inode[NICINOD]; /*空闲节点登记表*/<br />
　　char s_flock; /*加锁标志位*/<br />
　　char s_ilock; /*节点加锁标志位*/<br />
　　char s_fmod; /*超级块修改标志*/<br />
　　char s_ronly; /*文件系统只读标志*/<br />
　　time_t s_time; /*超级块上次修改的时间*/<br />
　　short s_dinfo[4]; /*设备信息*/<br />
　　daddr_t s_tfree; /*空闲块总数*/<br />
　　ino_t s_tinode; /*空闲节点总数*/<br />
　　char s_fname[6]; /*文件系统名称*/<br />
　　char s_fpack[6];<br />
　　long s_fill[13]; /*填空位*/<br />
　　long s_magic; /*指示文件系统的幻数*/<br />
　　long s_type; /*新文件系统类型*/<br />
　　};</p>

<p>　　3. i节点表<br />
　　i节点表存放在超级块之后，其长度是由超级块中的s_isize字段决定的，其作用是用来描述文件的属性、长度、属主、属组、数据块表等，其数据结构在/usr/include/sys/ino.h中，如下：<br />
　　struct dinode<br />
　　{<br />
　　ushort di_mode;<br />
　　short di_nlink;<br />
　　ushort di_uid;<br />
　　ushort di_gid;<br />
　　off_t di_size;<br />
　　char di_addr[40];<br />
　　time_t di_atime;<br />
　　time_t di_mtime;<br />
　　time_t di_ctime;<br />
　　};</p>

<p>　　4. 目录结构<br />
　　UNIX所有文件均存放于目录中，目录本身也是一个文件。目录存放文件的机制如下：首先，目录文件本身也象普通文件一样，占用一个索引节点，其次，由这个索引节点得到目录内容的存放位置，再次，从其内容中取出一个个的文件名和它对应的节点号，从而访问一个文件。目录结构如下：<br />
　　索引节点号(2字节) .(本目录)(14字节)<br />
　　索引节点号(2字节) ..(父目录)(14字节)<br />
　　索引节点号(2字节) 文件名(14字节)<br />
　　索引节点号(2字节) 文件名(14字节)<br />
　　索引节点号(2字节) 文件名(14字节)<br />
　　由上可知文件名是依靠目录来描述的，文件的内容和其他信息则由索引节点来描述。</p>

<p>　　二、文件的删除过程<br />
　　UNIX下删除一个文件的过程很简单，那就是释放索引节点表和文件占用的数据块，清空文件占用的索引节点，但不清除文件内容。但删除文件与删除目录的处理不尽相同，不同命令删除文件的过程也不相同。<br />
　　1. 删除一个文件<br />
　　UNIX 删除一个文件的具体步骤是：根据文件i节点的地址表逐一释放文件占用的磁盘数据块，然后清空相应的节点，最后释放i节点。<br />
　　2. 删除一个目录<br />
　　删除一个目录的过程：首先逐一删除目录里的所有文件，然后删除目录。目录本身也是一个文件，故删除方法与删除文件一致。<br />
　　3. 几种不同的删除命令<br />
　　.rm 命令<br />
　　一般删除命令，删除过程上述已说明。<br />
　　.mv命令<br />
　　格式：mv 文件1 文件2<br />
　　处理过程是将文件2的数据块释放，然后将文件1的名称改为文件2，再释放文件2所占的i节点。<br />
　　. > 命令<br />
　　格式：>文件名<br />
　　若产生一个新文件，>命令仅仅申请一个i节点，而不写入任何文件内容；若清空一个已经存在的文件，则释放文件所占的数据块，并将文件长度清零。</p>

<p>　　三、被删文件的恢复策略<br />
　　要恢复被删除的文件，只能根据删除后留下的东西去做文章。文件被删除后留下了什么呢？由上述分析可知：其一、留下了文件的内容；其二、留下了“现场”。文件的恢复策略只能从这两个方面来分析。以下谈几种恢复策略。</p>

<p>　　1.根据磁盘现场进行恢复<br />
　　如果文件被删除，现场未被破坏(即文件被删除后硬盘未发生过写操作)，而且假定只删除了一个文件，那么可根据系统的分配算法进行恢复。因为系统建立一个文件时，必定根据某一特定的分配算法决定文件占用的数据块位置。而当该文件被删除后，它所占用的数据块被释放，又回到系统的分配表中，这时如果重新建立一个文件，系统根据原来的分配算法分配出的数据块必定跟该文件原来占用的数据块一致，而且我们知道，UNIX文件最后一数据块尾部多出的字节是全部置0的，据此只要调用系统的数据分配算法，在系统中一块块的申请数据块，因为UNIX文件最后一个数据块尾部多出的字节全部为0，所以，只要发现一个分配出的数据块中尾部全为0，即可认为文件结束，由此可确定文件长度和内容，进而实现恢复。方法如下：<br />
　　⑴申请一个索引节点，即向系统申请创建一个新文件名而不写入任何内容。如：#>/tmp/xx<br />
　　⑵调用系统分配数据块算法getnextfreeblock()得到一个数据块号，记入某一地址表变量中。<br />
　　⑶读出这个数据块，判断其尾部是否全部连续为0，若不是，则回到(2)，若是，则进行(4)。<br />
　　⑷首先用系统函数fstat得到/tmp/xx的i节点号，然后将(2)步所得的地址表写入索引节点的地址表中(注意间址问题)，并根据数据块个数和最后一块中有效数据长度计算出文件大小，写入i节点的di_size字段。<br />
　　⑸回写系统的索引节点表即可。<br />
　　需要说明的是，第一，系统分配数据块的算法因不同的UNIX版本而不同；第二，有的UNIX如SCO UNIX 5.0版，其空闲数据块的分配和回收是使用一种动态链表的数据结构来实现的，它们的文件恢复更加容易，只要在空闲链表中的表尾去寻找即可，笔者另行描述。</p>

<p>　　2. 根据内容恢复。<br />
　　若现场已被破坏，即硬盘发生过写操作，那么只好根据内容来恢复。而且，由于UNIX是一个多进程、多用户系统，它每一次开关机或硬件、通讯故障等都会记录系统日志、.sh_history等，硬盘现场被破坏可能性极大。因此讨论按内容恢复的方法具有更大的实用价值。笔者经过实际探索得出下列四种恢复策略供参考。<br />
　　⑴关键字搜索法<br />
　　如果知道被删除的文件内容中若干字节的内容，而且该文件长度又不超过一个磁盘块，那么可以在整个文件系统中搜索这一字节串，得出一个文件所在的数据块，将它们的块号填入一个i节点，即可恢复一个文件，搜索文件系统的算法很简单，说明如下：<br />
　　a. #df -k 确定文件系统的设备文件名(如/dev/root)<br />
　　b.用下述函数搜索，若成功，返回数据块号，反之返回-1。其中fsname是文件系统的设备名，如/dev/root，comp()参数是实现搜索条件的函数。</p>

<p>　　long searchfs(char *fsname , int comp())<br />
　　{<br />
　　FILE *fp;<br />
　　char buf[1024];<br />
　　long i=0;<br />
　　fp=fopen(fsname,"r");<br />
　　while (!feof(fp))<br />
　　{<br />
　　fread(buf,1024,1,fp);<br />
　　if (comp()) /* 检查是否符合搜索条件 */<br />
　　return i; /* 若成功返回块号 */<br />
　　i++;<br />
　　}<br />
　　fclose(fp);<br />
　　return -1; /* 未找到符合条件的块，返回-1*/<br />
　　}<br />
　　⑵精确长度搜索法<br />
　　如果知道被删除文件的精确长度(字节数)，那么可根据一个数据块的大小，计算出文件的最后一个数据块中数据的精确长度，该数据块中其他字节必然是全0。根据这一条件，通过搜索整个文件系统，找出其中符合条件的数据块，若出现多个块符合要求，则还需要根据其他条件区分。但不管怎样，根据精确长度分析也是恢复数据的一个策略。</p>

<p>　　⑶内容关联法<br />
　　如果知道文件内容中存在某种可实现的关联，例如文件的校验和，或者文件内容的某种上下文关系，那么也可通过搜索整个文件系统，通过反复尝试寻找符合关联条件的磁盘数据块，进而恢复一个文件。</p>

<p>　　⑷环境比较法<br />
　　如果知道删除文件所在的文件系统的安装过程，那么，另行找一台完全相的机器，按原来完全相同的步骤安装相同版本的UNIX和相应的其他软件，可以想象，新的机器环境会与原来的环境基本相同，比较两个机器上相同文件系统的内容，可以推断出被删除文件的大致位置，至少可以大大减少查找的范围，一旦查找的范围足够小时，可以用逐个观察和尝试的方法结合其他条件恢复数据，降低恢复的难度，增加恢复的可靠性。<br />
　　UNIX系统下文件系统恢复的具体实现依赖于不同操作系统和不同版本的具体文件系统结构和磁盘块分配算法。本文试图总结出一种一般性的思路和策略，限于篇幅，不能详细讨论它们的具体实现过程。</p>

<p>摘自：http://linux.softhouse.com.cn<br />
<hr /></p>

<p><br />
<hr /><br />
<a href="http://www.linuxuser.com.tw/power/list2.php?id=2215" target="_blank">Linux檔系統的反刪除方法</a><br />
以下轉載自上述連結:</p>

<p>Linux檔系統的反刪除方法</p>

<p>　　作為一個多用戶、多工的作業系統，Linux下的檔一旦被刪除，是難以恢復的。儘管刪除命令只是在檔節點中作刪除標記，並不真正清除檔內容，但是其他用戶和一些有寫盤動作的進程會很快覆蓋這些資料。不過，對於家庭單機使用的Linux，或者誤刪檔後及時補救，還是可以恢復的。</p>

<p>1．Ext2檔系統結構的簡單介紹</p>

<p>　　在Linux所用的Ext2檔系統中，檔是以塊為單位存儲的，默認情況下每個塊的大小是1K，不同的塊以塊號區分。每個檔還有一個節點，節點中包含有檔所有者，讀寫許可權，檔類型等資訊。對於一個小於12個塊的檔，在節點中直接存儲檔資料塊的塊號。如果檔大於12個塊，那麼節點在12個塊號之後存儲一個間接塊的塊號，在這個間接塊號所對應的塊中，存儲有256個檔資料塊的塊號（Ext2fs中每個塊號佔用4位元組，這樣一個塊中所能存儲的塊號就是 1024/4=256）。如果有更大的檔，那麼還會在節點中出現二級間接塊和三級間接塊。</p>

<p>2。恢復被誤刪檔的方法</p>

<p>　　大多數Linux發行版都提供一個debugfs工具，可以用來對Ext2檔系統進行編輯操作。不過在使用這個工具之前，還有一些工作要做。</p>

<p>　　首先以唯讀方式重新掛載被誤刪的檔所在分區。使用如下命令：（假設文件在/usr分區）</p>

<p>mount –r –n –o remount /usr</p>

<p>-r表示唯讀方式掛載；-n表示不寫入/etc/mtab，如果是恢復/etc上的檔，就加上這個參數。如果系統說xxx partion busy，可以用fuser命令查看一下是哪些進程使用這個分區上的檔：</p>

<p>fuser –v –m /usr</p>

<p>如果沒有什麼重要的進程，用以下命令停掉它們：</p>

<p>fuser -k –v –m /usr</p>

<p>然後就可以重新掛載這些檔系統了。</p>

<p>　　如果是把所有的檔統一安裝在一個大的/分區當中，可以在boot提示符下用linux single進入單用戶模式，儘量減少系統進程向硬碟寫入資料的機會，要不乾脆把硬碟掛在別的機器上。另外，恢復出來的資料不要寫到/上面，避免破壞那些有用的資料。如果機器上有dos/windows，可以寫到這些分區上面：</p>

<p>mount –r –n /dev/hda1 /mnt/had</p>

<p>然後就可以執行debugfs：（假設Linux在 /dev/hda5）</p>

<p>#debugfs /dev/hda5</p>

<p>就會出現debugfs提示符debugfs：</p>

<p>使用lsdel命令可以列出很多被刪除的檔的資訊：</p>

<p>debugfs：lsdel<br />
debugfs: 2692 deleted inodes found.<br />
Inode Owner Mode Size Blocks Time deleted<br />
164821 0 100600 8192 1/ 1 Sun May 13 19:22:46 2001<br />
…………………………………………………………………………………<br />
36137 0 100644 4 1/ 1 Tue Apr 24 10:11:15 2001<br />
196829 0 100644 149500 38/ 38 Mon May 27 13:52:04 2001</p>

<p>debugfs:</p>

<p>　　列出的檔有很多（這裏找到2692個），第一欄位是檔節點號，第二欄位是檔所有者，第三欄位是讀寫許可權，接下來是檔大小，佔用塊數，刪除時間。然後就可以根據檔大小和刪除日期判斷那些是我們需要的。比如我們要恢復節點是</p>

<p>196829的文件：</p>

<p>可以先看看檔資料狀態：</p>

<p>debugfs：stat <196829><br />
Inode: 196829 Type: regular Mode: 0644 Flags: 0x0 Version: 1<br />
User: 0 Group: 0 Size: 149500<br />
File ACL: 0 Directory ACL: 0<br />
Links: 0 Blockcount: 38<br />
Fragment: Address: 0 Number: 0 Size: 0<br />
ctime: 0x31a9a574 -- Mon May 27 13:52:04 2001<br />
atime: 0x31a21dd1 -- Tue May 21 20:47:29 2001<br />
mtime: 0x313bf4d7 -- Tue Mar 5 08:01:27 2001<br />
dtime: 0x31a9a574 -- Mon May 27 13:52:04 2001<br />
BLOCKS:<br />
594810 594811 594814 594815 594816 594817<br />
………………………………….<br />
TOTAL: 38</p>

<p>然後就可以用dump指令恢復檔：</p>

<p>debugfs：dump <196829> /mnt/hda/01.sav</p>

<p>這樣就把檔恢復出來了。退出debugfs：</p>

<p>debugfs：quit</p>

<p>另一種方法是手工編輯inode：</p>

<p>debugfs：mi <196829><br />
Mode [0100644]<br />
User ID [0]<br />
Group ID [0]<br />
Size [149500]<br />
Creation time [0x31a9a574]<br />
Modification time [0x31a9a574]<br />
Access time [0x31a21dd1]<br />
Deletion time [0x31a9a574] 0<br />
Link count [0] 1<br />
Block count [38]<br />
File flags [0x0]<br />
Reserved1 [0]<br />
File acl [0]<br />
Directory acl [0]<br />
Fragment address [0]<br />
Fragment number [0]<br />
Fragment size [0]<br />
Direct Block #0 [594810]<br />
…………………………….<br />
Triple Indirect Block [0]</p>

<p>使用mi指令後每次顯示一行資訊以供編輯，其他行可以直接按回車表示確認，把deletion time改成0（未刪除），Link count改成1。改好後退出debugfs：</p>

<p>debugfs：quit</p>

<p>然後用fsck檢查/dev/hda5</p>

<p>fsck /dev/hda5</p>

<p>程式會說找到丟失的資料塊，放在lost+found裏面。這個目錄裏的檔就是我們要的東東。</p>

<p>Now all O.K. Good Luck. <br />
<hr /></p>

<p><a href="http://www.douzhe.com/blog/post/1/170" target="_blank">EXT3 Recovery - Score one for the fleshlings</a><br />
<hr /><br />
以下轉載自上述連結:<br />
修復ext3文件系统的超级塊<br />
I just got my blog back after wrestling with a hosed ext3 partition, and winning. Long story short, I put some bad ram into Adrock which quickly caused a kernel panic. Upon removing the bad RAM and rebooting /var was toast, the journal was toast and it looked like the superblocks were a bit charred as well. I had to dig for a while to get this problem solved... so here's the info on the failure and the fix.</p>

<p>/var was unmountable.<br />
I removed /var from fstab and booted the machine on a /var dir off the root so I could work on it remotely.</p>

<p>Here's what happened next. I fsck a variety of ways, fsck.ext3 etc.. each reported the same:<br />
fsck /dev/ida/c0d0p7<br />
fsck 1.27 (8-Mar-2002)<br />
e2fsck 1.27 (8-Mar-2002)<br />
Group descriptors look bad... trying backup blocks...<br />
fsck.ext2: Invalid argument while checking ext3 journal for /var</p>

<p>Tried downgrading to ext2 to bypass the hosed journal issues:</p>

<p>tune2fs -O ^has_journal /dev/ida/c0d0p7<br />
tune2fs 1.27 (8-Mar-2002)<br />
tune2fs: Invalid argument while reading journal inode</p>

<p>No good. Tried mounting as ext2 read only:</p>

<p>mount -t ext2 /dev/ida/c0d0p7 /mnt -o ro<br />
mount: wrong fs type, bad option, bad superblock on /dev/ida/c0d0p7,<br />
or too many mounted file systems</p>

<p>Nada. Tried some more stuff... tune2fs, and debugfs to try to fix / disable the journal, then decided I'd better back up the partition... should have done that first! ;P</p>

<p>e2fsck -c /dev/ida/c0d0p7<br />
e2fsck 1.27 (8-Mar-2002)<br />
Group descriptors look bad... trying backup blocks...<br />
e2fsck: Invalid argument while checking ext3 journal for /var<br />
[root@adrock init.d]# tune2fs -j /dev/ida/c0d0p7<br />
tune2fs 1.27 (8-Mar-2002)<br />
The filesystem already has a journal.<br />
[root@adrock init.d]# debugfs -w /dev/ida/c0d0p7<br />
debugfs 1.27 (8-Mar-2002)<br />
/dev/ida/c0d0p7: Can't read an inode bitmap while reading inode bitmap<br />
debugfs: quit<br />
[root@adrock init.d]# dd if=/dev/ida/c0d0p7 of=/big/var.bak.dd<br />
530368+0 records in</p>

<p>Still hosed, but now I have a backup of the burnination. And now for the FIX!!!</p>

<p>mke2fs -S /dev/ida/c0d0p7<br />
mke2fs 1.27 (8-Mar-2002)<br />
Filesystem label=<br />
OS type: Linux<br />
Block size=1024 (log=0)<br />
Fragment size=1024 (log=0)<br />
66528 inodes, 265184 blocks<br />
13259 blocks (5.00%) reserved for the super user<br />
First data block=1<br />
33 block groups<br />
8192 blocks per group, 8192 fragments per group<br />
2016 inodes per group<br />
Superblock backups stored on blocks:<br />
8193, 24577, 40961, 57345, 73729, 204801, 221185</p>

<p>Writing superblocks and filesystem accounting information: done</p>

<p>That did it! mke2fs re-wrote all of the superblocks and group descriptors and I was able to mount in RO mode and copy off the data. After that I was able to fsck and remount the original parition with no problems!</p>

<p>I found some great info on the RedHat ext3 mailing list archive which led me to this fix. Big thanks to the guys on that list!<br />
<hr /></p>

<p><br />
以下兩頁的說明, 一頁說有支援 ext3, 一頁說沒有 :(<br />
<a href="http://www.linux.or.jp/JM/html/e2fsprogs/man8/debugfs.8.html" target="_blank">DEBUGFS</a>、<a href="http://www.die.net/doc/linux/man/man8/debugfs.8.html" target="_blank">debugfs(8) - Linux man page</a></p>

<p><hr /><br />
debugfs 的程式就兩個 file, 大約共 500 行. 有興趣的就於下處去看看吧~(kernel 2.6.11)<br />
/usr/src/linux/fs/debugfs/<br />
<a href="http://www.linuxhq.com/kernel/v2.6/11.6-bk3/fs/debugfs/" target="_blank">Kernel v2.6.11.6-bk3 fs/debugfs/</a><br />
<a href="http://www.linuxhq.com/docs/index.html" target="_blank">LinuxHQ - Documentation</a><br />
<hr /></p>]]>
    </content>
  </entry>
  <entry>
    <title>Gentoo - User-Mode Linux</title>
    <link rel="alternate" type="text/html" href="http://blog.longwin.com.tw/archives/000586.html" />
    <modified>2005-04-03T13:58:03Z</modified>
    <issued>2005-04-03T21:58:03+08:00</issued>
    <id>tag:blog.longwin.com.tw,2005://1.586</id>
    <created>2005-04-03T13:58:03Z</created>
    <summary type="text/plain">Gentoo Linux 開發員 User-Mode Linux 測試指南 這邊指的 UML 是指 User-Mode Linux, 就是在 Linux 上架構一套 Linux. 有點類似 vmware. 就是在電腦上模擬一台電腦. 正好看到~ 趕快記下來~ :)...</summary>
    <author>
      <name>jon</name>
      <url>http://plog.longwin.com.tw</url>
      <email>jon@longwin.com.tw</email>
    </author>
    <dc:subject>教學文件</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blog.longwin.com.tw/">
      <![CDATA[<p><a href="http://www.gentoo.org/doc/zh_tw/uml.xml" target="_blank">Gentoo Linux 開發員 User-Mode Linux 測試指南</a><br />
這邊指的 UML 是指 User-Mode Linux, 就是在 Linux 上架構一套 Linux.<br />
有點類似 vmware. 就是在電腦上模擬一台電腦.<br />
正好看到~ 趕快記下來~ :)</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Linux 翻譯計畫</title>
    <link rel="alternate" type="text/html" href="http://blog.longwin.com.tw/archives/000585.html" />
    <modified>2005-04-03T10:53:00Z</modified>
    <issued>2005-04-03T18:53:00+08:00</issued>
    <id>tag:blog.longwin.com.tw,2005://1.585</id>
    <created>2005-04-03T10:53:00Z</created>
    <summary type="text/plain">Open Source 在推廣的時後總是有個最大的問題. 就是文件都是英文, 使用者介面也是英文. 造成很多人不敢進入. 在推廣的人也極力在翻譯, 找人幫忙翻譯 等等. 甚至也開發了一些好用的工具來斜助翻譯. ex: 原真 的 翻譯工具、 翻譯字辭大全 不過 我發現到最主要的問題在於. 有很多有心人事想要幫忙.. 但是 都不知道有哪些需要被翻譯. 該如何進入. 該如何回覆... 現在簡單列幾個站, 若有人能幫忙. 比較有個頭緒:...</summary>
    <author>
      <name>jon</name>
      <url>http://plog.longwin.com.tw</url>
      <email>jon@longwin.com.tw</email>
    </author>
    <dc:subject>教學文件</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blog.longwin.com.tw/">
      <![CDATA[<p>Open Source 在推廣的時後總是有個最大的問題.<br />
就是文件都是英文, 使用者介面也是英文. 造成很多人不敢進入.</p>

<p>在推廣的人也極力在翻譯, 找人幫忙翻譯 等等.<br />
甚至也開發了一些好用的工具來斜助翻譯. ex: 原真 的 <a href="http://words.2share.net/podb/" target="_blank">翻譯工具</a>、 <a href="http://words.2share.net/index.php/%E9%A6%96%E9%A0%81" target="_blank">翻譯字辭大全</a><br />
不過 我發現到最主要的問題在於. 有很多有心人事想要幫忙..<br />
但是 都不知道有哪些需要被翻譯. 該如何進入. 該如何回覆...<br />
現在簡單列幾個站, 若有人能幫忙. 比較有個頭緒: (若有錯請指正)<br />
<a href="http://kde.linux.org.tw/~acelan/kde-i18n/static-untrans.html" target="_blank">KDE</a><br />
<a href="http://www.linux.org.tw/CLDP/" target="_blank">Chinese Linux Documentation Project</a> - <a href="http://www.linux.org.tw/CLDP/cldp.html#join" target="_blank">如何參與</a><br />
<a href="http://cle.linux.org.tw/LDP/" target="_blank">The Linux Documentation Project</a><br />
</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Google強化Firefox搜尋速度</title>
    <link rel="alternate" type="text/html" href="http://blog.longwin.com.tw/archives/000584.html" />
    <modified>2005-04-01T09:16:12Z</modified>
    <issued>2005-04-01T17:16:12+08:00</issued>
    <id>tag:blog.longwin.com.tw,2005://1.584</id>
    <created>2005-04-01T09:16:12Z</created>
    <summary type="text/plain">Google強化Firefox搜尋速度 難怪 Google 挖了那麼多 Firefox 的人~ 看來已經跨出第一步了 :)...</summary>
    <author>
      <name>jon</name>
      <url>http://plog.longwin.com.tw</url>
      <email>jon@longwin.com.tw</email>
    </author>
    <dc:subject>轉載新聞</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blog.longwin.com.tw/">
      <![CDATA[<p><a href="http://taiwan.cnet.com/news/ce/0,2000062982,20097864,00.htm" target="_blank">Google強化Firefox搜尋速度</a><br />
難怪 Google 挖了那麼多 Firefox 的人~<br />
看來已經跨出第一步了 :)</p>]]>
      <![CDATA[<p>以下轉載自: <a href="http://taiwan.cnet.com/news/ce/0,2000062982,20097864,00.htm" target="_blank">Google強化Firefox搜尋速度</a><br />
CNET新聞專區：Ingrid Marson　　01/04/2005</p>

<p>Google在其搜尋引擎中新增一項功能，讓Firefox 用戶能夠更迅速地獲得搜尋結果。</p>

<p>Google的軟體工程師Reza Behforooz在本週三表示，Google的搜尋引擎能夠將第一個搜尋結果預裝在Firefox 瀏覽器的快取中。</p>

<p>他在Google Blog中表示，「現在，在Firefox 、Mozilla 瀏覽器上使用Google的速度比以往要快。使用這些瀏覽器進行搜尋時，我們會讓瀏覽器提前下載第一個搜尋結果，因此當用戶點擊第一項搜尋結果時，就能夠迅速獲得需要的網頁。 」</p>

<p>Google的預裝連結功能只適用於Firefox 、Mozilla 瀏覽器，由於IE和其他瀏覽器不提供這樣的功能，因此用戶無法使用Google的預裝鏈結功能。</p>

<p>但這一功能可能會存在問題。Google在「常見問題」中表示，即使沒有點選網站，其cookies 和網頁也會出現在用戶瀏覽器的快取中。</p>

<p>一些Firefox 用戶也在Mozillazine 網站上表達對該功能的憂慮，他們表示用戶可能會在毫不知情的情況下下載非法內容，並會佔用更多的頻寬。</p>

<p>一名用戶說，「如果第一項匹配的搜尋結果是個色情網站，公司的代理伺服器記錄下了該網站，你就會遇到麻煩--儘管沒有看該網頁，卻下載了它所有的cookies。」</p>

<p>另一名用戶Alex Bishop則回應解釋，「即使用戶在不知情的情況下下載了非法內容，這些內容也與他們主動選擇的內容帶有不同標誌。<b>Google搜尋引擎發送的請求會帶有"x-moz ： prefetch "的header。</b>」</p>]]>
    </content>
  </entry>
  <entry>
    <title>Linux 筆記 Linux note</title>
    <link rel="alternate" type="text/html" href="http://blog.longwin.com.tw/archives/000583.html" />
    <modified>2005-03-31T11:15:28Z</modified>
    <issued>2005-03-31T19:15:28+08:00</issued>
    <id>tag:blog.longwin.com.tw,2005://1.583</id>
    <created>2005-03-31T11:15:28Z</created>
    <summary type="text/plain">Linux 筆記 Linux note...</summary>
    <author>
      <name>jon</name>
      <url>http://plog.longwin.com.tw</url>
      <email>jon@longwin.com.tw</email>
    </author>
    <dc:subject>好站推薦</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blog.longwin.com.tw/">
      <![CDATA[<p><a href="http://www2.cyut.edu.tw/~s9154610/linux.html" target="_blank">Linux 筆記 Linux note</a></p>]]>
      
    </content>
  </entry>
  <entry>
    <title>JDBC資料庫連接池的實現</title>
    <link rel="alternate" type="text/html" href="http://blog.longwin.com.tw/archives/000582.html" />
    <modified>2005-03-31T10:38:53Z</modified>
    <issued>2005-03-31T18:38:53+08:00</issued>
    <id>tag:blog.longwin.com.tw,2005://1.582</id>
    <created>2005-03-31T10:38:53Z</created>
    <summary type="text/plain">一種簡單JDBC資料庫連接池的實現 平常 connection 是要 lock 的資料. connectioionpool 是用共用的方式. 內文中提到: （併發物理連接數）×（每個連接可提供的Statement數量） 　例如某種資料庫可同時建立的物理連接數為 200個，每個連接可同時提供250個Statement，那麼ConnectionPool最終為應用提供的併發Statement總數為: 200 × 250 = 50,000個。這是個併發數位，很少有系統會突破這個量級。所以在本節的開始，指出資源的耗盡與應用程式直接管理有關。 傳統的方試只可以接受&quot;物理連接數&quot; 有點類似在中間層加 buffer 的意味. 記得 PHP 的 ADODB...</summary>
    <author>
      <name>jon</name>
      <url>http://plog.longwin.com.tw</url>
      <email>jon@longwin.com.tw</email>
    </author>
    <dc:subject>文章</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blog.longwin.com.tw/">
      <![CDATA[<p><a href="http://www.javafan.net/article/20040225085618607.html" target="_blank">一種簡單JDBC資料庫連接池的實現</a></p>

<p>平常 connection 是要 lock 的資料. connectioionpool 是用共用的方式.</p>

<p>內文中提到:<br />
（併發物理連接數）×（每個連接可提供的Statement數量）<br />
　例如某種資料庫可同時建立的物理連接數為 200個，每個連接可同時提供250個Statement，那麼ConnectionPool最終為應用提供的併發Statement總數為: 200 × 250 = 50,000個。這是個併發數位，很少有系統會突破這個量級。所以在本節的開始，指出資源的耗盡與應用程式直接管理有關。<br />
傳統的方試只可以接受"物理連接數"</p>

<p>有點類似在中間層加 buffer 的意味. 記得 PHP 的 ADODB 好像也有類似的功能.</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>修改所有指定檔案的權限</title>
    <link rel="alternate" type="text/html" href="http://blog.longwin.com.tw/archives/000581.html" />
    <modified>2005-03-31T06:58:33Z</modified>
    <issued>2005-03-31T14:58:33+08:00</issued>
    <id>tag:blog.longwin.com.tw,2005://1.581</id>
    <created>2005-03-31T06:58:33Z</created>
    <summary type="text/plain">一行小指令. 但是很實用. sudo chmod 644 `find . -iname &apos;*htm*&apos;` 以上指令是 將所有 htm 的檔案, 都 權限 都改成 644. 對團體要一起開發程式特別好用. 當團體通常都會設定 Group, 就改成 664 即可使用~ :p...</summary>
    <author>
      <name>jon</name>
      <url>http://plog.longwin.com.tw</url>
      <email>jon@longwin.com.tw</email>
    </author>
    <dc:subject>Program</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blog.longwin.com.tw/">
      <![CDATA[<p>一行小指令. 但是很實用.<br />
<font color="red">sudo chmod 644 `find . -iname '*htm*'`</font><br />
以上指令是 將所有 htm 的檔案, 都 權限 都改成 644.<br />
對團體要一起開發程式特別好用.<br />
當團體通常都會設定 Group, 就改成 664 即可使用~ :p</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Flickr 使用心得</title>
    <link rel="alternate" type="text/html" href="http://blog.longwin.com.tw/archives/000580.html" />
    <modified>2005-03-31T01:52:55Z</modified>
    <issued>2005-03-31T09:52:55+08:00</issued>
    <id>tag:blog.longwin.com.tw,2005://1.580</id>
    <created>2005-03-31T01:52:55Z</created>
    <summary type="text/plain">Flickr 到現在還是掛著 Beta. 現在系統都流行掛 Beta?.. 因為 Yahoo! 收購 Flickr 才知道有這家公司. 也不知道為何要收購.. 不知為什麼. 最好的方法就是用用看~~ :p 發現 Filckr 的特色 - 透明營幕 註冊來用用看.. 使用後. 發現這套已經非常強大了, 而且使用也很方便~ 來做做小筆記吧~ 1....</summary>
    <author>
      <name>jon</name>
      <url>http://plog.longwin.com.tw</url>
      <email>jon@longwin.com.tw</email>
    </author>
    <dc:subject>日記</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blog.longwin.com.tw/">
      <![CDATA[<p><a href="http://www.flickr.com/" target="_blank">Flickr</a> 到現在還是掛著 Beta. 現在系統都流行掛 Beta?..<br />
因為 Yahoo! 收購 Flickr 才知道有這家公司. 也不知道為何要收購..<br />
不知為什麼. 最好的方法就是用用看~~ :p<br />
發現 Filckr 的特色 - <a href="http://www.flickr.com/photos/w00kie/sets/180637/" target="_blank">透明營幕</a></p>

<p>註冊來用用看.. 使用後. 發現這套已經非常強大了, 而且使用也很方便~<br />
來做做小筆記吧~</p>

<p>1. 要上傳照片.<br />
   可以用網頁上傳. 也可以 Upload -> Uploading tools 找到工具程式來上傳.<br />
   用拖拉的方式就可以上傳了. 超方便.. </p>

<p>2. 自己的 link 是 <a href="http://www.flickr.com/photos/41613170@N00/" target="_blank">http://www.flickr.com/photos/41613170@N00/</a><br />
    他可以設定 alias. 登入後於頁面有 "Choose your Flickr web address!"<br />
    然後可以選自己的 alias. 於是會一次產生兩個<br />
    * PHOTO: <a href="http://www.flickr.com/photos/tsung/" target="_blank">http://www.flickr.com/photos/tsung/</a><br />
   * BLOG: <a href="http://www.flickr.com/people/tsung/" target="_blank">http://www.flickr.com/people/tsung/</a></p>

<p>3. 最特別的東西就是他的 Note 了~~<br />
    ex: <a href="http://www.flickr.com/photos/tsung/6964561/" target="_blank">http://www.flickr.com/photos/tsung/6964561/</a><br />
   可以在照片加入小註解. 我超愛這個小功能.<br />
   加 Note 的方法又很簡單.<br />
   於你照片的上頭有一排灰色的字. 不怎麼明顯, 然後點最左邊的 ADD Note 就可以了.<br />
   會出現小框框. 可以拖拉放大縮小, 也可以寫中文(UTF-8).</p>

<p>4. 上面還有很多其它的小功能, <br />
    "BLOG This" 就可以加到自己的 Blog 去.<br />
    而且不一定要用他的 Blog, 也可以自己加到自己 Blog 去.<br />
    只要小小設定一下就可以了~ (不過我 Blog 都滿滿的, 沒地方擺這個).<br />
    "Rotate" 可以旋轉照片. 想要往左轉, 右轉. 你高興就行...<br />
    "All Size" 點下去可以看到照片 URL 等等資訊. 隨時看你想加在網頁何處都行~<br />
                  而且上面還有尺寸. 他自己可以幫你做縮放.</p>

<p>5. 其它. 等哪天用到其它功能再說~~ :p</p>

<p>心得: 基本上這就是 Blog + 相簿, 不過.. 有很多很方便的東西.<br />
        也整合了不少的工具. 難怪現在這麼看好 Flickr.</p>]]>
      <![CDATA[<p>來看看相關新聞:<br />
<a href="http://news.com.com/Yahoo+buys+photo-sharing+site+Flickr/2100-1038_3-5627640.html?part=rss&tag=5627640&subj=news" target="_blank">Yahoo buys photo-sharing site Flickr</a><br />
<a href="http://news.com.com/Yahoos+game+of+photo+tag/2100-1032_3-5630403.html?tag=nefd.lede" target="_blank">Yahoo's game of photo tag</a><br />
<a href="http://taiwan.cnet.com/news/software/0,2000064574,20097588,00.htm" target="_blank">分析：Yahoo的Flickr相片網站佈局</a><br />
<a href="http://jeremy.zawodny.com/blog/archives/004362.html" target="_blank">Thoughts on Flickr and Yahoo</a><br />
<a href="http://blog.roodo.com/vista/archives/16556.html" target="_blank">我的Flickr 關係鏈</a><br />
<a href="http://blog.roodo.com/sunjoe/archives/16739.html" target="_blank">生日快樂Flickr與Oui-Blog</a><br />
<a href="http://blog.netmazta.net/2005/03/blog-post.html" target="_blank">延伸閱讀: 這個標籤不太難</a><br />
<a href="http://www.azuremedia.net/tech/history/blog/000925.html" target="_blank">Flickr + MT共同結構個人版Google Print</a><br />
<a href="http://www.azuremedia.net/tech/history/focus/000957.html" target="_blank">Flickr創意用途</a><br />
<a href="http://www.azuremedia.net/tech/history/blog/000737.html" target="_blank">儲存Blog Post圖片，唯有Flickr</a><br />
<a href="http://jeremy.zawodny.com/blog/archives/003880.html" target="_blank">Parking Lot Indicatr Photo Group on Flickr</a><br />
<a href="http://worker.bluecircus.net/archives/004591.html" target="_blank">有flickr又有blog的看過來！(部落格招牌展覽會)</a></p>

<p>比較: <br />
轉載自:<a href="http://yam.udn.com/yamnews/daily/2567708.shtml" target="_blank">網路相簿 互動新天地</a><br />
<span><br />
<table border="1"><br />
<tbody><tr> <br />
    <td colspan="4"> <br />
      <div align="center"><font size="3"><b>網路免費相簿功能比一比</b></font></div><br />
    </td><br />
  </tr><br />
  <tr> <br />
    <td height="31" width="58"> <br />
      <div align="center"><font size="2">網站</font></div><br />
    </td><br />
    <td height="31" width="48"> <br />
      <div align="center"><font size="2">容量</font></div></p>

<p>    </td><br />
    <td height="31" width="164"> <br />
      <div align="center"><font size="2">功能特色</font></div><br />
    </td><br />
    <td height="31" width="184"> <br />
      <div align="center"><font size="2">網址</font></div><br />
    </td><br />
  </tr><br />
  <tr> <br />
    <td width="58"><font size="2">MSN Space</font></td></p>

<p>    <td width="48"><font size="2">10MB</font></td><br />
    <td width="164"><font size="2">建立網路日誌內容<br><br />
      留言互動<br><br />
      動態播放相片<br><br />
      行動電話管理相簿（註） </font></td><br />
    <td width="184"><font size="2">http://spaces.msn.com/</font></td></p>

<p>  </tr><br />
  <tr> <br />
    <td width="58"><font size="2">Yahoo!奇摩</font></td><br />
    <td width="48"><font size="2">30MB</font></td><br />
    <td width="164"><font size="2">數位相片分享<br><br />
      相片編輯功能<br><br />
      透過即時通訊軟體分享相片 </font></td></p>

<p>    <td width="184"><font size="2">http://tw.photos.yahoo.com</font></td><br />
  </tr><br />
  <tr> <br />
    <td width="58"><font size="2">PChome</font></td><br />
    <td width="48"><font size="2">100MB</font></td><br />
    <td width="164"><font size="2">網路相簿上傳<br><br />
      留言互動 </font></td></p>

<p>    <td width="184"><font size="2">http://photo.pchome.com.tw/</font></td><br />
  </tr><br />
  <tr> <br />
    <td width="58"><font size="2">蕃薯藤</font></td><br />
    <td width="48"><font size="2">15MB</font></td><br />
    <td width="164"><font size="2">網路相簿上傳<br><br />
      手機照片MMS上傳<br></p>

<p>      沖洗相片服務 </font></td><br />
    <td width="184"><font size="2">http://photo.yam.com/PersonalAlbum/</font></td><br />
  </tr><br />
  <tr> <br />
    <td width="58"><font size="2">無名小站</font></td><br />
    <td width="48"><font size="2">50MB</font></td><br />
    <td width="164"><font size="2">網路個人相簿<br></p>

<p>      個人網誌<br><br />
      個人留言版 </font></td><br />
    <td width="184"><font size="2">http://www.wretch.cc/album/</font></td><br />
  </tr><br />
</tbody><br />
</table><br />
</span></p>]]>
    </content>
  </entry>

</feed>