네트웍 관련 명령

ping / telnet ssh / lynx / ftp ncftp / write talk / mail

지난 화요일 - 기본 명령어 - 에 언급된 네트웍 관련 명령들을 여기서 정리해 보자. 앞서 설명한 것처럼 GNU/Linux 시스템의 네트웍 관련 기능은 각각의 데몬들이 맡고 있는 서비스들에 해당한다. 다시 말해 여기서 소개하는 명령어들은 다른 GNU/Linux 시스템에서(경우에 따라 현재의 시스템, 또는 또다른 종류의 네트웍 서비스 제공 시스템 - 예를들어 UNIX, MS-Windows 등) 동작하는 데몬의 서비스를 받기 위한 것들이다.

네트웍 접속을 위한 명령어들
$ ping [address] - 원격 시스템 확인

보안상의 이유로 외부에 노출시키지 않는 경우를 제외하고, 인터넷에 연결된 모든 컴퓨터 시스템은 외부의 특정 신호에 대해 자신이 동작 중임을 알리는 반응을 한다. ping 명령은 목표로 한 주소(address)에 대해 이 신호를 계속 보내는 것이다. 보낸 것만큼의 패킷[34]이 모두 되돌아 온다면 그 시스템은 살아있고, 또한 신호를 보낸 쪽과 사이의 네트웍에는 아무런 장애가 없다는 의미다. 패킷이 모두 유실되었다면 그 시스템이 꺼져 있거나 또는 네트웍이 끊겨 있다는 말이다.

$ ping www.kps.or.kr           # 한국물리학회의 웹서버

ping 명령을 종료하기 위해서는 이미 소개한 것처럼 쉘의 강제종료 단축키 Ctrl-C를 이용한다.

$ telnet [address] - 원격 시스템에 텔넷 접속

telnetztelnet은 MS-Windows 뿐만 아니라 일반적인 유닉스 시스템에도 기본으로 설치되어 있는 명령이다. [35] 어떻게 이용하는지는 - 이미 이것으로 시스템에 접속했을 것이므로 - 잘 알 것이다. 접속한 원격지 시스템에서의 한글 입력에 문제가 있을 수도 있으므로 telnet -8 주소, 즉 -8 옵션을 줘서 실행시키자. ztelnet의 경우에는 이런 문제가 없고, 또한 FTP만큼 쓸만하지는 않지만 ZModem이라는 프로토콜을 이용한 파일 송수신 기능도 있다.

$ ssh [option] [address] - 원격 시스템에 보안쉘 접속

SSH(보안쉘, Secure SHell)은 일반 TELNET 서비스가 보안상 취약하다는 - 예를들어 TELNET을 통해 오가는 데이터가 감시당할 수 있다 - 점을 보완하기 위한 서비스다. GNU/Linux 시스템에서는 SSH을 통해 원격 시스템에 접속할 수 있는 소프트웨어인 OpenSSH을 이용할 수 있으며 ssh 명령을 쓴다.

MS-Windows 시스템에서의 SSH

몇 가지 소프트웨어가 있지만, XShell, SecureCRT 그리고 최근의 PuTTY 정도를 추천한다. 먼저 것은 상용이지만 30일 쉐어웨어 버전을 이용할 수 있고, 뒤에 것은 아직 이용해 보지 않았지만 최근 호평을 받고 있는 프리웨어(?)다.

일단 GNU/Linux 시스템에 접속한 상태임을 가정하고, ssh 프로그램을 이용해 또다른 SSH 서비스로 접속하는 과정을 살펴 보자.

$ echo $HOSTNAME                 # 현재 jedi가 접속한 서버
cpu.phys.cau.ac.kr
$ ssh tatuin.pla.net                    # tatuin 서버의 '같은 계정'으로 접속
jedi@tatuin's password:
$ ssh -l skywalker cpu.phys.cau.ac.kr   # '다른 계정'으로 접속하려면 -l 옵션
skywalker@cpu's password:

ssh -l id address, 즉 -l을 써서 접속하려는 곳에서의 사용자명을 명시해 주는 것이 원칙이지만 현재 이용중인 사용자명이 그 곳에도 있을 경우 이를 생략해도 된다. 패스워드 입력 후에는 쉘 계정으로 들어간 것이므로 TELNET 서비스를 이용하는 경우와 다를 바 없다.

MS-Windows에서의 프로그램도 마찬가진데, ssh 명령을 처음 실행하면 "지금 접속하려는 곳을 믿을 수 있는 시스템으로 등록하겠느냐?"는 물음이 뜬다. 이때 한 번 yes라고 해주면 다음 접속 이후로는 묻지 않는다.

