🎉 berenickt 블로그에 온 걸 환영합니다. 🎉
CS
UNIX 시스템
터미널-정리

1. 터미널

  • 터미널(Termianl)은 본래 통신에서 시작과 끝을 의미하는 용어였다.
    • e.g. 버스 터미널 : 버스를 탈 떄, 버스가 출발하는 곳
    • 버스 터미널과 같이 PC로 들어가는 진입점 역할을 하는 것터미널이다.
  • 컴퓨터에서 터미널은 원래 하드웨어에 연결하는 장비를 의미했었다.
    • 현재는 운영체제를 통해 컴퓨터와 상호작용하는 프로그램터미널이라 부른다.

CLI 방식은 명령어를 입력하고 결과를 출력하는 2개의 작업만 있기 때문에, 자동화를 훨씬 편하다.

  • 명령어로 작업 → 언제든지 재사용 가능 → 자동화에 용이
  • 입력해야 되는 명령어만 잘 정리해두면, 여러 가지 작업들을 편리하게 실행할 수 있습니다.
    • 이런 명령어들을 프로그램을 개발하듯이 만든 파일을 쉘스크립트라고 부름.

2. 실습환경

2.1 MacOS

iTerm2 설치

  1. https://iterm2.com 에서 iTerm2 다운로드 다운로드 받은 iTerm 을 응용프로그램으로 이동 후 실행
  2. https://brew.sh 에 접속하여 설치 명령어 복사, iTerm2 터미널에서 실행
    • /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  3. homebrew 설치 후 터미널에서 tree 설치, where tree 명령으로 잘 설치되었는지 확인
1
$ brew install tree
2
$ where tree
3
/opt/homebrew/bin/tree
4
/opt/homebrew/bin/tree

3. 파일 시스템

  • 현재 위치를 확인하는 pwd
  • 디렉터리를 만드는 mkdir
  • 디렉터리의 파일 리스트를 조회하는 ls
  • 디렉터리를 이동하는 cd
  • 디렉터리의 구조를 확인하는 tree
  • 디렉터리/파일을 복사하는 cp
  • 디렉터리/파일을 이동하는 mv
  • 디렉터리/파일을 삭제하는 rm

3.1 pwd

  • 현재 위치를 확인하는 pwd
  • print working directory의 약자
1
$ pwd

3.2 mkdir

  • 디렉터리를 만드는 mkdir [생성할디렉터리명]
  • make directory의 약자
1
$ cd ~
2
$ mkdir easylinux

3.3 cd

  • 디렉터리를 이동하는 cd
    • 디렉터리 이동: cd [이동할 디렉터리명]
    • 홈 디렉터리 이동: cd ~
    • 상위 디렉터리 이동: cd ..
  • change directory의 약자
1
# easy~~ 같은 동일한 이름을 가진 여러 폴더가 있다면,
2
# easy까지 치고, tab을 2번 누르면 이동가능한 모든 폴더 목록이 뜬다.
3
$ cd easylinux
4
5
$ mkdir alpha beta gamma delta
6
$ cd alpha
7
$ pwd
8
/Users/사용자/easylinux
9
$ cd ..
10
$ pwd
11
/Users/사용자/

3.4 ls

  • 디렉터리의 파일 리스트를 조회하는 ls
    • 현재 위치 기준 디렉터리 조회: ls
    • 특정 디렉터리 조회:ls [디렉터리 위치]
    • 숨김 파일 및 파일 사이즈도 함께 조회: ls -al
      • al은 all의 약자
  • list의 약자
