inode 或i節點是指對文件的索引。如一個系統,所有文件是放在磁盤或flash上,就要編個目錄來說明每個文件在什么地方,有什么屬性,及大小等。就像書本的目錄一樣,便於查找和管理。這目錄是操作系統需要的,用來找文件或叫管理文件。許多操作系統都用到這個概念,如linux, 某些嵌入式文件系統等。當然,對某個系統來說,有許多i節點。所以對i節點本身也是要進行管理的。
在linux中,內核通過inode來找到每個文件,但一個文件可以被許多用戶同時打開或一個用戶同時打開多次。這就有一個問題,如何管理文件的當前位移量,因為可能每個用戶打開文件后進行的操作都不一樣,這樣文件位移量也不同,當然還有其他的一些問題。所以linux又搞了一個文件描述符(file descriptor)這個東西,來分別為每一個用戶服務。每個用戶每次打開一個文件,就產生一個文件描述符,多次打開就產生多個文件描述符,一一對應,不管是同一個用戶,還是多個用戶。該文件描述符就記錄了當前打開的文件的偏移量等數據。所以一個i節點可以有0個或多個文件描述符。多個文件描述符可以對應一個i節點。
“too manay open files” 錯誤與文件描述符有關
系統級限制:sysctl命令和proc文件系統中查看到的數值是一樣的,這屬於系統級限制,它是限制所有用戶打開文件描述符的總和
查看系統限制命令:
sysctl -a | grep -i file-max --color
cat /proc/sys/fs/file-max
用戶級限制:ulimit命令看到的是用戶級的最大文件描述符限制,也就是說每一個用戶登錄后執行的程序占用文件描述符的總數不能超過這個限制
查看用戶限制命令:
ulimit -n
用戶級修改在文件 /etc/security/limits.conf
文件描述符理解:
https://blog.csdn.net/cywosp/article/details/38965239
https://blog.csdn.net/kumu_linux/article/details/7877770