🐧 Linux 메모 정리

# 1) 📁 리눅스의 구조

### 1-1) 📂 리눅스 주요 디렉토리 구조

| 디렉토리 | 역할 |
|----------|------|
| `/bin`     | OS 작동에 필요한 최소한의 명령어 파일 저장소 |
| `/dev`     | 키보드, 마우스, 프린터 등 디바이스를 파일 형식으로 관리 |
| `/etc`     | 리눅스 설정 파일 보관소 |
| `/home`    | 사용자 홈 디렉토리 (useradd 명령 필요) |
| `/sbin`    | 관리자 전용 명령어 저장소 |
| `/tmp`     | 임시 파일 보관소 |
| `/usr`     | 애플리케이션 및 관련 부속 파일 저장소 |
| `/var`     | 로그 등 가변적인 데이터 저장소 |
- 부가설명
    - `/` 라는 루트(뿌리) 디렉토리를 시작으로 여러 디렉토리가 존재
    - C드라이브, D드라이브처럼 여러 뿌리가 있는 윈도우와는 다르게 하나의 뿌리만 존재
    - 다만 디스크를 디렉토리로 취급하는 "마운트" 구조가 존재

### 1-2) 🧰 옵션 지정법

- `-`를 사용하여 지정한다  
- 2개 이상 지정할 수 있다 ( ex) `ls -a -l`, `ls -al`)  
- 옵션과 인수를 동시에 지정할 수 있다 ( ex) `ls -al /`)  
- 옵션이 인수를 필요로 하는 경우도 있다 ( ex( `ls -w 10`)  
- `--`로 시작하는 롱 옵션도 있다 ( ex) `ls --version`)  
- `--help`는 커맨드 사용법을 출력한다

### 1-3) 🛣️ 경로(PATH)란?
- 정의 : 디렉토리나 파일의 주소정보를 뜻함
    - 이미 알고있듯이 `/`를 사용하여 계층의 구별을 함	
- 패스의 종류 
    -  절대패스 : 루트 디렉토리부터 시작하는 패스 ( ex) `/home/user/test/innertest.txt` )
    -  상대패스 : 현재 디렉토리부터 시작하는 패스( ex) 현재 디렉토리가 `/home/user`디렉토리라고 가정할시, `test/innertest.txt` )
    -  또한 상대패스는 도트기호를 사용하여 표현할수 있다
         1 `. ` : 현재 디렉토리
    	 2 `..` : 부모 디렉토리

### 1-4) :page_facing_up: 텍스트 파일과 바이너리 파일
- 텍스트 파일 
    1. 텍스트파일은 (아스키 코드에서)문자코드로 정의 된 문자만이 저장된 파일
    2. 리눅스의 OS에 관련된 대부분의 설정정보가 텍스트 파일로 관리되기 때문에 중요
- 바이너리 파일 
    1. 수치를 포함한 문자 이외의 것이 저장된 파일을 바이너리 파일이라고 부른다
    2. 바이너리 파일을 cat이나 less등의 커맨드로 읽어낼 때 글자가 깨지는 이유는 파일을 해석하는 과정에서 문자 코드에 해당하는 수치를 그대로 치환하기 때문임
     
※간단하게 생각해서 .txt 나 .java 와 같은 소스코드는 텍스트 파일, 다른것은 (.mp4 , .jpg , exe) 바이너리 파일이라고 생각하면 편함 

### 1-5) :link: 링크 걸기란?
- 리눅스에서는 파일에 다른이름을 주는것이 가능하여 이것을 링크걸기 라고 함
- windows의 바로가기와 유사하다고 생각하면 됨
- 긴 경로를 생략하려고 하거나, 여러 버젼을 공존시키고 싶을 때 사용 
    - 하드링크
        - 하나의 파일에 여러 이름을 주는 기능
        - 하나하나가 실체를 가진 파일 
        - 원본 파일이 삭제되어도 하드링크로 만든 파일은 삭제 안 됨
    - 심볼릭 링크
        - 원본의 경로가 적힌 특수 파일
        - 원본의 경로에 있는 파일만이 실체를 가짐
        - 원본의 경로가 바뀌거나 삭제되면 심볼릭 링크가 참조를 못하게 됨
        - 통상적으로 하드링크보다 제약이 적어 비교적 많이 사용됨 
    
※ 자세한 사항은 2-2의 `ln` 커맨드를 참조
    

# 2) 🧾 리눅스 주요 명령어 정리

