옆에

옆에

내 웹사이트에 대한 테스트 로드를 생성 중인데 이 명령이 실제로 무엇을 의미하는지 알고 싶습니다.

('dd if=/dev/zero bs=100M count=500 | gzip | gzip -d  > /dev/null &')

지금까지 제가 이해한 바에 따르면 이는 한 번에 100MiB의 데이터 덩어리를 가져와 디스크에 복사한 다음 압축 및 압축 해제하는 것입니다. 이 말이 맞는 것 같나요?

답변1

명령을 세 부분으로 나누어 보겠습니다.

  • dd if=/dev/zero bs=100M count=500
  • gzip
  • gzip -d > /dev/null &

간결한 버전

  • dd if=/dev/zero bs=100M count=500각각 100MiB인 500개의 널 문자 청크(ASCII의 0x00)를 파이프( |)로 읽어 본질적으로 "공급"합니다 gzip.디스크에 쓰지 않는다는 점에 유의하세요.
  • gzip데이터 압축
  • gzip -d > /dev/null압축을 푼 다음 데이터를 삭제합니다.

더 긴 설명

dd if=/dev/zero bs=100M count=500

  • dd명령에는 일반적으로 if각각 of입력 및 출력 파일을 나타내는 두 개의 매개변수가 있습니다. 여기서 매개변수는 if널 문자의 "배열"(ASCII에서는 0x00)을 반환하는 특수 장치 파일인 /dev/zero로 설정됩니다.
  • 100MiB 청크를 읽는 것이 맞습니다. 이 bs매개변수가 도움이 됩니다. 하지만 디스크에는 기록되지 않습니다. 다음 항목을 참조하세요.
  • 해당 of인수가 없으면 표준 출력 또는 stdout(디스크의 파일이 아니라개울). Pipe()는 command 다음에 사용되므로 |기록된 데이터는 stdout여기에서 다른 프로그램으로 파이프(공급)됩니다. gzip
  • count매개변수는 복사할 블록 수를 지정합니다.

gzip

  • 파일을 지정하지 않고 gzip을 실행하면 stdin표준 입력(이 경우 dd의 파이프 입력)에서 읽고 표준 출력에 씁니다.
  • 기본적으로( -d옵션 없음) gzip은 압축을 수행합니다.

gzip -d > /dev/null

  • 이 옵션을 사용하여 gzip을 실행하면 -d압축이 풀립니다. 여기서는 gzip에서 파이프된 입력을 읽고 stdout으로 출력합니다(파일이 지정되지 않았기 때문에).
  • >문자는 현재 명령의 스트림( stdout, stdin, )을 리디렉션합니다. stderr여기서는 명령 stdout의 표준 출력을 gzip -d장치에 기록하고 /dev/null기록된 모든 데이터를 삭제합니다.
  • '&' 문자는 쉘이 백그라운드에서 프로세스를 실행하도록 지시합니다.

답변2

옆에

먼저 명령이 다음과 같다고 가정합니다.

dd if=/dev/zero bs=100M count=500 | gzip | gzip -d > /dev/null &

대신에:

('dd if=/dev/zero bs=100M count=500 | gzip | gzip -d > /dev/null &')

괄호는 상당히 무해하며 쉘이 하위 쉘에서 파이프를 실행하도록 지시하지만 작은따옴표는 문제를 일으킬 수 있습니다. 그들은 전체 파이프를 단일 인수로 처리하도록 쉘에 지시하고 쉘은 이를 명령 이름으로 실행하려고 시도합니다. 쉘은 (아마도) 해당 경로에서 해당 이름을 가진 명령을 찾아 다음 ('dd if=/dev/zero bs=100M count=500 | gzip | gzip -d > /dev/null &')과 같이 알려줄 수 없습니다.

-bash: dd if=/dev/zero bs=100M count=500 | gzip | gzip -d > /dev/null &: No such file or directory

이제 그 질문에 답하기 위해

dd명령은 표준 입력 또는 지정된 파일을 if=표준 출력 또는 지정된 파일로 복사합니다 of=. 이 부하 테스트 명령은 입력에 사용됩니다 /dev/zero. /dev/zero커널에 의해 처리되는 특수 의사 장치 파일입니다. 파일을 읽으면 빈 문자의 끝없는 스트림이 생성됩니다.

