/etc/profile.d/
假设我已通过多用户系统上的一行将系统范围内的 umask 设置为 027 。一段时间后。重新启动后我想使用以下命令从菜单中隐藏现有的桌面文件系统范围:
# just in case the folder doesn't exist, create it:
sudo install -o root -g root -m 755 -p -d '/usr/local/share/applications/'
# copy the existing desktop file and preserve all attributes (which are permissions 644 for the old & new file):
sudo cp -vi --preserve=all '/usr/share/applications/application.desktop' '/usr/local/share/applications/'
# add or change the existing key to true:
sudo desktop-file-edit --set-key=NoDisplay --set-value=true '/usr/local/share/applications/application.desktop'
它有点有效,但不符合预期:如果您打开alacarte
此桌面文件仍处于激活状态,但未显示在菜单中!
仔细看看/usr/local/share/applications/
原因可以发现...权限是application.desktop
640而不是644,所以文件仍然会显示,但普通用户无法读取,因此它不会显示在菜单(因此NoDisplay=true
在这种情况下正确设置并不重要)。
我什至尝试添加手册页中提到的选项-m 644
,但它似乎专门用于desktop-file-install
.
- 这是故意的吗?如果是这样,为什么?
- 有没有一个简单的解决方法而不是使用附加的
chmod
? - 为什么要编辑文件,更改它的权限?!?
答案1
为什么要编辑文件,更改它的权限?!?
有几种编辑文件的方法:
- 读取数据,应用更新,在上面写入新数据,希望没有人中途拔掉电源插头。
- 读取数据,应用更新,将旧数据写入备份文件,在现有文件之上写入新数据,如果一切顺利则删除备份。
- 读取数据,应用更新,将旧文件移到一边,在其位置创建一个新文件,在那里写入新数据,如果一切顺利,则删除原始文件。
desktop-file-edit
使用第3种方法。这种方法涉及用新文件替换旧文件,需要程序手动将所有元数据(例如文件所有权或权限)从旧文件重新应用到新文件。该程序不会这样做,因此,更新后的文件具有“默认”继承的所有权和权限。
有没有一个简单的解决方法而不是使用附加的
chmod
?
改为前置 a umask 022
。