डॉट का उपयोग किए बिना लिनक्स में फाइलें छिपाएं


32

मैं लिनक्स में फ़ाइलों का उपयोग करना चाहता हूं बिना डॉट का उपयोग किए, क्योंकि यह विंडोज में संभव है।

क्या इसे करने का कोई तरीका है?


6
ध्यान रखें कि फाइलें छुपाना (
आपस में मिलना

जवाबों:


26

आप नहीं कर सकते। फ़ाइल सिस्टम छिपी हुई सेटिंग्स को संभालने के तरीके में एक बुनियादी अंतर है। विंडोज में, फ़ाइल सिस्टम मेटाडेटा में फ़ाइल के लिए कई विशेषताओं को संग्रहीत करता है, जिसमें "छिपी हुई" और "प्रणाली" (दोनों जिनमें से छिपी हुई फाइलें हैं) शामिल हैं। आम * निक्स फाइलसिस्टम में, ऐसी कोई विशेषता संग्रहीत नहीं है। इसके बजाय, जानकारी को कहीं और डाला जाना चाहिए, जैसे फ़ाइल नाम में। अधिवेशन इस प्रकार है कि फाइलों की शुरुआत होती है। (और आपके सिस्टम पर निर्भर करता है, शायद कुछ अन्य जैसे _) डिफ़ॉल्ट रूप से अधिकांश टूल द्वारा नहीं दिखाए जाएंगे।

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

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

यूनिक्स की अनुमति के रूप में वे निर्देशिकाओं से संबंधित हैं अक्सर लोगों को भ्रमित करते हैं, और शायद इसे बेहतर ढंग से समझने से आपको मदद मिलेगी। "पढ़ने" और "निष्पादित" अनुमतियों ( rऔर x) का मतलब निर्देशिकाओं के लिए कुछ अलग है जो वे फ़ाइलों के लिए करते हैं। निर्देशिकाओं के लिए, निष्पादित xअनुमति यह निर्धारित करती है कि आप निर्देशिका में इनोड्स एक्सेस करते हैं या नहीं। पठन rअनुमति निर्धारित करती है कि आप निर्देशिका की सूची तक पहुँच प्राप्त कर सकते हैं या नहीं। कार्यात्मक रूप से, xउपयोगकर्ता एक निर्देशिका में चीजों को करने की rअनुमति देता है , जबकि अनुमति उन्हें यह देखने की अनुमति देती है कि इसमें क्या है। ये अलग हैं, और अंतर भ्रामक हो सकता है। आइए एक उदाहरण देखें:


jeanluc@login64: ~ $ mkdir example
jeanluc@login64: ~ $ echo "you can read it" > example/file
jeanluc@login64: ~ $ ls example/
file
jeanluc@login64: ~ $ cat example/file
you can read it

jeanluc@login64: ~ $ chmod -x example/
jeanluc@login64: ~ $ ls example/
ls: cannot access example/file: Permission denied
file
jeanluc@login64: ~ $ cat example/file
cat: example/file: Permission denied
jeanluc@login64: ~ $ cd example/
-bash: cd: example/: Permission denied

jeanluc@login64: ~ $ chmod +x example/
jeanluc@login64: ~ $ chmod -r example/
jeanluc@login64: ~ $ ls example/
ls: cannot open directory example/: Permission denied
jeanluc@login64: ~ $ cat example/file
you can read it
jeanluc@login64: ~ $ cd example/
jeanluc@login64: ~/example $ ls
ls: cannot open directory .: Permission denied
jeanluc@login64: ~/example $ cd ..

तो, ध्यान दें कि बिना निष्पादित किए मैं अभी भी फाइलों को सूचीबद्ध कर सकता हूं (हालांकि एलएस एक त्रुटि दिखाता है क्योंकि यह फ़ाइल गुण नहीं प्राप्त कर सकता है), लेकिन मैं निर्देशिका में नहीं बदल सकता हूं या इसमें फाइलें नहीं पढ़ सकता हूं। पढ़ने के बिना मैं फ़ाइलों को सूचीबद्ध नहीं कर सकता, लेकिन मैं अभी भी निर्देशिका में बदल सकता हूं और अगर मुझे एक फ़ाइल का नाम पता है तो मैं अभी भी इसे एक्सेस कर सकता हूं।

हालाँकि, ध्यान दें, कि केवल पढ़ने की अनुमति को हटाने से आपको अस्पष्टता से सुरक्षा मिलती है। यदि उपयोगकर्ता फ़ाइल नाम का अनुमान लगाता है, तो वे इसकी सामग्री को पढ़ सकेंगे।

यह वास्तव में आपके प्रश्न के लिए प्रासंगिक नहीं हो सकता है, मैं सिर्फ यह सुनिश्चित करना चाहता था कि आप निर्देशिका अनुमतियों को समझ गए हैं।


26

.hiddenछिपी जाने वाली फ़ाइलों के नाम के साथ निर्देशिका में एक फ़ाइल बनाएं (प्रत्येक पंक्ति का एक नाम)।

फिर निम्नलिखित को अपने में जोड़ें ~/.bashrc:

ls () {
  if [ -f .hidden ]; then
    declare GLOBIGNORE="$GLOBIGNORE:.*:$(tr '\n' ':' < .hidden)"
    ls "$@"
  fi
}

अब आपका lsकमांड इन फाइलों को सूचीबद्ध नहीं करता है।

मैं अपनी __pycache__और __init__.pyफाइलों को छिपाने के लिए इस तकनीक का उपयोग करता हूं ।


संपादित करें: एक अन्य टिप्पणी के अनुसार, यह उन्हें कम से कम एक (नॉटिलस) में भी छुपाता है, लेकिन शायद कई जीयूआई फ़ाइल ब्राउज़रों को भी।


यह दिलचस्प है। क्या यह नॉटिलस या अन्य गिनी टूल में भी काम करता है? क्या आप फ़ाइलों को देखने में सक्षम हैं ls -al?
जकूज़ी

1
कोड अंत में एक "" याद कर रहा है। और यदि आप आश्चर्य करते हैं कि कहां से upvotes हैं: askubuntu.com/a/713591/15811 ) ;-)
रंजविंड

