Summary


개발을 하다가 명령어를 모두 기억하고 싶어도 잠깐 다른 업무를 하다가 다시하면 잊게되는 명령어들이 있다. 특히 OS 관련 명령어는 서버에 문제가 생겼을 때 사용하기 때문에 더욱 그렇다. 이번에는 자주 사용하지 않았으면 하는 명령어들을 정리해본다.


OS 명령어


sar

  • 리소스 사용 내역을 볼 수 있다.
  • CPU 사용율
  • Idle 상태 상태 확인
  • I/O 의 사용율
  • 메모리 사용율
$ sudo apt-get install sysstat
$ sudo vi /etc/default/sysstat
ENABLED="true"

$ sar -u 1 5
Linux 4.4.0-1013-aws (ip-172-31-55-55)         10/22/2017      _x86_64_        (1 CPU)

05:52:57 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
05:52:58 AM     all      0.00      0.00      0.00      0.00      0.00    100.00
05:52:59 AM     all      0.00      0.00      0.00      0.00      0.00    100.00
05:53:00 AM     all      0.00      0.00      0.00      0.00      0.00    100.00
05:53:01 AM     all      0.00      0.00      0.00      0.00      0.00    100.00
05:53:02 AM     all      0.00      0.00      1.98      0.00      0.00     98.02
Average:        all      0.00      0.00      0.40      0.00      0.00     99.60

top

  • Process의 snapshot 정보
  • 어느정도 부하가 있는 명령어
$ top
19224 aws-kin+  20   0 2480936 169728   8696 S  2.9 16.7  24:48.81 java
    1 root      20   0   37856   4896   2976 S  0.0  0.5   1:00.60 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd
    3 root      20   0       0      0      0 S  0.0  0.0   0:08.99 ksoftirqd/0
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
    7 root      20   0       0      0      0 S  0.0  0.0   4:34.75 rcu_sched
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
    9 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0

vmstat

  • OS의 커널을 통해 취득한 정보
  • 메모리 상태
  • 프로세스의 개수
  • CPU 사용률
  • Swap I/O
  • I/O
  • Context switch 수
$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 151836  89728 508492    0    0     1     4    2    3  0  0 100  0  0
 0  0      0 151852  89728 508492    0    0     0     0  121  381  0  0 100  0  0
 0  0      0 151804  89728 508492    0    0     0     0  176  415  1  0 99  0  0
 0  0      0 151804  89728 508492    0    0     0     0  117  372  0  0 100  0  0
 0  0      0 151804  89728 508492    0    0     0     8  121  389  0  0 100  0  0

ps

  • OS의 커널로 프로세스 정보를 얻는다.
  • ps 명령어를 실행한 시점에 어떤 프로세스가 동작하는지 상태 등을 확인
  • 프로세스의 CPU 사용 누적시간
  • 프로세스 번호, 이름, 명령어
$ ps -elf
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root         1     0  0  80   0 -  9464 -      Jun11 ?        00:01:00 /sbin/init
1 S root         2     0  0  80   0 -     0 -      Jun11 ?        00:00:00 [kthreadd]
1 S root         3     2  0  80   0 -     0 -      Jun11 ?        00:00:09 [ksoftirqd/0]
1 S root         5     2  0  60 -20 -     0 -      Jun11 ?        00:00:00 [kworker/0:0H]
1 S root         7     2  0  80   0 -     0 -      Jun11 ?        00:04:35 [rcu_sched]
1 S root         8     2  0  80   0 -     0 -      Jun11 ?        00:00:00 [rcu_bh]
1 S root         9     2  0 -40   - -     0 -      Jun11 ?        00:00:00 [migration/0]
5 S root        10     2  0 -40   - -     0 -      Jun11 ?        00:00:50 [watchdog/0]
5 S root        11     2  0  80   0 -     0 -      Jun11 ?        00:00:00 [kdevtmpfs]
...

$ ps -elf | grep init
4 S root         1     0  0  80   0 -  9464 -      Jun11 ?        00:01:00 /sbin/init
0 S ubuntu   26767 23875  0  80   0 -  3237 pipe_w 06:36 pts/0    00:00:00 grep --color=auto
--exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn init

netstat

  • 드라이버 수준에서 네트워크 정보를 출력
  • option
    • -a: 소켓 정보
    • -r: 라우팅 정보
    • -i: 인터페이스 단위 정보
$ netstat -i
Kernel Interface table
Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
docker0    1500 0     26198      0      0 0         25454      0      0      0 BMU
docker_gwbridge  1500 0         8      0      0 0             8      0      0      0 BMRU
eth0       9001 0   6761565      0      0 0       3220652      0      0      0 BMRU
lo        65536 0   3854159      0      0 0       3854159      0      0      0 LRU
veth2ea2a18  1500 0         0      0      0 0             8      0      0      0 BMRU

$ netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 *:ssh                   *:*                     LISTEN
...

Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  3      [ ]         DGRAM                    8768     /run/systemd/notify
...

$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         ip-172-31-32-1. 0.0.0.0         UG        0 0          0 eth0
172.17.0.0      *               255.255.0.0     U         0 0          0 docker0
172.18.0.0      *               255.255.0.0     U         0 0          0 docker_gwbridge
172.31.32.0     *               255.255.240.0   U         0 0          0 eth0

