STUDY/Pwnable

주로 사용하는 리눅스 명령어 모음

da1seun9 2019. 12. 24. 14:33

파일의 종류

  • 파일 : 관련있는 정보들의 집합

  • 리눅스는 파일을 효과적으로 관리하기 위해 디렉터리를 사용

  • 파일시스템 : 디렉터리와 파일로 구성된 전체집합

  • 리눅스에서 파일은 사용 목적에 따라 일반파일.디렉티리, 심벌릭링크, 장치파일로 구분

일반파일

  • 데이터를 저장하는데 주로 사용

  • 각종 텍스트 파일, 실행파일, 이미지 파일 등 리눅스에서 사용하는 대부분의 파일은 일반파일에 해당

  • 실행파일이나 이미지 파일의 경우 바이너리 형태로 데이터가 저장되어 바이너리 파일이라고 함

디렉터리

  • 리눅스에서는 디렉터리도 파일로 취급

  • 디렉터리 파일에는 해당 디렉터리에 저장된 파일이나 하위 디렉터리에 대한 정보가 저장

심벌릭링크

  • 원본파일을 대신하여 다른 이름으로 파일명을 지정한 것 (윈도우의 바로가기와 비슷함)

장치파일

  • 리눅스에서는 하드디스크나 키보드 같은 각종장치도 파일로 취급

  • 리눅스 시스템에 부착된 장치를 관리하기 위한 특수 파일

file의 종류를 확인하는 file 명령어

~$ **file** .bash_profile

 

경로 표시 방법

  1. 절대경로 : 경로를 표시할 때 기준이 root 디렉토리(/)

  2. 상대경로 : 기준이 현재 자신의 위치 . :현재 디렉토리

    .. : 상위 디렉토리 표시

