쉘스크립트

Web 사용하기

트리스탄1234 2022. 7. 6. 13:24
728x90
반응형

 

1. Lynx Program

인터넷 처럼 Lynx 프로그램도 굉장히 오래된 텍스 기반의 Web 프로그램 입니다. Lynx프로그램을 이용해서 사용자는 터미널 상에서 Wbe을 사용을 할 수 있습니다. Shell Script상에서 Lynx 프로그램을 통해 Web 페이지의 데이터들을 텍스트 기반으로 받을 수도 있고 Script에서 가공 및 사용이 가능하게 해 줍니다.

Lynx 설치 하기

1) 설치할 최신 패키지를 아래의 Site에서 다운로드를 합니다.

Site: LYNX – The Text Web-Browser (invisible-island.net)

2) 다운로드한 파일을 작업 디렉토리에서 아래와 같이 압축을 풀어 줍니다.

tar -zxvf lynx2.8.6.tar.gz

3) 작업 디렉토리를 압축이 풀린 디렉토리로 변경 합니다.

cd lynx2.8.6

4) 설정 스크립트를 실행 시킴니다.

./configure

5) make 명령을 실행해서 소스 코드를 컴파일 하고 실행 가능한 파일을 만듭니다.

make

6) root사용자로 실행 가능한 lynx파일을 사용자의 PATH에 있는 공통 디렉토리로 복사를 합니다.

보통 리룩스 시스템의 공통 디렉토리는 /usr/local/bin 입니다.

lynx 명령어 라인.

lynx 명령은 원격 Web에서 검색할 수 있는 정보가 매우 다양합니다.Web은 사용자의 브라우저로 전달되는 정보에는 아래의 3가지 타입이 있습니다.

■ HTTP headers : Web 서버로 부터 보내지는 데이터의 종류 등 기본 정보 포함

■ Cookies : 방문기록 저장

■ HTML content : HTML의 실제 데이터가 저장 되는 부분.

lynx프로그램은 3가지 모드에서 실제 HTML의 컨텐츠를 보여 줍니다.

■ curses 그래픽 라이브러리를 사용하는 터미널 세션의 텍스트 그래픽 디스플레이 모드

■ 텍스트 파일로 웹 페이지에서 원시 데이터 덤프.

■ 텍스트 파일로 웹 페이지에서 원시 HTML 소스 코드 덤핑

lynx의 기본 명령어 형식

■lynx options URL

url은 접속 하려는 web site를 주소를 입력 하면 되고 option은 web서버와 작동 하는 방식을 정의하는 옵션을 정의를 할수 있습니다. 예를 들면 WEB에 데이터를 게시를 하고 싶은 경우에는 -post -data의 옵션을 사용할 수가 있습니다.

반응형

lync configuration 파일 사용하기

lynx에는 자주 사용되는 여러가지 옵션들이 있는데, 명령어 라인에서 매번 입력을 하기에는 너무 귀찮을 수 있습니다. 이를 위해 configuration 파일에 자주 사용하는 옵션들을 미리 정의를 하여 사용을 할 수 있습니다.

파일의 위치는 아래와 같습니다.

/usr/local/lib/lynx.cfg

configuration 파일 사용 방법

PARAMETER:value

lynx에는 명령어 파라에터가 굉장히 많은데요, 아래표를 참고 하시기 바랍니다.

Lync Command Parameter

아래는 Proxy 서버를 정의 하는 파라메터 입니다.

http proxy:http://some.server.dom:port/ https proxy:http://some.server.dom:port/ ftp proxy:http://some.server.dom:port/ gopher proxy:http://some.server.dom:port/ news proxy:http://some.server.dom:port/ newspost proxy:http://some.server.dom:port/ newsreply proxy:http://some.server.dom:port/ snews proxy:http://some.server.dom:port/ snewspost proxy:http://some.server.dom:port/ snewsreply proxy:http://some.server.dom:port/ nntp proxy:http://some.server.dom:port/ wais proxy:http://some.server.dom:port/ finger proxy:http://some.server.dom:port/ cso proxy:http://some.server.dom:port/ no proxy:host.domain.dom

Lynx 환경 변수

명령어 라인 옵션과 configuration 파일을 통해 원하는 대로 Lynx 프로그램을 커스트마이징을 할수 있지만

