Linux 기본 명령어 정리

ik_13038·2022년 8월 11일
0

라이징캠프 1주차

목록 보기
7/7

📖Linux 기본 명령어 정리


[자주 쓰이는 Command]

pwd: 현재 path

~: Home 디렉토리 표시

cd [디렉토리명]: 해당 디렉토리로 이동

..: 하위 디렉토리

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

ls: 현재 디렉토리의 파일 리스트

옵션내용
-1세로로 정렬
-llong list (display lots of info)
-t수정 시간에 따라 정렬
-Ssize에 따라 정렬
-h사전순으로 정렬
-r역순으로 정렬

  • ls-ltr처럼 명령어 혼합하여 사용 가능

*: 와일드카드 문자

mkdir [디렉토리명]: 새로운 디렉토리 생성

rmdir [디렉토리명]: 디렉토리 삭제

touch [파일명]: 텍스트파일 생성

cat [파일명]: 파일 내용을 보는 명령어

옵션내용
cat [파일명] | more엔터키를 입력할 때마다 한 줄씩 내려가면서 확인이 가능하다.
cat [파일명] | less화살표 위, 아래키로 페이지 올림, 내림이 가능하다.

head [파일명] : 파일의 윗부분 10줄(default)을 보여준다.
ex) head -n [파일명] 으로 사용자가 지정하는 줄까지 출력가능 하다.

tail [파일명] : 파일의 아랫부분 10줄(default)을 보여준다.

[파일 복사,이동,삭제 명령어]

cp [복사할 파일명][복사될 파일명]: 파일 복사

옵션내용
-i파일을 복사할 때 파일명이 동일하다면 덮어쓰기를 할 것인지 물어본다.
-f동일한 파일명이 있는 경우에도 강제로 삭제 후 복사한다.
-p원본 파일 소유주, 그룹, 권한, 시간 정보들을 그대로 복사한다.
-r[원본파일명]이 경로일 경우, 그 경로에 있는 모든 하위 디렉토리들을 포함하여 모두 복사한다. 일반 파일일 경우는 그냥 복사한다.
-u복사할 대상이 이미 존재하고 파일의 날짜가 같거나 더 최신이라면 복사하지 않는다

mv [파일명][경로] : 파일 이동

  • -f : 이동할 위치에 파일 이름이 겹치면 강제로 이동한다.
  • -i : 이동할 위치에 파일 이름이 겹치면 사용자에게 물어본다.

rm [파일명] : 파일제거

옵션내용
-i파일이나 디렉토리가 삭제될 때마다 확인한다.(y : 삭제, n : 취소)
-f사용자에게 확인하지 않고 삭제한다.
-v각각의 파일 지우는 정보를 자세하게 모두 보여준다.
-r해당 디렉토리의 하위 디렉토리까지 모두 삭제
  • 폴더의 경우 rmdir로 제거 가능하다.

[File Permissions]

옵션내용
r읽기권한
w쓰기권한
x실행권한

  • 맨앞 약자 d는 directory의 약자로 폴더를 가리킴.

[chmod 명령어]

chmod [user/group/others/all]+[permission][file(s)]
파일이나 디렉토리의 권한을 바꾸는 명령어이다. 문자로 사용할수도 있고, 8진수형식(Octal Format)으로도 사용이 가능한다.

  • chmod 명령어 문자 옵션
문자권한
rRead(읽기)
wWrite(쓰기)
xExecute(실행, 디렉토리일경우 검색)
XExecute(디렉토리일경우에만 실행, 검색)
s소유주와 같은 권한으로 파일 실행 가능(setuid bit)
t쓰기권한에 관계 없이 소유주만 삭제 가능(sticky bit)
u현재 파일을 소유한 사용자(user)
g소유한 사용자의 그룹 멤버들
ou 와 g에 속하지 않는 모든 사용자들
  • chmod 8진수형식(Octal Format)
8진수 값읽기(Read)쓰기(Write)실행(Execute)
7OOO
6OO-
5O-O
4O--
3-OO
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진수권한 의미
0000---아무 권한 없음
1001--x실행 권한만 있음
2010-w-쓰기 권한만 있음
3011-wx쓰기,실행 권한 있음
4100r--읽기 권한만 있음
5101r-x쓰기,실행 권한 있음
6110rw-읽기,쓰기 권한 있음
7111rwx모든 권한 있음

[ps 명령어]

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에 대한 정보를 출력

cf) ps 항목

ps명령어를 단독 사용할 경우 기본적으로 PID, TTY, TIME, CMD 네개의 정보가 출력된다.

옵션내용
USER프로세스의 소유자의 이름 (BSD계열) 의 경우
UID프로세스의 소유자의 이름 (SYSTEM V계열)
PID프로세스의 식별번호
PPID부모 프로세스 ID
%CPUCPU 점유율 (추정치, BSD계열)
%MEMMemory 점유율 (추정치, BSD계열)
VSZVirtual memory size (가상메모리 사용량, KB 혹은 페이지 단위)
RSSRisident Set Size의 약어. 실제 메모리 사용량
S, STAT현재 프로세스의 상태 코드 (S : Sys V, STAT : BSD)
VSZVirtual memory size (가상메모리 사용량, KB 혹은 페이지 단위)
TTY프로세스와 연결된 터미널
TIME총 수행시간(=총 CPU사용시간)
COMMAND프로세스 수행 명령어
C프로세스의 플래그
PRI실제 실행 우선순위

[kill 명령어]

프로세스에 특정한 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)로 지시한 프로세스 그룹에 시그널을 보낸다.

cf) 시그널

특정 이벤트가 발생했을 때 프로세스에게 전달하는 신호(메시지)이다.

리눅스에서 프로세스끼리 통신할 때 사용한다.

시그널 이벤트로는 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, pipe 명령어]

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 명령어

네트워크 연결상태, 라우팅테이블, 인터페이스 상태 등을 보여주는 명령어

$ netstat [옵션]
옵션내용
-aall, 모든 소켓정보
-r라우팅 정보
-n호스트명 대신 ip주소로 출력
-i모든 네트워크 인터페이스 정보 출력
-p프로세스(PID)와 프로셋 ㅡ이름 표시
-s프로토콜별 네트워크 통계정보 출력
-tTCP 프로토콜 정보 출력
-uUDP 프로토콜 정보 출력
-l대기중인 네트워크[-listening]

자주 사용하는 옵션
netstat -nap : 연결을 기다리는 목록과 프로그램을 보여준다
netstat -an | grep 포트번호 : 특정 포트가 사용 중에 있는지 확인
netstat -nlpt : TCP listening 상태의 포트와 프로그램을 보여준다

  • Proto : 프로토콜 종류. TCP / UDP / RAW
  • Recv-Q : 해당 process가 현재 받는 바이트 표기
  • Send-Q : 해당 process가 현재 보내는 바이트 표기
  • Local Address : 출발지 주소 및 포트. 자신의 주소 및 포트
  • Foreign Address : 목적지 주소 및 포트
  • State : 포트의 상태 표기

netstat 상태 값

State of netstat내 용
CLOSED완전히 연결이 종료된 상태
CLOSING흔하지 않으나 주로 확인 메시지가 전송 도중 유실된 상태
CLOSE_WAITTCP 연결이 상위 응용프로그램 레벨로부터 연결 종료를 기다리는 상태
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

profile
글 연습, 정보 수집

0개의 댓글