我一直在尝试检查所有用户在我的系统上可能拥有的别名,我正在使用 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