14

आप वास्तव में एक डॉट को जोड़े बिना लिनक्स में फाइलें छिपा सकते हैं। यह वास्तव में उन्हें नॉटिलस में छिपाता है; एक lsकमांड लाइन से अभी भी फाइलों सूची जाएगा।

  1. .hiddenउस फ़ोल्डर में एक पाठ फ़ाइल बनाएँ जिसका नाम आप फ़ाइलों को छुपाना चाहते हैं।
  2. उन फ़ाइलों या फ़ोल्डरों के नाम जोड़ें जिन्हें आप छिपाना चाहते हैं, प्रति पंक्ति एक फ़ाइल में।
  3. अपने फ़ाइल ब्राउज़र को ताज़ा करें।

2
डेबियन 5.0 में "एलएस" के साथ यहां काम नहीं करता है। क्या यह नॉटिलस या डॉल्फिन के लिए विशिष्ट है या ...?
टिम Haegele

2
फाइलें Nautilus में छिपी हुई हैं; lsसूचियों में नहीं ।
करने के लिए क्या

1
बस भयानक समाधान! :)
मेरियनोस निकोस

4

लिनक्स में फाइलों को छिपाने के लिए एक डॉट का उपयोग किया जाता है, और जिसे बदला नहीं जा सकता है।

हालाँकि, आप उपयोगकर्ताओं को दिए गए फ़ोल्डर / फ़ाइल तक पहुँच प्राप्त करने से रोकने के लिए फ़ाइल अनुमतियों के साथ खेल सकते हैं। chmodकमांड के साथ प्रयोग करके देखें ।


2

क्या आप केवल अपने चित्रमय उपयोगकर्ता इंटरफ़ेस के फ़ाइल प्रबंधक और / या डेस्कटॉप वातावरण से फ़ाइलों को छिपाने की कोशिश कर रहे हैं? यदि ऐसा है, तो केवल एक डॉट के साथ फ़ाइल नाम को उपसर्ग से परे विकल्प हो सकते हैं।

