我最近学习了两个整洁的命令,sudoedit
和sudo -e
,它可以帮助我编辑一个不可写的文件,启用我最喜欢的编辑器的配置。此外,我认为sudoedit
命令只是一个 Package 器,将-e
标志传递给sudo
。然而,我发现sudoedit
命令只是一个符号链接到sudo
:
lrwxrwxrwx 1 root root 4 Jun 22 04:49 sudoedit -> sudo
字符串
所以我想知道,作为一个符号链接,为什么sudoedit
与sudo
有不同的行为?这是如何发生的?
2条答案
按热度按时间4nkexdtk1#
它有点被Lajos Arpad的回答所掩盖(“当调用sudoedit时”)。
“它是如何发生的”是你可以通过使用你喜欢的搜索引擎查找“unix argv”或类似的东西来找到的,但简单地说:如果你用C编写程序,你的main函数是作为参数给出的,一个参数数组(通常称为“argv”);按照 * 约定 * argv[0]应该是程序名,虽然事情会变得复杂(https://utcc.utoronto.ca/~cks/space/blog/unix/Argv0IsEasy- tldr你可以把 * 任何东西 * 作为argv[0]传递)重要的一点是,程序可以 * 查看 * argv[0]并决定例如“如果argv[0]是“那就做吧。
你猜怎么着?如果你通过一个符号链接调用一个程序(并且没有做任何可怕的事情),argv[0]就是那个符号链接的名字。
作为一个简单的测试,将
echo "$0($*)"
写入一个shell脚本,比如说foo.sh,使其可执行(chmod +x foo.sh
),创建一个指向它的符号链接(ln -s foo.sh mysymlink
),并查看运行./foo.sh 1 2 3
与./mysymlink 1 2 3
时的差异cwtwac6a2#
如果你运行
man sudoedit
,那么你会看到一个很长的手册页面,我只是粘贴相关的部分:字符串
因此,
sudoedit
等价于sudo -e
,因此,sudo
和sudoedit
之间的差与sudo
和sudo -e
之间的差完全相同,即:编辑一个或多个文件,而不是运行命令