본문 바로가기

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

[2024.03.23] 2주차 활동 - 리눅스 기초

인프런 '생활코딩-리눅스' 강의를 듣고 함께 스터디했다.

 

섹션 2. IO Redirection

섹션 3. 쉘과 쉘 스크립트

섹션 4. 디렉토리 구조와 파일찾는 법

섹션 5. 프로세스와 실행

https://inf.run/9Yxy

 

[지금 무료] 생활코딩 - Linux 강의 - 인프런

본 수업에서는 리눅스의 사용법을 다룹니다. 특히 초심자들이 어려워하는 부분이 명령어를 이용해서 컴퓨터를 제어하는 법입니다. 여기서는 초심자가 명령어를 사용하는데 필요한 가장 보편적

www.inflearn.com


섹션 2. IO Redirection

output

  • IO Redirection : 화면에 나온 출력 값을 다른 파일과 같은 곳으로 돌려 저장하는 것

 

  • > 리다이렉션 기호 : 예시로 ls -l > result.txt를 해주면, ls -l의 결과 값이 화면에 출력되지 않고 result.txt에 저장된다.

Unix Process

  • 유닉스 계열의 프로그램에서 프로세스가 출력하는 출력 값은 Standard Output과 Standard Error 두 가지로 나뉜다.
  • Standard Output의 결과를 리다이렉션 해주고 싶으면 >를 이용해주면 된다. 하지만 Standard Error에서 >를 쓰면 오류가 발생하게 된다.
  • 그 이유는 >은 1>을 의미하는 것으로 1이 생략된 상태를 뜻하기 때문이다. 이때 1은 Standard Output을 의미한다. 따라서 Standard Error를 리다이렉션 해주고 싶으면, Standard Error를 의미하는 2를 > 앞에 붙여 2>의 형태로 리다이렉션 시켜주면 된다.

input

  • cat : cat 뒤에 있는 파일을 출력해주는 명령어로, 여러 개의 정보를 결합해주는 역할도 갖고 있다.
  • cat 뒤에 아무런 파일도 적지 않으면 cat은 대기상태로 들어가게 되고 사용자가 입력하는 값을 똑같이 화면에 출력해준다.
  • cat < x.txt 와 cat x.txt 의 차이 : 왼쪽은 x.txt 안에 있는 내용을 입력값으로 받는 Standard Input이다. 오른쪽은 cat이라는 프로그램의 인자로 x.txt를 받은 것이다.
  • head : 파일의 앞부분만 출력해준다.
  • head -n1 : 파일의 한 줄만 출력해준다.

append

  • 원래 있던 파일에 내용을 이어서 적고 싶다면 >> 를 이용해 리다이렉션 시켜주면 된다.

섹션 3. 쉘과 쉘 스크립트

Shell1 - intro

shell과 kernel의 차이 

shell : 사용자의 명령을 받아 kernel이 이해할 수 있는 형태로 해석해 kernel에게 전달한다.

kernel : shell이 사용자의 명령을 해석한 데이터를 주면 이를 하드웨어가 알 수 있는 형태로 전달한다.


Shell2 - bash vs zsh

  • echo : 명령어 뒤에 들어온 문자를 화면에 출력해주는 역할을 한다.
  • echo $0 : 현재 쉘이 bash인지, zsh인지 알려준다.
비교 bash zsh
탑재 기본 탑재 따로 설치
숨긴 디렉토리 확인 여부 O X
다른 디렉토리로 가고 싶을 때 절대 경로를 통해 이동 경로로 쓰일 디렉토리들의 앞 알파벳만 따와 경로를 작성한 후, tab버튼을 눌러주면 경로가 자동 완성됨.
현재 a 디렉토리에 있지만, 전에 있던 b 디렉토리로 가고 싶을 때 절대 경로를 통해 이동 cd a b

Shell3, 4 - Shell Script

