Neden yeniden başlatma, kapatma ve kapatma işaretleri systemctl'e geliyor?


28

Yaparsam Arch Linux'ta, ls -liçinde /sbin, bunu görebiliyorum reboot, shutdownve powerofftüm sembolik bağ vardır /usr/bin/systemctl. Ama veren reboot, shutdownve systemctlkomutlar açıkçası hepsi aynı davranışı yok.

Is ls -lbana sembolik ilişkin tam bilgi gösterilmiyor? Örneğin, asıl bağlantının ne olduğunu nasıl bilebilirim reboot?


1
Bununla ilgili daha fazla bilgi için, bkz. Unix.stackexchange.com/a/196014/5132 .
JdeBP

Yanıtlar:


42

Birçok program bu tekniği kullanarak davranışını değiştiren davranışını değiştiren tek bir çalıştırılabilir dosya bulunur.

Programın içinde genellikle çalıştırılabilir dosyanın çağrıldığı adı belirleyen ve daha sonra bu çalıştırılabilir ad için uygun işlevselliği arayacak olan case / switch ifadesi adı verilen bir yapı bulunur. Bu ad genellikle programın aldığı ilk argümandır. Örneğin, Cyazarken:

int main(int argc, char** argv)

argv[0]yürütülebilir dosya adını içerir. En azından, bu tüm mermiler için standart davranıştır ve argümanlar kullanan tüm çalıştırılabilirler bunun farkında olmalıdır.

Perl'deki örnek

İşte Perl'de bir araya getirdiğim ve tekniği de gösteren örnek.

İşte gerçek script, onu çağır 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;

İşte dosya sistemi kurulumu:

$ 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

Şimdi komutlarımı çalıştırdığımda:

$ ./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-)

Ayrıca bakınız:ssh-argv0
jordanm

4
Bu aslında BusyBox'ın çalışma şeklidir. Genel GNU yardımcı programlarının çoğu gibi davranan tek bir ikili dosyaya sahiptir.
Sahte Ad,

1
Argümanları maintersine çevrilir. argcönce geliyor argv.
Bakuriu

4
C, dizeleri ile bir switch deyimi yapamazsınız.
BatchyX

3
+1 "Kim olduğumu bilmiyorum" :)
CVn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.