मैं विश्वास है कि केवल अतिरिक्त किसी भी लिनक्स फ़ाइल प्रबंधक से छिपा फ़ाइलों बैकअप फ़ाइलें, यानी उन एक टिल्ड में समाप्त होने वाले हैं ~या .bakया जो कुछ भी उनका मानना है कि बैकअप विस्तार है। किसी भी मामले में, आप शायद भाग्य में हैं यदि आप सभी करना चाहते हैं तो फ़ाइल प्रबंधक से बैकअप फ़ाइलों को छिपाएं।

अपनी फ़ाइलों को उन्हें छिपाने के लिए बैकअप एक्सटेंशन न दें या वे गलती से नष्ट हो सकते हैं !!

एक तरफ के रूप में, आप कमांड SetFile -a V [file]या संपादन का उपयोग करके मैक ओएस एक्स में फाइंडर से फाइलें छिपा सकते हैं /.hiddenलेकिन जाहिर है कि यह कमांड लाइन के lsप्रोग्राम से फाइल को नहीं छिपाएगा ।


3
OS X में आप फाइल्स को हाईड कर सकते हैं chflags hidden filename
slhck

2

यदि आपके पास कुछ प्रोग्रामिंग कौशल हैं और केवल अगर आपको क्या चाहिए तो दृश्य स्थान को अव्यवस्थित करने से रोकने के लिए उपयोगकर्ता पुष्टिकरण के लिए फ़ाइलनाम छिपा रहा है जिसे आप हैक कर सकते हैं!

मैं केवल कमांड लाइन टूल पर विचार करूंगा, क्योंकि वे काफी समान हैं और एकमात्र उपकरण हैं, जिनका लगातार उपयोग किया जाता है।

इस जानकारी को संग्रहीत करने के कई तरीके हैं:

  1. आप चयनित फ़ाइलों में "छिपी" विस्तारित विशेषता को संग्रहीत कर सकते हैं। देखman attr

      attr -s hidden -V true your_file
    
  2. या जैसा कि ऊपर बताया गया है कि आप फ़ाइल में .hiddenफ़ाइल नाम की सूची संग्रहीत कर सकते हैं

महत्वपूर्ण: यह उस बॉक्स से काम नहीं करेगा जिसे आपको तर्क को लागू करना है, स्वच्छ सिस्टम सिर्फ .hiddenफाइलों और hiddenविस्तारित विशेषताओं की अनदेखी करेगा !

