
この質問も聞かれましたここ。
bash で sudo を使用してディレクトリ (dir) を再帰的にコピーすると、dir 階層の最初のレベルだけがコピーされますが、sudo なしで使用すると、dir とそのすべてのサブディレクトリがコピーされます。ただし、コマンドラインのコマンドでは、sudo の有無のみに違いがあります。
なぜこのようなことが起こるのでしょうか?
例えば:
k@l:/$ tree
.
|
|__a
| |
| |__b
| |
| |__1.htm
|
|__c
k@l:/$ sudo cp -r /a/b /c/d
k@l:/$ cd /c
k@l:/c$ ls
d
k@l:/c$ cd d
bash: cd: /c/d: Permission denied
k@l:/c$ tree
.
|__d [error opening dir]
1 directory, 0 files
答え1
これを行うと、sudo cp -r /a/b /c/d
フォルダは/c/d/
ルートとしてコピーされ、所有者はルートになります。許可が拒否されましたディレクトリを開くにはルート権限が必要なので、ルート ターミナルで開いてみてください。または、ファイルの所有者を変更するか、 //c/d/
を使用して権限を修正して、現在のユーザーがフォルダーにアクセスできるようにする必要があります。chown
chmod
注:はプログラムではなくシェル コマンドなのでsudo cd
動作しません。cd
答え2
/c/d は別の所有者で権限 700 を持っていた可能性があります。 を試してくださいsudo chmod -R 755 /c/d
。
答え3
cp -a
の代わりにを使用することをお勧めしますcp -r
。後者では一部のファイル属性が保持されない可能性があります。
答え4
コマンドを変更する代わりにcp
、sudo
特定のユーザーとして次のように実行することもできます。
sudo -u thisUser cp -r /a/b /c/d
thisUser
ただし、これは権限を持っている場合にのみ機能します/a/b