Linux 주요 커맨드와 옵션

커맨드 라인 단축키

  • ctrl + a: 커서를 라인 가장 앞으로 옮긴다.
  • ctrl + e: 커서를 라인 가장 뒤로 옮긴다.
  • ctrl + k: 커서를 기준으로 뒤쪽을 모두 지운다.

유틸리티

piping, redirect

<COMMAND> | <COMMAND>
  • |를 기준으로 앞 커맨드의 표준 출력을 뒷 커맨드의 표준 입력으로 사용한다.
  • curl -s https://apigateway.dev1.meshdev.io/neogeo/management/info | jq
<COMMAND> < <FILE>

<COMMAND> > <FILE>
<COMMAND> 1> <FILE> # 위 명령어와 같다.
<COMMAND> 2> <FILE> # 커맨드의 에러 내용을 파일에 덮어 쓴다.

<COMMAND> >> <FILE>
  • <는 뒷 파일의 내용을 커맨드의 입력으로 사용한다.
  • >는 앞 커맨드의 결과를 파일 등에 덮어 쓴다.
  • >>는 앞 커맨드의 결과를 파일 등에 추가한다.
cat << EOT > template.json
{
  "tag": ""
}
EOT

cat template.json

grep

  • 지정한 패턴이나 문자열에 매칭되는 내용만 출력한다.
grep [OPTIONS] [PATTERN] [FILE]
-c패턴이 일치하는 행의 수를 출력한다.
-i대소문자를 구분하지 않는다.
-v패턴이 일치하는 않는 내용만 출력한다.
-A패턴 일치 줄 이후 n개 라인을 출력한다.
-B패턴 일치 줄 이전 n개 라인을 출력한다.

watch

  • COMMAND의 결과를 계속해서 보여준다.
watch [OPTIONS] <COMMAND>
-d변경된 부분을 표시한다.
-nm초 주기로 리프레쉬한다.

time

  • 특정 명령어 또는 프로그램의 수행 시간을 보여준다.
time <COMMAND>
  • real: 총 수행 시간
  • user: CPU가 사용자 영역에서 보낸 시간
  • sys: CPU가 커널 영역에서 보낸 시간

xargs

  • 앞 커맨드의 수행 결과를 뒤 커맨드의 인자로 넘긴다.
<COMMAND> | xargs <COMMAND>
  • 아무 커맨드를 입력하지 않으면 echo가 수행된다.

파일/DIR

cat

  • 파일 이름을 받아서 내용을 터미널에 출력한다.
cat [OPTIONS] <FILE_NAME>
cat name # name 파일의 내용을 터미널에 출력한다.
cat name1 name2 # name1, name2 파일의 내용을 터미널에 출력한다.
-b줄번호를 출력한다. 비어있는 행은 포함하지 않는다.
-n줄번호를 출력한다. 비어있는 행을 포함한다.
-s2개 이상의 빈 행을 한 행으로 출력한다.

touch

  • 파일의 날짜와 시간을 수정하는 명령어다.
  • 빈 파일을 생성하기 위해 자주 사용된다.
touch [OPTIONS] <FILE_NAME> # 파일이 없으면 생성하고, 접근 시간, 상태 변경 시간, 수정 시간을 현재로 변경

mkdir

  • 디렉토리를 생성한다.
mkdir [OPTIONS] <DIRECTORY_NAME>
-m –mode권한을 함께 부여한다.
-p –parent상위 디렉토리를 같이 생성한다.

rm

  • 파일이나 디렉토리를 삭제한다.
rm [OPTIONS] <FILE_NAME | DIRECTORY_NAME>
-f –force삭제 여부를 묻지 않는다.
-r –recursive해당 디렉토리와 해당 디렉토리 하위의 모든 파일과 디렉토리를 삭제한다.

tree

  • 디렉토리의 하위 구조를 계층적으로 보여준다.
