[英]How can I list the files in a directory that have zero size/length in the Linux terminal?
[英]how can i show the size of files in /proc? it should not be size zero
從下面的消息中,我們知道文件/ proc / sys / net / ipv4 / ip_forward中有兩個字符,但為什么ls只是顯示這個文件的大小為零?
我知道這不是磁盤上的文件,而是內存中的文件,所以有沒有命令可以看到/ proc中文件的實際大小?
root@OpenWrt:/proc/sys/net/ipv4# cat ip_forward | wc -c
2
root@OpenWrt:/proc/sys/net/ipv4# ls -l ip_forward
-rw-r--r-- 1 root root 0 Sep 3 00:20 ip_forward
root@OpenWrt:/proc/sys/net/ipv4# pwd
/proc/sys/net/ipv4
那些不是磁盤上的真正文件(正如你所提到的)但它們也不是內存中的文件 - / proc中的名稱對應於對操作系統中正在運行的內核的調用,並且內容是動態生成的。
系統在不生成文件的情況下不知道文件的大小,但如果您兩次讀取“文件”,則無法保證您獲得相同的數據,因為系統可能已更改。
您可能正在尋找程序sysctl -a 。
/ proc中的東西不是真正的文件。 在大多數情況下,它們甚至不是內存中的文件。 當您訪問這些文件時,proc文件系統驅動程序執行系統調用,該系統調用獲取適合該文件的數據,然后將其格式化以進行輸出。 這通常是動態構建的動態數據。 一個例子是/ proc / net / arp,它包含當前的ARP緩存。
獲取這些東西的大小只能通過格式化整個輸出來完成,因此在列出文件時不會這樣做。 如果你想要尺寸,請像你一樣使用wc -c
。
/proc/
filesystem是由內核維護的“錯覺”,它不會給出(大部分)其偽文件的大小(因為計算“真實”大小通常會涉及構建整個文本偽文件的()內容),並期望來自/proc/
大多數[偽]文本文件在合理大小(例如1K)的塊中從第一個到最后一個字節(即直到EOF)依次讀取。 有關詳細信息,請參見proc(5)手冊頁。
因此,無法在單個系統調用中獲取真實大小(某些文件,如/proc/self/maps
或/proc/sys/net/ipv4/ip_forward
)(如stat(2) ,因為它會給出一個大小如stat(1)或ls(1)命令所報告的,為0。 閱讀這些文本文件的典型方法可能是
FILE* f = fopen("/proc/self/maps", "r");
// or some other textual /proc file,
// e.g. /proc/sys/net/ipv4/ip_forward
if (f)
{
do {
// you could use readline instead of fgets
char line[256];
memset (line, 0, sizeof(line));
if (NULL == fgets(line, sizeof(line), f))
break;
// do something with line, for example:
fputs(line, stdout);
} while (!feof (f));
fclose (f);
}
當然,一些文件(例如/proc/self/cmdline
)被記錄為可能包含NUL字節。 你需要一些他們的fread
。
它不是內存中的文件,它是用戶和內核之間的接口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.