Gentoo के संस्थापक से लिनक्स की मूल बातें। भाग 2 (2/5): फ़ोल्डर असाइनमेंट, फ़ाइल खोज

यह मार्ग फ़ाइल सिस्टम पदानुक्रम (FHS) मानक पर चर्चा करता है, कि निर्देशिकाओं को इस तरह क्यों नामित किया जाता है, और उनकी आवश्यकता क्यों होती है। PATH पर्यावरण चर का उल्लेख किया गया है और सिस्टम में फ़ाइलों को खोजने के लिए मूल आदेश, जैसे कि कहां, खोजें और पता लगाएँ (धीमी), पार्स हैं।



Gentoo के संस्थापक से लिनक्स मूल बातें नेविगेशन:

भाग I
  1. BASH: नेविगेशन मूल बातें (परिचय)
  2. फ़ाइलों और निर्देशिकाओं का प्रबंधन करें
  3. लिंक और फ़ाइलों और निर्देशिकाओं को हटाना
  4. ग्लोब लुकअप (योग और लिंक)

भाग II
  1. नियमित भाव (परिचय)
  2. फ़ोल्डर असाइनमेंट, फ़ाइल खोज
  3. प्रक्रिया प्रबंधन
  4. पाठ प्रसंस्करण और पुनर्निर्देशन
  5. कर्नेल मॉड्यूल (योग और लिंक)



FHS और फ़ाइल खोज


फ़ाइल सिस्टम पदानुक्रम मानक


फ़ाइल सिस्टम पदानुक्रम मानक (संक्षिप्त FHS) एक दस्तावेज़ है जो लिनक्स सिस्टम पर निर्देशिका योजना को परिभाषित करता है। FHS को वितरण-स्वतंत्र सॉफ़्टवेयर विकास को सरल बनाने के लिए एक सामान्य रूपरेखा प्रदान करने के लिए डिज़ाइन किया गया है, क्योंकि आवश्यक सभी चीज़ों को अधिकांश वितरणों में समान स्थित है। FHS निम्नलिखित निर्देशिका ट्री को परिभाषित करता है (विनिर्देश से सीधे लिया गया):


FHS में दो स्वतंत्र वर्गीकरण


FHS विनिर्देश दो स्वतंत्र फ़ाइल वर्गीकरणों के विचार पर आधारित है: साझा और गैर-साझा, और परस्पर और स्थिर। साझा डेटा को कई होस्ट में वितरित किया जा सकता है; गैर-साझा वाले होस्ट-विशिष्ट हैं (जैसे कॉन्फ़िगरेशन फ़ाइलें)। परिवर्तनशील डेटा बदल सकता है; स्थैतिक परिवर्तन नहीं करता है (सिस्टम की स्थापना और रखरखाव को छोड़कर)।



निम्न तालिका इन श्रेणियों में आने वाली निर्देशिकाओं के उदाहरणों के साथ चार संभावित संयोजनों का सार प्रस्तुत करती है। फिर, यह तालिका युक्ति से सीधी है:



  + ------------ + ----------------- + --------------- +
 |  |  साझा किया |  अविभाज्य |
 + ------------ + ----------------- + --------------- +
 |  स्थिर |  / usr |  / आदि |
 |  |  / ऑप्ट |  / बूट |
 + ------------ + ----------------- + --------------- +
 |  उत्परिवर्ती |  / var / मेल |  / var / रन |
 |  |  / var / स्पूल / समाचार |  / var / लॉक |
 + ------------ + ----------------- + --------------- + 

माध्यमिक पदानुक्रम / usr में


अंदर / usr आपको एक माध्यमिक पदानुक्रम मिलेगा जो रूट फ़ाइल सिस्टम के समान दिखता है। मशीन चालू होने पर / usr के लिए यह महत्वपूर्ण नहीं है, यह एक साझा नेटवर्क संसाधन (साझा) या CD-ROM (स्थिर) पर माउंट किया जा सकता है। अधिकांश लिनक्स विन्यास / यूएसआर पृथक्करण का उपयोग नहीं करते हैं, लेकिन रूट डाइरेक्टरी में प्राथमिक पदानुक्रम और द्वितीयक पदानुक्रम / यूएसआर के बीच अंतर करने की उपयोगिता को समझना मूल्यवान है।



हम आपको फ़ाइल सिस्टम पदानुक्रम मानक के बारे में बताएंगे। दस्तावेज़ स्वयं बहुत पठनीय है और आपको इस पर एक नज़र डालनी चाहिए। इसे पढ़ने के बाद, आपको लिनक्स फाइल सिस्टम की बेहतर समझ होगी। आप यहां विनिर्देश प्राप्त कर सकते हैं: http://www.pathname.com/fhs/



