ユーザーIDを確認して一致したらコマンドを実行させる

Others,RockyLinux/CentOS

Linux(今回の場合はCent OS)で複数ユーザーを使い分けている場合もあるかと思います。
そんな時に違うユーザーだった時にコマンドを実行しないように出来ないか?と言うお話があったので備忘を兼ねて簡単に纏めてみました。

スポンサーリンク

今回使ったidや[]や&&等のコマンドについて

今回使ったコマンドについての概要です。

idコマンド使うとユーザー情報を確認出来る

ユーザー情報を確認する場合はidコマンドを使います。

内容 コマンド実行内容
ユーザー情報を確認
  • id
    • ユーザーの情報を表示します
  • id ユーザー名(もしくはID)
    • 指定したユーザーの情報を表示します。
  • id -u
    • ユーザーIDを表示します
  • id -un
    • ユーザー名を表示します

[root@test-vm-01 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@test-vm-01 ~]# id testuser
uid=1000(testuser) gid=1000(testuser) groups=1000(testuser)
[root@test-vm-01 ~]# id -u
0
[root@test-vm-01 ~]# id -un
root

echo $UIDでもユーザーIDを確認出来る

echo $UIDでも現在のユーザーIDが表示されます。id -uと同じ結果が得られます。

内容 コマンド実行内容
echo $UIDを実行する

[root@test-vm-01 ~]# echo $UID
0

[](角括弧、ブラケット)でtestコマンドと同じ事が出来る

[](角括弧、ブラケット)を使うとtestコマンドと同じ事が出来ます。
;を使って処理を連続実行させて確認します。
echo $?で実行終了したコマンドの処理ステータスを確認しています。
testコマンドは値が真の場合は0、偽の場合は1を戻します。
-eqはイコール、-neはノットイコールを示します。

内容 コマンド実行内容
testコマンドを実行する

[root@test-vm-01 ~]# test 1 -eq 1 ; echo $?
0
[root@test-vm-01 ~]# test 1 -ne 1 ; echo $?
1
[root@test-vm-01 ~]# [ 1 -eq 1 ] ; echo $?
0
[root@test-vm-01 ~]# [ 1 -ne 1 ] ; echo $?
1

&&を使うと成功した場合のみ次の処理を実行させられる

次のコマンドを連続して実行させるのには;や&&があります。
;は前の処理の状態に関わらず実行されます。&&前の処理が成功した場合のみ実行されます。
[ 1 -ne 1 ] && echo “同じ値です"の時のみ返りがありません。
前の処理が成功した場合のみ実行される事が分かります。

内容 コマンド実行内容
;と&&の違いを確認する

[root@test-vm-01 ~]# [ 1 -eq 1 ] ; echo “同じ値です"
同じ値です
[root@test-vm-01 ~]# [ 1 -ne 1 ] ; echo “同じ値です"
同じ値です
[root@test-vm-01 ~]# [ 1 -eq 1 ] && echo “同じ値です"
同じ値です
[root@test-vm-01 ~]# [ 1 -ne 1 ] && echo “同じ値です"

特定ユーザーの場合のみコマンドを実行させる

現在のユーザーが合致するかどうか判断させてコマンドを実行させてみます。
サンプルとして2つのパターンでやってみました。

rootでログインしている場合のみサービスを再起動させる

現在のユーザーがrootだった場合のみchronydのサービスを再起動させるようにしてみました。

内容 コマンド実行内容
ユーザーがrootの場合のみchronydのサービスを再起動させる

[root@test-vm-01 ~]# [ $UID -eq 0 ] && systemctl restart chronyd
[root@test-vm-01 ~]# 

コマンド実行後にsystemctl status chronydで確認すると再起動されている事が確認出来ました。

現在のユーザーがrootじゃなかった場合にsuさせる

現在のユーザーがrootじゃなかった場合にrootにsuさせるようにしてみました。

内容 コマンド実行内容
ユーザーがrootじゃない場合はrootにさせる

[testuser@test-vm-01 ~]# [ $UID -ne 0 ] && su –

#sudoを使う場合
[testuser@test-vm-01 ~]# [ $UID -ne 0 ] && sudo su –

最後に

[](角括弧、ブラケット)と&&を使う事でユーザーidを確認さてからコマンドを実行させる事が出来る事が分かりました。基本的な事ですがミスを防ぐとかの為にもこういう事をやっておいた方が良いのかなと思いました。

スポンサーリンク