Shell 스 크 립 트 가 지정 한 크기 파일 의 테스트 데 이 터 를 만 듭 니 다.
4446 단어 Shell지정 한 크기 파일테스트 데이터
케이스 바 이 케이스 의 dd 사용법 을 소개 하 겠 습 니 다.첫 번 째 거 먼저 볼 게 요.
5G 크기 의 파일 을 만 들 고 내용 은 요구 하지 않 습 니 다.
명령 은 아래 와 같다.
$ dd if=/dev/zero of=tmp.5G bs=1G count=5
여기에 사용 되 는 매개 변 수 를 설명해 주세요.
if=FILE : , 。 /dev/zero Linux , null ( 0)
of=FILE : ,
bs=BYTES : , K、M、G 。 ibs、obs , bs, ibs obs
count=BLOCKS : block ,block ibs ( )
이렇게 위 에 5G 파일 을 생 성 하 라 는 명령 은/dev/null 에서 1G 데 이 터 를 읽 을 때마다 5 번 읽 고 tmp.5G 라 는 파일 을 쓰 는 것 을 잘 이해 할 수 있 습 니 다.다음 문제 볼 게 요.
file.in 1M file.out
명령 은 아래 와 같다.
$ file_out_size=`du -b file.out | awk '{print $1}'`
$ dd if=./file.in ibs=1M count=1 of=./file.out seek=1 obs=$file_out_size
여기 ibs 와 obs 는 서로 다른 값 으로 설정 되 어 있 습 니 다.앞의 명령 에 비해 하나의 seek 인자 만 추가 되 었 습 니 다.
seek=BLOCKS : , BLOCKS block,block obs
명령 의 뜻 은 file.in 에서 1M 데이터 블록 1 개 를 읽 어 file.out 에 쓰 는 것 입 니 다.그러나 기록 위 치 는 file.out 의 시작 이 아니 라 1*$file 입 니 다.out_size 바이트 오프셋(즉 파일 끝)이 기초 위 에 요 구 를 하나 더 추가 하 다
file.in 의 3M 을 file.out 의 끝 에 추가 합 니 다.
$ file_out_size=`du -b file.out | awk '{print $1}'`
$ dd if=./file.in skip=2 ibs=1M count=1 of=./file.out seek=1 obs=$file_out_size
여기 인자 skip 이 하나 더 생 겼 습 니 다.
skip=BLOCKS : , BLOCKS block,block ibs 。 seek
위의 명령 은 파일 file.in 부터 2*1M 을 건 너 뛰 고 1*1M 데 이 터 를 복사 하여 파일 file.out 의 1*$file 을 기록 하 라 는 뜻 입 니 다.out_사이즈 오프셋이러한 기본 적 인 매개 변 수 는 모두 소개 되 었 습 니 다.입 출력 파일 과 각자 의 오프셋 을 설정 하고 읽 기와 쓰기 데이터 블록 크기 와 읽 기 데이터 블록 개 수 를 설정 하 는 것 이 아 닙 니 다.다음은 요약 하 겠 습 니 다.
:
if
skip
ibs
count
:
of
seek
obs
마지막 으로 궁극 의 문제.앞 에 만 든 것 은 모두 null 흐름 입 니 다.이번 에는 바 꿉 니 다.
, 。 , 123456 , A
이 문 제 는 아무런 의미 가 없 는 것 처럼 보이 지만,때로는 확실히 필요 하 다.예 를 들 어 저 는/dev/null 을 통 해 1G 파일 을 만 들 었 습 니 다.그러나 테스트 수요 로 중간 100 M 데 이 터 를 수정 하고 싶 습 니 다.이때 저 는 100 M 파일 을 만들어 서 1G 파일 의 지정 한 위치 에 기록 해 야 합 니 다.이 100 M 파일 은/dev/null 에서 만 들 수 없습니다.그렇지 않 으 면 수정 목적 에 이 르 지 못 할 때 이런 기능 이 필요 합 니 다.말 이 많 지 않 으 면 바로 각본 에 올 라 가 앞의 기초 가 있 으 면 모두 알 아 볼 수 있 을 것 이 라 고 믿는다.
#!/bin/bash
if [ $# -ne 3 ];then
echo "usage : $0 character out_file file_size(Byte)"
exit 1
fi
echo "$1" | grep -q "^[a-zA-Z]$"
if [ $? -ne 0 ];then
echo "arg1 must be character"
exit 1
fi
character=$1
out_file=$2
target_size=$3
# echo '
' , dd
echo "$character" | dd of=$out_file ibs=1 count=1
while true
do
cur_size=`du -b $out_file | awk '{print $1}'`
if [ $cur_size -ge $target_size ];then
break
fi
remain_size=$((target_size-$cur_size))
if [ $remain_size -ge $cur_size ];then
input_size=$cur_size
else
input_size=$remain_size
fi
dd if=$out_file ibs=$input_size count=1 of=$out_file seek=1 obs=$cur_size || exit 1
done
이러한 기술 이 있 으 면 파일 내용 에 대한 요구 가 없 는 전제 에서 지정 한 크기 의 파일 을 임의로 만 들 고 파일 지정 바이트 수 를 임의로 수정 할 수 있 습 니 다.이것 은 일부 테스트 장 소 를 매우 편리 하 게 만 들 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Shell alias 명령에 별칭을 설정하는 방법명령에 별명을 설정하면 명령의'작은 이름'으로 삼을 수 있지만, 이렇게 하는 것이 무슨 의미가 있습니까? 이때 별명이 작용할 수 있다.vim 명령의 별명을vi라고 정의하면 이후에 실행된vi 명령은 실제로vim 명령을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.