[Shell Script] 파일의 크기에 따른 전송속도 측정하기
파일의 크기에 따른 전송속도 측정하기
다른서버에 임시파일을 전송해서 통신 속도를 측정하고 싶을 때 사용하는 스크립트 입니다.
스크립트
#!/bin/sh
filesize=1024 #1
tmpdata="tmpdata.tmp"
timefile="timecount.tmp" #2
dd if =/dev/zero of="$tmpdata" count=$filesize bs=1024 2> /dev/null #3
server="192.168.2.5"
user="user1"
password="123456" #4
echo "Filesize: $filesize (KB)"
echo "FTP Server: $server"
(time -p ftp -n "$server") << _EOF_2> "$timefile" #5
user "$user" "$password"
binary
put "$tmpdata"
_EOT_
realtime=$(awk '/^real / {print $2}' "$timefile") #6
speed=$(echo "${filesize}/${realtime}" | bc) #7
echo "Transfer Speed : $speed (KB/sec)"
rm -f "$tmpdata" "$timefile"
이 스크립트는 임시 파일을 만들어서 ftp 전송하여 전송속도를 측정합니다 .
스크립트를 실행한 서버와 셸 변수 server 라고 지정한 서버 사이의 통신 속도를 조사하는 목적입니다 .
#1, #2 : 속도 측정을 위한 임시 파일의 크기 및 파일명 을 설정합니다 . / 시간 측정을 위한 임시파일명도 측정합니다.
(이 예제에서는 1024KB(1MB)로 설정하였습니다 )
filesize=1024 #1
tmpdata="tmpdata.tmp"
timefile="timecount.tmp" #2
#3 : 전송할 임시 파일을 dd 명령어로 작성합니다 .
- dd 명령어 : 지정한 입력에서 출력으로 복사하는 명령어 입니다 . 스크립트에서는 dd 명령어 출력을 표시 하지 않아서 dev/null로 표준 에러 출력을 리다이렉트합니다 .
dd if =/dev/zero of="$tmpdata" count=$filesize bs=1024 2> /dev/null
임시 파일에 사용하는 옵션
옵션 | 설명 |
if=/dev/zero | 입력으로 /dev/zero라는 널 문자를 읽을 수 있는 특별한 디바이스 지정 |
of=”$filename” | 셀 변수 filename으로 정의된 파일명 출력으로 지정 |
count=$filesize | 셸 변수 filesize로 지정한 횟수만큼 복사 |
bs=1024 | 복사할 블록 크기, 1024 바이트 |
여기서는 FTP 프로토콜을 사용하며 자동 압축 프로토콜이 아니므로 빨리 생성가능한 /dev/zero 파일을 만듭니다 .
#4 : ftp 파일을 전송하는 설정을 작성합니다 .
server="192.168.2.5"
user="user1"
password="123456"
#5(1) : time 명령어를 사용하며 초만 표시하는 -p 옵션을 써서 실제 시간 ( real ) 을 얻습니다 .
#5(2) : 히어 도큐먼트와 리다이렉트가 섞인 _EOT_라는 히어 도큐먼트를 사용하여 timefile로 지정한 파일에 리다이렉트 합니다 .
#5(3) : 명령어 전체를 ()로 둘러싼 서브셸 입니다 .
(time -p ftp -n "$server") << _EOF_2> "$timefile" #5
user "$user" "$password"
binary
put "$tmpdata"
_EOT_
#6 : $timefile에서 명령어 실행에 걸린 시간(real)을 취득합니다 .
realtime=$(awk '/^real / {print $2}' "$timefile")
#7 : 계산한 속도 단위를 정의 합니다 (KB/s)
speed=$(echo "${filesize}/${realtime}" | bc)
댓글
댓글 쓰기