Ubuntu 20.04 - Cheat sheet

Ubuntu 20.04 를 설치/운영하면서 필요한 팁/트릭과 쓸모있는 사용법을 정리한다.

비슷한 문서:

Timezone 관련

CLI에서 설정을 할 수 있다.

timedatectl timedatectl 명령으로

1
2
3
4
5
6
$ timedatectl list-timezones
...
Asia/Seoul
...

$ sudo timedatectl set-timezone Asia/Seoul

만약 손으로 수정을 한다면,

timedatectl 로 지정되는 설정 Timezone/etc/localtime 이라는 바이너리로 저장되므로
명령행에서 지원하는 timezone을 복사할 수 도 있다고 한다..

1
$ sudo cp /usr/share/zoneinfo/Europe/London /etc/localtime

LCD/Screen off

기존에 글 Ubuntu/시스템 전원관리, 2017년 에서 Ubuntu 18.x 에서 디스플레이(특히 노트북 LCD)를 끄기 위해서 사용되던 직접 vbetool 명령으로 동작하지 않는다.

그래서 Ubuntu 20.04 에서는 링크 ubuntu-20-04-on-a-laptop-is-there-any-way-toturn-off-the-screen 에 있는 방법으로 사용하고 있다.

디스플레이를 끄려면

1
2
3
sudo mount -o remount,exec /dev
sudo vbetool dpms off
sudo mount -o remount,noexec /dev

다시 디스플레이를 켜려면

1
2
3
sudo mount -o remount,exec /dev
sudo vbetool dpms on
sudo mount -o remount,noexec /dev

Network 상태 확인

ss 명령

ss 명령은 Socket Statistics 를 출력해 준다. open 된 소켓에 대한 정보를 표시한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ss [-a -t -u -l -p -n] [filter]

-a:
-t: TCP
-u: UDP
-l: LISTEN 상태 포트
-n: 호스트/포트/사용자 이름을 숫자로 표시
-p: 프로세스 이름
-r, --resolve: resolve host names
-w, --raw : display only RAW sockets
-x, --unix : display only Unix domain sockets
-4, --ipv4 : display only IP version 4 sockets
-6, --ipv6 : display only IP version 6 sockets
-m, --memory : show socket memory usage

LISTEN Port 확이

netstat 같이 LISTEN 상태 프로세스를 확인할 수 있다. 다음은 t: tcp 포트, l: LISTEN 상태의 소켓 정보를 출력한다.

1
2
3
4
5
6
7
8
9
10
$ ss -lntu
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*
udp UNCONN 0 0 12.42.168.213%enp3s0:68 0.0.0.0:*
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 10 127.0.0.1:9000 0.0.0.0:*
tcp LISTEN 0 511 0.0.0.0:443 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:53000 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:2020 0.0.0.0:*

IPv4, IPv6 소켓

1
2
3
4
5
6
7
8
9
$ ss -tl4
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 511 0.0.0.0:http 0.0.0.0:*
LISTEN 0 511 0.0.0.0:https 0.0.0.0:*
$
$ ss -tl6
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 [::]:2020 [::]:*
q

lsof

Linux에서 open file을 확인하는데 사용되는 lsof 명령입니다. Unix/Linux의 모든 것은 파일로 이루어져있기때문에 스트림이나 네트워크 파일도 lsof 로 확인할 수 있습니다.

1
2
$ lsof -i
$ lsof -l

Ubuntu/시스템 전원관리, 2017년

Docker CLI 요약

docker cli 명령을 정리

docker architecture 이미지 소스

비슷한 문서:

docker cli

docker cli는 docker 명령 뒤에 docker commands 로 도커를 제어한다. 그리고 대상 컨테이너를 지정하고 컨테이너에서 실행 할 수 있는 명령형식으로 구성되어 있다.

1
docker [docker commands] [container] [container command] 

Use the Docker command line docker

search 이미지 검색

Docker hub에서 이미지를 검색한다.

1
docker search busybox

Docker hub에서 상위 몇개 정도만 검색하고 싶을때 limit 옵션을 사용한다.

