현재 경로명 출력: pwd
현재 디렉토리의 절대 경로명을 출력한다.
시스템 정보 확인: hostname, uname
hostname: 시스템의 이름을 확인, 변경한다.
uname: 시스템의 이름(커널)을 출력한다. -a 옵션을 붙여 커널명, 호스트명, 커널 릴리즈, 버전, 머신, 프로세스, 하드웨어 플랫폼, 운영체제를 출력한다.
패스워드 변경: passwd
비밀번호를 타이핑해도 화면상에는 출력되지 않는다.
화면 정리: clear
화면이 정리된다.
온라인 매뉴얼: man
매뉴얼(도움말).
디렉터리 생성: mkdir
중간 디렉토리 자동 생성: -p
디렉터리 삭제: mkdir
디렉터리 이동: cd
'gae' 디렉토리로 이동한 모습이다.
디렉터리 내용 확인: ls
'gae' 디렉토리 안에 'gae1' 디렉토리를 생성하고 ls를 통해 내용을 확인한 모습이다.
간단한 파일 만들기: gedit, cat, touch
gedit: gui기반 문서편집기.
$ gedit [파일이름] &
cat: 표준 입력 내용을 모두 파일에 저장하고, 파일이 없으면 새로 만든다.
$ cat > [파일]
touch: 파일 크기가 0인, 이름만 있는 빈 파일을 생성한다.
$ touch [파일]
파일 내용 출력: cat, more, head, tail
cat: 파일(들)의 내용을 그대로 화면에 출력한다. 파일을 지정하지 않으면 표준입력 내용을 그대로 화면에 출력한다.
$ cat [-n] 파일*
more: 파일(들)의 내용을 페이지 단위로 화면에 출력한다.
$ more 파일+
head: 파일(들)의 앞부분을 화면에 출력한다. 파일을 지정하지 않으면 표준입력 내용을 대상으로 한다.
$ head [–n] 파일*
tail: 파일(들)의 뒷부분을 화면에 출력한다. 파일을 지정하지 않으면 표준입력 내용 을 대상으로 한다.
$ tail [-n] 파일*
([-n] 옵션은 줄번호 표시)
파일 복사: cp
$ cp [-i] 파일1 파일2: 파일1을 파일2에 복사한다. -i는 대화형 옵션이다.
$ cp [–r] 디렉터리1 디렉터리2: 디렉터리1 전체를 디렉터리2에 복사한다.
파일 이동: mv
$ mv 파일 디렉터리: 파일을 지정된 디렉터리로 이동한다.
$ mv 파일1 ... 파일n 디렉터리: 여러 개의 파일들을 지정된 디렉터리로 모두 이동한다.
$ mv [-i] 파일1 파일2: 파일1의 이름을 파일2로 변경한다. -i는 대화형 옵션이다.
파일 삭제: rm
$ rm [-i] 파일+: 파일(들)을 삭제한다. -i는 대화형 옵션이다.
$ rm [-ri] 디렉터리: -r은 리커전 옵션으로 디렉터리 아래의 모든 것을 삭제한다.
파일 종류: file
파일의 종류에 대한 자세한 정보를 출력한다.
$ file 파일
접근 권한 변경: chmod
파일 혹은 디렉터리의 접근권한을 변경한다.
-R 옵션을 사용하면 지정된 디렉터리 아래의 모든 파일과 하위 디렉터리에 대해서도 접근권한을 변경한다.
$ chmod [-R] 접근권한 파일 혹은 디렉터리
사용자범위 연산자 권한
[u|g|o|a]+ [+|-|=] [r|w|x]+
접근권한의 8진수 표현: 권한이 있으면 1, 없으면 0으로 표시
파일 찾기: find
옵션의 검색 조건에 따라 지정된 디렉터리 아래에서 해당되는 파일들을 모두 찾아 출력한다.
$ find 디렉터리 [-옵션]
파일 필터링: grep
파일(들)을 대상으로 지정된 패턴의 문자열을 검색하고, 해당 문자열을 포함하는 줄들을 출력한다.
$ grep 패턴 파일*
옵션
-i: 대소문자 무시
-l: 해당 패턴이 들어있는 파일 이름을 출력
-n: 각 줄의 줄번호도 함께 출력
-v: 명시된 패턴을 포함하지 않는 줄을 출력
-c: 패턴과 일치하는 줄 수를 출력
-w: 패턴이 하나의 단어로 된 것만 검색
정규식
?: 한 글자 혹은 없음을 의미
.: 임의의 한 문자를 의미
*: 바로 앞의 것을 0번 이상 반복
[]: [과 ] 사이의 문자 중 하나 (- 기호: 문자의 범위를 지정)
[^...]: [^ 과 ] 사이의 문자를 제외한 나머지 문자 중 하나
^,$: 각각 줄의 시작과 끝을 의미
파일 정렬: sort
텍스트 파일(들)의 내용을 줄 단위로 정렬한다. 옵션에 따라 다양한 형태로 정렬한다.
$ sort [-옵션] 파일*
위의 예시처럼 -r 옵션을 이용하면 내림차순으로 정렬할 수 있다.
옵션
-b: 앞에 붙는 공백 무시
-c: 이미 정렬된 상태인지 확인
-d: 숫자, 문자, 공백만 비교하여 사전식 순서로 정렬
-f: 대소문자를 구분하지 않고 정렬
-n: 숫자 문자열의 숫자 값에 따라 비교하여 정렬
-r: 역순(내림차순)으로 정렬
-t 문자: 지정된 문자를 필드 구분자로 사용
-o 출력파일: 정렬된 내용을 지정된 파일에 저장
파일 비교: cmp, diff
$ cmp 파일1 파일2: 파일1과 파일2가 같은지 비교한다.
두 파일이 같으면 아무것도 출력하지 않고, 다르면 서로 달라지는 위치를 출력한다.
위의 예시에서 siss_1.txt는
1
2
3
siss_2.txt는
a
b
c
이다.
$ diff [-i] 파일1 파일2: 파일1과 파일2를 줄 단위로 비교하여 그 차이점을 출력한다. -i 옵션은 대소문자를 무시하여 비교한다.
파일 나누기: split
하나의 입력파일을 일정한 크기의 여러 개의 작은 파일들로 분할한다. -l n 옵션 을 이용하여 분할할 줄 수를 지정할 수 있다.
$ split [-l n] 입력파일 [출력파일]
파일 합병: cat, paste
$ cat 파일1 파일2 > 파일3: 파일1과 파일2의 내용을 붙여서 새로운 파일3을 만들어 준다.
$ paste [ -s ][ -d구분문자 ] 파일*: 여러 파일들을 병합하여 하나의 파일을 만들어 준다.
-s : 한 파일 끝에 다른 파일 내용을 덧붙인다.
-d구분문자 : 어떠한 문자로 열을 구분하는지 지정한다. 기본값은 탭 문자이다.
gcc 컴파일러
c프로그램을 컴파일한다. 옵션을 사용하지 않으면 실행파일 a.out를 생성한다.
$ gcc [-옵션] 파일
gdb (GNU debugger)
가장 대표적인 디버거이다. 실행파일을 이용하여 디버깅 모드로 실행한다.
$ gdb [실행파일]
주요 기능: 정지점(breakpoint) 설정, 한 줄씩 실행, 변수 접근 및 수정, 함수 탐색, 추적(tracing) 등
소스보기 : I
정지점 : b, clear, d
프로그램 수행: r 인수 (명령줄 인수를 받아 프로그램 수행), k(강제 종료), n(멈춘 지점에서 다음 줄을 수행하고 멈춤), s(n가 같은 기능, 함수 호출 시 함수 내부로 진입), c(정지점을 만날 때 까지 계속 수행), u(반복문에서 빠져나옴), finish(현재 수행하는 함수의 끝으로 이동), return(현재 수행 중인 함수를 빠져나옴), quit(종료)
변수 값 프린트 : p
vi 에디터
기본 텍스트 에디터. 명령 모드와 입력 모드가 구분되어 있으며, 명령모드로 시작한다.
마지막 줄 모드
:wq 작업 내용을 저장하고 종료 (ZZ와 동일한 기능)
:q 아무런 작업을 하지 않은 경우의 종료
:q! 작업 내용을 저장하지 않고 종료
커서 이동
h, ← : 한 칸 왼쪽 j, ↓: 한 칸 아래쪽
k, ↑: 한 칸 위쪽 l, → : 한 칸 오른쪽
BACKSPACE : 왼쪽으로 한 칸 SPACE : 오른쪽으로 한 칸
- : 이전 줄의 처음(명령모드) + : 다음 줄의 처음 (명령모드)
RETURN : 다음 줄의 처음(명령모드) 0 : 현재 줄의 맨 앞(명령모드)
$ : 현재 줄의 끝(명령모드) ^ : 현재 줄의 첫 글자(명령모드)
W : 다음단어의 첫 글자(명령모드) B : 이전단어의 첫 글자(명령모드)
화면 이동
^F : 한 화면 아래로 ^B : 한 화면 위로
^D : 반 화면 아래로 ^U : 반 화면 위로
특정 줄로 이동
nG : n번째 줄로 이동 1G : 첫 줄로 이동하기
G : 마지막 줄로 이동하기 :n : n번째 줄로 이동
탐색(search)
/탐색패턴 : forward 탐색
?탐색패턴 : backward 탐색
입력 모드로 전환
i : 커서 위치 앞에 삽입 a : 커서 위치 뒤에 삽입
I : 현재 줄의 앞에 삽입 A : 현재 줄의 뒤에 삽입
o : 현재 줄의 아래에 전개 O : 현재 줄의 위에 전개
현재 커서를 중심으로 수정
r : 단지 한 글자만 변경 R : 입력하는 대로 겹쳐 쓰기
s : 현재 글자 삭제, 삽입 상태 C : 커서로부터 줄 끝까지 변경 (커서로 부터 줄 끝까지 지우고 삽입)
cc : 현재 줄 전체를 변경 cw : 현재 단어를 삭제하고 변경
삭제
x : 커서가 있는 문자 지우기 X : 커서의 왼쪽 문자 지우기
D : 커서부터 줄끝까지 지우기 dd : 현재 줄의 전체를 지우기
:n,m d : n~m번째 줄 삭제
대치 명령
:s/패턴/스트링 : 현재 줄에서 대치 :n,m s/패턴/스트링 : 지정된 줄 범위에서 대치
:n s/패턴/스트링 : 지정된 줄(n)에서 대치 s/패턴/스트링/g : 각 줄의 해당되는 모든 단어 대치
수행 취소 / 재수행
u : 방금 전 수행 내용 취소(Undo)
U : 현재 줄 수행 내용을 취소
. : 방금 전 수행 내용을 반복(Redo)
줄 내용 복사(copy)
nY : 현재 줄에서부터 n개의 줄을 복사
:n,m y : n번째 줄에서 m번째 줄까지를 버퍼에 복사
마지막으로 삭제/복사한 내용 붙이기(put)
P : 버퍼 내용을 커서의 뒤(혹은 아래)에 삽입
p : 버퍼 내용을 커서의 앞(혹은 위)에 삽입
다른 파일 편집
:e 파일이름 : 현재 파일 대신에 주어진 파일 열기
:e! 파일이름 : 저장 여부를 점검하지 않고 파일 변경
:e# : 이전 파일을 다시 열기
줄 번호 붙이기
:set number
:se nu
줄 번호 없애기
:set nonumber
:se non
편집기 내에서 쉘 명령어 수행
:!ls
:!cat
'SYSTEM > 개념 정리' 카테고리의 다른 글
[Dream hack] Linux Exploitation & Mitigation Part 1 中 Return Address Overwrite & NOP Sled (0) | 2021.03.04 |
---|---|
[Dream hack] Memory Corruption - C (I) 中 스택 버퍼 오버플로우 (0) | 2021.03.04 |
BOF 정리 (2) (0) | 2021.02.24 |
BOF 정리 (1) (0) | 2021.02.21 |
리눅스 기초 명령어(2) (0) | 2021.02.19 |