Appearance
WSL 中编译报错“Cannot write file”
在 WSL (Windows Subsystem for Linux) 中,若模板文件是 Windows 经手的,WSL 中的编译器可能缺少相关使用权限,导致以下错误,无法编译。
log
No existing .aux file, so I'll make a simple one, and require run of *latex.
Cannot write file 'main.aux'Windows 经手具体有这些可能:
- 在 Windows 文件系统下通过 WSL 打开解压后的模板文件
- 将解压得到的文件直接通过 Windows 文件管理器拷入到 WSL 的原生文件系统
- ……
解决方案:依次检查文件的存放位置和读写权限,相应修改。详细操作方法如下。
检查文件存放的位置
确保您的文件是保存在 WSL 的原生文件系统中的(如/home/用户名/某目录下)。
为什么要这么做?
在 WSL 中, Windows 上的硬盘分区都会默认挂载。例如您的C:盘会默认挂载到WSL的/mnt/c/目录下。
因此,如果你是直接通过 WSL 打开位于 Windows 文件系统上的模板文件,编辑器是可以正常读取相应内容的,但编译器可能因为没有正确的写入权限导致无法进行编译。
如果您的文件确实是保存在 Windows 系统上的,请进入 WSL 系统下重新下载模板文件到 WSL 的系统目录下。您也可以直接通过 Windows 文件管理器将文件复制到 WSL 原生文件系统中,并进行下一步操作。
检查文件的读写权限
当您的文件都是保存在 WSL 原生文件系统中但仍无法编译时,您应当使用如下命令检查权限:
bash
ls -la /模板存储目录/如果您的文件是因为读写权限问题导致的无法编译,使用如下命令为所有文件添加正确的读写权限:
bash
chmod -R u+rw /模板存储目录/如果您是直接通过 Windows 文件管理器将文件复制到 WSL 原生文件系统中的,您应该会发现所有文件和目录的拥有者都是 root 用户,因此,您需要首先将所有文件和目录的拥有者改为您自己,并为所有文件加上读写权限,使用如下命令:
bash
# 递归地修改所有文件目录的拥有者为自己
sudo chown -R 您的用户名:您的用户组 /模板存储目录/
# 同时确保有正确的写入权限
chmod -R u+rw /模板存储目录/