Windows'ta mümkün olduğundan Linux'ta nokta kullanmadan dosyaları gizlemek istiyorum.
Bunu yapmanın bir yolu var mı?
Windows'ta mümkün olduğundan Linux'ta nokta kullanmadan dosyaları gizlemek istiyorum.
Bunu yapmanın bir yolu var mı?
Yanıtlar:
Yapamazsın. Dosya sistemlerinin gizli ayarları işleme biçiminde temel bir fark vardır. Windows'ta, dosya sistemi, dosya için "gizli" ve "sistem" (her ikisi de gizli dosya türlerinden oluşan) dahil olmak üzere meta verilerde çeşitli özellikler depolar. Ortak * nix dosya sistemlerinde, böyle bir öznitelik saklanmaz. Bunun yerine, bilgilerin dosya adı gibi başka bir yere konması gerekir. Kongre bu nedenle ile başlayan dosyalar. (ve sisteminize bağlı olarak, belki de _ gibi diğerleri) varsayılan olarak çoğu araç tarafından gösterilmez.
Bu tamamen kolaylık sağlamak içindir. bir dosya adı başlatmak, "kullanıcı muhtemelen bunu her zaman görmek istemez" den başka bir şey ifade etmez. Bildiğinizden emin olmak için, örneğin ls -atüm dosyaları çalıştıran çalışan gösterecektir.
Bir dosyanın Linux'taki listelerinizi karıştırmasını istemiyorsanız, bir nokta ile başlaması için yeniden adlandırmanız gerekir (Bonus: taşınabilir bir cihazdan bahsediyorsanız OS X için de işe yarar). Kullanıcıların bir dosya bulmasını istemiyorsanız, yanlış yapıyorsunuz demektir - izinler bunun için.
Unix izinleri, dizinlerle ilgili oldukları için, insanları genellikle şaşırtıyor ve belki de daha iyi anlamak size yardımcı olacaktır. "Okuma" ve "yürütme" izinleri ( rve x), dizinler için dosyalar için olduğundan farklı bir şey anlamına gelir. Dizinler için yürütme xizni, dizindeki inode'lara erişip erişmediğinizi belirler. Okuma rizni, dizinin listesine erişip erişemeyeceğinizi belirler. İşlevsel olarak, xkullanıcının bir dizinde bir şeyler yapmasına rizin verirken, izin onların içinde ne olduğunu görmelerine izin verir. Bunlar farklı ve fark kafa karıştırıcı olabilir. Bir örneğe bakalım:
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 ..
Bu nedenle, çalıştırmadan dosyaları hala listeleyebildiğime dikkat edin (ls dosya özelliklerini alamadığından bir hata gösteriyor olsa da), ancak dizine geçemiyorum veya içindeki dosyaları okuyamıyorum. Okunmadan dosyaları listeleyemem, ancak yine de dizine geçebilirim ve bir dosyanın adını biliyorsanız yine de erişebilirim.
Ancak, okuma izninin kaldırılmasının yalnızca gizlilik ile güvenlik sağladığını unutmayın. Kullanıcı dosya adını tahmin ederse içeriğini okuyabilir.
Bu, sorunuzla gerçekten alakalı olmayabilir, sadece dizin izinlerini anladığınızdan emin olmak istedim.
Dizinde, .hiddengizlenecek dosyaların adlarını içeren bir dosya oluşturun (her satırda bir ad).
Ardından aşağıdakileri bilgisayarınıza ekleyin ~/.bashrc:
ls () {
if [ -f .hidden ]; then
declare GLOBIGNORE="$GLOBIGNORE:.*:$(tr '\n' ':' < .hidden)"
ls "$@"
fi
}
Şimdi lskomutunuz bu dosyaları listelemiyor.
Ben __pycache__ve __init__.pydosyalarımı gizlemek için bu tekniği kullanıyorum .
EDIT: başka bir yoruma göre bu, aynı zamanda en az bir (Nautilus), ama muhtemelen birkaç GUI dosya tarayıcılarında da gizler.
ls -almusunuz?
Nokta eklemeden Linux'ta dosyaları gizleyebilirsiniz. Bu aslında onları Nautilus'ta gizler; lskomut satırından bir an hala dosyaları listeler.
.hiddenDosyaları gizlemek istediğiniz klasörde adlandırılmış bir metin dosyası oluşturun .lslistelerde değil .
Dosyaları yalnızca grafik kullanıcı arabiriminizin dosya yöneticisinden ve / veya masaüstü ortamından gizlemeye mi çalışıyorsunuz? Öyleyse, dosya adını bir nokta ile basitçe ön eklemenin ötesinde seçenekler olabilir.
Ben inanıyorum herhangi bir Linux dosya yöneticisi tarafından gizli sadece ek dosyaları yedekleme dosyaları, bir tilde biten yani olanlardır ~ya .bakda yedekleme uzantısıdır inanıyoruz neyse ya. Her durumda, tek yapmanız gereken yedekleme dosyalarını dosya yöneticisinden gizlemektir.
Dosyalarınızı gizlemek için bir yedekleme uzantısı vermeyin, aksi takdirde yanlışlıkla silinmeleri !!
Bir kenara, Mac OS X'teki Finder'dan dosyaları komut SetFile -a V [file]veya düzenlemeyi kullanarak /.hiddengizleyebilirsiniz, ancak bu açıkça komut dosyasını lsprogramdan gizlemeyecektir .
chflags hidden filename.
Bazı programlama becerileriniz varsa ve yalnızca ihtiyacınız olan şey, kullanıcının rahatlığı için görsel alanı karıştırmamak için dosya adlarını gizlemekse, bunu kesebilirsiniz!
Sadece komut satırı araçlarını dikkate alacağım, çünkü bunlar oldukça tekdüze ve sürekli kullanılan tek araç benim.
Bu bilgileri saklamanın birçok yolu vardır:
"Gizli" genişletilmiş özniteliği seçili dosyalarda saklayabilirsiniz. Görmekman attr
attr -s hidden -V true your_file
Veya yukarıda belirtildiği gibi dosya adı listesini .hiddendosyada saklayabilirsiniz.
Önemli: Bu mantık uygulamanız gereken kutunun dışında çalışmayacak, temiz sistemler sadece .hiddendosyaları ve hiddengenişletilmiş öznitelikleri görmezden gelecek !
Ayrıca muliple olası uygulamalar var:
Çok az dosyanız varsa, .bashrcdosyanızı yazın
alias ls='ls -I filename_1 -I filename_2'
man ls daha fazla bilgi için.
function lsGizli dosyaları tanıma ve tüm -Igirişlerin bir araya getirme listesi ve ardından /bin/lsuygun yoksayma işaretleriyle çalıştırma işleminin
arkasındaki tüm mantığı işlediği şekilde yazın . Çok zahmetli bir iş, çünkü tüm lsparametreleri doğru şekilde kullanmak zorundasınız .
Coreutils kaynaklarını alın
git clone git://git.sv.gnu.org/coreutils
veya
git clone git://git.suckless.org/sbase
Gizli dosyalarınızı uygulamanızla başa çıkmanız için gereken yolu kullanın. Ve içine koyPATH
5 dakikadan daha az bir sürede, en az kaynaksız kaynakları kullanarak hackledim ve diff şöyle:
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.cyalan içinde srcdeğil kök dizin, ve hiçbir işlevi yoktur lsdiriçinde ls.c.
Bu bulduğum en iyi çözüm, profiline ekle :
alias ls="/bin/ls --color=auto --ignore='*.egg-info' --ignore='__pycache__'"
Daha fazla desene ihtiyacınız varsa, sadece daha fazla --ignorebayrak ekleyin .
Günümüzde , verilen config'e göre dosyaları gizleyen FUSE yazabilirsiniz .
Bu makale bana getdirişlevi ince ayar yapmanız gerektiğine inanmamı sağlıyor :
getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
Bu bir dizinin içeriğini okur. Bu operasyonopendir(),readdir(), ...,closedir()bir çağrıda dizisi. Her bir dizin girişi içinfilldir()işlev çağrılmalıdır.
Programcı değilim ama birinin getdir(örn.) .hiddenDosyasında listelenen tüm dosyaları atlamayı bırakabileceğini hayal ediyorum . Bunu doğru uygularsanız, her araç (GUI veya değil) etkilenir.
Bir dizinin içeriğini 'x' grubunun izinlerini alarak ya da diğerlerini alarak 'gizleyebilirsiniz' chmod go-x directoryname. Tam yolu biliyorsanız, bir dosyaya erişebilseniz de artık dosyaları listeleyemezsiniz. Bu istediğin gibi gelmiyor.
Dotfile olayının gerçekten güvenlik uğruna dosyayı gizlemek için değil, dosya listeleme sırasında dosyaların kargaşasını azaltmak için de bir kolaylık olduğunu unutmayın. Pişirilmiş lsve diğer aletler.