本
文
摘
要
今天看到了一个很好的面试问题,分享给你。
我认为好的面试题,至少符合两点:一是开放性问题,没有标准答案;二是它与具体的技术栈和经验都无关,却能看出一个人的思维过程和技术水平。
“你为什么无法创建一个文件”,就是好问题,而“如何在 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、断电
这个原因在自己的台式电脑上也不是没有出现过,哈哈。