इसके अलावा वहाँ मुल्तानी संभव कार्यान्वयन हैं:

  1. यदि आपके पास कुछ ही फाइलें हैं, तो अपनी .bashrcफाइल में लिखें

    alias ls='ls -I filename_1 -I filename_2'
    

    man ls अधिक जानकारी के लिए।

  2. ऐसा लिखें function lsजैसे यह छिपी हुई फाइलों को पहचानने और सभी -Iप्रविष्टियों की सूची को इकट्ठा करने के पीछे सभी तर्क को संभालता है , और फिर /bin/lsउचित रूप से अनदेखे झंडे के साथ निष्पादित करता है। बहुत श्रमसाध्य कार्य, क्योंकि आपको सभी lsमापदंडों को ठीक से संभालना होगा।

  3. Coreutils के स्रोत प्राप्त करें

    git clone git://git.sv.gnu.org/coreutils
    

    या

    git clone git://git.suckless.org/sbase
    

    जिस तरह से आपको छिपी हुई फाइलों के अपने कार्यान्वयन को संभालने की आवश्यकता है, उसे पैच करें। और इसे अपने में रखेंPATH

    मैंने इसे कम से कम 5 मिनट में चूसा और बेकार स्रोतों का उपयोग किया।

     diff --git a/ls.c b/ls.c
     index cdfce4d..8197409 100644
     --- a/ls.c
     +++ b/ls.c
     @@ -214,6 +214,17 @@ lsdir(const char *path)
             first = 0;
             while ((d = readdir(dp))) {
     +///////////////////////////////////////////////
     +// Dirty hack to implement hidden files
     +// FIXME: Make proper(!) subroutine
     +               char attr_command[1024] = "attr -Lqg hidden "; // Oh, dear. That's bad
     +               int attr_code;
     +               strcat(attr_command, d->d_name);
     +               strcat(attr_command, " >/dev/null 2>&1");
     +               attr_code = system(attr_command);
     +               if (!attr_code)
     +                       continue;
     +///////////////////////////////////////////////
                     if (d->d_name[0] == '.' && !aflag && !Aflag)
                             continue;
                     else if (Aflag)
    

ls.cमें निहित है src, रूट निर्देशिका नहीं है, और इसमें कोई फ़ंक्शन नहीं lsdirहै ls.c
मेलाब

2

यह सबसे अच्छा समाधान है जो मैंने पाया है, अपनी प्रोफ़ाइल में जोड़ें :

alias ls="/bin/ls --color=auto --ignore='*.egg-info' --ignore='__pycache__'"

यदि आपको अधिक पैटर्न की आवश्यकता है तो बस अधिक --ignoreझंडे जोड़ें ।


यह एक बहुत, बहुत लंबी स्ट्रिंग का नेतृत्व करने जा रहा है अगर कुछ फ़ाइलों को छिपाने की आवश्यकता होती है। कई फ़ाइलों के लिए, ऐसा करने के लिए अधिक कुशल तरीके हैं, लेकिन कुछ फ़ाइलों के लिए, फिर भी एक अच्छा समाधान है।
JW0914

2

आजकल आप FUSE लिख सकते हैं जो दिए गए कॉन्फिगर के अनुसार फाइलों को छुपाता है।

यह लेख मुझे विश्वास दिलाता है कि आपको getdirफ़ंक्शन को ट्विक करने की आवश्यकता है :

getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
यह एक निर्देशिका की सामग्री को पढ़ता है। इस आपरेशन है opendir(), readdir(), ..., closedir()एक कॉल में अनुक्रम। प्रत्येक निर्देशिका प्रविष्टि के लिए, filldir()फ़ंक्शन को बुलाया जाना चाहिए।

मैं एक प्रोग्रामर नहीं हूं, लेकिन मुझे लगता है कि एक getdir(जैसे) .hiddenफ़ाइल में सूचीबद्ध सभी फ़ाइलों को छोड़ दिया जा सकता है । यदि आप इसे सही तरीके से लागू करते हैं तो हर उपकरण (GUI या नहीं) प्रभावित होगा।


1

आप समूह या अन्य के लिए 'x' परमिट निकालकर किसी निर्देशिका की सामग्री को 'छिपा' सकते हैं chmod go-x directoryname। यदि आप सटीक पथ जानते हैं, तो आप फ़ाइलों को सूचीबद्ध नहीं कर सकते, हालांकि आप एक फ़ाइल तक पहुंच सकते हैं। यह वैसा नहीं है जैसा आप चाहते हैं।

ध्यान रखें कि डॉटफ़ाइल चीज़ एक सुविधा है, वास्तव में सुरक्षा के लिए फ़ाइल को छिपाने के लिए नहीं, बल्कि फ़ाइल लिस्टिंग के लिए फ़ाइलों के अव्यवस्था को कम करने के लिए। यह lsऔर अन्य उपकरणों में बेक किया हुआ है ।


और यह असत्य भी है। निर्देशिका से रीड अनुमतियाँ हटाते समय आपको इसकी सामग्री को सूचीबद्ध करने से रोक दिया जाता है, निष्कासन की अनुमति को हटाने से निर्देशिका में किसी भी पहुंच से इनकार कर दिया जाएगा। जब आपके पास किसी निर्देशिका को निष्पादित करने की अनुमति नहीं होती है, तो आपके पास इसके अलावा किसी भी चीज़ तक पहुंच नहीं होगी। भले ही इसमें पूरे अधिकार के साथ एक उपनिर्देशिका हो और आप इसका रास्ता जानते हों।
बच्चू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.