1. 프로세스

1) 프로그램 실행 시

① 디스크에 저장된 프로그램을 커널이 메모리에 올린다.

② 메모리에 올라간 프로그램을 CPU가 실행한다.

 

2) 프로세스 

→ 메모리 위에 올라가서 실행 중인 프로그램, 각각 pid라는 고유 번호를 할당받아 관리

 

 

2. ps 명령어 

1) $ ps : 프로세스 조회

bash는 실행하자마자 열리고, ps는 ps를 입력하여 추가된 것으로 각각 고유의 PID가 배정되는 것을 확인할 수 있다.

위와 같이 특정 명령이 실행되면 프로세스로 전환되고, 실행이 끝나면 프로세스 목록에서 사라진다.

 

2) $ ps x : 백그라운드에서 돌아가는 프로세스 조회

※ 데몬 프로세스 : 터미널과 무관하게 돌아가는 프로세스 → 항상 켜져 있어야 하는 속성의 프로세스

 

3) $ ps a : 시스템의 모든 프로세스 조회

위와 같이 시스템 내부에서 동작 중인 모든 프로세스를 조회할 수 있고, 조회된 PID를 이용해 여러가지 작업을 할 수 있다.

 

4) ps 옵션 : "-"를 쓰지 않는다.

x 사용자의 프로세스 전체 출력
ux 사용자의 프로세스 상세히 출력
ax  모든 사용자의 프로세스 출력
aux 모든 사용자의 프로세스를 상세히 출력
auxww aux 결과가 화면에 잘리지 않도록 출력

 

5) $ ps ux | less : 모든 프로세스를 페이지별로 출력 (종료:q)

 

6) $ top : 메모리 구조 살펴보기

위와 같이 메모리 사용량 등을 실시간으로 보여준다.

 

※ 참고

- VIRT : 가상 할당량 → RES의 최대치

- RES : 실질 할당량

- SHR : 공유 메모리 영역

 

 

3. 잡

1) 잡 (job)

- 프로세스 : 커널 입장에서 실행

- 잡 : 셸에서 실행하고 있는 단위

위와 같이 man bash를 ctrl+z로 강제종료시켰을 때 job이 하나 생성된 것을 확인할 수 있다.

실행 중인 프로그램이 종료되면 프로세스 목록에서 사라지기 때문에 잡에서는 확인할 수 없다.

 

잡 목록에서 PID를 조회하고자 할 때 -l 옵션을 사용한다.

 

2) $ fg : 잡의 포그라운드 전환

foreground : 사용자의 입력을 받을 수 있는 상태

→ 정지 상태에 있는 bash 메뉴얼을 다시 확인하기 위해서는 포그라운드로 되돌려야 함

위와 같이 fg %번호 명령어를 이용하여 포그라운드로 전환할 수 있고, 잡이 하나인 경우에는 fg만 입력해도 된다.

 

3) $ bg : 잡의 백그라운드 전환

background : 잡을 종료하지 않은 채 셸로 전환

위와 같이 포그라운드 상태에서는 sleep이 끝날 때까지 아무것도 하지 못한다.

백그라운드 상태에서는 sleep이 끝나지 않고도 제어권을 되찾아오고, 잡은 백그라운드에서 60초를 수행할 때까지 돌아가는 병렬적인 작업을 수행하게 된다.

포그라운드와 마찬가지로 bg %번호 명령어를 이용하여 백그라운드로 전환할 수 있고, 잡이 하나인 경우에는 bg만 입력해도 된다.

 

4) 잡과 프로세스의 종료

① 잡의 종료 

- 포그라운드 : ctrl + c

- 백그라운드 : kill %잡번호

위와 같이 kill 명령어를 이용하여 백그라운드에 있는 잡을 종료시킬 수 있다.

 

② 프로세스의 종료 : kill PID번호

위와 같이 kill PID번호 명령어를 입력하여 프로세스를 종료할 수 있다.

프로세스는 현재 로그인중인 유저가 실행한 프로세스만 삭제할 수 있고, 루트 계정만 다른 사용자의 프로세스를 강제로 종료할 수 있다.

 

5) kill : 프로세스에 특정한 신호를 보내는 명령어

