리눅스 서버- 7

박형준·2024년 3월 20일

*네트워크 2급 접수 3/20 - 3/22
단체 검정 코드 : J019

  • 필기/실기 따로 접수
  • 시험 : 4/13 (토) 09:30 ~ 12:20
  • 필기: 9:30 ~ 10:20
  • 실기: 11:00~ 12:20
  • 수험표 없어도 된다, 신분증, 펜 가져가기

*실리콘밸리의 해적들


사용자별 공간 할당 - 쿼터

  • 쿼터(Quota) 개념

    • 파일시스템마다 사용자나 그룹이 생성할 수 있는 파일의 용량 및 개수를 제한하는 것

    • 파일시스템을 “/”로 지정하는 것보다는, 별도의 파일시스템을 지정해서 해당 부분을 쓰도록 하는 것이 좋음

    • “/”파일시스템을 많은 사용자가 동시에 사용하게 되면, CentOS서버를 운영하기 위해서 디스크를 읽고 쓰는 작업과 일반 사용자가 디스크를 읽고 쓰는 작업이 동시에 발생하므로 전반적으로 시스템의 성능이 저하됨


*쿼터 흐름도

◆ 디스크 쿼터 ⇒ 사용자 별 디스크 용량을 지정( 개인이 용량을 모두 사용하는것을 방지 )

  • 10G ⇒ Fdisk파일시스템 생성(ext4) ⇒ 아래 디렉토리 와 마운트
  • / 에 디렉토리하나 생성 (testHome) 하고 fstab에 등록
  • 생성한 디렉터리와 파일 디스크와 마운트 연결

*사용자 생성과 홈디렉토리를 testHome 로 지정 .

  • 사용자 생성할 때 원래는 /home에 저장된다.
  • [root@sodesk ~]# useradd -d /testHome/tom tom
    ⇒ tom 이라는 사용자 생성과 전용 디렉토리 생성
  • [root@sodesk ~]# useradd -d /testHome/lim lim
  • #passwd tom, lim
  • -d 옵션: 사용자가 생성되는 디렉터리 지정, -s 옵션 : 사용자 지정
  • 패스 워드 설정

*fstab 수정

*재 마운트

  • #mount --options remount /testHome 또는 mount -o remount /testHome
  • /etc/fstab 수정
  • -o 옵션: 옵션 지정한다는 것(remount)
  • remount 할 때는 디렉터리만 입력하면 된다, 재마운트 할 때는 마운트 후에 하기

-쿼터 DB생성

  • [root@sodesk ~]# cd /testHome

    • [root@sodesk testHome]# quotaoff -avug ⇒ 쿼타 끄기
    • /dev/sdb1 [/testHome]: user quotas turned off
    • [root@sodesk testHome]# quotacheck -augmn ⇒ 전체 점검
  • [root@sodesk testHome]# rm -rf aquota.* ⇒ 전체 점검 후 필요없는 파일 정리

    • [root@sodesk testHome]# quotacheck -augmn ⇒ 생략가능
  • [root@sodesk testHome]# touch aquota.user aquota.group ⇒ 기록될 DB파일 생성

    • [root@sodesk testHome]# chmod 600 aquota.* ⇒ DB파일 권한 설정
    • [root@sodesk testHome]# quotacheck -augmn ⇒ 이 체크는 필수
    • [root@sodesk testHome]# quotaon -avug ⇒ 쿼타 동작 시키기
    • /dev/sdb1 [/testHome]: user quotas turned on
  • 옵션 : a(all)-모든파일, v(상태확인) , u(user), g(group) , m(마운트) , n( 순서-첫번째를 뜻함 )

  • 순서 중요
  • 쿼터와 관련된 것 꺼주기, 쿼터 체크, 쿼터 체크 후 이상한 파일 제거후 다시 체크
  • 쿼터는 설정하고 체크해주는 것이 안정적, 하지만 안해도 상관없음
  • 사용자와 관련된 파일 만들기(그룹도 생성 가능)
  • 파일 권한 바꾸고, 체크(필수)하고 쿼터 켜주기

*사용자별 용량 지정

  • #edquota -> 아래 soft와 hard에 용량 지정
  • soft : 기본 용량 / hard : 최대용량 / inodes( 파일 개수로 제한 )
  • ex) 20480=20M 30000=30M(관리자가 설정하기 나름)
  • 사용자별 용량 지정: edquota -u [사용자 명] (-u : user)
  • soft는 기본 용량, hard는 최대 용량

*tom 사용자로 전환해서 파일 넣어 보기

  • su - tom
  • tom으로 사용자 변경
  • boot 파일 복사해서 tom 디렉터리에 추가
  • 복사해서 만들어도 계속 만들어지는데 용량은 0byte이다