tree [OPTIONS] <DIRECTORY_NAME>
-L하위 구조의 레벨을 지정한다. (해당 레벨까지 출력)
-d파일은 제외하고 디렉토리만 출력한다.

echo

  • 텍스트를 터미널에 출력한다.
  • 텍스트에 특수문자가 있는 경우 "<text>"로 명시해주어야 한다.
echo [OPTIONS] <TEXT>

sed

Linux sed command help and examples

  • 파일을 수정하는 stream editor이다.
sed OPTIONS... [SCRIPT] [INPUT_FILE]
-i결과를 터미널에 출력하지 않고 파일에서 처리한다.
-r정규식을 사용한다.
-n적용 부분만 구분해서 출력한다.
’s/문자1/문자2/'문자1을 문자2로 대체한다. (/은 (공백). 으로 사용해도 된다.)
’n,ms/문자1/문자2/'n ~ m 번 줄에서 문자1을 문자2로 대체한다.
’n,mp'n ~ m 번 줄을 출력한다.
’n,md'n ~ m 번 줄을 지운다.
gsed 's/"tag": ./"tag": "latest"/g' template.json > output.json

cat output.json
file: mail

billy@example.org
tom@example.org
jay@example.org
root@example.org
  • billy와 tom의 example.org만 example.com으로 변경하고 싶은 경우
gsed -i -r 's/^(billy|tom)@example.org/\1@example.com/' file
  • 1~2번 라인만 출력하고 싶은 경우
gsed -n '1,2p' file
  • 1~2번 라인을 지우고 출력하고 싶은 경우
gsed '1,2d' file

tee

  • 입력과 출력을 동시에 한다.
tee [OPTIONS] [FILE]
  • 출력을 redirection할 경우 파일이 root 권한이라면 실패한다.
  • 이 경우 tee를 사용할 수 있다.
sudo echo "TEXT" > ROOT_FILE # permission denied
sudo echo "TEXT" | tee ROOT_FILE

less

  • 내용을 터미널에 출력한다.
  • 위 → 아래, 아래 → 위 방향으로 이동할 수 있다.
  • 종료하려면 q를 눌러야 한다.
less file

more

  • 파일의 내용을 터미널에 출력한다.
  • 위 → 아래 방향으로만 이동 가능하다.
  • 가장 아래로 이동하면 more가 종료된다.
more file

ls

  • 디렉토리에 있는 파일이나 디렉토리를 출력한다.
ls [OPTIONS] [DIRECTORY]
-a모든 파일과 디렉토리를 보여준다.
-l사용자의 권한, 소유자, 크기, 날짜 등 디테일 정보를 보여준다.

which

  • 특정 명령어의 위치를 출력한다.
which [OPTIONS] COMMAND
-n옵션은 모든 위치에서의 명령어를 찾는다.

head

  • 파일의 앞 부분을 출력한다.
head [OPTIONS] FILE
-n파일의 앞 부분 m줄 만큼 출력한다.

tail

  • 파일의 끝 부분을 출력한다.
tail [OPTIONS] FILE
-n파일의 끝 부분 m줄 만큼 출력한다.
-f파일의 끝부터 10줄을 출력하고, 새로 입력되는 정보를 계속해서 출력한다.
-F파일이 변경되어도 계속해서 추적하며 출력한다. (삭제되어도 다시 파일이 생기면 출력)

tar

  • 여러개의 파일과 디렉토리를 하나의 파일로 묶거나 해제한다.
tar [OPTIONS] <TARGET>
tar cvf name.tar ./dir # tar 생성
tar xvf name.tar # tar 해제
ctar 파일 생성
xtar 파일 해제
v생성 또는 해제 시 파일 리스트 출력
ttar에 포함된 내용 확인
f파일 이름 지정

gzip / gunzip

  • gzip: 파일을 압축한다.
  • gunzip: gz파일을 해제한다.