### 2-1) :mag: 유틸리티

1 . ***MAN***ual : 커멘드의 메뉴얼을 표시

 ```
man [ 조사하고 싶은 커멘드 이름 ]
```

<br>

2 . ***CLEAR*** : 명령 프롬프트 창을 깨끗히 비움

 ```
CLEAR
```
<hr>

### 2-2) 📂 폴더 조작 계통

1 .  ***C***hange ***D***irectory : 경로 변경
    
```
cd [ 옵션 ] [ 디렉토리 ]
```
- 패스  
    - `～` : 홈 디렉토리
    - `/` : 루트 디렉토리

<br>

2 .  ***P***rind name of ***W***orking ***D***irectory : 현재 경로 표시

```
pwd [ 옵션 ]
```

<br>

3 . ***L***i***S***t : 파일 또는 폴더를 확인할수 있는 코드

```
ls [ 옵션 ] [ 디렉토리/파일 ] 
```
    
- 패스 
    - `*` : 임의의 문자열( ex) ls *.html : ".html"을 포함하는 요소 출력 )
    - `?` : 임의의 문자 하나 ( ex) ls /bin/z??? : "z"로 시작하는 문자열 4개로 된 요소 출력 )
- 옵션 
    - `-a` : 숨겨진 파일과 디렉토릭등도 전부 표시
    - `-l` : 파일의 상세 정보를 표시 (이 경우에 "." 표시된 파일은 평소에 보이지 않는 파일을 뜻함)
    - `-F` : 파일을 종류별로 표시 (/는 디렉토리 , @는 심볼릭 링크[ ex )바로가기 등 ], *는 실행 가능 파일 , 기호가 없는 경우는 통상적인 파일을 뜻함)

<br>

4 . ***M***a***K***e ***DIR***ectory : 디렉토리를 생성
  
```
mkdir [ 옵션 ] [ 디렉토리 이름설정 ]
```
- 옵션
    - `-p`  :  연달아서 디렉토리 생성이 가능 ( mkdir -p test/innertest )

<br>
  
5 . ***R***e***M***ove ***DIR***ectory : 디렉토리를 삭제
```
rmdir [ 옵션 ] [ 삭제할 디렉토리 이름 ]
```
- 옵션 
    - `-r` :  디렉토리 안에 하위요소가 있더라도 삭제
    
<hr>

### 2-3) :page_facing_up:  파일 조작계통

1 .   con***CAT***enate : 파일의 내용을 표시
```
cat [ 옵션 ] [ 파일명 ]
```
- 옵션  
    - `-n` : 행 번호를 표시
<br>   
		
2 .  ***LESS*** : 파일의 내용을 스크롤 형식으로 보여줌 (많은 문자열을 볼 때 사용)
```
less [ 옵션 ] [ 파일명 ]
```

- 옵션
     - `-N` : 왼쪽에 라인 넘버 표시
     - `-M` : 하단에 페이지와 퍼센트를 표시 
- 명령어 [※ less 상태로 들어왔을때 사용가능]
    - `방향키 ↓` `J` :  1행 아래로
    - `방향키 ↑` `k` :  1행 위로  
    - `page up 키` `b`:  한 화면 아래로 스크롤
    - `page down 키` `space 키` `f` : 한 화면 위로 스크롤
    - `/문자열` : 아랫방향 검색
    - `?문자열` : 윗 방향 검색
    - `n` : 다음 검색결과 이동
    - `N` : 이전 검색결과 이동
    - `q` : less 커맨드 종료
<br>  

3 . ***TOUTH*** : 새로운 파일을 작성 [빈 파일] 
```
touch [ 파일명 ] [ 파일명 ] [ ... ]
```

<br>  

4 .   ***R***e***M***ove : 파일 , 디렉토리를 삭제
```
rm [ 옵션 ] [ 파일명 ]
```
- 옵션  
    - `-r`  : 폴더째로 삭제
    - `-f`  : 파일 삭제 시에 경고문을 표시 안함 
    - `-i`  : 파일 삭제 전에 확인 
    - `-r`  : 행 번호를 표시함
<br>  

5 .   ***M***o***V***e : 파일 경로 이동 , 파일명 변경
```
mv [ 옵션 ] [ 파일명 ] [ 경로 ] # 파일경로 이동
mv [ 옵션 ] [ 파일명 ] [ 변경이름 ] #파일명 변경
```
- 옵션  
    - `-i` :  이름 바꾸기 전에 확인
