我的软件环境:
VirtualBox虚拟机:Ubuntu 22
宿主机:Windows 10
在Ubuntu 22虚拟机中创建符号链接时,可能的报错有以下几种:
第一种,在运行npm install esbuild时报错:
Error: EPERM: operation not permitted, symlink '../esbuild/bin/esbuild' -> '/var/www/reverb.test/node_modules/.bin/esbuild'
第二种,执行PHP代码创建符号链接时报错:
symlink(): Operation not permitted
第三种,运行ln命令时报错:
ln: failed to create symbolic link 'xxx.so.0': Read-only file system
第四种,运行cp命令时报错:
cannot create symbolic link `xxxx':Read-only file system
第五种,运行cp命令时报错:
cannot create symbolic link `xxxx': Protocol error
原因是VirtualBox从安全角度出发,限制了软链接(符号链接)的创建。如果想正常使用符号链接,需要对虚拟机设置 VBoxInternal2/SharedFoldersEnableSymlinksCreate/<share_folder_name> 这个 extradata。这里顺带一提,对于 vagrant,这个选项只要你运行 vagrant up之后这个选项便会自动设置好。可以使用 VboxManage设置这个 extradata ,这个工具在 Windows 下是和 VirtualBox 图形界面在一个相同目录的。以下是详细步骤:
1 关闭 VirtualBox。
2 以管理员身份打开命令行窗口,cd到VirtualBox安装目录(例如cd C:\Programs\Oracle\VirtualBox),执行如下命令:
VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1
其中:
YOURVMNAME
填写ubuntu 虚拟机系统的名称
YOURSHAREFOLDERNAME
填写共享文件夹的名称,注意这个共享文件夹名称是你在 VirtualBox 中设置共享时对应的“共享文件夹名称”一栏的内容,不是共享文件夹的路径或者文件夹名称。
3 以管理员身份运行VirtualBox
参考
https://blog.csdn.net/tekenuo/article/details/82386552
https://tty.moe/blog/virtualbox-symlink-windows