user1:user1
Unixには2人のユーザーとグループがありますuser2:user2
。
myDirectory
次の詳細を含むディレクトリがあります(ls -ltr
)。
drwxr-xr-x. 4 user2 user2 35 Apr 27 10:16 myDirectory
今、私はmyScript.sh
次のスクリプトを実行していますuser1
。
#!/bin/sh
whoami
if [ -f /myDirectory/*.tar.gz ]
then
rm -f /myDirectory/*.tar.gz
fi
cp -f someDirectory/*.tar.gz /myDirectory/
ただし、次のエラーが発生します。
cp: cannot create regular file ‘/myDirectory/myTar.tar.gz’: Permission denied
私は何が間違っていましたか?この問題をどのように解決できますか?
答え1
これを行うには、グループ権限を使用できます。ユーザーグループを作成し、2人のユーザーを追加し、ターゲットディレクトリのグループ所有権を変更する必要があります。まず、グループを作成します。
groupadd newusergroup
次に、ユーザーを追加します。
usermod -G newusergroup user1
usermod -G newusergroup user2
次に、ターゲットディレクトリの権限を変更します。
chgrp newusergroup /myDirectory
これは、両方のユーザーがディレクトリにアクセスできるようにしたいと仮定します。 user1にのみアクセス権を付与するには、次のように権限を変更します。
chown user1.user1 /myDirectory
答え2
権限は、そのディレクトリからファイルを削除または作成する方法にgroup
影響します。mydirectory
まず、user1
次のコマンドを実行します。
chmod g+w mydirectory
答え3
作成する必要があるユーザー、つまりコピーしたいユーザーであれば、より良い方法です。到着、スクリプトを実行します。これにより、ターゲットディレクトリに特別な書き込み権限を付与する必要がなくなります。
また、テスト
if [ -f /myDirectory/*.tar.gz ]
失敗。テスト-f
では1つのパラメータを使用しますが、パターンが複数のファイルと一致する場合は、複数のパラメータを渡す必要があります。myDirectory
圧縮されたアーカイブのディレクトリを空にしたい場合はtar
十分です。
rm -f /myDirectory/*.tar.gz
削除するファイルがない場合を表示してもエラーは発生しません-f
。rm
答え4
まあ、エラーがたくさん見えます。
- あなたは書くことができません
myDirectory
。そこでは、書き込みのみがuser2
許可されます。 - 絶対パスと相対パスを混同しています。
/myDirectory
別のディレクトリですmyDirectory
。スクリプトがファイルシステムのルートフォルダにコピーしようとしているため、権限拒否エラーが発生する可能性がありますmyDirectory
。myDirectory
パスが現在のコマンドラインパス(スクリプトが呼び出されたコンテキスト)に相対的な場合、これは./myDirectory
正しいです。そうでない場合は、実際の場所に関する詳細情報を提供してくださいmyDirectory
。相対パスの範囲はmyDirectory
さまざまな方法で異なる可能性があるため、これは重要です。あなたの特定の状況を知らない限り、これに関連する回答は一般的なものであり、特定の状況には適用されない可能性があります。 [
条件]
式はのみ適用され、適用されBash
ませんShell
。の定義は、Shell
現在作業しているUNIXシステムによって異なります。一般に、LinuxではBash
Linuxが直接Shell
実装されておらず、BSDもないためを指します。 Macでのみ独自のShell
実装が可能です。したがって、Shell
これは理論的なUNIX標準にすぎず、今日この理論的な文書には、実際に現在実行されているUNIXシステムに依存するさまざまな方言と解釈があります。したがって、直接使用することをお勧めしますBash
。これはほとんどのUNIXプラットフォームで100%動作します。 Bashが利用できないUNIXシステムはありません。
考慮すべきいくつかの異なる興味深い点:複数のグループを追加できます。グループuser1
はとですuser2
。その後、ホームフォルダグループをmyDirectory
そのグループに変更できます。私が知る限り、これは一般的なアプローチです。
Shebang コマンドで Bash を使用することもできます。/usr/bin/env
これにより、実際に Bash に入ることができます。
#!/usr/bin/env bash
これは、Perl、PHPなどの他のスクリプト言語にも良いアプローチです。