$ lynx [option] [url] - 웹 브라우저

(믿기지 않겠지만) 이것은 텍스트 모드에서 동작하는 웹브라우저 소프트웨어다. 구조가 복잡하지 않고 정확한 HTML 규약에 따른 곳이라면 이것으로도 왠만한 웹싸이트를 돌아다닐 수 있다. lynx의 기능을 포함하며 더 나은 기능도 갖춘 links라는 것도 있다. 다음을 실제로 따라해 보자.

$ links http://gnome.org/
$ links file:///usr/share/gnome/help/galeon-manual/C/index.html
$ links -source http://gnome.org/       # -source 옵션은 웹페이지 소스를 가져옴

links lynx 둘은 키보드를 이용해 웹써핑을 할 수 있도록 만들어졌으며 그림을 직접 볼 수는 없어도 그것이 어떻게 배치되어 있는지 확인할 수 있고 원한다면 다운로드 받을 수도 있다. 이들의 이용법은 앞서 다루었던 info 명령어와 매우 유사하므로 그것을 참고하기 바란다.

"어떤 브라우저에서도 보이도록!" 웹페이지를 만들자는 온라인 캠페인인 Any browser를 들먹이지 않더라도, 특히 국내의 많은 웹싸이트들이 "별 이유도 없이" Internet Explorer 전용으로 되어 있는 사실에 최소한 반감은 가져야만 한다. 반면 각 분야에서 중요한 역할을 맡고 있는 많은 외국 싸이트들은 극소수에 불과한 lynx 사용자들도 고려해 준다. 예를들어 미국 물리학회의 홈페이지를 방문해 보자.

$ ftp [option] [address] - FTP로 파일 송수신

FTP(파일전송 프로토콜, File Transfer Protocol)는 인터넷 초창기부터 컴퓨터들 사이에 커다란 파일을 주고받기 위해 널리 이용되고 있다. 최근에는 HTTP를 통한 파일 송수신이 일반적이지만, 그 속도와 효율성 면에서 여전히 FTP가 압도적인 우위에 있으므로 앞으로도 나름대로의 영역을 확보하고 있을 것이다. MS-Windows 시스템에서 기본으로 지원하는 ftp 명령보다는 100배쯤(?) 낫지만, 그래도 많은 이용자들은 터미널에서 이용하는 FTP 명령으로 ftp를 쓰지 않고 ncftp를 선택한다. 관리자의 취향이 유별나지 않는한 이 ncftp를 어떤 GNU/Linux 시스템에서도 이용할 수 있을 것이므로 우리도 이것을 기준으로 하자.

$ ncftp ftp://cpu.phys.cau.ac.kr   # ftp://; 프로토콜을 명시, 없어도 됨

위와 같이 하면 C P U 시스템의 FTP 서버에 대한 정보(FTP 서비스를 위한 데몬은 wu_ftpd), 손님의 로그인, 현재 디렉토리 등이 출력된 후 ncftp 고유의 프롬프트 상태에 놓이게 된다. 여기서 다음의 명령을 따라해 보자.

ncftp / > ls
bin/  etc/  lib/  pub/
ncftp / > cd pub/; ls
xxx/    yyy/    zzz/
ncftp /pub >

이쯤해도, FTP 프롬프트에서 이용할 수 있는 명령이 그동안 다뤄온 쉘에서의 그것과 유사하다는 사실을 알았을 것이다. 포스가 강한 사람이라면 Bash가 제공하는 편리한 몇 가지 기능들 - Tab 키를 이용한 자동완성이나 쉘 단축키, 화살표 키를 이용한 명령 히스토리 기능까지, 스스로 발견할 것이다. 이 프롬프트에서 이용할 수 있는 모든 명령어의 목록을 보려면 help 명령을 해보자.

수 십 개의 명령이 있는데 지금 설명할 것은 l 문자로 시작하는 몇 가지와 get, 그리고 put 명령 정도다. 먼저 l 문자로 시작하는 lls lpwd lcd lmkdir lrm 등 명령은 모두 local 호스트, 즉 ncftp라는 명령을 내린 바로 그 곳에서의 동작을 의미하는 것들이다. 참고로 이 바닥에서는 접속한 곳과 접속된 곳에 대해 각각 localremote라는 용어가 널리 통한다.

