Nokta kullanmadan Linux'ta dosyaları gizle


32

Windows'ta mümkün olduğundan Linux'ta nokta kullanmadan dosyaları gizlemek istiyorum.

Bunu yapmanın bir yolu var mı?


6
Dosyaları gizleme (şaşırtma) güvenlik yerine
geçmez

Yanıtlar:


26

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.


26

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.


bu ilginç. Nautilus veya diğer GUI araçlarında da mı çalışıyor? Dosyaları görebiliyor ls -almusunuz?
Jakuje

1
kodunun sonunda '' işareti yok. (ve artıların nereden geldiğini merak ediyorsanız: askubuntu.com/a/713591/15811 ) ;-)
Rinzwind

14

Nokta eklemeden Linux'ta dosyaları gizleyebilirsiniz. Bu aslında onları Nautilus'ta gizler; lskomut satırından bir an hala dosyaları listeler.

  1. .hiddenDosyaları gizlemek istediğiniz klasörde adlandırılmış bir metin dosyası oluşturun .
  2. Dosyaya, her satırda bir tane olmak üzere gizlemek istediğiniz dosya veya klasörlerin adlarını ekleyin.
  3. Dosya tarayıcınızı yenileyin.

2
debian 5.0'da "ls" ile burada çalışmıyor. Nautilus veya yunuslara özgü mü yoksa ...?
Tim Haegele

2
Dosyalar Nautilus'ta gizlidir; lslistelerde değil .
To Do

1
sadece harika bir çözüm! :)
Merianos Nikos,

4

Linux'ta dosyaları gizlemek için bir nokta kullanılır ve bunlar değiştirilemez.

Ancak, kullanıcıların verilen klasöre / dosyaya erişmelerini engellemek için dosya izinleriyle oynayabilirsiniz. Komutla deneme yapmayı deneyin chmod.


2

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 .


3
OS X'te ayrıca dosyaları da gizleyebilirsiniz chflags hidden filename.
slhck

2

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:

  1. "Gizli" genişletilmiş özniteliği seçili dosyalarda saklayabilirsiniz. Görmekman attr

      attr -s hidden -V true your_file
    
  2. 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:

  1. Ç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.

  2. 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 .

  3. 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.
Melab

2

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 .


Birkaç dosyadan daha fazlasının gizlenmesi gerekiyorsa, bu çok, çok uzun bir dizeye yol açacaktır. Birden fazla dosya için, bunu yapmanın daha etkili yolları vardır, ancak birkaç dosya için yine de iyi bir çözümdür.
JW0914

2

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 operasyon opendir(), readdir(), ..., closedir()bir çağrıda dizisi. Her bir dizin girişi için filldir()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.


1

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.


Ve aynı zamanda doğru değildir. Bir dizinden okuma izinlerinin kaldırılması içeriğini listelemenizi engellerken, yürütme izninin kaldırılması dizine erişimi engeller. Bir dizini yürütme izniniz olmadığında, bunun ötesindeki hiçbir şeye erişiminiz olmaz. İçinde tam hakları olan bir alt dizin olsa ve onun yolunu bilsen bile.
Bachsau
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.