본문 바로가기

3. Pwnable (포너블)

[2023.09.23] 포너블 1주차 팀활동

<리눅스 명령어 정리>

 

ls: 현재 디렉터리의 파일 목록을 출력하는 명령어

ls-l: 현재 디렉터리의 파일을 자세히 보여줌

ls -a: 현재 디렉터리에 있는 파일을 보여주며 숨긴 파일까지 보여줌

ls-al: -a-ㅣ을 합친 함수

pwd: 현재 위치하고 있는 디렉터리를 알려주는 명령어

mkdir: 새로 생성할 디렉터리명

touch: 비어있는 파일을 생성

cd: 이동할 디렉터리의 경로명 (change directory)

. /: 현재 디렉터리라는 의미

 

상대경로와 절대경로

상대경로는 현재 디렉터리의 위치를 기준으로 다른 디렉터리의 위치를 표현하는 것으로 ‘..’은 부모 디렉터리를 의미

'cd ..'은 현재 디렉터리의 부모 디렉터리로 이동하는 명령

(현재 디렉터리는 '.')

 

절대경로는 최상위 디렉터리를 기준으로 경로를 표현하는 것을 의미

최상위 디렉터리는 루트(root) 디렉터리-> '/'

'cd/'는 최상위 디렉터리로 이동한다는 뜻

'cd /home/egoing'은 현재 디렉터리가 무엇이건 언제나 '/home/egoing'을 의미하는데 이런 식의 경로 표현을 절대경로라고 함

rm(remove)

rm 파일명: 파일제거

rm -r 디렉토리명: 재귀적 디렉터리 제거

--help

명령어 뒤에 --help를 붙이면 명령의 사용설명서가 출력됨

 ex: ls –help

 

Cp 원본파일 복사할 디렉토리: 원본파일을 해당 디렉토리로 복사

mv 파일명 이동할 디렉토리: 원본파일을 해당 디렉토리로 이동

  

sudo

sudo = super user do의 약자 슈퍼 유저 권한!

하나의 운영체제를 여러 사람이 같이 씀 -> 다중 사용자 시스템 (유닉스 특징) 그래서 강력한 통치자가 필요 -> 슈퍼유저 루트유저라는 권한

apt -get install git 일반 권한으로는 설치가 거부됨 그러나 sudo apt~... 치면 슈퍼 유저 권한으로 설치가 가능함

 

nano

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

정보 저장소: 운영체제에서 파일의 의미

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

nano: 파일 편집기

나노를 입력하면 밑에 나오는 특수기호(^) ctrl

 

package manager: 앱스토어와 거의 비슷한 역할 

apt  yum이 있음

1.     제일 먼저 기능을 쓰고 싶다면 최신 상태로 업데이트 해야 함

 sudo apt-get update;

2.     sudo apt-search htop

3.     sudo apt-cache htop

4.     sudo cache htop

5.     sudo search htop 입력 → htop라고 하는 모든 프로그램을 찾아줌

6.     sudo apt-get install htop 입력 → 설치

7.     htop을 실행시키면 확인 가능 -- sudo 붙이면 더 정확

8.     sudo apt-get upgrade htop 입력 → 업그레이드 

9.     sudo apt-get remove htop 을 입력하면 이 프로그램을 삭제할 수 있음

 

wget

wget -O 파일이름.jpeg 사진의 링크 주소 (url)

이렇게 입력하면 파일이름jpeg라는 파일로 저장이 됨

 

git

버전 관리 시스템이라고 하는 카테고리에 속하는 제품 중 하나

과거의 상태를 현재의 상태로 돌리거나 소스 코드를 백업하거나 협업을 통해 프로그램을 만들거나 할 때 이러한 중요한 작업의 중추 역할임

 


 

<IO Redirection>

IO Redirectiom=(input, Output, 방향을 바꾼다.) 출력이 화면으로 되는 게 기본인데 다른 방향으로 돌려서 출력시킨 것

 

Output

· IO Redirection (입력(input), 출력(output), 방향을 바꾼다(=파일을 저장한다))

· 보통은 화면으로 출력되는 것이 기본. 그 출력되는 방향을 다른 곳으로 돌려(Redirection)하여 파일에 저장시킬 수 있다는 뜻이다.

· 유닉스의 계열의 시스템은 어떤 프로그램이 실행(프로세스)될 때 그 프로세서가 출력하는 결과는 크게 두 가지로 구분된다.

1.     표준 출력(Standard Output)  

1.     표준 에러 출력(Standard Error)

·        ls -l> result.txt: ls -l 결과값을 화면에 출력되는 대신 result.txt로 출력되어 파일로 저장

·        >: 보통 숫자 1이 생략되어 있는데 이를 표준출력이라고 함

·        2>: 오류가 난 결과를 파일에 저장하고 싶을 때 사용

 