SIGHUP, 1 터미널 제어 시 또는 제어 프로세스 종료 시 감지
SIGUNT, 2 키보드에서 보내는 인터럽트 신호
SIGQUIT, 3  키보드에서 보낸 종료 신호
SIGABRT, 6 abort(3)로 받은 신호 무시
SIGKILL, 9 kill 신호
SIGTERM, 15 중단 신호
SIGCONT, 19, 18, 25 중지된 프로세스 재개
SIGSTOP, 17, 19, 23 프로세스 중지

 

ex) PID가 10023인 프로세스를 중지시킬 경우

$ kill 10023

$ kill -9 10023

$ kill -SIGKILL 10023

위와 같이 해당 프로세스가 잘 종료된 것을 확인할 수 있다.

 

6) killall : 프로세스명으로 종료시키는 명령어

$ killall -9 프로세스명

위와 같이 killall 명령어를 이용하면 특정 pid가 아닌 같은 이름을 가진 모든 프로세스를 동시에 종료할 수 있다.

'네트워크캠퍼스 > LINUX' 카테고리의 다른 글

Shell Script  (0) 2024.01.17
Devops와 SE를 위한 리눅스 커널 이야기  (0) 2024.01.17
텍스트에디터  (0) 2024.01.15
파일시스템  (0) 2024.01.11
프롬프트  (0) 2024.01.10

1. vim 에디터

1) 파일 열기 및 신규 파일 작성과 저장

$ vim [파일명] → :w 저장

$ vim 한 경우 → :w [파일명]으로 저장

:wq or ZZ → 저장 및 종료

:wq! → 강제 저장 후 종료

 

2) 파일 편집

① 커서 이동 : 왼쪽(h), 위(k), 오른쪽(l), 아래(j)

② 문자 삭제 : x

③ 입력모드 : i, a

④ 커서의 빠른 이동

- 단어 단위로 이동

w 다음 단어의 첫 글자로 이동
b 이전 단어로 이동

 

- 왼쪽, 오른쪽 끝으로 이동

0 가장 왼쪽으로 이동
$ 가장 오른쪽으로 이동

 

- 행 번호로 이동

[숫자]G 숫자번째 줄로 이동
gg 문서의 첫 번째 줄로 이동
G 문서의 마지막 줄로 이동

 

- 페이지 넘기기

ctrl + f 한 번에 한 페이지 넘기기
ctrl + b 한 번에 이전 페이지로 넘기기
ctrl + d 한 번에 1.5페이지씩 넘기기
ctrl + u 한 번에 이전 1.5페이지로 넘기기

 

- 삭제 : x, d

dd 해당 줄 삭제
d$ 해당 줄 내의 문자만 삭제
d0 현재 행부터 시작지점까지 삭제
x, dl 문자 하나 삭제
dw 단어 하나 삭제
dgg 현재 위치에서 시작지점까지 삭제
dG 현재 위치에서 마지막 지점까지 삭제

 

- 붙여넣기 : p

d로 직전에 지운 텍스트는 p를 눌러 다시 붙여넣을 수 있음

 

- 복사 : y

yy 해당 줄 복사
y$ 해당 줄 내의 문자만 복사
y0 현재 행부터 시작지점까지 복사
y, yl 문자 하나 복사
yw 단어 하나 복사
ydgg 현재 위치에서 시작지점까지 복사
yG 현재 위치에서 마지막 지점까지 복사

 

- 이외 조작방법

J 개행문자 삭제
U 이전 동작 취소 (ctrl + z 기능)
ctrl + r 취소 동작 복구

 

- 검색 

/ 내용 enter 아래 방향으로 검색
? 내용 enter 위 방향으로 검색
다음 내용으로 이동
N 이전 내용으로 이동

 

- 치환 : :%s/찾을문자/바꿀문자/g (모두 찾아바꾸기 기능)

 

- 공식문서 찾아보기

$ vimtutor : 튜토리얼 이용해 기본동작 연습

:help : 도움말 확인

'네트워크캠퍼스 > LINUX' 카테고리의 다른 글

Devops와 SE를 위한 리눅스 커널 이야기  (0) 2024.01.17
프로세스  (0) 2024.01.16
파일시스템  (0) 2024.01.11
프롬프트  (0) 2024.01.10
Shell  (0) 2024.01.09

1. 파일과 디렉터리

1) 파일

※ 리눅스에서는 폴더마저 파일로 분류됨