फ़ाइल खोज


लिनक्स सिस्टम में अक्सर सैकड़ों हजारों फाइलें होती हैं। यह संभव है कि आप इतने स्मार्ट हों कि आप उनमें से किसी पर भी दृष्टि न खोएं, लेकिन यह अधिक संभावना है कि कभी-कभी आपको फ़ाइल खोजने में मदद की आवश्यकता होती है। इसके लिए लिनक्स पर कई अलग-अलग उपकरण उपलब्ध हैं। यह परिचय आपको वह चुनने में मदद करेगा जो आपकी आवश्यकताओं के अनुरूप है।



पथ


जब आप कमांड लाइन से प्रोग्राम शुरू करते हैं, तो bash प्रोग्राम की खोज में निर्देशिका की सूची को देखना शुरू कर देता है जिसे आपने निर्दिष्ट किया था। उदाहरण के लिए, जब आप ls टाइप करते हैं, तो bash वास्तव में नहीं जानता है कि ls प्रोग्राम / usr / bin में स्थित है। इसके बजाय, यह PATH नामक एक पर्यावरण चर को संदर्भित करता है, जिसमें निर्देशिकाओं की एक बृहदान्त्र-पृथक सूची होती है। हम पथ मूल्य की जाँच कर सकते हैं:



$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin.


इस PATH मान के साथ (यह आपके लिए अलग हो सकता है), bash सबसे पहले ls प्रोग्राम की खोज में / usr / लोकल / बिन डायरेक्टरी, फिर / usr / bin चेक करेगा। सबसे अधिक संभावना है, एलएस / यूएसआर / बिन में स्थित है, तो बैश इस निर्देशिका में खोज बंद कर देगा।



पथ परिवर्तन


आप इसे कमांड लाइन में एक नया मान निर्दिष्ट करके PATH चर का विस्तार कर सकते हैं:



$ PATH=$PATH:~/bin
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/home/agriffis/bin


आप PATH से आइटम भी निकाल सकते हैं, हालांकि यह इतना सरल नहीं है क्योंकि आप किसी कमांड में मौजूदा $ PATH का संदर्भ नहीं दे सकते हैं। सबसे अच्छा विकल्प केवल पेट में फिर से निर्दिष्ट करना है जो आपको चाहिए:



$ PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:~/bin
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/agriffis/bin


शेल में चलाई जाने वाली प्रक्रियाओं के लिए अपने पैट परिवर्तन उपलब्ध कराने के लिए, आपको निर्यात कमांड का उपयोग करके उन्हें "निर्यात" करना होगा:



$ export PATH

"कौन सी" टीम के बारे में


आप जांच कर सकते हैं कि आपके PATH में कोई विशिष्ट प्रोग्राम है या नहीं। निम्नलिखित उदाहरण में, हम अपने सिस्टम के पथ निर्देशिकाओं में देखते हैं, कोई प्रोग्राम नहीं है जिसे समझ कहा जाता है:



$ which sense
which: no sense in (/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin)


इस उदाहरण में, ls सफलतापूर्वक स्थित है:



$ which ls
/usr/bin/ls


कौन सा


अंत में, आपको -a ध्वज के बारे में पता होना चाहिए, जो बताता है कि आपको PATH में कार्यक्रम के सभी उदाहरण दिखाने हैं:



$ which -a ls
/usr/bin/ls
/bin/ls


whereis


यदि आपको कार्यक्रम के बारे में अधिक जानकारी की आवश्यकता है, तो आप इसके स्थान का उपयोग कर सकते हैं:



$ whereis ls
ls: /bin/ls /usr/bin/ls /usr/share/man/man1/ls.1.gz


यहां हम देखते हैं कि ls दो निर्देशिकाओं में साझा निष्पादन योग्य, / बिन और / usr / बिन के साथ है। इसके अलावा, हमें बताया गया कि प्रलेखन है जो / usr / share / man में स्थित है। यह वह आदमी पृष्ठ है जिसे आप देखेंगे यदि आप आदमी ls टाइप करते हैं।



स्रोत कोड और गैर-मानक खोज के स्थान को खोजने के लिए जहाँ प्रोग्राम का उपयोग किया जा सकता है (जिसका अर्थ है फ़ाइलों की खोज करने की क्षमता जिसके लिए कोई स्रोत, स्रोत या बायनेरिज़ नहीं है - लगभग।)। आप खोज के लिए वैकल्पिक पथ भी निर्दिष्ट कर सकते हैं। अधिक जानकारी के लिए मैन पेज देखें।

खोज