1
docker search busybox --limit 5

Docker hub에서는 이미지 중 별점을 검색한다.

1
2
3
4
5
# 최소 별정 50인 이미지
docker search busybox --filter=stars=50

# 별점이 3인 이미지
docker search --filter stars=50 busybox

정규 빌드 버전만 지시하려면 is-official 옵션 사용

1
2
docker search --filter is-official=true --filter stars=50 busybox

--format 옵션을 사용해 출력되는 내용을 필터링 할 수 있다. 다음은 별점만 출력하는 예이다.

1
docker search --format "{{.Name}}: {{.StarCount}}" nginx

pull 이미지를 다운로드 한다

Docker image를 내려 받는다. 이미지 이름 뒤에 :[version] 을 붙이면 지정한 버전을 내려 받고, latest 를 붙이면 최신 버전을 대상으로 한다.

1
docker pull nginx:latest

images 다운로드 이미지

Docker에서 다운로드 받는 이미지를 확인한다. docker images는 모든 이미지를 보여준다.

1
$ docker images

특정 이미지만 지시할 수 있다.

1
$ docker images nginx

run 이미지를 컨테이너로 실행한다.

Docker image를 컨테이너로 생성하고, 실행합니다.

1
docker run -p 8080:8080 nginx

옵션:

1
2
3
4
5
`-p`: Local과 Container 와 port를 연결하는 옵션
`-i`: interactive (대화방식)
`-t`: Pseudo-tty (콘솔 및 터미널 환경)
`— name`: 실행 컨테이너 이름을 지정합니다.
`-d`: 백그라운드에서 실행되는 옵션입니다.

docker image를 실행하고 bash 쉘을 연다.

1
docker run -i -t --name nginx nginx bash

ps 컨테이너 목록을 확인

Docker 컨테이너 목록을 확인합니다.

1
2
$ docker ps
$ docker ps -a

옵션:

1
2
`-a` : 실행 중이 아닌 컨테이너까지 확인
`-q` : 컨테이너의 CONTAINER ID 만 표시

start 컨테이너를 시작한다.

중단되어 있는 컨테이너를 실행합니다.

1
2
docker start nginx
nginx

attach 컨테이너 연결

실행중인 Docker Container 의 standard input, output, error streams 에 연결한다.

1
docker attach nginx

docker attach 명령 사용 사례.

exec 컨테이너 명령 실행

Docker Container의 쉘의 명령어을 실행할 수 있다.

1
docker exec nginx ls

옵션

1
2
3
4
5
-d, --detach : 명령을 detach mode, 백그라운드로 실행
-e, --env : 환경변수 설정하고 실행
-it [SHELL]: iteractive tty 옵션. 사용할 shell을 지시한다, 보통 bash
-u, --user: User ID, UID
-w, --workdir: 작업 디렉토리 지정

다음은 nginx 컨테이너의 bash 쉘을 실행한다.

1
docker exec -it nginx bash

다음은 nginx 컨테이너를 qkboo 사용자 쉘로 연결한다.

1
docker exec -it -u qkboo nginx bash

inspect 컨테이너 상세 정보

Docker Container에 상세 정보를 확인 한다.

1
docker inspect nginx

옵션

--format : 필터링

1
docker inspect  --format='{{range .NetworkSettings.Networks}}

logs 명령

Docker 컨테이너에서 sysout 또는 syserr 로그를 보려면 logs 명령을 사용한다.

docker logs

stop 컨테이너 종료

ps 명령으로 실행중인 컨테이너 아이디와 이름을 확인하고 아이디를 준다.

1
2
3
docker ps

docker stop e417951d25fd

이름으로 종료시 --name 옵션 사용

1
docker stop --name nginx2

rm 컨테이너를 삭제한다.

Docker Container 삭제합니다. 삭제할때는 실행 상태가 아닌 컨테이너만 가능합니다.

1
docker rm nginx

강제 삭제시 -f 옵션 사용.

rmi 이미지를 삭제한다.

Docker image를 삭제 하는데 이미지가 중첩된 경우가 많기 때문에 링크 같이 untag 한 후 사용한다.