ex) 현재 있는 디렉토리 안에 있는 lvm디렉토리로 가라 cd **./**lvm == cd lvm

지금 있는 디렉토리의 상위 디렉토리로 가라 cd ../media

root로 가라 cd /

나의 홈 디렉토리로 가라 cd ~

 

d **r w x** r - x r - x

d : 디렉토리 rwx(소유자) r-x (같은 그룹에 있는 사람) r-w(아예 다른 사람)

-r w-------

-:일반파일

C : 디바이스파일 문자

b : 디바이스 파일(블록)

l : 심볼릭 링크 파일

dr-xr-xr-x. 18 root root 4096 Mar 26 01:31 .

링크 수,소유자,그룹,파일크기,만든 시간

ex) ls -al /etc (루트 아래에 있는 etc 디렉토리안에 파일을 보자)

"/" : 디렉토리

"@" : 링크파일

"*" : 실행파일

아무것도 없음 : 텍스트 파일

 

 

<옵션>

 

-F : 기호표시

-a : 숨겨진 파일 보여줌

<매뉴얼보기>

man cd (cd 명령어의 매뉴얼)

man ls (ls 명령어의 매뉴얼)

q , b, spacebar , enter 으로 넘기거나 나올 수 있음

 

 

<디렉토리 만들기>

 

mkdir [이름]

<디렉토리안에 디렉토리를 만들기 (수직적)>

mkdir -p test/test1

<ls 로 디렉토리 안의 다른 디렉토리의 내용을 보여주라 >

ls -R test **-R 옵션은 하위 디렉토리의 있는 내용들까지 전부 바꾼다**

하면 test안의 test1 디렉토리의 안을 볼 수 있음

<ls의 결과를 test 파일에 넣어라>

ls > test

 

 

<디렉토리 삭제>

 

rmdir test

**디렉토리가 비어있어야 지울 수 있다.**

<비어있지 않는 디렉토리를 삭제 할 때 쓸 수 있는 명령어>

rm **-r** test

<파일 삭제>

rm file

<whoami>

<who>

<date>

 

 

<파일 읽기>

 

cat

cat -n( 줄 번호까지 나오게 함)

more [file]

head [file] 처음부터 10줄까지 보여줌

tail [file] 끝부터 위로 10줄까지 보여줌

ex)

tail -3 [file] 끝에서 3줄만 출력

head -2 [file] 2줄만 출력

 

 

<cat으로 테스트에 내용을 넣는다.>

 

cat >> test

1234

 

<복사>

cp -[option] file1 file2

ex)

cp test test1(원본파일 o)

cp -i test test1 (대화식으로 컴퓨터의 명령을 처리 할 수 있음 -yes or no)

cp -r dir1 dir2 (디렉토리 복사)

 

 

<파일 옮기기>

 

mv file2 ./dir1

<이름 바꾸기>(원본파일 x)

mv file2 file3

 

파일 링크

  • 파일 링크는 기존에 있는 파일에 새로운 파일명을 붙이는 것을 말함

  • 하드 링크 : 기존 파일에 새로운 파일명을 추가로 생성

  • 심벌릭 링크 : 원본 파일을 가리키는 새로운 파일을 생성

  • 리눅스 파일의 구성

    • 파일 = 파일명 + inode + 데이터 블록

    • 파일명 : 사용자가 파일에 접근할 때 사용하는 파일의 이름

    • inode : 파일에 대한 정보를 가진 특별한 구조체, 외부적으로는 번호로 표시, 내부적으로는 파일의 종류 및 크기, 소유자, 파일변경시간, 파일명 등 파일 상세 정보와 데이터 블록의 주소를 저장

  • 파일의 inode 번호는 ls -i명령으로 확인 가능

    • 파일명 앞에 출력된 숫자가 inode번호

    • 파일이름은 다르지만 **inode번호가 같다면 같은 파일**

  • 파일을 삭제 하는 방법이 inode와 파일의 연결을 끊는 것으로 파일 안의 정보를 건들지 않음

하드 링크(원본을 지워도 다른 링크 된 파일은 사용 가능)

ln file1 file2

  • inode 값이 같음

  • 링크 수가 같이 올라감

 

심볼릭 링크(원본을 지우면 링크 된 파일은 사용 **불가**) => 바로가기

ln -s file1 file2

  • inode 값이 다름

  • 링크수는 변함 없음

 

touch + file

  • 비어있는 파일 생성

  • 이미 존재해있는 파일이름이 있다면 현재 날짜 시간으로 파일의 수정 날짜를 바꾼다

입출력 방향 바꾸기(redirection)

리눅스는 모든 장치를 파일로 간주

표준입출력 장치

  • 표준 입력 장치 : 셸이 작업을 수행하는데 필요한 정보를 받아 들이는 장치 => 키보드

  • 표준 출력 장치 : 실행 결과를 내보내는 장치 => 모니터

  • 표준 오류 장치 : 오류 메세지를 내보내는 장치 => 모니터

파일 디스크립터

  • 파일관리를 위해 붙이는 일련번호

  • 입출력장치를 변경할 때는 이 파일 디스크립터를 사용

  • 표준 입출력 장치를 파일로 바꾸는 것을 리다이렉션이라함

파일 스크립터파일 스크립터 대신 사용하는 이름정의

0 stdin 명령의 표준입력
1 stdout 명령의 표준 출력
2 stderr 명령의 표준 오류

 

출력 리다이렉션(명령 > 파일명) >앞에 1이 생략됌

  • ">" : 기존 파일의 내용을 삭제하고 새로 결과를 저장

  • ">>": 기존의 내용에 추가하여 저장

cat >> test

1234

ex)

ls > file1을 하면 ls의 결과가 file1에 내용으로 들어감 file1이 없으면 생성을 하고 내용을 넣음

pwd > file1등등

  • tts는 현재 장치 위치를 보여줌

  • 출력 리다이렉션을 통해서 다른 장치로 출력을 할 수 있다.

입력 리다이렉션

hi가 나오면 종료됌

 

복사와 같음(cat < file1 > output)

 

file1의 내용을 cat으로 옮김

 

오류 리다이렉션(>앞에 2를 써야함 )

 

오류의 내용이 err파일에 들어감

 

파일의 접근 권한

접근 권한의 표기 방법

소유자 + 그룹 + 기타사용자

r : 읽기권한

w : 쓰기권한

x : 실행권한

접근 권한의 변경 명령

  • chmod

    • 기능 : 파일이나 디렉터리의 접근 권한을 변경한다

    • 형식 : chmod [옵션] [권한모드 파일 또는 디렉터리]

    • 옵션 : -R : **하위 디렉터리까지 모두 변경할 수 있다**

기호모드

  • 사용자 카테고리 문자

    • u : 파일 소유자

    • g : 소유자가 속한 그룹

    • o : 소유자 와 그룹이외의 기타 사용자

    • a : 전체 사용자

  • 연산자 기호

    • "+" : 권한부여

    • "-" : 권한제거

    • "=" : 접근 권한 설정

  • 접근 권한 문자

    • r : 읽기 권한

    • w : 쓰기 권한

    • x : 실행권한

ex )

a = rw (모두에게 읽기,쓰기,실행권한을 부여 => 각기 어떤 권한을 가지고 있는지 노 상관 다들읽기 권한과 쓰기 권한만 부여됌)

g-w(그룹에서 쓰기권한 제거)

왜 디렉토리와 파일을 처음 만들때 가진 권한들이 서로 다를까? (중요)

특정사용자가 내 파일에 접근하는 것을 막기 위해 권한을 설정함

 

chmod -R a=rx test를 하면 test안의 file1도 같이 r-x로 된다

R은 하위 디렉토리까지 권한을 같게 만드는 옵션

숫자를 이용한 파일 접근 권한 변경

숫자로 환산하기

  • 숫자 모드에서는 각 권한이 있고 없고를 0과 1로 표기하고 이를 다시 환산하여 숫자로 표현

**file 초기 권한 : 666(rw-rw-rw-)**

**directory 초기 권한 : 777(rwxrwxrwx)**

umask

파일의 초기 권한과 umask 계산 (위의 자리가 1이고 아랫자리가 0일경우에만 1 나머지는 다 0)

umask(0002 특수 비트를 제외하면 002) 맨 앞자리는 특수권한

umask라 치면 현재 umask값이 나오고 바꾸고 싶으면 umask 값 을 쓰면 된다

 

검색

  • 파일 안의 내용을 검색

(grep,fgrep,egrep) grep안에 fgrep과 egrep이 포함

  • 파일 자체를 찾는 방법

(find)

정규 표현식

"?" : 하나의 문자로 대응(모든 것을 의미)

  • ex) file?(file로 시작하고 뒤에 한 문자만 있는 이름의 파일들을 찾아줌)

"*" : 여러 문자와 대응 (모든 것을 의미)

  • ex) file* (file로 시작하고 뒤에 여러 문자들이 있는 이름의 파일들을 찾아줌)

"[ ]" : 범위를 지정할 때 사용

  • ex) file*[1-5] : (file로 시작하고 맨 마지막 글자가 1,2,3,4,5중 하나여야 한다)

"," : 값을 구분할때 사용

"-" : 범위를 나타낼 때

"^" : 행의 맨 처음(ex) grep ^d ./ex : ex파일내에서 첫글자가 d로 시작하는 내용)

"$" : 행의 맨 끝(ex) grep 1$ ./ex : ex파일 내에서 끝의 글자가 1로 끝나는 내용)

ex)

[1-4] : 1부터 4까지의 **범위**를 나타냄

[1,5] : 1과 5를 의미

grep

  • 형식 : grep [옵션] [패턴] [파일]

  • 옵션

    • i : 대소문자 모두 검색

    • l : 지정한 패턴이 포함된 파일 명을 출력한다

    • n : 행 번호를 출력한다

  • fgrep [옵션] [단어] [파일]

  • egrep [옵션] [정규표현식] [파일]

fgrep은 단어가 정확히 일치해야만 찾을 수 있다

grep은 단어가 포함되면 찾을 수 있다

  • 파이프 : | (한 명령어의 결과를 다른 명령어의 입력값으로 쓸 때 사용)

  • wc file이름을 입력하면 줄 수 , 단어수, 글자수 순으로 뜬다

 

find

find [경로 검색 조건] [동작]

옵션

-name [파일 명]

-type [파일종류]

-user [login ID]

-perm [접근 권한]

find / -perm 644

 

와일드카드를 쓸경우( " "가 필수 ! )

out.txt에는 file이 들어간 파일만 들어가있다.

 

권한이 거부된 것은 out.txt안에 들어가지 않음

검색하다 권한 에러난 것들을 err.txt라는 파일에 넣음으로써 file1이 들어간 파일만 나온다

오류를 제외하고 출력하게 함

동시 실행도 가능하다

find / -name file1 > out.txt 2> err.txt

한 파일안에 오류와 정상 출력을 동시에 입력할 수 있다

find / -name file1 -exec rm {} \;

file1을 찾아서 삭제를 한다.

Vi

i, a, o가 insert모드

끝낼때

:wq!

:q!

줄번호 없애기

:set nonumber

한글자씩 지우기

x를 누름

한단어씩 지우기

d누르고 w누름

한줄씩 지우기(잘라내기)

dd

붙여넣기

p

복사하기

yy

ex) 3yy : 3줄 복사

커서이동

^ : 맨처음

$ : 맨 끝

파일 목록 보기 : ls –al  

디렉토리 이동 : cd [디렉토리명]  

상위 디렉토리로 이동 : cd ..  

현재 디렉토리명 확인 : pwd 

파일 내용 확인하기 : cat [파일명]  

파일 내용 편집하기 : vi [파일명]    
-->입력모드 - i  명령모드 - esc  저장 - esc입력 후 :w   종료 - esc 입력 후 :q 

소스 코드 컴파일하기 : gcc -o [프로그램명] [소스코드명]  

프로그램 실행하기 : ./[프로그램명]  

프로그램에 인자 전달하기 : ./[프로그램명] [인자1] [인자2] ... 

현재 자신의 권한 확인하기 : whoami 혹은 id 



IP 확인하기 : /sbin/ifconfig  
IP 변경하기 : /usr/sbin/netconfig (root 권한 필요) 

지금까지 입력한 명령목록 보기 : history 



실행중인 프로그램(프로세스) 목록 보기 : ps -aux 

시스템 리부팅 : reboot (root 권한 필요)  
시스템 종료 : halt (root 권한 필요)  
관리자 권한으로 명령 실행 : sudo [명령어] 

출처: 해커스쿨 핸드북