रिबूट, शटडाउन और पॉवरऑफ सिम्बलिंक्स को सिस्टमक्ट क्यों किया जाता है?


28

आर्क लिनक्स में, अगर मैं ऐसा ls -lकरने में /sbin, मुझे लगता है कि देख सकते हैं reboot, shutdownऔर poweroffकरने के लिए सभी सिमलिंक हैं /usr/bin/systemctl। लेकिन जारी करना reboot, shutdownऔर systemctlआज्ञा देना स्पष्ट रूप से सभी का व्यवहार समान नहीं है।

क्या ls -lमुझे सिम्बल के बारे में पूरी जानकारी नहीं दी जा रही है? उदाहरण के लिए, मैं कैसे जान सकता हूं कि असली सिमिलिंक क्या rebootहै?


1
इस पर अधिक जानकारी के लिए, unix.stackexchange.com/a/196014/5132 देखें ।
JdeBP

जवाबों:


42

कई कार्यक्रम इस तकनीक का उपयोग करते हैं जहां एक एकल निष्पादन योग्य होता है जो इसके व्यवहार को बदलता है कि इसे कैसे निष्पादित किया गया था।

आम तौर पर प्रोग्राम के अंदर एक संरचना होती है जिसे केस / स्विच स्टेटमेंट कहा जाता है जो निर्धारित करता है कि निष्पादन योग्य नाम के साथ कहा गया था और फिर उस निष्पादन योग्य नाम के लिए उपयुक्त कार्यक्षमता को कॉल करेगा। यह नाम आमतौर पर पहला तर्क है जिसे कार्यक्रम प्राप्त करता है। उदाहरण के लिए, Cजब आप लिखते हैं:

int main(int argc, char** argv)

argv[0]कहा जाता है निष्पादन योग्य का नाम। कम से कम, यह सभी गोले के लिए मानक व्यवहार है, और तर्कों का उपयोग करने वाले सभी निष्पादकों को इसके बारे में पता होना चाहिए।

पर्ल में उदाहरण

यहाँ एक उलझा हुआ उदाहरण मैंने पर्ल में एक साथ रखा है जो तकनीक को भी दिखाता है।

यहां वास्तविक स्क्रिप्ट है, इसे कॉल करें 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
जोर्डनम

4
यह वास्तव में कैसे काम करता है बिजीबॉक्स। इसमें एक एकल बाइनरी है जो अधिकांश सामान्य जीएनयू उपयोगिताओं के रूप में कार्य करता है।
नकली नाम

1
के तर्क mainउलटे हैं। argcपहले आता है argv
बाकुरी

4
C में, आप स्ट्रिंग्स के साथ एक स्विच स्टेटमेंट नहीं बना सकते हैं।
बैचैक्स

3
+1 के लिए "मुझे नहीं पता कि मैं कौन हूं" :)
एक CVn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.