खोज कमांड आपके शस्त्रागार में एक और उपयोगी उपकरण है। खोज का उपयोग करते हुए, आप केवल कार्यक्रमों की खोज तक सीमित नहीं हैं; आप विभिन्न खोज मानदंडों का उपयोग करके किसी भी प्रकार की फ़ाइल खोज सकते हैं। उदाहरण के लिए, डायरेक्टरी / usr / share / doc, README नामक एक फाइल देखें:



$ find /usr/share/doc -name README
/usr/share/doc/ion-20010523/README
/usr/share/doc/bind-9.1.3-r6/dhcp-dynamic-dns-examples/README
/usr/share/doc/sane-1.0.5/README


खोजें और पैटर्न


आप .name तर्कों के लिए ग्लोब टेम्प्लेट का उपयोग कर सकते हैं, बशर्ते कि आप उन्हें उद्धरण चिह्नों या एक बैकस्लैश से बचते हैं (इस तरह उन्हें कमांड इंटैक में पारित किया जाएगा, अन्यथा उन्हें पहले बैश करके तैनात किया जाएगा और फिर कमांड को पास किया जाएगा)। आइए विस्तार के साथ सभी README फाइलें खोजें:



$ find /usr/share/doc -name README\*
/usr/share/doc/iproute2-2.4.7/README.gz
/usr/share/doc/iproute2-2.4.7/README.iproute2+tc.gz
/usr/share/doc/iproute2-2.4.7/README.decnet.gz
/usr/share/doc/iproute2-2.4.7/examples/diffserv/README.gz
/usr/share/doc/pilot-link-0.9.6-r2/README.gz
/usr/share/doc/gnome-pilot-conduits-0.8/README.gz
/usr/share/doc/gimp-1.2.2/README.i18n.gz
/usr/share/doc/gimp-1.2.2/README.win32.gz
/usr/share/doc/gimp-1.2.2/README.gz
/usr/share/doc/gimp-1.2.2/README.perl.gz
[ 578 ]


मामले को अनदेखा करें


बेशक, आप खोज करते समय मामले को अनदेखा कर सकते हैं:



$ find /usr/share/doc -name '[Rr][Ee][Aa][Dd][Mm][Ee]*'

या, बहुत सरल:



$ find /usr/share/doc -iname readme\*

जैसा कि आप देख सकते हैं, केस-असंवेदनशील खोज के लिए, आप -iname विकल्प का उपयोग कर सकते हैं।



खोज और नियमित अभिव्यक्ति


यदि आप नियमित अभिव्यक्तियों से परिचित हैं, तो आप पैटर्न से मेल खाने वाले नामों के साथ फ़ाइलों की खोज करने के लिए -regex विकल्प का उपयोग कर सकते हैं। -Iname -iregex के समान एक विकल्प भी है और टेम्पलेट में अनदेखा मामला ढूंढता है। एक उदाहरण:



$ find /etc -iregex '.*xt.*'
/etc/X11/xkb/types/extra
/etc/X11/xkb/semantics/xtest
/etc/X11/xkb/compat/xtest
/etc/X11/app-defaults/XTerm
/etc/X11/app-defaults/XTerm-color


हालांकि, अधिकांश कार्यक्रमों के विपरीत, खोज के लिए आवश्यक है कि नियमित अभिव्यक्ति को पूरे रास्ते के लिए निर्दिष्ट किया जाए, न कि केवल इसका हिस्सा। इस कारण से, यह टेम्पलेट की शुरुआत और अंत में डालने लायक है। *; बस एक टेम्पलेट के रूप में xt का उपयोग करना पर्याप्त नहीं होगा।



खोजें और फ़ाइल प्रकार


-Type विकल्प आपको फ़ाइल सिस्टम में एक निश्चित प्रकार की फ़ाइलों की खोज करने की अनुमति देता है। -Type के लिए संभावित तर्क हैं: b (ब्लॉक डिवाइस), c (कैरेक्टर डिवाइस), d (डायरेक्टरी), p (नामित पाइप), f (रेगुलर फाइल), l (प्रतीकात्मक लिंक), और s (सॉकेट)। उदाहरण के लिए, / usr / bin में एक प्रतीकात्मक लिंक की खोज करें, जिसमें इसके नाम में स्ट्रिंग vim शामिल है:



$ find /usr/bin -name '*vim*' -type l
/usr/bin/rvim
/usr/bin/vimdiff
/usr/bin/gvimdiff


और mtimes खोजें


