자주 쓰는 명령어

1. 디렉토리

sh
# 디렉토리 이동 cd {path} # 기본 cd ~ # 홈 디렉토리로 이동 cd - # 직전 위치로 이동 # 현재 경로 확인 pwd # 현재 위치 파일/디렉토리 리스트 ls # 기본 ls -l # 현재 위치 파일/디렉토리 리스트 자세히 ls -hl # 현재 위치 파일/디렉토리 리스트 자세히 + 사람이 보기 쉽게 (용량 표기 보기 쉽게)

2. 시스템

sh
# 디스크 Filesystem 확인 df # 기본 df -h # 용량 표기 보기 쉽게 du # 기본 du -h # 용량 표기 보기 쉽게 du -s # 현재 디렉토리의 전체 사용량 du --max-depth=N # 하위 디렉토릭까지 표시 (1이면 현재 디렉토리) du -h --max-depth=1 # 현재 디렉토리의 용량들 보기 # 켜져있는 시간 uptime # 기본 uptime -p # 사람이 읽기 쉬운 형식으로 가동 시간만 확인 uptime -s # 시스템이 언제 부팅되었는지 확인 # UTC기준 현재 시스템 시간 출력 date # 타임존과 시간 확인 timedatectl # 타임존을 서울로 변경 sudo timedatectl set-timezone Asia/Seoul

3. 프로세스

sh
# 현재 프로세스 보기 top # 기본 htop # 컬러모드. 별도 설치 필요 # 프로세스 정보 ps # 사용자와 관련된 프로세스 출력 ps -ef # 전체 시스템에서 실행한 프로세스 정보 ps -ef | grep {KEYWORD} # 전체 시스템에서 실행한 프로세스 중 KEYWORD가 들어있는 리스트 출력 # 프로세스 정렬 및 상위 10개 추출 # ps -eo ...: 사용자가 지정한 형식(-o)으로 모든 프로세스(-e) 정보를 출력 # pid,cmd,%cpu: 프로세스 ID, 명령어, CPU 사용률 등 보고 싶은 정보 # --sort=-%cpu: CPU 사용량을 기준으로 내림차순 정렬 (-가 내림차순) # | head: 결과를 상위 10개 라인만 보여줌 ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head # 포트 찾기 lsof -i :{PORT} # PORT 찾기 # PID 찾기 pgrep {KEYWORD} # KEYWOR가 들어간 프로세스 PID 리스트 # 프로세스 죽이기 pkill {PROCESS_NAME} # PROCESS_NAME 죽이기 pkill -f {KEYWORD} # KEYWORD가 들어간 프로세스 죽이기 # 백그라운드 실행 프로세스 검색 jobs # PID 죽이기 sudo kill {PID} # 기본값 -15로 사용됨 sudo kill -9 {PID} # 강제로 죽이기 sudo kill -9 $(pgrep KEYWORD) # KEYWORD에 관련된 PID 죽이기

4. 네트워크

sh
# 인터페이스 확인 ifconfig # 다른 서버 쉘 # options # -p {PORT} : 포트 # -i {PEM_PATH} : 키파일로 접속하는 경우 # -L {LOCAL_PORT:TARGET_IP:TARGET_PORT}: 로컬 포트포워딩 규칙 (터널링) # -f : SSH 실행 직후 백그라운드로 이동 # -N : 명령 실행 없이 포트포워딩만 수행 # -n : stdin 무시(백그라운드 실행 시 필요) # -T : 터미널 할당 없음(포워딩만 수행) ssh 사용자이름@[IP 또는 도메인] -p 22 # 예시 (쉘 접속) ssh -i key.pem ec2-user@127.0.0.1 -p 22 # 터널링 # 외부 pc에서 (zsh를 사용한다면 bash로 변경) # 연결 성공시, localhost:[출력 PORT] 로 접속 가능 ssh 사용자이름@[HostName] -NnT -L [로컬 PORT]:[목적지 IP]:[목적지 PORT]

5. 압축

sh
# 압축 tar -czvf FILENAME.tar.gz # 현재 경로 + 압축 tar -czvf FILENAME.tar.gz {PATH} # 지정된 경로 + 압축 # 압축 해제 tar -xzvf FILENAME.tar.gz # 현재 경로 + 압축 tar -xzvf FILENAME.tar.gz {PATH} # 지정된 경로 + 압축 # 분할 압축 (1024MB 예시) tar -czvf - {PATH} | split -b 1024m - {NEW_FILENAME} #분할 압축 해제 cat FILENAME.tar.gz* | tar xvzf -

6. alias

sh
# alias 저장 # ~/.bash_profile 편집해서 추가 vi ~/.bash_profile # 아래 양식으로 내용 작성 alias {command}='명령어' # ex) alias cmd='sh /home/ec2-user/run.sh' # alias 적용 (필수) source ~/.bash_profile

7. 파일 관련

