시스템 프로그래밍 2. Linux
건국대학교 시스템 프로그래밍 진현욱 교수님의 수업을 정리한 내용입니다.
리눅스 환경 설치
프로그램 기능에서
- Linux용 Windows 하위 시스템, 가상 머신 플랫폼 활성화
- Docker.com에서 docker 설치
- cmd를 열고, Dockerfile가 존재하는 디렉토리를 열어
docker build . --tag sys2024:2024.2
명령어 실행
Docker를 통해 Linux 실행하기
- Docker Desktop 실행
- 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 사용법#파일 권한] 변경
- ./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 실행 = 백단에서 실행
백그라운드로 실행하면, 프로그램이 실행되는 도중에도 명령어를 입력할 수 있다. 뒤에서 프로그램이 몰래 돌아가고 있다.
일반적으로 프로그램을 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! : 강제 저장 후 종료
- 저장 및 종료