VirtualBox 가상머신을 백그라운드에서 실행해보자


환경 및 선수조건

  • Linux or Mac
  • VirtualBox and VM(미리 만들어진)


VBoxManage 명령어

VBoxManage 명령어란?

  • VBoxManage: VBoxManage는 Oracle VirtualBox를 사용할 수 있는 커맨드라인 명령어입니다.
  • VirtualBox를 API를 통해 사용할 수 있는 명령어라고 볼 수 있습니다.
  • API DOC: https://www.virtualbox.org/manual/ch08.html


VM을 백그라운드에서 실행

  • 기본
VBoxManage startvm [VM NAME] --type headless
  • 예제
VBoxManage startvm "Ubuntu 14.04" --type headless


VM을 현재 상태로 저장

  • 기본
VBoxManage controlvm [VM NAME] savestate
  • 예제
VBoxManage controlvm "Ubuntu 14.04" savestate


참고자료

Run VirtualBox VM in background by using command line interface


Environment and Prerequisite

  • Linux or Mac
  • VirtualBox and VM(alreaday amde)


VBoxManage Command

What is VBoxManage command?


Run VM in background

  • Usage
VBoxManage startvm [VM NAME] --type headless
  • Example
VBoxManage startvm "Ubuntu 14.04" --type headless


Save VM in current state

  • Usage
VBoxManage controlvm [VM NAME] savestate
  • Usage
VBoxManage controlvm "Ubuntu 14.04" savestate


Reference

각 언어에서 난수를 생성하는 방법을 알아보자


환경

  • C, C++, Python, Javascript, Java, Shell Script


난수 생성 코드

C

  • rand 함수 이용
  • rand(): 0과 RAND_MAX 사이에 난수 정수 값을 반환
  • srandtime함수는 랜덤 생성할 시드 값을 위해 사용
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main (){

    // use time for seed
    srand(time(NULL));

    // print one number in range 1 ~ 50
    printf("%d\n", rand() % 50 + 1);

    return 0;
}


C++

  • rand 함수 이용
  • rand(): 0과 RAND_MAX 사이에 난수 정수 값을 반환
  • srandtime함수는 랜덤 생성할 시드 값을 위해 사용
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main (){

    // use time for seed
    srand(time(NULL));

    // print one number in range 1 ~ 50
    cout << rand() % 50 + 1 << endl;

    return 0;
}


Python

  • random패키지 사용
  • random.random(): 0이상 1미만의 실수를 반환
  • random.randrange(a,b): a이상 b미만의 정수를 반환
import random

# value between 0 and 1, 1 is not included
# ex) 0.667165525151183
rand_value = random.random()

# random integer between a and b, b is not included
rand_value = random.randrange(1,50) # 1 ~ 49


Javascript

  • Math.random()를 사용
  • Math.random(): 0이상 1미만의 실수를 반환

// value between 0 and 1, 1 is not included
// ex) 0.8645079349832587
var = Math.random();


// 올림, 내림, 반올림 -> ceil, floor, round
Math.ceil (Math.random()) // 1
Math.floor (Math.random()) // 0
Math.round (Math.random()) // it depends


Java

  • java.util.Random 혹은 java.lang.Math를 이용
  • random.nextInt(n): 0 ~ n-1 사이의 난수 정수 값을 반환
  • Math.random(): 0이상 1미만의 실수를 반환
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        // Random example using java.util.Random
        Random random = new Random();
        // Number between 100 and 199
        System.out.println(random.nextInt(100) + 100);


        // Random example using java.
        // Number between 100 and 199
        System.out.println( (int)(Math.random() * 114124)%100 + 100 );
    }
}


Shell Script

  • $RANDOM를 이용
  • $RANDOM: 0 ~ 32767 사이의 정수 값을 반환

# Number between 0 and 32767
echo $RANDOM

# Number between 100 and 199
echo $(($RANDOM*12345%100 + 100))


참고자료

ip address 명령어와 해당 내용에 대해서 간략하게 알아보자


환경 및 선수조건


ip 명령어

ip 명령어란?

  • ip: 라우팅, 장치(NIC, Bridge …) 그리고 터널링과 같이 네트워크에 관련된 부분들을 수정하고 조회할 떄 사용하는 명령어입니다.
  • ip(in english): show or manipulate routing, devices, policy routing and tunnels
  • 사용법