<br>  

6 .   ***C***o***P***y :파일, 디렉토리를 복사
```
cp [ 옵션 ] [ 피 복사 파일명 ] [ 복사 할 파일명 ]
```
- 옵션  
    - `-i` :  복사하기 전에 확인
    - `-r` :  디렉토리를 복사

※ 같은 파일명으로 파일을 지정하면 덮어 씌워지기 때문에 주의
<br>  

7 .   ***I***i***N***k : 링크를 걸수 있음 
```
ln [ 옵션 ] [ 참조 파일명 ] [ 링크이름 ]
```
- 옵션  
    - `-s` :  심볼릭 링크를 건다 

※옵션을 걸지않으면 기본적으로 하드링크로 취급한다
<br>  

8 .   ***FIND*** : 파일을 찾음 
```
find [ 검색 기준 디렉토리 ] [ 검색조건 ] [ 액션 ]
```
- 검색기준 디렉토리는 지정해도 상관은 없지만 `.`(현재 디렉토리)를 사용하는게 맘 편하다 
- 검색조건  
    - `-name [ 파일명 ]` : 파일명을 지정하여 검색. 대소문자를 구별
    - `-iname [ 파일명 ]` : 파일명을 지정하여 검색. 대소문자를 구별하지 않음 ()
    - `-type [ 종류 ]` : 파일의 종류로 검색 ( `f` : 파일 `d` : 디렉토리 `l`: 심볼릭링크 )
    - `[ 검색조건 ] -a [ 검색조건 ]` : 다수의 검색조건을 연결시켜서 지정할 수 있음 [ 생략가능 ]

※ `-name`검색조건 시  `*` `?` 와일드카드를 쓸 수 있지만, 와일드 카드로 지정할 때는 "" 로 감싸서 사용

- 액션
    - `-delete` : 현재 검색된 파일을 삭제함 
    - `-ls` : 현재 검색된 파일을 삭제함 
    - `-print` : 현재 검색된 파일을 삭제함 
    - `-quit` : 검색 조건에 해당하는 결과가 나올 경우 종료

※ 별도의 액션 지정하지 않을시 `-print`가 기본값
<br>  


9 .   ***G***lobal ***R***egular ***E***xpression ***P***rint : 파일 내 특정 문자열 및 패턴과 일치하는 행 출력
```
grep [옵션] [문자열]
```

- 옵션  
    - `-b` : 검색 위치의 블록번호 표시
    - `-n` : 행 번호와 함께 출력
    - `-i` : 대소문자 구별 안함
    - `-v` : 일치하지 않는 행만 출력
    - `-w` : 단어와 일치하는 행만 출력 
    - `-x` : 라인과 일치하는 행만 출력
    - `-c` : 일치하는 행의 수 출력 
    - `-r` : 하위 디렉토리를 포함한 모든 파일에서 검색
- 패스 
    - `*` : 임의의 문자열( ex) ls *.html : ".html"을 포함하는 요소 출력 )
    - `?` : 임의의 문자 하나 ( ex) ls /bin/z??? : "z"로 시작하는 문자열 4개로 된 요소 출력 )
<br>  

 
<hr>  

### 2-4) :lock:  퍼미션

1 . ***ID***  : 현재 접속해있는 유저정보를(유저아이디 , 그룹아이)  확인할수 있다

```
id
```
<br>  

2 . ***CH***ange ***MOD***e : 파일이나 디렉토리의 퍼미션을 설정

```
chmod [ 유저/권한 여부/권한내용 ] [ 파일명 ]

chmod [ 8진수 ] [ 파일명 ]
```
- 유저
 
| 기호       | 내용 |
|-------------|------|
| `u` | ***u***ser ( 유저 [ 소유자 ] )    |
| `g` | ***g***roup  (그룹)  |
| `o` | ***o***ther  (그 외)  |
| `a`  | ***a***ll  (모든 유저)  |

- 권한 여부
 
| 기호       | 내용 |
|-------------|------|
| `+` | 권한 부여 |
| `-` | 권한 삭제 |
| `=` | 기술한 대로 권한 설정  |

- 권한내용

| 기호       | 내용 |  8진수  |
|-------------|------|--------|
| `r` | ***r***ead (읽기)    | 4 |
| `w` | ***w***rite  (작성)  | 2 |
| `x` | e***x***ecute  (실행)  | 1 |
| `-`  | 권한 없음  | 해당사항 없음 |