*사용자가 본인 용량 확인

  • [tom@sodesk ~]$ quota
  • 사용자한테 할당된 것 확인(용량 초과된 만큼 6일 후에 사라진다.)

*관리자가 사용자별 설정 확인

  • [root@sodesk ~]# repquota /testHome
  • 관리자가 사용자 별로 용량 확인할 때(ls -l은 폴더만 확인)
  • 0은 무한대로 쓸 수 있다는 뜻

*두번째 사용자(lim) 용량 설정 : tom 사용자의 설정을 그대로 lim 사용자에게 적용시키기

  • [root@sodesk ~]# edquota -p tom lim ⇒ tom 사용자 lim 사용자
  • [root@sodesk ~]# repquota /testHome ⇒ 설정 내용 확인
  • tom 사용자 설정을 다른 사용자에게 적용하기(사용자가 많을 때)
  • -p 옵션 : 복사

셸 스크립트 프로그래밍

CentOS의 bash 셸

  • 기본 셸은 bash(Bourne Again SHell : ‘배시 셸’)
  • bash 셸의 특징
    • Alias 기능(명령어 단축 기능)
    • History 기능(위/아래 화살표키)
    • 연산 기능
    • Job Control 기능
    • 자동 이름 완성 기능(탭키)
    • 프롬프트 제어 기능
    • 명령 편집 기능

• 셸의 명령문 처리 방법

  • (프롬프트) 명령어 [옵션...][인자...]
  • 예) # rm -rf /mydir

환경 변수

  • “echo $환경변수이름” 으로 확인 가능
  • “export 환경변수=값” 으로 환경 변수의 값을 변경
  • 주요 환경변수


변수의 기본

  • 변수를 사용하기 전에 미리 선언하지 않으며, 변수에 처음 값이 할당되면서 자동으로 변수가 생성
  • 모든 변수는 ‘문자열(String)’로 취급
  • 변수 이름은 대소문자를 구분
  • 변수를 대입할 때 ‘=’좌우에는 공백이 없어야 함


변수의 입력과 출력

  • ‘$’ 문자가 들어간 글자를 출력하려면 ‘ ’로 묶어주거나 앞에 ‘\’를 붙임.
  • “ ”로 변수를 묶어줘도 된다.


숫자 계산

  • 변수에 대입된 값은 모두 문자열로 취급
  • 변수에 들어 있는 값을 숫자로 해서 +, -, *, / 등의 연산을 하려면 expr을 사용
  • 수식에 괄호 또는 곱하기(*)는 그 앞에 꼭 역슬래쉬() 붙임


◆ 쉘 / 스크립트

  • 쉘 : 명령어 해석기 ( 사용자가 명령어 입력 ⇒해석 ⇒ 커널 ⇒ 실행 )
  • 쉘 종류 : 본쉘 , 배쉬셀(bash), 콘(ksh, 데이비드 콘), csh
  • 쉘 확인 : passwd 에 기록되어 짐.
  • #: root , $: 일반 사용자
    • [root@sodesk ~]# cat /etc/shells
    • [root@sodesk ~]# chsh -s /bin/sh centos
  • 쉘은 /bin 폴더 아래에 저장된다.
  • centos 사용자의 쉘 변경: chsh -s [쉘 종류][사용자]
  • 다시 bash로 바꾸기

*환경변수

  • #export ⇒ 설정된 환경변수 모두 확인
  • #echo $HOSTNAME , $SHELL, $USER, $HOEM ⇒ 환경변수 확인
  • #env HISTSIZE=2000 ⇒ historysize개수를 2000개로 변경
  • 리눅스에서 변수를 입력하려면 환경변수로 등록해야 한다.
  • export는 설정된 것 전부 보여주고, echo는 설정된 것 1개 확인 가능하다.
  • echo 사용할 때 $ 뒤에는 대문자로 입력

*스크립트 작성 후 실행

  • 권한 변경 : 실행 권한 부여 후 ./파일명.sh (일반 파일은 실행 권한 없음)
  • 권한 변경 없이 실행 : sh test.sh
    -스크립트 파일명의 확장자는 .sh
  • #!/bin/bash ⇒ 첫줄에는 선언
    • echo , 변수설정
      exit 0 으로 마무리
  • 설정된 것 변경하기: env , 대문자 주의

*변수 출력

  • "변수", '변수'(작은 따음표) , \변수 ⇒ 정상 출력
  • ``(윗 따음표) ⇒ 출력 안됨, 계산할 때 사용.
  • #!/bin bash : bash 쉘 지정
  • 쉘 스크립트 파일 만들고 출력 명령어(echo) 입력
  • sh 명령어를 이용해서 출력
  • 쓰기 권한 부여 후에 ./name.sh 도 가능
  • 출력 방식 확인(vi를 통해 쉘 스크립트 작성: vi [파일명].sh)
  • 출력된 것 확인
    • '(작은 따음표)는 출력되고 `(윗 따음표)는 출력이 안된다.
  • 변수 지정방법

