cat / dev / null> file.log는 Darwin에서 큰 파일을 자르지 않습니다.

chb

과거에는 Linux 시스템에서 .NET을 사용하여 크고 열린 로그 파일 (즉, 프로세스에 의해 적극적으로 기록되는 파일)을자를 수있었습니다 cat /dev/null > file.log.

그러나 10.9 (Mavericks)에서는 그렇지 않은 것 같습니다. 응용 프로그램에 의해 로깅되는 11GB 파일이 있지만 해당 파일에 대해 동일한 명령을 수행하면 아무 일도 일어나지 않는 것 같습니다.

사소한 크기의 파일에서 이것을 시도하면 작동합니다.

여기 있습니다 ls -l /dev/null:

crw-rw-rw- 1 root wheel 3, 2 Dec 16 12:49 /dev/null

나는 또한 cp /dev/null file.log아무 소용이 없었습니다.

자르기 기능 ( man 2 truncateDarwin에서) 을 이용할 수 있다고 생각하면서 이것을 컴파일하고 두 개의 파일에 대해 실행했습니다. 하나는 사소한 크기이고 다른 하나는 실제 로그 파일입니다. 다시 말하지만, 그것은 사소한 파일에 대해 작동했으며 훨씬 더 큰 로그에서는 작동하지 않았습니다.

