
私はこのファイルを持っています:
$ ls -lrta ~/.bash_profile
-rwxr-x---. 1 xxx xxx 904 May 23 15:36 /home/xxx/.bash_profile
$
私はファイルの所有者であり、書き込み権限を持っています。ファイルを編集(たとえば、最後の行を削除)しようとするとエラーが発生します。
$ sed -i '$ d' .bash_profile
sed: cannot rename ./sedxkZezg: Operation not permitted
$
catを使用してテキストを追加すると、ファイルは正常に作成されます。
$ cat >> .bash_profile
writing
^D
$
添付されたテキストを見るとこうなりますね。
$ cat .bash_profile
... <some text> ...
writing
$
テキストエディタ(vi)を使用してファイルを編集するとエラーが発生します。
書き込み権限があるのにファイルに書き込めない理由を説明できる人はいますか?
私が使用しているシステムに関する情報は次のとおりです。
$ uname -svr
Linux 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012
修正する:
これまでに試したことは次のとおりです。
$ sed -i '$ d' .bash_profile > file && mv file .bash_profile
sed: cannot rename ./sedm89Ym2: Operation not permitted
$ lsattr ~/.bash_profile
lsattr: Inappropriate ioctl for device While reading flags on /home/xxx/.bash_profile
$ getfact ~/.bash_profile
getfacl: Removing leading '/' from absolute path names
# file: xxx/xxx/.bash_profile
# owner: xxx
# group: xxx
user::rwx
group::r-x
other::---
$
答え1
これ'。 '権限出力の終わりには、ls
ある種の拡張データがあることを示します。chattr(1)
ext?のプロパティのリストを提供しますか?ファイルシステムには、lsattr(1)
現在のファイルシステムが一覧表示されます。また、ファイルのACL(getfacl(1)
)を確認してください。セキュリティポリシー(SELinuxなど)は、ファイルに対する特定の操作を禁止することもできます。
答え2
sed -i ... file
実際には、次のことを行います。
sed ... file > some-temp-file &&
mv some-temp-file file
最後のmv
ファイルが実行されますrename
。つまり、sed -i
ファイルはその場所で編集されず、変更されたコピーに置き換えられます。
ブロックされた名前の変更。権限の問題によりブロックされません。許可が拒否されましたエラーメッセージ(そうであれば)、〜/ .bash_profileのinode接続を解放するか(一部のSELinuxタイプの必須アクセス制御など)、ファイルへのパスを切断する(一部のAppArmorタイプなど)管理上の制限があるようです。 )。
ログのどこかでより多くの手がかりを見つけることができます。
getfattr -dm- ~/.bash_profile
ファイルのすべての拡張属性(ACL、セキュリティコンテキスト)が一覧表示されます。
lsattr ~/.bash_profile
潜在的なLinux属性の詳細をご覧ください。
答え3
おそらく親ディレクトリへの書き込み権限がない可能性があります(家なので奇妙です)。
とにかく、できますか?
$ ls -la ~