Shell script를 이용하면 여러 자동화된 처리를 할 수 있다.

Q. log 파일을 한 파일에 정리하는 것을 자동화 하려면?

A. nano backup //나노 편집기를 열어서 백업이라는 스크립트를 만들 것이다.

나노를 통해 만든 스크립트
#! /bin/bash //아래에 적히는 코드들은 /bin/bash를 통해 해석되어야 한다.
if ! [ d bak ] then; //현재 디렉토리 안에 bak이라는 디렉토리가 없다면
          mkdir bak //bak 디렉토리를 만들어라
fi //if를 거꾸로 쓰며, if문이 끝났음을 의미  
cp *.log bak //모든 이름의 로그 파일을 bak에 저장해라

섹션 4. 디렉토리 구조와 파일 찾는 법

디렉토리 구조

https://www.thegeekstuff.com/2010/09/linux-file-system-structure/

 

Linux Directory Structure (File System Structure) Explained with Examples

Linux Directory Structure (File System Structure) Explained with Examples by Ramesh Natarajan on September 8, 2010 Have you wondered why certain programs are located under /bin, or /sbin, or /usr/bin, or /usr/sbin? For example, less command is located unde

www.thegeekstuff.com

위의 링크를 통해 디렉토리 구조와 각 디렉토리들이 무엇을 의미하는지 알 수 있다.


파일 찾는 법 - locate와 find

파일은 데이터를 보관하는 것과 명령어를 보관하는 (실행)파일, 두 가지로 나뉜다.

locate :

어떤 파일의 위치를 찾는 명령어로, mlocate라는 자신이 사용하는 데이터베이스가 있어, 그곳에서 파일을 찾아준다.

파일을 찾는 속도가 빠르며, mlocate 데이터베이스에서 주기적으로 파일을 저장하기 때문에, 저장된 형태의 파일을 출력하는 특징을 갖고 있다.

find : 

어떤 파일의 위치를 찾는 명령어로, 디렉토리에서 파일을 찾아낸다.

locate 비해 속도가 느리지만, 파일의 현재 상태를 갖고 올 수 있다는 특징이 있다.

find 명령어 예문
find / -name *.log 상위 디렉토리부터 log라는 확장자의 파일을 찾아라
find . -name *.log 하위 디렉토리부터 log라는 확장자의 파일을 찾아라
find ~ -name *.log 홈 디렉토리부터 log라는 확장자의 파일을 찾아라
find -type f -exec rm -f {} 검색한 파일을 삭제해라

파일 찾는 법 - whereis와 $PATH

  • whereis : 실행파일, 소스, 메뉴얼 파일을 $PATH와 $MANPATH에서 찾아준다.
  • $PATH : PATH에 담겨진 디렉토리를 검색해 명령어가 담긴 실행 파일이 존재하는지 찾고 있다면, 다른 디렉토리에 있어도 실행하고자 하는 명령어를 실행할 수 있게 도와준다.
  • $PATH는 사용자가 만든 변수가 아닌 환경 변수이다.
  • $PATH는 수정가능 하다.

섹션 5. 프로세스와 실행

컴퓨터와 구조

  • SSD, HDD = Storage, 저장공간 : 가격이 낮고, 용량이 크며, 속도가 느리다.
  • RAM = Memory : 가격이 높고, 용량이 작다.
  • CPU = Processor : 속도가 빠르다.

프로세스와 프로세서는 다르다.

  • Storage 안에 존재하는 프로그램이 실행되어 Memory에 올라가게 되면 CPU가 이를 읽으며 동작한다. 이때 CPU에 의해 처리되고 있는, 즉 프로그램이 실행될 때, 이를 프로세스라고 한다.
  • 프로세스를 처리하는 것을 프로세서라고 한다.

프로세스와 모니터링

  • ps, sudo top, sudo htop : 프로세스 리스트를 보여준다.
  • ps aux : 백그라운드에서 현재 실행되고 있는 프로세스를 다 보여준다.

