如何让“sudo ll”起作用?

如何让“sudo ll”起作用?

每隔一段时间,我发现自己需要列出我没有执行权限的目录中的文件。所以我做了一个 sudo:

>sudo ll /opt/mydir
[sudo] password for civfan:
sudo: ll: command not found

然后我说:“哦!”并切换到ls.然后记住我真的想要ls -l。然后记住我真的想要ls -al

有人能救我脱离自我吗?

我看到这ll是我的用户的别名:

>alias ll
alias ll='ls -alF'

我怎样做sudo ll工作?大概我需要 root 的别名...如果是这样,我如何为 root 设置别名?

编辑:我的猜测是尝试运行sudo ll是如此普遍,以至于这个问题值得从建议的重复中独立出来。

更新:root 已经有一个ll别名了!

civfan@civfan:~>sudo -s
root@civfan:~>alias ll
alias ll='ls -alF'

但还是sudo ll不行...

更新 2 - 答案:

答案在建议的重复问题最适合我的工作流程,而且我没有看到任何缺点。我想在这里注明一下:

alias sudo="sudo "

来自 man bash:

如果别名值的最后一个字符为空白,则还会检查别名后面的下一个命令字是否有别名扩展。

答案1

-成人用户编辑- 当您想给您的朋友留下深刻印象,但他们却并非如此时,此别名描述感觉有点像魔法,看起来很酷!请记住,您正在交互地使用 shell,因为它看起来很酷,并且您有很多很棒的命令可以组合,但是当您长大或您的软件长大后,您可能想要自动化一些事情。

当您使用 sudo 自动化操作时,最好不要依赖在交互式会话中帮助 bash 用户的技巧。

当然,您可以自行将这些功能添加到 sudo 命令中:

mv /usr/bin/sudo /usr/bin/sudo_orig
ed /usr/bin/sudo
a
#!/bin/sh
cmd="$*"
if [ $1.cmd = "ll.cmd" ]
then
  shift
  cmd="ls -alF $*"
elif [ $1.cmd = ...more definitions... ]
then ...
fi
sudo_orig $cmd
.
w
q
chmod 755 /usr/bin/sudo

如果您确实认为需要这种方式,这就是您创建满足您需求的工具集的方法;) -编辑结束-

shell 别名用作 shell 的交互部分。当您调用 sudo 时,您将离开 shell 并执行命令。

您可以使用 进入交互式 shell sudo -s,定义别名并使用它们,或者必须将别名重写为命令或函数,例如使用文件夹 /root/alias-cmds 并编写命令/root/alias-cmds/ll

echo "ls -alF" > /root/alias-cmds/ll; chmod 700 /root/alias-cmds/ll;

现在你可以使用

sudo 'PATH=$PATH:/root/alias-cmds ll' 

另一种选择是定义

alias sudoll='sudo ls -alF'

并使用sudoll代替sudo ll.

相关内容