Configuration file의 접근 권한이 없는 경우에 환경변수 설정을 통해 커스트마이징을 할수 있습니다.

아래 테이블은 lynx의 환경 변수들을 보여 줍니다.

Lynx로 데이터 캡쳐 하기

Lynx를 스크립트에서 사용할때 대부분의 사용 목적은 Web page로 부터의 특정 정보의 부분을 얻기 위한 경우가 많습니다. 이걸 가능하게 만드는 방법을 Screen scraping이라고 부르고 사용하는 방법은 -dump옵션을 사용을 하는 것인데 Web page에서 보이는 데이터를 표준 STDOUT으로 출력읋 해줍니다.

사용방법과 출력 결과는 아래와 같습니다.

The Recipe Center
"Just like mom use to make"
Welcome
[1]Home
[2]Login to post
[3]Register for free login
[4]Post a new recipe

좀더 자세한 사용 예제를 들어 보도록 하겠 습니다. Yahoo에서 특정 지역의 날씨 정보를 추출 하는 방법에 대해 알아 봅시다. 우선 각 지역은 특정 url을 이용해 데이터를 분리하여 표시를 해 줍니다.

시카고의 일리노이스의 날씨 정보를 찾는 방법을 보면 lynx 명령어 결과를 파일로 리다이렉트를 시키고,

그 파일에서 sed나 gwak에디터를 이용하여 원하는 데이터를 추출하는 방법 입니다.

Current conditions as of 1:54 pm EDT
Light Drizzle
Feels Like:
50◦
Barometer:
29.34 in and falling
Humidity:
93%
Visibility: 4 mi
Dewpoint:
48◦
Wind:
S 16 mph

위의 예에서 보면 각 날씨 항목의 값이 해당 항목의 아래에 표시되어 있는것을 볼수 있습니다. 이를 가공을 해서 원하는 데이터만 표시하는 스크립트를 만들어 보도록 하겠 습니다.

$ cat sedcond
/Current conditions/{
n
n
p
}
$
$ cat sedtemp
/Feels Like:/{
n
p
}
$
$ cat weather
#!/bin/bash
# extract the current weather for Chicago, IL
LYNX=`which lynx`
TMPFILE=`mktemp tmpXXXXXX`
$LYNX -dump $URL > $TMPFILE
conditions=`cat $TMPFILE | sed -n -f sedcond`
temp=`cat $TMPFILE | sed -n -f sedtemp`
rm -f $TMPFILE
echo "Current conditions: $conditions"
echo The current temp outside is: $temp
$ ./weather
Current conditions: Light Rain
The current temp outside is: 49◦
$

2. cURL 프로그램

LYNX프로그램의 인기는 cURL이라는 프로그램을 탄생 시키게 되었 습니다. 이 프로그램은 명령어 라인에서 특정 URL을 사용하여 파일을 전송하게 해 줍니다.

현재 지원되는 프로토콜들은 FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, Telnet, DICT, LDAP, LDAPS등이 있습니다.

그럼 이제 cURL의 설치 방법과 사용방법에 대해서 알아 보도록 하겠 습니다.

cURL 설치 하기

대부분의 리눅스에서는 기본으로 설치되어 있지만, 만약 없다면 아래의 순서에 따라 cURL을 설치를 하시면 됩니다.

1) 아래의 주소에서 다운로드를 받습니다.

Site: curl.haxx.se

2) 압축을 풉니다.

tar -zxvf 다운로드한 파일 이름 .tar.gz

3) 해당 디렉토리로 이동을 합니다.

cd curl-7.18.0

4) 설정 파일을 실행 시킴니다.

./configure

5) 소스를 컴파일 아히기 위해 make를 실행 시킵니다.

make

6) root 사용자로 실행 가능한 파일을 공통 작업 경로로 복사를 해줍니다.

/usr/local/bin

cURL 사용하기

cURL은 기본적으로 전체 HTML Code를 STDOUT으로 반환을 해 줍니다. 아래 예를 하나 살펴 봅시다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
<head>
<link rel="stylesheet" type="text/css" href="mystyle.css" />
<link rel="stylesheet" media="print" type="text/css" href="print.css"
/>
<title>The Recipe Center</title>
</head>
<body>
<table width="100%" border="0">
<tr>
<td id="header" height="90" colspan="3">
<h1><br>
The Recipe Center</h1>
<h4>
<em> "Just like mom use to make"</em></h4></td>
</tr>
<tr>
<td id="nav" width="15%" valign="top">
<table width="100%" cellpadding="3">
<tr>
<td><h3>Welcome</h3></td>
</tr>
<tr>
[ listing truncated ]

