재부팅, 종료 및 전원 끄기가 systemctl에 심볼릭 링크된 이유는 무엇입니까?

재부팅, 종료 및 전원 끄기가 systemctl에 심볼릭 링크된 이유는 무엇입니까?

Arch Linux에서 ls -l를 실행 하면 , 및 가 심볼릭 링크임을 /sbin알 수 있습니다 . 그러나 , 및 명령을 실행하는 것이 모두 동일한 동작을 갖는 것은 아닙니다.rebootshutdownpoweroff/usr/bin/systemctlrebootshutdownsystemctl

ls -l심볼릭 링크에 대한 완전한 정보가 표시되지 않습니까 ? 예를 들어, 실제 심볼릭 링크가 무엇인지 어떻게 알 수 있나요 reboot?

답변1

많은 프로그램이 실행 방법에 따라 동작을 변경하는 실행 파일이 있는 이 기술을 사용합니다.

프로그램 내부에는 일반적으로 호출 실행 파일의 이름을 결정한 다음 해당 실행 파일 이름에 적합한 함수를 호출하는 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-)

관련 정보