시스템 소프트웨어
시스템 소프트웨어
리눅스와 파일
- 모든 것은 파일이라는 철학을 따름
- 모든 인터렉션 파일을 읽고 쓰는 것처럼 이루어져 있음
- 마우스, 키보드와 같은 모든 디바이스 관련 기술도 파일과 같이 다루어짐
- 전역 네임 스페이스 사용
- /home/ubuntu
리눅스 기본 명령어 정리
-
clear: 화면 지우기
-
whoami: 로그인한 사용자 ID 출력
-
sudo 명령어: root(관리자) 권한으로 실행(ex: Windows에서 관리자 권한으로 실행)
- sudo apt-get update
-
pwd: 현재 디렉토리 위치
-
cd: 디렉토리 이동
1 2 3 4 5 6
cd [options(s)] cd ubuntu(디렉토리명) (하위 디렉토리 ubuntu로 이동) cd /home/ubuntu (절대 경로로 이동) cd .. (상위 디렉토리로 이동) cd ~ (사용자 Home 디렉토리로 이동) cd - (이전에 있던 디렉토리로 이동)
-
ls: 파일 목록 출력
- ls -al (숨김파일와 파일의 상세 정보 출력)
1 2 3
ls [-options(s)] -a: 숨김 파일보기 -l: 파일의 상세 정보
-
chmod: 파일 권한 변경
- chmod 400 mysecurity.pem (소유자 읽기만 권한 부여)
- chmod -R 777 directory (directory 하위 모든 디렉토리까지 777권한 부여)
-
cat: 파일 보기
- cat .bash_history (.bash_history 파일 내용 출력)
-
rm: 파일 및 폴더 삭제
- rm -rf 디렉토리명 (하위 디렉토리를 포함한 모든 파일을 강제로 삭제)
1 2 3
rm [-options(s)] -r: 하위 디렉토리를 포함한 모든 파일 삭제 -f: 강제로 파일이나 디렉토리 삭제
리눅스에는 휴지통이 없기 때문에 root 로는 작업하지 않음
리눅스와 권한
- 운영체제는 사용자/리소스 권한을 관리
- 리눅스는 사용자/그룹으로 권한을 관리
- root는 슈퍼 관리자
- 파일마다 소유자, 소유자 그룹, 모든 사용자 에 대해 읽고, 쓰고, 실행하는 권한을 관리
- 읽기(r) : 파일(읽고 카피), 폴더(ls 명령어 가능)
- 쓰기(w): 파일(수정), 폴더(파일 생성가능)
- 실행(x): 파일(실행), 폴더(cd 접근가능)
표준 입출력(Standard Stream)
- command로 실행되는 프로세스는 세 가지 스트림을 가지고 있음
- 표준 입력 스트림(Standard Input Stream):- stdin
- 표준 출력 스트림(Standard Output Stream): stdout
- 오류 출력 스트림(Standard Error Stream): stderr
- 일반적으로 표준 출력 및 오류 스트림은 plain text로 console에 출력하도록 되어 있음
리다이렉션(Redirection)
- 표준 스트림 흐름을 바꿔줄 수 있다.
- <, >를 사용
- 주로 명령어 표준 출력을 화면이 아닌 파일에 쓸 때 사용
- ls > file.txt
- file.txt에 ls로 출력되는 결과가 저장
- head < files.txt
- files.txt의 앞 10라인이 출력
- ls > file.txt
- 기존 파일에 추가는 » 또는 « 사용
- ls » files.txt
파이프(Pipe)
-
두 프로세스 사이에서 한 프로세스의 출력 스트림을 또다른 프로세스의 입력 스트림으로 사용할 때 사용
-
ls | grep files.txt
- ls 명령으로 해당 디렉토리/파일 중에 files.txt 파일이 있는지를 출력
- grep 명령어
1 2 3 4 5 6 7
grep [‑option] [pattern] [file or directory name] -c : 문자열이 포함된 라인 개수를 표시한다. -i : 문자열의 대소문자를 구분하지 않는다. -l : 문자열이 일치한 파일의 이름만 출력한다. -n : 일치한 문자열이 포함된 라인 번호를 출력한다. -r : 서브 디렉터리의 파일까지 모두 출력한다. -v : 입력한 패턴이 포함되지 않은 문자열을 출력한다.
-
프로세스 제어
- Forground Process: 쉘(shell)에서 해당 프로세스 실행을 명령한 후 해당 프로세스 수행 종료까지 사용자가 다른 입력을 하지 못하게 하는 프로세스
- Background Process: 사용자 입력과 상관없이 실행되는 프로세스
- 쉘에서 해당 프로세스 실행 시 맨 뒤에 &를 붙여줌
- find / -name ‘*.py’ > /home/ubuntu/list.txt &
- 쉘에서 해당 프로세스 실행 시 맨 뒤에 &를 붙여줌
-
제어 명령어
1 2 3
[Ctrl] + C : 진행중인 포그라운드 프로세스 작업 취소(해당 프로세스 완전 종료) jobs : 현재 동작중인 백그라운드 프로세스를 화면에 출력 fg %2 : 백그라운드에서 동작중인 2번 프로세스를 포그라운드 실행으로 변경
-
ps: 프로세스 상태확인
1 2 3 4 5 6 7 8 9 10 11
ps [-options(s)] -a: 시스템을 사용하는 모든 사용자의 프로세스 출력 (보통 aux 와 같이 u, x 옵션과 함께 사용) -u: 프로세스 소유자에 대한 상세 정보 출력 -l: 프로세스 관련 상세 정보 출력 -x: 터미널에 로그인한 후 실행한 프로세스가 아닌 프로세스들도 출력함. 주로 데몬 프로세스(daemon process)까지 확인하기 위해 사용. 본래 ps 명령은 현재 쉘(shell)에서 실행한 프로세스들만 보여주기 때문에 이 옵션을 사용하는 경우가 많음. -e: 해당 프로세스와 관련된 환경 변수 정보도 함께 출력 -f: 프로세스 간 관계 정보도 출력
- 주요 ps 출력 정보 항목
1 2 3 4 5 6 7 8 9 10
USER: 프로세스를 실행시킨 사용자 ID PID: 프로세스 ID %CPU: 마지막 1분 동안 프로세스가 사용한 CPU시간의 백분율 %MEM: 마지막 1분 동안 프로세스가 사용한 메모리 백분율 VSZ: 프로세스가 사용하는 가상 메모리 크기 RSS: 프로세스에서 사 용하는 실제 메모리 크기 STAT: 프로세스 상태 START: 프로세스가 시작된 시간 TIME: 현재까지 사용된 CPU 시간(분:초) COMMAND: 명령어
-
kill: 프로세스 중지
- kill -9 pid (pid의 프로세스를 -9(강제로) 종료)
-
하드링크와 소프트링크
-
cp명령: 파일 복사
- 1MB 사이즈를 가지고 있는 A파일을 B파일로 복사
- cp A B ‑> A와 B는 각각 물리적으로 10MB 파일로 저장
- 하위 폴더 포함 복사하기 : cp -rf * 폴더
- 1MB 사이즈를 가지고 있는 A파일을 B파일로 복사
-
하드링크 : ln A B
- A와 B는 동일한 10MB 파일을 가리킴
- 즉, 동일한 파일을 가진 이름을 하나 더 만든 것일 뿐 전체 파일 용량은 달라지지 않음
-
A파일을 삭제하더라도 B파일은 삭제되지 않음
-
소프트(심볼릭) 링크 : ln -s A B
-
Windows OS의 바로가기와 동일
-
ls -al 명령어로 소프트 링크 확인 가능
1
lrwxr-xr-x A -> B
-
rm A로 A를 삭제하면? B는 해당파일 접근 불가
-
리눅스(우분투) 패키지 시스템
- CentOS나 Fedora 과 같은 RedHat계열 배포판은 RPM 이라는 패키징 시스템을 사용
- ubuntu와 같이 데비안계열 배포판은 deb 라는 패키징 시스템을 사용
- 패키지와 패키지 정보를 저장하고 있는 패키지 저장소라는 개념을 가지고 있음
-
소프트웨어 패치, 추가등 정보를 관리
- 우분투 패키지 관리 명령어
- ubuntu 패키지 인덱스 정보 업데이트(배포판 버전에 따른 패키지 업데이트 버전 정보 등)
- sudo apt-get update
- 설치된 ubuntu 패키지 업그레이드 (잘못된 버전까지 업그레이드 할 수 있음(함부로 진행X))
- sudo apt-get upgrade
- 패키지 설치
- sudo apt-get install 패키지명
- 패키지 삭제
- 설정파일 제외 : sudo apt-get remove 패키지명
- 설정파일 포함 : sudo apt-get –purge remove 패키지명
- ubuntu 패키지 인덱스 정보 업데이트(배포판 버전에 따른 패키지 업데이트 버전 정보 등)
VIM 에디터
- VIM : Vi improved 에서 앞 글자를 빼내어 만든 이름
- Vi: 전통적이 유닉스 에디터(개발자: 빌 조이), Visual Editor의 줄임말
- Vim 은 Vi에 자동화, 시각화 메뉴등을 추가한 프로그램
- VIM 네가지 모드
- 일반(명령)모드: 처음 vim을 실행했을 때 또는 입력 모드/명령 모드에서 ESC입력 시 ‑ 찾기, 커서 이동등
- 입력(편집)모드: 일반 모드에서 : 입력 시 ‑ 저장, 파일읽기, vim설정등
- 명령(명령행)모드: 일반 모드에서 a 또는 i 또는 o 키 입력 시 ‑ 내용 입력
- visual: 일반 모드에서 v 입력 시 ‑ 블럭 복사/붙이기
- vim 설정
- 명령 모드에서 set all 입력시 vim에서 설정할 수 있는 모든 옵션이 출력
- vi .vimrc: 에디터에 필요한 vim 설정을 할 수 있음
VIM 사용법
- 입력(모드 진입 시 왼쪽 하단에 –INSERT– 라는 문구가 출력)
- i 포커스 잡힌 커서 위치에서 편집모드 시작
- a 포커스 잡힌 커서 위치 바로 다음에서 편집모드 시작
- 삭제(일반모드에서 실행)
- x 커서의 한문자를 삭제
- 저장
- w 현재 오픈된 파일 저장
- q 저장하지 않고 종료
- wq 현재 오픈된 파일 저장 후 종료
- q! 강제 종료(대소문자 구분)
- 편집
- x 커서의 한 문자를 삭제
- dd 커서의 현재 라인을 삭제
- shift + j 커서의 아랫라인과 현재 라인을 하나의 라인으로 합침
- 블록 지정 및 복사(visual 모드에서 활용)
- v 단어 단위로 블럭 지정
- Shift + v 라인 단위로 블럭 지정
- y 지정된 블럭을 복사
- p 복사된 블럭을 현재 커서에 붙이기
- u 직전 실행 작업 취소
- 이동
- :0 첫줄로 이동
- :$ 마지막 줄로 이동
- /문자 처음으로 매칭되는 문자열이동
- n 매칭되는 다음 문자열로 이동
쉘 스크립트
- 쉘을 사용해서 프로그래밍을 할 수 있음
- 서버 작업 자동화 및 운영(DevOps)를 위해 기본적으로 익혀둘 필요가 있음
- 쉘 명령어를 기본으로 하되 몇가지 문법이 추가된 형태
기본 문법
-
쉘 스크립트는 파일로 작성 후, 파일을 실행
-
파일의 가장 위의 첫 라인은 “#!/bin/bash” 로 시작
- 일반적으로 파일이름.sh 와 같은 형태로 파일 이름을 작성
- 쉘 스크립트 파일은 실행 권한이 필요
주석
- #기호로 시작하는 라인은 주석어리
- # This is comment
변수
- 선언(띄어쓰기 사용X)
- 변수명=데이터
- 사용
- $변수명
- 사전에 정의된 변수
1
2
3
4
5
6
7
8
9
$$ : 쉘의 프로세스 번호
$0 : 쉘스크립트 이름
$1 ~ $9 : 명령줄 인수
$* : 모든 명령줄 인수리스트
$# : 인수의 개수
$? : 최근 실행한 명령어의 종료 값
- 0 (성공), 1 ~ 125 (에러),
- 126 (파일이 실행가능하지 않음),
- 128 ~ 255 (시그널 발생)
리스트 변수(배열)
- 선언
- 변수명=(데이터1 데이터2 데이터3)
- 사용
- ${변수명[인덱스번호]}
연산자
- expr: 숫자 계산
- expr 를 사용하는 경우 역작은 따옴표( ` )를 사용
- 연산자 *와 괄호() 앞에는 역슬래시(\)와 같이 사용
- 연산자와 숫자, 변수, 기호 사이에는 space를 넣어야 함
- num=`expr \( 3 \* 5 \) / 4 + 7`
- echo $num
조건문
- 문법
1
2
3
4
5
6
7
8
9
if [조건]
then
명령문
else
명령문
fi
// TIP) 조건문 한줄에 작성하기
if [ 조건 ]; then 명령문; fi
- 문자비교
1
2
3
4
문자1 == 문자2 # 문자1 과 문자2가 일치
문자1 != 문자2 # 문자1 과 문자2가 일치하지 않음
-z 문자 # 문자가 null 이면 참
-n 문자 # 문자가 null 이 아니면 참
- 수치비교
1
2
3
4
5
6
값1 -eq 값2 # 값이 같음(equal)
값1 -ne 값2 # 값이 같지 않음(not equal)
값1 -lt 값2 # 값1이 값2보다 작음(less than)
값1 -le 값2 # 값1이 값2보다 작거나 같음(less or equal)
값1 -gt 값2 # 값1이 값2보다 큼(greater than)
값1 -ge 값2 # 값1이 값2보다 크거나 같음(greater or equal)
- 파일 검사
1
2
3
4
5
6
7
8
9
-e 파일명 # 파일이존재하면참
-d 파일명 # 파일이 디렉토리면 참
-h 파일명 # 심볼릭 링크파일
-f 파일명 # 파일이 일반파일이면 참
-r 파일명 # 파일이 읽기 가능이면 참
-s 파일명 # 파일 크기가 0이 아니면 참
-u 파일명 # 파일이 set-user-id가 설정되면 참
-w 파일명 # 파일이 쓰기 가능 상태이면 참
-x 파일명 # 파일이 실행 가능 상태이면 참
- 논리 연산
1
2
3
4
5
6
7
조건1 -a 조건2 # AND
조건1 -o 조건2 # OR
조건1 && 조건2 # 양쪽 다 성립
조건1 || 조건2 # 한쪽 또는 양쪽다 성립
!조건 # 조건이 성립하지 않음
true # 조건이 언제나 성립
false # 조건이 언제나 성립하지 않음
반복문
- 기본 for문법
1
2
3
4
for 변수 in 변수값1 변수값2 ...
do
명령문
done
- 기본 while문법
1
2
3
4
while [ 조건문 ]
do
명령문
done
압축 명령
- 리눅스에서는 여러 파일을 한 파일로 묶은 것을 아카이브(archive)라고 함
- 파일 확장자는 .tar
- 리눅스에서 파일을 압축은 두 단계로 진행
- 아카이브(archive)로 만듬
- gzip 프로그램을 사용해서 압축함 + 파일 확장자는 .tar.gz
-
압축 명령어는 tar를 사용하되, 옵션을 사용해서 gzip 기능을 사용함
- 압축 명령 tar
1
2
3
4
5
6
7
8
9
10
11
12
// 압축시 주로 사용하는 옵션
tar -cvzf [압축된 파일 이름] [압축할 파일이나 폴더명]
// 압축을 풀 때 주로 사용하는 옵션
tar -xvzf [압축 해제할 압축 아카이브 이름]
// 주요 옵션
x : 묶음을 해제
c : 파일을 묶음
v : 묶음/해제 과정을 화면에 표시
z : gunzip을 사용
f : 파일 이름을 지정
댓글남기기