cURL도 Lynx처럼 많은 옵션들을 가지고 있습니다 . 사용 가능한 파라메터들은 아래표를 참고 하시기 바랍니다.

cURL의 간단한 사용 예제로 최신 IOS를 WEB에서 다운받는 예제를 살펴 보겠습니다.

아래 스크립트를 참고 하시기 바랍니다.

$ cat downld
#!/bin/bash
# download latest cURL file automatically
curl -s -o /home/rich/curl-7.18.0.tar.gz
$

zsh을 이용한 네트워킹

zsh은 모듈 형태로 많은 기능들을 제공을 해주는 shell입니다. 그 중 TCP modul을 이용해 네트워킹을 하는 방법에 대해서 알아 보도록 하겠 습니다.

TCP Module

설치 하는 방법은 간단 합니다. 아래 명령을 shell에서 실해을 시켜 주면 됩니다.

% zmodload zsh/net/tcp

%

tcp 모듈을 로딩한 후에는 명령어를 이용해 사용을 하게 되는데요, 명령어 사용 방법은 아래와 같습니다.

ztcp [-acflLtv] [ -d fd] [args]

옵션들에 대한 살명은 아래와 같습니다.

■ -a: 새로운 연결 허용

■ -c: 기존 연결 종료

■ -d: 연결을 위해 특정 File descriptor를 사용할 경우

■ -f: 연결 종료를 위한 강제 연결

■ -l: 리스닝을 위한 새로운 소켓 열기

■ -L: 현재 연결된 소켓 리스트 하기

■ -t: 보류 중인 연결이 없으면 종료

■ -v:연결에 대한 자세한 정보를 표시

ztcp 프로그램은 FD를 사용하여 열린 TCP 연결과 상호 작용합니다. 기본적으로, zsh는 환경 변수 $RESULT를 사용하여 FD를 참조 합니다 . 필요한 모든 것은 $RESULT 변수에 지정된 파일 디스크립터에 데이터를 보내고 TCP 모듈은 원격 호스트로 전달 합니다. 마찬가지로 원격 호스트가 데이터를 보내면 필요한것은 $RESULT 변수에 지정된 FD에서 데이터를 읽어 들이면 됩니다.

아래는 서버와 클라이언트 간에 통신을 하는 절차 입니다.

그럼 이제 server와 client의 sample 스크립트를 살펴 보도록 하겠 습니다.

Server side 스크립트
% cat server
#!/bin/zsh
# zsh TCP server script
zmodload zsh/net/tcp
ztcp -l 5150
fd=$REPLY
echo "Waiting for a client..."
ztcp -a $fd
clientfd=$REPLY
echo "client connected"
echo "Welcome to my server" >& $clientfd
while [ 1 ]
do
read line <& $clientfd
if [[ $line = "exit" ]]
then
break
else
echo Received: $line
echo $line >& $clientfd
fi
done
echo "Client disconnected session"
ztcp -c $fd
ztcp -c $clientfd
%
Clien side Script
% cat client
#!/bin/zsh
# zsh TCP client program
zmodload zsh/net/tcp
ztcp localhost 5150
hostfd=$REPLY
read line <& $hostfd
echo $line
while [ 1 ]
do
echo -n "Enter text: "
read phrase
echo Sending $phrase to remote host...
echo $phrase >& $hostfd
if [[ $phrase = "exit" ]]
then
break
fi
read line <& $hostfd
echo " Received: $line"
done
ztcp -c $hostfd
%

TCP 모듈을 이용해 Server와 Client 스크립트를 만들어 보고 다양한 옵션들을 익혀 보시기 바랍니다.

오늘 포스팅은 여기까지 하겠 습니다.

728x90
반응형

'쉘스크립트' 카테고리의 다른 글

관리자를 위한 Shell Script  (1) 2022.07.06
E-Mail 사용하기  (1) 2022.07.06
Database 이용하기  (0) 2022.07.06
Advance gawk  (0) 2022.07.06
진화된 sed  (1) 2022.07.06