→ 리눅스에서는 모든 것이 파일로 되어 있음

 

2) 디렉터리

- 모든 폴더 상위에 루트폴더(/) 존재

- 루트 디렉토리 하위에 모든 저장장치가 매칭

 

3) 대표적인 디렉터리

/bin 대부분의 명령어 실행파일
시스템과 관련된 중요한 명령어들이 주로 저장
/dev 디바이스(장치) 파일이 배치
디스크, 키보드, 마우스 등의 하드웨어를 제어할 수 있도록 돕는 특수 파일
/etc 리눅스에서 사용하는 대부분의 설정파일
애플리케이션 및 리눅스 자체 설정 파일
/home 각 사용자 계정명으로 생성되는 디렉터리
해당 사용자의 개인적 파일 저장
/sbin 시스템 관리자용 명령어 저장 (root 권한이 필요)
/tmp 임시저장파일
/usr 유저정보
/var 마운트된 정보

 

4) 절대경로 vs 상대경로

절대경로 : 해당 요소의 모든 경로를 기입해 경로를 지정하는 것

상대경로 : 현재 명령을 내리는 지점/파일 위치를 감안해서 상대적으로 위치를 지정하는 것

 

5) 와일드카드 

ex) $ ls ab* : ab로 시작하는 모든 파일 조회

ex) $ ls ab? : ab로 시작하는 3글자 파일 조회

 

6) cd 명령어

→ 디렉토리 간 이동

 

7) ls 명령어

→ 파일 목록 출력

-l 상세조회
-a 전체조회(숨김파일까지 조회)
-t 생성날짜 내림차순으로 조회
-F 파일 종류 조회
/:디렉터리  *:실행가능파일  @:심볼릭링크
ls 경로 해당 경로 내부 조회
-w [숫자] 해당 숫자만큼의 열로 출력
--quote-name 파일이름에 따옴표 붙임

루트폴더 내의 모든 요소 조회 가능

파일이름에 따옴표를 붙여서 출력

 

 

2. 파일 조작 명령어

1) mkdir : 디렉터리 생성

-p 옵션 : 여러 개의 디렉터리 한 번에 생성 가능

 

2) touch : 파일 생성

위와 같이 나열하여 여러 개 파일을 한번에 생성할 수도 있다.

 

3) rm, rmdir : 파일, 디렉터리 삭제

rm -r : 데릭터리와 디렉터리 하위 모든 것 삭제

rm -i 파일명 : 삭제할지 말지 확인 후 삭제

 

4) cat : 파일 내용 출력

-n 옵션 : 행 번호 출력

 

 

5) less : 스크롤 출력

space, f, ctrl+v : 한 화면 아래로 스크롤

b, alt+v : 한 화면 위로 스크롤

j, ctrl+n, enter : 한 행 아래로 스크롤

k, ctrl+p : 한 행 위로 스크롤

q : less 명령어 종료

 

6) cp : 파일, 디렉터리 복사

cp [옵션] [복사할파일] [복사할위치]

-i 옵션 : 덮어쓰기 전 경고

-r 옵션 : 디렉터리 복사 시 사용

위와 같이 디렉터리 복사 시에는 -r 옵션을 사용한다.

디렉터리 안에 있던 파일까지 모두 복사된 것을 확인할 수 있다.

 

7) mv : 파일 이동, 이름 변경

① 파일 이동

mv [옵션] [이동할파일] [목적지]

b.txt 파일이 test3 디렉터리로 잘 이동된 것을 확인할 수 있다.

위와 같이 여러 파일을 한 번에 옮기는 것도 가능하다.

디렉터리 이동의 경우 -r 옵션을 주지 않아도 된다.

 

② 파일명 변경

a.txt가 b.txt로 변경된 것을 확인할 수 있다.

 

8) ln : 링크 생성

※ 링크 : 리눅스 파일에 별명을 붙이는 것 → 별명으로 호출하는 것이 가능

ln [옵션] [링크할파일] [링크이름]

① 하드링크

 한 파일에 이름을 여러개 부여하는 것

위와 같이 file2를 열어보면 file1의 내용과 같은 것을 출력한다.

그냥 보기에는 복사와 같다고 생각할 수 있지만, 위와 같이 file의 내용을 수정하면 file2의 내용도 똑같이 변경되어 있는 것을 확인할 수 있다.

