Linuxで別ユーザとしてコマンドを実行する

環境

Amazon Linux AMI release 2013.03


今更ですがsudoコマンドについて整理しておきたかったので書きました。

まず基本として、rootユーザーとしてコマンドを実行する場合はsudo {コマンド}を打ちます。

$ sudo id
uid=0(root) gid=0(root) 所属グループ=0(root)

もしrootユーザー以外になり代わるたい場合は-uオプションで指定します。

$ sudo -u apache id
uid=48(apache) gid=48(apache) 所属グループ=48(apache)

もし特定のユーザーに頻繁になり代わる場合は
.bashrcなどにfunction定義しておくと楽です。
(今回一番書きたかったこと)

# Apacheユーザとしてコマンド実行する
sudoa () {
    sudo -u apache $*
}
# Apacheユーザとしてgitコマンドを実行する
agit() {
    sudo -u apache git $*
}

こうしておくとagit pullと打てば
Apacheユーザとしてgit pullを打つことができます。

また、以下のような簡単なスクリプトも書けます。

hoge() {
    sudo -u yamada sh -c '
        NAME=`id | grep -o -E "\([^)]+\)" | grep -o -m 1 -E "[^\()]+"`
        echo "hello ${NAME}!"
    '
}

実行結果は以下のようになります。

$ hoge
hello yamada!