Linux下檔案內容更新了,資料夾時間戳卻沒變?
比如,起始狀態:
ysx@localhost:~/trash/ehbio$ ls -ltr total 0 drwxr-xr-x. 2 ysx ehbio 6 Jan 7 10:48 webserver drwxr-xr-x. 2 ysx ehbio 6 Jan 7 10:48 train drwxr-xr-x. 2 ysx ehbio 6 Jan 7 10:48 bioinfoservice
在webserver資料夾下,增加一個檔案,record.md
ysx@localhost:~/trash/ehbio$ cat <webserver/record.md 完成9個生物線上資料儲存、查詢和分析網站的建設。 END
再檢視下資料夾日期有沒有變化,發生變化了,為我們新增檔案的日期。
ysx@localhost:~/trash/ehbio$ ls -ltr webserver/record.md -rw-r--r--. 1 ysx ehbio 74 Jan 7 10:49 webserver/record.md ysx@localhost:~/trash/ehbio$ ls -ltr total 0 drwxr-xr-x. 2 ysx ehbio 6 Jan 7 10:48 train drwxr-xr-x. 2 ysx ehbio 6 Jan 7 10:48 bioinfoservice drwxr-xr-x. 2 ysx ehbio 22 Jan 7 10:49 webserver
那麼再繼續追加內容,還是使用cat (不同寫入方式也有影響,後面會提到)。
ysx@localhost:~/trash/ehbio$ cat <>webserver/record.md 2. 一個網站發表於NAR資料庫專刊,3個網站正在投稿中。 END
這時再看資料夾日期,發現與檔案不同步了。檔案日期更新了,資料夾日期卻沒變。
ysx@localhost:~/trash/ehbio$ ls -ltr webserver/record.md -rw-r--r--. 1 ysx ehbio 148 Jan 7 10:52 webserver/record.md ysx@localhost:~/trash/ehbio$ ls -ltr total 0 drwxr-xr-x. 2 ysx ehbio 6 Jan 7 10:48 train drwxr-xr-x. 2 ysx ehbio 6 Jan 7 10:48 bioinfoservice drwxr-xr-x. 2 ysx ehbio 22 Jan 7 10:49 webserver
這是為什麼呢? 檔案內容更新了,資料夾時間戳卻未變。那麼件夾的更新日期是什麼決定的呢?
我們在使用less操作時,有時會不小心對一個資料夾進行less操作。看上去就像資料夾裡的內容變成了一個文字檔案。
ysx@localhost:~/trash/ehbio$ less webserver/ total 4 drwxr-xr-x. 2 ysx ehbio 22 Jan 7 10:49 ./ drwxr-xr-x. 5 ysx ehbio 70 Jan 7 10:48 ../ -rw-r--r--. 1 ysx ehbio 148 Jan 7 10:52 record.md
而資料夾確實是類似文字檔案的方式儲存的,資料夾可以看做檔案inode:檔名組成的文字檔案 (檔案的屬性資訊存在inode的元資訊中,可以用stat file檢視)。只要資料夾內未發生檔案的新增、刪除、軟鏈或資料夾內檔案的inode (也稱為索引節點)未改變,資料夾 (代表資料夾的文字檔案)的時間戳就不會發生變化。
webserver資料夾的文字儲存(第一例為inode,第二列是檔名)
2763934 . 2764125 .. 104480 record.md
而我們每次追加檔案內容都未改變檔名字和檔案的inode,所以資料夾的日期未發生變化。
# -i可檢視檔案的inode ysx@localhost:~/trash/ehbio$ ls -ai webserver/ 2763934 . 2764125 .. 104480 record.md ysx@localhost:~/trash/ehbio$ cat <>webserver/record.md > 3. 繼續為大資料的再次利用和更方便利用而努力 > END ysx@localhost:~/trash/ehbio$ ls -ai webserver/ 2763934 . 2764125 .. 104480 record.md
關於資料夾日期更新的問題算是解決了。
另一個問題是,雖然同事的檔案更新了,資料夾時間戳一般不改變。但我發現我每次更新完檔案內容,資料夾的日期卻都會變化,看上去與前面的認知矛盾。想了下,更新時用到的文字編輯器不用,問題是否可能出在vim上(我每次都使用它來更新檔案),下面看一下。
大家注意這裡面webserver日期與webserver/record.md日期的變化和ls -i的輸出結果的變化。
ysx@localhost:~/trash/ehbio$ ls -ltr total 0 drwxr-xr-x. 2 ysx ehbio 6 Jan 7 10:48 train drwxr-xr-x. 2 ysx ehbio 6 Jan 7 10:48 bioinfoservice drwxr-xr-x. 2 ysx ehbio 22 Jan 7 10:49 webserver ysx@localhost:~/trash/ehbio$ ls -ltr webserver/record.md -rw-r--r--. 1 ysx ehbio 212 Jan 7 11:03 webserver/record.md # -i可檢視檔案的inode ysx@localhost:~/trash/ehbio$ ls -i webserver/record.md 104480 webserver/record.md ysx@localhost:~/trash/ehbio$ vim webserver/record.md ysx@localhost:~/trash/ehbio$ ls -ltr webserver/record.md -rw-r--r--. 1 ysx ehbio 215 Jan 7 11:06 webserver/record.md ysx@localhost:~/trash/ehbio$ ls -ltr total 0 drwxr-xr-x. 2 ysx ehbio 6 Jan 7 10:48 train drwxr-xr-x. 2 ysx ehbio 6 Jan 7 10:48 bioinfoservice drwxr-xr-x. 2 ysx ehbio 22 Jan 7 11:06 webserver # -i可檢視檔案的inode ysx@localhost:~/trash/ehbio$ ls -i webserver/record.md 2465326 webserver/record.md
確實是vim改變了檔案的inode,也就是說在我們使用vim修改檔案時,vim為了避免中間出現意外,先重新命名了修改前的檔案,修改後的檔案以之前檔案的名字儲存,看上去我們做的是原位修改, 實際上是換了新的檔案,所以inode發生了變化。當然這個操作可以自己配置修改。
在另外一個情況下,如果我們對資料夾無可寫許可權,但對該資料夾內的檔案有可寫許可權時,vim自動呼叫另外一個方式修改檔案,先把檔案做個備份,然後原位修改。這時資料夾的時間戳就不會變了。
ysx@localhost:~/trash/ehbio$ chmod a-w webserver/ ysx@localhost:~/trash/ehbio$ ls -ltr total 0 drwxr-xr-x. 2 ysx ehbio 6 Jan 7 10:48 train drwxr-xr-x. 2 ysx ehbio 6 Jan 7 10:48 bioinfoservice dr-xr-xr-x. 2 ysx ehbio 22 Jan 7 11:06 webserver # 寫不進去,無許可權 ysx@localhost:~/trash/ehbio$ vim webserver/a # 可以修改, 但沒有新檔案產生 ysx@localhost:~/trash/ehbio$ vim webserver/record.md ysx@localhost:~/trash/ehbio$ ls -ltr webserver/record.md -rw-r--r--. 1 ysx ehbio 249 Jan 7 11:15 webserver/record.md # 資料夾時間戳未變 ysx@localhost:~/trash/ehbio$ ls -ltr total 0 drwxr-xr-x. 2 ysx ehbio 6 Jan 7 10:48 train drwxr-xr-x. 2 ysx ehbio 6 Jan 7 10:48 bioinfoservice dr-xr-xr-x. 2 ysx ehbio 22 Jan 7 11:06 webserver # 檔案inode也未變 ysx@localhost:~/trash/ehbio$ ls -i webserver/record.md 2465326 webserver/record.md
設計軟體時,需要考慮的問題和情況還是挺多的。看上去挺簡單的事情,裡面說不準有多少”坑”需要注意,寫網站這樣,寫工具也這樣,作分析也是這樣。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2904395/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux刪除資料夾下所有檔案命令是什麼 linux刪除資料夾下內所有內容怎麼操作Linux
- Linux shell 根據時間批量刪除指定資料夾下的檔案Linux
- Android檔案或資料夾內容改變監聽器(FileObserver)AndroidServer
- linux批量替換指定資料夾中所有檔案的指定內容Linux
- linux之touch命令修改檔案的時間戳Linux時間戳
- linux 監控檔案內容變化Linux
- Linux統計某資料夾下檔案、資料夾的個數Linux
- 引用js、css檔案時加時間戳JSCSS時間戳
- Python批量修改資料夾內所有json檔案中部分內容PythonJSON
- 刪除指定資料夾的檔案內容的sh指令碼指令碼
- c++ 獲取檔案建立時間、修改時間、訪問時間、檔案內容長度C++
- linux監控資料夾內的檔案數量Linux
- linux下批量修改檔案及資料夾所Linux
- Python求取資料夾內的檔案數量、子資料夾內的檔案數量Python
- Linux下修改檔案建立時間(修改檔案更改時間)Linux
- Linux下清空檔案內容的方法Linux
- Mongoose無法更新時間戳Go時間戳
- PostgreSQL自動更新時間戳SQL時間戳
- 【Linux】linux下刪除/清空資料夾/檔案命令Linux
- TF卡資料夾右擊檢視屬性時它說“資料夾變檔案”
- find 按檔案修改時間查詢檔案及find空資料夾
- bootstrap3.x內less資料夾的檔案內容及功能分析boot
- [grep] grep -R -l 遞迴過濾資料夾中檔案內容遞迴
- python中按照資料夾中檔案的排列順序讀取檔案內容Python
- Win2000定時刪除資料夾內所有子資料夾和檔案
- linux 下 對檔案內容的查詢Linux
- linux下批次替換檔案內容(摘)Linux
- WINDOWS資料夾內容簡介Windows
- 獲取資料夾及其子資料夾下的所有檔案
- Linux檔案內容操作Linux
- LINUX下查詢大檔案及大的資料夾Linux
- 如何為Oracle匯出檔案加上時間戳Oracle時間戳
- SDWebImage支援URL不變時更新圖片內容Web
- vba之小功能記錄--根據內容,另存檔案到指定資料夾
- mysql資料庫時間戳函式MySql資料庫時間戳函式
- linux下使用find xargs grep查詢檔案及檔案內容Linux
- Linux加密壓縮檔案/資料夾Linux加密
- linux 檔案、資料夾許可權Linux