$ netstat -tnlp
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp6       0      0 :::2377                 :::*                    LISTEN      -
tcp6       0      0 :::7946                 :::*                    LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -

$ netstat -ant | grep 5432 | wc -l

iostat

  • 블록 장비 수준으로 OS 커널 내부에서 측정한다.
  • 디스크 사용률
  • option
    • -x: Response time, queue length
$ iostat
Linux 4.4.0-1013-aws         10/22/2017      _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          0.06    0.00    0.02    0.01    0.01   99.91

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
xvda              0.18         0.90         4.01   10298246   45935300

$ iostat -x
Linux 4.4.0-1013-aws       10/22/2017      _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.06    0.00    0.02    0.01    0.01   99.91

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
xvda              0.00     0.10    0.07    0.11     0.90     4.01    54.75     0.00    2.98    1.08    4.26   0.49   0.01

lsof

  • list open files
  • COMMAND : 실행한 명령어
  • PID : process id
  • USER : 실행한 사용자
  • FD: File Descriptor, 파일의 종류.
    • cwd: current working directory
    • rtd: root directory
    • mem : memory-mapped file
    • txt: program text (code and data);
  • TYPE: 파일 종류
    • DIR: 디렉터리
    • CHR: character special file
    • REG: regular file
    • unix: 유닉스 도메인 소켓 (MySQL 등이 사용하는 소켓으로 로컬 프로세스에서만 사용 가능하며 TCP/UDP 보다 속도가 매우 빠름)
  • DEVICE : 장치 번호
  • SIZE/OFF: 파일의 크기나 오프셋
  • NODE: 노드 번호
  • NAME: 파일명
$ lsof -c docker
$ lsof +D /tmp
$ sudo lsof -i TCP:22

grep

Usage: grep [OPTION]... PATTERN [FILE]...
Search for PATTERN in each FILE or standard input.
PATTERN is, by default, a basic regular expression (BRE).
Example: grep -i 'hello world' menu.h main.c

$ grep -nir "test"

ifconfig

  • 네트워크 정보 출력
eth0      Link encap:Ethernet  HWaddr 12:99:72:e5:aa:aa
          inet addr:172.31.58.121  Bcast:172.31.63.255  Mask:255.255.240.0
          inet6 addr: fe80::1099:72ff:fee5:aaaa/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
          RX packets:173257 errors:0 dropped:0 overruns:0 frame:0
          TX packets:46138 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:213551810 (213.5 MB)  TX bytes:20486641 (20.4 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:160 errors:0 dropped:0 overruns:0 frame:0
          TX packets:160 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:11840 (11.8 KB)  TX bytes:11840 (11.8 KB)

free

  • 메모리 사용량 출력
              total        used        free      shared  buff/cache   available
Mem:        1014660       50304      109820        5704      854536      750084
Swap:             0           0           0

nslookup

  • domain name server 정보 출력
$ nslookup naver.com
Server:         172.31.0.2
Address:        172.31.0.2#53

Non-authoritative answer:
Name:   naver.com
Address: 125.209.222.141
Name:   naver.com
Address: 125.209.222.142
Name:   naver.com
Address: 202.179.177.21
Name:   naver.com
Address: 202.179.177.22

watch

  • 파일 상태 실시간 확인
$ watch --help
Usage:
 watch [options] command

Options:
  -b, --beep             beep if command has a non-zero exit
  -c, --color            interpret ANSI color and style sequences
  -d, --differences[=<permanent>]
                         highlight changes between updates
  -e, --errexit          exit if command has a non-zero exit
  -g, --chgexit          exit when output from command changes
  -n, --interval <secs>  seconds to wait between updates
  -p, --precise          attempt run command in precise intervals
  -t, --no-title         turn off header
  -x, --exec             pass command to exec instead of "sh -c"

 -h, --help     display this help and exit
 -v, --version  output version information and exit

For more details see watch(1).

$ watch -n 2 ls -al

adduser

  • 유저 생성
# 비밀번호 없이 유저 생성
$ sudo adduser myUser --disabled-password --ingroup ubuntu

who

  • 현재 접속하고 있는 유저 리스트 출력
$ who
ubuntu   pts/0        2017-10-30 02:08 (232.232.232.121)

whoami

  • 현재 사용하는 유저 출력
$ whoami
ubuntu

pwd

  • 현재 작업하는 디렉터리 출력
$ pwd
/home/ubuntu

du

  • Disk Usage
  • 디스크의 사용 정보를 출력한다.

df

  • Disk Free
  • 디스크 정보를 출력한다.
$ du -c
4       ./.git/objects/info
59944   ./.git/objects/pack
59952   ./.git/objects

$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              499480       0    499480   0% /dev
tmpfs             101468    5676     95792   6% /run
/dev/xvda1       8065444 1761212   6287848  22% /
tmpfs             507328       0    507328   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs             507328       0    507328   0% /sys/fs/cgroup
tmpfs             101468       0    101468   0% /run/user/1000

Referensces