Linux Shell Study
cd (change deirectiory)
: 현재 작업 디렉토리를 지정한 디렉토리로 변경
cd ~
ls (list)
: 현 디렉토리의 파일 목록을 출력
ls -al, 1, h, t, r
ls -al | awk '{print $9}'
df (disk free)
: 마운트된 모든 장치에 대한 현재의 디스크 공간 통계를 출력
df -h, T, i
mkdir (make derectory)
: 디렉토리를 생성
rmdir (remove directory)
: 디렉토리를 삭제
pwd (print working directory)
: 현재 위치한 디렉토리의 절대경로를 출력
mount
: 디스크 장치를 표시하거나 가상 파일 시스템으로 지정한 디렉토리를 연결(마운트)
mount -t share 10.0.101.3/share /share
unmount /share
stat
:지정한 파일의 파일통계를 출력
touch
: 지정한 이름의 비어있는 파일을 생성하거나 파일이 있는 경우 타임스탬프를 업데이트
cat (catenote)
: 지정한 파일의 내용을 출력
head (<-> tail)
: 지정한 파일의 1라인부터 지정한 라인까지 출력 (기본지정값 10)
head -n 10
tail -f, -F(현재 쓰고있는 로그파일에 경우, 쓰기가 실행되면 다시 로드하여 출력함)
cp (copy)
: 지정한 파일을 지정한 위치와 이름으로 복사
cp -rfp 원본파일패스 /이름 복사할파일패스 /이름
mv (move)
: 지정한 파일을 지정한 위치와 이름으로 이동
rename
: 지정한 규칙에 따라 여러 개의 파일 이름을 변경
rename 변경전파일명 변경후파일명 대상파일
rename test test0 test?
rename test0 test test0?
rm (remove)
: 지정한 파일을 삭제
rm -rf
less
:상하로 커서 이동이 사능한 파일보기
ln (link)
: 지정한 파일에 대한 심볼릭링크나 하드링크를 생성
ln 옵션 링크의원본파일패스 /이름 링크파일패스 /이름
옵션이 없으면 하드링크,
-s는 심볼릭링크(윈도우의 바로가기와 같음)
paste
: 지정한 파일드의 행을 읽어 탭으로 구분하여 병합
dd (datrset dafinition)
: 블록 단위로 데이터셋을 정의하여 파일을 쓰고 읽음
dd if=인풋파일이름 of=아웃풋파일이름 bs=바이트(크기) count=블럭을복사할횟수
ibs, obs <-- bs
/dev/zero, /dev/urandom
tar (tape archive)
: 지정한 데이터 및 디렉토리를 하나의 파일로 만듬
tar -cvzf 타르볼파일명 디렉토리명/파일명
tar -xvzf 타르볼파일명
tar -tf 타르볼파일명
ps (process status)
: 시스템에서 실행 중인 프로세스에 대한 정보를 출력
ps -ef
ps aux
ps axfwwwww <-- w 갯수에 따라 출력하는 명령어 줄이 길어짐
pstree (process status tree)
: 시스템에서 실행 중인 프로세스에 대한 정보를 트리구조로 출력
top
: 프로세스 목록을 일정 시간마다 새로고침하여 화면에 출력하는 툴, 시스템 전반적인 상황을 모니터링 할 수 있음
us(유저), sy(시스템), ni(나이스값), id (유휴), wa(대기), hi(하드웨어인터럽트루틴), si(소프트웨어인터럽트루틴), st(스틸-하이퍼바이저)
1(core별), m(memory), k(kill)
nohup (no hangup)
: 쉘 스크립트 파일을 데몬 형태로 실행, 표준 출력을 지정한 파일로 리다이렉트
kill
: 지정한 프로세스에 지정한 시그널을 보내 프로세스 종료
int, term, kill
kill -2 프로세스번호
kill -INT 프로세스번호
kill -15 프로세스번호
kill -TERM 프로세스번호
kill -9 프로세스번호
kill -KILL 프로세스번호
ifconfig (interface configration)
: 네트워크 인터페이스의 활성/비활성화 및 설정
ip
: ip 관련 정보 조회 및 설정
네트워크 설정파일
/etc/sysconfig/network-scripts
/etc/network/interfaces
netstat (network statistics)
: 네트워크 프로토콜의 통계와 연결상태를 출력
netstat -nltpu
netstat -tanu
/etc/services
ss (socket statistics)
: 네트워크 소켓의 통계와 연결상태를 출력
ss -nltpu
cat /etc/redhat-release
iptables
: 패킷 필터링 도구로 패킷의 출입을 제한하는 방화벽구성이나 NAT(network address translation)구성에 사용
iptables -nL
systemctl status iptables
ufw (uncomplicated firewall)
: iptables의 제어를 쉽게 하기 위한 도구
ping
: ICMP 프로토콜의 응답 확인 도구
ping -c 횟수
wget (world wide web + get)
: 웹서버로부터 컨텐츠를 가져오는 도구
curl (client for urls)
: 다양한 프로토콜을 사용하여 데이터를 전송하게 해 주는 도구
curl -Lkso /dev/null -w "%{http_code}\n" 주소
route
: 네트워크의 경로 정보(라우팅 테이블)의 출력, 변경하는 도구
route -n
route add/del
find
: 지정한 파일명 또는 정규표현식을 이용하여 파일을 검색
find 옵션 찾기시작할패스 익스프레션
find ./ -name test
name, type f/d, perm, empty
which
: 환경변수 PATH에 등록된 디렉토리에 있는 명령어를 찾아주는 도구
echo ${PATH}
grep (global / regular expression / print)
:텍스트 검색 기능을 가진 도구, 파일이나 표준 입력을 검색하여 지정한 정규 표현식과 맞는 줄을 출력
grep 옵션 "찾을문자열" 파일명
grep -ir
-c(총 글자수), -v(특정 문자 제외)
/var/log/messages
/var/log/syslog
history
: 명령어를 수행한 목록을 출력/조작
~/.bash_history
redirection
: 표준 스트림 (stdin, stdout, stderr)을 부등호를 사용하여 지정한 위치로 보낼 수 있는 방향지정 옵션
명령 리다이렉션기호 파일명
echo a > a
echo b > a
echo zzz >> a
echo kkk >| test <-- '>'만 사용해서 쉘스크립트 작성시 에러
> 초기화, >> 추가, >| 추가(쉘스크립트)
echo
: 문자열을 출력하는 도구
echo 문자열
chmod (change mod)
: 파일이나 디렉토리의 모드(접근권한)을 변경하는 도구
chmod 권한정보 파일명
rwx421
chown (change the owner of a file)
: 파일의 소유권을 바꾸기 위한 도구
chown 소유자명:그룹명 파일/디렉토리이름
sudo (superuser do --> substitude user do
: root 사용자의 보안 권한을 이용하여 명령 또는 프로그램을 실행하는 도구
who
: 현재 시스템에 로그인한 사용자 목록을 출력
w
date
: 현재의 날짜와 시간을 출력
date -d '-1 day'
date -d '1 day ago'
week / month / hour / minute / second
연-월-일 시:분:초
date '+%Y-%m-%d %H:%M:%S'
date '+%Y%m%d'
seq (sequence)
: 지정한 규칙으로 숫자열을 출력하는 도구
seq 시작숫자 끝숫자
seq -w 1 10
seq -f %0자릿수g
more
: 한 화면씩 지정한 파일의 내용을 출력하는 도구
whatch
: 지정한 명령어를 지정한 시간(초)마다 재실행하여 화면에 출력하는 도구
crontab
: 리눅스의 잡 스케줄러의 내용을 출력하거나 편집할 수 있는 도구
crontab -l (스케줄 리스트)
crontab -e (스케줄 편집)
crontab -r (스케줄 전체 삭제)
ls -alhtr
a : 히든파일, 디렉터리 검색
l : 리스트 출력
h : 파일 용량 단위
t : 시간 순서
r : 역순 정렬
watch : default 2sec
watch -n 시간(초) "명령 옵션"
load average : 서버에 걸리는 부하
stress -c 2 -t 30
명령어 연속 실행
- 파이프라인 ( | )
: 파이프라인 왼쪽의 명령결과 표준스트림을 오른쪽 명령의 입력으로 사용
ssh root@10.0.10.100 "df -h | grep sda1"
- 세미콜론 ( ; )
: 세미콜론 왼쪽의 명령이 끝난 후 이어서 세미콜론 오른쪽의 명령을 실행
- AND 조건 ( && )
: AND 연산의 '하나라도 거짓이 있으면 전체 결과가 거짓'이라는 특성을 이용, AND 좌측 명령/테스트의 결과가 참이면 우측의 명령을 실행 (우측이 참인지 판단해야 하기 때문), AND 좌측 명령/테스트의 결과가 거짓이면 우측의 명령을 실행하지 않음 (이미 거짓이므로)
test 1 == 1 && ehco "이 문장은 조건이 참 일 경우 보입니다."
test 2 == 1 && ehco "이 문장은 조건이 참 일 경우 보입니다."
[ 1 == 1 ]
- OR 조건 ( || )
: OR 연산의 '하나라도 참이 있으면 전체 결과가 참'이라는 특성을 이용, OR 좌측 명령/테스트의 결과가 참이면 우측의 명령을 실행하지 않음 (이미 참이므로), OR 좌측 명령/테스트의 결과가 거짓이면 우측의 명령을 실행 (우측이 참인지 판단해야 하기 때문)
Q1) 다음 내용을 한 줄로 실행
- 현재위치에서 tmp디렉토리를 생성
- tmp디렉토리 안에 tmp.txt.파일을 생성
- tmp.txt 파일에 tmp라는 내용을 입력
- tmp.txt 파일의 내용을 화면에 출력
mkdir tmp;touch tmp/tmp.txt'ehco "tmp" > tmp/tmp.txt;cat tmp/tmp.txt
Q2) cent3서버의 프로세스 리스트에서 nfs 프로세스를 확인
ssh cent3
ps -ef / ps aux / ps axfwwwww
2번 결과 | grep nfs
ssh cent3 "ps -ef|grep nfs"
Q3) Q2에서 nfs 프로세스의 개수를 확인 (grep 제외)
ssh cent3 "ps -ef|grep -c nfs"
ssh cent3 "ps -ef|grep nfs|wc -l"
ssh cent3 "ps -ef|grep nfs|grep -v grep|wc -l"
ssh cent3 "ps -ef|grep nfs|grep -cv grep"
ssh cent3 "ps -ef|pgrep nfs"
ssh cent3 "ps -ef|pgrep -l nfs"
ssh cent3 "ps -ef|pgrep -c nfs"
Q4) /var/log 디렉토리 하위에서 messages로그가 있는 지 확인하고 있으면 messages 로그의 하위 15라인을 출력
test문의 조건
-e : 파일이 존재하는가
-f : 지정한 파일이 파일이면 참 그 외엔 거짓
-d : 지정한 파일이 디렉토리면 참 그 외엔 거짓
/var/log/messages 파일이 있는 지 확인 (-e)
1번이 참이면 messages로그의 마지막 15줄을 화면에 출력한다
파일없으면 아무것도 안함
[ -e /var/log/messages ] && tail -n 15 /var/log/messages
Q5) mount의 결과를 보기 편하게 정렬
mount | column -t
Q6) ss의 결과를 보기 편하게 정렬
ss | cat
nano
: 리눅스 터미널 환경에서 직관적인 사용자 인터페이스를 제공하는 편집도구
ctrl + G 도움말
ctrl + O 저장
ctrl + Y 이전페이지
ctrl + V 다음페이지
ctrl + K 잘라내기
ctrl + U 잘라내기 취소
ctrl + W 찾기
ctrl + X 나가기
vim (vi improved)
: 리눅스 터미널 환경에서 사용자 인터페이스를 제공하는 편집도구, vi의 업그레이드 버전, neovim 이라는 이름으로 vim의 refactor버전이 나옴
- 일반모드
: 이동키로 커서를 이동하거나 편집할 수 있는 모드, 각 모드로 이동하기 전의 기본모드
이동키 : h(왼쪽) j(아래) k(위) l(오른쪽)
- 입력모드
편집키 : a(현재 커서 위치의 다음부터), i(현재 위치부터 입력), o(밑 줄로 이동후 입력)
- 비주얼모드
: 일반모드에서 v, V, ctrl+v를 누른 후 범위를 지정할 수 있는 모드, 지정한 범위의 복사(y)/잘라내기(x)/삭제(d)/붙여넣기(p)가 가능
^ <-- control key (ctrl)
- ex모드
: 일반모드에서 ':', '/'를 입력하여 vim편집기 하단에서 명령 또는 검색을 할 수 있는 모드
저장과 종료
':' 입력 후 w (저장), q (종료), wq (저장 후 종료), w! (강제저장), q! (강제종료)
bash 명령어 실행
':' 입력 후 '!명령어'로 bash 명령어 실행 가능
set number ( set nu )
검색
'/' 입력 후 현재 열고있는 문서에서 찾고자 하는 문자열을 입력
n을 눌러 다음 결과로 넘어감
emacs .....
#!/bin/bash
#!/usr/bin/env python
#!/usr/bin/env perl
#!/usr/bin/env bash
명령어 패스
echo ${PATH}
쉘 스크립트
- 조건문 / 반복문
- 함수 / 배열
- 리다이렉션의 활용
- 대화식 구성 / 메뉴 구성
- 조건문
- if [ 조건문1 ] ; then
조건문1이 참일 경 실행할 명령어
elif [ 조건문2]; then <-- 조건이 필요한 경우 추가 가능
조건문1은 거짓이고 조건문2가 참일 경우 실행할 명령어
else
조건문1,2가 모두 거짓일 경우 실행할 명령어
fi
- 비교표
A -ea B : A와 B가 같은가
A -ge B : A가 B보다 크거나 같은가
A -gt B : A가 B보다 큰가
A -le B : A가 B보다 작거나 같은가
A -lt B : A가 B보다 작은가
A -ne B : A와 B가 같지 않은가
A = B : 문자 A, B가 같은가
A != B : 문자 A, B가 다른가
A < B : 문자열 A가 B보다 작은가 (바이트)
A < B : 문자열 A가 B보다 큰가 (바이트)
-n A : A의 문자열 길이가 -보다 큰가
-z A : A의 문자열의 길이가 0인가
d file : 파일이 존재하고 디렉토리인가
-e file : 파일이 존재하는가
-f file : 파일이 존재하고 파일인가
-r file : 파일이 존재하고 읽을 수 있는가
-s file : 파일이 존재하고 비어있지 않은가
-w file : 파일이 존재하고 쓰기가 가능한가
- 조건문
- case 변수 in
패턴1)
패턴1이 참일 경우 실행할 명령어;;
패턴2)
패턴2가 참일 경우 실행할 명령어;;
... <-- 패턴이 더 필요한 경우 추가
*)
위에서 지정한 모든 패턴에 해당이 안되는 경우 실행할 명령어;;
esac
- 반복문
- for 변수 in 변수에 넣을 데이터
do
데이터가 끝날 때까지 반복해서 실행할 명령어
done
- while 조건문
do
조건이 참인 동안 반복해서 실행할 명령어
done
- 함수
- function 함수명 {
명령어
}
>> grep function *.sh
함수이름 () {
명령어
}
- 배열
- 배열에 숫자 또는 문자 사용 가능
test_array=(one two three 4 5 6 7)
echo ${test_array[*]}
for i in $(seq 0 7);do echo ${test_array[${i}]};done
- 리다이렉션
- 입력/출력/에러(표준 스트림)를 지정한 곳으로 바꿔준다
- 쉘 스크립트 안에서 텍스트 파일의 활용
while { ...} < server_list
ls -al txt1 txt2 txt3 txt4
ls -al txt1 txt2 txt3 txt4 1> ok 2> ng
tee (>&cat)
tee -a (>>&cat)
- 대화식 쉘 스크립트
- 쉘 스크립트 실행 후 사용자에게 입력을 받은 숫자/문자를 처리
- 정해진 숫자 맞추기 게임
read -p
- 메뉴가 있는 쉘 스크립트
- dialog --옵션명 옵션에필요한변수
calendar 날짜를 선택하는 달력을 표시
checklist 여러 항목의 선택이 가능한 체크박스를 표시
radiolist 한 가지 항목만 선택이 가능한 라디오버튼을 효시
fselect 파일을 선택하는 창을 표시
passwordbox 입력받는 텍스트를 숨기는 입력 창을 표시
gauge 진행 비율을 나타내는 진행 바를 표시
infobox 메세지를 표시
menu 선택할 수 있는 목록을 표시
msgbox 메세지를 표시하고 ok버튼을 쵸시
yesno 메세지를 표시하고 yes, no 버튼을 표시
- CUT
: 간결한 문법으로 파일에서 문자열 필드를 뽑아내는 명령
- SED
: 텍스트 입력 스트림을 받아 출력을 제어할 수 있는 명령
옵션
-e 입력을 처리하는 하나의 처리 명령을 의미, 여러번 지정하여 여러번의 처리가 가능
-f file 사전에 명령을 추가한 파일을 지정하여 명령을 수행
-n 각 명령의 결과를 화면에 출력하지 않고 print 명령을 대기
-r 확장된 정규표현식을 사용
문자열 처리 명령어
명령어 // 이름 // 내용
[텍스트라인 -범위]/p // print // 출력
[텍스트라인 -범위]/d // delete // 삭제
s/소스패턴/결과패턴/ // substitute // 한 줄에서 처음 나타나는 소스패턴을 결과패턴으로 치환
[텍스트라인 -범위]s/소스패턴/결과패턴/ // subsitute // 지정한 범위에서 처음 나타나는 소스패턴을 결과패턴으로 치환
[텍스트라인 -범위]y/소스패턴/결과패턴/ // transform // 지정한 범위에서 소스패턴을 결과패턴으로 바꿈 (문자 수가 같아야함)
명령어처리_스크립트/g // global // 명령어처리 스크립트의 모든 소스패턴을 결과패턴으로 변경
echo "이것은 테스트 문장입니다." | sed 's/테스트/test/'
sed 's/테스트/sed test/' data.txt
sed '3,5s/테스트/sed test/' data.txt
sed '3,5d' data.txt
sed 's/테스트/sed test/w data2.txt' data.txt
sed -e 's/테스트/test/; s/문장/문자열/' data.txt
sed -n 's/테스트/test/' data.txt
sed -n 's/테스트/test/p' data.txt
sed -n '/검색어/p' 파일명
# cat two.sed
s/테스트/sed test/
s/문장/문자열/
sed -f two.sed data.txt
- AWK
: sed기능 + 변수 /함수 /연산자를 사용하여 필요한 데이터를 제어할 수 있는 프로그래밍이 가능한 명령
- 정규표현식
- 텍스트의 패턴을 특수문자 등을 사용하여 표현한 것
메타문자 // 의미 // 매칭 가능한 문자열
A* // A다음에 0개 이상의 문자를 매칭 // A Aa Abc A13cg ...
A? // A다음에 1개의 문자를 매칭 // Aa Ab Ac A1 Az ...
^A // A로 시작하는 문자열 // Abcde Avoid Attack ...
A$ // A로 끝나는 문자열 // A bA cdgdA abcdefA ...
A|B // A 또는 B가 있음을 의미 // c[A|B]f : cAf cBf
[a-z] // a부터 z까지 알파벳의 범위를 매칭 // a b c d e ...
ls -1 a*
find . -type f -iname "t*"
find . -iname "txt?"
find . -iname "t[x|z]t"
ls -al txt[0-9]
ls -al txt[0-9][0-9]
sed -n '/^3/p' data.txt
sed -n '/c$/p' txt1
- awk
- awk 옵션 읽어들일_파일명
-F 필드구분자 // 필드를 구분하기 위한 구분자를 지정
-f 파일이름 // awk프로그램이 읽어들일 파일 이름을 지정
-변수 =변수값 // awk프로그램에서 사용할 변수를 지정
awk '{print $1} txt13
awk '{print $1} txt13 | grep ccc
awk '/ccc/ {print $1} txt13
grep 111 txt13 | awk '{print $3}'
awl '/111/ {print $3}' txt13
awk -F: '{print $1}' colon_txt13
awk '{print $1}' /etc/passwd
awk -F: '{print $1}' /etc/passwd
uptime | awk '{print $10, $11, $12}'
uptime | awk -Faverage: '{print $2}'
df | awk -f df_chk.awk | grep \/
- 트러블 슈팅이란?
발생한 트러블(문제)를 슈팅(해결)하는 것
- 웹서버에서 자주 일어나는 장애 유형
- 디스크 풀
로그를 기록하는 프로세스가 에러 또는 멈춘다
임시 파일을 생성해야 하는 명령어의 실행이 안도니다
리눅스는 루트 유저만을 위한 예약 블록을 남겨두어 트러블슈팅이 가능하도록 설계
- 메모리 풀
- 메모리를 다 쓰고 스왑 영역까지 사용하여 시스템이 느려져 유저에게 응답이 느려짐
- 시스템 부하
- 로드 에버리지가 cpu코어 개수보다 높은 경우 유저 요청에 대한 응답이 늦어짐
- 프로그램의 문제
- 프로그램 오동작
du -h --max-depth=1
du -h --max-depth=1 2>/dev/null
du -sh * | grep G
ls -alh | grep G
) 로그 파일 크기 감시
watch -n 5 'ls -alh | grep log_name'
watch -n 3 'ls -al /var/log/nginx | grep VWS.access.log'
) 디스크 사용량 감시
watch -n 5 'df -h'
df, du ,crontab, awk 응용
df -h | awk '{print $1, $2, $3, $4, $5, $6}' | column -t
df -h | awk '{gsub("%", "$"); print $5}'
du -m /var/log/nginx | awk '{print $1}'
df -h | awk '{print $5}' | awk -F% '{print $1}' | grep -v "^[A-Z]"
df -h | awk '{gsub("%",""); print $5, $6}' | column -t
df -h | awk '{gsub("%",""); USE=$5; MNT=$6; print USE, MNT}' | column -t
df -h | awk '{gsub("%",""); USE=$5; MNT=$6; if ( USE > 80 ) print USE, MNT}' | column -t
df -h | awk '{gsub("%",""); USE=$5; MNT=$6; if ( USE > 80 ) print USE, MNT}' | column -t | grep -v "^[A-Z]"
df -h | awk '{gsub("%",""); USE=$5; MNT=$6; if ( USE > 80 ) print MNT,"파티션이 ",USE,"%를 사용 중입니다."}' | grep -v "^[A-Z]"
crontab
분 시간 일 월 요일 실행할프로그램 // 0,7일 1월 2화 3수 4목 5금 6토
crontab -e, -l, -r(삭제 옵션 이므로 사용 주의)
# 로그 디렉토리 감시 스크립트
00 * * * * /root/tmp/monitor/log_min.sh >/dev/null 2>&1
# 디스크 파티션 감시 스크립트
30 * * * * /root/tmp/monitor/part_mon.sh >/dev/null 2>&1
- 백업
tar
-p : 퍼미션 유지
-P : 절대경로 유지
mariabackup
- 무엇을
웹 : 웹소스, 서버 주요 설정 >> tar볼로 묶어서 보관
데이터베이스 : 데이터, 서버 주요 설정 >> db 덤프는 maria 전용 백업 툴 mariabackup을 사용
스토리지 : 서버 주요 설정 >> 스토리지는 데이터 용량이 크기 때문에 향후 스토리지 이중화 등을 통해 데이터 안전성을 확보
- 언제
하루 한 번 트래픽이 가장 적은 시간 대 >> 새벽 3시 ~ 5시
- 어디에
스토리지의 BACKUP 디렉토리 (각 서버 이름(hostname) 디렉토리) >> /mnt/BACKUP/서버의호스트이름
ls -al web_backup.sh | awk '{print $5}'
ls -al web_backup.sh | awk '{print $9}'
ls -1 web_backup.sh
scp -rp web_backup.sh storage_backup.sh
# 웹서버 백업
00 04 * * * /root/tmp/BACKUP/web_backup.sh >/dev/null 2>&1
# 스토리지(nfs)서버 백업
00 04 * * * /root/tmp/BACKUP/storage_backup.sh >/dev/null 2>&1
# DB서버 백업
00 04 * * * /root/tmp/BACKUP/db_backup.sh >/dev/null 2>&1
- 제한적인 쉘 스크립트 작성에 대해
- set -exuo pipefail
e : errexit, 첫번째 실행 실패(exit코드가 0이 아닌 상태로 종료하는 명령어)시 쉘 스크립트 종료
x : xtrace, 매 라인을 실행하기 전에 필요한 산술확장, 매개변수확장, 명령치환, 변수대입 등을 화면에 출력
u : nounset, 정의가 안 된 변수를 사용하면 에러 메세지를 출력하고 쉘 프로그램 강제 종료
o : 옵션을 on/off 할 수 있다
set -o [옵션명] : 옵션 on
set +o [옵션명] : 옵션 off
pipefail : 옵션명, 파이프로 연결된 명령이 전부 true일 때만 true를 반환하도록 함
- 장애 원인 찾기
- 웹서버
df로 용량 확인
로그 용량 확인
du로 디렉토리별 용량 확인
백업 파일을 로컬에 저장중 --> 문제
- 왜 스토리지가 아닌 로컬에 백업 파일을 저장했나?
백업 쉘 스크립트 확인
스토리지 마운트 부분 오타로 마운트 실패
- 같은 쉘 스크립트를 복사해서 사용했기 때문에 데이터베이스 서버의 원인도 같은 것으로 여겨짐
데이터베이스 서버에 접속해서 확인
- 장애 원인 파악
set -exuo pipefail
백업 디스크 감시 스크립트 : 하루에 한번, 백업이 끝난 이후에
# DB서버 백업
00 05 * * * /root/tmp/monitor/mnt_mon.sh >/dev/null 2>&1
find ./ -name test
stat 111
touch -t 2012121000 111
find ./ -mtime -10
find ./ -mtime +3 -exec rm {} \;
1. 명령어 옵션을 활용한 팁
1-1. 보기쉽게 명령 결과를 정렬
- column
mount(ls -al ...) |column -t
ls -al |column -t
df -h |column -t
1-2. 메모리 많이 사용하는 프로세스 top 10
- ps aux |sort -nr -k 4 |head -10
1-3. 특정 시간이 지나면 명령어를 자동 종료
timeout Ns COMMAND
2. 문법을 활용한 팁
2-1. 현재 위치 하위의 디렉토리별 파일 수 카운트
- find . -xdev -type d -exec /bin/echo -n "{} : " \; -exec sh -c "ls {} | wc -l" \;
-xdev >> 로컬에 있는 파일시스템만 검색
2-2. 어떤 프로세스가 io interrupt를 기다리고 있는지 확인
- while true; do date; ps auxf |awk '{if($8=="D") print $0;}'; sleep 1; done
2-3. 특정한 프로그램(프로세스명)이 전체 메모리의 몇 퍼센트를 사용하는지 확인
- ps -eo pmem,comm |grep -i "PROCESS_NAME" |awk '{sum+=$1} END {print sum "% os MEMORY"}'