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