dd 출력을 어떻게 억제합니까?


35

을 사용하여 파일을 만드는 bash 스크립트가 dd있습니다. 문제는 dd가 내 스크립트의 출력을 엉망으로 만드는 많은 양의 출력을 던진다는 것입니다. 주변을 검색하여 해결책을 찾았습니다.

dd if=boot1h of="/dev/r$temp1" >& /dev/null

대안이 있습니까, 아니면 /dev/null유일한 방법으로 리디렉션 합니까?


3
마지막 문장에서 "스크립트가 권한을 요청해서는 안됩니다"가 없어졌습니다. 그것은 리디렉션으로 관련이없는 것 같습니다 /dev/null- dd쓰기 액세스가 필요 하기 때문에 sudoing 하고 있습니다 /dev/r$temp1(나는 가정합니다). dd출력을 어떻게 억제하는지에 관계없이 그렇게해야합니다 . 출력을 재 지정하기 /dev/null위해 루트가 필요하지 않음
Michael Mrozek

나는 바보입니다. / dev / r $ temp1 / 사용으로 인해 작업이 허용되지 않았습니다. 정말 죄송합니다. 나는 내 것이 아닌 스크립트를 편집하고 있으며 눈치 채지 못했습니다. 정말 죄송합니다.
dierre

따라서 문제는 일반 사용자가 / dev / r $ temp1 또는 dev / null에 쓸 수 없습니다
jet

걱정하지 마십시오. 혼란스러운 부분을 제거하기 위해 약간 편집했습니다
Michael Mrozek

1
당신이 사용하지 않는 경우 DD의 고급 기능, 사용의 cat, head또는 tail대신합니다.
Gilles 'SO- 악마 그만'

답변:


16

로부터 dd(1)매뉴얼 페이지

   status=noxfer
          suppress transfer statistics

그러므로:

dd if=boot1h of="/dev/r$temp1" status=noxfer

이것은 여전히 ​​출력

0+1 records in
0+1 records out

종료시 가비지가 발생 dd하므로 데이터 싱크로 리디렉션하는 것이 실제로 유일한 옵션입니다.


그건 무서웠어요
dierre

상태 = noxfer는 SIGUSR1 신호와 관련이 있으며 일반적으로 전송 통계를 보여줍니다. 그러나, 내가 말하고있는 것이 사실인지 테스트하고 싶지 않습니다.
maxadamo

54

추가 status=none:

dd if=boot1h of="/dev/r$temp1" status=none

로부터 8.21 문서 DD (로 coreutils) :

'status=LEVEL'
     Transfer information is normally output to stderr upon receipt of
     the 'INFO' signal or when 'dd' exits.  Specifying LEVEL will adjust
     the amount of information printed, with the last LEVEL specified
     taking precedence.

     'none'
          Do not print any informational or warning messages to stderr.
          Error messages are output as normal.

     'noxfer'
          Do not print the final transfer rate and volume statistics
          that normally make up the last status line.

     'progress'
          Print the transfer rate and volume statistics on stderr, when
          processing each input block.  Statistics are output on a
          single line at most once every second, but updates can be
          delayed when waiting on I/O.

@roaima-그냥 궁금해서, 맨 페이지에서 인용문을 편집하는 이유는 무엇입니까?
don_crissti

@don_crissti 매뉴얼 페이지에서 인용을 추출 할 때 문맥이 부족하다는 것이 약간 다른 단어가 필요하다는 것을 느꼈습니다. 가에 서로 man 페이지 괜찮아; 여기 이상해 보였다.
roaima

@roaima-모든 호기심이 만족했습니다 :)-하지만 당신은 링크 info page; 초기 대답은 여기에 있었다 정확한 견적 로부터를 man page. 페이지가 모호하지만 실제로는 귀하에게 달려 info있다면 페이지 에서 직접 복사 / 붙여 넣기했을 것 man입니다.
don_crissti

@don_crissti 온라인에서 인용문이있는 매뉴얼 페이지를 찾을 수 없습니다. 그거 고마워 (die.net은ddstatus=
roaima

3
dd (coreutils) 8.13에서 사용할 수없는 것 같습니다 : dd: invalid status flag: `none' Try `dd --help' for more information.
Per Lundberg

5

나중에 참조 할 수 있도록 :

dd 출력을 억제하려면 다음과 같이 stderr을 / dev / null로 완전히 리디렉션하십시오.

dd if=/dev/urandom of=sample.txt bs=5MB count=1 2> /dev/null

예를 들어, bash에서 time 명령을 사용하여 프로세스의 시간을 정하고 dd가 생성하는 출력을 얻지 않고 결과를 변수에 할당하려는 경우에 잘 작동합니다.

참조 : http://www.unix.com/shell-programming-and-scripting/131624-how-suppress-dd-output.html


2

이와 같은 것이 최신 버전의 BASH 및 ZSH에서도 작동합니다.

dd if=/path/to/file of=/path/to/another_file bs=1M count=1 &> /dev/null

추신 : 이것은 내가 실행 한 예일뿐입니다 ...


2

모든 유닉스 응용 프로그램이나 명령을 사용하면

cmd >/dev/null 2>&1

첫 번째 비트는 표준 출력 (장치 번호 1)을 / dev / null로 리디렉션합니다. 그러나 오류 출력 (장치 번호 2)을 숫자 1과 같은 위치로 리디렉션하려면 두 번째 부분이 필요합니다.

UNIX에서 STDIN = 0, STDOUT = 1 및 STDERR = 2



1
실제로 stderr파일 디스크립터 2가 있습니다. ( "STDERR = 3"은 오타
일뿐

1
모든 출력을 억제하는 것은 바람직하지 않습니다. 오류가 발생하면 오류 메시지가 표시됩니다.
Sam Watkins

cmd 2>logfile.txt더 적응 된 것 같습니다
TheSola10

0

내가하려는 일을 올바르게 이해하면 해당 sudo명령을 스크립트에 넣고 암호가 실행될 때 스크립트가 프롬프트를 표시하도록 기대합니까? 이 경우에는 복잡한 방식으로 작업을 수행하는 것입니다.

보다 확실한 해결책은 일반적인 방법으로 (즉,없이 sudo) 스크립트를 작성 하여 수퍼 유저로 실행하는 것 입니다. 그 이유는 스크립트에 수퍼 유저 액세스가 필요한 경우 액세스 권한을 부여하면됩니다 (특정 명령이 나올 때까지 기다리는 이유). 스크립트에서 루트로 실행되고 있는지 확인하려면 다음과 같이하십시오.

if [ "$(id -u)" != "0" ]; then
    echo "This script must be run as root" 1>&2
    exit 1
fi

아니. 바로 내가 원하지 않는 일입니다. dd가 출력을 표시하지 않기 때문에 스크립트를 루트로 실행하고 싶지 않습니다. 스크립트가 수퍼 유저로 실행되도록하려면 확인해야합니다.
dierre

@dierre 그래서 왜 당신 sudo은 처음에 필요 했 습니까? 일반 사용자는 사물을 제대로 리디렉션 할 수 있어야 /dev/null합니다.
phunehehe

나는 Ubuntu를 사용하고 있으며 허용되지 않는 작업을 제공합니다 ... uhm ...
dierre

죄송 해요. / dev / 아래에 무언가를 만들고있는 것을 보지 못했습니다. 스크립트는 내 것이 아니며 편집하고있었습니다. 정말 죄송합니다.
dierre

0

출력을 일반 파일로 리디렉션 할 수 있습니다.

 dd if=boot1h of="/dev/r$temp1" >& /tmp/dd.log
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.