Podczas konfigurowania aplikacji często można użyć /dev/null
jako pliku konfiguracyjnego, jeśli aplikacja ma czytać pusty plik. Ale jeśli aplikacja odczyta listę plików z katalogu, nie można użyć tej sztuczki. Musisz odczytać pusty katalog.
Zastanawiałem się: czy Linux ma domyślny pusty katalog, którego można użyć do takich celów? Wiem, że OpenSSH używał / var / empty przez jakiś czas i oczywiście mogę sam stworzyć pusty katalog, ale może FHS określił do tego standardowy katalog?
/var/empty
nie jest pusty, ale zawiera folder o nazwiesshd
, więc prawdopodobnie nie chcesz go używać./dev/null
nie dotyczy zarówno czytania, jak i pisania. Dane zapisane po/dev/null
prostu znikają. Odpowiednikiem katalogu byłoby miejsce, w którymmv yourfile /dev/empty
spowodowałoby to usunięcie pliku.mv yourfile /dev/empty/
. Jeśli takmv yourfile /dev/empty
, próbujesz zastąpić specjalny katalog./dev/null
idd
ponieważdd
dostanie EOF, zanim zostanie nawet napisany jeden bajt. Myślę, że myślisz o tym/dev/zero
, co jest często używane do wypełnienia czegoś lub wygenerowania określonej liczby zer./dev/null
się/dev/zero
.Odpowiedzi:
FHS nie zapewnia „standard” pusty katalog.
Systemy Linux często udostępniają katalog
/var/empty
, ale ten katalog nie jest zdefiniowany w FHS i może nie być pusty. Zamiast tego niektóre demony utworzą tutaj swoje własne puste katalogi. Na przykład openssh używa pustego katalogu/var/empty/sshd
do rozdzielenia uprawnień.Jeśli twoja potrzeba pustego katalogu jest przejściowa, możesz sam stworzyć pusty katalog jako podkatalog
/run
lub/tmp
. Jeśli robisz to poza programem, możeszmktemp -d
do tego użyć lub użyćmkdtemp(3)
funkcji C w swoim programie. Chociaż jeśli zawsze potrzebujesz, aby obecny był pusty katalog, rozważ utworzenie go poniżej,/var/empty
tak jak robi to openssh.W tym przypadku użycie katalogu poniżej
/tmp
jest prawdopodobnie najlepszym rozwiązaniem, choć w praktyce nie ma większego znaczenia, gdzie go umieścisz.źródło
/var/empty
, ponieważ wszelkie programy, które go używają (takie jak OpenSSH w domyślnej konfiguracji ) mogą oczekiwać, że będą faktycznie puste. (/var/empty/sshd
Wygląda na to, że jest to dziwny RedHat-ism;/var/run/sshd
zamiast tego używa Debian .)/var/empty
że będzie pusty. Czy jest jeszcze coś takiego?/var/empty
ale kod faktycznie używa/var/empty/sshd
. Spróbuj ponownie. :)/var/empty
do niczego używać , ponieważ nie możesz być pewien jego semantyki w danym systemie. Tworzenie własnego pustego katalogu np. Pod/var/run
, podobnie jak Debian, wydaje się bardziej sensowne.Możesz użyć
mktemp -d
do utworzenia nowego pustego katalogu tymczasowego z bezpiecznymi uprawnieniami, domyślnie w/tmp/
. Narzędzie wyświetli ścieżkę nowego kataloguSTDOUT
, więc jest przydatne w powłoce.W każdym razie jest bardziej przenośny niż systemowy plik jednostkowy.
źródło
To pytanie w Uniksie zawiera sugestie dotyczące utworzenia katalogu „blackhole”, w tym systemu plików FUSE nullfs .
źródło
Dla usług systemd zapewnia opcję
PrivateTmp
tworzenia prywatnych/tmp
i/var/tmp
katalogów, które nie są współużytkowane przez procesy poza przestrzenią nazw dla tej usługi i które powinny być puste (początkowo).źródło
/tmp
, że będzie pusty tylko dlatego, że został nazwany przestrzenią nazw.