阅读量:2
Linux 下 Node.js 文件系统操作指南
一 核心模块与调用方式
- 使用内置模块 fs 完成文件与目录的读写、删除、移动、权限等操作;同时配合 path 处理跨平台路径、os 获取系统相关常量(如换行符)。
- 三种调用风格:
- 回调风格:
fs.readFile(path, 'utf8', callback) - Promise 风格:
fs.promises.readFile(path, 'utf8') - 同步风格:
fs.readFileSync(path, 'utf8')(会阻塞事件循环,适合脚本或启动阶段)
- 回调风格:
- 常用 API 一览:
- 读取:
fs.readFile / readFileSync - 写入:
fs.writeFile / writeFileSync(默认覆盖) - 追加:
fs.appendFile / appendFileSync - 复制:
fs.copyFile - 目录:
fs.mkdir / readdir / rmdir - 删除:
fs.unlink(文件)、fs.rm/fs.rmdir(目录,支持递归) - 重命名/移动:
fs.rename - 状态:
fs.stat / statSync
- 读取:
- 小提示:Linux 路径分隔符为 /,跨平台请用 path.join 拼路径;换行符可用 os.EOL 适配。
二 常用操作代码示例
// 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);
}
- 说明:流与逐行读取可显著降低内存占用,提高处理大文件时的稳定性。
四 权限与跨平台注意
- 权限与模式
- Linux 使用基于权限的访问控制;设置文件权限可用
fs.writeFile的 mode 选项(如 0o755、0o644),或使用fs.chmod/chmodSync。避免使用过宽权限(如 0777)存放敏感文件。
- Linux 使用基于权限的访问控制;设置文件权限可用
- 路径与换行
- 路径分隔符:Linux 为 /;跨平台请用 path.join、path.resolve。
- 换行符:Linux 为 \n;跨平台可用 os.EOL 统一换行。
- 编码与特殊字符
- 默认读取为 Buffer(未指定 encoding 时);常用编码为 utf8。如需处理 GBK 等非 UTF-8 文本,可使用 iconv-lite 等库进行转码。
以上就是关于“Linux下Node.js的文件系统如何操作”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm