Я установил пакет snap в пакете Ubuntu 18.04 и хочу отредактировать один из его файлов, используя учетную запись root. Сначала я переключился на root с помощью su
, но затем, когда я открыл файл в nano, он мне сказал:
[ File '/snap/phpstorm/36/bin/phpstorm64.vmoptions' is unwritable ]
Затем я попробовал это:
root@elahe-VPCEA31FX:/home/elahe# sudoedit /snap/phpstorm/36/bin/phpstorm64.vmoptions
после выполнения вышеуказанной команды файл открылся в nano, но после внесения изменений и сохранения с помощью Ctrl+ Oи после выхода с помощью Ctrl+ xя получил следующее сообщение:
sudoedit: unable to write to /snap/phpstorm/36/bin/phpstorm64.vmoptions: Read-only file system
sudoedit: contents of edit session left in /var/tmp/phpstorm64XXRCQzZi.vmoptions
Я даже пробовал изменить права доступа к файлу с помощью этой команды:
root@elahe-VPCEA31FX:/home/elahe# chmod 755 /snap/phpstorm/36/bin/phpstorm64.vmoptions
и получил это:
chmod: changing permissions of '/snap/phpstorm/36/bin/phpstorm64.vmoptions': Read-only file system
Действительно удивительно, что пользователь root не может редактировать файл! Это баг?
решение1
Файлы snap монтируются только для чтения (ro), и вы можете проверить это с помощью команды mount.
mount |grep snap
/var/lib/snapd/snaps/vlc_158.snap on /snap/vlc/158 type squashfs (ro,nodev,relatime,x-gdu.hide)
/var/lib/snapd/snaps/core_4486.snap on /snap/core/4486 type squashfs (ro,nodev,relatime,x-gdu.hide)
/var/lib/snapd/snaps/core_4571.snap on /snap/core/4571 type squashfs (ro,nodev,relatime,x-gdu.hide)
/var/lib/snapd/snaps/vlc_365.snap on /snap/vlc/365 type squashfs (ro,nodev,relatime,x-gdu.hide)
/var/lib/snapd/snaps/vlc_190.snap on /snap/vlc/190 type squashfs (ro,nodev,relatime,x-gdu.hide)
/var/lib/snapd/snaps/core_4650.snap on /snap/core/4650 type squashfs (ro,nodev,relatime,x-gdu.hide)
Чтобы изменить файлы в squashfs, вам нужно распаковать его, изменить файлы и затем пересоздать файл squashfs. Например, если я хочу изменить файлы в/var/lib/snapd/snaps/vlc_365.snap
sudo umount /snap/vlc/365
sudo unsquashfs /var/lib/snapd/snaps/vlc_365.snap
Измените все, что захотите squashfs-root
(туда распаковываются все файлы), а затем запакуйте заново.
sudo mksquashfs squashfs-root vlc_365.snap
Скопируйте его обратно в исходное местоположение и перемонтируйте.
sudo cp vlc_365.snap /var/lib/snapd/snaps/vlc_365.snap
sudo mount -t squashfs -o ro,nodev,relatime,x-gdu.hide /var/lib/snapd/snaps/vlc_365.snap /snap/vlc/365