मैं लिनक्स में फ़ाइलों का उपयोग करना चाहता हूं बिना डॉट का उपयोग किए, क्योंकि यह विंडोज में संभव है।
क्या इसे करने का कोई तरीका है?
मैं लिनक्स में फ़ाइलों का उपयोग करना चाहता हूं बिना डॉट का उपयोग किए, क्योंकि यह विंडोज में संभव है।
क्या इसे करने का कोई तरीका है?
जवाबों:
आप नहीं कर सकते। फ़ाइल सिस्टम छिपी हुई सेटिंग्स को संभालने के तरीके में एक बुनियादी अंतर है। विंडोज में, फ़ाइल सिस्टम मेटाडेटा में फ़ाइल के लिए कई विशेषताओं को संग्रहीत करता है, जिसमें "छिपी हुई" और "प्रणाली" (दोनों जिनमें से छिपी हुई फाइलें हैं) शामिल हैं। आम * निक्स फाइलसिस्टम में, ऐसी कोई विशेषता संग्रहीत नहीं है। इसके बजाय, जानकारी को कहीं और डाला जाना चाहिए, जैसे फ़ाइल नाम में। अधिवेशन इस प्रकार है कि फाइलों की शुरुआत होती है। (और आपके सिस्टम पर निर्भर करता है, शायद कुछ अन्य जैसे _) डिफ़ॉल्ट रूप से अधिकांश टूल द्वारा नहीं दिखाए जाएंगे।
यह विशुद्ध रूप से सुविधा के लिए है, 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 ..
तो, ध्यान दें कि बिना निष्पादित किए मैं अभी भी फाइलों को सूचीबद्ध कर सकता हूं (हालांकि एलएस एक त्रुटि दिखाता है क्योंकि यह फ़ाइल गुण नहीं प्राप्त कर सकता है), लेकिन मैं निर्देशिका में नहीं बदल सकता हूं या इसमें फाइलें नहीं पढ़ सकता हूं। पढ़ने के बिना मैं फ़ाइलों को सूचीबद्ध नहीं कर सकता, लेकिन मैं अभी भी निर्देशिका में बदल सकता हूं और अगर मुझे एक फ़ाइल का नाम पता है तो मैं अभी भी इसे एक्सेस कर सकता हूं।
हालाँकि, ध्यान दें, कि केवल पढ़ने की अनुमति को हटाने से आपको अस्पष्टता से सुरक्षा मिलती है। यदि उपयोगकर्ता फ़ाइल नाम का अनुमान लगाता है, तो वे इसकी सामग्री को पढ़ सकेंगे।
यह वास्तव में आपके प्रश्न के लिए प्रासंगिक नहीं हो सकता है, मैं सिर्फ यह सुनिश्चित करना चाहता था कि आप निर्देशिका अनुमतियों को समझ गए हैं।
.hidden
छिपी जाने वाली फ़ाइलों के नाम के साथ निर्देशिका में एक फ़ाइल बनाएं (प्रत्येक पंक्ति का एक नाम)।
फिर निम्नलिखित को अपने में जोड़ें ~/.bashrc
:
ls () {
if [ -f .hidden ]; then
declare GLOBIGNORE="$GLOBIGNORE:.*:$(tr '\n' ':' < .hidden)"
ls "$@"
fi
}
अब आपका ls
कमांड इन फाइलों को सूचीबद्ध नहीं करता है।
मैं अपनी __pycache__
और __init__.py
फाइलों को छिपाने के लिए इस तकनीक का उपयोग करता हूं ।
संपादित करें: एक अन्य टिप्पणी के अनुसार, यह उन्हें कम से कम एक (नॉटिलस) में भी छुपाता है, लेकिन शायद कई जीयूआई फ़ाइल ब्राउज़रों को भी।
ls -al
?
आप वास्तव में एक डॉट को जोड़े बिना लिनक्स में फाइलें छिपा सकते हैं। यह वास्तव में उन्हें नॉटिलस में छिपाता है; एक ls
कमांड लाइन से अभी भी फाइलों सूची जाएगा।
.hidden
उस फ़ोल्डर में एक पाठ फ़ाइल बनाएँ जिसका नाम आप फ़ाइलों को छुपाना चाहते हैं।ls
सूचियों में नहीं ।
क्या आप केवल अपने चित्रमय उपयोगकर्ता इंटरफ़ेस के फ़ाइल प्रबंधक और / या डेस्कटॉप वातावरण से फ़ाइलों को छिपाने की कोशिश कर रहे हैं? यदि ऐसा है, तो केवल एक डॉट के साथ फ़ाइल नाम को उपसर्ग से परे विकल्प हो सकते हैं।
मैं विश्वास है कि केवल अतिरिक्त किसी भी लिनक्स फ़ाइल प्रबंधक से छिपा फ़ाइलों बैकअप फ़ाइलें, यानी उन एक टिल्ड में समाप्त होने वाले हैं ~
या .bak
या जो कुछ भी उनका मानना है कि बैकअप विस्तार है। किसी भी मामले में, आप शायद भाग्य में हैं यदि आप सभी करना चाहते हैं तो फ़ाइल प्रबंधक से बैकअप फ़ाइलों को छिपाएं।
अपनी फ़ाइलों को उन्हें छिपाने के लिए बैकअप एक्सटेंशन न दें या वे गलती से नष्ट हो सकते हैं !!
एक तरफ के रूप में, आप कमांड SetFile -a V [file]
या संपादन का उपयोग करके मैक ओएस एक्स में फाइंडर से फाइलें छिपा सकते हैं /.hidden
लेकिन जाहिर है कि यह कमांड लाइन के ls
प्रोग्राम से फाइल को नहीं छिपाएगा ।
chflags hidden filename
।
यदि आपके पास कुछ प्रोग्रामिंग कौशल हैं और केवल अगर आपको क्या चाहिए तो दृश्य स्थान को अव्यवस्थित करने से रोकने के लिए उपयोगकर्ता पुष्टिकरण के लिए फ़ाइलनाम छिपा रहा है जिसे आप हैक कर सकते हैं!
मैं केवल कमांड लाइन टूल पर विचार करूंगा, क्योंकि वे काफी समान हैं और एकमात्र उपकरण हैं, जिनका लगातार उपयोग किया जाता है।
इस जानकारी को संग्रहीत करने के कई तरीके हैं:
आप चयनित फ़ाइलों में "छिपी" विस्तारित विशेषता को संग्रहीत कर सकते हैं। देखman attr
attr -s hidden -V true your_file
या जैसा कि ऊपर बताया गया है कि आप फ़ाइल में .hidden
फ़ाइल नाम की सूची संग्रहीत कर सकते हैं
महत्वपूर्ण: यह उस बॉक्स से काम नहीं करेगा जिसे आपको तर्क को लागू करना है, स्वच्छ सिस्टम सिर्फ .hidden
फाइलों और hidden
विस्तारित विशेषताओं की अनदेखी करेगा !
इसके अलावा वहाँ मुल्तानी संभव कार्यान्वयन हैं:
यदि आपके पास कुछ ही फाइलें हैं, तो अपनी .bashrc
फाइल में लिखें
alias ls='ls -I filename_1 -I filename_2'
man ls
अधिक जानकारी के लिए।
ऐसा लिखें function ls
जैसे यह छिपी हुई फाइलों को पहचानने और सभी -I
प्रविष्टियों की सूची को इकट्ठा करने के पीछे सभी तर्क को संभालता है , और फिर /bin/ls
उचित रूप से अनदेखे झंडे के साथ निष्पादित
करता है। बहुत श्रमसाध्य कार्य, क्योंकि आपको सभी ls
मापदंडों को ठीक से संभालना होगा।
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
।
यह सबसे अच्छा समाधान है जो मैंने पाया है, अपनी प्रोफ़ाइल में जोड़ें :
alias ls="/bin/ls --color=auto --ignore='*.egg-info' --ignore='__pycache__'"
यदि आपको अधिक पैटर्न की आवश्यकता है तो बस अधिक --ignore
झंडे जोड़ें ।
आजकल आप FUSE लिख सकते हैं जो दिए गए कॉन्फिगर के अनुसार फाइलों को छुपाता है।
यह लेख मुझे विश्वास दिलाता है कि आपको getdir
फ़ंक्शन को ट्विक करने की आवश्यकता है :
getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
यह एक निर्देशिका की सामग्री को पढ़ता है। इस आपरेशन हैopendir()
,readdir()
, ...,closedir()
एक कॉल में अनुक्रम। प्रत्येक निर्देशिका प्रविष्टि के लिए,filldir()
फ़ंक्शन को बुलाया जाना चाहिए।
मैं एक प्रोग्रामर नहीं हूं, लेकिन मुझे लगता है कि एक getdir
(जैसे) .hidden
फ़ाइल में सूचीबद्ध सभी फ़ाइलों को छोड़ दिया जा सकता है । यदि आप इसे सही तरीके से लागू करते हैं तो हर उपकरण (GUI या नहीं) प्रभावित होगा।
आप समूह या अन्य के लिए 'x' परमिट निकालकर किसी निर्देशिका की सामग्री को 'छिपा' सकते हैं chmod go-x directoryname
। यदि आप सटीक पथ जानते हैं, तो आप फ़ाइलों को सूचीबद्ध नहीं कर सकते, हालांकि आप एक फ़ाइल तक पहुंच सकते हैं। यह वैसा नहीं है जैसा आप चाहते हैं।
ध्यान रखें कि डॉटफ़ाइल चीज़ एक सुविधा है, वास्तव में सुरक्षा के लिए फ़ाइल को छिपाने के लिए नहीं, बल्कि फ़ाइल लिस्टिंग के लिए फ़ाइलों के अव्यवस्था को कम करने के लिए। यह ls
और अन्य उपकरणों में बेक किया हुआ है ।