[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)  

댓글