Q. apache 라는 이름을 가진 프로세스를 찾고 싶다.

A. ps aux | grep apache //ps aux의 결과 중 apache라는 이름을 가진 것만 출력해라.


백그라운드 실행

  • jobs : 작업이 중지된 상태, 백그라운드로 진행 중인 작업 상태, 변경되었지만 보고되지 않은 상태 등을 표시한다.
  • nano를 실행하고 종료하면, nano는 백그라운드로 들어간다. 이후 vim을 열어 종료하면 vim도 백그라운드에 들어가게 된다. 이 상황에서 jobs를 입력하면 아래의 결과가 나오게 된다.

[1] - Stopped nano
[2] + Stopped vim

  • 이 상황에서 fg를 치게 되면 +기호가 있는 vim이 먼저 포그라운드에 올라오게 된다. -는 두 번째로 포그라운드에 올라갈 수 있음을 의미한다. 

Q. 위의 결과에서 [2] 말고 바로 [1]을 포그라운드에 올리려면?

A. fg %1 를 입력해주면 된다. fg %(실행시키고 싶은 프로그램의 jobs 번호)를 입력해주면 되는 것이다.

 

Q. 실행이 긴 명령어를 입력했는데, 실행 시간이 너무 길어 백그라운드에 보내놓고 싶다면?

A. 실행한 명령어 뒤에 를 입력해 주면 된다. 그러면 실행 중이던 명령어가 백그라운드에 들어가 실행되게 된다.

  • 백그라운드에서 실행되고 있는 명령은 jobs를 쳤을 때 Running의 상태를 띠게 된다.
  • 백그라운드로 옮겨진 명령어가 실행을 마치게 되면 사용자의 화면에 Exit1을 출력해 실행이 끝났음을 알린다.

Daemon

  • 데몬은 항상 실행되는 특징을 갖고 있다.
  • 소위 서버라고 불리는 프로그램들이 데몬에 해당한다.
  • 데몬 프로그램들은 /etc/init.d/ 디렉토리에 위치하게 된다.
  • 데몬을 끄거나 키고 싶을 때는 service를 이용하면 된다.

sudo service 데몬 프로그램 stop

sudo service 데몬 프로그램 start


Cron

  • 정기적으로 명령을 실행시켜주는 도구(소프트웨어)이다.
  • crontab -e : 정기적으로 하고자 하는 일을 정의할 수 있게 도와준다.
  • 정의할 때 m h dom mon dow command의 형식으로 한다.
  • m은 '몇 분마다 실행할 것이냐', h는 '몇 시간마다 실행할 것이냐', dom은 며칠, mon은 몇 달, dow는 요일에 대해 작성하고, 정기적으로 실행할 명령을 command 영역에 적으면 된다.
  • 만든 파일이 정기적으로 잘 실행되고 있나 확인하고 싶다면, tail을 이용하면 된다.
  • tail 파일이름 : 파일에 제일 뒤쪽에 있는 텍스트를 출력해준다.
  • tail -f 파일이름 : 파일을 tail이 감시하고 있다가 파일 뒤에 새로운 텍스트가 추가되면 그것을 화면에 출력해준다.
  • cron은 메일 서버(시스템)과 같은 곳에서 쓰이고 있다.

쉘을 시작할 때 실행

  • 만약 쉘이 bash라면...
  • bashrc 라는 파일은 bash를 실행시켰을 때 자동으로 실행되는 파일이다.
  • 쉘을 시작했을 때 같이 시작했으면 좋겠는 명령어가 있다면 bashrc 파일에 넣으면 된다.

참고. 

alias : 별명을 설정해주는 명령어

alias l = ‘ls -al’ 를 입력하면, l을 입력했을 때 ls -al이 실행된다.

alias .. = ‘cd..’ 를 입력하면, ..을 입력했을 때 cd..이 실행다.