lsattr 中的“a”属性是什么意思?

jyz*_*jyz 6 linux bash command-history xattr

我试图从我的.bash_history文件中删除一些旧的历史记录,但我收到了这条消息:

[john ~] /home/john $ mv .bash_history .bas
mv: impossible to move `.bash_history' to `.bas': Operation not permited
Run Code Online (Sandbox Code Playgroud)

我怀疑文件/目录权限:

[john ~] /home/john $ ls -ld .bash_history .
drwxrwx--T+ 5 root       john 4096 Out 11 19:45 .
-rw-r--r--  1 john john 2977 Out 10 14:36 .bash_history
[john ~] /home/john $
Run Code Online (Sandbox Code Playgroud)

然后我尝试:

[john ~] /home/john $ lsattr .bash*
-----a------- .bash_history
------------- .bash_logout
------------- .bash_profile
------------- .bashrc
[john ~] /home/john $
Run Code Online (Sandbox Code Playgroud)

大概就是这个a属性;这是什么意思?

Gil*_*il' 13

a属性意味着该文件是仅附加的:您不能覆盖或删除它,只能向其附加数据。这在chattr手册页中有解释。只有 root 可以删除该属性。

实际后果是您无法删除旧的历史记录。这大概是您的系统管理员打算作为一种安全措施。我并不完全相信它是安全的,但我脑子里想不出一种方法来删除某些文件的内容。(然而,绕过文件并运行命令而不显示在历史记录中是很容易的,这就是为什么它不是针对有能力的用户的特别有用的安全措施 - 一个明显的方法是从 bash 以外的其他东西运行命令。)。