리눅스 커널 - 프로세스 관리, 파일 시스템 관리, 메모리 관리
응용 프로그램 - 문서 편집기, 컴파일러, 웹 서버
출처:https://kingofbackend.tistory.com/100
출처:https://mintnlatte.tistory.com/393
리눅스는 공개 소프트웨어이며 무료 사용 가능
유닉와 완벽한 호환성 유지
서버용 운영체제로 많이 사용
편리한 GUI 환경 제공
https://www.vmware.com/latam/products/workstation-player/workstation-player-evaluation.html
해당 사이트에 접속하여 윈도우 버전으로 다운로드 한다.
https://releases.ubuntu.com/focal/?_ga=2.84732825.1604966450.1665963317-2061005471.1661251289
iso 이미지를 다운받는다.
create a New virtual Machine 클릭하여 생성한다.
iso 이미지를 넣는다.
계정을 생성한다.
디스크 설정한다.
생성한 계정 비밀번호 입력한다.
깔끔하게 우분투 설치된 모습이다.
http://mirror.kakao.com/centos/7.9.2009/isos/x86_64/
iso 이미지를 다운받는다.
iso 이미지를 넣는다.
설치되는 중이다.
네트워크 설정해야 하는데 configure 들어가서 수동으로 DNS도 설정해준다.
Host name도 docker로 바꿔준다.
계정 만들어준다.
설치되어 재부팅되는 모습이다.
로그인 아이디 입력한다.
비번 입력해준다.
깔끔하게 로그인된 화면이다.
네트워크를 이용하여 원격 접속 가능케 함
특히 공개 키 암호방식으로 접속하여 보안 강화 (22번 포트 활용)
SSH Client 프로그램은 CLI 방식으로 작동
Windows : PuTTY (무료), xshell (유료) 등
Linux, MacOS : terminal 프로그램 사용
공개 키 파일 형식 ( .ppk ), 비밀 키는 리눅스가 가짐
Session 메뉴 : Hostname 또는 IP 주소와 포트 결정 후 open 버튼 선택 시 접속 (주로 이 방식)
Connection 메뉴 -> SSH 메뉴 -> Autho 항목에서 private key 파일 별도 지정 가능
원격 접속을 위해서는 Linux에 SSH Server 프로그램이 동작하고 있어야 한다.
Ubuntu 배포판: SSH 서버 프로그램 기본 설치 X -> Ubuntu 설치 후 별도 설치 필요
CentOS 배포판: SSH 서버 프로그램 기본 설치, booting 시 자동 실행
date 날짜 시간 출력
clear 화면 지움
passwd 비번 변경
man 명령어 사용법 화면에 출력
각 디렉토리 목록
/ (root) : 루트 디렉토리, 최상위 디렉토리, 통상 별도파일 저장 X, 디렉토리만 생성
/bin : Linux 기본 명령어 (Built-in) 저장
/boot : Linux 부팅 관련 파일 저장
/dev : 디바이스 파일 저장
/etc : 환경설정 파일 저장
/root : root 사용자 홈 디렉토리
/home : 일반 사용자 홈 디렉토리
/lib : library 파일 및 kernel 모듈 저장
/usr : 일반 사용자 공통파일 저장, Windows OS의 Program Files 폴더 같은 개념
/mnt : 외부장치 연결 (mount) 파일 저장
/proc : Linux Kernel 작업 관리자에서 사용하는 임시파일 저장,
가상파일 시스템, Linux 동작중에만 내용 저장
/var : 시스템 운용 중 생성되는 임시데이터 저장소
/sbin : 시스템 관리자 명령 저장
/tmp : 임시파일 저장소, 가상파일 시스템
/opt : 추가 패키지 저장
pwd 현재 디렉토리 확인
cd 디렉토리 이동
ls 디렉토리 내용 확인
ls -a 숨김파일 확인하기
ls -F 파일 종류 표시
ls -l 상세 정보 출력
ls -d 디렉토리 자체 정보 확인
mkdir 디렉토리 생성
mkdir -p 중간 디렉토리를 자동으로 만들기
rmdir 디렉토리 삭제
cat 파일 내용 출력
more 파일 내용 화면단위로 출력
less 파일 내용 화면단위로 출력
tail 파일 내용 뒷부분 출력
cp 파일 복사
mv 파일명 변경
rm 파일삭제
ln 파일 링크 생성
touch 빈 파일 생성
grep 파일 내용 검색
find 파일 찾기
whereis 명령의 위치 찾기
which 명령의 위치 찾기
vi 실행
vi (vim) : vi 실행, 편집할 파일은 별도 지정 X
vi (vim) <파일명> : 지정한 파일을 vi로 읽어서 실행
vi 시작 시 명령모드로 실행
vi 종료
:q : vi 종료 명령, 현재 편집내용에 대한 저장이 필요한 경우 저장하지 않으면 종료 X
:q! : vi 강제종료 명령, 현재 편집내용 저장유무 상관 X 강제종료
명령 모드 / 편집 모드 전환
명령 -> 편집 전환
편집 모드에서 사용하는 단축키 입력
편집 -> 명령 전환
Esc 키 입력 후 : (colon) 또는 / (slash) 입력 후 명령 입력
편집 모드 단축키
편집 모드에서 명령 모드 전환은 Esc 키로
편집 모드 상태에서 커서 이동
키보드 방향키 사용
키보드의 h, j, k, l 키 사용
h : 왼쪽
j : 아래쪽
k : 위쪽
l : 오른쪽
내용 입력
i 키 : 현재 커서 위치에 입력 (헷갈리면 주로 이거 위주로 쓰는걸 권장)
a 키 : 현재 커서 위치 다음에 입력
o 키 : 현재 줄 다음줄에 입력
I 키 : 현재 줄 Home 위치에 입력
A 키 : 현재 줄 end 위치에 입력
O 키 : 현재 줄 이전줄에 입력
내용 수정
r 키 : 현재 커서위치 내용 한 글자만 수정
R 키 : 수정 상태 진입, Esc 키 입력 전까지 수정 상태 유지
내용 삭제
x 키 : 한 글자 삭제
<숫자> X : 숫자 개수만큼 글자 삭제
dd 키 : 줄 단위 삭제
<숫자> dd 키 : 숫자 개수만큼 줄 삭제
내용 복사
yy 키 : 줄 단위 복사
<숫자> yy 키 : 숫자만큼의 줄 복사
p 키 : 붙여넣기
v 키 : 범위 지정
y 키 : 지정 범위 내용 복사
d 키 : 지정 범위 내용 삭제
내용 이동
dd 키를 이용하여 삭제 후 원하는 위치로 커서 이동 후 p 키 입력
검색 및 바꾸기
/ <검색 문자열> : 현재 커서 위치 이후로 검색
n 키 : 현재 위치에서 파일 끝 방향으로 다음 검색결과 이동
N 키 : 현재 위치에서 파일 처음 방향으로 이전 검색결과 이동
s/ <문자열 1> <문자열 2> : 현재 커서 위치에서 첫번째 찾은 문자열 1을 문자열 2로 변경
%s/ <문자열 1> <문자열 2> : 파일 전체에서 문자열 1을 문자열 2로 변경
기타 편집 키
u 키 : undo
Ctrl + r 키 : redo
명령모드 단축키
편집 내용 저장
:w : 처음 vi 실행시 입력한 파일에 현재 편집내용 저장
:w <파일명> : 지정한 파일명에 현재 편집내용 저장
:wq : 처음 vi 실행시 입력한 파일에 현재 편집내용 저장 후 vi 종료
새로운 파일 로드
:e <파일명> : 파일명에 해당하는 파일 로드
외부명령 실행
:! <외부명령> : vi 실행상태에서 외부명령 실행결과 확인 ex) !ls -l
:!sh : 표준 shell 실행, 표준 shell에서 exit 입력하면 다시 vi로 전환
:!bash : 표준 bash shell 실행, bash에서 exit 입력하면 다시 vi로 전환
vi 실행 환경과 관련된 여러 내용을 환경 변수에 등록하여 vi 실행시마다 환경 변수 내용을 기반으로 작동
변수 (variable) : 메모리 공간 ; 원하는 값 저장 및 변경 가능
환경변수 (environment variable) : 명령 or 응용 프로그램의 원할한 동작 수행을 위해 미리 메모리에 저장된 값
set 명령을 통한 환경 변수 확인 및 변경
:set all : 전체 환경 변수 내용 출력
:set <환경 변수>=값 : 환경 변수 내용 변경, = 기호 오른쪽 값을 = 기호 왼쪽 환경변수에 저장
ex) set tabstop=4
현재 vi 상태에서 set 명령으로 환경변수를 변경/적용하면 현재 vi에서만 환경변수 내용 적용
vi 실행환경을 사용자가 원하는 형태로 구성하기 위해 별도의 환경설정 파일을 만들어 사용자 홈 디렉토리에 저장해두면 vi 실행 시 해당 환경 변수 기반으로 동작
.vimrc : vi 환경설정 파일
.exrc : vi 환경설정 파일
(둘다 dot(.)으로 시작하니 히든파일)
실제 ~/.vimrc 실습파일에 적용한 주요 환경 변수
set number : line 번호 표시
set tabstop=4 : tab 간격을 4칸으로
set ai : auto indent (들여쓰기)
set si : smart indent
set hisearch : 검색시 하이라이트
set nocompatible : 방향키 이동 가능
set ruler : 상태표시줄에 커서 위치 표시
set title : 제목 표시
set mouse=a : 커서 이동을 마우스로 이동 가능하도록 설정
set bs=indent,eol,start : backspace 사용 가능
set showmatch : 매치되는 괄호 표시
출처:https://velog.io/@peppie0192/%EA%B5%AC%EB%A6%84-k8s-TIL-1-2-3#vi-%ED%8E%B8%EC%A7%91%EA%B8%B0
명령어 해석기 기능
프로그래밍 기능: 셸 스크립트
사용자 환경 설정 기능
chsh 사용자 로그인 셀을 바꿈
옵션 -s shell: 지정한 절대 경로로 변경
echo 화면 한줄 문자열 출력
printf 자료 형식화하여 화면 출력
set: 셸 변수와 환경 변수 모두 출력
env: 환경 변수만 출력
변수명=문자열
export 지정한 셀 변수를 환경변수 변경
export -n 환경변수를 다시 셀 변수로 변경하기
unset 변수 해제
alias 앨리어스를 생성
unalias 앨리어스 삭제
history 히스토리를 출력
프롬프트를 저장한 환경변수:PS1
파일 접근 권한 변경
파일은 읽기, 쓰기, 실행에 대한 파일 접근 권한을 부여
파일 파일 소유자, 파일 소유자 그룹, 기타 사용자에 대해 각각의 파일 접근 권한 부여
파일 접근권한 표기 방법
문자 표기 방법
권한 부여시에는 권한 문자 표시 -> r w x
권한 미부여시에는 - 표시
주로 이 방법 사용
예시) rwxr-xr-x
소유자: 읽기/쓰기/실행 권한
그룹: 읽기/실행 권한
기타 사용자: 읽기/실행 권한
숫자 표기 방법
파일 접근 권한은 r w x 순서로 부여 => 고정순서
권한 부여 문자는 3자리로 구성 (단축해서 표기할 때 사용)
2진수 3자리는 8진수 1자리로 표현 가능
통상 Linux shell에서 파일 생성 시 기본 접근 권한
텍스트 파일
rw-rw-r-- 또는 664 : 소유자 읽기/쓰기 권한, 그룹 읽기/쓰기 권한, 기타 읽기 권한
디렉토리 파일
rwxr-xr-x 또는 755 : 소유자 읽기/쓰기/실행 권한, 그룹 읽기/실행 권한, 기타 읽기/실행 권한
파일 접근 권한은 파일 생성시 Linux shell에서 정해놓은 접근 권한에 의해 설정되지만, 필요시 원하는 접근 권한으로 변경 가능
파일 접근 권한 변경; chmod [옵션] <파일 접근 권한> <파일명>
-R : 하위 디렉토리까지 모두 접근 권한 변경
파일 접근 권한 표기 방법
기호 모드 (문자 형태)
<카테고리 문자> <연산자 기호> <접근 권한 문자>
카테고리 문자 : u (user 사용자) , g (group 사용자 그룹) , o (other 기타 사용자) , a (all 모두)
연산자 문자 : + (권한 부여) , - (권한 미부여)
권한 문자 : r (읽기) , w (쓰기) , x (실행)
숫자 모드 (8진수로 표현)
파일 소유자/소유자 그룹/기타 사용자에 대한 권한을 8진수 3자리로 표현, 주로 사용하는 방식
777 : 소유자/그룹/기타 사용자 모든 권한 부여
666 : 소유자/그룹/기타 사용자 모두 읽기 및 쓰기 권한 부여
755 : 소유자는 모든 권한, 그룹/기타 사용자는 읽기 및 실행 권한 부여
644 : 소유자는 읽기와 쓰기, 그룹/기타 사용자는 읽기 권한 부여
640 : 소유자 읽기 및 쓰기, 그룹 읽기 권한 부여, 기타 사용자는 모든 권한 미부여
파일 기본 권한 제한
Linux shell 상에서 생성되는 파일에 대해 기본 권한이 설정되어 생성
필요시 파일에 부여되는 기본 권한을 제한해서 생성할 수 있도록 설정할 때가 있기도 함
Linux shell 파일 기본 접근 권한
일반 파일 : 소유자 읽기/쓰기, 그룹 및 기타 사용자 읽기 권한
디렉토리 파일 : 소유자 모든 권한, 그룹 및 기타 사용자 읽기/실행 권한
touch 명령어로 생성한 파일은 일반 파일에 텍스트 파일 생성, 기본적으로 실행 권한 부재
umask : 파일 생성시 기본 권한 제한 설정; umask [옵션][<mask 값>]
-s 옵션 : mask 값 문자 출력
umask 또는 umask -s 입력시 현재 설정된 mask 값 출력
mask 값 : 파일 생성시 제한하고 싶은 권한을 표시한 값
"umask 숫자 값 입력 후 umask -s를 추가로 입력해야 설정값이 적용된다"
접근 권한은 원래 4자리의 8진수 사용
가장 처음 자리수가 특수 접근 권한 의미
특수 접근 권한에는 1, 2, 4 부여 가능
sticky bit : 맨 앞자리가 1
SetGID : 맨 앞자리가 2
SetUID : 맨 앞자리가 4
SetUID
해당 파일이 실행되는 동안에는 실행한 사용자의 권한이 아닌 파일 소유자 권한으로 생성
SetUID 부여 방법 : chmod 4<숫자모드 3자리> <파일명> ex) chmod 4755 sample
소유자의 실행권한이 s로 변경 ex) -rwsr-xr-x
SetGID
해당 파일이 실행되는 동안 파일 소유 그룹의 권한으로 실행
SetGID 부여 방법 : chmod 2<숫자모드 3자리> <파일명> ex) chmod 2755 sample2
그룹 실행권한이 s로 변경 ex) -rwxr-sr-x
Sticky bit
디렉토리 부여
디렉토리에 sticky bit가 설정되면 이 디렉토리에는 누구나 파일 생성 가능
파일을 생성한 계정으로 파일 소유자 설정, 他 사용자가 생성한 파일은 삭제 불가
디렉토리에 대한 권한
r : 디렉토리 내용 읽기 가능
w : 디렉토리에 파일 생성 가능
x : 디렉토리에 이동 가능
부여 방법 : chmod 1<숫자모드 3자리> <디렉토리명> ex) chmod 1777 temp
기타 실행권한이 t로 변경 ex) drwxrwxrwt
sticky bit가 설정된 대표적 디렉토리: /tmp
프로세스
현재 시스템에서 실행 중인 프로그램
프로세스의 부모-자식 관계
프로세스 번호
각 프로세스는 고유한 번호를 가짐:PID
1번 프로세스는 system, 2번 프로세스는 kthreadd
프로세스 종류
- 데몬 프로세스: 특정 서비스를 제공하기 위해 존재하며 리눅스 커널에 의해 실행
- 고아 프로세스: 자식 프로세스가 아직 실행 중인데 부모 프로세스가 먼저 종료되면 자식 프로
세스는 고아 프로세스가 됨- 좀비 프로세스
• 자식 프로세스가 실행을 종료했는데도 프로세스 테이블 목록에 남아 있는 경우가 있는데 이러한 자식
프로세스를 좀비 프로세스라고 함
• 좀비 프로세스는 프로세스 목록에 defunct 프로세스라고 나오기도 함
• 좀비 프로세스가 증가하면 프로세스 테이블의 용량이 부족해서 정상적인 프로세스가 실행되지 않을 수도 있음
ps 현재 단말기의 프로세스 목록 출력
ps -f 프로세스 상세 정보 출력
ps a 터미널에서 실행시킨 프로세스 정보 출력
ps au 터미널에서 실행시킨 프로세스 상세 정보 출력
ps -ef 전체 프로세스 목록 출력
pgrep 지정한 패턴과 일치하는 프로세스 정보를 출력
kill 프로세스 종료
시그널
프로세스 관리 도구
현재 실행 중인 프로세스의 정보를 주기적으로 출력
화면 출력 내용
PID : Process ID
USER : 사용자
PR : 우선 순위
NI : Nice 값
VIRT : 프로세스 사용 가상 메모리 크기
RES : 프로세스 사용 물리 메모리 크기
SHR : 프로세스 사용 공유 메모리 크기
%CPU : CPU 사용량
%MEM : 메모리 사용량
TIME+ : CPU 누적 이용 시작
COMMAND : 명령
top 내부 명령
Spacebar : 내용 갱신
k : 프로세스 종료
n : 출력 프로세스 개수 변경
u : 사용자에 대한 정렬
m : 사용 메모리 크기에 따라 정렬
P (대문자) : CPU 사용량에 따라 정렬
q : top 종료
shell에서 명령 실행
shell에서 명령 실행시 명령 마지막에 '&' 추가
-> 지속적으로 bg에서 동작
bg 명령을 이용한 background 프로세스로 전환
Ctrl + z 키 엽력을 통한 background 전환
현재 shell의 background 작업 목록 출력
작업번호
= 작업순서
' + ' : 최근 작업
' - ' : 최근 작업 바로 전
상태
Running : 현재 실행 중
Stopping : 작업 중지
Done : 작업 정상 종료
Terminated : 작업 비정상 종료
fg / bg 전환
fg <%작업 번호> : background 작업을 foreground로 전환
bg <%작업 번호> : foreground 작업을 background로 전환