파일 설명자, 파이프, fifo, 장치 등의 출력에서 file (1)을 실행할 수 없습니다.

이완 코

file(1)다른 명령의 출력 에서 명령 을 실행하고 싶지만 내가 얻는 것은

$ file -sL <(echo \#include \<stdio.h\>)
/dev/fd/63: ERROR: (null)

이는 file-5.04 (Red Hat Enterprise Linux Server 릴리스 6.8)에서 예상대로 작동하지만 file-5.14 (Wind River Linux 6.0.0.17)에서는 작동하지 않습니다.

빌리 삼촌

file사용 중인 libmagic 라이브러리의 버그입니다 .

간단한 해결 방법은 "고양이를 쓸모 없게 사용"하는 것입니다.

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)

그런 다음 수정되었지만 https://github.com/file/file/commit/a9124dcb4e의 FIFO가 아닌 블록 및 문자 장치 에만 해당됩니다 . Linux 불완전한 수정 사항 https://github.com/file/file/commit/adbe541c32에 있습니다.<(...)

장치에 대한 수정 사항은 FIFO에 대해 복제 될 수 있습니다. 답변 끝에있는 패치를 참조하십시오 (이 사이트는 탭을 엉망으로 만들기 때문에 직접 적용하고 MIRROR ONLY repo에 위배됩니다).

그러나 여전히 남아 있습니다.

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;

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

유닉스 실행 파일의 출력을 저장할 수 없습니다.

분류에서Dev

WSL bash의 배치 파일에서 Homebrew 앱을 실행할 수 없습니다 (명령을 찾을 수 없음).

분류에서Dev

명령이 이미 실행 된 후 명령의 출력을 파일에 저장할 수 있습니까?

분류에서Dev

명령이 이미 실행 된 후 명령의 출력을 파일에 저장할 수 있습니까?

분류에서Dev

실행 된 명령의 출력을 파일 C # 콘솔 애플리케이션에 저장할 수 없습니다.

분류에서Dev

설치 실패-바이너리 파일을 실행할 수 없습니다.

분류에서Dev

Windows 8.1은 명령 프롬프트 깜박임없이 배치 파일을 실행할 수 없습니다.

분류에서Dev

아파치에서 PHP를 실행할 수 없습니다.이 명령을 실행하여 PHP로 아파치를 설정했습니다.

분류에서Dev

관리자가 아닌 파일 이름에서 '.Move'로 실행 파일을 실행할 수 없습니다.

분류에서Dev

별도의 홈 파티션에서 파일을 실행할 수 없습니다.

분류에서Dev

wampserver를 설치 한 후 PHP 파일을 실행할 수 없습니다. 로컬 호스트 등을 실행할 수 있지만

분류에서Dev

wampserver를 설치 한 후 PHP 파일을 실행할 수 없습니다. 로컬 호스트 등을 실행할 수 있지만

분류에서Dev

이전 명령의 출력을 파일에 저장할 수 있습니까?

분류에서Dev

단일 .bat 파일에서 두 개의 .sql을 실행할 수 없습니다.

분류에서Dev

Windows 7에서 실행 한 직후 배치 파일을 저장할 수 없습니다.

분류에서Dev

extendscript .jsx 파일에서 실행 파일을 호출 할 수 없습니다.

분류에서Dev

Server 2012에서 배치 파일을 실행할 수 없습니다.

분류에서Dev

intellij 2016에서 Java 스크래치 파일을 실행할 수 없습니다.

분류에서Dev

Node.js Typescript 프로젝트를 실행할 수 없습니다. TypeError [ERR_UNKNOWN_FILE_EXTENSION] : /app/src/App.ts의 알 수없는 파일 확장자 ".ts"

분류에서Dev

Mac의 zip 아카이브에서 실행 파일을 추출 할 수 없습니다.

분류에서Dev

디렉토리의 모든 파일에 대해 명령을 실행하고 'TIFF 헤더를 읽을 수 없음'이 포함 된 출력을 얻는 다른 파일에 대해 mv를 실행할 수 있습니까?

분류에서Dev

Android 10에서 실제 장치의 전화 저장소에서 파일을 찾을 수 없습니다.

분류에서Dev

입력을 파일 자체로 사용하는 명령에서 출력을 파일에 저장할 수없는 이유는 무엇입니까?

분류에서Dev

C : 자식 프로세스의 표준 출력에 연결된 파이프에서 읽을 수 없습니다.

