230511-linux

soo·2023년 5월 12일
0

Linux

목록 보기
5/6

16장. 쉘 스크립트.

문제 1)
ssh root@192.168.56.102 부터 시작

  • ubuntu에 새로운 사용자 ec2-user2 생성
    (password는 쉽게 설정)

  • 홈디렉토리는 '/home/cloud' 로 설정

  • cloud의 권한을 root에서 ec2-user2로 변경.(없는 그룹인 경우 오류가 뜨기 때문에 기존 그룹에 추가 후 나중에 그룹 변경)

  • uid는 8258, 보조 group에 devops를 추가
    (없을경우 새로 생성)

  • CentOS에서 ec2-user로 연결하도록 key를 생성하고 배포

  • 암호 없이 연결할수 있도록 구성

-> 공유 폴더 만드는 단계.


문제 2) 아래 내용을 수행하는 create-user.sh 파일을 생성해서 스크립트 제작

ssh root@192.168.56.102 부터 시작

  • ubuntu에 새로운 사용자 생성. 사용자는 인자로 입력
    (password는 쉽게 설정)
  • 홈디렉토리는 두번째 인자로 입력된 값을 설정
  • 홈 디렉토리의 소유자를 사용자로 변경 (chown)
  • uid는 8000-9000 사이의 UID, 보조 group에 devops를 추가
    (없을경우 새로 생성)
  • CentOS에서 해당 사용자로 연결하도록 key를 생성하고 배포
  • 암호 없이 연결할수 있도록 구성

힌트_

  • 사용자 생성 -> useradd
  • 사용자 정보 변경 -> usermod
  • 그룹 추가 / 정보 변경 ->groupadd
  • ssh-key 배포

SSH 접속시 password입력 생략하도록 설정하는 법:
scp ./id_rsa.pub <key값을 복사할 서버의 IP>:/root/.ssh/authorized_keys
사용.
서버에 .ssh 디렉토리가 없는 경우 해당 서버에 .ssh/ 디렉토리 생성 필요. authorized_keys



-> 서버에 .ssh 생성 후 scp가 정상적으로 동작함.
-> password 입력 없이 SSH 접속 됨 확인 가능.


오늘 강의

16.6 제어구조.

if문
if는 주어진 조건을 평가해 참, 거짓에 따라 처리를 분기하는 제어 구조.

기본 문법.

if [ 값1 조건식 값2 ]; then
수행문
fi

-> [, ] 전 후에 반드시 공백이 있어야 됨.

문법 2.

if <명령어 1>; then
	<명령어 1>이 참인 경우 실행될 처리
elif <명령어 2>; then
	<명령어 2>의 결과가 참일 때 실행될 처리
elif <명령어 3>; then
	<명령어 3>의 결과가 참일 때 실행될 처리
else
	위 결과가 모두 거짓일 때 실행될 처리
fi

if문은 0(참) 또는 나머지 숫자(거짓)에 따라 동작여부를 판단함.

if문은 [ 말고도 다른 명령어 사용 가능. ex) grep 명령어

if문에 사용되는 조건식:
[ -z ] : 문자열의 길이가 0이면 참
[ -n ] : 문자열의 길이가 0이 아니면 참
[ -eq ] : 값이 같으면 참
[ -ne ] : 값이 다르면 참
[ -gt ] : 값1 > 값2
[ -ge ] : 값1 >= 값2
[ -lt ] : 값1 < 값2
[ -le ] : 값1 <= 값2
[ -a ] : &&연산과 동일 and 연산
[ -o ] : ||연산과 동일 xor 연산

ex)
str1 = str2 -> str1과 str2가 같으면 0(참)
str1 != str2 -> str1과 str2가 같지않으면 0(참)
-n str1 -> str1이 빈 문자열이 아니면 0
-z str1 -> str1이 빈 문자열이면 0

파일 속성 연산자:
[ -d ] : 파일이 디렉토리면 참
[ -e ] : 파일이 있으면 참
[ -L ] : 파일이 심볼릭 링크면 참
[ -r ] : 파일이 읽기 가능하면 참
[ -s ] : 파일의 크기가 0 보다 크면 참
[ -w ] : 파일이 쓰기 가능하면 참
[ -x ] : 파일이 실행 가능하면 참
[ 파일1 -nt 파일2 ] : 파일1이 파일2보다 최신파일이면 참
[ 파일1 -ot 파일2 ] : 파일1이 파일2보다 이전파일이면 참
[ 파일1 -ef 파일2 ] : 파일1이 파일2랑 같은 파일이면 참

ex) logdir 파일이 있는지 확인하는 쉘스크립트 logdir.sh 생성

동작 확인.(있는 경우 파일명 출력, 에러 메세지 출력 및 없으면 파일 생성)


test 명령어 -> [ 명령어와 유사한 기능 제공. [와의 차이점 = 마지막 인자로 ]을 사용하지 않아도 됨.
하지만 가독성 문제로 [를 더 많이 사용함.


쉘 스크립트의 종료 상태 -> 일반 명령어처럼 쉘 스크립트도 종료 상태 반환이 가능. 지정하지 않은 경우, 쉘 스크립트 중에서 마지막으로 실행된 명령어의 종료 상태가 해당 쉘 스크립트의 종료 상태가 됨.

명시적 종료 상태 지정: exit <종료 상태>


for 문 -> 공백이나 탭으로 구분된 단어 리스트에 대해 반복 처리를 수행하는 구문. 리스트 요소 별로 do~done 사이에 입력된 처리가 실행됨.

for 변수 in 리스트
do
	반복 처리
done

경로 확장도 가능 -> * 사용
ex)

for 변수 in *.html
do
	반복 처리
done

명령어 치환 -> seq 명령어

case 문 -> 지정한 문자열의 패턴에 따라 분기할 수 있는 제어 구조
패턴은 언제나 )로 끝나야 하고, case문의 마지막은 case을 거꾸로한 esac로 끝남.

case <문자열> in
	<패턴 1>)
    	처리 1
        ;;
    <패턴 2>)
    	처리 2
        ;;
...
esac

while 문 -> 디버기할때 많이 사용. 지정한 조건이 0(참)일 동안에만 반복하여 처리를 실행하는 제어 구문.

while <명령어>
do
	반복 처리
done

산술 연산자 i=`expr $i + 2`

쉘 함수 -> 중복되는 처리를 함수로 정의 가능.
1. 기본 문법

funtion <함수 이름> ()
{
	처리 
}
  1. () 생략 가능
funtion <함수 이름>
{
	처리 
}
  1. funtion 생략 가능
<함수 이름> (){
	처리 
}

이외 학습 추천:
RHLS(RedHat Learning Subscription): 레드햇 온라인 학습 컨텐츠 1년 무료 학습 플렛폼

리눅스 취약점 진단 스크립트 -> root 계정으로 실행해야 됨.
echo > 옵션 사용 이유 -> 파일이 있는 경우 파일을 비워야 하므로 touch 대신 > 사용. >>는 파일 내용을 삭제하지 않고 내용을 이어 붙임.


profile
이것저것 공부하는

0개의 댓글