1
2
3
docker rmi fd484f19954f

docker rmi test2:latest

혹은 -f 옵션으로 중첩된 이미지를 모두 함께 삭제 할 수 있다.

1
docker rmi -f fd484f19954f

참고

Cheat Linux System

Linux 에서 짬짬히 자주 쓰이는 명령을 설정을 정리.

  1. Disk
    • GRUB, fsck, dd
  2. System 설정
  3. rsync

비슷한 문서:

Disk

GRUB 복구

우분투 부트로더인 GRUB가 잘못되어 복구하려면 해당 배포본의 Live CD, Live USb 등으로 부팅해서 ‘Try Ubuntu’ 에서 터미널을 통해 복구 절차를 시작한다.

https://askubuntu.com/questions/88384/how-can-i-repair-grub-how-to-get-ubuntu-back-after-installing-windows

https://help.ubuntu.com/community/Grub2

https://wiki.ubuntu.com/Grub2#Recover

fsck

fsck(for file system consistency check) 명령은 파일 시스템을 조사하여 손상된 파일을 출력해 주며 사용자에게 그것을 복구할 것인지를 질의

fsck 수행은 시스템마다 약간의 차이가 있지만 대부분 다음과 같은 5개 항목에 대하여 검사

  • Blocks and sizes, Pathname, Connectivity, Reference count, Free List

1
$ sudo fsck –t ext2 /dev/hdb

Attempt to repair damaged blocks

1
$ sudo fsck –a

Repair damaged blocks interactively

1
$ sudo fsck -r <drive>

force

Forcing the check

You can also force fsck at boot time by passing fsck.mode=force, as a kernel parameter. This will check every filesystem you have on the machine.

/forcefsck

Create a file called forcefsck:

1
# touch /forcefsck

Now, reboot the system:

1
# reboot

Frce fsck on next boot using shutdown command (may not work on many modern distros)

The -F option force fsck on reboot, login as root and type the following command to reboot and run fsck:

1
# shutdown -rF now

링크

Changing the check frequency

By default, fsck checks a filesystem every 30 boots (counted individually for each partition). To change the frequency of checking, run:

1
$ sudo tune2fs -c 20 /dev/sda1

exFAT

리눅스테어 외부 USB 디스크를 exFAT로 포맷하고 사용한다면, exfat-fuseexfat-utils를 설치해 준다.

1
$ sudo apt install exfat-fuse exfat-utils

그리고 대부분 최신 리눅스 데스크탑은 USB 디스크를 더블클릭하면 자동마운트 해준다.

터미널에서는

1
2
3
$ sudo mkdir /media/my_usb
$ sudo mount -t exfat /dev/sdb1 /media/my_usb
$ sudo umount /dev/sdb1

참조

  1. https://wiki.archlinux.org/index.php/fsck

dd

블록 크기

디스크에 데이터를 쓸려면 디스크의 기본 블록 크기인 512B 보다 큰게 좋다. 또한 쓰기 속도를 증가시키기 위해서 디스크의 물리적 지형에 맞는 크기를 사용하는 것이 좋다. fdisk 같은 유틸리티로 정보를 확인할 수 있고 혹은 sysfs 정보를 확인할 수 있다.

1
2
3
4
5
6
/sys/block/sdX/size
/sys/block/sdX/queue/physical_block_size
/sys/block/sdX/queue/logical_block_size
/sys/block/sdX/sdXY/alignment_offset
/sys/block/sdX/sdXY/start
/sys/block/sdX/sdXY/size

디스크 지우기

dd에 데이터를 쓸려면 디스크의 기본 블록 크기인 512B 보다 커야 한다. 또한 쓰기 속도를 증가시키기 위해서 디스크의 물리적 지형에 맞는 크기를 사용하는 것이 좋다.

1
$ sudo dd bs=8k if=/dev/urandom of=/dev/rdisk2

fdisk 정보로 확인

1
2
3
4
5
6
7
8
9
10
11
$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 59.6 GiB, 64021856256 bytes, 125042688 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 441CD64A-70D1-4A40-ACA8-05CAB62C5C89

