私は bash を初めて使います。多くの行とコマンドから成るスクリプトを書きました。これは、いくつかのパッケージを取得してインストールするためのセットアップ ファイルです。その結果、スクリプトでは次のコマンドのように多くのインストール コマンドを使用する必要があります。
sudo apt install python2.7 python-pip
sudo
スクリプト内で をあまり使用しないようにするために、sudo
各コマンドの前の を削除し、 のようにスクリプトを実行することにしましたsudo ./setup.sh
。
正常に動作しますが、 やなど、実際にはsudo
前にが必要ないコマンドがいくつかあるという問題があります。mkdir
wget
を使用してスクリプトを実行するとsudo ./setup.sh
、このスクリプトを使用して作成されたディレクトリは、 を使用せずに削除、コピー、または編集することはできませんsudo
が、すべてのユーザーがアクセスできるようにしたいと考えていました。したがって、私の質問は次のとおりです。
sudo を使用してスクリプトを実行する場合 ( など)、やなどの内部コマンドの一部をスーパーユーザー権限でsudo ./setup.sh
実行しないようにする方法はありますか?mkdir
wget
答え1
を使用するとsudo
、切り替えるように指示したユーザー (デフォルトでは root) として新しいシェルを起動します。これにより、変数がそのユーザーのユーザー名にsudo
設定されます。SUDO_USER
$ cat foo.sh
#!/bin/bash
echo "SUDO_USER: $SUDO_USER"
このスクリプトを私として実行すると、変数が設定されていないため何も表示されません。
$ foo.sh
SUDO_USER:
しかし、 で実行するとsudo
、変数が設定されます。
$ sudo foo.sh
SUDO_USER: terdon
これを念頭に置いて、スクリプトを起動したユーザーのユーザー名を使用して、通常のユーザーとして実行したい特定のコマンドを実行するだけです。したがって、スクリプト内の通常のユーザーとして実行したいその他のコマンドを変更しwget
、chmod
それらを で実行して、sudo -u $SUDO_USER
root ではなく通常のユーザーとして実行されるようにします。
apt install python2.7 python-pip ## will run as root
sudo -u $SUDO_USER mkdir foo ## will run as $SUDO_USER
変数を使用すると、SUDO_USER
作成するディレクトリとファイルの所有者がスクリプトを起動したユーザーになることが保証され、スクリプトを実行するたびにそのユーザーの名前を明示的にスクリプトに伝える必要がなくなります。
答え2
mkdir によって作成されたディレクトリをすべてのユーザーが使用できるようにするには、 chmod コマンドを使用して、権限を WORLD 読み取り/書き込み可能に変更する必要があります。
スクリプトでは、 を実行した後mkdir
、以下のコマンドを使用します。
chmod -R 755 «directory-name»
(誰でも読み取り可能、root のみ書き込み可能)
または
chmod -R 777 «directory-name»
(システム内のすべてのユーザーが読み取りおよび書き込み可能)
についてはwget
、chmod
ダウンロード後に コマンドを使用してください。
または
それでも別のユーザーとしてコマンドを実行する場合は、su コマンドを使用します。
su - «username» -c 'command to be executed'