본문 바로가기

3. Pwnable (포너블)/2) 개념 정리

[2023.03.18] '생활 코딩 - Linux' 강의 수강

'생활 코딩 - Linux' 강의를 섹션 0부터 섹션 3까지 수강하였다.


<섹션 0 . 상황별 준비 및 환경설정>

 

실습환경 구축 방법

1. CodeOnWeb 이용  - https://www.codeonweb.com

2. cloud9 이용 - 프로그래밍 동작 환경을 온라인에서 제공하는 사이트 - https://c9.io

 

<섹션 1 . 리눅스 기초>

 

디렉토리와 파일

 

리눅스 제어

1-명령어 통해 제어(CLI: Command Line Interface)

2-현재 머물고 있는 디렉토리를 대상으로 명령이 내려짐.(pwd 명령어 : 현재 위치하고 있는 디렉토리 확인)

 

명령어 정리

디렉토리 생성 : mkdir 디렉토리명 

빈 파일 생성 : touch 파일명 

현재 디렉토리 아래의 파일과 디렉토리 목록 출력 : ls

현재 위치한 디렉토리 아래 파일과 디렉토리 더 자세히 출력 : ls -l // ls 뒤에 붙는 것은 파라미터이다.

원하는 디렉토리로 이동 : cd 디렉토리명

 

현재 위치하고 있는 디렉토리의 부모 디렉토리로 이동하는 방법

1. 절대경로 이용 --> 만약 현재 위치가 /home/ubuntu/hello_linux 일 때,  cd /home/ubuntu 입력

2. 상대경로 이용 --> cd .. 입력 // .. 는 현재 머물고 있는 부모 디렉토리 의미

 

rm : 삭제 명령어

디렉토리 삭제 : rm –r 디렉토리명    //  rm 디렉토리명으로 작성 시 디렉토리 삭제 불가

파일 삭제 : rm 파일명

 

* 리눅스는 명령 성공 시 메시지를 안 띄우고 명령 실패 시에만 메시지를 띄운다.

 

 

명령어에 대한 자세한 설명 찾는 법

1. 인터넷에 찾아보기 

     1) create directory in linux 검색 (디렉토리 만드는 명령어를 검색한다고 가정)

     2) 필요한 정보 습득 // 예제와 문법을 통해 의미 파악

2. 메뉴얼 찾아보기(명령마다 내장됨)

  • 명령어 --help : 사용자가 보고 있는 화면에서 간단한 메뉴얼 출력  ex) ls --help 
  • man 명령어   : 전용 페이지로 이동하여 상세한 메뉴얼 출력 ex) man ls
    • man에서의 검색 :  /검색하고 싶은 명령어 입력
    • 메뉴얼에서 나가기 : q 입력

부모 디렉토리 생성 : mkdir -p

현재 디렉토리에 있는 모든 파일들(감춰진 파일들까지) 출력 : ls -a , ls --all

감춰진 파일 출력 + 자세히 : ls -al

파일 사이즈를 기준으로 정렬 후 출력 : ls -S , ls --sort

 

 

sudo(super user do) 

유닉스 계열의 운영체제들의 특징 : 다중 사용자 시스템

각각의 사용자마다 할 수 있는 일과 없는 일 구분 (권한 부여)

sudo : 임시로 사용자가 실행하는 명령어만 최고 권한으로 실행하도록 해주는 것

 

파일 만들고 편집하기

파일 : 정보를 저장하는 가장 기본적인 수단, 저장공간

디렉토리 :  파일을 잘 정리 정돈하기 위한 수납공간

파일에 정보를 저장하는 방법 => 편집기 이용

대표적 편집기 : nano, vi

nano 실행 방법 : nano 입력 후 enter 키

^ = ctrl

 

패키지 매니저 (= 앱 스토어와 비슷한 역할) 

패키지 : 흔히 알고 있는 프로그램, 애플리케이션, 앱이라고 부른 것들

기본적으로 내장되어 있는 패키지 : ls, mkdir 등등 

기본적으로 포함되어있지 않지만 설치해서 사용해야 하는 프로그램들을 써야 하는 경우에 직접 프로그램의 소스코드를 다운로드하여서 진행하는 것은 복잡하고 어렵다. 따라서 오늘날의 리눅스는 패키지 매니저를 기본적으로 제공하고 있다.

대표적인 패키지 매니저 : apt , yum

 

  apt 사용방법

(1) apt를 통해서 설치할 수 있는 소프트웨어의 목록을 최신상태로 갱신 : sudo apt-get update;

(2) 검색 : sudo apt-cache search 패키지명

(3) 설치 : sudo apt-get install 패키지명

(4) 업그레이드 : sudo apt-get upgrade 패키지명

