Вопрос или проблема
На недавно установленной системе fedora 25 (uname -a
→ Linux [host] 4.10.6-200.fc25.x86_64 #1 SMP Mon Mar 27 14:06:23 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
; используя GNU Emacs 25.1.1 (x86_64-redhat-linux-gnu, GTK+ Version 3.22.4) от 2016-12-15
согласно самой первой странице emacs), я не могу отменить защиту записи своих файлов в emacs.
Вот как это происходит:
(a) Я открываю свой файл с защитой от записи (ls -l
→ -r--------. 1 me me 92996 Apr 10 20:44 myfile
),
(b) Я отключаю защиту от записи, чтобы редактировать (C-x C-q)
(c) Я редактирую файл
(d) Я хочу сохранить (C-x C-s)
(e) Появляется сообщение: “Файл myfile
защищен от записи; попробовать сохранить все равно? (да или нет)”
(f) Я отвечаю “да”, нажимаю enter
(g) Появляется сообщение: “Открытие выходного файла: Доступ запрещён, [полный путь]/myfile”
Каталог не защищён от записи.
Я всегда мог редактировать и сохранять свои файлы с защитой от записи на других системах (opensuse в последние годы).
Отключение режима selinux на системе не помогает. Пожалуйста, смотрите больше информации в комментариях.
Я не могу понять, что может быть не так.
C-x C-q
отключает режим только для буфера, а не для его файла.
Цель C-x C-q
– предотвратить случайные изменения содержимого буфера (независимо от того, является ли это буфером файла).
Чтобы изменить разрешения файла, используйте одну из следующих команд:
- Команда
chmod
- Dired, с
M
(командаdired-do-chmod
)
Используйте C-h f
, чтобы увидеть документацию каждой команды:
chmod
является псевдонимом дляset-file-modes
вsubr.el
.
(chmod FILENAME MODE)
Установить режимы битов файла с именем
FILENAME
вMODE
(целое число).
Используются только 12 низших битовMODE
.В интерактивном режиме биты режима считываются с помощью
read-file-modes
, который принимает
символическую нотацию, как командаchmod
из GNU Coreutils.
dired-do-chmod
является интерактивной автозагружаемой скомпилированной функцией Lisp в
dired-aux.el
.Она связана с
M
,<menu-bar> <operate> <chmod>
.
(dired-do-chmod &optional ARG)
Изменяет режим выделенных (или следующих
ARG
) файлов.
Символические режимы, такие какg+w
, разрешены.
НажмитеM-n
, чтобы получить атрибуты файла по указателю
в минибуфер.
Спасибо всем за внимание.
Вопрос стал молчаливым вчера, потому что, сдавшись, я в итоге установил другую версию linux, где emacs (там, emacs v24) ведёт себя, как обычно.
Хотя моя первоначальная проблема не решена, я всё равно рассматриваю следующие подозрения на её причину:
Подозрение 1: emacs 25, версия, с которой у меня была проблема, может вести себя иначе, чем её предшественник в этом отношении. Намёк на другое поведение в целом заключается в том, что, например, она не принимает конфигурационный файл версии 24 .emacs
Подозрение 2: некоторые настройки, специфичные для файловой системы или дистрибутива.
Ни одно из двух подозрений не было проверено, подтверждено или опровергнуто.
Ответ на предыдущий ответ (по chmod и т.д.): спасибо за ваше мнение, но боюсь, что вы неправильно поняли мой вопрос (возможно, я не был достаточно ясен с самого начала). Моя проблема заключалась не в том, как emacs может изменить разрешения файла, а: почему в моём случае он отказался перезаписать защищённый файл, даже когда пользователь запросил такое действие? (Действительно, C-x C-q изменяет только редактируемость буфера, редактируемость, которая устанавливается по умолчанию в зависимости от разрешений и/или типа открытого файла — это была моя ошибка, что я использовал неверный термин для обозначения эффектов этой комбинации клавиш.)
Ответ или решение
Проблема, с которой вы столкнулись при использовании Emacs на Fedora 25, связана с попыткой сохранить изменения в файле, защищённом от записи. Давайте разберем все аспекты этой ситуации.
1. Понимание механизма защиты от записи
На уровне операционной системы, файл может иметь атрибуты, которые запрещают запись. В вашем случае, вы указали, что файл myfile
имеет разрешения -r--------
, что означает, что только владелец может читать файл, но не может его изменять. Это базовая защита на уровне файловой системы.
2. Работа с Emacs
При открытии файла в Emacs, команда C-x C-q
переключает буфер в режим редактирования. Однако это не изменяет файловые разрешения. Если файл недоступен для записи, Emacs не сможет сохранить изменения, даже если пользователем было дано согласие на перезапись с помощью команды "да".
3. Варианты решения проблемы
Для того чтобы исправить ситуацию, необходимо изменить разрешения на файл. Это можно сделать несколькими способами:
-
Использование команды
chmod
:
Вы можете вручную изменить права на файл с помощью терминала. Команда будет выглядеть следующим образом:chmod u+w myfile
Это добавит право на запись для владельца файла.
-
Используйте команду Emacs для изменения разрешений:
Emacs предоставляет возможность изменять права на файлы через Dired. Для этого вы можете открыть Dired с помощью командыC-x d
и перейти к необходимому файлу, а затем нажатьM
для выполнения командыdired-do-chmod
.
4. Альтернативные предположения
С учетом ваших замечаний, можно рассмотреть несколько гипотез о том, почему Emacs на вашем оборудовании ведет себя иначе:
-
Версия Emacs: Версия Emacs 25.1.1 может отличаться в поведении от предыдущих версий. Возможно, были изменения в обработке прав доступа к файлам. Попробуйте также посмотреть на релизные заметки и известные проблемы данной версии.
-
Настройки системы: Некоторые параметры безопасности, такие как SELinux, могут препятствовать изменению файловых прав. Вы уже упомянули, что отключение SELinux не решило проблему, поэтому стоит проверить другие настройки системы, которые могут повлиять на поведение Emacs.
5. Заключение
Вернуться к исходной проблеме: Emacs не может сохранить изменения, потому что файл по-прежнему защищен от записи. Чтобы разрешить эту ситуацию, следует устанавливать необходимые права доступа к файлу, используя либо терминал, либо встроенные в Emacs инструменты.
Если вы уже решили данную проблему, перейдя на другую Linux-дистрибутив, это может подтверждать наличие специфичных настроек в вашей изначальной системе, однако это не отменяет необходимости понимать и управлять правами доступа в Unix-подобных системах.