emacs 无法覆盖用户自己对文件的写保护

emacs 无法覆盖用户自己对文件的写保护

在最近安装的 fedora 25 系统上(uname -aLinux [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/LinuxGNU Emacs 25.1.1 (x86_64-redhat-linux-gnu, GTK+ Version 3.22.4) of 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)我回答“是”,输入

(g)出现消息:“打开输出文件:权限被拒绝,[完整路径]/myfile”

该目录没有写保护。

我已经能够在其他系统(最近几年是 openSUSE)上永久编辑和保存我的写保护文件。

在系统上禁用 selinux 模式没有帮助。请参阅评论中的更多信息。

我不知道哪里出了问题。

答案1

C-x C-q禁用只读缓冲,不适用于其文件。

目的C-x C-q是防止自己意外改变缓冲区的内容(无论它是否是文件缓冲区)。

更改权限文件,请使用下列方法之一:

  • 命令chmod
  • Dired,使用M(命令dired-do-chmod

使用C-h f查看每个命令的文档:


chmodset-file-modes是in的别名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+wM-n

答案2

谢谢大家的关注。
昨天这个问题变得无声了,因为我放弃了这个问题,最终安装了另一个 Linux 发行版,其中 emacs(即 emacs v24)运行正常。

虽然我原来的问题还没有解决,但我仍然怀疑其原因如下:

怀疑 1:我遇到问题的 emacs 25 版本在这方面的行为可能与其前身不同。一般来说,不同的行为的一个提示是,例如,它不接受版本 24 的配置文件 .emacs

嫌疑人2:某些文件系统或发行版的特定设置。

这两项怀疑均未得到跟进、证实或驳斥。

对上一个答案的回应(关于 chmod 等):感谢您的意见,但恐怕您误解了我的问题(也许我一开始就说得不够清楚)。我的问题不是 emacs 如何更改文件的权限,而是:为什么在我的情况下,即使用户请求了这样的操作,它也会拒绝覆盖受保护的文件?(事实上,Cx Cq 只会改变缓冲区的可编辑性,这种可编辑性在权限和/或打开的文件类型之后默认为可编辑性——我错误地使用了错误的术语来描述此按键组合的效果。)

相关内容