시스템 소프트웨어


리눅스와 파일

  • 모든 것은 파일이라는 철학을 따름
    • 모든 인터렉션 파일을 읽고 쓰는 것처럼 이루어져 있음
    • 마우스, 키보드와 같은 모든 디바이스 관련 기술도 파일과 같이 다루어짐
  • 전역 네임 스페이스 사용
    • /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 접근가능)

777


표준 입출력(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 » 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 * 폴더
  • 하드링크 : 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는 해당파일 접근 불가

link


리눅스(우분투) 패키지 시스템

  • 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 패키지명


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
  • 리눅스에서 파일을 압축은 두 단계로 진행
    1. 아카이브(archive)로 만듬
    2. 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 : 파일 이름을 지정

댓글남기기