하드링크의 경우 원본을 삭제하더라도 위와 같이 계속 역할을 수행할 수 있다.

 

② 심볼릭링크

→ 디렉터리는 하드링크로 지정할 수 없고, 서로 다른 디스크에 걸쳐서 만드는 것이 불가능하다.

ln -s [링크할파일] [링크이름]

심볼릭링크의 경우 원본이 삭제되면 기능을 수행할 수 없게 된다.

즉, 바로가기의 기능처럼 참조형으로 해당 파일의 위치만 가지고 있기 때문에 링크가 깨진 심볼릭 링크는 사용할 수 없다.

위와 같이 심볼릭 링크의 원본이 삭제되면 연결된 링크 파일은 동작하지 않는 것을 확인할 수 있다.

 

☆ 링크를 사용하는 이유

① 긴 절대경로를 별명으로 줄여서 사용하기 위해

② 버전이 여러 개인 파일이 한 폴더에 있을 때 구분하기 위해

 

9) 파일 찾기

① find : 디렉터리에서 파일 찾기

find [검색할디렉터리] [검색조건] [액션]

현재 작업폴더에서 a 파일을 찾아 콘솔에 찍어달라는 의미이다.

 

② grep : 특정 문자열이 포함된 파일 찾기

grep [찾는문자] [경로]

위와 같이 cat.txt 파일에서 print라는 문자가 포함된 열만 출력한다.

-i 대소문자 구분 없이 검색 
-v 해당 문자가 포함되지 않은 문장 검색
-r 해당 디렉토리 하위까지 검색
--color 찾은 문자열 강조, 기본은 빨간색

콘솔에 hello world를 찍고, 그 중 hello가 포함된 줄만 출력하라는 의미이다.

 

10) --help : 명령어 도움말 보기

- 사용법, 명령어의 기능적 설명, 지정할 수 있는 옵션목록과 설명 등의 내용

※ $ LANG=ko_KR.UTF-8 cat --help : 한글 문서가 있는경우 한글 출력

 

11) man : 메뉴얼 출력, --help에 비해 상세한 내용

man [키워드]

-k 옵션 : 특정 명령어 출력

위와 같이 복사 관련 키워드의 메뉴얼이 출력된다.

 

man cat 입력 시 CAT(1)이라고 나온다.

괄호 안에 숫자는 섹션을 의미한다.

1 : 명령어

2 : 시스템콜

3 : 라이브러리 함수

4 : 디바이스파일

5 : 파일 서식

6 : 게임

7 : 기타

8 : 시스템 관리 명령어

9 : 커널 루틴

 

man [섹션번호] [이름] 

-wa 옵션 : 해당 명령어가 몇 번 섹션 번호 문서가 존재하는지 볼 수 있다.

 

12) which : 명령어 검색

which [옵션] [명령어]

 

 

3. 파일 권한 변경하기

→ 중요한 시스템 파일들을 함부로 제어하지 못하게 막기 위한 목적

 

1) 10자리 비트 -rwxrwxrwx

① 첫 자리

- : 일반 파일

d : 디렉터리

l : 심볼릭 링크

b : 블록장치

c : 문자장치

s : 소켓

p : 이름 있는 파이프

 

② 나머지는 세글자씩 묶기

r : 읽기 (4)

w : 쓰기 (2) 

x : 실행 (1)

 

③ 3비트씩 쪼갠 것의 의미

소유자의 권한, 그룹의 권한, 다른 사용자 및 그룹의 권한

 

2) chmod

$ chmod 숫자(3자리) 파일명 

745 : 소유자(rwx), 그룹(r), 다른사용자(rx) 의 권한을 가짐

 

$ chmod -R 숫자(3자리) 디렉터리 및 경로

위와 같이 test 디렉터리 안에 두 개의 파일이 있을 때

 

-R 옵션을 사용하면 디렉터리와 그 안의  파일들까지 모두 해당 권한으로 변경되는 것을 확인할 수 있다.

 

 

4. 파일 소유권 변경하기

☆ 소유권 변경이 가능한 사용자는 루트계정뿐 

1) $ su -

위 명령어를 통해 루트계정으로 변경한 후 진행

 

2) chown

# chown 유저명 파일명

# chown 유저명:그룹명 파일명

