옵션 | 내용 |
---|---|
-1 | 세로로 정렬 |
-l | long list (display lots of info) |
-t | 수정 시간에 따라 정렬 |
-S | size에 따라 정렬 |
-h | 사전순으로 정렬 |
-r | 역순으로 정렬 |
*: 와일드카드 문자
mkdir [디렉토리명]: 새로운 디렉토리 생성
rmdir [디렉토리명]: 디렉토리 삭제
touch [파일명]: 텍스트파일 생성
cat [파일명]: 파일 내용을 보는 명령어
옵션 | 내용 |
---|---|
cat [파일명] | more | 엔터키를 입력할 때마다 한 줄씩 내려가면서 확인이 가능하다. |
cat [파일명] | less | 화살표 위, 아래키로 페이지 올림, 내림이 가능하다. |
head [파일명] : 파일의 윗부분 10줄(default)을 보여준다.
ex) head -n [파일명] 으로 사용자가 지정하는 줄까지 출력가능 하다.
tail [파일명] : 파일의 아랫부분 10줄(default)을 보여준다.
cp [복사할 파일명][복사될 파일명]: 파일 복사
옵션 | 내용 |
---|---|
-i | 파일을 복사할 때 파일명이 동일하다면 덮어쓰기를 할 것인지 물어본다. |
-f | 동일한 파일명이 있는 경우에도 강제로 삭제 후 복사한다. |
-p | 원본 파일 소유주, 그룹, 권한, 시간 정보들을 그대로 복사한다. |
-r | [원본파일명]이 경로일 경우, 그 경로에 있는 모든 하위 디렉토리들을 포함하여 모두 복사한다. 일반 파일일 경우는 그냥 복사한다. |
-u | 복사할 대상이 이미 존재하고 파일의 날짜가 같거나 더 최신이라면 복사하지 않는다 |
mv [파일명][경로] : 파일 이동
rm [파일명] : 파일제거
옵션 | 내용 |
---|---|
-i | 파일이나 디렉토리가 삭제될 때마다 확인한다.(y : 삭제, n : 취소) |
-f | 사용자에게 확인하지 않고 삭제한다. |
-v | 각각의 파일 지우는 정보를 자세하게 모두 보여준다. |
-r | 해당 디렉토리의 하위 디렉토리까지 모두 삭제 |
옵션 | 내용 |
---|---|
r | 읽기권한 |
w | 쓰기권한 |
x | 실행권한 |
chmod [user/group/others/all]+[permission][file(s)]
파일이나 디렉토리의 권한을 바꾸는 명령어이다. 문자로 사용할수도 있고, 8진수형식(Octal Format)으로도 사용이 가능한다.
문자 | 권한 |
---|---|
r | Read(읽기) |
w | Write(쓰기) |
x | Execute(실행, 디렉토리일경우 검색) |
X | Execute(디렉토리일경우에만 실행, 검색) |
s | 소유주와 같은 권한으로 파일 실행 가능(setuid bit) |
t | 쓰기권한에 관계 없이 소유주만 삭제 가능(sticky bit) |
u | 현재 파일을 소유한 사용자(user) |
g | 소유한 사용자의 그룹 멤버들 |
o | u 와 g에 속하지 않는 모든 사용자들 |
8진수 값 | 읽기(Read) | 쓰기(Write) | 실행(Execute) |
---|---|---|---|
7 | O | O | O |
6 | O | O | - |
5 | O | - | O |
4 | O | - | - |
3 | - | O | O |
2 | - | O | - |
1 | - | - | O |
0 | - | - | - |
8진수 형식은 권한을 8진수로 표시하게 된다. 실행은 8진수 1, 쓰기는 2, 읽기는 4, 이 3 숫자의 합으로 3가지 권한의 모든 조합을 표시할 수 있다. 또 8진수형식 chmod를 사용할 때는 사용자를 따로 지목하지 않고, 3자리 8진수로 모든 권한을 표시한다.
예를들면 3자리 8진수의 각 숫자들은 위에서 말했던 권한문자열에서 사용자, 사용자그룹, 다른 모든 사용자들을 의미한다.
8진수 777은 사용자, 사용자그룹, 다른모든 사용자들이 rwx권한을 가지게 되므로, rwxrwxrwx 권한 문자열을 의미하게 된다.
(정리)
8진수 2진수 권한 의미 0 000 --- 아무 권한 없음 1 001 --x 실행 권한만 있음 2 010 -w- 쓰기 권한만 있음 3 011 -wx 쓰기,실행 권한 있음 4 100 r-- 읽기 권한만 있음 5 101 r-x 쓰기,실행 권한 있음 6 110 rw- 읽기,쓰기 권한 있음 7 111 rwx 모든 권한 있음
ps(process status)명령어는 현재 실행중인 목록과 상태를 보여준다.
ps옵션은 System V, BSD, GNU에 따라 결과가 다르게 나타난다.
System V : dash(-)를 사용
BSD : dash(-)를 사용하지 않음
GNU : 두개의 대쉬(--) 사용
ps -ef # 동작 중인 모든 프로세스를 full format으로 출력한다.
ps -ef | grep '프로세스명' # '프로세스명'의 구동을 확인한다.
ps -ef | more # 모든 프로세스를 full format으로, 페이지 단위로 출력한다.
ps : 프로세스 작업상태
$ ps [option]
System V : $ ps -ef
BSD : $ ps aux
옵션 | 내용 |
---|---|
-e | 현재 실행중인 모든 프로세스의 정보 출력 |
-f | 프로세스에 대한 자세한 정보 출력(PPID 등) |
-u [사용자이름] | : 특정 사용자에 대한 모든 프로세스의 정보를 출력 |
-p [pid] | : 특정 pid에 대한 정보를 출력 |
ps명령어를 단독 사용할 경우 기본적으로 PID, TTY, TIME, CMD 네개의 정보가 출력된다.
옵션 | 내용 |
---|---|
USER | 프로세스의 소유자의 이름 (BSD계열) 의 경우 |
UID | 프로세스의 소유자의 이름 (SYSTEM V계열) |
PID | 프로세스의 식별번호 |
PPID | 부모 프로세스 ID |
%CPU | CPU 점유율 (추정치, BSD계열) |
%MEM | Memory 점유율 (추정치, BSD계열) |
VSZ | Virtual memory size (가상메모리 사용량, KB 혹은 페이지 단위) |
RSS | Risident Set Size의 약어. 실제 메모리 사용량 |
S, STAT | 현재 프로세스의 상태 코드 (S : Sys V, STAT : BSD) |
VSZ | Virtual memory size (가상메모리 사용량, KB 혹은 페이지 단위) |
TTY | 프로세스와 연결된 터미널 |
TIME | 총 수행시간(=총 CPU사용시간) |
COMMAND | 프로세스 수행 명령어 |
C | 프로세스의 플래그 |
PRI | 실제 실행 우선순위 |
프로세스에 특정한 signal을 보내는 명령어이다.
일반적으로 종료되지 않는 프로세스를 종료시킬 때 많이 사용한다.
1. 시그널을 지정하지 않을 경우 기본 값인 정상 종료(15, SIGTERM) 시그널을 보냅니다.
$ kill [pid]
2. 시그널 지정
$ kill -s [signal id] [pid]
$ kill -s [signal text] [pid]
$ kill -[signal id] [pid]
$ kill -[signal text] [pid]
s 옵션으로 시그널을 지정하지 않으면 기본 시그널 값이 정상종료된다. (SIGTERM,15)
프로세스를 안전하게 종료하기 위해서는 "kill -9 pid", "kill -SIGKILL pid" 형태로 프로세스 강제 종료를 권장하지 않는다. (데이터 유실 위험)
일반적으로 해당 Process에 문제가 있어서 다시 시작하고자 할 때에는 SIGHUP, SIGTERM, SIGKILL의 순서로 시도해본다.
kill 명령어는 내부적으로 kill()이란 시스템 콜을 사용하여 구현하고, 프로세스 식별자(PID)로 지시한 프로세스와 프로세스 그룹 식별자(PGID)로 지시한 프로세스 그룹에 시그널을 보낸다.
특정 이벤트가 발생했을 때 프로세스에게 전달하는 신호(메시지)이다.
리눅스에서 프로세스끼리 통신할 때 사용한다.
시그널 이벤트로는 HW 예외(나누기 0), SW 상태, 사용자 입력, 시스템 콜(kill) 등이 있다.
옵션 | 내용 |
---|---|
Ctrl+c | 실행중인 프로세스에 SIGINT신호를 보낸다.(프로세스 종료) |
Ctrl+z | 실행중인 프로세스에 SIGITSTP신호를 보낸다.(프로세스 정지) |
Ctrl+\ | 실행중인 프로세스에 SIGINT신호를 보낸다.(프로세스 종료 + 코어 덤프) |
시그널 종류
kill -l 명령어를 이용해 사용할 수 있는 시그널을 확인할 수 있다.
시그널은 여러 종류가 있고 각각 번호가 붙어있다.
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
- 자주 사용하는 시그널
1(SIGHUP), 2(SIGINT), 3(SIGQUIT), 9(SIGKILL), 15(SIGTERM), 18(SIGTSTP), 19(SIGCONT), 20(SIGCHLD)SIGKILL(9) vs SIGTERM(15)
SIGKILL(9) : 강제 종료, 개발자가 프로그램을 개발할 때 핸들링을 할 수 없다.
개발자가 구현한 종료 함수가 호출되지 않고 즉시 프로세스가 종료되어 데이터가 유실되거나 리소스가 제대로 닫히지 않는 문제가 발생할 수도 있다.
SIGTERM(15) : 정상 종료
No Name Default Action Description
1 SIGHUP terminate process terminal line hangup
2 SIGINT terminate process interrupt program
3 SIGQUIT create core image quit program
4 SIGILL create core image illegal instruction
5 SIGTRAP create core image trace trap
6 SIGABRT create core image abort program (formerly SIGIOT)
7 SIGEMT create core image emulate instruction executed
8 SIGFPE create core image floating-point exception
9 SIGKILL terminate process kill program
10 SIGBUS create core image bus error
11 SIGSEGV create core image segmentation violation
12 SIGSYS create core image non-existent system call invoked
13 SIGPIPE terminate process write on a pipe with no reader
14 SIGALRM terminate process real-time timer expired
15 SIGTERM terminate process software termination signal
16 SIGURG discard signal urgent condition present on socket
17 SIGSTOP stop process stop (cannot be caught or ignored)
18 SIGTSTP stop process stop signal generated from keyboard
19 SIGCONT discard signal continue after stop
20 SIGCHLD discard signal child status has changed
21 SIGTTIN stop process background read attempted from control terminal
22 SIGTTOU stop process background write attempted to control terminal
23 SIGIO discard signal I/O is possible on a descriptor (see fcntl(2))
24 SIGXCPU terminate process cpu time limit exceeded (see setrlimit(2))
25 SIGXFSZ terminate process file size limit exceeded (see setrlimit(2))
26 SIGVTALRM terminate process virtual time alarm (see setitimer(2))
27 SIGPROF terminate process profiling timer alarm (see setitimer(2))
28 SIGWINCH discard signal Window size change
29 SIGINFO discard signal status request from keyboard
30 SIGUSR1 terminate process User defined signal 1
31 SIGUSR2 terminate process User defined signal 2
redirection ('>', '>>'): 화면의 출력 결과를 파일로 저장
'>' 기호 # 기존에 있는 파일 내용을 지우고 저장 '>>' 기호 # 기존 파일 내용 뒤에 덧붙여서 저장 '<' 기호 # 파일의 데이터를 명령에 입력 cat file1 firle2 > file3 # file1, file2의 명령 결과를 합쳐서 file3라는 파일에 저장 car file4 >> file3 # file3에 file4의 내용 추가 cat < file1 # file1의 결과 출력 cat < file1 > file2 # file1의 출력 결과를 file2에 저장
Pipe:
pipe('|'): 여러 개의 명령어를 하나의 라인에서 연결시켜 사용
program_A | program_B # program_A의 출력이 program_B의 입력이 된다.
네트워크 연결상태, 라우팅테이블, 인터페이스 상태 등을 보여주는 명령어
$ netstat [옵션]
옵션 | 내용 |
---|---|
-a | all, 모든 소켓정보 |
-r | 라우팅 정보 |
-n | 호스트명 대신 ip주소로 출력 |
-i | 모든 네트워크 인터페이스 정보 출력 |
-p | 프로세스(PID)와 프로셋 ㅡ이름 표시 |
-s | 프로토콜별 네트워크 통계정보 출력 |
-t | TCP 프로토콜 정보 출력 |
-u | UDP 프로토콜 정보 출력 |
-l | 대기중인 네트워크[-listening] |
자주 사용하는 옵션
netstat -nap : 연결을 기다리는 목록과 프로그램을 보여준다
netstat -an | grep 포트번호 : 특정 포트가 사용 중에 있는지 확인
netstat -nlpt : TCP listening 상태의 포트와 프로그램을 보여준다
netstat 상태 값
State of netstat | 내 용 |
---|---|
CLOSED | 완전히 연결이 종료된 상태 |
CLOSING | 흔하지 않으나 주로 확인 메시지가 전송 도중 유실된 상태 |
CLOSE_WAIT | TCP 연결이 상위 응용프로그램 레벨로부터 연결 종료를 기다리는 상태 |
ESTABLISHED | 서버와 클라이언트 간에 세션 연결이 성립되어 통신이 이루어지고 있는 상태 (클라이언트가 서버의 SYN을 받아서 세션이 연결된 상태) |
FIN_WAIT1 | 클라이언트가 서버에게 연결을 끊고자 요청하는 상태(FIN을 보낸 상태) |
FIN_WAIT2 | 서버가 클라이언트로부터 연결 종료 응답을 기다리는 상태 (서버가 클라이언트로부터 최초로 FIN을 받은 후, 클라이언트에게 ACK를 주었을 때 |
LAST_ACK | 호스트가 원격지 호스트의 연결 종료 요구 승인을 기다리는 상태(서버가 클라이언트에게 FIN을 보냈을 때의 상태) |
LISTEN | 서버의 데몬이 떠 있어서 클라이언트의 접속 요청을 기다리고 있는 상태 |
SYN_SENT | 클라이언트가 서버에게 연결을 요청한 상태 |
SYN_RECEIVED | 서버가 클라이언트로부터 접속 요구(SYN)을 받아 클라이언트에게 응답(SYN/ACK)하였지만, 아직 클라이언트에게 확인 메시지(ACK)는 받지 못한 상태 |
TIME_WAIT | 연결은 종결되었지만 당분간 소켓을 열어 놓은 상태, 약 1분 정도이며 시간이 지나면 사라짐 |
UNKNOWN | 소켓의 상태를 알 수 없음 |
https://cocoon1787.tistory.com/197?category=888102
https://velog.io/@ogu1208/Linux-nestat-%EB%AA%85%EB%A0%B9%EC%96%B4