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
- linux 監控檔案內容變化Linux
- 【Linux】linux下刪除/清空資料夾/檔案命令Linux
- linux監控資料夾內的檔案數量Linux
- Python求取資料夾內的檔案數量、子資料夾內的檔案數量Python
- 引用js、css檔案時加時間戳JSCSS時間戳
- c++ 獲取檔案建立時間、修改時間、訪問時間、檔案內容長度C++
- python中按照資料夾中檔案的排列順序讀取檔案內容Python
- TF卡資料夾右擊檢視屬性時它說“資料夾變檔案”
- LINUX下查詢大檔案及大的資料夾Linux
- Linux加密壓縮檔案/資料夾Linux加密
- linux 檔案、資料夾許可權Linux
- PostgreSQL自動更新時間戳SQL時間戳
- Mongoose無法更新時間戳Go時間戳
- Linux技巧--檢視檔案及資料夾佔用空間大小Linux
- Linux下刪除指定資料夾下指定字尾名的檔案Linux
- Linux中隱藏檔案與資料夾Linux
- windows cmd拉取linux資料夾下的檔案,並解壓WindowsLinux
- 工作經驗: linux 壓縮當前資料夾下所有檔案Linux
- linux-批次修改檔案內容Linux
- Linux給檔案內容每行指定字元資料脫敏替換Linux字元
- java檔案相關(檔案追加內容、檔案內容清空、檔案內容讀取)Java
- python 如何刪除資料夾下的所有檔案和子資料夾?Python
- MySQL 資料庫技巧:批次更新隨機生成的時間戳欄位MySql資料庫隨機時間戳
- 批處理bat 批次更改一個資料夾下所有檔名的部分內容.BAT
- SDWebImage支援URL不變時更新圖片內容Web
- 畸形檔案 資料夾
- 將檔案轉移到一個資料夾內batBAT
- window下解壓zip和rar檔案以及copy獲取時間段內資料
- Linux 檢視檔案內容——bat 命令LinuxBAT
- Android 播放raw資料夾下音訊檔案Android音訊
- matlab遍歷資料夾下的所有檔案Matlab
- 3576.02空間指令碼brain.script,02檔案, 02“XX_brain”資料夾, 01空間資料夾, 04TB檔案指令碼AI
- linux沒熟練內容Linux
- 【OS_Linux】刪除日誌檔案中某個時間節點之前的內容Linux
- 查詢某資料夾下所有子資料夾內的py檔案-3一行程式碼搞定行程
- Json檔案轉換為Excel檔案!涉及讀檔案,時間戳轉化,寫文件JSONExcel時間戳