sh
# 파일 그대로 출력 cat 경로 # 파일 처음 기준 출력 head {FILE_PATH} # 첫 10줄 표기 # 파일의 마지막 기준 출력 # options # -f : 실시간 출력 # -n : 숫자 입력시, 지정된 라인수만큼 내용 출력 # -v : 파일 헤더와 이름 출력. 여러 파일을 동시에 할 경우 기본값 # -q : 파일 헤더와 이름 미출력. 단일 파일을 할 경우 기본값 tail {FILE_PATH} # 마지막 10줄 표기 # 포함하는 단어 검색 grep {KEYWORD} # 기본적으로 정규식으로 문구가 사용됨 # options # -i : 대소문자 구분 없이 검색 # -v : 해당 패턴과 일치하지 않는 줄을 출력 # -n : 줄 번호와 같이 출력 # -w : 단어 단위로 문자열 검색 # -E : 확장 정규표현식 사용 (메타문자에 따로 escape 처리 하지 않아도 됨) # -F : 정규표현식 사용하지 않음 tail {FILE_PATH} | grep {KEYWORD} # 예시 tail -f access.log # 실시간 출력 tail -f {FILE_PATH} | grep {KEYWORD} # KEYWORD가 포함된 줄만 실시간 출력 tail -f {FILE_PATH} | grep -i {KEYWORD} # KEYWORD가 포함된 줄만 대소문자 구분 없이 실시간 출력 tail -f {FILE_PATH} | grep -in {KEYWORD} # KEYWORD가 포함된 줄만 대소문자 구분 없이 줄번호와 같이 실시간 출력 # 동일한 라인 중복 제거하여 출력 uniq # 기본 uniq -c # 같은 라인이 몇번 나오는지 카운팅 uniq -u # 반복되지 않은 행만 출력 uniq -d # 반복된 행만 출력 uniq -i # 대소문자 구별하지 않고 정렬 # 예시 cat {FILE_PATH} | uniq -c # 정렬 # 글자 기준으로 정렬한다. a...z순 sort # 기본. a-z순 sort -f # 대소문자 구별 없이 sort -r # 역순. z-a순 # 예시 cat {FILE_PATH} | sort | uniq -c # FILE_PATH 읽으면서 정렬하고, 중복 제거하고, 반복된 수 행 표시 # 글자 카운팅 wc -c {FILE_PATH} # byte 수 wc -m {FILE_PATH} # 문자 수 wc -l {FILE_PATH} # 줄 수 wc -L {FILE_PATH} # 가장 긴 줄의 길이 wc -w {FILE_PATH} # 단어 수

8. 실행 관련

sh
# no hang up의 줄임말, 실행시 nohup.out 파일 생성. 터머닐 종료시 종료될 수 있음. # > /dev/null : 출력되는 모든 내용을 버려서 화면이 어지러워지는 것을 방지 # & : 프로세스를 백그라운드에서 실행 nohup {EXECUTE_COMMAND} # 기본 nohup {EXECUTE_COMMAND} & # 출력 내용 유지하면서 백그라운드 유지 nohup {EXECUTE_COMMAND} > dev/null & # 출력 내용 모두 버리면서 백그라운드 유지 # 예시 (jar파일 실행) nohup java NAME.jar & # 출력 내용 유지하면서 백그라운드 유지 nohup java NAME.jar > dev/null & # 출력 내용 모두 버리면서 백그라운드 유지

9. awk 자주 쓰는 패턴

sh
# 기본 awk '패턴 { 액션 }' 파일명 ex) awk '{ print $1 }' file.txt # 첫 번째 컬럼 프린트 # 특정 컬럼 출력 awk '{ print $1, $3 }' file.txt # 컬럼 개수 출력 awk '{ print NF }' file.txt # 마지막 컬럼 출력 awk '{ print $NF }' file.txt # 특정 문자열 포함한 라인만 출력 awk '/error/ { print }' access.log # 특정 숫자 조건 필터링 awk '$3 > 100 { print $0 }' data.txt # 두 조건 조합 (AND/OR) awk '$2 == "200" && $3 > 100 { print }' access.log # 헤더 출력, 끝에 요약 출력 (BEGIN/END) awk 'BEGIN { print "Start" } { print $1 } END { print "Done" }' file.txt # 콤마 구분 CSV처리 awk -F',' '{ print $2 }' data.csv # 출력 구분자 변경 awk -F',' 'BEGIN {OFS=" | "} { print $1, $3 }' data.csv # 특정 컬럼 합계 awk '{ sum += $3 } END { print sum }' file.txt # 평균 계산 awk '{ sum += $2; count++ } END { print sum/count }' data.txt # 특정 컬럼 치환 awk '{ gsub("apple", "banana"); print }' file.txt # 전체 컬럼 합쳐서 출력 awk '{ print $1 ":" $2 ":" $3 }' file.txt # Nginx 로그에서 IP만 뽑기 awk '{ print $1 }' access.log # 404 발생 횟수 세기 awk '$9 == 404 { count++ } END { print count }' access.log # 요청 건수 상위 10 IP awk '{cnt[$1]++} END {for (ip in cnt) print cnt[ip], ip}' access.log | sort -nr | head # 컬럼 값 기준 합계 # 예: 상품ID 별 매출 합계 awk '{ sum[$1] += $3 } END { for (id in sum) print id, sum[id] }' sales.txt # JSON 흉내 출력 awk -F',' '{ print "{\"name\":\"" $1 "\", \"age\":" $2 "}" }' people.csv # ps 결과에서 메모리 상위 5개 ps aux | awk '{print $4, $11}' | sort -nr | head -5 # 디스크 사용량만 출력 df -h | awk 'NR>1 {print $1, $5}'