글을 앞서
해당 글은 '만화로 배우는 리눅스 시스템 관리' 1권을 정리하는 글로, 앞으로 2권도 읽게 되면 추가로 내용을 채워갈 예정입니다.
# 앞 선 포스팅도 읽어주세요~
https://brenden.tistory.com/85
리눅스(Linux) 명령어 학습 - (1)
글을 앞서 이동욱님 블로그를 보다가 '만화로 배우는 리눅스 시스템 관리' 책을 알게 되어 이 책을 통해 리눅스를 공부하겠다 싶었습니다. (https://jojoldu.tistory.com/36?category=717427) 해당 글은 '만화로..
brenden.tistory.com
13화 [파이프라인] 로그 파일에서 필요한 줄만 뽑고 싶어
- 파이프라인(|)을 통해 명령어 양쪽을 연결해서 사용
- 가공하는 작업을 진행할 때 자주 사용된다.
- 파일 내용을 다음 명령어에 출력하는 시작 그룹 : cat, zcat, xzcat, tail -F
- 중간에서 이전 명령어 출력을 가공하는 중간 그룹 : grep, sort, cut, uniq, sed, awk
- 이전 명령어 출력을 가공하는 최종 그룹 : less, tee, wc, head
1
2
3
4
5
|
# grep 옵션 (-v, 해당 문자열을 포함하지 않은 줄 출력 | -r, 재귀적으로 호출)
# grep <찾을 내용> <대상 파일 및 디렉토리>
grep "brenden" /home/brenden | grep -v "/live" | less
|
14화 [셸 스크립트] 작업 절차를 자동화하고 싶어
- 셸 스크립트 : 셸 작업을 자동화하도록 만든 각본 (명령어 실행 절차)
- 셔뱅 : Hash-Bang이라고 하고, '#!/bin/bash' 와 같이 스크립트를 실행하는 인터프리터를 지정하는 구문
- 'chmod +x setup.sh' : 실행권한을 설정해야된다
- /bin/ or /usr/bin/ 장소 외에는 실행하려는 경로를 모두 작성해 주어야 된다
- 명령어 이상이 있을 경우, 스크립트 실행을 중단하고 싶을 때
- 기존 셸과는 별도의 스크립트 실행용 프로세스가 생겨서 exit하는 것이기 때문에 아래 코드가 정상적이다~
1
2
|
# 이전 명령어가 정상 종료했는지 확인 // 이상종료했을 경우 스크립트 실행을 중단
if [ $? != 0 ]; then exit; fi
|
cs |
15화 [셸 변수] 같은 문자열을 스크립트에서 재사용하고 싶어
- 일괄수정
- %s/원문/수정문/
- 변수
- ${변수명} or $변수 로 참조하여 쓸 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 예제1) 실행 옵션등도 변수로 지정 가능, eval을 통해 문자열로 명령어열로 실행 가능
extract="tar xfv"
compress="tar cfv"
eval "$extract file.tar.gz"
eval "$compress directory"
# 예제2) 숫자도 변수로
days=30
# 예제3) 디렉토리 경로도 분할
base=/a/b/c
latest=${base}/d/e
|
cs |
16화 [환경 변수] 작업 환경과 상태를 정해서 스크립트를 실행하고 싶어
- 환경 변수를 사용하면 셸 스크립트를 실행 시 값이 변하므로 환경에 맞는 처리가 가능하다.
- 명령어 치환 : $(명령어열) or '명령어열'이라고 적으면 명령어열 실행 결과를 문자열로 적는 것과 같아진다.
- 파이프라인이나 변수 등도 명령어 치환에서 사용 가능
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 환경변수 확인
env
# 자주 사용하는 환경변수
HOME : 홈 디렉토리 경로
PWD : 현재 디렉토리 경로
EDITOR : vim, nano 등
PAGER : less, lv 등
USER : 현재 사용자의 사용자명
GROUP : 현재 사용자의 그룹명
HOSTNAME : 머신의 호스트명
# 명령어 치환
today = $(date +%Y - %m - %d)
grandparent = $(dirname $(dirname $path))
|
cs |
20화 [명령줄 인수] 명령줄 지정으로 작업 내용을 바꾸고 싶어
- 아래와 같은 예시로 같이 확인해요~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# $1, $2, $3 인수를 사용하는 방법
#!/bin/bash
source=$1
target=$2
#!/bin/bash
while getopts s:t: OPT
do
case $OPT in
s) source="$OPTARG" ;;
t) target="OPTARG" ;;
esac
done
|
cs |
21화 [if (조건분기)] 조건에 따라 처리 흐름을 바꾸고 싶어
- 조건 분기를 할 때 사용하며, 아래 예제를 보기고 같이 적용해봐요!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 1번 예)
if [ $# = 1 ]
then
echo "인수는 1개"
else
echo "인수가 1개가 아닐 때"
fi
# 2번 예)
if [조건]
then
echo "조건을 만족할 "
fi
|
">cs |
22화 [종료 상태] 명령어 이상 종료에 대응하고 싶어
- '$?' : 바로 전에 실행한 명령어의 종료 상태
- 정상 종료하면 0, 그 외에는 0 이외의 값
- exit 1 처럼 작성해 주면 셸 스크립트가 종료 상태가 된다.
- 0~255까지 종료상태 코드가 있다.
- 줄바꿈 대신 ';'을 쓰면 한 줄로 합칠 수 있다.
23화 [for] 같은 처리를 반복해서 실행하고 싶어
- for 반복문을 사용하면 값 리스트에 따라 같은 처리를 반복 가능
- 반복문에서 사용하는 값 리스트로 변수나 명령어 치환 결과도 가능
- 아래 예시1~ 예시4는 다 같은 의미를 가지는 표현이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# 예시 1)
for filename in a.log b.log c.log d.log e.log
do
done
# 예시 2)
for filename in a.log \
b.log \
c.log \
d.log \
e.log
do
done
# 예시 3)
files="a.log b.log c.log d.log e.log"
for filename in $files
do
done
# 예시 4)
do
done
|
cs |
24화 [셸 함수] 공통 처리를 계속 재사용하고 싶어
- 어떤 처리를 하나로 묶어서 함수로 정의 가능
- 함수도 인수를 사용 가능
- 함수 실행을 중단하고 원래 처리로 돌아갈 때는 exit이 아니라 return 을 사용
- main함수를 작성해주고 역할에 대한 추상화를 함수를 통해서 제공받을 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#!/bin/bash
main() {
today
copy /A /B
}
today() {
date +%Y - %m - $d
}
copy() {
source=$1
target=$2
cp $source $target
echo "복사 처리 완료"
}
main
|
cs |
'인프라 > 리눅스' 카테고리의 다른 글
리눅스(Linux) 명령어 학습 - (2) (0) | 2019.05.07 |
---|---|
리눅스(Linux) 명령어 학습 - (1) (3) | 2019.04.27 |