※ 8진수로 커맨드를 다룰 시, r-x인 경우는 4 + 1 인 5를 기입  )

<br>  

3 . ***S***witch ***U***ser : 슈퍼유저로 변경
```
su
```

※ root 패스워드를 입력하면 슈퍼유저로 변경

<br>  

3 . ***S***witch ***U***ser and ***D******O*** : 슈퍼유저로써 커맨드를 실행
```
sudo [커맨드]
```

※ 앞에 `sudo` 를 붙이는 것만으로 권한이 부여됨


<br>  

4 . ***PASSW***or***D*** : 패스워드 변경 
```
passwd
```
※ 현재 비밀번호와 변경할 비밀번호 입력 시 변경 


<br>  

5 .  ***USERADD*** : 유저 추가 
```
useradd [ 유저명 ]
```

※ 슈퍼유저로써 실행할 필요가 있음 

<br>  

6 . ***USERDEL***ete : 유저 삭제
```
userdel [ 유저명 ]
```

※ 슈퍼유저로써 실행할 필요가 있음


<br> 
<hr>

### 2-5) :computer: 프로세스 & 잡 관련  

1 . ***P***rocess ***S***tatus : 실행중인 프로세스를 표시하는 커맨드 

```
ps [ 옵션 ]
```

- 옵션
    - `aux` : 모든 프로세스를 상세정보와 함께 표시 
    ※ 옵션임에도 `-`를 붙이지 않음. [ 정확하게 말하자면 `au` `-aux` 여러 옵션이 있지만 범용성으로는 `-aux`가 가장 많이 쓰임 ]

- 표시되는 내용

|  표시열  |   내용   |
|---------|---------|
| USER    | 프로세스를 실행한 유저 |
| PID     | 프로세스 ID |
| %CPU    | CUP 점유율 |
| %MEM    | 메모리 점유율 |
| VSZ     | 가상메모리 크기 ( 비교적 중요하지 않음 ) |
| RSS     | 실제로 사용되는 메모리 크기 ( 비교적 중요하지 않음 ) |
| TTY     | 프로세스가 실행되는 터미널 ( 비교적 중요하지 않음 ) |
| STAT    | 프로세스의 상태 및 추가적인 상태 플래그  ( 비교적 중요하지 않음 ) |
| START   | 프로세스가 시작된 시각 |
| TIME    | 프로세스가 실행되는데 걸린 시간 |
| COMMAND | 기동한 커맨드 |

<br>  

2 . ***JOBS*** : 현재 잡 내역을 표시

```
jobs
```
※ 잡 아이디 , 실행상황 , 실행커맨드를 순서대로 표시

<br>  

3 . ***F***ore***G***round : 정지된 작업이나 백그라운드 작업을 포 그라운드로 전환

```
fg %[ 잡 id ]
```
※ 정지란 `ctrl + z`를 눌러 커맨드 처리가 일시 정지된 상태를 뜻함
※ 정지와 포 그라운드는 주로 작업을 일시 정지시킬때 사용

<br>

4 . ***B***ack***G***round : 정지된 작업을 백 그라운드에서 계속 실행

```
bg %[ 잡 id ]
```
※ 정지란 `ctrl + z`를 눌러 커맨드 처리가 일시 정지된 상태를 뜻함
※ 긴 시간이 걸리는 처리를 백그라운드로 실행하여 커맨드가 종료되는것을 기다리지 않아도 되게 함

<br>

5 . ***KILL*** process : 잡이나 프로세스를 종료

```
kill [ 옵션 ] %[ 잡 id ]
kill [ 옵션 ] [ 프로세스 id ]
```
- 옵션
    -  `-TERM` : 프로세스를 종료 [ 디폴트 값으로써 따로 옵션을 주지않으면 해당 옵션이 실행됨 ]
    -  `-SIGKILL` : 프로세스 강제종료 [ -9 로도 쓰임 ]


※ 정지상태거나 백 그라운드 실행중일시 커맨드 `kill`을 통해 커맨드 종료 가능
※ kill 커맨드는 명밀히 말하면 `TERM` 이나 `SIGKILL`등의 시그널을 송신하는 커맨드


<br>
<hr>

### 2-6)  :capital_abcd: 텍스트 에디터

1 . ***V***isual ***I***dentity : 텍스트 에디터 모드로 이행

```
vi [파일명]
```

- ***에디터 모드의 전환***
    - `i` : 텍스트 삽입상태로 진입
    - `ese` : 커맨드 모드로 다시 돌아옴
