"टार xzf -" में हाइफ़न "-" का क्या अर्थ है?


23

जब कमांड लाइन से ड्रॉपबॉक्स स्थापित करने का प्रयास किया जाता है, तो मैं कमांड पढ़ता हूं

cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -

-यहाँ क्या मतलब है? क्या यह पिछली निर्देशिका है?


9
थोड़ा सा पैदल चलना: आप जिस विकल्प के बारे में पूछ रहे हैं f -। यह आदमी पृष्ठों में जवाब खोजने के लिए थोड़ा आसान हो सकता है।
स्टडोग

4
यह वास्तव में उपयोगी होगा यदि आप बता सकते हैं कि क्या, ठीक है wgetऔर दस्तावेज़ के बारे में आपके लिए स्पष्ट नहीं है tar। इस तरह, संबंधित डेवलपर्स अपने प्रलेखन में सुधार कर सकते हैं ताकि भविष्य के उपयोगकर्ता फिर से उसी समस्याओं पर ठोकर न खाएं। दूसरे शब्दों में: एक हीरो बनो और दुनिया को एक बेहतर जगह बनाओ!
जोर्ग डब्ल्यू मित्तग

2
यह स्टड का उपयोग करने के लिए टार के लिए एक अच्छा डिफ़ॉल्ट होगा, लेकिन चूंकि यह विरासत है टेप के साथ काम करने के लिए ऐसा नहीं किया। इसके बजाय यह सीखा कि कैसे फ़ाइलों के साथ काम करना है (f विकल्प के साथ) और फिर कन्वेंशन का अनुसरण करता है - स्टडिन के लिए फ़ाइल नाम के स्थान पर (क्रिएट के मामले में eXtract या stdout के मामले में)
eckes

1
@eckes जीएनयू टार के मामले में, stdin है डिफ़ॉल्ट जब तक $TAPEनिर्धारित है।
क्राइसिस -ऑन स्ट्राइक-

जवाबों:


42

कुछ आदेश -फ़ाइल नाम के स्थान पर स्वीकार करते हैं:

  • नामित फ़ाइल के बजाय मानक आउटपुट में लिखने के लिए । यह वह -तर्क है जो करने के wgetबाद पारित किया गया -Oहै।
  • नामित फ़ाइल से मानक इनपुट से पढ़ने के लिए । इस -तर्क के tarबाद पारित किया है xzf

आपके द्वारा दिखाई गई कमांड एक आर्काइव फ़ाइल को डाउनलोड करती है wgetऔर इसे अनपैक करती है tar। इस लक्ष्य को हासिल करने के लिए, के उत्पादन में wgetहै पहुंचाया ( |) के इनपुट के लिए tar। यही कारण है कि wgetएक फ़ाइल के बजाय मानक आउटपुट के लिए लिखते हैं और एक फ़ाइल के tarबजाय मानक इनपुट से पढ़ता है।


मैं केवल "कुछ कमांड" के बजाय "अधिकांश कमांड" कहूंगा। मेरा मानना ​​है कि यह POSIX विकल्प वाक्यविन्यास विनिर्देश का हिस्सा है।
बर्मार


(और आम तौर पर उन मामलों में विकल्प को छोड़ने का उपयोग करने के समान होगा -)
बकुरी

@ बकुरी मैं यह नहीं देखता कि मैंने जो कहा, उसका खंडन कैसे किया जाए। मुझे लगता है कि अधिकांश कमांड फाइलनाम की दलीलें लेते हैं, इसलिए उन्हें उस दिशानिर्देश का पालन करना चाहिए। लेकिन शायद मुझे इसे "अधिकांश कमांड जो फाइलों पर काम करते हैं" के रूप में योग्य होना चाहिए।
बमर