get 명령은 어떤 파일을 remote-->local로, put 명령은 당연히 local-->remote로 보내는 것이다. 주고받을 파일을 여러 개(Multiple) 지정할 때 기본 ftp 프로그램에선 mget mput이라는 별도의 명령을 이용하지만 지금 우리가 쓰고 있는 ncftp에서는 get put 명령을 그대로 쓰면서 쉘에서의 방식대로 * 문자를 이용하면 된다. 예를들어 > get *.png 명령은 현재 디렉토리의 모든 PNG 파일을 가지고 온다.

한편, 우리는 '손님(guests, anonymous)' 상태로 접속되어 있으므로 아마 get 명령은 쓸 수 있지만 put 명령은 쓸 수 없으리라 생각될 것이고, 정말 그렇다. 어떤 FTP 서버로 접속할 때 다음과 같이 해야 파일을 올리고 받는 자신의 권리를 다 누릴 수 있다.

$ ncftp -u jedi cpu.phys.cau.ac.kr               # -u user_id 옵션
(...)   Password required for jedi.
Password:
User jedi logged in.
ncftp /home/jedi > put *.txt                 # 모든 TXT를 업로드

또 하나 달라진 점이 눈에 띈다 - 익명(anonymous)으로 접속했을 때는 / 디렉토리에 있었는데, 지금은 바로 사용자 자신의 홈이다. 이 문서를 지금까지 읽어온 사람이라면 왜 이렇게 바뀌는지 감을 잡을 수 있을 것이다 :-)

MS-Windows에서의 FTP

ws_ftp cute_ftp 등 간편한 그래픽 환경 소프트웨어들을 이용할 수 있다. 호스트의 이름과 사용자명, 그리고 패스워드를 입력해서 로그인한다. 주의할 것은; 되도록 "패스워드를 저장하지 말라!" FTP 프로그램은 유닉스 명령을 모르고도 간편히 이용할 수 있는 파일 관리자나 다름없고, 따라서 자신의 FTP 계정을 MS-Windows의 다른 이용자들에게 노출한다는 것은 쉘 계정을 노출하는 것과 마찬가지다.

커뮤니케이션을 위한 명령어들
$ write [user] - 상대의 터미널에 메시지 보내기

write 명령은 시스템에 접속한 또다른 이용자와 간단한 메시지를 주고 받을 수 있게 해 준다. 만약 여러 개의 터미널로 접속한 상대라면 메시지를 보낼 터미널을 명시하거나, 또는 명시하지 않아도 상대가 메시지를 읽을 수 있는 터미널로 '쓰기'를 시도한다 - 이 명령은 상대방 소유의 터미널에 자신의 메시지를 '쓰는' 것이다.

$ w
USER  TTY   FROM          LOGIN@  IDLE   JCPU   PCPU  WHAT
jedi  pts/0 xx.xx.xx.xx  02:10am 60.00s  0.08s  0.08s  w
yoda  pts/1 yy.yy.yy.yy  02:55am  0.00s  0.09s  0.03s  -bash 
$ write yoda
Hey, I'm your father~ :-p       # 종료하기 전까지
Don't sleep ya? huh..           # 메시지를 계속 보낸다.
Ctrl-C                            # 종료
$

위 보기에서처럼 하면 yoda 이용자의 터미널에 jedi 이용자의 메시지가 보여진다. yoda 자신도 물론 jedi에게 같은 방법으로 메시지를 보낸다. 터미널이나 (편집 중이었다면) 파일 편집기의 아래 부분이 상대의 메시지로 덮이게 되는 것이 싫다면 화면 청소 단축키, 즉 Ctrl-C를 누르자.

중요한 작업을 하고 있거나 또는 상대가 스토커일지(?) 모른다는 생각이 들면 오는 메시지를 거부할 수 있다. mesg n 명령은 시스템 관리자(root)가 보내는 wall(write all) 메시지를 제외한 모두를 거부하게 한다. 다시 mesg y 명령을 내리면 메시지를 받을 수 있고, 현재 어떤 상태인지 확인하려면 그냥 mesg 명령을 쓴다.

$ talk [user] - 터미널에서 대화

시스템에 접속한 이용자끼리 터미널 모드 대화방을 만들 수 있다. 이것은 talkd 데몬이 제공하는 서비스며, 특히 원래의 talk 명령보다 여러모로 편리한 ytalk 명령이 주로 쓰인다. ytalk로 다른 이용자에게 말을 걸려면 다음과 같이 하자.

$ ytalk -x yoda      # -x 옵션은 X 윈도우가 아닌 터미널 모드를 의미

