Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

command line은 강력하다

왜!! 완벽하고 아름다운 GUI를 두고 구닥스러워 보이는 command line을 사용하나요 ?라는 질문을 종종 받는다. 답은 강력하기 때문이다. 1995년 이후의 컴퓨터 세대는 컴퓨터를 창과 아이콘으로 제어하는 기계라는 생각을 가지고 있다. 그러나 실은 그렇지 않다는 얘기를 하고 싶다.

그 전에, 1995년으로 세대를 나눈 이유에 대해서 알아봐야 겠다. 1995년으로 나누는 이유는 윈도95가 발표된 시점이기 때문이다. 리눅스진영에서는 윈도95의 인터페이스와 비슷한 모습을 보여주는 FVWM95 윈도우 메니저가 발표되었다. 윈도 운영체제에서 뿐만 아니라 전통적으로 command line을 선호했던 리눅스도 (쓸만한)윈도 시스템이 제공이 되었으니, command line은 역사의 뒤안길로 사라질 것으로 생각했다.

윈도에서는 DOS command line을 거의 사용하지 않는다. 그러나 리눅스는 여전히 command line이 살아있다. 초기의 FVWM95와 비교할 수 없을 만큼 강력한 KDE와 gnome를 사용하고 있는 지금도 마찬가지다. 나의 경우에도 웹서핑을 제외한 거의 대부분의 작업을 command line에서 처리한다.
  • 파일 관리 : KDE는 dolphin, gnome은 Nautilus 같은 GUI 관리 툴이 있기는 하다. 하지만 대부분 터미널 상에서 명령어를 입력해서 작업한다. 쉽고 빠르고 강력하니까.
  • 웹서핑 : w3m을 사용한다. 로컬컴퓨터가 아닌 원격 컴퓨터에서도 실행할 수 있다. 특히 textarea 편집시 vim을 사용할 수 있다.
FVWM95KDE 4.3

VirtualBox와 Command Line

VirtualBox는 잘 구성된 GUI환경을 가지고 있다. 아이콘도 예쁘고, 메뉴구성도 잘되어 있어서 쉽게 사용할 수 있다. 거의 모든 설정과 사용을 GUI상에서 끝낼 수 있다. 그러나 진정한 파워는 command line으로 발휘 된다. RPG 게임에서 주인공이 진정한 파워를 얻을 수 있는 곳은 잘 정돈된 세계가 아닌, 어두운 던전인 것과 비슷하다.

command line을 어두운 던전으로의 비유는 매우 적절한 것 같다. command line을 이용하기 위해서는 어두움으로 채워진 썰렁한 사각형 창, 터미널 애뮬레이터을 띄워야 하기 때문이다. 간편함, 강력함, 빠름, 효율성 덕분에 시스템 관리자에게 command line은 필수로 사용된다. 물론 command line의 장점을 제대로 누릴리면 약간의 공부가 필요하긴 하다.

virtualBox로 virtual disk 추가, network interface 관리, VM 생성을 할때도 command line을 이용하면 훨씬 빠르게 원하는 작업을 할 수 있다. 만약 기업에서의 가상 인프라 환경을 관리해야 하는 경우라면, command line을 이용해서 이러한 과정을 자동화 시킬 수도 있다.

설치와 기본 환경

설치는 virtualbox 설치 문서를 참고하기 바란다. Virtualbox를 사용하기 위한 시스템 환경이다.
  • 운영체제 : Ubuntu 리눅스 13.10
  • Virtualbox 버전 : 4.2.16
이 문서는 virtualbox 3.1.2를 기준으로 하고 있다.

VM 만들기와 설정

아이콘과 메뉴로 제어할 수 있는 GUI와 달리 commandline는 기본적인 명령을 알고있어야 한다. 이게 초기 command line의 사용을 어렵게 하는 요인이다.

이제 새로운 VM을 만들어 보자.

# /usr/bin/VBoxManage createvm --name Ubuntu9 register
Ubuntu9이라는 이름을 가지는 새로운 VM을 생성하고 VirtualBox에 등록시켰다. 생성된 VM정보는 홈 디렉토리(:12)의 ~/.VirtualBox/Machines/Ubuntu9/Ubuntu9.xml에 xml(:12)파일로 저장된다.

