본문 바로가기

한화시스템 BEYOND SW캠프/TIL

[1주차] 24.01.09 화요일

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