你為什么無法創建一個文件
你好,我是 somenzz,可以叫我征哥,今天看到了一個很好的面試問題,分享給你。
我認為好的面試題,至少符合兩點:一是開放性問題,沒有標準答案;二是它與具體的技術棧和經驗都無關,卻能看出一個人的思維過程和技術水平。
“你為什么無法創建一個文件”,就是好問題,而“如何在 NodeJS 中執行 XYZ”或“如何配置 NGINX”,就不是一個好問題。
現在,來梳理一下這個問題。
首先這是一個好問題,好問題沒有標準答案,下面的回答也僅供參考。
1.磁盤空間不足
這可能是最簡單的答案之一,文件需要保存在磁盤上,無論服務器是 Windows 還是 Linux,無論是本地創建還是遠程創建,只要磁盤空間不足,那一定是無法寫入文件的。問題的表現通常會看到關鍵字「Insufficient disk space」排除這個原因很簡單,查看磁盤空間即可:
Windows: Wmic logicaldisk。
Linux: df -h。
2.權限問題
最常見的是 Linux 普通用戶在不屬于自己家的目錄下創建文件會報錯,這就是權限問題,Linux 運行一個簡單的ls -l 可以看到文件/目錄的權限。
ftp、sftp 服務器也會有權限管理,如果無法解決,需要查看服務器的權限配置。
問題的表現通常會有關鍵字「permission」。
解決辦法,配置權限,不建議粗暴的 sudo chmod 777。
3.CPU、內存資源耗盡
每個命令通常都會在自己的進程中執行。每個進程都必須有一些資源,并使用一定級別的 CPU 和內存。創建文件同樣消耗 CPU 和內存,資源不足時,創建文件的進程長時間處于等待狀態,此時也是無法創建文件的,這種情況的現象是卡住,而不是報錯。
4.分區問題
分區之后未格式化,或者分區配置錯誤,此時也是無法寫入文件的。
5.網絡問題
如果文件系統依賴于網絡,網絡可能導致服務器之間斷開連接,此時也無法寫入文件,此外諸如防火墻、安全組、NACL、子網問題,也可能導致寫入或讀取文件的問題。
6.Linux PID 耗盡
一個操作系統的進行數量是有限的,PID 就是 process id,耗盡就表示進程太多了,無法創建新的進程。我曾經就寫了一個 shell 腳本,因為文件名的問題,導致了自己執行自己,結果很快 PID 就不足了,操作系統不接受任何新的操作。
7.Linux Inode 耗盡
一個操作系統的文件數量也是有限的,超過了最大的文件數量,就無法再創建文件。Inode 存儲了一個文件或目錄的元數據,Inode 的數量很難耗盡,但并不意味著不可能。Linux 運行 df -i 可以查看創建的最大 Inode 數量、當前使用的 Inode 數量和剩余 Inode 的數量。
8.斷電
這個原因在自己的臺式電腦上也不是沒有出現過,哈哈。