之前关机、重启一直是用 systemctl 的子命令,比如:
1 2
| systemctl poweroff systemctl reboot
|
但最近注意到 /usr/bin/poweroff 和 /usr/bin/reboot 都是 /usr/bin/systemctl 的符号链接:
1 2 3
| rayalto@RayAltoNAS ~$ ls -hl /usr/bin/{poweroff,reboot} lrwxrwxrwx 1 root root 9 Jul 6 03:25 /usr/bin/poweroff -> systemctl lrwxrwxrwx 1 root root 9 Jul 6 03:25 /usr/bin/reboot -> systemctl
|
一开始给我看愣住了,我寻思都是 systemctl 的符号链接,那 systemctl 是怎么知道我想要干什么的呢?如果我执行 poweroff start sshd.service 等同于 systemctl start sshd.service 吗?
想了想突然想到 argv[0] 应该是关键所在,写一个简单的程序:
1 2 3 4 5 6 7 8
|
#include <iostream>
int main(int argc, const char* argv[]) { std::cout << argv[0] << '\n'; return 0; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| rayalto@RayAltoXL ~/test$ ./test ./test rayalto@RayAltoXL ~/test$ ln -s ./test foo rayalto@RayAltoXL ~/test$ ln -s ./test bar rayalto@RayAltoXL ~/test$ ./foo ./foo rayalto@RayAltoXL ~/test$ ./bar ./bar rayalto@RayAltoXL ~/test$ ls -hl total 16K lrwxrwxrwx 1 rayalto rayalto 6 Jul 11 19:15 bar -> ./test lrwxrwxrwx 1 rayalto rayalto 6 Jul 11 19:15 foo -> ./test -rwxr-xr-x 1 rayalto rayalto 16K Jul 11 19:08 test
|
索然无味,整个烂活:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include <filesystem> #include <iostream> #include <string> #include <string_view>
std::string response(const std::string_view& input) { std::string base_name = std::filesystem::path{input}.filename().string(); if (base_name == "原神") { return "启动!"; } if (base_name == "114") { return "514"; } if (base_name == "cargo") { return "run!"; } return "一德阁拉米"; }
int main(int argc, const char* argv[]) { std::cout << response(argv[0]) << '\n'; return 0; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| rayalto@RayAltoXL ~/test$ g++ test.cpp -o test rayalto@RayAltoXL ~/test$ ln -s ./test 原神 rayalto@RayAltoXL ~/test$ ln -s ./test 114 rayalto@RayAltoXL ~/test$ ln -s ./test cargo rayalto@RayAltoXL ~/test$ ls -hl total 40K lrwxrwxrwx 1 rayalto rayalto 6 Jul 11 19:58 114 -> ./test lrwxrwxrwx 1 rayalto rayalto 6 Jul 11 19:58 cargo -> ./test -rwxr-xr-x 1 rayalto rayalto 34K Jul 11 19:58 test -rw-r--r-- 1 rayalto rayalto 504 Jul 11 19:57 test.cpp lrwxrwxrwx 1 rayalto rayalto 6 Jul 11 19:58 原神 -> ./test rayalto@RayAltoXL ~/test$ ./114 514 rayalto@RayAltoXL ~/test$ ./cargo run! rayalto@RayAltoXL ~/test$ ./原神 启动! rayalto@RayAltoXL ~/test$ ./test 一德阁拉米
|
Linux 的符号链接不如 M$ 的「快捷方式」那样强劲(其实 M$ 的快捷方式 *.lnk 是一个二进制格式文件, M$ 有专门的文档, M$ 又在链接里放 UUID 了,果然品味不一般),我实在是没想到还能这样被用出花来。
又水了一篇 Blog 开心滴捏,最近终于把一件大事办好了,虽然很明显是我太过废物才有这样的结果,但我还是很开心的,放低姿态,心态放平,安安心心做个废物也挺开心的。

小绿找我有事,我先走了 ᕕ(◠ڼ◠)ᕗ 。