자주 사용하는 리눅스 셸 명령어, 설정 모음

Mar 14, 2017

리눅스 계열 OS를 사용하면서 자주 사용하는 명령어를 정리했다. Centos를 주로 사용해서 다른 OS에서 안 될 수 있다.

기본

if

if [ -f "/path/filename" ]
then
    echo "file 있음"
else
    echo "file 없음"
fi

사용자 관리

user 삭제하기

userdel 삭제할 아이디

프로세스

ps

  • -o : 특정 필드만 보여줌
  • –sort : 정렬필드
# CPU로 정렬
ps -o pid,ucmd,uid,ucomm,comm,command,args ax  --sort pcpu 
ps -o pid,pcpu,args ax  --sort pcpu

프로세스 찾아서 Kill

# nginx 프로세스 Kill
ps aux | grep nginx |  awk '{system("kill "$2)}'

프로세스명으로 pid 찾기

ps aux | grep nginx | awk '{print $2}'

특정 파일을 사용하는 프로세스 찾는 방법

lsof | grep 파일명

파이프라인

특정 라인만 보는 방법(sed)

sed -n 28853p < test.txt

파일 대신 직접 입력한 텍스트를 넘겨주는 방법

cat 말고 다른 커맨드에서도 응용할 수 있다.

cat << EOF
hello world
EOF

파일시스템

포맷하고, 마운트하기

특정 파티션을 포맷하고, 마운트하는 명령이다.

# ext4로 포맷
mkfs.ext4 /dev/vda

# 마운트하기
mount /dev/vda /data_dir

파일명, 디렉터리명으로 찾기

# nginx.conf가 포함되어 있는 모든 위치를 출력
locate nginx.conf

find 예제

# 특정 내용을 포함하는 파일 찾기
find ./ -name "*" | xargs grep "내용"

# rsync로 최근 7주일간 변경된 파일 동기화  
find . -type f -mtime -7 -print | rsync -av --files-from=- . /dest

# 현재 디렉터리에서 5분 지난 파일 찾아서 지우기
find . -type f -cmin +5 -exec rm -f {} \;

# 특정 디렉터리 제외하고 복사하기
find SOURCE_PATH \
    -type f \
    -not -path '*EXCLUDE_PATH1*' \
    -not -path '*EXCLUDE_PATH2*' \
    -exec \
        cp --parents '{}' TARGET_PATH \;

네트워크

네트워크 정보 확인

/sbin/ifconfig -a
cat /etc/resolv.conf
/sbin/route -n
/sbin/arp -n

설정

Timezone을 KST로 변경하기

ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

시간 맞추기

타임서버를 사용해서 OS의 시간을 설정한다.

# 시간 맞추기
rdate -s time.bora.net

호스트명 변경

# 현재 호스트명 확인
hostname

# 호스트명 변경하기
vi /etc/sysconfig/network

# 네트워크 서비스 재시작
service network restart

모니터링

특정 포트로 들어오는 패킷 확인

ngrep port 80

cat으로 파일 와치하기

# 1초마다 test.json 파일 내용 출력
watch --interval 1 cat test.json

벤치마크

하드웨어 정보 확인

CPU 관련:

# CPU 속도
dmesg | grep processor

# CPU 갯수
grep -c processor /proc/cpuinfo

OS에서 사용하는 bit를 확인할 수 있다.

  • x86_64 : 64bit
  • i386, i686 : 32bit
arch

메모리 관련:

cat /proc/meminfo

하드디스크 관련:

# scsi
cat /proc/scsi/scsi

# ide
cat /proc/ide/hda/model 

# raid
cat /proc/mdstat

네트워크 관련:

cat /proc/net/netlink

ab로 사이트 응답속도 측정

이 커맨드를 사용하려면 Apache 설치가 요구된다.

# 10개의 스레드로 4번 요청. 총 요청수 : 40번
ab -n 4 -c 10 http://domain/filename.php

grep

grep 옵션

  • -f : 파일로부터 패턴을 얻는다.
  • -i : 차이가 나는 경우 무시한다. 일치하는 경우만 선택.
  • -v : 매칭되지 않는 라인을 선택한다.

ps grep 할 때 grep 자체가 포함되는 것 방지하기

-v 옵션을 사용한다.

# grep을 제외
ps aux | grep perl | grep -v grep

# watch 예제. watch에서 파이프를 쓰고 싶을 때 '를 사용
watch 'ps aux | grep nginx | grep -v grep | grep -v tail | grep -v watch'

top

특정 pid만 모니터링

top -p 23583

sed

CR 제거하기

윈도 텍스트파일에 있는 CR(캐리지 리턴)을 제거하는 방법이다.

sed -i -e 's/\r$//' test.sh

CURL

CURL로 API 호출

# GET 방식
curl -XGET  http://domain/filename.php

# POST 방식
curl -X POST  http://domain/filename.php \
    -H "Content-Type:application/json" \
    -d '{\"key\": \"value\", \"key2\": \"value2\"}'

크기 재기

wc를 사용해서 크기를 잴 수 있다.

# 크기 재는 방법
curl -XGET https://server/path | wc -c

# 압축한 크기
curl -XGET https://server/path  --compress  | wc -c

더 나은 방법으로 w 옵션을 사용할 수 있다.

# 크기 재는 방법
curl -so /dev/null https://server/path -w '%{size_download}'

# 압축한 크기
curl --compressed -so /dev/null https://server/path -w '%{size_download}'

기타

텍스트를 GZIP

# gzip 하는 방법
gzip -c -f << EOF
uncompress data
EOF

자동 입력하기

Is there a way to input automatically when running a shell?

test.sh <<!
y
pasword
!

screen 커맨드 단축키

셸에서 다중 화면을 사용할 수 있는 screen에서 사용할 수 있는 단축키.

  • C-a A : 화면 타이틀 변경
  • C-a c : 화면 생성
  • C-a 0-9 : 화면 번호로 이동
  • C-a n : 다음 화면으로 이동
  • C-a “ : 전체 화면 목록 보기

특정 계정으로 셸 실행하는 방법

su -s /bin/bash jenkins

패키지 버전 확인

cat /etc/issue

CentOS release 5.5 (Final)
Kernel \r on an \m


# 다양한 정보 출력
grep . /etc/*-release

날짜 unixtime으로 출력

date +%s
1489857490

한 번에 두가지 명령 실행하기

# home 디렉터리로 이동 후 파일목록 출력
cd /home && ls -al

# 컴파일부터 설치까지
./configure ; make ; make install

도움말 cat으로 출력

man -P cat dig

SCP

# 원격 호스트에 있는 파일 로컬의 현재 디렉터리로 복사
scp root@hostname:/usr/local/lua/lib/cjson.so .

AWK

# 메모리 파싱
free -m | awk '/Mem:/ { print $2 } /buffers\/cache/ { print $3 }'

# rpm.spec에서 버전값만 가져오기
cat rpm.spec | grep Version | awk '{ print $2 }'

# Makefile에서 사용할 때
VERSION = `cat rpm.spec | grep Version | awk '{ print $$2 }'`
echo VERSION
See Also