如何从 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当被告知不带参数执行时,某些 shell 可能不会列出别名。我测试过的所有 shell(bash、dash、pdksh、mksh、tcsh、zsh)都可以使用它,但如果你发现一个不可以,你将不得不用类似的方法来处理它if [ "$ushell" = "/bin/oddshell" ; then ... fi

相关内容