現在シェルコマンドを勉強しています。演習の1つは、さまざまなディレクトリとサブディレクトリを持つ構造を作成することです。
私はls -laR > hello
を書いたが、hello
という名前のテキストファイルを作成することになっていた。ただし、最初にSudoと入力しても、次のメッセージbash: hello: permission denied
が表示されます。
このコマンドは別のLinuxディストリビューションで機能しました。また、数分前にファイルを作成するディレクトリでls -la
を使用しましたが、次のようになりました。
drwxr-xr-x 2 root root 4096 Nov 26 10:56 .
drwxr-xr-x 5 root root 4096 Nov 26 10:56 ..
最初のトライアドによると、私には書き込み権限がありますか?
ルートはhello
ファイルを作成するディレクトリの所有者であり、同じグループのユーザーと他のユーザーにはそのディレクトリへの書き込み権限がないため、次の場合にbash: hello: permission denied
エラーが発生します。 ls -laR > hello
を実行します。
さらに、その前にSudo
を使用して同じコマンドを実行すると、まったく同じエラーが発生します。これは、出力リダイレクト(>
演算子)がシェルによって行われるであり、ls
ではなく、したがってSudo
は効果がないためです。 Sudo
はls -laR
のみに影響します。これを防ぐには、rootとしてログインする必要があります。
Sudo -i
次に、リダイレクトを使用できます。
ls -laR > hello
それ以外の場合は、ルート権限でサブシェルでbashコマンドを実行できます。
Sudo bash -c "ls -laR > hello"
最後に、>
演算子でリダイレクトを使用する代わりに、tee
コマンドを使用する別のオプションがあります。
ls -laR | Sudo tee hello
この場合、Sudo
コマンドにls
を使用する必要はありません。rootおよび他のすべてのユーザーと同じグループのユーザーは、そのディレクトリで読み取りおよび実行の許可を持っているためです。
次のように、helloファイルを書き込み可能なディレクトリに配置します。
ls -laR > /tmp/hello
または、所有していないディレクトリにファイルを本当に作成したい場合は、次を実行します。
Sudo sh -c "ls -laR > hello"