ip [ OPTIONS ] OBJECT { COMMAND | help }
  • OBJETCT: link, address, route, rule, tunnel와 같은 대상들을 조회 및 수정할 수 있습니다.


ip address란?

  • 위의 ip명령어에서 OBJETCTaddress인 명령어로 NIC들에 대해 IP주소를 조회할 수 있으며 나아가 추가 혹은 삭제도 가능한 명령어입니다.


ip address 예시

  • 아래는 제가 생성한 VM에서 ip address의 출력결과 입니다.
$ ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:45:44:cc brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe45:44cc/64 scope link
       valid_lft forever preferred_lft forever


ip address 항목 설명

LOOPBACK

  • 자신의 호스트로 보내는 인터페이스를 의미합니다. localhost와 같습니다.

BROADCAST

  • 브로드캐스트 패킷을 처리할 수 있음을 의미하며 해당 기능을 통해 DHCP 서버로부터 IP주소를 받을 수 있습니다.

MULTICAST

  • 멀티캐스트 패킷을 처리할 수 있음을 의미합니다.

UP

  • 해당 NIC가 작동중임을 나타냅니다.

LOWER_UP

  • L1 레이어 즉, 물리계층에서 신호가 UP이라는 의미로 물리계층에서 신호가 들어오고 있음을 의미합니다.

mtu

  • 해당 프로토콜이 해당 레이어에서 전송할 수 있는 최대의 단위(바이트)로 이더넷의 기본값은 1500으로 설정됩니다.

qdisc

  • Queuing Disciplines를 의미하며 NIC에 들어오기전에 데이터 패킷들이 Queue에 저장되는데 FIFO형식인 Queue에 넣기전에 패킷에 우선순위를 부여해서 스케쥴링하는 부분으로 현재 eth0의 경우 pfifo_fast라는 방식을 사용한다는 의미입니다.

state

  • 현재 NIC의 작동상태를 의미합니다.

group

  • 인터페이스 그룹을 의미합니다. 기본값은 default입니다.

qlen

  • 전송큐의 크기를 의미합니다.

link/ether

  • L2 레이어 즉, Link Layer의 프로토콜이 Ethernet이라는 의미이며 바로 옆에 나오는 주소는 해당 NIC의 MAC주소이고 brd는 브로드캐스트를 할 때의 주소를 의미합니다.

inet

  • L3 레이어 즉, Network Layer가 인터넷임을 의미하며 바로 옆에 나오는 주소는 ipv4와 ipv6에 따른 주소를 의미합니다.

scope

  • 해당 인터페이스가 어느 수준에서 접근가능하며 유효하냐는 의미입니다. Global의 경우 외부 네트워크에서 접근이 가능한 범위이며(클라우드에서 호스팅한 인스턴스에 들어가면 Global로 나와있는 경우가 있습니다.) Link의 경우 현재 인터페이스가 속한 LAN안에서만 접근이 가능하고 유효하며 Host의 경우는 현재 인터페이스가 속해있는 호스트에서만 유효하고 접근이 가능하다

valid_lft, preferred_lft

  • 자료의 내용을 참고하면 valid_lft(Valid Lifetime)은 해당 주소가 유효한 시간을 의미하며 뒤에 나온 preferred_lft(Preferred Lifetime)보다 크거나 같다고 합니다. preferred_lft은 의미 그대로 해당 주소가 유효했으면 하는 설정값입니다.


참고자료

ifconfig 명령어와 해당 내용에 대해서 간략하게 알아보자


환경 및 선수조건

  • Linux
  • Bash shell(/bin/bash)


ifconfig 명령어

ifconfig란?

  • ifconfig: 네트워크 인터페이스 관련 정보를 조회 및 수정 할 수 있는 명령어입니다.
  • ifconfig: configure a network interface
  • 최근에는 ifconfig를 사용하기 보다 ip(ip addr, ip route 등등)명령어를 쓰는 방향을 권고하고 있습니다.

ifconfig 예시

  • 아래는 제가 생성한 VM에서 ifconfig의 출력결과 입니다.
$ ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:45:44:cc
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe45:44cc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:47029 errors:0 dropped:0 overruns:0 frame:0
          TX packets:19859 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:38132227 (38.1 MB)  TX bytes:2166799 (2.1 MB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:2255 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2255 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:223063 (223.0 KB)  TX bytes:223063 (223.0 KB)


ifconfig 항목 설명

eth0, lo …

  • Network Interface들의 이름으로 여기에는 NIC, Bridge, Tap Interface 그리고 Tunneling Interface와 같은 부분들의 이름이 표시됩니다.
  • 전송을 할 때 캡슐화 되는 방식을 의미합니다. 즉, 해당 인터페이스로 보내지는 패킷의 종류라고 생각하면 될거 같습니다. Ethernet의 경우에는 이더넷 프레임으로 캡슐화 되어서 보내진다는 것이며 해당 캡슐화 종류를 통해 인터페이스의 종류도 유추가 가능합니다(위의 경우에는 eth0는 Ethernet이구나).

HWaddr

  • Layer2에서 사용하는 하드웨어 주소로 일반적으로 아는 MAC주소로 되어있습니다.

inet addr, inet6 addr

  • 각각 IP주소를 나타내며 inet addr는 IPv4의 주소이고 inet6 addr는 IPv6의 주소입니다. inet6 addr에서 뒤에 표시된 /는 CIDR을 의미합니다.

Bcast

  • Broadcast를 요청을 날릴 주소입니다.

Mask

  • Network Mask(Subnet Mask)의 형식입니다.

Scope

  • 해당 인터페이스가 어느 수준에서 접근가능하며 유효하냐는 의미이다. Global의 경우 외부 네트워크에서 접근이 가능한 범위이며(클라우드에서 호스팅한 인스턴스에 들어가면 Global로 나와있는 경우가 있다.) Link의 경우 현재 인터페이스가 속한 LAN안에서만 접근이 가능하고 유효하며 Host의 경우는 현재 인터페이스가 속해있는 호스트에서만 유효하고 접근이 가능하다.

UP

  • 네트워크 인터페이스가 켜져있음을 의미합니다. 켤 때는 ifconfig [네트워크 인터페이스 이름] up를 사용하고 끌 때는 ifconfig [네트워크 인터페이스 이름] down를 사용합니다.

BROADCAST

  • 브로드캐스트 패킷을 처리할 수 있음을 의미하며 해당 기능을 통해 DHCP 서버로부터 IP주소를 받을 수 있습니다.

RUNNING

  • 네트워크 인터페이스가 정상 작동하며 트래픽(TX 및 RX)이 발생할 수 있음을 의미합니다.

MULTICAST

  • 멀티캐스트 패킷을 처리할 수 있음을 의미합니다.

MTU

  • 해당 프로토콜이 해당 레이어에서 전송할 수 있는 최대의 단위(바이트)로 이더넷의 기본값은 1500으로 설정됩니다.

Metric

  • 우선순위를 나타내는 항목으로 0의 값부터 증가하면서 하나씩 사용할 수 있으며 낮을수록 우선순위가 높습니다. 라우팅을 할 때 여러 인터페이스 카드가 있다면 Metric이 낮은 인터페이스 카드로 라우팅을 하게 됩니다.

TX, RX

  • 보내고 받은 데이터에서 packets,errors,dropped, overruns에 해당하는 패킷의 수를 의미합니다.

TX, RX packets

  • 인터페이스를 통해 보내고 받은 패킷의 수를 의미합니다.

TX, RX errors

  • 보내고 받을 때 생성되는 오류 패킷의 총 양을 의미합니다.

TX, RX dropped

  • 여러 이유로(이 부분에 여러 이유가 있다고 합니다.) 보내고 받는 중에 버려진 패킷의 수를 의미합니다.

TX, RX overruns

  • 보내고 받는 버퍼에 overflow가 나서 추가하지 못한 패킷의 수를 의미합니다.

RX frame

  • 프레임 구조에 맞지 않은 패킷의 수를 의미합니다. 8bit로 프레임이 구성되어 있다고 가정했을 때(가정입니다.) 이러한 프레임의 구조가 틀리거나 다를 때 버려지는 패킷의 수를 의미합니다.

TX carrier

  • 신호 진폭(Signal Modulation)에 오류가 있는 패킷의 수를 의미합니다. 자세한 의미는 모르겠으나 전송할 때 신호 관련해서 생기는 오류로 예상되며 찾아보면 Half Duplex와 연관이 있다고 합니다.

txqueuelen

  • Transmission queue의 크기를 의미합니다.

collisions

  • 네트워킹에서 패킷 충돌이 일어난 패킷의 수를 의미하며 정상적이라면 0이어야 합니다.

TX bytes, RX bytes

  • 보내고 받은 데이터의 총 크기를 의미합니다.


참고자료