input

  • <: standard input
  • 프로그램: 컴퓨터의 하드디스크나 SSD에 저장되어 있는 코드
  • 프로세스: 그 프로그램이 실행되면, 실행되고 있는 상태
  • cat result.txt: result.txt 읽기 (파일에 저장 되어있는 내용을 입력으로 받아 화면에 결과가 출력된다.
  •  cat은 키보드의 입력을 받아 화면에 출력
  • head: 앞쪽에 있는 일부의 텍스트만을 화면에 출력하는 기능
  • head -n1 <one.txt> two.txt이 코드에는 표준 입력에 대한 리다이렉션과 표준 입력에 대한 리다이렉션이 모두 포함되어 있다. 먼저 ‘one.txt’에 있는 내용이 리다이렉션 돼서 헤드(head) 프로세스에 입력되고 그 처리 결과를 ‘two.txt’에다가 출력을 한다.

 

 


 

<쉘과 쉘 스크립트>

shell vs Kernel

 

kernel: 물리적인 기계를 직접적으로 제어하는 것

shell: 사용자가 입력한 명령을 해석하는 프로그램

 

사용자로 리눅스에서 입력한 명령이 shell을 대상으로 해서 명령을 입력 → shell은 그 명령을 해석해서 kernel이 이해할 수 있는 방식으로 kernel에게 전달 → kernel은 하드웨어를 제어해서 어떠한 처리를 수행할 수 있도록 명령 

하드웨어가 동작하여 처리결과를 kernel에게 알려주면 kernel이 다시 shell에게 알려주는 걸 통해서 실행된 결과를 확인할 수 있다.

 

커널과 쉘을 분리시킨 이유?

: 쉘은 사용자가 입력하는 명령어를 해석하는 프로그램이고, 편리하게 커널을 제어하기 위한 것

 

bash vs zsh (zshell)

부모가 같아서 유사한 특성을 가지고 있음

zsh bash 가 갖고 있지 않은 추가적인 기능을 갖고 있기에 좀 더 편리

 

echo $0: bash라는게 출력되는데 이건 shell이라는 카테고리에 속하는 구체적인 제품 중 하나라고 하는 프로그램을 쓰고 있음을 의미

bash 탭키 두 번: 숨겨진 디렉터리까지 표시를 해줌

zsh 탭키 한번: 디렉터리 명령이 나오는데 숨긴 디렉터리는 X

pwd를 누르면 현재 경로를 보여 주는데 zsh에서는 경로의 앞 글자만 쓰고 tab를 누르면 자동완성 시켜준다.

 

shell script

여러 개의 명령을 순차적으로 실행하는 걸 통해서 업무가 이루어지는 경우가 많다. →  그 명령의 스크립트를 적어 놓고 나중에 재사용할 수 있다면 효율적!  → 셸 스크립트

셸 스크립트: 셸에서 실행되는 스크립트. 어떤 셸 명령어들이 실행되어야 될 순서를, 실행되어야 될 방법을 각본을 짜서 저장해 놓은 파일


nano backup을 누른 뒤 편집기 실행


chmod +x backup 입력 ls -l 입력 -> 백업이라는 파일에다가 x를 추가 한 것. 실행 가능한 모드를 추가해서 change 시킨 것이다.

  • #! /bin/bash: 프로그램을 실행시켰을 때 운영 체제는 이 첫 번째 줄에 있는 #! 기호를 보고 그 뒤에 적혀 있는 /bin/bash를 보고 bin 밑에 있는 bash 라고 하는 프로그램을 통해서 해석되어야 한다.
  • if [-d bak]: 현재 디렉토리가 bak가 존재하는가?
  • if! [-d bak]; then: 현재 디렉토리에 bak가 존재하지 않는다면
  • fi: 조건문 끝 (종료의 의미)
  • cp *.log bak: .log 모든 파일을 bak 디렉터리 안으로 복사
  • 그 후 ctrl + x를 누르고 엔터를 누르면 화면 밖으로 나와짐

쉽게 말해서 만약 bak라는 파일이 없다면 ~ (느낌표(!) 이거는 부정의 의미) 디렉터리를 만들고 ~ 현재 디렉터리는 모든 로그 파일을 bak라는 디렉터리 밑으로 넣어라 ~ 라는 뜻.

 

예제) 이 디렉터리 안에 확장자가 log로 끝나는 파일들을 bak라는 디렉터리에다가 카피해서 백업하라!

 


 

nano backup 입력-> #!/bin/bash입력.

(bash라고 하는 프로그램을 통해서 해석되어야 함)

shell이 무엇인지 확인 echo ->그럼 bash 가 출력됨

bash 일종의 프로그램임 셸이라는 카테고리에 속하는 프로그램을 깔아서 이용하여 커널에게 명령을 내리는 것

그렇다면 이건 어디 있나?


 ls /bin을 입력 -> 여러가지 정보가 나옴