歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 其實,文件也可以truncate

其實,文件也可以truncate

日期:2017/2/27 15:57:50   编辑:Linux教程
熟悉數據庫的朋友們都知道,大多數數據庫都有個truncate指令:truncate table xxx可以把xxx表裡的所有數據都刪掉,但是保留表結構。其實,在有任何數據庫之前,UNIX系統裡就有了truncate這個命令了,當然後面的*nix裡都保留了這個。可以想像,系統裡的truncate命令的操作對象肯定是文件,而且此命令不僅能把文件的數據刪成0字節,還可以縮減(甚至擴大)文件至指定的大小(通過 -s 選項指定文件大小值),這對於那種日志頭部有些不想刪除的關鍵信息,但後面的部分又很多很雜的情況下很有用。對於普通的日志文件,我們要清理的時候通常可以執行 > log 來清除文件的內容(這樣,log文件會變成0字節),但是如果清理的同時想保留原始日志的前面4K的信息,不用truncate就會很麻煩了。

truncate的用法還是通過實戰來解釋吧,如下:
以下是引用片段:
lily@LLY ~$ echo -n 1234567 > txt
lily@LLY ~$ cat txt
1234567lily@LLY ~$ 
lily@LLY ~$ truncate -s 4 txt
lily@LLY ~$ cat txt
1234lily@LLY ~$ 
lily@LLY ~$ ls -l txt
-rw-r--r-- 1 lily lily 4 10月 24 16:54 txt
lily@LLY ~$ truncate -s 1M txt
lily@LLY ~$ ls -l txt
-rw-r--r-- 1 lily lily 1048576 10月 24 17:17 txt
lily@LLY ~$ du txt
4    txt
lily@LLY ~$ wc -c txt
1048576 txt
這裡還可以看到一個“奇怪”的現象,本來已經縮至4字節的文件,把它擴展成1M以後,ls 和 wc 的結果顯示大小確實是1M,但是 du 的結果卻發現大小還是4字節。這也是要注意的地方之一,這種文件稱為“空洞文件”,也就是說,文件的部分內容並沒有實際存在於硬盤上(即沒有分配對應的Linux/1672.html' target='_blank'>inode),只是“聲稱”有1M的大小而已。對於不存在於硬盤上的那部分字節,如果去讀的話,也是不會報錯的,會讀到全0的數據。

這也從另一個方面反映出ls等命令默認顯示的是文件“聲稱”的大小,而du (disk use)默認顯示的是真正的磁盤占用。這裡是我以前的另外一個例子。
Copyright © Linux教程網 All Rights Reserved