가상 디스크 생성

# /usr/bin/VBoxManage createhd --filename Ubuntu9.vdi --size 4000 --variant Fixed
Ubuntu9.vdi를 이름으로 하는 가상 디스크를 생성한다. 디스크의 크기는 4GB로 크기를 고정시켰다.

가상 디스크와 가상 CD/DVD드라이브를 추가하기 위해 Stroage Controller를 생성한다

# /usr/bin/VBoxManage storagectl Ubuntu9 --name "IDE Controller" --add ide --controller PIIX4
"IDE Controller"이름을 가지는 PIIX4 형식의 IDE 컨트롤러를 생성했다.

만든 가상 디스크를 VM에 추가한다.

# /usr/bin/VBoxManage storageattach Ubuntu9 --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium Ubuntu9.vdi

설치할 운영체제의 ISO 이미지를 추가한다.

# /usr/bin/VBoxManage storageattach Ubuntu0 --storagectl "IDE Controller" --port 0 --device 1 --type dvddrive --medium /ISO/ubuntu-9.10-desktop-i386.iso

네트워크 설정

# /usr/bin/VBoxManage modifyvm Ubuntu9 --nic1 bridged --cableconnected1 on --bridgeadapter1 eth0
리눅스 시스템의 eth0 네트워크 어뎁터와의 bridget NIC를 생성한다.

VM 실행

# /usr/bin/VBoxManage startvm Ubuntu9 
이 명령을 이용해서 데스크 탑에 Ubuntu VM과 WinXP VM이라는 바로가기 아이콘을 만들었다.
보낸 사람 virtualbox

VM 관리 하기

VM 목록

VM 이미지 목록
# VBoxManage list vms
"windows7" {5322993f-196b-492d-a444-9327189964ec}
"server01" {dcd73d21-b8e0-45f3-852a-78c19e024e43}
"server02" {f2ad9b8b-56a1-49fb-95cd-458a5d78cddd}
"Google Nexus 4 - 4.4.2 - API 19 - 768x1280" {68c012ad-9873-4632-98d4-bd5c208aed32}
"avahi_test01" {ab7a6a46-7d74-4a1d-9c2a-378c1f8130c7}
"avahi_test02" {d9e36577-a2db-4b16-b102-516a0398ffba}

실행중인 VM 목록
# VBoxManage list runningvms
"avahi_test01" {ab7a6a46-7d74-4a1d-9c2a-378c1f8130c7}
"avahi_test02" {d9e36577-a2db-4b16-b102-516a0398ffba}

VM 실행

# VBoxManage startvm avahi_test01 --type headless
3가지 실행 타입이 있다.
  • gui : Virtualbox Gui 창이 뜬다.
  • sdl : VirtualBox에서 제공하는 간단한 (터미널느낌의)창
  • headless : 아무것도 뜨지 않는다.

실행 중인 VM의 IP

나는 showvminfo로 vm의 MAC 주소를 읽어온 다음, arp 테이블에서 해당 MAC에 대한 IP 주소를 확인하는 방법을 사용한다.
# VBoxManage showvminfo avahi_test01 | grep MAC
NIC 1:           MAC: 080027C96441, Attachment: Host-only...

# arp -a | grep 08:00:27:c9:64:41
? (192.168.56.51) at 08:00:27:c9:64:41 [ether] on vboxnet0
스크립트 하나 만들어서 사용하는 방법도 있겠다.

자동화

자동화를 위해서는 배포/실행 시스템을 갖추어야 한다. 여러가지 방법이 있겠으나 개인적으로 ssh(:12)의 공용키를 이용해서 인증환경을 만들고, 그 위에 Agent,Manager시스템을 구축하는 방식을 선호한다.

관리 대상 장비에 Manager를 설치하면, Agent로 배포하고, 이를 실행시키는 방식이다.

출처 : http://www.linux-mag.com/id/7673