포스트

시스템 프로그래밍 2. Linux

시스템 프로그래밍 2. Linux

건국대학교 시스템 프로그래밍 진현욱 교수님의 수업을 정리한 내용입니다.

리눅스 환경 설치

프로그램 기능에서

  1. Linux용 Windows 하위 시스템, 가상 머신 플랫폼 활성화
  2. Docker.com에서 docker 설치
  3. cmd를 열고, Dockerfile가 존재하는 디렉토리를 열어 docker build . --tag sys2024:2024.2 명령어 실행

Docker를 통해 Linux 실행하기

  1. Docker Desktop 실행
  2. cmd에서 docker 실행
    • 실행할 때, 공유 폴더를 지정하면서 실행하는게 좋다. (컨테이너가 사라지면 파일이 사라지는걸 막기 위함)
    • docker run --rm -it -v [마운트 할 디렉토리 경로]:[마운트 될 디렉토리 경로] sys2024:2024.2 /bin/bash
1
docker run --rm -it -v C:\Users\username\DockerShared:/home/ubuntu sys2024:2024.2 /bin/bash

쉘, 터미널 설명

# : 루트 권한을 가졌을 때 $$ : 사용자 권한만 가졌을 때

리눅스 명령어 모음

  • touch [name] : name 파일 생성
  • ls : 현재 위치의 파일들 확인
    • -a : 숨김 파일까지 모두 출력
    • -s : 크기와 함께 출력
    • -l : 파일의 모든 정보 출력
    • -al : -a + -l
    • /usr : /usr 디렉토리 내용 출력
  • ps : 현재 실행중인 프로세스 목록 확인
  • cd [path] : 디렉토리 이동
  • pwd : 현재 디렉토리의 절대 경로를 출력
  • mkdir [option] [path] : 디렉토리 생성
    • mkdir test : test 디렉토리 생성
    • mkdir 755 test : 755 권한으로 디렉토리 생성
  • 파일 관련 명령어
    • mv ./file1.txt ./hello.txt : file1.txt 파일을 hello.txt 이름으로 변경
    • cat ./file1.txt : 텍스트 파일을 읽어서 출력
    • tail ./file.txt : 텍스트 파일 마지막 부분을 읽어서 출력
    • rm ./file.txt : 파일 또는 디렉토리 제거
      • rm -r ./dir : dir 디렉토리와 그 안에 있는 데이터 삭제
    • cp ./file1.txt ./file2.txt : file1.txt 파일을 file2.txt 이름으로 복사
      • cp -r ./dir ./copy-dir : dir 디렉토리와 그 안에 있는 데이터를 copy-dir 이름으로 복사
    • chmod 644 ./test.c : 소유자는 읽기 쓰기, 그룹과 제 3자는 읽기만 가능하도록 파일 권한^[Linux 사용법#파일 권한] 변경
      • chmod ug+r ./test.c : 소유자와 그룹에 읽기 권한 추가
      • chmod o-r ./test.c : 제 3자에 읽기 권한 제거
      • 권한 순서는 user group observer.
      • Pasted image 20240917174359.png
      • 첫번째 rwx : 소유자, 두번째 rwx : 그룹, 세번째 rwx : 제 3자
    • ./file : file이라는 실행 파일을 실행함.
  • man [command name] : 명령어 매뉴얼 확인 (help와 같음)
    • man ls
    • man pwd
    • man cd
    • ...
  • exit : 종료
  • vim : Linux에서 코딩할 수 있는 Vim Editor^[Linux 사용법#Vim Editor] 생성
    • vim helloworld.c : helloworld.c 파일을 vim을 통해 실행
  • cat {file_path} : file 내용을 txt 파일로 읽어서 보여준다.
  • more {file_path} : cat과 같이 파일 내용을 보는데, 한페이지씩 볼 수 있게 해준다.
  • sudo : 현재 User 권한을 갖고 있을 때 잠깐 Root 권한을 갖고 명령어를 실행하도록 한다.
    • 실행하면 Admin의 비밀번호를 입력해야 하고,
    • 사용시 /var/log/auth.log에 기록이 남는다.
  • grep {pattern} {file_path} : 파일 내의 내용 중 pattern과 일치하는 내용을 보여준다.

[!example] grep ‘authentication failure’ \var\log\auth.log{title} 권한이 없으면서 시도한 흔적을 이런식으로 확인 가능.

  • sort {file_path} : txt file의 내용을 사전순으로 정렬한다.

Pipeline

  • cmd1 | cmd2

cmd1의 output이 화면에 보이지 않고, 전부 cmd의 input으로 들어간다.

[!example] 공격 당한 로그 체크{title} cat \var\log\auth.log \var\log\syslog | more 두 파일의 내용의 output을 more로 넘겨서 more는 페이지 단위로 보여준다.

cat \var\log\auth.log \var\log\syslog | grep 'user jin' 두 파일의 내용의 output을 grep로 넘겨서 두 파일의 내용중 user jin 패턴과 일치하는 부분만 보여준다.

cat \var\log\auth.log \var\log\syslog | grep 'user jin' | sort 파이프는 연결해서 사용 가능. Sort까지 해서 본다.

Redirection

  • cmd > file_path

cmd의 결과물이 화면에 보이지 않고, 전부 file에 저장된다.

[!example] 공격 당한 로그 체크{title} cat \var\log\auth.log \var\log\syslog | grep 'user jin' | sort > jin 결과를 jin이라는 파일에 저장한다.

프로그램 실행 타입

Foreground 실행 = 우리 눈에 직접 보이는 프로세스.

포그라운드로 실행하면, 프로그램이 실행되는 도중에 명령어를 입력할 수 없다.

Background 실행 = 백단에서 실행

백그라운드로 실행하면, 프로그램이 실행되는 도중에도 명령어를 입력할 수 있다. 뒤에서 프로그램이 몰래 돌아가고 있다.

Pasted image 20240910170715.png

일반적으로 프로그램을 cmd로 그냥 실행하면 Forground로실행됨. Ctrl+Z를 누르면 프로세스가 정지되고, fg job-id, bg job-id 명령어로 다시 실행할 수 있음. 프로그램을 Background로 실행하려면 뒤에 &를 붙여주면 됨.

파일 권한

파일에 대한 제어 권한, Read, Write, Execute 권한이 존재한다.

8진수를 사용하여 표현. Read : 4 Write : 2 Execute : 1

읽고, 실행이 가능 : -rx (5) 쓰고, 실행이 가능 : -wx (3) 읽고 쓰고 실행이 가능 : -rwx (7)

Vim Editor

명령 모드, 편집 모드, 콜론 모드 세가지가 존재한다.

  • i 입력하면 insert (편집 모드)로 전환
  • esc 누르면 명령 모드로 전환
  • 명령 모드에서 : 키를 입력하여 콜론 모드로 전환
1
2
3
     -> Esc    -> i, a
콜론모드  명령모드  편집모드
     <- :      <- Esc

명령어

  • 입력 모드 전환 명령어
    • i : 커서의 앞에 삽입
    • l : 해당 라인의 첫 칸에 삽입
    • a : 커서의 오른쪽에 삽입
    • A : 그 라인의 마지막 문자 뒤에 새로운 내용 추가
    • o : 커서가 있는 행 아래에 새로운 내용 첨가
    • O : 커서가 있는 행 위에 새로운 내용을 첨가
  • 입력 모드 내 명령어
    • 복사 및 삭제 명령어
      • yy : 커서가 있는 한 줄 복사
      • dd : 커서가 있는 한 줄 잘라내기
      • p : 커서가 있는 행 아래 한 줄 붙여 넣기
      • 5dd : 5라인 잘라내기
      • dw : 한 단어 삭제
      • 3dw : 3 단어 삭제
    • 찾아 바꾸기 : :%s/찾을 단어/바꿀 단어
    • 이동 명령어
      • h, j, k, l : 커서를 한칸 왼쪽/아래/위/오른쪽으로 이동
      • [, ] : 다음 블록으로 이동, 이전 블록으로 이동
      • 0 : 행의 시작 부분으로 이동
      • $$ : 행의 끝 부분으로 이동
      • :(n) : n번째 라인으로 이동
  • 콜론 모드 명령어
    • 저장 및 종료
      • :w : 저장
      • :q : 종료
      • :q! : 저장 안하고 종료
      • :wq : 저장 후 종료
      • :wq! : 강제 저장 후 종료