Device Start End Sectors Size Type
/dev/sdb1 2048 8390655 8388608 4G Linux swap
/dev/sdb2 8390656 125042654 116651999 55.6G Linux LVM

fdisk 결과의 Sector size는 전체 용량과 섹터 크기를 계산하면 논릭적인 섹터의 크기를 확인할 수 있다.

1
2
echo $((64021856256/125042688))
512

Sector size (logical/physical): 512 bytes / 512 bytes 에서 물리 크기를 확인할 수 있다.

성능

dd 를 사용해서 1024 바이트를 1000000 블록에 걸쳐 쓰기를 수행한다 - 1GB

1
$ time sudo dd bs=1024 count=1000000 if=/dev/zero of=1GB_file

dd 를 사용해서 1GB 크기 파일을 1024 바이트씩 읽기를 한다.

1
$ time sudo dd bs=1024 if=1GB_file of=/dev/null

Verbose output

Sending an INFO signal to a running dd process makes it print I/O statistics to standard error and then resume copying. In the example below, dd is run in the background to copy 10 million blocks. The kill command makes it output intermediate I/O statistics, and when dd completes normally or is killed by the SIGINT signal, it outputs the final statistics.

1
2
3
4
5
6
7
8
$ dd if=/dev/zero of=/dev/null count=10MB & pid=$!
$ kill -s INFO $pid; wait $pid
3385223+0 records in
3385223+0 records out
1733234176 bytes (1.7 GB) copied, 6.42173 seconds, 270 MB/s
10000000+0 records in
10000000+0 records out
5120000000 bytes (5.1 GB) copied, 18.913 seconds, 271 MB/s

On systems lacking the INFO signal dd responds to the USR1 signal instead, unless the POSIXLY_CORRECT environment variable is set.

You can also try the status=progress option:

1
2
3
4
5
6
[~]$ dd if=/dev/zero of=/dev/null count=10MB status=progress
4708234752 bytes (4.7 GB, 4.4 GiB) copied, 4 s, 1.2 GB/s
10000000+0 records in
10000000+0 records out
5120000000 bytes (5.1 GB, 4.8 GiB) copied, 4.3516 s, 1.2 GB/s
[~]$
참조

System 설정

Time zone

1
$ sudo dpkg-reconfigure tzdata

Keyboard

Capslock과 Control key 교체하기

키맵 이용해서 다음 명령:

1
$setxkbmap -layout us -option ctrl:nocaps
1
2
3
sudo vi /etc/default/keyboard

XKBOPTIONS="ctrl:nocaps"
1
sudo dpkg-reconfigure keyboard-configuration

Terminal Reset

실수로 바이너리 파일을 cat 하거나 하여 글자들이 깨질때.. 터미널 리셋하는 방법

1
2
3
4
5
$ reset
$ tput sgr0
$ setterm -reset
$ setterm -initialize
$ Ctrl + V, Ctrl + O

System Info

1
2
3
cat /etc/os-release     # Raspbian
uname -a
cat /etc/issue

Hardware Info

1
2
3
4
5
6
lscpu
lshw
lspci
lsusb
lsblk // block devices
lspcmcia
1
cat /proc/cpuinfo

BIOS안의 시스템 정보

1
# dmidecode

memory

1
$ free -m

Architecture

1
$cat /etc/issue

Ubuntu 에서

1
$subo lsb_release -a
1
2
$ dpkg --print-architecture      //
armhf
1
2
3
4
5
6
$ uname -a
i686, i386은 32bit, x86_64는 64bit. armv7은 32bit, armv8은 64bit
$ uname -m // machine inf

$ uname -i // hw platform
$ uname -p // processor
1
$ arch // uname -m 과 동일

32bit 64bit 체크

1
$ getconf LONG_BIT // 시스템 구성 질의
1
2
3
4
5
$ file /bin/ls
ELF 32-bit LSB executable, ARM, EABI5 version 1 ..
ARM
arm 7 is 32 bit.
ARMv8-A, October 2011, 64-bit address space and 64-bit arithmetic 지원
1
2
3
4
5
$ uname -m // machine inf
i686 // 32bit
x86_64 // 64bit
armv7l // 32bit
armv8 // 64bit