-मटाइम विकल्प आपको उनके अंतिम संशोधन की तारीख के आधार पर फ़ाइलों की खोज करने की अनुमति देता है। माइम तर्क 24-घंटे की अवधि की संख्या है, और यह तर्क से पहले प्लस (मतलब "बाद") या माइनस ("पहले") का अर्थ करने के लिए सबसे उपयोगी है। उदाहरण के लिए, इस परिदृश्य पर विचार करें:



 $ ls -l ? 
-rw------- 1 root root 0 Jan 7 18:00 a -rw------- 1 root root 0 Jan 6 18:00 b -rw------- 1 root root 0 Jan 5 18:00 c -rw------- 1 root root 0 Jan 4 18:00 d

$ date
Tue Jan 7 18:14:52 EST 2003


आप उन फ़ाइलों को पा सकते हैं जिन्हें पिछले 24 घंटों में संशोधित किया गया है:



$ find . -name \? -mtime -1
./a


या फ़ाइलें जो वर्तमान 24-घंटे की अवधि से पहले बदल दी गई थीं:



$ find . -name \? -mtime +0
./b
./c
./d


-डायस्टार्ट विकल्प


यदि आप वैकल्पिक रूप से दिन के विकल्प को निर्दिष्ट करते हैं, तो समय अवधि की गणना आज की शुरुआत से की जाएगी, न कि वर्तमान समय से। उदाहरण के लिए, यहाँ कल और परसों बनाई गई फाइलें हैं:



 $ find . -name \? -daystart -mtime +0 -mtime -3 
./b
./c
$ ls -lbc
-rw------- 1 root root 0 May 6 18:00 b -rw------- 1 root root 0 May 5 18:00 c

-साइज का ऑप्शन


-साइज विकल्प आपको उनके आकार के अनुसार फाइलों की खोज करने की अनुमति देता है। डिफ़ॉल्ट रूप से, -size तर्क 512-बाइट ब्लॉक की संख्या है, लेकिन विकल्प में एक प्रत्यय जोड़कर, निष्कर्ष को अधिक समझा जा सकता है। उपलब्ध प्रत्यय b (512-बाइट ब्लॉक), c (बाइट), k (किलोबाइट), और w (2-बाइट शब्द) हैं। इसके अतिरिक्त, आप तर्क से पहले प्लस ("अधिक") या माइनस ("कम")) निर्दिष्ट कर सकते हैं।



उदाहरण के लिए, / usr / बिन में एक नियमित फ़ाइल खोजने के लिए जिसका आकार 50 बाइट्स से कम है:



$ find /usr/bin -type f -size -50c
/usr/bin/krdb
/usr/bin/run-nautilus
/usr/bin/sgmlwhich
/usr/bin/muttbug


पाया फ़ाइलों के साथ काम करें


आप यह भी नहीं सोच सकते कि आप मिली हुई फाइलों से क्या कर सकते हैं! तो, खोज -exec विकल्प का उपयोग करके फ़ाइलों पर कोई भी क्रिया कर सकती है। यह विकल्प निष्पादित करने के लिए एक कमांड लाइन लेता है; और फ़ाइल नाम के साथ {} की सभी घटनाओं को प्रतिस्थापित करता है। यह एक उदाहरण के साथ समझना सबसे आसान है:



 $ find /usr/bin -type f -size -50c -exec ls -l '{}' ';' 
-rwxr-xr-x 1 root root 27 Oct 28 07:13 /usr/bin/krdb -rwxr-xr-x 1 root root 35 Nov 28 18:26 /usr/bin/run-nautilus -rwxr-xr-x 1 root root 25 Oct 21 17:51 /usr/bin/sgmlwhich -rwxr-xr-x 1 root root 26 Sep 26 08:00 /usr/bin/muttbug

जैसा कि आप देख सकते हैं, खोज एक बहुत शक्तिशाली टीम है। वह UNIX और लिनक्स के विकास के वर्षों में "बढ़ी"। ढूँढें के पास कई अन्य उपयोगी विकल्प हैं। आप उनके बारे में मैन पेज में पढ़ सकते हैं।



का पता लगाने


हम पहले से ही कवर कर चुके हैं, जो, जहां और पाते हैं। जैसा कि आप शायद पहले से ही देखते हैं, खोजने में कुछ समय लग सकता है, जैसा कि उसे हर उस निर्देशिका को पढ़ना होगा जिसमें खोज की जाती है। यह पता चला है कि पता लगाने की प्रक्रिया अपडेटेड द्वारा उत्पन्न बाहरी डेटाबेस का उपयोग करके प्रक्रिया को गति दे सकती है (अपडेट नीचे चर्चा की जाएगी)।



पता लगाने के आदेश पथ के किसी भी हिस्से पर मैचों के लिए लग रहा है, न केवल फ़ाइल ही। एक उदाहरण:



