태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

단순백업

~# mysqldump 데이터베이스명 -u root -p패스워드 > backup.sql

~# mysqldump --all-databases -u root -p패스워드 > backup.sql


사용자별 백업

계정명을 가져옴
echo "show databases" | mysql -u root -pshell | grep -v Database`

활용예

#!/bin/bash
to_dir="/home/sysadmin/"
today=`date +%Y%m%d`
tmp_dir="${to_dir}${today}/"
A=`echo "show databases" | mysql -u root -p패스워드 | grep -v Database`
mkdir ${tmp_dir}
for i in `echo $A`
do
    mysqldump ${i} -u root -p패스워드 > ${tmp_dir}${i}.sql
done
tar cfz ${to_dir}${today}MySQL.tar.gz ${tmp_dir} 2>/dev/null
rm -rf $tmp_dir
단순백업

#!/bin/bash

from_dir="/home/sysadmin/WWW"   백업할디렉토리
to_dir="/home/sysadmin"   백업받을디렉토리

today=`date +%Y%m%d`   백업파일명을 날짜로 사용
to_file=${today}.tar.gz
tar cvfz ${to_dir}${to_file} ${from_dir}
split -b 650m ${to_dir}${to_file} ${to_dir}${today}   파일을 650메가씩 분할
rm -f ${to_dir}${to_file}



변경된 부분만 백업 (tar -N 옵션 사용)

(예) 2010년 01월 01일 이후 변경된 파일들만 백업
tar cvfz backup.tar.gz -N 20100101 /경로

활용예

#!/bin/bash

from_dir="/home/sysadmin/WWW"   백업할디렉토리
to_dir="/home/sysadmin"   백업받을디렉토리

today=`date +%Y%m%d`   백업파일명을 날짜로 사용
to_file=${today}.tar.gz
tar cvfz ${to_dir}${to_file} -N `cat ./last_date` ${from_dir}   이전 작업시 저장된백업날짜를 호출
split -b 650m ${to_dir}${to_file} ${to_dir}${today}   파일을 650메가씩 분할
rm -f ${to_dir}${to_file}   백업날짜를 저장


사용별 백업

/etc/passwd 파일에서, 사용자(UID 500이상)의 계정명과 홈디렉토리 위치를 가져옴
cat /etc/passwd | sed -e 's/::/:imsy:/g' | sed -e 's/ //g' | sed -e 's/:/ /g' | awk '$3 >= 500 {print $1,$6}'

활용예

#!/bin/bash
to_dir="/home/sysadmin"   백업받을디렉토리

cat /etc/passwd | sed -e 's/::/:imsy:/g' | sed -e 's/ //g' | sed -e 's/:/ /g' | awk '$3 >= 500 {print $1,$6}' > "$tmpfile"
today=`date +%Y%m%d`   백업파일명을 날짜로 사용
to_file=${today}.tar.gz

from_dir=`awk '{print $2}' "$tmpfile"`   백업할디렉토리

for i in `echo "$from_dir"`
do
    account=`grep "$i" "$tmpfile" | awk '{print $1}'`
    tar cfz ${to_dir}${account}${to_file} ${i} 2>/dev/null
    split -b 650m ${to_dir}${account}${to_file} ${to_dir}${account}${today}   파일을 650메가씩 분할
    rm -f ${to_dir}${account}${to_file}
done
rm -f "$tmpfile"



① 금년도 현재 "월" 출력

~# cal




② 지정년도 지정월 출력


~# cal 5 1982




③ 지정년도 전체 출력

~# cal 2010


쉘스크립트 - FTP 파일송수신 예제
#!/bin/bash

URL="서버주소"
ID="아이디"
PASS="비밀번호"
DIR="/"
FILE="파일이름"
echo "open $URL
user $ID $PASS
cd $DIR
tick
get $FILE
quit" > temp.tmp
ftp -n < temp.tmp
rm -f temp.tmp


# 서버주소입력 (예) whenji.com
# 계정아이디입력
# 계정비밀번호입력
# 파일이있는 경로입력
# 파일이름입력





# tick : 파일전송시 실시간으로 용량표시
# get : 파일다운로드 명령어 / put 명령어로 파일을 업로드할 수 있다.


# -n : 자동로그인 활성화 옵션
 

사용자 정의 함수 대입변수는 argument 방법과 동일 ($1 $2 $3 ...)
함수명()
{
        .................
}
예제




gugudan()
{
  num=$1
  i=1
  while [ $i -lt 10 ]
  do
    answer=`expr $num \* $i`
    echo "$num X $i = $answer"
    i=`expr $i + 1`
  done
}

gugudan 2
gugudan 3
 
크기비교 [공백 공백] 주의
[ $A -gt $B ]
[ $A -lt $B ]
[ $A -ge $B ]
[ $A -le $B ]
[ $A -eq $B ]
[ $A -ne $B ]
A값이 B값보다 크다.
A값이 B값보다 작다.
A값이 B값보다 크거나 같다.
A값이 B값보다 작거나 같다.
A값과 B값이 같다.
A값과 B값이 다르다.

expr


연산
= 양쪽에 공백이 없어야 합니다.
각 연산자와 숫자, 변수 사이에는 Space가 있어야 합니다.
곱하기*, 괄호(){} 기호는 역슬레시와 같이 사용해야 합니다.
+
-
*
/
%
더하기
빼기
곱하기
나누기를 한 후의 몫의 값
나누기를 한 후의 나머지 값
예제
num=`expr $num1 + 1`
num=`expr $num + \( 2 \* 5 \) / 1 + 1`

문자열비교 [공백 공백] 주의
[ "A" = "B" ]
[ "A" != "B" ]
[ -z "A" ]
[ -n "A" ]
두 문자열이 같은 경우
두 문자열이 다른 경우
문자열의 길이가 0인 경우
문자열의 길이가 0이 아닌 경우

파일다루기 [공백 공백] 주의
[ -f 파일명 ]
[ -s 파일명 ]
[ -d 파일명 ]
[ -r 파일명 ]
[ -w 파일명 ]
[ -x 파일명 ]
[ ! -옵션 파일명 ]
파일이 있는 경우
파일이 존재하고 내용이 있는 경우
파일이 아니고 디렉토리인 경우
읽기가 가능한 파일인 경우
쓰기가 가능한 파일인 경우
파일이 존재하고 실행 가능한 경우
옵션의 조건이 아닐 경우
예제


if [ -s $filename ]
then
      tail $filename
fi

조건문
if [ 조건문 ]
then
        .................
elif [ 조건문 ]
then
        .................
else
        .................
fi

관계연산자 [공백 공백] 주의
-a
-o
and
or
예제


if [ 조건문 -o 조건문 ]
then
      tail $filename
fi

for 일반적인 for 문과 다름
for 변수명 in 변수값1 변수값2 변수값3
do
        .................
done
예제


for fruit in apple banana grape
do
    echo $fruit
done

while [공백 공백] 주의
while [ 조건문 ]
do
        .................
done
예제






num=9
i=1
while [ $i -lt 10 ]
do
  answer=`expr $num \* $i`
  echo "$num X $i = $answer"
  i=`expr $i + 1`
done

until
while문과는 반대로 조건문이 거짓이면 실행, 참이면 반복을 중지
[공백 공백] 주의
until [ 조건문 ]
do
        .................
done
예제






num=9
i=1
until [ $i -gt 10 ]
do
  answer=`expr $num \* $i`
  echo "$num X $i = $answer"
  i=`expr $i + 1`
done

case 패턴의 각 실행문의 끝은, ;;를 사용합니다.
| 를 사용하여 여러개의 패턴을 사용할 수 있습니다.
case 변수 in
패턴1)
        .................
        ;;
패턴2)
        .................
        ;;
*)
        .................
        ;;
esac
예제












A=a
case "$A" in
a|A)
  echo "a or A."
  exit
  ;;
b|B)
  echo "b or B."
  exit
  ;;
*)
  echo "(a, A, b, B ) not."
  exit
  ;;
esac

continue  조건문으로 돌아감 

beak  반복문을 강제로 종료
현재 지정된 PATH 경로 보기

~# echo$PATH

PATH 지정하기

각 계정 디렉토리의 .bash_profile 에서 지정

쉘스크립트의 첫 라인에 #!/bin/bash 를 기제하는 이유

쉘스크립트 작성시, 가장 첫 라인에 #!/bin/bash 를 기제하는 이유는, 스크립트 파일이 bash 쉘로 실행시킨다는 의미입니다. 같은 원리로 tcsh 쉘로 실행시키려면, 첫라인은 #!/bin/tcsh 로 시작해야 합니다.

!/bin/bash 를 기제를 하지 않아도 실행된다면, 이는 리눅스 배포판은 기본적으로 bash 쉘로 설정되어있어서 동일한 bash 쉘상에서 무리없이 작동되는 경우입니다. !/bain/bash 를 지정해서, bash 쉘 파일임을 미리 알려주는 것이 다른 쉘간의 오류를 방지하는 방법입니다.

(참고)
쉘스크립트에서 #는 주석기호이지만, 첫라인의 #!/bin/bash 에서의 #은 주석기호가 아니라는 점..

bash 와 sh 를 혼용해도 될까요?

결론적으로 모두 같은 의미입니다.
#!/bin/bash
#!/bin/sh

SSH / Telnet 상에서 아래 명령어를 입력해보세요.
ls -al /bin/sh

실행결과 : /bin/sh -> bash

즉, sh 가 bash 의 심볼릭링크로 설정되어있으므로, 서로 혼용해서 사용해도 된다는 의미입니다.

쉘은 커널(Kernel)과 사용자(USER) 사이를 이어주는 일종의 유틸리티입니다.
쉘의 종류는 여러가지가 있고, 대부분의 리눅스 배포판에서는 배시(bash)쉘을 기본으로 사용하고 있습니다.

쉘(Shell)의 종류

① Bourne Shall (sh)
② C Shell (csh)
③ Korn Shell (ksh)
Bourne Agine Shell (bash)
⑤ TC Shall (tcsh)


사용하고 있는 쉘을 확인하려면

~# echo $SHELL


사용할 수 있는 쉘(리눅스에 설치되어진 쉘)을 확인하려면

~# cat /etc/shells


로그인시 기본쉘을 지정하려면..

~# vi/etc/passwd

USBR 마지막부분에, /bin/sh (또는 /bin/bash) 부분이 기본쉘로 지정된 부분입니다.
이부분을, /bin/tcsh로 변경하면, 다음 로그인부터는 TC Shell을 기본쉘로 사용하게 됩니다.
cat [옵션] 파일내용출력
-n 라인번호 출력

cat [옵션] > 파일이름 새로운 파일생성
-n 라인번호 출력
Ctrl + D 종료

head [옵션] 파일이름 파일의 처음부분 출력
-라인수
-n라인수
앞에서부터 라인수만큼 출력
상동

tail [옵션] 파일이름 파일의 끝부분 출력
옵션미지정시 기본값
-라인수
+라인수
-f
응용
3번라인~15번라인
파일의 끝에서부터 10라인 출력
파일의 끝에서부터 라인수만큼 출력
파일의 처음 라인수 부분부터 끝까지 출력
파일의 끝부분에 추가되는 부분을 계속해서 표시 (시스템 로그파일 실시간 감시 등)

tail +3 파일명 | head -15

cut [옵션] 파일이름 특정 필드 추출
-c
-d 구분자
-f 구분자
문자수로 열을 계산해서 출력
필드 구분자를 사용
파일 내의 필드로 따져서 추출
응용 cut -d : -f 1,3-4 /etc/passwd (필드구분자: 첫번째필드와, 세번째부터 네번째필드 출력)
cut -d : -f 1,3-4 /etc/passwd | tail -5 (상동 마지막5개출력)

paste [옵션] 파일이름 파일이름 여러파일의 내용을 하나로 합쳐서 출력
-s
-d
각 파일의 내용을 한 줄로 출력
출력되는 내용의 구분자를 지정

diff [옵션] 파일이름 파일이름 파일의 내용 비교 후, 다른 부분을 출력
-b
-q
Space는 무시하고 비교
파일이 서로 다른 경우, 출력은 하지 않고 다르다는 메시지만 출력

clear
Ctrl + l
화면을 깨씃이 지움

grep [옵션] [패턴] 파일이름 특정 단어나 문장등을 검색 (파일이름에 * 가능)
-v
-i
-n
l
패턴을 포함하지 않는 행을 출력
대소문자를 구분하지 않음
라인번호를 출력
파일명을 출력
패턴형식
[abcd]
[a-c]
[0-9]
'^d'
'문자열$'
 
a 또는 b 또는 c 또는 d가 있는 라인
상동
0 또는 1 또는 ... 9가 있는 라인
서브리렉토리 출력 (예 ls -l /home | grep '^d')
문자열로 끝나는 파일 또는 디렉토리 출력  (예 ls -l /home | grep 'c$')

sort [옵션] 파일이름 파일에서 필드를 추출하고 정렬
옵션미지정시 기본값
-f
-r
-b
-k
-t 구분자
-n
첫번째 필드를 기준으로 오름차순정렬
대소문자를 구분하지 않음
내림차순정렬
Space는 무시
정렬의 기준이 되는 필드를 지정
필드 구분자로, 구분자를 지정
숫자 순서로 정렬
응용


☞ 필드구분자: 세번째필드를기준으로, 숫자를 내림차순으로 정렬
sort -t : -k3 -n -r /etc/passwd 
☞ 필드구분자: 세번째필드를기준으로, 숫자를 내림차순으로 정렬 + 상위 10라인 출력
sort -t : -k3 -n -r /etc/passwd | head

sed [옵션] 파일이름 파일의 문자열을 입력/수정
p
d
^
$
-f
's/가/나/g'
-n 's/가/나/gp'
-e

-q
원하는 내용을 출력 (-n 옵션과 같이 사용할 경우, 선택된 행만 출력)
선택한 행을 삭제 ('1,3d' 1번라인부터 3번라인까지 삭제하고 출력)
첫 라인을 의미 (sed 's/^$/빈문서입니다/g' 파일명)
마지막 라인을 의미 ('10,$d' 10라인부터 파일 끝까지 삭제하고, 출력)
파일 안의 내용일 실행
'가' 문자열을 '나' 문자열로 대체 (단어만 변경하려면, <> 로 묶어줌)
상동 + 변경된 라이만 출력
다중편집(명령어 중복사용)
sed -e 's/가/나/g' -e 's/다/라/g' 파일명
종료 ('10q' 10라인까지 출력후 종료)

awk  특정 패턴의 조작/검색 (전문문서참조)
id 사용자 정보출력

who (= 간단한정보)  w (= 작업내용) 현재 접속자 출력 파일의 리스트(list)를 출력 

df [옵션] 하드디스크의 사용정보출력 
i
k
m
h
T
inode로 디스크 정보출력
KB 단위로 출력
MB 단위로 출력
파일을 보기쉬운 용량으로 출력
파일시스템의 정보를 출력

du [옵션] [디렉토리] 하드디스크/디렉토리의 사용용량출력
k
m
h
s
KB 단위로 출력
MB 단위로 출력
파일을 보기쉬운 용랴으로 출력
하위디렉토리까지 계산하여 출력

ps [옵션] 실행중인 프로세스 출력 (예 ps aux | grep sshd)
a
u
x
l
다른사요자의 프로세스포함
실행시킨 유저와 시간을 출력
터미널의 제어없이 프로세스의 상태출력
상세정보 출력
STAT
R
S
Z
D
T
 
Running - 프로세스가 실행되고 있는 상태
Sleeping - 실행을 잠시 쉬고 있는 상태
Zombie - 완전히 죽어있는 상태
Disk wait - 인터럽트가 죽어있는 상태
Traced or stopped - 프로세스의 실행이 정지되어 흔적만 남아있는 상태

kill -시그널번호 PID 프로세스 강제종료
-l
-1
-9
시그널 목록출력
프로세스 재실행
프로세스 강제종료

top 실행중인 프로세스들의 CPU사용량, 메모리사용량을 출력 (5초단위 갱신)
Space
h
r
s
M
P
q
화면갱신
도움말 출력
Nice 값 변경
화면 갱신 시간설정 (초단위/기본값:5초)
메모리 사용량 순서로 정렬
CPU 사용량 순서로 정렬 (기본값)
종료
PID
USER
PR
NI
VIRT
RES
SHR
S
%CPU
%MEM
TIME+
COMMAND
프로세스 ID
프로세스 소유자(실행자)
Priority. 우선순위
Nice 값 (-20~-19사이의 값으로, 작을수록 우선순위가 높음)
프로세스의 코드와 데이터의 크기 (KB단위)
프로세스가 사용주인 실제 메모리의 양
프로세스가 사용중인 공유 메모리의 양
프로세스의 상태
CPU 사용량
메모리 사용량
프로세스가 실행되고 있는 시간
프로세스를 실행한 명령어

sleep 시간 시간지연
10분
10시간
10일
10m
10h
10d

chkconfig
chkconfig --list 데몬이름
chkconfig --list | grep 이름
chkconfig --level 런레벨번호 데몬이름 on/off
부팅시 데몬자동실행 설정


렌레벨 3=on : 부팅시 자동실행
예. chkconfig --level 345 sendmail on
-p
-r
원본정보(소유권등)를 그대로 복사안의 모든 파일을 복사

crontab [옵션] 예약작업관리
-e
-l
-r
예약작업 내용을 입력
예약된 작업 목록출력
예약작업 내용을 삭제

telnet 서버주소 [포트번호] 다른시스템의 telnet 접속

ftp 서버주소 [포트번호] 다른시스템의 ftp 접속
?
ascii 또는 as
binary 또는 bi

cd
delete

ls
lcd

mget
get 파일명
put 파일명

hash
bye
사용가능한 명령어 출력
파일 전송타입을 ascii타입으로 전환
파일 전송타입을 binary타입으로 전환

디렉토리 이동
파일삭제

파일 및 디렉토리 리스트 출력
현재 시스템의 디렉토리 출력

파일 다운로드 (디렉토리 모든파일 다운로드 = 와일드문자 * 사용가능)
파일 다운 (파일명에 공백이 있으면 ""를 사용할 것) 
파일 업로드 (파일명에 공백이 있으면 ""를 사용할 것)

전송과정을 해쉬문자(#)로 보여줌
접속종료
pwd  현재 경로 표시 

ls  파일의 리스트(list)를 출력 
-a --all
-c
-i
-l
-t
모든 파일 보기
파일을 최근 변경 시간으로 정렬
파일의 inode값 보이기
퍼미션, 크기, 사이즈 등의 자세한 정보 보기
최근 파일로부터 정렬하여 출력

cd 디렉토리 변경 
~
-
..
홈디렉토리로 이동
1단계 전의 디렉토리로 이동
상위 디렉토리로 이동

mkdir / rmdir 디렉토리생성 / 디렉토리삭제
-p
하위 디렉토리까지 한번에 생성 / 삭제

touch 새로운 파일생성

cp [옵션] 원본파일명 복사할디렉토리 파일복사
-p
-r
원본정보(소유권등)를 그대로 복사
하위디렉토리 안의 모든 파일을 복사

mv [옵션] 원본파일명 대상디렉토리(또는 파일명) 파일이동 또는 이름변경
-f
대상 파일이 있는 경우, 강제로 닾어쓰기

rm [옵션] 파일명 파일삭제
-r
-f
하위 디렉토리 및 파일들을 모두 삭제
묻지 않고, 강제로 삭제

find 디렉토리 [옵션] 파일명 파일검색
-name [패턴]
-amin ○
-atime ○
-cmin ○
-ctime ○
패턴 형식으로 되어있는 파일
○분전에 최종 접근된 파일
○일 전에 최종 접근된 파일
○분전에 최종 변경된 파일
○일전에 최종 변경된 파일

split [옵션] 분할할파일명 생성될파일명 파일분할
-b
-l
파일을 byte 단위로 분할 (예 split -b 500mb 분할할파일명 생성될파일명)
파일을 지정한 라인수 단위로 분할 (미지정시 1000라인단위)

wc [옵션] 파일명 파일 내의 문자/라인/단어단어 수 출력
-c
-l
-w
젠체 문자의 수 출력
전체 라인의 수 출력
전체 단어의 수 출력

date [옵션] [+포맷] 날짜/시간출력

%
"-"
_

%a
%A
%b
%B
%c
%d
%D
%e
%h
%H
%I
%j
%k
%l
%m
%M
%p
%r
%s
%S
%T
%U
%V
%W
%w
%x
%X
%y
%Y

문자 그 자체를 의미합니다.
필드를 채우지 않는다. ( 기본적으로 0으로 채운다 )
필드를 공백으로 채운다.
약식 요일 이름 (Sun...Sat)
환전한 요일 표현 (Sunday....Saturday)
약식 월 이름 (Jan...Dec)
완전한 월을 표현 (January......December)
날짜와 시간 ([요일] [day] [Month] [Years] [hh:mm:ss] [오전or오후]
월 기준 일 (01....31)
%M/%D/%Y 날짜 표현식
그 달의 날짜
%b 와 같은 의미입니다.
24시간 표현형식 (00...23)
12시간 표현형식 (01....12)
년기준일- (001...365)
24시간 기준 (1.....12)
12시간 표현형식 (1....12)
년 기준 월 (01....12)
분 표현 (00.....59)
AM or PM
12시간 표현형식 (hh:mm:ss[AM | PM]
1970-01-01 00:00:00 부터 경과된 초
초 표현 (00......59)
%h:%m:%s 형태의 시간표현
년 기준 주일의 숫자 (일요일을 주일의 시작, 00.....53)
년 기준 주일의 숫자 (월요일을 주일의 시작, 01.....52)
년 기준 주일의 숫자 (월요일을 주일의 시작, 00.....53)
요일의 숫자 ( 일요일은 0 )
로케일의 날짜 표현식 (mm/dd/yy)
정의한 시간의 표현 ( %h:%m:%s )
년 표현의 뒷 2자리 (00-99)
년 표현의 네 자리 숫자 ( 예 : 2002 )

chown / chgrp 파일/디렉토리의 소유자/소유그룹변경
-R
하위 디렉토리 및 파일들도 모두 변경

chmod 권한(퍼미션)설정
-R
하위 디렉토리 및 파일들도 모두 변경