# chown -R 유저명:(그룹명) 파일명

 

루트 계정에서 rootuser.txt 파일을 생성해준다.

다시 일반사용자 계정으로 돌아와서 vi를 통해 해당 파일을 열어준다.

위와 같이 일반사용자 계정은 r 권한만 있기 때문에 readonly 경고가 뜨는 것을 확인할 수 있다.

루트 계정에서 chown 명령어를 이용하여 rootuser.txt 파일의 소유권을 ubuntu 계정으로 변경해준다.

다시 ubuntu로 돌아와서 rootuser.txt 파일 내용을 수정해보면 잘 변경되는 것을 확인할 수 있다.

'네트워크캠퍼스 > LINUX' 카테고리의 다른 글

프로세스  (0) 2024.01.16
텍스트에디터  (0) 2024.01.15
프롬프트  (0) 2024.01.10
Shell  (0) 2024.01.09
리눅스 개요  (0) 2024.01.09

1. 커맨드 삭제

 

1) 특정 단위나 지정

ctrl + b 커서를 한 글자 왼쪽으로 이동
ctrl + f 커서를 한 글자 오른쪽으로 이동
ctrl + a 커서를 맨 왼쪽으로 이동
ctrl + e 커서를 맨 오른쪽으로 이동

 

2) 단어 단위

alt + b 커서를 한 단어 왼쪽으로 이동
alt + f 커서를 한 단어 오른쪽으로 이동

 

3) 삭제

backspace
ctrl + h
커서 왼쪽 문자 하나 삭제
delete
ctrl + d
커서 오른쪽 문자 하나 삭제
ctrl + w 커서 왼쪽 한 단어 삭제

 

 

2. 커맨드 자르기 및 붙여넣기

ctrl + k 커서의 위치에서 끝까지 잘라내기
ctrl + u 커서의 위치에서 커맨드라인의 첫 문자까지 잘라내기
ctrl + y 마지막으로 잘라내기한 내용 붙여넣기

 

 

3. 각종 돌발 상황

 

1) 키보드 입력이 안되는 경우 → 화면 표시 잠그는 키를 입력했을 가능성

ctrl + s 화면 표시 잠그기 (입력 방지)
ctrl + q 화면 표시 잠금 풀기 (입력 가능)

 

2) 실행한 명령을 중도에 중단시키는 경우

ctrl + c

 

3) 프롬프트 문자가 깨지는 경우

ctrl + l 혹은 clear 입력

그래도 깨진다면 reset 입력

 

 

4. 명령 이력 확인하기

 

1) 명령 이력 확인

상단방향키
ctrl + p
직전 명령 하나씩 조회
하단방향키
ctrl + n
다음 명령 하나씩 조회
ctrl + r 전체적 이력 검색

 

2) ctrl + r 이후 

특정 문자 입력 해당 문자를 포함하는 검색결과 조회
ctrl + r 한 개 이전의 검색결과로 이동
enter 현재 검색 결과 실행
esc 조회 취소 및 커맨드라인으로 복귀
ctrl + g 검색 결과 지우고 커맨드라인으로 복귀

 

3) history [숫자]

가장 최근에 입력했던 명령어를 숫자만큼 출력해줌

!번호 해당 번호 명령어 재호출
!! 바로 직전 명령어 수행
!?문자열? 해당 문자를 포함한 명령어 중 가장 최근 명령어 하나 수행

 

'네트워크캠퍼스 > LINUX' 카테고리의 다른 글

프로세스  (0) 2024.01.16
텍스트에디터  (0) 2024.01.15
파일시스템  (0) 2024.01.11
Shell  (0) 2024.01.09
리눅스 개요  (0) 2024.01.09

1. 리눅스 Shell

→ 사용자와 운영체제 커널 사이의 인터페이스 역할

1) 명령어

명령어 의미
id 아이덴티티 정보
pwd 커맨드라인 위치 경로
ls 파일과 폴더목록
-l : 자세한 정보 출력
-a : 숨겨진 파일 표시
-t : 시간순 출력
--hide=파일명 : 검색결과에서 배제
date 현재 시간
echo 출력명령어
cat 내용물 확인
type 명령어 명령어 경로 조회

 

> : 파일 덮어쓰기

>> : 파일 이어쓰기

 

uname 명령어 : 기본 정보 출력

 

