![파일 설명자, 파이프, FIFO, 장치 등의 출력에서 file(1)을 실행할 수 없습니다.](https://linux55.com/image/169059/%ED%8C%8C%EC%9D%BC%20%EC%84%A4%EB%AA%85%EC%9E%90%2C%20%ED%8C%8C%EC%9D%B4%ED%94%84%2C%20FIFO%2C%20%EC%9E%A5%EC%B9%98%20%EB%93%B1%EC%9D%98%20%EC%B6%9C%EB%A0%A5%EC%97%90%EC%84%9C%20%E2%80%8B%E2%80%8Bfile(1)%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
다른 명령의 출력에 대해 이 명령을 실행 하고 싶지만 file(1)
얻을 수 있는 것은
$ file -sL <(echo \#include \<stdio.h\>)
/dev/fd/63: ERROR: (null)
이는 파일 5.04(Red Hat Enterprise Linux Server 버전 6.8)에서는 예상대로 작동하지만 파일 5.14(Wind River Linux 6.0.0.17)에서는 작동하지 않습니다.
답변1
이것은 사용되는 libmagic 라이브러리의 버그입니다 file
.
간단한 해결 방법은 "cat을 아무것도 사용하지 않는 것"입니다.
echo '#! /bin/sh' | file -
cat /path/to/fifo-or-special | file -
이 버그는 다음에서 처음 소개되었습니다.https://github.com/file/file/commit/fb6084e0f08:
commit fb6084e0f08aef8991afcb3eb74168a456601908
Author: Christos Zoulas <[email protected]>
Date: Tue May 28 21:24:31 2013 +0000
don't print a space if there was an error. (from Jan Kaluza)
나중에 해결됐지만오직블록 및 문자 장치의 경우 FIFO에서 작동하지 않습니다.https://github.com/file/file/commit/a9124dcb4e. 하나불완전한Linux의 수정 사항은 <(...)
다음 위치에 있습니다.https://github.com/file/file/commit/adbe541c32.
장치 수리는 FIFO에 복사될 수 있습니다. 답변 끝에 있는 패치를 참조하세요(사이트에서 탭이 분리되므로 수동으로 적용하고 미러 전용 저장소용이라는 점을 기억하세요).
그러나 이것은 여전히 남아 있습니다:
mkfifo fifo; file -s fifo
fifo: writable, no read permission
FIFO에 읽기 액세스 권한이 있기 때문에 어리 석고 잘못되었습니다.
이 문제를 해결한다는 것은 libmagic의 절반을 다시 작성하거나 끔찍하게 엉망인 ifdef 스파게티와 특수 사례를 추가하는 것을 의미합니다.
diff --git a/src/fsmagic.c b/src/fsmagic.c
index 5204f20d..20b7f438 100644
--- a/src/fsmagic.c
+++ b/src/fsmagic.c
@@ -270,8 +270,10 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb)
/* TODO add code to handle V7 MUX and Blit MUX files */
#ifdef S_IFIFO
case S_IFIFO:
- if((ms->flags & MAGIC_DEVICES) != 0)
+ if((ms->flags & MAGIC_DEVICES) != 0) {
+ return 0;
break;
+ }
if (mime) {
if (handle_mime(ms, mime, "fifo") == -1)
return -1;