Linux 下 Node.js 文件系统操作指南
一 核心模块与调用方式
fs.readFile(path, 'utf8', callback)fs.promises.readFile(path, 'utf8')fs.readFileSync(path, 'utf8')(会阻塞事件循环,适合脚本或启动阶段)fs.readFile / readFileSyncfs.writeFile / writeFileSync(默认覆盖)fs.appendFile / appendFileSyncfs.copyFilefs.mkdir / readdir / rmdirfs.unlink(文件)、fs.rm / fs.rmdir(目录,支持递归)fs.renamefs.stat / statSync二 常用操作代码示例
// 1) 读取
const fs = require('fs').promises;
const path = require('path');
const os = require('os');
const file = path.join(__dirname, 'data.txt');
const content = await fs.readFile(file, 'utf8');
console.log(content);
// 2) 写入(覆盖)与追加
await fs.writeFile(file, '第一行\n', { mode: 0o644 }); // 权限示例:0644
await fs.appendFile(file, `追加行 ${os.EOL}`, 'utf8');
// 3) 复制
await fs.copyFile(file, path.join(__dirname, 'data.bak.txt'));
// 4) 目录:创建多级、遍历
await fs.mkdir(path.join(__dirname, 'logs'), { recursive: true });
const files = await fs.readdir(__dirname);
console.log(files);
// 5) 重命名/移动
await fs.rename(
path.join(__dirname, 'data.bak.txt'),
path.join(__dirname, 'archive', 'data.txt')
);
// 6) 删除:文件与目录(递归)
await fs.unlink(path.join(__dirname, 'archive', 'data.txt'));
await fs.rm('logs', { recursive: true, force: true }); // 递归删除目录
// 7) 状态与类型判断
const st = await fs.stat(file);
console.log(st.isFile(), st.isDirectory());
writeFile 默认覆盖;需要追加请用 appendFile。fs.rm(..., { recursive: true }) 可递归删除目录;旧环境可用 fs.rmdir 配合遍历或第三方库。mode: 0o644 为常见文件权限示例(Linux 权限位)。三 大文件与性能建议
const fs = require('fs');
const read = fs.createReadStream('big.log', 'utf8');
const write = fs.createWriteStream('big.log.bak');
read.on('error', err => console.error('read error', err));
write.on('error', err => console.error('write error', err));
write.on('finish', () => console.log('copy done'));
read.pipe(write); // 通过管道高效传输
const fs = require('fs');
const readline = require('readline');
const rl = readline.createInterface({
input: fs.createReadStream('big.log', 'utf8'),
crlfDelay: Infinity
});
for await (const line of rl) {
// 处理每一行
console.log(line);
}
四 权限与跨平台注意
fs.writeFile 的 mode 选项(如 0o755、0o644),或使用 fs.chmod / chmodSync。避免使用过宽权限(如 0777)存放敏感文件。