gzip [OPTIONS] <TARGET>
-n(1 ~ 9)은 압축 속도이다. 압축 속도가 빠르면 압축률이 낮아진다. (1: 빠름, 9: 느림)
-c압축 결과를 출력하고 원본은 유지한다.
-d압축을 해제한다.
-v압축 시 자세한 정보를 출력한다. (진행률 등)
-r디렉토리의 모든 파일을 압축한다.
gunzip [OPTIONS] <TARGET>
-l압축 파일 정보를 출력한다.
-v해제 시 자세한 정보를 출력한다. (진행률 등)
-r디렉토리의 모든 파일을 해제한다.

zip / unzip

  • zip: 파일 또는 디렉토리를 압축한다.
  • unzip: zip 파일을 해제한다.
zip [OPTIONS] <ZIP_NAME.zip> <TARGET...>
-압축 정도 (0: store only ~ 9: compress better)
-e압축 파일에 암호 적용
-s <n(kmgt)>분할 압축 (k: kilobytes, m: megabytes, g: gigabytes, t: terabytes)
-q메시지 출력 제한
-r하위 디렉토리의 파일과 숨겨진 파일을 포함한다.
upzip [OPTIONS] <TARGET>
-d특정 디렉토리에 zip을 해제한다.

chmod

chmod [OPTIONS] <MODE> <TARGET>
  • 파일 또는 디렉토리의 권한 등을 변경한다.
-R지정한 모드를 하위 디렉토리 및 파일에 전부 적용한다.
000모든 사용자가 r/w/x 불가능
440소유자 및 그룹은 r 가능, 그 외에는 불가능
664소유자 및 그룹은 r/w 가능, 그 외에는 r만 가능
755소유자는 r/w/x 가능, 그룹 및 그 외에는 r/x만 가능
777모든 사용자가 r/w/x 가능

네트워크

curl

curl [OPTIONS] <URL>
  • 여러 통신 프로토콜을 이용해서 데이터를 전송한다.
-XHTTP METHOD를 지정한다.
-HHEADER 값을 지정한다.
-dBODY에 들어갈 값을 지정한다.
-TPUT 방식으로 파일을 업로드 한다.
-b쿠키를 지정한다.
-s진행 상태, 에러 메세지 등을 보여주지 않는다.
-v헤어 등의 데이터를 추가로 보여준다.

wget

wget [OPTIONS] <URL>
  • 웹에서 파일 다운로드를 한다.
-c중단된 파일 다운로드를 다시 시작한다.
-b파일 다운로드를 백그라운드로 한다.
-O파일의 이름을 지정한다.

nc

nc [OPTIONS] [HOST] [PORT]
  • TCP 또는 UDP 프로토콜을 사용하는 네트워크 환경에서 데이터를 읽고 쓴다.
  • 일반적으로 서버의 포트 상태를 확인과 접속 가능 여부를 확인하기 위해 사용한다.
-z포트 스캔만 진행한다.
-v더 많은 정보를 출력한다.
nc -z google.com 80

telnet

telnet [OPTIONS] [HOST] [PORT]
  • 원격으로 호스트에 접속한다.
-l접속할 ID를 지정
-a현재 사용자를 ID로 지정
  • telnet만 입력하면 LINEMODE로 진입한다.
?사용법을 출력한다.
logout사용자가 로그아웃하며 접속을 해제한다.
open지정한 호스트로 연결한다.
quit텔넷을 종료한다.
status텔넷의 상태를 출력한다.
telnet google.com 80
GET / HTTP/1.1

openssl

# rsa 개인키 생성
openssl genrsa [-des3] -out PRIVATE_KEY_NAME.key [BIT_SIZE;1024, 2048]

# rsa 공개키 생성
openssl rsa -in PRIVATE_KEY_NAME.key -pubout -out PUBLIC_KEY_NAME.key

# 인증서 생성
openssl req -new -key PRIVATE_KEY_NAME.key [-days n] -out certification.csr

