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


28

내가 할 경우 아치 리눅스에서, ls -l/sbin, 나는 그것을 볼 수 있습니다 reboot, shutdown그리고 poweroff모든 심볼릭 링크입니다 /usr/bin/systemctl. 그러나 발행 reboot, shutdownsystemctl명령은 분명 모두 같은 동작을하지 않습니다.

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


1
이에 대한 자세한 내용은 unix.stackexchange.com/a/196014/5132를 참조하십시오 .
JdeBP

답변:


42

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

일반적으로 프로그램 내에 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-)

참조 :ssh-argv0
jordanm

4
이것이 실제로 BusyBox의 작동 방식입니다. 여기에는 대부분의 일반적인 GNU 유틸리티 역할을하는 단일 바이너리가 있습니다.
가짜 이름

1
에 대한 인수 main는 반대입니다. argc전에 온다 argv.
Bakuriu

4
C에서는 문자열로 switch 문을 만들 수 없습니다.
BatchyX

3
"내가 누군지 모르겠다"에 +1 :)
CVn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.