그런 다음 명령의 출력 dd(각각 100M씩 500개 청크, 널 문자만 포함)은 파이프 메타 문자를 통해 명령으로 전달됩니다. 명령 |gzip데이터를 동적으로 압축하고 압축을 푸는 다른 파이프를 통해 전달합니다. 파이프의 데이터가 이동합니다. 파이프의 마지막 명령 출력을 지정된 파일(이 경우)에 쓰도록 쉘에 지시하는 쉘 리디렉션 연산자 입니다 . 이것은 커널이 처리하는 또 다른 특수 의사 장치 파일이므로 실제로 아무것도 기록되지 않으며 이 파일에 대한 모든 쓰기는 자동으로 삭제됩니다.|gzip -d>/dev/null/dev/null

데이터를 디스크에 복사한다고 언급하셨습니다. /dev/null이는 특수한 "블랙홀" 파일이고 기타 명령이 표준 입력 및 표준 출력에서 ​​읽고 쓰기 때문에 시스템이 메모리를 디스크로 교체하지 않는 한 디스크에 아무 것도 기록되지 않습니다.

메타 문자는 &쉘이 백그라운드에서 파이프를 실행하도록 지시합니다.

답변3

좋아요, 바꿔 말하면 다음과 같습니다.

dd if(entry device)=/dev/zero(device) (then set)bs=100M(size) (each time)count=500(times) (then send to) | (compressing)gzip (then send to) | (decompressing)gzip -d (redirect process to) > (null device)/dev/null &(don't wait)

이제 깨끗하고 자세한 설명은 다음과 같습니다.

dd은 실행 중인 명령 또는 프로그램입니다.

if=,입력 장치

/dev/zero, 장치 경로(이 경우 "/dev/zero", 즉 값이 0인 장치)

bs=, 위의 장치 /dev/zero에서 얻은 생성된 0의 크기를 지정합니다.

100M, 이 경우 /dev/zero에서 100MB의 0(영) 숫자를 가져옵니다.

count=, 무언가를 채우기 위해 프로세스가 반복되는 횟수 또는 이 경우 출력

500, 500번, 이는 100M * 500 = 50000MB와 같습니다.

|, 출력을 다음으로 보냅니다. 이 경우에는 gzip으로 보냅니다.

gzip, gzip 형식 파일 압축을 담당하는 명령 또는 프로그램입니다. dd 명령 또는 프로그램의 데이터를 압축합니다.

|, 다시 gzip 명령으로 전송되지만 이 경우에는'gzip-d'

gzip -d, gzip 명령 또는 실행할 프로그램, '-d'는 압축을 푸는 옵션입니다

> /dev/null, gzip 프로세스를 '/dev/null'로 리디렉션합니다.

/dev/null, 쓰레기나 빈 공간처럼 작동하는 빈 장치

&, 이 경우 명령이 완료될 때까지 기다리지 않음을 의미하지만 쉘 스크립트, bash 및 기타 프로그래밍 언어에 대한 기본 연산자입니다.

요약: "dd" 프로그램을 사용하여 0(0자리)으로 가득 찬 파일(이 경우 50000개의 0)을 만든 다음 압축을 위해 이를 gzip 프로그램으로 직접 보낸 다음 gzip으로 다시 보내지만 압축을 풀고 있습니다. 이 예에서 다시 한번.

50,000개의 0은 수학 및 사전 설정된 측정에 따라 이진수 또는 십진수 형식으로 달라질 수 있습니다.

대괄호가 명령의 일부인 경우 i 대괄호는 하위 작업을 나타냅니다. 예: (하위 작업은 다음과 같습니다), 또 다른 예: (명령 [인수]), 그러나 일반적으로 트리거하려면 "$" 기호가 필요합니다. 이러한 대괄호를 사용하면 프로그램이 쉘 스크립트, bash 등과 같은 의미를 변경하는 코드를 실행할 수 있습니다.

답변4

다른 답변에서 언급했듯이 첫 번째 명령은 장치에서 50G 기호를 가져와 /dev/zeroSTDOUT으로 보내는 동시에 gzipSTDIN에서 스트림을 가져와 압축하여 STDOUT으로 보내는 동시에 gzip -dSTDIN에서 압축된 스트림을 가져옵니다. 압축이 풀린 출력을 dev/null(블랙홀) 로 보냅니다 . 다 배경에 넣어둬

그러나 약간만 수정하면 이 명령은 더 큰 페이로드를 제공할 수 있습니다. 0을 압축하는 것은 간단한 프로세스이기 때문입니다. :)

dd if=/dev/random bs=100M count=500 | gzip -9 | gzip -d > /dev/null &

난수를 얻으면 압축이 "더 무거워집니다". 또한 압축 수준을 높이면 컴퓨터의 로드도 늘어납니다.

관련 정보