IO Redirect
input과 output의 재방향. 즉, 입력과 출력의 기본적인 방향을 바꾸는 작업.
>를 사용하여 기본 아웃풋에서 리다이렉트한 아웃풋에 저장한다.
e.g.) $ ls -l > redirect.txt : ls -l의 결과가 모니터에 출력되지 않고 텍스트 파일로 저장된다.
1> : 디폴트값(1 생략)
2> : 에러 출력을 리다이렉션하는 경우 사용
e.g.) 아래와 같이 2> 를 사용하면 에러 출력 결과가 텍스트 파일로 저장되는 것을 확인할 수 있다.
$ rm test.txt > error.log
rm: cannot remove 'test.txt': No such file or directory
$ rm test.txt 2> error.log
$ cat error.log
rm: cannot remove 'test.txt': No such file or directory
마찬가지로 $ nano error.log로 해당 파일을 편집하기 위해 접속하면
rm: cannot remove 'test.txt': No such file or directory 가 올바르게 저장되어 있는 것을 확인할 수 있다.
반대로 파일의 내용을 입력값으로 하여 표준 출력을 실행하기 위해서는 < 기호가 사용된다.
쉘 스크립트
인터프리터에 의해서 구동되도록 작성된 스크립트
명령어를 모아서 특정한 절차에 의해 동작할 수 있도록 만들어주는 것.
쉘 스크립트를 이용해서 코드 절차를 정의하고 해당 절차를 재사용할 수 있다.
e.g.) script 디렉토리를 생성하고 3개의 로그파일을 생성한 다음 backup 디렉토리에 카피하는 과정을 살펴보면 다음과 같다.
$ mkdir script
$ cd script
$ touch a.log, b.log, c.log
$ mkdir backup
$ cp *.log backup
만약 script 디렉토리에 있는 파일의 내용이 변경된다면, backup 디렉토리에도 해당 내용을 반영해주어야 한다.
이런 상황에서 쉘 스크립트를 활용하여 절차를 정의, 재사용하게 된다.
변수(Variable)
데이터를 담는 그릇
- 변수의 선언 : 변수명 = 데이터
- 변수의 사용 : $ 변수명
- 배열의 선언 : ary = (data01 data02 data03)
- 배열의 사용 : ${변수명[인덱스]}
cf.) 지역변수의 예약어
- $$ : 프로세스의 번호
- $0 : 쉘 스크립트의 이름
- $1 ~ $9 : 명령줄에 대한 인수
- $* : 모든 명령줄 인수
- $# : 인수의 개수
연산자
- expr : 숫자 계산, 특수문자가 필요하다면 \ 를 앞에 붙여서 사용한다. 연산자와 숫자, 변수, 기호 사이에는 반드시 공백이 필요하다.
e.g.) num = `expr \( 3 \* 10 \) / 4 + 7`
- 논리연산자(AND, OR, NOT): true, false
논리연산자 진리표를 그리면 아래와 같다.
A B -a -o && || !
t t t t t t f - t
t f f t f t
f t f t f t
f f f f f t
- 비교연산자(수치)
값 -eq 값 ==
값 -nq 값 !=
값 -lt 값 <
값 -gt 값 >
값 -le 값 <=
값 -ge 값 >=
조건문
if [조건]
then
명령문(조건이 참일 경우 실행)
else
명령문(조건이 거짓일 경우 실행)
fi
ping 결과를 스크립트로 작성할 때 0은 표준입력, 1은 표준출력, 2는 표준에러를 뜻한다.
권한
대상 - 파일, 디렉토리
$ chmod : 권한을 변경하는 명령어 (u - user, g - group, o - other)
e.g.) 다음과 같이 권한을 부여하고 제거할 수 있다.
$ chmod u+x backup.sh //user에게 x권한(실행권한)을 부여
$ chmod g+x backup.sh //group에게 x권한을 부여
$ chmod o+x backup.sh //other에게 x권한을 부여
$ chmod o-x backup.sh //other에게 x권한을 제거
$ chmod +x backup.sh //user, group, other 모두에게 x권한을 부여
$ chmod 777 backup.sh //user, group, other 모두에게 r(4), w(2), x(1)권한을 부여
새로운 사용자를 추가해서 두 개의 계정으로 각 계정에 접근 권한을 갖기 위해서는 같은 그룹에 속해있어야 한다.
e.g.) 그룹을 생성하고 그룹에 속할 계정을 지정해 준 후 그룹으로 공유된 접근권한을 변경할 수 있다.
$ usermod -a -G myencore yjlee //myencore 그룹 생성 및 그룹의 계정 지정
$ usermod -a -G myencore test
$ chgrp -R myencore /home/yjlee //그룹으로 공유된 접근권한 변경
$ chmod -R 2775 //권한부여
- -a : 그룹에 추가, -G : 그룹을 지정
- 2 : 새롭게 생성되는 하위 폴더에 같은 그룹을 지정해 주는 옵션
- 7 : user(r+w+x)
- 7 : group(r+w+x)
- 5 : other(r+x)
파일 압축
묶는다(archive) - 파일의 사이즈가 줄어드는 것이 아니다.
-> .tar 형식
압축한다(compress) - .tar 파일의 실제 용량을 줄인다.
-> .tar.gz 형식
cf.) $ compress test.tar -> .tar.Z 형식으로 압축된다.
아카이빙과 압축을 한 번에 하는 방법은 아래와 같다.
e.g.) $ tar -czvf test.tar.gz a.txt b.txt c.txt
정규 표현식
특정 패턴을 찾을 때 사용한다. 파일에 문자열이 있고 해당 패턴을 만족하는 문자열을 검색하고자 할 때 사용할 수 있다.
[기본 패턴]
- . : 임의의 하나의 문자
- ^ : 문자열의 시작
- $ : 문자열의 끝
- * : 앞의 문자가 0회 이상 반복되는 패턴
- + : 앞의 문자가 1회 이상 반복되는 패턴
- ? : 앞의 문자가 0회 또는 1회 나타나는 패턴
- [abc] : a 또는 b 또는 c인 것
- [^abc] : a 그리고 e 그리고 i가 아닌 것
e.g.) 다음과 같은 내용을 담고 있는 encore_re.txt 파일에 정규 표현식을 사용하면 아래와 같다.
hello world
this is a text
hat
hit
hot
history of mankind
that
chat
hats off
- $ grep 'h.t' encore_re.txt : h_t 형태의 문자 찾기
- $ grep '^ha' encore_re.txt : ha로 시작하는 문자 찾기
- $ grep 'at$' encore_re.txt : at로 끝나는 문자 찾기
- $ grep 'h*t' encore_re.txt : h가 t 앞에 0회 이상 반복되는 문자 찾기
- $ grep 'h[aei]t' encore_re.txt : h와 t 사이에 a 또는 e 또는 i가 나오는 문자 찾기
'한화시스템 BEYOND SW캠프 > TIL' 카테고리의 다른 글
[2주차] 24.01.15 월요일 (1) | 2024.01.15 |
---|---|
[1주차] 24.01.12 금요일 (1) | 2024.01.12 |
[1주차] 24.01.11 목요일 (0) | 2024.01.11 |
[1주차] 24.01.10 수요일 (0) | 2024.01.10 |
[1주차] 24.01.08 월요일 (1) | 2024.01.08 |