$ locate bin/ls
/var/ftp/bin/ls
/bin/ls
/sbin/lsmod
/sbin/lspci
/usr/bin/lsattr
/usr/bin/lspgpot
/usr/sbin/lsof


अपडेटेड का उपयोग करना


कई लिनक्स सिस्टम में समय-समय पर डेटाबेस को अपडेट करने के लिए क्रोन का काम होता है। यदि नीचे बताई गई त्रुटि का पता लगाता है, तो आपको खोज डेटाबेस बनाने के लिए रूटब से अद्यतन करने की आवश्यकता है:



$ locate bin/ls
locate: /var/spool/locate/locatedb: No such file or directory
$ su -
Password:
# updatedb


अपडेटेड प्रोग्राम में कुछ समय लग सकता है। यदि आपके पास एक शोर हार्ड ड्राइव है, तो आप फ़ाइल सिस्टम को अनुक्रमित करते समय इसे सुनेंगे। :)



slocate


कई लिनक्स वितरणों पर, पता लगाने की उपयोगिता को धीमे से बदल दिया गया है। एक नियम के रूप में, पता लगाने के लिए एक लिंक भी है, इसलिए आपको यह याद रखने की आवश्यकता नहीं है कि सिस्टम में वास्तव में क्या है। धीमे का अर्थ है "सुरक्षित पता" (अंग्रेजी से। सुरक्षित खोज - लगभग प्रति।)। यह खोज डेटाबेस में एक्सेस अधिकारों के बारे में जानकारी संग्रहीत करता है, ताकि आम उपयोगकर्ता उन निर्देशिकाओं को नहीं देख पाएंगे जो वे वैसे भी नहीं देख सकते थे। इसका उपयोग धीमे-धीमे पता लगाने की तरह किया जाता है, लेकिन कार्यक्रम का आउटपुट उस उपयोगकर्ता के आधार पर भिन्न हो सकता है जिसने इसे शुरू किया था।



अनुवाद दिमित्री मिंस्की ( दिमित्री.मिन्स्की @gmail.com) द्वारा किया गया था।



जारी रखने के लिए ...



लेखकों के बारे में


डैनियल रॉबिंस


डैनियल रॉबिंस जेंटू समुदाय के संस्थापक और जेंटो लिनक्स ऑपरेटिंग सिस्टम के निर्माता हैं। डैनियल अपनी पत्नी मैरी और दो ऊर्जावान बेटियों के साथ न्यू मैक्सिको में रहता है। वह फंटू के संस्थापक और प्रमुख भी हैं, और आईबीएम डेवलपरवर्क्स , इंटेल डेवलपर सर्विसेज और सी / सी ++ उपयोगकर्ता जर्नल के लिए कई तकनीकी लेख लिखे हैं।



क्रिस हाउसर


क्रिस होसर 1994 से UNIX के समर्थक हैं, जब वे टेलर विश्वविद्यालय (इंडियाना, संयुक्त राज्य अमेरिका) में प्रशासकों की टीम में शामिल हुए, जहाँ उन्होंने कंप्यूटर विज्ञान और गणित में स्नातक की डिग्री प्राप्त की। फिर उन्होंने विभिन्न क्षेत्रों में काम किया, जिसमें वेब एप्लिकेशन, वीडियो एडिटिंग, UNIX ड्राइवर और क्रिप्टोग्राफ़िक सुरक्षा शामिल हैं। वर्तमान में संतरी डेटा सिस्टम पर काम करता है। क्रिस ने कई मुफ्त परियोजनाओं में भी योगदान दिया, जैसे कि गेंटू लिनक्स और क्लोजर, और द जॉय ऑफ क्लोजर के सह-लेखक।



एरन ग्रिफिस


आयरन ग्रिफ़िस बोस्टन में रहते हैं, जहाँ उन्होंने पिछले दशक में Hewlett-Packard पर काम कर रहे प्रोजेक्ट्स जैसे कि UNIX नेटवर्क ड्राइवरों के लिए Tru64, Linux, Xen और KVM वर्चुअलाइजेशन सुरक्षा प्रमाणीकरण और हाल ही में HP ePrint प्लेटफ़ॉर्म पर काम किया। प्रोग्रामिंग से अपने खाली समय में, एरॉन अपनी साइकिल की सवारी करते समय प्रोग्रामिंग की समस्याओं को मिटा देना पसंद करते हैं, बिट्स के साथ मजाक करते हैं, या बोस्टन पेशेवर बेसबॉल टीम रेड सॉक्स के लिए जयकार करते हैं।

Source: https://habr.com/ru/post/In105495/


All Articles