1
@ बरमार दिशानिर्देश का पालन करने का एक तरीका विशेष रूप से इलाज के लिए अस्वीकार करना है -, इसे एक शाब्दिक फ़ाइल नाम के रूप में माना जाता है। दिशानिर्देश के खिलाफ जाने का एकमात्र तरीका -विशेष रूप से इलाज करना है, लेकिन दिशानिर्देश का सुझाव देने वालों की तुलना में कुछ अन्य अर्थों के साथ।
एलियाह कगन

12

यह सिर्फ एक फ़ाइल नाम है जो बहुत सारे यूनिक्स कार्यक्रमों की व्याख्या करता है "वास्तव में एक फ़ाइल खोलने के बजाय, stdin(या लिखें stdout) से पढ़ें ।"

इसका मतलब है कि उस इनपुट से पढ़ना जो प्रोग्राम में स्ट्रीम हो जाता है; आपके मामले में, यह wget का आउटपुट है।


6
यह वास्तव में एक फ़ाइल नाम है , हालांकि?
एरिक डुमिनील

7
@EricDuminil यह इस अर्थ में एक फ़ाइल नाम है कि प्रोग्राम इसे कुछ जगहों पर स्वीकार करते हैं, जहाँ वे अन्यथा केवल फ़ाइल नाम स्वीकार करते हैं, लेकिन आप सही हैं कि यह किसी निर्देशिका में फ़ाइल के वास्तविक नाम के बारे में नहीं है।
जोएल

5
@EricDuminil: विशेष रूप से, इस सम्मेलन का पालन करने वाले कार्यक्रमों के लिए, आपको उपयोग करना होगा ./-यदि आप वास्तव में नाम की फ़ाइल खोलना चाहते हैं -
जोर्ग डब्ल्यू मित्तग

4
@EricDuminil वास्तव में: हाँ! यह एक फ़ाइल का नाम देता है ; यूनिक्स अर्थ में, एक फ़ाइल विवरणक है, और वह नाम है जिसे आप उपयोग करने के लिए आपूर्ति करते हैं। यह ओएस के दृष्टिकोण से एक फ़ाइल नाम नहीं है, हालांकि। केवल उपयोगकर्ता के दृष्टिकोण से। stdin-
मार्कस मुलर

3
@rexkogitans सं। /dev/stdinकुछ कर्नेल सुविधा द्वारा दी जाने वाली सुविधा फ़ाइल नाम है। जब आप एक प्रोग्राम लिखते हैं जो आमतौर पर स्टाइन का उपयोग करने के लिए चुनता है तो कहीं भी कुछ भी नहीं होता है fopen("/dev/stdin", "r"); आप बस आगे बढ़ते हैं और extern FILE* stdinअपने libc हैडर का उपयोग करते हैं जो आपको प्रदान करता है; वैसे, पूर्णांक फ़ाइल विवरणक है 0
मार्कस मुलर

5

-करने के लिए तर्क tarनिर्दिष्ट करता है कि संग्रह से पढ़ा जाना चाहिए stdinएक फ़ाइल के बजाय। से जीएनयू टार मैनुअल :

यदि आप -एक संग्रह-नाम के रूप में उपयोग करते हैं , तो tarमानक इनपुट से संग्रह पढ़ता है (जब फ़ाइलों को सूचीबद्ध करना या निकालना होता है)

अन्य आदेशों का व्यवहार समान है, और यह POSIX.1-2017 मानक द्वारा निर्दिष्ट किया गया है :

दिशानिर्देश 13 :

उपयोगिताओं के लिए जो पढ़ने या लिखने के लिए खोली जाने वाली फ़ाइलों का प्रतिनिधित्व करने के लिए ऑपरेंड का उपयोग करते हैं, ' -' ऑपरेंड का उपयोग केवल मानक इनपुट (या मानक आउटपुट के लिए किया जाना चाहिए जब यह संदर्भ से स्पष्ट है कि आउटपुट फ़ाइल निर्दिष्ट किया जा रहा है) या एक फ़ाइल नाम दिया गया -

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.