- ***에디터 모드 종료 및 저장 커맨드 (커맨드 모드에서 가능)***
    - `:q` : 저장하지 않고 종료
    - `:q!` : 변경한 행도 저장하지 않고 종료
    - `:w` : 종료하지 않고 저장
    - `:wq` : 저장 한 후 종료
- ***커서 이동 (커맨드 모드에서 가능)***
    - `h` `l` `k` `j` : 좌 우 상 하 이동 ( 방향키로도 상관없지만 다양한 커맨드와 조합 가능함 )
    - `a` : 커서 맨 뒤로 이동
    - `enter` : 개행
- ***삭제 (커맨드 모드에서 가능)***
    - `x` : 문자하나 삭제
    - `dw` : 1단어 삭제
    - `dd` : 1행 삭제
    - `d0` : 첫 행 부터 커서위치까지 삭제
    - `d$` : 커서 위치부터 행 끝 까지 삭제
- ***그 외 (커맨드 모드에서 가능)***
    - `yy` : 행 복사
    - `p` : 행 붙여넣기
    - `cw` : 단어 변경 (`dw`와 다른점은 바로 입력모드로 이행된다는 점임)


<br>
<hr>

### 2-7) :information_source:  그 외 자주 쓰이는 커맨드 

1 .   ***ECHO*** : 문자열 인수를 출력
```
echo [옵션] [문자열]
```
- 옵션  
    - `-n` : 개행문자 미표시
    - `-e` : 이스케이프 문자를 ""로 묶어 인식하도록 함
    - `-E` : 이스케이프 문자를 비활성화
