जब मेरी हार्ड ड्राइव आरोहित होती है तो वास्तविक सामग्री / tmp का क्या होता है?
बहुत ज्यादा कुछ नहीं। वे केवल दृश्य से छिपे हुए हैं, सामान्य फ़ाइल सिस्टम ट्रैवर्सल के माध्यम से उपलब्ध नहीं हैं।
क्या हार्ड ड्राइव माउंट होने पर / tmp की वास्तविक सामग्री पर r / w संचालन करना संभव है?
हाँ। जिन प्रक्रियाओं में आपके "मूल" के अंदर खुले फ़ाइल हैंडल /tmp
थे, वे उनका उपयोग करने में सक्षम रहेंगे। आप कहीं और "बाइंडिंग" भी बांध सकते /
हैं।
# mount -o bind / /somewhere/else
# ls /somewhere/else/tmp
यहाँ एक छोटा सा प्रयोग है जिसे आप एक बेहतर पाने के लिए चला सकते हैं (मुझे उम्मीद है) जो हो रहा है उसके लिए महसूस करें।
नोट: यह पूरी तरह से सही होने या वास्तव में क्या हो रहा है इसका विस्तृत विवरण देने का प्रयास नहीं है। हालांकि आपको बड़ी तस्वीर देने के लिए पर्याप्त सटीक होना चाहिए।
मैंने me
अपनी मशीन पर एक उपयोगकर्ता और उसके घर में एक यादृच्छिक निर्देशिका बनाई , जिसमें एक फ़ाइल है:
me@home $ pwd
/home/me/tmp
me@home $ echo hello > some_file
me@home $ ls
some_file
me@home $ cat some_file
hello
इस बिंदु पर, कुछ भी असामान्य नहीं है - यह सिर्फ एक सादे फ़ाइल के साथ एक सादे निर्देशिका है। मैं उस सत्र को वैसे ही खुला छोड़ देता हूं जैसा cwd
कि उस परीक्षण निर्देशिका के अंदर है।
रूट के रूप में, मैं एक छोटा फाइल सिस्टम बनाता हूं और इसे माउंट करता हूं /home/me/tmp
।
root@home # dd if=/dev/zero of=./fs bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00467318 s, 2.2 GB/s
root@home # mkfs -t ext2 ./fs
mke2fs 1.42.12 (29-Aug-2014)
[... snip ...]
Writing superblocks and filesystem accounting information: done
root@home # mount ./fs /home/me/tmp
मैं तब एक नया टर्मिनल खोलता हूं me
, और चारों ओर देखता हूं :
me@home #2 $ cd tmp
me@home #2 $ ls
lost+found
me@home #2 $ cat some_file
cat: some_file: No such file or directory
me@home #2 $ echo bye bye > some_file
-su: some_file: Permission denied
इसलिए, हमारे द्वारा बनाई गई फ़ाइल स्पष्ट रूप से वहां नहीं है। lost+found
निर्देशिका एक ext फाइल सिस्टम के रूट का संकेत है। और मैंने लिखने की अनुमति खो दी है, इसलिए यह स्पष्ट रूप से मूल निर्देशिका नहीं है।
पहले me
सत्र में वापस , आइए देखें कि यह दुनिया कैसे देखती है:
me@home $ echo something else > other_file
लिखने में कोई दिक्कत नहीं।
me@home $ cat some_file other_file
hello
something else
मूल फ़ाइल अभी भी है, नई फ़ाइल बिना किसी समस्या के बनाई गई है।
है ना? क्या चल रहा है?
पहले सत्र ने निर्देशिका में प्रवेश किया इससे पहले कि उस पर एक और फाइल सिस्टम बढ़ते रूट द्वारा ओवरले किया गया था। वह माउंट एक्शन मूल फाइल सिस्टम को बिल्कुल प्रभावित नहीं करता है। शेल प्रक्रिया में मूल फ़ाइल सिस्टम में निर्देशिका के लिए पूरी तरह से मान्य हैंडल है, और इसके साथ बातचीत जारी रख सकते हैं। यह एक तरह से चारों ओर चल रहा है नीचे कालीन माउंट बिंदु।
माउंट नीचे रखे जाने के बाद दूसरे सत्र ने निर्देशिका में प्रवेश किया। तो यह नया, खाली फाइल सिस्टम देखता है। और sysadmin ने अनुमतियों को काट दिया, इसलिए यह अनुरोधित स्थान का उपयोग नहीं कर सकता ... ठीक करता है।
root@home # chown me:users /home/me/tmp
me@home #2 $ echo bye bye > some_file
me@home #2 $ ls
lost+found some_file
me@home #2 $ cat some_file
bye bye
क्या सत्र 1 गलीचा के नीचे से बच सकता है? (यह मस्टी हो रहा है।)
ज़रूर! यदि सेशन 1 फाइलसिस्टम ट्री को माउंट से वापस ऊपर ले जाता है, तो यह उस हैंडल को अंदर तक खो देगा और बाकी सभी की तरह माउंट का पालन करेगा।
me@home $ cd
me@home $ pwd
/home/me
me@home $ cd tmp
me@home $ cat some_file other_file
bye bye
cat: other_file: No such file or directory
सत्र # 2 के समान दृश्य, हम सामान्य पर वापस आ रहे हैं।
लेकिन आपको कैसे पता चलेगा कि फाइलें गायब नहीं हुईं? अब किसी की तलाश नहीं!
यह उन क्षणों में से एक है जहां बाइंड माउंट्स काम में आते हैं। वे आपको कहीं और पहले से माउंट किए गए फ़ाइल सिस्टम को माउंट करने देते हैं।
me@home $ mkdir ~/bind
root@home # mount -o bind /home/me /home/me/bind
(हां, आप "अंदर ही अंदर" एक फाइलसिस्टम को बांध सकते हैं। कूल ट्रिक, एह?
me@home $ ls bind/tmp
other_file some_file
me@home $ cat bind/tmp/*
something else
hello
तो वे वास्तव में वहाँ हैं, कार्रवाई के लिए तैयार हैं। यह बस इतना है कि वे अपने मूल स्थान पर दिखाई नहीं देते / पहुंच नहीं पाते हैं, माउंट उन्हें सामान्य निर्देशिका ट्रैवर्सल्स से छिपाता है।
मैं आपको इसके साथ खेलने के लिए प्रोत्साहित करता हूं, यह वास्तव में जटिल नहीं है जब आप "चाल" को समझ गए हैं जो खेला जा रहा है। और एक बार जब आप इसे पा लेते हैं, तो और भी कालीन खींचने के लिए संघ फाइलसिस्टम में देखें :-)
एक नोट हालांकि: बूट प्रक्रिया समाप्त होने के बाद बढ़ते /tmp
या /var
(या किसी भी कोर ओएस निर्देशिका में) वास्तव में एक अच्छा विचार नहीं है। बहुत सारे एप्लिकेशन उन निर्देशिकाओं में राज्य छोड़ देते हैं, और यदि आप उनके चारों ओर माउंट गेम खेलते हैं तो वे गंभीर रूप से भ्रमित हो सकते हैं।