date 명령어

 

2) 명령어 조회하기

type 명령어를 통해 해당 명령어의 실제 위치를 확인할 수 있다.

 

또한, 위와 같이 해당 명령어를 수행하는 실제 실행 코드를 조회할 수 있다.

 

 

2. 셸과 커널의 역할

1) 셸의 역할

→ 사용자의 명령을 커널이라는 실제로 실행하는 심부름꾼에게 전달하는 전령

- 사용자 명령 입력 시 

① 매칭되는 명령어 조회 

② 존재하는 명령어라면 커널에 전달

③ 커널이 실행하고 결과를 화면에 표현

 

2) 겹치는 명령어의 실행 우선순위

ex) /bin/date와 /bin/user/date라는 두 개의 date가 존재한다면? /bin/date가 실행

→ 우선순위는 무조건 경로가 짧은 쪽

 

3) 셸과 커널이 분리된 이유

특정 부분에서 오류 발생 시 일체형이라면 유지보수가 힘들지만,

분리형인 경우 문제가 생긴 부분만 교체하면 되고 다른 요소와 조합해 사용하기도 수월

 

 

3. 프롬프트

1) 프롬프트

@을 기점으로 왼쪽은 사용자명, 오른쪽은 호스트명

 

whoami : 계정명

hostname : 호스트명

 

$ : 일반 사용자 계정

# : root 계정

 

 

4. 셸의 종류

※ 셸의 경우 기본적으로는 대화형 방식(직접 명령어를 입력하여 제어하는 것)을 수행한다.

- 보편적으로는 bash를 가장 많이 사용

- mac 환경인 경우 커스터마이징이 용이해 zsh 사용

 

$만 나타난 셸이 sh

 

최상단에 bash가 열려있으나 로그인된 상태는 아니므로 logout 명령을 적어도 exit을 입력하라고 한다.

 

 

5. 터미널과 셸의 관계

※ 터미널과 셸은 다르다.

- 터미널이라는 프로그램을 이용하여 컴퓨터의 입출력 받음

- 해당 입출력은 셸이 해석하고, 해석 후 유효한 명령인 경우 커널 실행

'네트워크캠퍼스 > LINUX' 카테고리의 다른 글

프로세스  (0) 2024.01.16
텍스트에디터  (0) 2024.01.15
파일시스템  (0) 2024.01.11
프롬프트  (0) 2024.01.10
리눅스 개요  (0) 2024.01.09

※ On-premise : 내부망 → 서버를 자체적으로 직접 설치하여 운영하는 방식

※ Cloud Computing : 인터넷을 통해 가상화된 컴퓨터의 리소스를 제공하는 것

 

1. 유닉스로부터 시작된 리눅스의 역사

1) 유닉스

- 초기 유닉스는 C언어로 작성

- 비상업적인 목적, 연구소에서 주로 활용

 

2) 리눅스

- 유닉스와 유사한 운영체제 개발 목적

- 개방성, 유연성, 안정성 등의 특징

 

3) 유닉스와 리눅스의 관련성

- POSIX 호환성 유지

- 유닉스와 유사한 명령어, 파일시스템, 네트워킹 → 쉬운 이식성과 호환성 제공

 

2. 리눅스 운영체제

1) RedHat 계열

- RPM(Redhat Package Manager) 사용 → .rpm 확장자

- yum 또는 dnf를 사용하여 패키지 관리

- /etc/sysconfig 디렉터리를 사용하여 시스템 설정 저장 → systemd 사용하여 시스템 초기화 및 서비스 관리

- Red Hat Enterprise Linux, CentOS, Fedora 등

 

2) Debian 계열

- APT(Advanced Package Tool) 사용 → .deb 확장자

- apt-get, aptitude, dpkg 등을 사용하여 패키지 관리

- /etc 디렉터리를 사용하여 시스템 설정 저장 → systemd, sysvinit 사용하여 시스템 초기화 및 서비스 관리

- Debian, Ubuntu, Linux Mint 등

'네트워크캠퍼스 > LINUX' 카테고리의 다른 글

프로세스  (0) 2024.01.16
텍스트에디터  (0) 2024.01.15
파일시스템  (0) 2024.01.11
프롬프트  (0) 2024.01.10
Shell  (0) 2024.01.09

+ Recent posts