내 웹사이트에 대한 테스트 로드를 생성 중인데 이 명령이 실제로 무엇을 의미하는지 알고 싶습니다.
('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/zero
STDOUT으로 보내는 동시에 gzip
STDIN에서 스트림을 가져와 압축하여 STDOUT으로 보내는 동시에 gzip -d
STDIN에서 압축된 스트림을 가져옵니다. 압축이 풀린 출력을 dev/null
(블랙홀) 로 보냅니다 . 다 배경에 넣어둬
그러나 약간만 수정하면 이 명령은 더 큰 페이로드를 제공할 수 있습니다. 0을 압축하는 것은 간단한 프로세스이기 때문입니다. :)
dd if=/dev/random bs=100M count=500 | gzip -9 | gzip -d > /dev/null &
난수를 얻으면 압축이 "더 무거워집니다". 또한 압축 수준을 높이면 컴퓨터의 로드도 늘어납니다.