- 이스케이프 문자 [ `-e` 옵션과 같이 사용해야 함 ]
   - `\\` : `\`문자 표시
   - `-\n` : 개행
   - `-\t` : 탭
   - `-\r` : 새 줄 시작

※ 파일명이 존재하지 않을시 파일 생성됨



<hr> 


# 3) :keyboard: 표준입력
### 3-1) :mouse_three_button:  표준입출력이란?
- 사용자가 다른 입출력을 지정하지 않았을시 사용되는 컴퓨터 프로그램과 외부환경과의 데이터 전달 매체
- 3가지 요소가 존재하는데 표준입력 , 표준출력 , 표준에러출력이 있음
- 입력에는 보통 키보드가, 출력에는 보통 모니터와 같은 디스플레이가 사용
### 3-2) :leftwards_arrow_with_hook: 리다이렉트
- 리다이렉트는 출력이 어디로 가고 입력이 어디에서 오는지 변경가능해짐
- 키보드 대신 파일에서 입력하거나 커맨드 입력 시 화면에 표시하지 않고 파일에 저장할수 있음
- 각 표준 입출력에는 수치가 존재함

| 입출력       | 수치 |
|-------------|------|
| 표준입력     | 0    |
| 표준출력     | 1    |
| 표준에러출력  | 2    |

- `>`나 `>>` 기호를 사용해서 리다이렉트 시킬수 있음

| 리다이렉트       | 수치 |
|-------------|------|
| [ 커맨드 ] < [ 파일명 ]         | 입력을 명령어에 실행 |
| [ 커맨드 ]  << [종료 문자열]     | 입력을 종료 문자열이 나올때까지 입력을 명령어에 실행 | 
| [ 커맨드 ]  << /dev/null        | 입력을 실행하지 않음  |
| [ 커맨드 ] > [ 파일명 ]         | 표준 출력 결과를 파일로 저장 (덮어쓰기) |
| [ 커맨드 ] >> [ 파일명 ]        | 표준출력 결과를 파일로 저장 (이어쓰기) |
| [ 커맨드]2 > [ 파일명 ]         | 표준에러출력 결과를 파일로 저장 (덮어쓰기) |
| [ 커맨드]2  >> [ 파일명 ]       | 표준에러출력 결과를 파일로 저장 (이어쓰기) |
| [ 커맨드 ] > [ 파일명 ] 2>&1    | 표준 출력과 표준에러출력 결과를 파일로 저장 (덮어쓰기) |
| [ 커맨드 ] >> [ 파일명 ] 2>&1   | 표준 출력과 표준에러출력 결과를 파일로 저장 (이어쓰기) |
| [ 커맨드 ] > /dev/null 2>&1     | 표준출력과 표준에러 출력 결과를 표시하지 않음 (이어쓰기) |

※ 보통 `<` `>` 하나는 덮어쓰기 , `<<` `>>` 두개가 오면 덮어쓰지 않고 기존에 있던 내용에 추가 하는 형식이다.
※ 중요한건 커맨드의 실행결과를 텍스트 형식으로 파일에 저장된다는 점이다!
※ `/dev/null` 같은 경우는 커맨드 테스트 등에서 입력을 공백으로 하거나 결과가 대량 존재하여 결과를 비표시 하고 싶을때 사용 

### 3-3) :paperclips: 파이프라인
- 커맨드의 표준출력과 다른 커맨드의 표준출력을 연결시킴 ( 쉽게 말해서 커맨드끼리 연결시킴 )
- 당연한 이치지만 결과 또한 여러 커맨드가 섞여서 출력된다
```
[ 커맨드 ] | [ 커맨드 ] | [ ... ]
``` 

# 4) :lock:  퍼미션
### 4-1) :closed_lock_with_key: 퍼미션이란?
- 특정 파일과 디렉토리에 관한 읽기,쓰기,삭제 등에 관한 권한을 제어하고 파일의 보안을 유지
- 쉽게 말해 누가 파일을 조작할 수 있는지 정한 것이 퍼미션

### 4-2) :family_mmb: 파일 소유자와 그룹
- 각 파일에는 파일 소유자와 그룹이 설정되어 있어 각 파일 마다 권한을 관리할수 있다
- 커맨드 `ls -l` 로 파일소유자와 그룹을 확인할수 있다

### 4-3) :pen_ballpoint: 파일 퍼미션
- 커맨드 `ls -l` 로 파일타입 소유자의 퍼미션 그룹의 퍼미션 그 외의 유저 퍼미션을 확인할수 있다
- 퍼미션에는 기호 존재함 ( 상세한 내용은 `cdmod`를 참조 )

※ ex ) 그중에서도 중요한게 권한내용 관련 기호인데, `rwxr-xr--` 라고 적혀 있을시 각 사용자의 권한이 하기의 표와 같아짐 [ rwx이 기본 패턴이고 문자열 3개씩 소유자,그룹,그 외 순임 ]

| 대상 | read | write | execute |
|--------|--------|-------|--------|
|  소유자  |  가능  |   가능  |  가능  |
|  그룹   |  가능  |   불가  |  가능  |
|  그 외  |  가능  |   불가  |  불가  |

### 4-4) :godmode: : 슈퍼 사용자
- 관리자 권한을 가진 특수 유저
- 누구나 시스템은 근간을 건드리면 위험하기 때문에 슈퍼유저( 루트 )만이 그 권리를 가짐
- 관련 커맨드는 2-5 의 `sudo` 를 참조


# 5) :computer: : 프로세스 & 잡 & 시그널
### 5-1) :clipboard: 프로세스란?
- 실행중인 프로그램을 뜻함
- 커맨드 실행시 실행 파일을 메모리에 저장하고 메모리상의 cpu가 프로그램을 실행하는 방식
    [ 커맨드 입력 ⇒ 파일 ⇒ 메모리 ⇒ CPU ]
- 커맨드가 한번 실행되면 프로세스가 하나 만들어짐
- 백 그라운드와 포 그라운드
    - 백 그라운드 : 자동적으로 실행되는 프로세스. 쉘 화면상에 출력되지 않음 
        [ 왠만한 커맨드는 포 그라운드지만 맨뒤에 `&` 를 붙이면 백그라운드로 실행 ]
    - 포 그라운드 : 사용자와 상호작용하는 프로세스. 쉘 화면상에 출력됨

### 5-2) :construction_worker: 잡이란?
- 한꺼번에 실행되는 프로세스의 집합을 뜻함
- 만일 `ps aux | grep bash | less` 라고 커맨드를 입력한다고 하면 프로세스가 3개 생성이 되고 잡이 1개 생성되는 꼴이다

### 5-3) :x: 프로세스와 잡의 차이는?
- 프로세스는 OS에서 전체적으로 통일되어 관리됨
- 프로세스는 자동적으로 실행된 프로그램 + 유저가 실행한 커맨드를 일괄적으 관리함 
- 잡은 잡이 실행되고 있는 Shell에서 관리됨

### 5-4) 시그널이란?
- 리눅스의 커널이 프로세스로 보내는 신호
- 잘 쓰이는 시그널
    ```
    ctrl + c   # 프로세스 종료 (SIGINT)
    ctrl + z   # 프로세스 일시정지 (SIGTSTP)
    ```