200を超えるサーバーに存在するファイルの所有権と権限を変更する必要があるという問題があります。私は2つの異なるグループに属しており、あるグループから別のグループに所有権を変更する必要があります。また、権限を644に設定する必要があります。ルートアクセス権を持っている場合は、これを簡単に実行できますが、そうではありません。そのため、1人のユーザーにファイルをコピーした後、既存のファイルを削除し、最近コピーしたファイルの名前を既存のファイル名に変更する必要があります。これはかなり退屈しているので、これらのタスクを自動化するスクリプトを作成したいと思いました。私はkornshellがこの問題を解決すると思いましたが、私のスクリプトは何もしないようです。これが私が今まで持っているものです:
lockhost.sh
#!/usr/bin/ksh
sudo su - oradba
cd config
chmod 644 hostenv.cfg
chown orainst hostenv.cfg
exit
sudo su - orainst
cd config
cp -p hostenv.cfg hostenv.cfgnew
rm hostenv.cfg
mv hostenv.cfgnew hostenv.cfg
私はこれがファイルの所有権/権限を正常に変更するために実行する必要があるすべてのコマンドなので、これがうまくいくと思いました。
私がしなければならなかったのは、hostenv.cfgファイルを変更することだけでした。したがって、:
-rwxrw---- 1 oradba dba 4433 May 1 21:43 hostenv.cfg
これに関して:
-rw-r--r-- 1 orainst dba 4433 May 1 21:43 hostenv.cfg
スクリプトを変更するにはどうすればよいですか?また、スクリプトにパスワードを求めるユーザープロンプトを作成する必要がある場合でも問題ありませんが、システムが私に尋ねるようです。
スクリプトを実行しようとすると、次のことが発生します。
lockhost.sh
私のユーザーはoradbaに変更されましたが、何も起こりませんでした。 終了を入力するまでは...
exit
logout
chmod: changing permissions of `hostenv.cfg': Operation not permitted
chown: changing ownership of `hostenv.cfg': Operation not permitted
答え1
問題は、sudo su ...
別のシェルを作成し、そのシェルで終了したときにのみexit
スクリプトが続行しようとすることです。
sudo
構成が許可すると仮定すると、次のことができます。
sudo -iu oradba 'cd ... && chmod ... && chown ... '
sudo -iu orainst '...'
&&
代わりにセミコロンを使用できますが、これは成功しないchmod
限り試してはいけません。cd
sudo
構成で許可されていない場合は、次のことができます。
sudo su -c 'cd ... & chmod ... && chown ... ' - oradba
sudo su -c '...' - orainst