# HTTPS 통신
openssl s_client -connect google.com:443
  • SSL/TLS 프로토콜을 이용하기 위한 오픈소스 라이브러리이다.
  • # rsa 비밀키 생성
    • 공개키 암호화 방식의 개인키를 생성한다.
    • -des3 옵션을 넣으면 des3 대칭키 알고리즘으로 한 번 더 암호화 해준다.
      • 비밀키를 추가로 요구한다.
  • # rsa 공개키 생성
    • 공개키 암호화 방식의 공개키를 생성한다.
  • # 인증서 생성
    • 개인키로 서명한 인증서를 생성한다.
    • -days 옵션으로 유효한 기간을 설정할 수 있다.
    • 인증서는 공개키와 발급자 정보를 식별하는 정보를 가지고 있다.
    • 이 명령어를 수행하면 몇 가지 정보를 요청한다. (국가, 회사, 이메일 등)

ab

ab [OPTIONS] <HOST>[:PORT][/PATH]
  • 아파치가 제공하는 HTTP 서버 성능 검증 도구이다.
-n요청의 전체 수, m번 만큼 전체 요청을 수행한다.
-c동시에 요청하는 수, n개의 요청을 동시에 한다.
-H요청 헤더를 지정한다.
-C요청 쿠키를 지정한다.
-T요청 Content-type을 지정한다.
ab -n 10 -c 2 https://apigateway.dev1.meshdev.io/neogeo/management/info

nslookup

nslookup [-type=<TYPE>] DOMAIN_NAME [DNS]
  • DNS 서버에서 도메인의 정보를 조회한다.
-type=soaorigin DNS를 조회한다.

host

host [OPTIONS] NAME
  • DNS 서버에서 도메인의 정보를 조회한다.

netstat

netstat [OPTIONS]
  • 네트워크 연결상태, 인터페이스 상태 등을 보여준다.
옵션설명
-a모든 소켓 확인한다.
-r라우팅 테이블 확인한다.
-n호스트 이름을 ip 주소로 보여준다.
-tTCP 소켓을 확인한다.
-uUDP 소켓을 확인한다.
-pPID/program name을 확인한다.

traceroute

traceroute [OPTIONS] HOST
  • HOST까지 가는 네트워크 경로를 확인해준다.

프로세스

top

top [OPTIONS]
  • 실시간으로 시스템의 프로세스 상태를 확인한다.
-b배치 모드
-nm 후에 인터렉션 종료 (top 화면을 나간다.)
-d화면 새로고침 주기
shift + pCPU 사용률 내림차순
shift + m메모리 사용률 내림차순
shift + t프로세스 런타임 내림차순
kPID 작성시 kill

ps

ps [OPTIONS]
  • 현재 실행중인 프로세스의 목록과 상태를 보여준다.
-A모든 프로세스를 출력한다.
-f풀 포맷으로 보여준다. (UID, PPID 등)
-r현재 실행 중인 프로세스를 보여준다.
-e커널 프로세스를 제외한 모든 프로세스를 출력한다.

kill / pkill

kill [SIGNAL] PID
  • PID를 이용해서 프로세스에 signal을 보낸다.
pkill [SIGNAL] NAME
  • 프로세스 이름을 이용해서 프로세스에 signal을 보낸다.
9SIGKILL강제 종료 시그널
15SIGTERM정상 종료 시그널 (termination)
kill vs terminate
- kill
	- It is more like pressing PC power and reset button.
		It wont save any logs or other data.
- terminate
		- it will store all your data before shutting down
		(write data from RAM to disk, logs, etc)

pgrep

pgrep [OPTIONS] [PATTERN]
  • 패턴에 일치하는 프로세스 정보를 출력한다.
-u특정 유저가 실행시킨 프로세스를 검색한다. (이름)
-U특정 유저가 실행시킨 프로세스를 검색한다. (UID)
-g특정 그룹이 실행시킨 프로세스를 검색한다. (이름)
-G특정 그룹이 실행시킨 프로세스를 검색한다. (이름)
-l프로세스 이름을 같이 출력한다.