Linux에 / dev / null에 해당하는 디렉토리가 있습니까?


84

응용 프로그램을 구성 할 때 응용 프로그램에서 /dev/null빈 파일을 읽으려면 구성 파일로 자주 사용할 수 있습니다 . 그러나 응용 프로그램이 디렉토리에서 파일 목록을 읽는 경우이 트릭을 사용할 수 없습니다. 읽을 빈 디렉토리를 제공해야합니다.

궁금한 점이 있습니다. Linux에는 이러한 용도로 사용할 수있는 기본 빈 디렉토리가 있습니까? OpenSSH가 잠시 동안 / var / empty를 사용했다는 것을 알고 있습니다. 물론 빈 디렉토리를 직접 만들 수는 있지만 FHS가 이에 대한 표준 디렉토리를 지정했을까요?


8
내 시스템에서 /var/empty비어 있지 않지만이라는 폴더가 포함되어 sshd있으므로 사용하고 싶지 않을 것입니다.
knub

12
요점 :의 특별한 측면은 쓰는/dev/null 것만 큼 독해 하는 것이 아닙니다 . 쓰여진 데이터가 /dev/null사라집니다. 따라서 동등한 디렉토리가 mv yourfile /dev/empty파일을 삭제 하는 장소 입니다.
와일드 카드

4
@Wildcard 나는 당신이 의미하는 것으로 가정합니다 mv yourfile /dev/empty/. 그렇게 mv yourfile /dev/empty하면 특수 디렉토리를 바꾸려고합니다.
Rhymoid

6
@ 줄스 아니, 그렇지 않습니다. 당신은 아무것도를 초기화 할 수 /dev/nulldd때문에 dd그것도 하나의 바이트를 쓴 것 전에 EOF를 받게됩니다. 나는 당신이 생각하고 있다고 생각합니다 /dev/zero. 이것은 종종 특정 수의 0으로 무언가를 채우거나 생성하는 데 사용됩니다.
Micheal Johnson

2
@MichealJohnson 네 말이 맞아 내 실수, /dev/null와 혼동 했다 /dev/zero.
Jules

답변:


66

FHS는 더 "표준"빈 디렉토리를 제공하지 않습니다.

Linux 시스템에서 디렉토리를 제공하는 것이 일반적 /var/empty이지만이 디렉토리는 FHS에 정의되어 있지 않으며 실제로 비어 있지 않을 수 있습니다. 대신 특정 데몬이 여기에 빈 디렉토리를 만듭니다. 예를 들어, openssh는 /var/empty/sshd권한 분리를 위해 빈 디렉토리 를 사용합니다 .

빈 디렉토리가 일시적인 경우, /run또는 의 하위 디렉토리로 빈 디렉토리를 직접 만들 수 있습니다 /tmp. 프로그램 외부 에서이 작업을 수행하는 경우이 작업을 수행 mktemp -d하거나 mkdtemp(3)프로그램 내부 에서 C 함수를 사용할 수 있습니다. 항상 빈 디렉토리가 있어야 한다면 /var/emptyopenssh처럼 디렉토리를 작성하는 것이 좋습니다.

이 유스 케이스의 경우, 디렉토리를 작성하는 /tmp것이 가장 적합하지만 실제로는 디렉토리를 어디에 두는지는 중요하지 않습니다.


5
하위 디렉토리를 작성하는 것은 권장하지 않습니다. 하위 디렉토리 /var/empty를 사용하는 모든 프로그램 (예 : 기본 구성의 OpenSSH)에서는 실제로 비어있을 것으로 예상 할 수 있습니다. (이것은 /var/empty/sshd이상한 RedHat-ism으로 보인다; 데비안은 /var/run/sshd대신 사용한다.)
Ilmari Karonen

3
@IlmariKaronen 연결 한 코드 비트는 OpenSSH /var/empty가 비어있을 것으로 예상 되는 어설 션을 지원하지 않습니다 . 다른 곳에서 찾을 수 있습니까?
Michael Hampton

2
@IlmariKaronen 흠, 그 문서는 구식입니다. 참조 /var/empty하지만 코드는 실제로 사용합니다 /var/empty/sshd. 다시 시도하십시오. :)
Michael Hampton

1
@IlmariKaronen 흠. 이제 chroot () 호출을 수행하는 소스를 실제로 본 후에 당신이 옳다고 생각합니다. Red Hat이 다운 스트림 보정을 유지해야한다는 openssh에 명백한 어리석은 결함이 있다는 것이 놀랍습니다.
Michael Hampton

2
나는 그것이 어떻게 "멍청한 결함"인지 알지 못합니다. 표준 루트 위치에 chroot jail으로 사용하기 위해 빈 루트 소유 디렉토리를 보장하는 것은 나에게 완벽하게 좋은 생각 인 것 같습니다. 물론 RedHat은 그 아래에 하위 디렉토리를 만들어 모든 사람을 위해 파멸시켜야했습니다. 결과적으로, /var/empty주어진 시스템에서 의미를 확신 할 수 없기 때문에 휴대용 코드에 대한 권장 사항은 아무것도 사용 하지 않을 것입니다. 만들기 자신의 빈 디렉토리 아래에 예 /var/run데비안하는 것처럼, 더 합리적인 것 같다.
Ilmari Karonen

37

mktemp -d기본적으로에서 보안 권한이있는 비어있는 새 임시 디렉토리를 작성하는 데 사용할 수 있습니다 /tmp/. 이 유틸리티는에 새 디렉토리의 경로를 출력 STDOUT하므로 셸에서 유용합니다.

어쨌든 시스템 단위 파일보다 이식성이 뛰어납니다.


예, 가능하지만 해당 디렉토리를 구성 파일에 지정해야하는 경우 비실용적입니다. 당신은 그것에 대한 영구적 인 dir을 원할 것입니다.
roelvanmeer


11

서비스의 경우 systemd는 해당 서비스 에 대한 네임 스페이스 외부의 프로세스와 공유하지 않고 초기에 비어 있어야하는 PrivateTmp개인 /tmp/var/tmp디렉토리 를 작성 하는 옵션 을 제공합니다 .

[Service]
ExecStart=...
PrivateTmp=yes 

7
이 프로그램은 다른 임시 파일을 만들 수 있으므로 /tmp네임 스페이스로 인해 비어 있다고 가정 할 수 없습니다 .
Michael Hampton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.