rsync

http://www.joinc.co.kr/w/Site/Tip/Rsync

rsync -avzh source destination
-a : 심볼릭 링크, 속성, 퍼미션, 소유권 등 보존
-v : 자세한 정보출력
-z : 전송시 압축
-r : 하위디렉토리포함
-e ssh : ssh를 이용한 rsync 동기화
–stats : 결과출력

기본 옵션

1
rsync -av source/ destination/

include와 exclude

이 옵션을 이용해서 대상 파일을 추가하거나 제외 할 수 있다.

1
$ rsync -avz  --exclude 'data' id@192.168.56.101:/home/backups ./

별표(*)도 사용할 수 있다.

1
$ rsync -avz  --exclude '*.cache' id@192.168.56.101:/home/backups ./

증분 백업

수정/변경된 내용만 동기화한다.

rsync -avzh moniwiki/ /tmp/backups/
-h, –human-readable : output numbers in a human-readable format
-u : –update update only (don’t overwrite newer files)
–delete : 서버동기화후 원본에서 파일이 삭제되면 백업에서도 파일을 삭제
–remove-source-files :

1
2
$ rsync -av /home/ /backup/home/ # 원본 증분 백업
$ rsync -av --delete /home/ /backup/home/ #원본 증분 백업, 원본 파일 삭제시 사본에서도 삭제

동기화 옵션

delete 옵션

목적지에 파일이나 디렉토리가 존재할 경우 삭제하고 싶을 때 --delete 옵션을 사용한다.

1
rsync -avz --delete id@192.168.56.101:/home/backups ./

원본 삭제 옵션

--remove-source-files를 이용하면, 전송이 끝난 후 원본파일을 삭제한다.

1
$rsync --remove-source-files -zvh backup.tar /tmp/backups/

ssh 통한 백업

rsync 에는 ssh 를 이용하여 원격서버에 접속하여 동기화를 하는 기능이 있습니다.

1
rsync -azrtv --delete --stats -e "ssh -i /root/.ssh/개인키" 원본서버계정@원본서버주소:원본경로/ /백업경로/

find와 결합

1
find . -type f -mtime -3  | rsync -avz --files-from=- /soucepc /data/backup

faillog

/var/log/faillog 는 계정의 로그인 실폐 횟수 정보를 바이너리 파일로 저장한다. 다음 C struct 구조의 정보가 바이너리로 저장되고 있다:

1
2
3
4
5
6
7
struct    faillog {
short fail_cnt;
short fail_max;
char fail_line[12];
time_t fail_time;
long fail_locktime;
};

직접 읽을 수 없기 때문에 faillog 명령을 사용한다.

1
2
3
4
5
6
$ faillog -u pi        # pi 계정
$ faillog -a
Login Failures Maximum Latest On

root 0 0 01/01/70 00:00:00 +0000
daemon 0 0 01/01/70 00:00:00 +0000

최근 3일의 로그인 실패를 찾으려면 :

1
$ faillog -t 3 -u pi

vnc server

https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-14-04

http://www.whatwant.com/840

1
$ sudo apt-get install gnome-panel tightvncserver

첫 실행을 해서 기본 Config 등의 구성을 하도록 하면 되는데, sudo 없이 계정 권한으로 실행하여도 된다. 계정 권한으로 실행을 하면 해당 계정으로 환경 설정을 한다.

1
$ vncserver

실행할 때에 해상도를 미리 정해줘야 한다.

1
$ vncserver -geometry 1024x768

기본 창 관리자 변경

기본 생성된 xstartup 파일에는 내가 원하는 대로 환경 설정이 되어 있지 않다. 가장 먼저 실행된 vnc4server를 종료부터 하고 xstartup 파일을 수정하자.

1
2
3
4
$ vncserver -kill :1
$ cp ~/.vnc/xstartup ~/.vnc/xstartup.old

$ nano ~/.vnc/xstartup