1
$ ls ~/easylinux
2
alpha beta delta gamma
3
4
$ cd ~/easylinux/alpha
5
$ touch alphafile1
6
7
# ".파일명"은 숨긴 폴더를 의미
8
$ touch .alphafile2
9
$ ls
10
alphafile1
11
12
$ ls -al
13
total 0
14
drwxr-xr-x@ 4 sw staff 128 4 28 19:17 .
15
drwxr-xr-x@ 6 sw staff 192 4 28 19:13 ..
16
-rw-r--r--@ 1 sw staff 0 4 28 19:17 .alphafile2
17
-rw-r--r--@ 1 sw staff 0 4 28 19:17 alphafile1
18
19
# 위 구조에서 맨 앞에 D가 붙어있으면 디렉토리를 의미, 없으면 파일을 의미
20
## 나머지 9글자는 파일과 디렉토리의 권한을 의미
21
# 다음에 나오는 숫자는 디렉터리에 퐇마되어 있는 파일과 디렉토리의 개수를 의미
22
# 그 다음 필드는 파일과 디렉토리의 소유자와 소유 그룹을 의미
23
# 그 다음 필드는 파일과 디렉토리의 사이즈와 생성일자를 의미
24
25
$ ls -al ~/easylinux
26
total 0
27
drwxr-xr-x@ 6 sw staff 192 4 28 19:13 .
28
drwxr-x---+ 47 sw staff 1504 4 28 19:18 ..
29
drwxr-xr-x@ 4 sw staff 128 4 28 19:17 alpha
30
drwxr-xr-x@ 2 sw staff 64 4 28 19:13 beta
31
drwxr-xr-x@ 2 sw staff 64 4 28 19:13 delta
32
drwxr-xr-x@ 2 sw staff 64 4 28 19:13 gamma

3.5 tree

  • 디렉터리/파일의 구조를 확인하는 tree
    • 일반 조회: tree
    • 디렉터리만 조회: tree -d
    • 숨김파일까지 조회: tree -a
    • 깊이 지정 조회: tree -L {깊이}
1
$ cd ~/easylinux
2
$ tree
3
.
4
├── alpha
5
   └── alphafile1
6
├── beta
7
├── delta
8
└── gamma
9
10
$ tree -d
11
.
12
├── alpha
13
├── beta
14
├── delta
15
└── gamma
16
17
$ tree -a
18
.
19
├── alpha
20
   ├── .alphafile2
21
   └── alphafile1
22
├── beta
23
├── delta
24
└── gamma
25
26
$ tree -L 1 /etc
27
# /etc 아래의 1단계 까지만 조회

3.6 cp

  • 디렉터리/파일을 복사하는 cp
    • 파일 복사: cp [원본 파일] [대상 위치]
    • 다른이름으로 복사: cp [원본 파일] [위치와 파일명]
    • 디렉터리 복사: cp -r [원본 위치] [대상 위치]
    • 현재 디렉터리로 복사: cp -r [원본 위치] .
  • copy의 약자
1
$ cd ~/easylinux/beta
2
$ touch betafile1 && touch betafile2
3
$ tree -a ~/easylinux
4
├── alpha
5
   ├── .alphafile2
6
   └── alphafile1
7
├── beta
8
   ├── betafile1
9
   └── betafile2
10
├── delta
11
└── gamma
12
13
$ cp betafile2 ../delta
14
$ ls ../delta
15
betafile2
16
17
$ cp betafile2 ../delta/filefrombeta
18
$ ls ../delta
19
betafile2 filefrombeta
20
21
$ cp -r ~/easylinux/alpha ~/easylinux/alphacopy
22
$ tree –a ~/easylinux
23
├── alpha
24
   └── alphafile1
25
├── alphacopy
26
   └── alphafile1
27
├── beta
28
   ├── betafile1
29
   └── betafile2
30
├── delta
31
   ├── betafile2
32
   └── filefrombeta
33
└── gamma
34
35
$ cp ../alpha/alphafile1 .
36
$ cp ../alpha/alphafile1 ./filefromalpha

3.7 mv

  • 디렉터리/파일을 이동하는 mv
    • 파일/디렉터리 이동: mv [원본 위치] [새 위치]
  • move의 약자
