CentOS主机服务器如何创建名为"0"的文件(含Node.js方法)
问题原因排查与解决建议
首先明确:ext3/ext4等所有标准Linux文件系统中,0没有任何特殊保留语义,完全支持创建名为0的普通文件,你遇到的创建文件自动变目录的问题和文件系统本身无关,均为上层逻辑拦截导致,可按以下优先级排查:
- 排查常驻进程规则:绝大多数这类问题来自VPS预装的运维面板、WAF防护、防篡改程序、自动同步脚本,这类程序常将单数字命名的
0/1等路径识别为缓存目录、站点分卷目录,一旦检测到对应路径下是普通文件就会自动删除并重建为目录。可先临时关闭面板防护、第三方运维工具后,再执行touch 0验证。 - 排查挂载规则:执行
df -T .查看当前操作目录所属的文件系统类型,如果当前目录属于overlayfs(Docker/容器挂载目录)、tmpfs、网络共享目录而非本地ext3分区,需排查对应挂载层的路径映射规则,这类场景下经常会有特殊路径重写逻辑。 - 排查Shell别名:执行
alias touch、alias cp查看是否存在自定义命令别名,将创建单数字名文件的操作重定向为创建目录逻辑,可执行unalias -a临时清空所有别名后重试创建操作。 - 排查恶意程序:部分挖矿、挂马类恶意脚本会持续监控
0/1这类数字名路径,强制将其创建为目录存放恶意payload,可安装inotify-tools后执行inotifywait -m .监控当前目录的文件操作事件,定位到删除文件、创建目录的异常进程后查杀即可。
Node.js 环境创建名为
0的文件的方法 排除上述系统层拦截问题后,直接使用Node.js原生fs模块即可正常创建,以下是可直接运行的示例代码:
- 同步创建方式
const fs = require('fs'); // 创建空的名为0的普通文件 fs.writeFileSync('./0', ''); // 校验文件类型 const fileStat = fs.statSync('./0'); console.log(fileStat.isFile() ? '创建成功:0为普通文件' : '创建异常:0不是普通文件');
- 异步创建方式
const fs = require('fs/promises'); async function createZeroFile() { // 使用w模式打开文件即可创建空文件,不存在则自动新建 const fileHandle = await fs.open('./0', 'w'); await fileHandle.close(); const fileStat = await fs.stat('./0'); console.log(fileStat.isFile()); } createZeroFile();
注意:如果运行上述代码后依然生成目录,可确定是系统层拦截导致,和Node.js运行时、文件系统本身无关,优先按前面的排查项定位拦截源。
内容的提问来源于stack exchange,提问作者Liki Crus
相关产品推荐
相关产品推荐