분류에서Dev

Docker-동일한 .sh 파일에서 여러 Docker 실행 명령을 실행할 수 없습니다.

분류에서Dev

C 프로그램은 프로그램의 출력을보기 위해 파이프를 사용하여 "execlp"에서 "more"명령을 실행할 수 없습니다.

분류에서Dev

저장소 서명 키를 설치하려고 할 때`- '(깨진 파이프)에 쓸 수 없습니다.

분류에서Dev

tasksel과 함께 설치된 램프를 사용하여 / var / www에 파일을 저장할 수 없습니다.

분류에서Dev

PowerShell에서 콘솔 앱의 출력을 자체로 파이프 할 수 없음

Related 관련 기사

  1. 1

    유닉스 실행 파일의 출력을 저장할 수 없습니다.

  2. 2

    WSL bash의 배치 파일에서 Homebrew 앱을 실행할 수 없습니다 (명령을 찾을 수 없음).

  3. 3

    명령이 이미 실행 된 후 명령의 출력을 파일에 저장할 수 있습니까?

  4. 4

    명령이 이미 실행 된 후 명령의 출력을 파일에 저장할 수 있습니까?

  5. 5

    실행 된 명령의 출력을 파일 C # 콘솔 애플리케이션에 저장할 수 없습니다.

  6. 6

    설치 실패-바이너리 파일을 실행할 수 없습니다.

  7. 7

    Windows 8.1은 명령 프롬프트 깜박임없이 배치 파일을 실행할 수 없습니다.

  8. 8

    아파치에서 PHP를 실행할 수 없습니다.이 명령을 실행하여 PHP로 아파치를 설정했습니다.

  9. 9

    관리자가 아닌 파일 이름에서 '.Move'로 실행 파일을 실행할 수 없습니다.

  10. 10

    별도의 홈 파티션에서 파일을 실행할 수 없습니다.

  11. 11

    wampserver를 설치 한 후 PHP 파일을 실행할 수 없습니다. 로컬 호스트 등을 실행할 수 있지만

  12. 12

    wampserver를 설치 한 후 PHP 파일을 실행할 수 없습니다. 로컬 호스트 등을 실행할 수 있지만

  13. 13

    이전 명령의 출력을 파일에 저장할 수 있습니까?

  14. 14

    단일 .bat 파일에서 두 개의 .sql을 실행할 수 없습니다.

  15. 15

    Windows 7에서 실행 한 직후 배치 파일을 저장할 수 없습니다.

  16. 16

    extendscript .jsx 파일에서 실행 파일을 호출 할 수 없습니다.

  17. 17

    Server 2012에서 배치 파일을 실행할 수 없습니다.

  18. 18

    intellij 2016에서 Java 스크래치 파일을 실행할 수 없습니다.

  19. 19

    Node.js Typescript 프로젝트를 실행할 수 없습니다. TypeError [ERR_UNKNOWN_FILE_EXTENSION] : /app/src/App.ts의 알 수없는 파일 확장자 ".ts"

  20. 20

    Mac의 zip 아카이브에서 실행 파일을 추출 할 수 없습니다.

  21. 21

    디렉토리의 모든 파일에 대해 명령을 실행하고 'TIFF 헤더를 읽을 수 없음'이 포함 된 출력을 얻는 다른 파일에 대해 mv를 실행할 수 있습니까?

  22. 22

    Android 10에서 실제 장치의 전화 저장소에서 파일을 찾을 수 없습니다.

  23. 23

    입력을 파일 자체로 사용하는 명령에서 출력을 파일에 저장할 수없는 이유는 무엇입니까?

  24. 24

    C : 자식 프로세스의 표준 출력에 연결된 파이프에서 읽을 수 없습니다.

  25. 25

    Docker-동일한 .sh 파일에서 여러 Docker 실행 명령을 실행할 수 없습니다.

  26. 26

    C 프로그램은 프로그램의 출력을보기 위해 파이프를 사용하여 "execlp"에서 "more"명령을 실행할 수 없습니다.

  27. 27

    저장소 서명 키를 설치하려고 할 때`- '(깨진 파이프)에 쓸 수 없습니다.

  28. 28

    tasksel과 함께 설치된 램프를 사용하여 / var / www에 파일을 저장할 수 없습니다.

  29. 29

    PowerShell에서 콘솔 앱의 출력을 자체로 파이프 할 수 없음

뜨겁다태그

보관