1
$ cd ~/easylinux
2
$ ls
3
alpha alphacopy beta delta gamma
4
5
$ mv delta/filefrombeta gamma
6
$ ls gamma
7
filefrombeta
8
9
$ mv alphacopy/alphafile1 gamma/filefromalpha
10
$ ls gamma
11
filefromalpha filefrombeta
12
13
$ tree -a ~/easylinux/
14
15
# beta 디렉터리의 모든 파일을 gamma 디렉터리로 이동
16
$ mv beta/* gamma
17
18
$ mv gamma/betafile1 gamma/gammafile1
19
$ mv gamma/betafile2 gamma/gammafile2
20
$ ls gamma
21
alphafile1 filefromalpha filefrombeta gammafile1 gammafile2
22
23
$ mv alphacopy alphamove
24
$ ls
25
alpha alphamove beta delta gamma

3.8 find

  • 디렉터리/파일을 찾는 find
    • find [찾을 위치] -name [파일/디렉터리명]
1
$ cd ~/easylinux
2
$ tree
3
4
$ find ~/easylinux -name gammafile1
5
/Users/easylinux/gamma/gammafile1
6
$ find ~/easylinux/beta -name gammafile1
7
# 아무것도 없기 떄문에 그냥 넘어감

3.9 rm

  • 디렉터리/파일을 삭제하는 rm
    • 파일 삭제: rm [삭제할 파일 위치]
    • 디렉터리 삭제: rm -r [삭제할 디렉터리 위치]
    • 파일 강제 삭제(*주의): rm -rf [삭제할 파일 위치]
1
$ cd ~/easylinux
2
$ ls
3
alpha alphamove beta delta gamma
4
5
$ rm alpha
6
rm: alpha: is a directory
7
8
$ rm -r alpha
9
$ ls
10
alphamove beta delta gamma
11
12
$ cd gamma
13
$ ls
14
alphafile1 filefromalpha filefrombeta gammafile1 gammafile2
15
16
$ rm -rf gammafile1 gammafile2
17
$ ls
18
alphafile1 filefromalpha filefrombeta
19
20
$ rm -rf filefrom*
21
$ ls
22
alphafile1
23
$ cd ..
24
$ ls
25
alphamove beta delta gamma
26
27
$ rm -rf *
28
zsh: sure you want to delete all 4 files in /Users/sw/easylinux [yn]? y
29
30
$ ls

4. 파일 작성 및 수정

vi 편집기 사용하기

  • 파일의 내용을 확인하는 cat
  • 출력 내용을 검색하는 grep
  • 출력 결과를 저장하는 리다이렉션 >, >>
  • 큰 파일을 읽을때는 less
  • 아카이브로 묶는 tar

4.1 vi 편집기

  • INSERT 모드(i): 문자를 편집할 수 있습니다.
  • COMMAND 모드(esc): 복사/붙여넣기, 파일 저장/종료 등 다양한 작업을 할 수 있습니다

4.1.1 COMMAND 모드 (기본)

  • 종료(quit) :q 입력 후 enter
  • 저장(write) 및 종료 :wq 입력 후 enter
  • 저장 및 강제종료 (!) :wq! 입력 후 enter
  • cf. 커맨드모드에서는 영문만 사용 가능
1
$ cd ~/easylinux
2
$ vi myfirstfile
3
--------myfirstfile (i를 입력해 입력모드로 변경)
4
Hello Vi!
5
--------:wq
6
7
$ ls
8
myfirstfile

4.1.2 COMMAND 모드 (활용)

  • 줄삭제(delete) dd
  • 복사(copy) yy
  • 붙여넣기(paste) p
  • 되돌리기(undo) u
1
$ cd ~/easylinux
2
$ vi Dockerfile
3
---------Dockerfile (i를 입력해 입력모드로 변경)
4
FROM nginx:latest
5
LABEL maintainer="yourname@example.com"
6
EXPOSE 80
7
COPY . /usr/share/nginx/html
8
CMD ["nginx", "-g", "daemon off;"]
9
--------:wq
10
11
$ vi Dockerfile
12
# 커맨드모드에서 4번쨰 라인에서 dd를 눌러 한 줄 제거
13
# u를 입력해 지웠던 4번쨰줄 되돌리기
14
# 3번쟤 라인에서 숫자 2를 누르고, yy를 누른 후,
15
## 맨 아래 라인에서 p를 입력하면, 2줄 복사가 됨
16
# :q!를 눌러 파일을 저장하지 않고 종료

4.1.2 COMMAND 모드 (고급)

  • 라인 보기 :set number
  • 텍스트 찾기 /검색어 후 n 으로 탐색
  • 텍스트 대체 :%s/원본/대체/g
1
$ vi nginx.conf
2
3
--------nginx.conf (i를 입력해 입력모드로 변경)
4
http {
5
include /etc/nginx/mime.types;
6
default_type application/octet-stream;
7
8
sendfile on;
9
tcp_nopush on;
10
tcp_nodelay on;
11
12
keepalive_timeout 65;
13
14
gzip on;
15
gzip_disable "msie6";
16
17
server {
18
listen 80;
19
server_name example.com www.example.com;
20
21
root /var/www/html;
22
23
index index.html index.htm;
24
25
access_log /var/log/nginx/access.log;
26
error_log /var/log/nginx/error.log;
27
28
location / {
29
try_files $uri $uri/ =404;
30
}
31
32
error_page 404 /404.html;
33
34
error_page 500 502 503 504 /50x.html;
35
location = /50x.html {
36
root /usr/share/nginx/html;
37
}
38
39
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
40
expires 30d;
41
access_log off;
42
}
43
}
44
}
45
--------:wq
46
47
# 커맨드 모드에서 :set number를 입력해 화면에 라인을 표시
48
# /html 눌러 html 검색, n키를 눌러 검색 결과를 이동할 수 있음
49
# ":%s/example.com/devwiki.com/g"를 입력해,
50
## 파일 내 example.com 텍스트를 모두 devwiki.com으로 수정
51
# :wq로 저장하고 나가기

4.2 cat

  • 파일의 내용을 확인하는 cat
  • concatenate(연결하다)약자
1
$ cat myfirstfile
2
...(myfirstfile의 내용 출력)
3
4
$ cat Dockerfile
5
...(Dockerfile의 내용 출력)
6
7
$ cat nginx.conf
8
...(nginx의 내용 출력)

4.3 grep

  • 출력 내용을 검색하는 grep
    • 파이프 ’ | ’ 과 함께 사용
    • [이전 명령어] | [이후 명령어]
    • 명령어의 출력을 다음 명령으로 전달
  • [출력명령어] | grep [검색어]
    • 파일의 내용 검색: cat [파일명] | grep [검색어]
    • 이전 n라인 출력: grep -B n [검색어]
    • 이후 n라인 출력: grep -A n [검색어]
    • 대소문자 구분 없이 검색: grep -i [검색어]
  • cf. 검색어에 공백이 있을 경우 ‘검색어’ 로 묶어서 입력
1
# Dockerfile의 내용 중 CMD 검색
2
$ cat Dockerfile | grep CMD
3
CMD ["nginx", "-g", "daemon off;"]
4
5
# nginx.conf의 내용 중 location 검색
6
$ cat nginx.conf | grep location
7
location / {
8
location = /50x.html {
9
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
10
11
# Dockerfile의 내용 중 대소문자 구분없이 cmd 검색, 검색 결과의 이전 2줄까지 포함하여 출력
12
$ cat Dockerfile | grep -i -B 2 cmd
13
EXPOSE 80
14
COPY . /usr/share/nginx/html
15
CMD ["nginx", "-g", "daemon off;"]
16
17
# nginx.conf의 내용 중 대소문자 구분해서 access_log off 검색, 이후 2라인, 이전 3까지 포함하여 출력
18
$ cat nginx.conf | grep -A 2 -B 3 'access_log off'
19
20
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
21
expires 30d;
22
access_log off;
23
}
24
}

4.4 >, >>

  • 출력 결과를 저장하는 리다이렉션 >, >>
  • [이전 명령어] > 파일명 : 이전 명령어의 출력을 파일로 저장
  • > : 기존 파일이 있을경우 덮어쓰기
  • >> : 기존 파일이 있을경우 내용추가
1
$ cd ~/easylinux
2
3
# tree /etc 명령어 결과 중 sh 검색
4
$ tree /etc | grep sh
5
6
# tree /etc 명령어 결과 중 sh 검색된 결과를 파일로 저장
7
$ tree /etc | grep sh > tree_result.txt
8
9
# tree /etc 명령어 결과 내용 출력
10
$ cat tree_result.txt
11
12
# nginx.conf 파일 내용 출력
13
$ cat nginx.conf
14
15
# nginx.conf 파일의 내용을 tree_result에다 덮어쓰기
16
$ cat nginx.conf > tree_result.txt
17
18
# nginx.conf 내용이 덮어씌워진 파일 내용 출력
19
$ cat tree_result.txt
20
21
$ tree /etc >> tree_result.txt
22
23
# nginx.conf 내용에 tree 명령이 결과가 추가된 내용 출력
24
$ cat tree_result.txt

4.5 less

큰 파일을 읽을때는 less

1
# 내용이 많은 tree_result.txt 파일 읽기
2
$ less tree_result.txt
3
# Enter 및 Space로 탐색
4
# q로 종료

4.6 tar

4.6.1 파일을 아카이빙

  • 아카이브로 묶는 tar
    • 아카이브(tar) : 여러 파일이나 디렉터리를 하나의 파일로 묶음
    • 압축 (zip, gz..) : 데이터를 더 작은 크기로 줄이는 과정 포함
  • 파일이나 디렉터리 아카이브: tar -cvf [결과파일.tar] [디렉터리또는파일]
  • 파일이나 디렉터리 아카이브 해제: tar -xvf [결과파일.tar]
1
$ cd ~/easylinux
2
$ ls
3
Dockerfile myfirstfile nginx.conf tree_result.txt
4
5
# 현재 경로의 4개의 파일을 하나의 tar파일로 아카이브
6
$ tar -cvf easylinux.tar .
7
a ./Dockerfile
8
a ./tree_result.txt
9
a ./nginx.conf
10
a ./myfirstfile
11
12
$ ls
13
Dockerfile easylinux.tar myfirstfile nginx.conf tree_result.txt
14
15
$ mkdir easylinux_tar
16
$ cd easylinux_tar
17
18
# 상위 디렉토리에 있는 파일을 현재 경로로 이동
19
$ mv ../easylinux.tar .
20
$ ls
21
easylinux.tar
22
23
# 현재경로에서 easylinux.tar 아카이브 해제
24
$ tar -xvf easylinux.tar
25
x ./
26
x ./Dockerfile
27
x ./tree_result.txt
28
x ./nginx.conf
29
x ./myfirstfile
30
31
$ ls
32
Dockerfile myfirstfile tree_result.txt easylinux.tar nginx.conf
33

4.6.2 파일을 압축

  • 아카이브를 압축하는 tar
    • 아카이브(tar) : 여러 파일이나 디렉터리를 하나의 파일로 묶음
    • 압축 (zip, gz..) : 데이터를 더 작은 크기로 줄이는 과정 포함
  • 파일이나 디렉터리 압축: tar -czvf [압축파일.tar.gz] [디렉터리또는파일]
  • 파일이나 디렉터리 압축 해제: tar -xzvf [압축파일.tar.gz]
  • cf. 아카이빙과 다른점은 z옵션 추가와 tar.gz 확장자명이다.

5. 시스템 관리 기본

  • IP확인 ifconfig
  • 실행 권한이 없을때는 chmod +x
  • 실행 중인 프로세스를 조회하는 ps -al
  • 실행 중인 프로세스를 종료하는 kill

5.1 IP 확인

1
# Windows
2
$ ipconfig
3
4
# Mac/Linux
5
$ ifconfig
6
# 보통 MacOS에서는 en0라는 인터페이스가 메인 인터페이스로 사용된다.
7
# en0쪽 inet으로 표시되어 있는 부분이 PC에 할당되어 있는 IP주소이다.
8
------
9
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
10
options=50b<RXCSUM,TXCSUM,VLAN_HWTAGGING,AV,CHANNEL_IO>
11
ether a4:77:f3:02:ce:a2
12
inet6 fe80::108e:5d52:87c0:1d8c%en0 prefixlen 64 secured scopeid 0x6
13
inet 192.168.75.213 netmask 0xffffff00 broadcast 192.168.75.255
14
nd6 options=201<PERFORMNUD,DAD>
15
media: autoselect (1000baseT <full-duplex>)
16
status: active
17
...
18
--------

5.2 프로세스 실행 및 확인

  • 프로세스를 실행하기 위한 chmod +x
  • 프로세스 상태를 확인하는 ps -al
1
$ cd ~/easylinux
2
# 실습용 프로그램을 easylinux 폴더에 다운로드 후 압축풀기
3
# 맥OS: go-web-application-macos
4
# Windows OS: go-web-application-windows.exe
5
6
# 실행권한 주기
7
# chmod +x go-web-application-macos
8
$ chmod +x (다운로드받은 파일명)
9
10
# 프로그램 실행
11
# ./go-web-application-macos
12
$ ./(다운로드받은 파일명)
13
$ 새로운 터미널 실행 후 ps -al
14
# 새로운 프로세스가 실행된 것을 확인

5.3 프로세스 종료

  • 실행 중인 프로세스를 종료하는 kill
1
# 프로세스 PID확인
2
$ ps -al
3
4
# 특정 번호의 PID 프로세스 종료
5
# e.g. kill 21640
6
$ kill PID
7
$ ps -al
8
9
# & 표시는 프로세스를 백그라운드에서 실행하겠다는 의미
10
# ./go-web-application-macos &
11
$ ./(다운로드받은 파일명) &
12
# 초기 로그가 출력되고 Enter를 입력하면 다시 터미널로 돌아오며, 프로세스는 계속 돌아간다.
13
$ ps -al
14
15
# -9는 강제종료 옵션, 백그라운드로 실행중인 프로세스를 종료하기
16
# e.g. kill -9 21784
17
$ kill -9 PID
18
$ ps -al

6. 터미널 활용

  • 주기적으로 명령어를 실행하는 watch
  • 환경변수를 지정하는 export
  • 명령어를 단축어로 지정하는 alias
  • 명령어 환경 설정

6.1 expot

  • 환경변수를 지정하는 export
  • export 변수명=변수값
1
export environment=dev
2
# os 환경변수 environment가 dev일 때, 개발모드로 실행
3
# os 환경변수 environment가 prod 일 때, 운영모드로 실행

6.2 watch

  • 주기적으로 명령어를 실행하는 watch
  • watch –n [주기(초)] [실행할 명령어]
1
#### 터미널 창을 2개를 띄워준다.
2
### Mac에서는 watch 명령어를 brew를 통해 설치해줘야 한다.
3
### brew install watch
4
5
# 1초간격 으로 터미널 실행
6
$ watch -n 1 ps -al
7
8
### 2번쨰 터미널
9
$ cd ~/easylinux
10
11
# 환경변수 설정
12
$ export WEBAPP_VAR=devwiki
13
$ cd ~/easylinux
14
15
# ./go-web-application-macos
16
$ ./(다운로드받은 파일명)
17
18
# watch 명령어에서 빠져나오려면 "Ctrl + C" 입력

6.3 alias

  • 명령어를 단축어로 지정하는 alias
  • alias [새로운명령]=[기존명령어조합]
  • e.g.) mktar이라는 새로운 단축명령어 생성 : alias mktar='tar –cvf
1
$ cd ~/easylinux
2
# 새 커스텀 단축어 생성
3
$ alias mktar='tar -cvf'
4
$ mkdir tartest
5
$ cd tartest
6
$ touch file1
7
$ touch file2
8
9
# 새 커스텀 단축어로 tar 아카이브
10
$ mktar test.tar .
11
$ ls
12
file1 file2 test.tar

6.4 명령어 환경 설정 (zsh, bash)

  • 사용자의 홈 디렉터리에 .zshrc, .bashrc 파일 수정
    • Mac환경의 iTerm2 경우에는 .zshrc
    • Windows 환경의 git bash나 Linux 환경에서는 .bashrc
  • 파일의 명령어들은 쉘 세션 시작 시 자동으로 실행
    • 그래서 이 파일 안에 export나 alias같은 환경 설정과 관련된 내용을 넣어 놓으면,
    • 터미널을 껐다 키더라도 설정이 남아있다.
  • 기존에 열려있던 터미널이 있으시면 껐다가 켠다.
1
# OS 환경변수 중 SHELL변수의 값 출력
2
$ echo $SHELL
3
4
5
# Windows/Linux인 경우 .bashrc 파일 수정
6
$ vi ~/.bashrc
7
# MAC인 경우, .zshrc 파일 수정
8
$ vi ~/.zshrc
9
10
------------.zshrc
11
export WEBAPP_VAR=devwiki
12
alias mktar='tar -cvf'
13
...
14
------------:wq
15
16
# 변경된 내용을 적용하기 위해서는 터미널을 껏다가 다시 켜거나,
17
# 다음 영령어로 수정한 파일을 반영하기
18
$ source ~/.zshrc
19
$ echo $WEBAPP_VAR
20
devwiki

7. 실습

(1) ~/easylinux 디렉터리로 이동하세요. 디렉터리가 없으면 새로 생성하세요. 디렉터리에 go-web-application 이 있는지 확인하세요.

1
cd ~/easylinux
2
ls

(2) 환경변수 WEBAPP_VAR 를 development 로 설정하세요.

1
export WEBAPP_VAR=development

(3) alias와 실습 애플리케이션의 절대 경로를 사용해 애플리케이션을 실행할 수 있도록 execwebapp 명령어를 만드세요.

1
alias execwebapp='애플리케이션의경로'

(4) 2, 3에서 실행한 명령을 터미널을 재시작해도 적용되도록 설정하세요. 터미널을 재시작하세요.

  • vi ~/.zshrc 또는 vi ~/.bashrc에 2, 3에서 작성한 명령어 복사

(5) execwebapp 명령을 사용해 실습 프로그램을 실행하세요

1
chmod +x 애플리케이션명
2
execwebapp

(6) 로그 또는 localhost:8080 으로 접속해 환경 변수가 잘 적용되었는지 확인하세요

(7) 새로운 터미널을 실행하고, 출력 로그를 드래그해서 복사한 후 파일로 저장하세요. (디렉터리: easylinux, 파일명: webapp.log)

1
vi ~/easylinux/webapp.log
2
# 로그 복사 및 붙여넣기

(8) 실행한 프로세스의 PID를 조회하고 프로세스를 종료하세요

1
ps -a 명령으로 PID확인
2
kill -9 {PID}

(9) ~/easylinux/practice 디렉터리를 생성하고 이동하세요.

1
mkdir ~/easylinux/practice
2
cd ~/easylinux/practice

(10) 새로 만든 디렉터리에 webapp.log 파일을 이동하세요.

1
mv ../webapp.log .

(11) 저장된 파일에서 ‘info’ 가 포함된 라인만 파일로 practice 에 저장하세요. (파일명: webapp-info.log)

1
cat webapp.log | grep -i info > webapp-info.log
2
cat webapp-info.log

(12) practice 디렉터리를 복사하여 같은 경로에 practice_backup 로 저장하세요.

1
cp -r ../practice ../practice_backup

(13) practice_backup 디렉터리의 이름을 practice_bak으로 변경하세요.

1
mv ~/easylinux/practice_backup ~/easylinux/practice_bak

(14) ~/easylinux/practice 디렉터리의 파일들을 practice.tar 아카이브로 만드세요.

1
tar -cvf practice.tar .

(15) practice.tar 파일을 easylinux 디렉터리로 이동하세요.

1
mv practice.tar ../

(16) ~/easylinux/practice 디렉터리를 삭제하세요.

1
cd ../
2
rm -rf practice

(17) ~/easylinux/practice_tar 디렉터리를 생성한 후 practice.tar 아카이브를 해제하세요.

1
mkdir practice_tar
2
mv practice.tar practice_tar
3
cd practice.tar
4
tar –xvf practice.tar

(18) ~/easylinux 디렉터리를 삭제하세요

1
cd ~
2
rm -rf ~/easylinux