자주 사용하는 리눅스 셸 명령어, 설정 모음
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