Music
を介してフォルダーmv
を移動しようとすると、アクセス許可が拒否されますが、ディレクトリの所有者は私のユーザーに設定され、ユーザーのアクセス許可は7に設定されています。
(私はSudoを使用できることを知っていますが、何が問題なのかを知りたいです。何かが怪しい臭いがします)。 Ps:私はMac OS X El Capitanを使用しています。
フォルダa
でb
をc
に移動すると、a
のフォルダ権限によって、実行できることが決まります。
この場合、.
が最も重要です。
権限が単にrwx
よりも複雑であることを確認してください。 music
フォルダには@
最後に.
フォルダには+
最後に。
xattr -h
@記号の複雑な権限を決定します。getfacl
を使用します。LinuxにはWindowsサブシステムを使用していました。別のbashインスタンスでディレクトリを開いていました。それを閉じると、ディレクトリが移動します。
そのディレクトリのどこかに、少なくとも1つのファイルがあり、適切な権限がありませんでした。
だから、私がしたことは:
Sudo chown -R valmar ./Music
Sudo chmod -R 755 ./Music
今では動作します。
ここでの問題は、Musicフォルダーのアクセス制御リスト(ACL)に関係している可能性があります。 ACLは、通常ls -l
でリストされる通常のPOSIXのものとは別の権限システムです。ホームフォルダーおよび他の場所にある他のいくつかのディレクトリにもACLがあります。
ホームディレクトリ内のACLを表示するには、次を使用します。
/bin/ls -le ~
おそらく、Musicディレクトリに対して0: group:everyone deny delete
のようなルールが表示されます。お気づきのように、Sudo
で問題を上書きできます。それをしたくない場合(またはできない場合)、ファイルの所有者であれば、他のオプションがあります。インデックス(上記の例では0)に基づいて、MusicディレクトリのACLから問題のエントリを削除できます。
/bin/chmod -a# 0 Music
または、ACLのすべてのエントリを削除できます。
/bin/chmod -N Music
これで、ディレクトリを移動できます(通常のPOSIX権限が必要です)。移動後にACLを元に戻す場合は、次を使用できます。
/bin/chmod +a "group:everyone deny delete" Music_tmp
もう一度/bin/ls -le
を使用して、ACLが適切であることを確認します。詳細については、man chmod
のACLの例をご覧ください。特に、このイントロは役に立ちます:
各ファイルには1つのACLがあり、エントリの順序付きリストが含まれています。各エントリはユーザーまたはグループを参照し、一連の権限を付与または拒否します。ユーザーとグループが同じ名前で存在する場合、名前のタイプを指定するために、ユーザー/グループ名の前に「user:」または「group:」を付けることができます。
Manページは順序付けに関する規則を説明しているとは思いませんが、 このページ はACLの順序規則を明確に説明しています。特に、明示的なdeny
ルールの前に、明示的なallow
ルールが適用されます。そのため、group:everyone deny delete
エントリが配置されている限り、allow
ルールを使用して削除する権限をユーザーに与えることはできません。これは、あなたを含むeveryone
グループへのアクセスが拒否され、そのルールが最初に適用されるためです。
削除しようとしたディレクトリで一連のプログラムが実行されていると、この問題が発生しました。ディレクトリを移動するには、まずそのディレクトリから実行中のすべてのプログラムを強制終了する必要がありました。
次のコマンドでは、プログラムの名前の選択方法について非常に注意してくださいにしてください。参考のために、次のコマンドを使用しました。
ps aux | grep -i [NAME_OF_ANNOYING_PROGRAM] | grep -v grep
# make sure that you are only about to kill the programs you want to kill
ps aux | grep -i [NAME_OF_ANNOYING_PROGRAM] | grep -v grep | awk '{print $2}' | Sudo xargs kill -9
Sudo mv /usr/local/[DIR_FOR_ANNOYING_PROGRAM] /usr/local/[DIR_FOR_ANNOYING_PROGRAM]2
一般的な手順は次のとおりです。
kill -9
多くの注意)すべてのプログラムをディレクトリからこれは、内部のファイルの1つが書き込み保護されている場合にも発生する可能性があります。今日、access.log
は、すでに停止されているApacheに対して書き込み保護されていました。このファイルを削除したので、さらに親ディレクトリを移動することができました。