Почему ссылки на перезагрузку, выключение и poweroff на systemctl?

В Arch Linux, если я делаю ls -l в /sbin, я вижу, что reboot, shutdown и poweroff - все символические ссылки на /usr/bin/systemctl. Но выдача reboot, shutdown и systemctl, очевидно, не все имеют одинаковое поведение.

Является ли ls -l, не отображая полную информацию о символических ссылках? Как я могу, например, узнать, что такое настоящая символьная ссылка reboot?

28 голосов | спросил Gradient 25 Mayam13 2013, 03:29:13

1 ответ


41

Многие программы используют этот метод, где есть один исполняемый файл, который изменяет его поведение на основе того, как он был выполнен.

Внутри программы обычно существует структура, называемая оператором case /switch, которая определяет имя, с которым был вызван исполняемый файл, и затем вызывает соответствующие функции для этого исполняемого имени. Это имя обычно является первым аргументом, который получает программа. Например, в C, когда вы пишете:

int main(int argc, char** argv)

argv[0] содержит имя вызываемого исполняемого файла. По крайней мере, это стандартное поведение для всех оболочек, и все исполняемые файлы, которые используют аргументы, должны знать об этом.

Пример в Perl

Вот надуманный пример, который я собрал в Perl, который также показывает технику.

Вот реальный скрипт, назовите его mycmd.pl:

#!/usr/bin/perl

use feature ':5.10';

(my $arg = $0) =~ s#./##;

my $msg = "I was called as: ";

given ($arg) {
  $msg .= $arg  when 'ls';
  $msg .= $arg  when 'find';
  $msg .= $arg  when 'pwd';
  default { $msg = "Error: I don't know who I am 8-)"; }
}

say $msg;
exit 0;

Вот настройка файловой системы:

$ ls -l
total 4
lrwxrwxrwx 1 saml saml   8 May 24 20:49 find -> mycmd.pl
lrwxrwxrwx 1 saml saml   8 May 24 20:34 ls -> mycmd.pl
-rwxrwxr-x 1 saml saml 275 May 24 20:49 mycmd.pl
lrwxrwxrwx 1 saml saml   8 May 24 20:49 pwd -> mycmd.pl

Теперь, когда я запускаю свои команды:

$ ./find 
I was called as: find

$ ./ls
I was called as: ls

$ ./pwd
I was called as: pwd

$ ./mycmd.pl 
Error: I don't know who I am 8-)
ответил slm 25 Mayam13 2013, 03:40:12

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132