rootで私のLinuxシステム上のすべてのユーザーのすべてのエイリアスを一覧表示する方法

rootで私のLinuxシステム上のすべてのユーザーのすべてのエイリアスを一覧表示する方法

私は自分のシステムでユーザーが持つことができるすべてのエイリアスを確認しようとしてきましたが、rootを使用しています。リストするコマンドがありますか?

答え1

エイリアスは、ユーザーがログインしている間にのみ「存在」するため、実際には不可能です。 .profileなどのログインスクリプトがいくつかのエイリアスを定義している場合は、最初のログイン時にそのエイリアスを持つことになりますが、source他のスクリプトを使用してより多くのエイリアスを定義したり、コマンドラインで定義したりすることもできます。

ただし、各ユーザーが持つエイリアスを一覧表示できます。ログインする瞬間このような:

#! /bin/bash

for user in $(getent passwd | cut -d: -f1) ; do
    uid=$(getent passwd "$user" | cut -d: -f3)
    if [ "$uid" -ge 1000 ] ; then
        ushell=$(getent passwd "$user" | cut -d: -f7)
        [ -z "$ushell" ] && ushell='/bin/sh'
        echo "aliases for $user:"
        if [[ "$ushell" =~ /s?bin/(true|false|sync|ftponly|nologin) ]] ; then
            :
        elif [[ "$ushell" =~ /s?bin/(t?csh|zsh|s?ash) ]] ; then
            su - "$user" $ushell -c 'alias'
        elif [[ "$ushell" =~ /s?bin/([bd]ash|m?ksh|sh) ]] ; then 
            su - "$user" $ushell -c 'alias -p'
        fi
        echo ; echo
    fi
done

これは1000未満のすべてのUIDをスキップします。 Debian システムでは、一般 (つまりシステムではない) ユーザー ID は 1000 から始まります。一部の他のシステムでは、500から始まります。お使いのシステムに合わせて調整してください。

alias一部のシェルは、引数なしで実行するように指示されたときにエイリアスを一覧表示しない場合があります。私がテストしたすべてのシェル(bash、dash、pdksh、mksh、tcsh、zsh)はこのシェルで動作しますが、そうでないシェルを見つけたら、次のように処理する必要があります。if [ "$ushell" = "/bin/oddshell" ; then ... fi

関連情報