yoda 이용자의 터미널에는 jedi가 ytalk로 말을 건다는 메시지가 보이고, 자신도 마찬가지로 ytalk -x jedi 명령을 한다. 두 이용자의 터미널은 아래와 같이 반으로 나뉘어 위 쪽은 자기 자신, 그리고 아래 쪽은 대화 상대의 메시지들이 '실시간으로' 나타난다.

----------------------------= YTalk version 3.1.1 =-----------------------------
Huh... just for fun! :-p
참, 질문!! 이거 종료하려면 어떻게..? ㅡㅡ;음...
감사^2 ^^ 마스터 요다`
어, 진짜네// 
음... 재미있는 명령이네.. "ytalk -x 이용자명"
-x 안하면 안되는지?
---------------------------= yoda@cpu.phys.cau.ac.kr =---------------------------
Why did you call me?
Ctrl-C ; 쉘 강제종료 키 한 방~!  
참고로... Esc 키 누르면 메뉴가 뜬다..
이거 사실 여러 명이서 쓸 수 있는 대화방(?)임..
그냥 ytalk는 X 윈도 새창을 여는데.. 아마 한글이.. :-(

위의 대화(?)에서 눈치챌 수 있는 것은 앞의 write 명령과 종료 키가 같고, Esc 키를 누르면 내부 메뉴를 볼 수 있으며, 사실 둘 이상의 이용자들이 하나의 방에서 대화할 수도 있다는 사실이다. 둘이 대화하고 있는 도중 세 번째 이용자가 대화에 참여하려면 방 안의 이용자가 초청을 하거나, 또는 자기가 먼저 참여 의사를 보내면 된다. 물론 참여 의사는 ytalk -x 둘_중_하나 명령이다. 대화를 걸고 받아들이고 하는 모든 과정은 각자의 터미널에 뜨는 메시지를 보고 적당히 알아서 따라갈 수 있을 것이다. 자세한 이용법은 매뉴얼 페이지를 참고하라.

$ mail [option] [email] - 전자메일 관리

시스템의 이용자들끼리, 또는 일반적인 전자메일 주소를 이용해서, 간편하게 메일 메시지도 주고 받을 수 있다. 받을 사람이 현재 시스템의 이용자라면 (많은 무료 메일 서비스에서도 그렇듯) mail user_id라고만 해도 되고, 다른 시스템일 경우 그(녀)의 메일 주소를 정확히 입력해 준다.

mail 명령이 어떻게 이용되는지는 이미 앞에서 힌트를 보였다; 쉘 명령을 이용하는 요령에 대한 절을 참고하라. 명령을 할 때 -s "제목..." 옵션을 주면 제목을 다시 묻지 않고 그렇지 않으면 첫 줄에서 제목을 입력하게 된다. 그 다음엔 본문을 작성하고, 완료되었다면 Ctrl-d, 취소하려면 Ctrl-c를 누른다(확인을 위해 '두 번' 누름).

메일을 보내는 요령에 대해서는 충분히 알았을 것이다. 그런데 살다보면 어디선가 날아온 새 메일을 받는 경우도 있다. 자신에게 메일이 도착했다는 사실은 쉘이 알려준다; 받은 메일을 확인하기 위해서는 간단히 mail 명령을 해 주면 된다.

You have new mail in /var/spool/mail/jedi
$ mail
Mail version 8.1 6/6/93.  Type ? for help.
"/var/spool/mail/jedi": 1 message 1 new
>N  1 yoda@cpu.phys.cau  Mon Sep  2 17:54  13/432   "I am your father..."
&

현재 선택된 메일은 1번이고 이것을 읽으려면 Enter 키를 친다. 여러 개의 메일이 있을 때는 제목 번호를, 그리고 현재 선택된 메일에 대해 어떤 동작을 지시하려면(삭제나 저장 등) 커서가 위치한 곳, 즉 메일 프롬프트(& 문자)에서 적당한 명령을 해 준다. 삭제하려면 d, 저장하려면 w - 그리고 메일 보기를 종료하려면 q 명령을 한다. 참고로 이렇게 쉘 계정에서 확인한 메일은 홈 디렉토리의 mbox 파일에 계속 내용이 불어나며 쌓이며 따라서 예전 메일을 확인하려면 이 파일을 열어보면 된다.[36]



[34] Wave packet이 아니라 신호(시그널, signals)의 패킷

[35] ztelnet은 국내 배포판의 일부에만 포함됨; 시스템 관리자의 취향에 따라 설치되지 않은 경우도 있을 것이다.

[36] mbox 파일의 접근 권한을 확인해 보면; 그냥 둬도 프라이버시를 지킬 수 있다는 사실을 알 것이다 :-)