/*
 * Copyright (c) 2013 Thomas de Grivel <[email protected]>
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 ...
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#include <unistd.h>

int main (int argc, const char **argv)
{
        int e = 0;
        while (--argc) {
                argv++;
                if (truncate(*argv, 0)) {
                        e = 4;
                        warn("%s", *argv);
                }
        }
        return e;
}

0내가 사용하는 파일에 관계없이 프로세스가 반환 됩니다.

스테판 샤젤 라스

cat /dev/null출력을 생성하지 않는 명령을 작성하는 약간 복잡한 방법입니다. :또는 true더 명백한 것입니다.

모든 cat /dev/null > file,, : > file심지어 > file대부분의 셸에서 셸은 stdout에서 O_TRUNC로 파일을 연 다음 아무것도 출력하지 않는 응용 프로그램을 실행 한 다음 파일을 닫고 잘립니다.

그러나이 경우 또는 truncate시스템 호출을 사용할 때 해당 파일을 채우는 프로세스가 O_APPEND 플래그로 파일을 열지 않은 경우 다음에 파일에 열려있는 파일 설명자에 쓸 때 파일 내에 있던 오프셋의 데이터.

HFS +는 스파 스 파일을 지원하지 않기 때문에 해당 오프셋 앞의 공간을 시스템에서 재 할당하고 0으로 채워야합니다.

따라서 파일을 자르기 전에 해당 파일에 쓰고있는 응용 프로그램을 종료해야합니다. 또는 응용 프로그램이 O_APPEND( >>셸 리디렉션을 사용 하는 경우 와 같이) 파일을 열도록해야합니다 .

실험하고 싶다면 :

$ exec 3> x
$ yes | head -n 50000 >&3
$ ls -ls x
200 -rw-r--r--  1 me me  100000 Dec 16 21:32 x

이제 내 셸의 fd 3은 파일 내에서 100,000 바이트입니다.

$ : > x
$ ls -ls x
0 -rw-r--r--  1 me me  0 Dec 16 21:34 x

이제 파일이 잘립니다 (크기 0, 디스크에 사용 된 공간 없음).

$ echo >&3
$ ls -ls x
200 -rw-r--r--  1 me me  100001 Dec 16 21:34 x

오프셋 100000에서 파일에 1 바이트를 쓰면 파일 크기는 이제 100001 바이트이고 첫 번째 파일은 모두 0이며 HFS +에서는 100k 이상을 사용하지만 대부분의 다른 Unix 파일 시스템에서는 약 하나의 디스크 블록 만 사용합니다.

반면에 :

$ exec 3>> x
$ yes | head -n 50000 >&3
$ ls -ls x
200 -rw-r--r--  1 me me  100000 Dec 16 21:35 x
$ : > x
$ echo >&3
$ ls -ls x
8 -rw-r--r--  1 me me  1 Dec 16 21:36 x

오프셋 100000이 아니라 파일 끝에 1 바이트를 씁니다 O_APPEND. 파일 크기는 1 바이트이며 해당 1 바이트를 저장하는 데 필요한 공간을 차지합니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Meaning of `cat /dev/null > file`

분류에서Dev

''cat "$ {1 :-/ dev / stdin} | ... &> / dev / null ''이 bash에서는 작동하지만 대시는 작동하지 않는 이유는 무엇입니까?

분류에서Dev

다음 명령에서 head가 cat을 중지하는 방법 : cat / dev / urandom | 머리 -c 10

분류에서Dev

UIO 장치 파일 / dev / uioX는 Linux Debian에서 생성되지 않습니다.

분류에서Dev

토큰은 Dev에서 작동하지만 Prod에서는 작동하지 않습니다. EDAMSystemException AuthenticationToken

분류에서Dev

OS X Darwin에서 cat을 사용하는 사용자 세션에서 텍스트 입력을 방해 할 수있는 이유는 무엇입니까?

분류에서Dev

dev null을 보내지 않고 파일이 사본에 존재하지 않으면 오류를 표시하지 않습니다.

분류에서Dev

Chrome Dev 도구에 다른 JavaScript 파일을 건너 뛰지 않는 방법이 있습니까?

분류에서Dev

bof에서 큰 파일을 자르는 방법-C / Linux

분류에서Dev

OpenXML은 문서와 달리 큰 Excel 파일을 읽는 데 도움이되지 않습니다.

분류에서Dev

OpenXML은 문서와 달리 큰 Excel 파일을 읽는 데 도움이되지 않습니다.

분류에서Dev

UITextField에서 큰 숫자가 올바르지 않습니다.

분류에서Dev

cat <file.txt 파일을 읽는 책임자는 누구입니까?

분류에서Dev

왜`cat / dev / null> / var / log / messages`를 사용합니까?

분류에서Dev

Webpack-dev-server는 변경시 파일을 빌드하지 않습니다.

분류에서Dev

내 itoa는 큰 숫자에서 작동하지 않습니다.

분류에서Dev

file.FullName (널이 아닌 디버그 됨)을 문자열 배열에 넣으면 일부는 null이고 일부는 그렇지 않습니다.

분류에서Dev

/ dev / null이 도커 컨테이너에서 작동하지 않는 것 같습니다.

분류에서Dev

fgets는 비어 있지 않은 파일에서 null을 반환합니다.

분류에서Dev

Symfony2는 웹 폴더에서 .htacess 파일을 제거하지 않으면 app_dev.php에 액세스 할 수 없습니다.

분류에서Dev

Webview Android는 큰 html 파일에서 전체 콘텐츠를로드하지 않습니다.

분류에서Dev

cat, file은 파일을 찾을 수 없다고 말하지만 nano는 그것을 읽습니다. 왜 다른가요?

분류에서Dev

Ctrl + X는 Sublime Text 3에서 줄을 자르지 않습니다.

분류에서Dev

/ dev / null에서 읽을 수 있습니다. 그것을 고치는 방법?

분류에서Dev

/ dev / null에서 읽을 수 있습니다. 그것을 고치는 방법?

분류에서Dev

OS X, bash : 열린 파일 설명자에서 덜 작동하지만 cat은 작동하지 않습니다.

분류에서Dev

Sublime Text는 PcManFM에서 파일을 열지 않습니다.

분류에서Dev

cp 큰 파일을 / dev / null로 설정하여 크기를 0으로 줄입니다.

분류에서Dev

String.getBytes ()는 Android의 일부 큰 문자열에서 작동하지 않습니다.

Related 관련 기사

  1. 1

    Meaning of `cat /dev/null > file`

  2. 2

    ''cat "$ {1 :-/ dev / stdin} | ... &> / dev / null ''이 bash에서는 작동하지만 대시는 작동하지 않는 이유는 무엇입니까?

  3. 3

    다음 명령에서 head가 cat을 중지하는 방법 : cat / dev / urandom | 머리 -c 10

  4. 4

    UIO 장치 파일 / dev / uioX는 Linux Debian에서 생성되지 않습니다.

  5. 5

    토큰은 Dev에서 작동하지만 Prod에서는 작동하지 않습니다. EDAMSystemException AuthenticationToken

  6. 6

    OS X Darwin에서 cat을 사용하는 사용자 세션에서 텍스트 입력을 방해 할 수있는 이유는 무엇입니까?

  7. 7

    dev null을 보내지 않고 파일이 사본에 존재하지 않으면 오류를 표시하지 않습니다.

  8. 8

    Chrome Dev 도구에 다른 JavaScript 파일을 건너 뛰지 않는 방법이 있습니까?

  9. 9

    bof에서 큰 파일을 자르는 방법-C / Linux

  10. 10

    OpenXML은 문서와 달리 큰 Excel 파일을 읽는 데 도움이되지 않습니다.

  11. 11

    OpenXML은 문서와 달리 큰 Excel 파일을 읽는 데 도움이되지 않습니다.

  12. 12

    UITextField에서 큰 숫자가 올바르지 않습니다.

  13. 13

    cat <file.txt 파일을 읽는 책임자는 누구입니까?

  14. 14

    왜`cat / dev / null> / var / log / messages`를 사용합니까?

  15. 15

    Webpack-dev-server는 변경시 파일을 빌드하지 않습니다.

  16. 16

    내 itoa는 큰 숫자에서 작동하지 않습니다.

  17. 17

    file.FullName (널이 아닌 디버그 됨)을 문자열 배열에 넣으면 일부는 null이고 일부는 그렇지 않습니다.

  18. 18

    / dev / null이 도커 컨테이너에서 작동하지 않는 것 같습니다.

  19. 19

    fgets는 비어 있지 않은 파일에서 null을 반환합니다.

  20. 20

    Symfony2는 웹 폴더에서 .htacess 파일을 제거하지 않으면 app_dev.php에 액세스 할 수 없습니다.

  21. 21

    Webview Android는 큰 html 파일에서 전체 콘텐츠를로드하지 않습니다.

  22. 22

    cat, file은 파일을 찾을 수 없다고 말하지만 nano는 그것을 읽습니다. 왜 다른가요?

  23. 23

    Ctrl + X는 Sublime Text 3에서 줄을 자르지 않습니다.

  24. 24

    / dev / null에서 읽을 수 있습니다. 그것을 고치는 방법?

  25. 25

    / dev / null에서 읽을 수 있습니다. 그것을 고치는 방법?

  26. 26

    OS X, bash : 열린 파일 설명자에서 덜 작동하지만 cat은 작동하지 않습니다.

  27. 27

    Sublime Text는 PcManFM에서 파일을 열지 않습니다.

  28. 28

    cp 큰 파일을 / dev / null로 설정하여 크기를 0으로 줄입니다.

  29. 29

    String.getBytes ()는 Android의 일부 큰 문자열에서 작동하지 않습니다.

뜨겁다태그

보관