Linux'ta / dev / null dizini var mı?


84

Bir uygulamayı yapılandırırken, uygulamanın /dev/nullboş bir dosya okumasını istiyorsanız, genellikle yapılandırma dosyası olarak kullanabilirsiniz . Ancak, uygulama bir dizindeki dosyaların listesini okursa, bu numarayı kullanamazsınız. Okumak için boş bir dizin vermeniz gerekir.

Merak ediyordum: Linux böyle amaçlar için kullanılabilecek varsayılan bir boş dizine sahip mi? OpenSSH'nin bir süredir / var / empty kullandığını biliyorum ve elbette kendimde boş bir dizin oluşturabilirim, ancak belki de FHS bunun için standart bir dizin belirledi?


8
Sistemimde /var/emptyboş değil, ancak adı verilen bir klasör var sshd, bu yüzden muhtemelen bunu kullanmak istemiyorsunuz.
16'da

12
Sadece bir nokta: Özel yanı, yazı/dev/null için olduğu gibi okumak için pek değildir . /dev/nullSadece yazılmış veriler kayboluyor. Dolayısıyla, bir dizin eşdeğeri mv yourfile /dev/empty, dosyanızı silmenize neden olacak bir yer olacaktır.
Joker

4
@Wildcard Ben demek istediğini düşünüyorum mv yourfile /dev/empty/. Bunu yaparsanız mv yourfile /dev/empty, özel dizini değiştirmeye çalışıyorsunuzdur.
Rhymoid

6
@Jules Hayır, değil. Hiçbir şeyi başlatamazsınız /dev/nullve ddçünkü ddtek bir bayt yazmadan önce bir EOF alacaksınız. Bence bir şeyi /dev/zerodoldurmak ya da belirli sayıda sıfır üretmek için kullanılan bir şey olduğunu düşünüyorsunuz .
Micheal Johnson,

2
Haklısın @MichealJohnson, benim hatam, ben şaşkın ediyorum /dev/nullile /dev/zero.
Jules,

Yanıtlar:


66

FHS hayır "standart" boş bir dizin sağlar.

Linux sistemlerinin bir dizin sağlaması yaygındır /var/empty, ancak bu dizin FHS'de tanımlanmamıştır ve aslında boş olmayabilir. Bunun yerine, bazı ödüller burada kendi boş dizinlerini oluşturacak. Örneğin openssh, /var/empty/sshdayrıcalık ayrımı için boş dizini kullanır .

Boş bir dizine olan gereksiniminiz geçici ise, /runya da alt dizini olarak kendiniz boş bir dizin oluşturabilirsiniz /tmp. Bunu programın dışında yapıyorsanız, bunun mktemp -diçin kullanabilir veya mkdtemp(3)programınızın içindeki C işlevini kullanabilirsiniz . Her zaman boş dizine ihtiyaç duyuyorsanız da, /var/emptyopenssh gibi bir tane oluşturmayı düşünün .

Bu kullanım için, altında bir dizin oluşturmak /tmpmuhtemelen en uygun seçenektir, ancak pratikte nereye koyduğunuzun önemi yoktur.


5
Altında alt dizinler oluşturmanızı tavsiye etmem /var/empty, çünkü onu kullanan herhangi bir program ( varsayılan konfigürasyonundaki OpenSSH gibi ) aslında boş olmasını bekleyebilir. ( /var/empty/sshdŞey garip bir RedHat-ism gibi görünüyor; Debian /var/run/sshdbunun yerine kullanıyor .)
Ilmari Karonen

3
@IlmariKaronen Bağladığınız kod biti, OpenSSH'nin /var/emptyboş olmasını beklediği iddiasını desteklemiyor . Bunun için arayabilecek başka bir yer var mı?
Michael Hampton

2
@IlmariKaronen Hm, bu belge güncel değil. Bu ifade eder, /var/emptyancak kod gerçekten kullanır /var/empty/sshd. Tekrar deneyin. :)
Michael Hampton

1
@IlmariKaronen Hmm. Şimdi haklı olduğunuzu düşünüyorum, aslında chroot () çağrısını yapan kaynağa baktıktan sonra. Openssh'da böylesine aptalca bir kusur olacağının şaşırtıcı olduğunu, Red Hat'in aşağı yönde bir düzeltme yapması gerektiğini şaşırtıcı buluyorum.
Michael Hampton

2
Bunun nasıl "aptal bir kusur" olduğunu anlamıyorum - standart bir lokasyonda garantili bir boş kök dizinine sahip olmak, chroot hapishanesi olarak kullanmak benim için mükemmel bir fikir gibi gözüküyor. Elbette RedHat, alt dizinler oluşturarak herkes için onu mahvetmek zorunda kaldı. Sonuç olarak, taşınabilir kod /var/emptyiçin önerim, herhangi bir sistemde anlambildiğinden emin olamadığınızdan hiçbir şey için kullanılmayacaktı . Kendi boş dizini oluşturmak, örneğin /var/runDebian'ın yaptığı gibi, daha mantıklı geliyor.
Ilmari Karonen

37

mktemp -dVarsayılan olarak, güvenli izinlere sahip yeni bir boş geçici dizin oluşturmak için kullanabilirsiniz /tmp/. Yardımcı program yeni yönetmen yolunu açıklayacaktır STDOUT, bu nedenle kabukta kullanışlıdır.

Zaten sistemd birim dosyasından daha taşınabilir.


Evet, olabilir, ancak bu dizinin bir yapılandırma dosyasında belirtilmesi gerekiyorsa, bu pratik değildir. Bunun için kalıcı bir direk istersiniz.
Roelvanmeer


11

Servisler için systemd, o servisin isim alanı dışındaki işlemler tarafından paylaşılmayan ve başlangıçta boş olması gereken PrivateTmpözel /tmpve /var/tmpdizinler oluşturma seçeneği sunar .

[Service]
ExecStart=...
PrivateTmp=yes 

7
Program başka geçici dosyalar oluşturabilir, bu nedenle /tmpyalnızca boş olduğundan dolayı boş bırakılacağını kabul edemezsiniz .
Michael Hampton
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.