*연산

    • 3번행 정상 출력
    • 4번행 정상 출력
    • 5번 행(num3)은 `` 내용이 문자로 인식되어 계산 안되어 6번행 출력 안됨.
    • 7번 행은 정상 계산되어 8번 행에서 출력됨
      • 기호 앞에는 \ 표시 붙이기와 기호 와 다음 변수는 한칸 띄우기
  • 계산할 때 \표시는 구분 짓기 위해서
  • `(윗 따음표) 입력해서 계산할 때 띄어 쓰기 중요, 변수 지정할 때는 한줄로 쭉 입력
  • 연산할 때 expr 명령어 사용
  • 계산한 값

*파라미터(Parameter) 변수

  • 명령어나 문장 등의 위치를 표현
  • 파라미터 변수는 $0, $1, $2...의 형태를 가짐
  • 파일명은 $0

====================================

#!/bin/bash

  • echo "전체개수 : $#"
    echo "첫번째는 : $1"
    echo "두번째는 : $2"
    echo "전체는 : $@"
  • exit 0

[root@sodesk test]# sh test3.sh hello tom yes

  • 전체개수 : 3
    첫번째는 : hello
    두번째는 : tom
    전체는 : hello tom yes
  • 파라미터 이용하여 파일 작성($숫자)
  • 출력 화면(파라미터 전체 갯수 3개)

if문 작성 (if~fi문)

*반복 ( if ) 조건에 맞으면 참(True), 거짓(False)

=====================================
#!/bin/bash

  • if [ "hello" = "hello" ] , 다르다는 !=
    then
    echo "True"
    fi
    exit 0
  • ⇒True 출력

=====================================
#!/bin/bash

  • if [ "hello" != "Hello" ]
    then
    echo "True"
    fi
    exit 0
  • ⇒ True 출력 (대소문자를 구분해서 서로 다르기때문에 참이됨)

=====================================
if ~ else (참과 거짓을 출력)
#!/bin/bash

  • if [ "hello" = "hello" ] / "hello" != "hello" / "Hello" = "hello"
    then
    echo "True"
    else
    echo "거짓입니다."
    fi
    exit 0

  • ⇒결과 : "hello" = "hello" ⇒ True / "hello" != "hello" ⇒ 거짓입니다. / "Hello" = "hello" ⇒ 거짓입니다.

=====================================
#!/bin/bash

  • if [ 100 -eq 100 ] -eq는 =와 같음. -ne는 !=와 같음. 숫자는 “” 가 필요 없음.
    then
    echo "True"
    else
    echo "100과 200은 다르다."
    fi
    exit 0

  • 출력값은 -eq : True, -ne : 100과 200은 다르다

======================================

  • if문 작성
    • 대소문자 구분
    • =을 -eq(equal)로도 표현, !=을 -ne로도 표현
  • True 화면 출력
  • if ~ else문 작성
  • True 화면 출력

파일 위치: cat /lib/systemd/system/crond.service(cron)
, cat /lib/systemd/system/sshd.service(sshd)

파일과 관련된 조건

*if문을 이용해서 파일을 읽어서 결과를 출력 ( cron에 예약이 되어있는지 여부, sshd서버가 설치 여부 )


case ~ esac 문

• if 문은 참과 거짓의 두 경우만 사용 (2중 분기)
여러 가지 경우의 수가 있다면 case 문 (다중 분기)

case ~ esac 문 : 입력값이 설정값을 비교해서 같으면 해당 열 출력

  • case ~ esac문 작성
  • 출력 화면 : sh [파일명] start

for문 작성

for문을 이용한 반복

  • for문 작성(test안에 과일명을 집어넣고 실행)
    • for문 do는 done으로 맺음짓기
  • 출력 값
  • for문을 이용하여 1부터 10까지 합을 구하기
  • 출력 화면

read를 이용해서 입력

  • read를 이용하여 입력
  • 출력 값

while을 이용해서 맞을 때까지 입력


날짜 확인하기

  • eval: 스크립트에서 명령어로 실행시키는 것
  • set: "$1, $2, $3, ..."에 저장하는

*1~10 사이 숫자중에서 짝수만 또는 홀수만 출력

  • seq: `(윗 따음표)로 작성하기
  • 1:시작값, 2:건너뛰기, 10:끝값

*while 문을 이용해서 출력

  • [ $a -gt $b ] = A > B
    [$a - lt $b ] = A < B
  • [ $a -ge $b ] = A >= B
    [$a -le $b ] = A <= B
  • [$a -eq $b ] = A = B
    [$a -ne $b ] = A != B

*점수를 입력 받아서 90~100=A, 80~89=B, C, D, E, F

0개의 댓글