Soru Linux'ta / dev / null dizin eşdeğeri var mı?


Bir uygulamayı yapılandırırken sık sık kullanabilirsiniz /dev/null Uygulamanın boş bir dosyayı okumasını istiyorsanız yapılandırma dosyası olarak. Ancak, uygulama bir dizindeki dosyaların listesini okursa, bu numarayı kullanamazsınız. Okuması için boş bir dizin vermeniz gerekir.

Merak ediyordum: Linux'un bu tür amaçlar için kullanılabilecek bir varsayılan boş dizini var mı? OpenSSH'nin bir süredir / var / empty olduğunu biliyorum ve elbette boş bir direk yaratabilirim ama belki de FHS bunun için standart bir dizin belirledi?


72
2017-12-07 09:04


Menşei


Benim sistemimde /var/empty boş değil, ama adında bir klasör içeriyor sshdYani muhtemelen bunu kullanmak istemezsiniz. - knub
Sadece bir nokta: özel yönü /dev/null için çok fazla değil okuma olduğu gibi yazı.  İçin yazılan veriler /dev/null Sadece kaybolur. Yani, bir dizin eşdeğer bir yer olurdu mv yourfile /dev/empty dosyanızın silinmesine neden olur. - Wildcard
@Wildcard demek istediğimi varsayalım mv yourfile /dev/empty/. Yaparsan mv yourfile /dev/emptyÖzel dizini değiştirmeye çalışıyorsunuz. - Rhymoid
@Jules Hayır, öyle değil. İle bir şey başlatamazsınız /dev/null ve dd Çünkü dd Tek bir bayt bile yazmadan önce bir EOF alacaktır. Düşünüyorum sen /dev/zeroGenellikle bir şeyi biriyle doldurmak veya belirli bir sayıda sıfır oluşturmak için kullanılır. - Micheal Johnson
@MichealJohnson haklısın, benim hatam, kafam karıştı /dev/nullile /dev/zero. - Jules


Cevaplar:


FHS "standart" boş dizin sağlamaz.

Linux sistemlerinin bir dizin sağlaması yaygındır. /var/emptyancak bu dizin FHS'de tanımlanmamıştır ve aslında boş bırakılamaz. Bunun yerine, belirli daemonlar kendi boş dizinlerini burada oluşturacaklar. Örneğin, openssh boş dizini kullanır /var/empty/sshd ayrıcalık ayrımı için.

Boş bir dizine olan ihtiyaç geçici ise, alt dizin olarak kendiniz boş bir dizin oluşturabilirsiniz. /run veya /tmp. Bunu programın dışında yapıyorsanız, kullanabilirsiniz mktemp -d Bunun için veya mkdtemp(3) C programınızın içinde çalışır. Her ne kadar her zaman Mevcut olmak için boş dizine ihtiyacınız var, altında bir tane oluşturmayı düşünün /var/empty openssh yaptığı gibi.

Bu kullanım durumu için, altında bir dizin oluşturma /tmp muhtemelen en iyi uyumdur, ancak pratikte onu koyduğunuz yerden çok önemli değildir.


62
2017-12-07 09:11



Alt dizinleri oluşturmayı öneriyorum /var/emptyÇünkü onu kullanan herhangi bir program (OpenSSH gibi) varsayılan yapılandırma) aslında boş olmasını bekleyebilir. ( /var/empty/sshd şey garip bir RedHat-ism gibi görünüyor; Debian kullanır /var/run/sshd yerine.) - Ilmari Karonen
@IlmariKaronen Bağladığınız kodun bir kısmı, OpenSSH'nin beklediği iddiasını desteklemiyor. /var/empty boş olmak. Bunun için bakabileceği başka bir yer var mı? - Michael Hampton♦
@IlmariKaronen Hm, bu belge güncel değil. İfade eder /var/empty ama kod aslında kullanır /var/empty/sshd. Tekrar deneyin. :) - Michael Hampton♦
@ImmariKaronen Hmm. Şimdi doğru olduğunu düşünüyorum, chroot () çağrısı yapan kaynağa baktıktan sonra. Açıkçası bu kadar açık bir aptallık olacağına şüphe duyuyorum, açık ki, Red Hat'in aşağı doğru bir düzeltme yapması gerekecek. - Michael Hampton♦
"Aptal bir kusur" un nasıl göründüğünü görmüyorum - standart bir lokasyonda, köklü bir kök dizinine sahip olmak, chroot hapishanesi olarak kullanmak benim için mükemmel bir fikir gibi görünüyor. Tabii ki, RedHat alt dizinleri oluşturarak herkes için onu mahvetmek zorunda kaldı. Sonuç olarak, portatif kod için tavsiyem kullanılmayacaktı /var/empty Herhangi bir şey için, herhangi bir sistemdeki semantiklerinden emin olamayacağınız için. Kendi boş dizininizi oluşturun örn. altında /var/runDebian'ın yaptığı gibi, daha mantıklı görünüyor. - Ilmari Karonen


Kullanabilirsiniz mktemp -d varsayılan olarak güvenli izinlerle yeni bir boş geçici dizin oluşturmak için /tmp/. Yardımcı program yeni yönetmenin STDOUTbu yüzden kabukta faydalıdır.

Zaten bir systemd birim dosyasından daha taşınabilir.


37
2017-12-07 11:04



Evet, yapabilirdiniz, ancak bu dizinin bir yapılandırma dosyasında belirtilmesi zorunlu değildir. Bunun için kalıcı bir direk isterdin. - roelvanmeer


Bu Unix sorusu dahil olmak üzere bir "kara delik" dizini oluşturmak için bazı önerileri vardır nullfs FUSE dosya sistemi.


19
2017-12-07 21:37



Mktemp / mkdtemp cevabının bu mükemmel cevap olduğunda neden bu kadar ağır bir şekilde kışkırtıldığını bilmiyorum. nullfs / dev / null eşdeğeridir. - chx


Hizmetler için systemd seçeneği sağlar PrivateTmp özel oluşturmak /tmp ve /var/tmp Bu hizmetin ad alanı dışındaki işlemler tarafından paylaşılmayan ve boş olması gereken dizinler (başlangıçta).

[Service]
ExecStart=...
PrivateTmp=yes 

11
2017-12-07 10:20



Program diğer geçici dosyalar oluşturabilir, bu yüzden kabul edemezsiniz. /tmp sadece isimlendirildiği için boş olacak. - Michael Hampton♦