(5) 삭제 : sudo apt-get remove 패키지명

 

명령어 기반 환경에서 파일을 다운로드하는 방법

(1)  wget 프로그램 이용  

방법 : wget 사진에_대한_주소

다운로드 파일 확인 : ls -l

다른 이름으로 저장 : wget -O 저장하고_싶은_파일의_이름 사진에_대한_주소

 

(2) git 이용 

 git

-버전 관리 시스템이라는 카테고리에 속하는 구체적인 제품

-프로그램을 만들 때의 변경 사항들 기록해서 과거의 상태 분석 또는 소스 코드 백업 등 작업에 있어서 중요한 것들을 담당하는 중추와 같은 역할을 하는 프로그램

github : git이라고 하는 도구를 통해서 만든 프로그램(소스코드)을 온라인상에 업로드시켜서 협업을 할 수 있도록 만들어주는 서비스

 

git을 통해 github(온라인 서비스)에 있는 소스코드를 다운로드하는 방법

1. git을 리눅스에 설치 (sudo apt-get install git)  *기본적으로 설치되어 있을 수 있음

2. 오픈소스 프로젝트 다운로드 (git clone 오픈소스_프로젝트의_소스코드에_대한_주소 디렉토리명) => 입력한 디렉토리에 주소가 가리키는 오픈소스 프로젝트가 다운로드된다.

 
 

<섹션 2. IO Redirection>

 

IO Redirection : IO는 Input Output , Redirection은 방향을 바꾼다는 의미

 

IO Redirection-output

ls -l의 결과를 모니터에 출력하지 않고 파일에 저장하려면  ls -l > 파일명을 입력해 준다.

ex) ls -l > result.txt 

: ls -l의 결과가 화면으로 출력되는 것이 기본이지만 출력되는 방향을 바꿔서 result.txt 파일에 저장. 이를 Redirection이라고 한다.

프로세스는 두 가지의 출력 형식을 가진다 :  standard output , standard error 

 

IO Redirection-input

cat 프로그램 : 두 번째 인자로 파일명이 들어오면 그 파일명을 화면에 출력해 준다.

cat hello.txt : command-line arguments를 통해 전달한 입력값 (cat 프로그램의 인자로 전달)

cat < hello.txt : 인자가 아닌 standard input으로 cat에게 input 시킴  // hello.txt라는 파일에 저장되어 있는 내용을 입력으로 받는다

 

IO Redirection-append

ls -al > result.txt : ls -al의 결과가 실행될 때마다 result.txt의 내용을 덮어쓰기 한다.

ls -al >> result.txt :ls -al의 결과가 실행될 때마다 result.txt 파일의 뒤에 추가된다.

>> : redirection을 하는데, redirection 한 결과를 추가한다는 뜻이다.

<< : 여러 개의 입력을 하나로 합친다는 뜻이다.

 

<섹션 3. 쉘과 쉘스크립트>

 

Shell (사용자와 상호작용하는 소프트웨어)

 

hardware -> kernal -> shell -> applications 
 

사용자가 shell에게 명령어 입력 ->  shell은 명령을 해석, 커널에게 전달 -> 커널은 하드웨어를 제어하여 어떠한 처리를 수행할 수 있도록 명령함 -> 하드웨어 동작, 처리 결과를 커널에게 알려줌 -> 커널이 shell에게 알려줌 -> 사용자는 실행 결과 확인 가능

즉, 사람들이 이해하기 쉬운 형태에 명령어를 Shell에 해당되는 프로그램들이 해석해서 Kernal에게 전달한다.

 

bash VS zsh (Shell 카테고리에 속하는 구체적인 제품)

echo : 뒤에 들어온 문자를 화면에 출력

echo $0 입력 후 bash라고 출력되면 bash가 동작하고 있는 상태 ( zsh라고 출력되면 zsh 동작)

  bash(기본 설정값) zsh
    bash보다 편리하다라고 평가받음.
cd
+Tab
Tab키 두 번 쳐야 나옴.
숨겨진 디렉토리 표시해줌
Tab키 한 번만 쳐도 나옴.
숨겨진 디렉토리 표시 안 해줌
절대경로
->우분투
 
cd /home/ubuntu cd /h/u + Tab
-> cd /home/ubuntu
*편의성 높음
디렉토리 변경 cd 원래_디렉토리명 변경_디렉토리명
->작동 안 함
cd 원래_디렉토리명 변경_디렉토리명
 

 

Shell script

 

shell script : shell 명령어들이 실행되어야 할 순서를 각본을 짜서 저장해 놓은 파일

-여러 개의 shell 명령어들을 하나의 파일에 적어 한번에 실행하도록 한다.

 

shell script를 통해 여러 가지 자동화된 작업을 처리할 수 있다.