Linux

[Linux Bible] chapter 7~11 요약

윤창이 2021. 2. 25. 20:15
728x90

[주의] 개인 공부를 위해 쓴 글이기 때문에 주관적인 내용은 물론, 쓰인 정보가 틀린 것일 수도 있습니다!

피드백 부탁드립니다. (- -)(_ _) 꾸벅


7. 쉘 스크립트 작성하기

 같은 동작은 반복하거나 많은 명령을 써서 동작을 수행하는 경우 사용한다.

 

  • 실행하기
    #! :  쉘 스크립트 첫행에 인터프리티를 명시한다. 스크립트를 실행할 쉘을 선언해준다.
    chmod +x 를 통해 실행권한을 부여해준다.
    혹은 "bash 파일명" 을 통해 실행이 가능하다.
  • 변수
    특정 정보를 재사용하기위해 사용한다.
    NAME=value 와 같이 대입연산자(=) 사이에는 공백이 없어야한다.
    명령은 백틱(`)이나 달러($) 표시로 묶어서 명령의 결과를 변수에 저장한다.
    다른 변수의 값을 담을 수도 있다.
CITY="Springfield"
PI=3.141592
MACHINE=`uname -n`
NUM_FILES=$(/bin/ls | wc -l)
BALANCE="$CurBalance"
  • 위치 지정 특수 파라미터
    $0은 스크립트를 실행하는데 사용되는 이름
    $1, $2, $3 ... 는 커맨드라인으로 전달되는 파라미터에 순서대로 저장
  • read
    파이썬의 input()과 같다.
#!/bin/bash
read -p "국, 영, 수 점수를 입력하세요. : " a b c
echo "국어 점수는 $a, 영어 점수는 $b, 수학 점수는 $c 입니다."
  • Bash의 파라미터 확장
    ${변수:-value} : 변수가 설정되지 않았거나 비어있다면 value값으로 할당
    ${변수#value} : 변수의 앞에서 패턴에 대해 가장 짧은 일치를 자름
    ${변수##value} : 변수의 앞에서 패턴에 대해 가장 긴 일치를 자름
    ${변수%value} : 변수의 뒤에서 패턴에 대해 가장 짧은 일치를 자름
    ${변수%%value} : 변수의 뒤에서 패턴에 대해 가장 긴 일치를 자름
  • 산술식
    bash에서는 변수의 유형을 지정하지 않아 텍스트로 처리하지만, 산술을 시작하면 정수로 반환될 수 있음, 산술연산 명령어인 let이나 expr을 사용하여
    모두 같은 결과인 64가 나온다.
BIGNUM='1024'
let RESULT=$BIGNUM/16
RESULT=$BIGNUM/16
RESULT=`expr $BIGNUM / 16`
RESULT=`echo "$BIGNUM / 16" | bc`
  • if ... then 구문
    조건문은 if ... elif ... else ... fi 로 이루어진다.
filename="$HOME"
if [ -f "$filename" ] ; then
 echo "$filename is a regular file"
elif [ -d "$filename" ] ; then
 echo "$filename is a directory"
else
 echo "I have no idea what $filename is"
fi

    파이프를 겹쳐 사용하여 간단하게 명령 사용 가능 

    || : test가 false이면 action 수행 
    && : test가 true이면 action 수행

dirname=mydirectory
[ -e $dirname ] && echo $dirname already exists || mkdir $dirname

    위처럼 &&와 ||를 사용하여 한줄짜리 if-else 문을 만들 수 있다.

  • case 문
    * 는 파이썬의 default와 비슷한 역할
case "VAR" in
    Result1)
        { body };;
    Result2)
        { body };;
    *)
        { body };;
esac
  • 반복문
for VAR in LIST
do
    { body }
done
while condition
do
    { body }
done
  • Example
    전화번호부 쉘 스크립트 예제
    전화번호부를 추가하려면 ph new name number
    전화번호부를 찾으려면 ph name만 입력한다.
#!/usr/bin/bash

PHONELIST=~/.phonelist.txt

if [ $# -lt 1 ]     # parameter가 하나보다 적으면(0개이면)
then echo "Whose phone number do you want?"
    exit 1
fi

if [ $1 = "new" ]   # 첫 번째 parameter로 new를 받았다면
then shift          # shift로 new를 먹음.(씹음)
    echo $* >> $PHONELIST   # .phonelist.txt에 파라미터전체를 저장.(shift로 씹은 new 제외)
    echo $* added to database.  # console창에 echo로 메세지 출력.
    exit 0
fi

# 여기까지도 종료가 안되고 실행중이면, 다음단계로 이동.(전화번호를 찾는 작업)

if [ ! -s $PHONELIST ]  # PHONELIST에 아무 문자열도 존재하지 않으면.
then echo "no names in the phone list yet!!"
    exit 1
else
    grep -i -q "$*" $PHONELIST  # -q옵션으로 조용히 찾음(콘솔화면에 출력없이)
    if [ $? -ne 0 ]  # grep 실행한 결과가 $?에 저장되었는데 이게 0(정상종료) 가 아니면.
    then echo "Sorry, $* was not found in the phone list"
        exit 1
    else
        grep -i "$*" $PHONELIST
    fi
fi

exit 0

 

8. 시스템 관리 지식

  • 관리자 권한을 얻는 방법
    • su command : root 사용자로서 쉘을 열고, 관리자로서 다양한 커맨드를 수행할 수 있다.
    • sudo command : 일반 사용자는 sudo 커맨드를 이용하여 root의 특권을 부여한다. 커맨드 사용 후, 다시 일반 사용자의 권한을 가진다.
    • Graphical windows : 일반 사용자로 시작되지만, 루트의 권한이 필요한 경우가 있다.

파일 관리자가 시스템에서 수행하는 것들

- 파일시스템, 소프트웨어설치, 사용자 계정 추가 및 제거, 네트워크 인터페이스 시작 관리, 서버 관리, 각종 보안 기능

 

  • 그래픽 기반 관리도구 사용하기
    1.  system-config-* 사용하기
    2. 브라우저 기반 관리용 도구 사용하기
      RHEL 오픈스택 플랫폼, RHEL 가상화
  • 루트 사용자 계정 사용하기

/etc/passwd 파일에 계정 홈 디렉터리 등의 정보가 저장돼있다.

root 사용자의 사용자 ID는 0이며, 그룹 ID도 0으로 설정된 것을 알 수 있다. 홈 디렉터리는 역시 /root 이고, 이 사용자의 쉘은 /bin/bash를 사용한다.

su (변경하고자 하는 계정)

su 와 su - : su는 substitute user의 줄임말로 현 사용자를 로그아웃 하지 않고, 다른 사용자의 권한을 획득할 때 사용.

이렇게 사용하고 뒤에 ID를 입력하지 않으면 su root 와 동일하게 동작한다. su와 su - 모두 관리자 권한을 얻지만 su 명령으로 환경 설정을 읽는 일은 할 수 없다.

 

10. 소프트웨어 설치 및 관리

 

패키지 형식 : 실행파일, 문서, 구성파일 및 라이브러리를 포함하는 tarball

여기서 tarball은 편리한 저장 및 배포를 위해 여러 파일이 함께 모이는 단위를 뜻함. tarball은 한계가 많기 때문에 이를 위해 DEB (.deb) package와 RPM (.rpm) package를 통해 소프트웨어를 분배한다.

 

  1. DEB 패키지
    데비안 계열 패키지로 리눅스 배포판 중에 가장 강력하다. 데비안 패키지 계열인 a
    pt (Advanced Package Tool) 는 Debian 시스템에 포함된 핵심 도구들의 집합체이다. apt는 패키지간의 의존성 문제를 해결할 때 자동으로 해법을 제시한다.
  2. RPM 패키지
    레드햇 계열 패키지 배포판이다. DEB에서는 apt가 있다면 RPM에선 YUM으로 패키지들을 관리하여 종속성 문제를 해결할 수 있다.

 

- YUM으로 패키지 관리하기

# yum search editor

전체 패키지 리스트를 확인해서 입력된 패키지명이 포함되는 것을 출력한다.

# yum info emacs

패키지의 정보를 갖고오는 명령어

# yum provides dvdrecoder

파일이 제공하는 패키지 정보 출력

# yum list emacs
# yum list available
# yum list installed
# yum list all

패키지 목록 확인, 설치된 패키지 리스트 확인, 설치된 패키지 전체목록 보기, 설치가 가능한 모든 패키지 목록 출력

# yum install emacs
# yum erase emacs

 패키지 설치 및 삭제

# yum history
# yum history info 96
# yum history undo 96

yum 패키지의 최초 설치 및 업데이트 날짜 표시, history 넘버에 해당되는 상세내역 확인, history 넘버에 해당되는 작업 되돌리기

# yum check-update
# yum update

패키지가 업데이트 필요한지 체크, 설치되어 있는 특정/전체 패키지 업데이트

 

- rpm 명령으로 소프트웨어 설치 및 삭제

# rpm -i zsh-5.0.7-4.fc21.x86_64.rpm
-i 설치
-h 설치 진행과정 화면에 출력
-v 설치 과정 중 사용자 선택이 필요한 경우 확인 받도록 함
-U 기존에 설치돼있지 않으면 설치하고, 설치된 경우 업그레이드
-F 이전 패키지가 설치된 경우에만 설치
# rpm -e emacs
--replacepkgs 기존 버전의 패키지를 재설치
--oldpackage 이전 버전의 패키지를 설치
-e 패키지 삭제

 

11. 사용자 계정 관리하기

- 사용자 계정 만들기

adduser : 실행 시 기본 계정 정보를 자동 생성

useradd : 계정만 생성하며 기타 계정 정보를 수동으로 생성 및 설정

# useradd [option] [계졍명]
# adduser [option] [계정명]
# options
-c [Comment] // /etc/passwd에 사용자 설명 추가.
-d [Home] // home directory 위치 지정.
-e [Expiredate] // 지정된 날짜에 사용자 계정 삭제.
-f [Inactive] //  password 만기 후 계정 영구 삭제 기간.
-u [User ID] // 지정된 값으로 UID 설정.
-s [Shell] // 사용자의 login shell 지정.
-G [Groups] // 생성하는 계정을 그룹에 추가.
-M [No Create HomeDIR] // 홈 디렉토리 생성하지 않음.

/etc/passwd 파일에 계정 정보 저장되어 있다.

 

/etc/shadow 파일에 계정 비밀번호가 암호화되어 저장돼 있음

 

  •  usermod [옵션] [계정명]
-c 사용자 정보 수정
-d [Home] 디렉토리 위치 수정
-e [Expiredate] 지정된 날짜에 사용자 계정 삭제
-f [Inactive] 패스워드 만기된 후 계정 영구 삭제 기간
-u [User ID] 사용자 ID 퍼미션

 

  • userdel [옵션] [계정명]
-f 파일이 사용자 소유가 아니더라도 강제 삭제
-h 도움말
-r 모든 계정관련 폴더 삭제

 

Users와 Groups를 관리하는 방식

기존 - 각 file은 오직 하나의 user, 하나의 group에 할당될 수 있었음

현재 - ACL를 이용하여 특정 file을 특정 user에 대해 접근권한을 줄 수 있음

 

하나의 pc에서 user 관리는 쉽지만 여러 수천 리눅스 시스템에서 같은 사용자로 인증해야한다면?

-> 하나의 중앙 집중화된 인증 서버가 존재하면 편하다.

 

ACL에 파일 추가 : setfacl

특정 file에 대해 ACL 설정 확인 : getfacl

 

setfacl -m u:user : 권한 file명 으로 ACL 설정.
getfacl file명 : ACL 설정값 출력.
setfacl -x u : user으로 user의 ACL권한 해제.

 

LDAP(LightweightDirectoryAccessProtocol)

LDAP는 현재 Linux에서 Directory service 를 위한 표준이다.L DAP은 Lightweight Directory Access Protocol의 약자로, 인터넷 기반의 분산 디렉터리 서비스를 제공하는 공개된 프로토콜이다. 사용자, system, network, service, app등의 정보를 조회 또는 관리. 회사에서 구성원의 조직도나 팀별 email주소 등을 LDAP service로 관리. 흔하게는 특정 영역에서 이용자명과 passwd를 확인하여 인증하는 용도로 사용됨.사용자, system, network, service, app등의 정보를 조회 또는 관리. 회사에서 구성원의 조직도나 팀별 email주소 등을 LDAP service로 관리. 흔하게는 특정 영역에서 이용자명과 passwd를 확인하여 인증하는 용도로 사용됨.

728x90