每隔一段时间,我发现自己需要列出我没有执行权限的目录中的文件。所以我做了一个 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
.