लिनक्स पर एक आभासी फ़ाइल के लिए फ़ाइलों को समेटना


10

लिनक्स सिस्टम पर, क्या डिस्क के स्थान पर एक और एन बाइट्स नहीं लेने के दौरान पढ़ने और लिखने के लिए एक उजागर फाइल में फ़ाइलों की एक श्रृंखला को संक्षिप्त करने का कोई तरीका है? मैं इन फ़ाइलों को पूरा करने के लिए लूपबैक / डेमॅपर के माध्यम से ऐसा करने की उम्मीद कर रहा था।

मुझे एक समस्या है जहां विभाजित बाइनरी फाइलें हैं जो काफी बड़ी हो सकती हैं। मैं बड़े पैमाने पर डिस्क के साथ अपनी अंतरिक्ष आवश्यकताओं को दोगुना नहीं करना चाहता, बस इन फ़ाइलों से सामग्री को अस्थायी रूप से पढ़ने / लिखने के catलिए उन सभी को एक विशाल फ़ाइल में एक साथ सम्मिलित करें।

मुझे यह परियोजना यहां मिली , लेकिन ऐसा लगता है कि यह एक बहुत ही विशिष्ट उपयोग मामला है और पर्ल पर भी निर्भर करता है


मुझे लगता है कि इस तरह की समस्या को हल करने के लिए FUSE का आविष्कार किया गया था। संभवतः आपको अपना स्वयं का मॉड्यूल लिखना होगा लेकिन यह बहुत मुश्किल नहीं होना चाहिए।
हॉके लैगिंग

जवाबों:


14

आप लूप डिवाइस और डिवाइस मैपर को मिलाकर ऐसा कर सकते हैं कि "सब कुछ एक फाइल है" के लिए धन्यवाद। लेकिन एक सीमा के साथ: फ़ाइल का आकार नहीं बदला जा सकता है (जैसा कि आप उन्हें लिखकर ब्लॉक डिवाइस नहीं बढ़ा सकते हैं)। इसलिए यदि आप डेटा को जोड़ना चाहते हैं तो आपको एक बड़ा ब्लॉक डिवाइस बनाना होगा और एपेंडेड डमी डेटा को ओवरराइट करना होगा।

# for testing, Create 4 files
echo foo | dd of=block0 cbs=512 conv=block
echo bar | dd of=block1 cbs=512 conv=block
echo bat | dd of=block2 cbs=512 conv=block
echo baz | dd of=block3 cbs=512 conv=block
# Create a loop device for each of the 4 files
losetup /dev/loop0 block0
losetup /dev/loop1 block1
losetup /dev/loop2 block2
losetup /dev/loop3 block3
# Create a device map named "test" using those loop devices
(
    echo "0 1 linear /dev/loop0 0"
    echo "1 1 linear /dev/loop1 0"
    echo "2 1 linear /dev/loop2 0"
    echo "3 1 linear /dev/loop3 0"
) | dmsetup create test
$EDITOR /dev/mapper/test # use overwrite mode only

फ़ाइल को विस्तारित करने के लिए आप एक बड़ी विरल फ़ाइल बना सकते हैं और इसे अतिरिक्त डिवाइस के रूप में उपयोग कर सकते हैं।


1

यह लिनक्स में नामित पाइप का उपयोग करके किया जा सकता है।

मान लें कि आपके पास नाम वाली फाइलें हैं file0, file1, file2, file3, file4, file5

# create a name pipe
$ mkfifo mynewfile
# cat to named file
$ cat file{0..5} > mynewfile &

C प्रोग्राम में आप कर सकते हैं

mkfifo(mynewfile , 0777);
system("cat file{0..5} > mynewfile");

इसके बाद mynewfile का उपयोग करें क्योंकि आप सामान्य फ़ाइल से पढ़ेंगे।

mynewfile FIFO फाइल है


0

पढ़ने के लिए, आप lessकई फाइलें ले सकते हैं और फिर उनके माध्यम से जाने के लिए विकल्पों :nऔर :pविकल्पों का उपयोग कर सकते हैं।

लेखन के लिए, बिना फ़ाइलों को सीधे एक्सेस किए आप उन्हें नहीं लिख पाएंगे।

आप vimकई फ़ाइलों को भी कर सकते हैं , और यह केवल उस आदेश से vim fileA fileB fileCगुजरेगा जिसे वे कहा जाता था (जैसे। - fileB बंद होने के बाद खोला गया fileb बंद होने के बाद fileC खोला गया)।

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