종종 특수한 이유로 Java 구 버젼을 설치해야 할 일이 있음.

오라클 공식 사이트에서는 1.7이하 버젼은 더 이상 다운로드를 지원하지 않지만.
잘 찾아보면 각 버젼별로 다운 받을 수 있음.

한참 헤매다 따로 링크를 저장해 두기로 하고 포스트를 작성함.

JDK 1.5
JDK 1.6
JDK 1.7
JDK 1.8

728x90
반응형

'Language > Java' 카테고리의 다른 글

[Java] 문자열이 날짜 형식인지 확인하기  (0) 2021.10.18
[Java] 성능을 고려한 try-catch 문  (0) 2020.12.16
[Java] Map 반복문  (0) 2020.12.08
[Java] ArrayList Sort  (0) 2020.05.22

소프트웨어 관리

  • 학습 개요
    소프트웨어의 설치와 관리를 위한 패키지 관리 도구를 알아보자.
    RPM은 레드헷 계열 리눅스에서 패키지 파일의 표준 형식이자 패키지 관리 도구이다.
    YUM은 저장소 기반의 설치 기능을 제공하며 패키지 의존성 문제를 해결한 고수준의 관리 도구이다.
    RPM과 YUM의 사용법을 학습하고, 파일 압축과 아카이브 명령을 알아보자.

  • 학습 목표

    1. RPM을 이용한 패키지 관리 방법을 설명할 수 있다.
    2. YUM을 사용한 소프트웨어 패키지를 관리할 수 있다.
    3. 압축을 적용하여 아카이브 파일을 만들 수 있다.

패키지 관리

소프트웨어 패키지의 관리

  • 소프트웨어를 설치하고 업데이트 등을 하는 작업.
  • 패키지 관리 도구를 사용하는 것이 편리함.
    • 리눅스 초기에는 소스 프로그램을 가져와 적당한 디렉토리 구조를 만들고 컴파일하고 링크하여 환경 설정 작업을 해야 했음.
    • 컴파일 되어 있는 패키지를 다루고, 지원 도구를 사용하는 것이 효율적.
  • 리눅스 배포판에 따라 패키징 방법이 다름.
    • 소프트웨어의 배포를 위해 표준 방법이 필요함.
    • 데비안 계열은 DEB(.deb), 레드헷 계열은 RPM(.rpm) 방법.
    • 도구를 사용하거나 '패키지 파일'을 찾아 다운로드 받은 후 설치함.
      • 패키지 파일은 패키지를 구성하는 파일들을 묶어 압축한 파일.

패키지 파일과 저장소

  • 패키지 관리의 기본 단위는 '패키지 파일'.
  • 바이너리 프로그램, 패키지의 메타데이터, 스크립트 파일로 구성됨.
    • 메타데이터는 패키지에 관한 정보.
      • 패키지 이름, 버전, 릴리즈, 아키텍쳐, 패키지 요약과 설명, 저작자와 라이센스, 설치를 위해 필요한 다른 패키지 정보 등.
    • 설치/업데이트/삭제 또는 환경 설정을 위해 스크립트 파일도 필요.
  • 패키지 저장소는 배포용 패키지를 저장하고 관리하는 사이트.
    • 고수준 패키지 관리 도구는 많은 패키지 저장소를 검색할 수 있음.

패키지 의존선

  • 어떤 패키지의 실행을 위해 다른 패키지가 필요할 수 있음.
    • 공유 라이브러리가 필요하다면 패키지가 그것에 의존적이라고 함.
  • 패키지를 설치할 때 '선행 패키지'가 이미 설치되어 있거나 함께 설치해야 함.
    • 고수준 패키지 관리 도구 YUM은 의존성 문제를 해결.
    • 저수준 패키지 관리 도구 RPM은 해당 패키지만 설치하거나 삭제.

RPM 패키지 관리자

RPM

  • RPM은 레드헷 계열 리눅스에서 패키지 파일의 표준 형식.
    • 패키지 파일의 이름은
      • <패키지이름>-<버젼>-<릴리즈>.<아키텍쳐>.rpm
      • firefox-45.0.1-el6.centos.i686.rpm
    • 패키지 파일의 확장자가 .rpm임.
    • 릴리즈 번호는 해당 버전에서 몇 번째 개선된 것인가를 의미.
    • 아키텍쳐는 설치가 가능한 프로세서 아키텍쳐를 의미.
  • RPM Package Manager를 의미하기도 함.
    • 패키지가 설치되면 '로컬 RPM 데이터베이스'에 정보가 저장됨.
    • rpm -qa rpm -qi firefox와 같이 설치된 패키지의 정보를 질의할 수 있음.

RPM 명령

  • 패키지를 설치, 업데이트, 삭제하거나 정보를 확인하는 명령.
  • rpm [options] [package]
    • 옵션은 크게 설치(-i), 업데이트(-u), 삭제(-e), 질의(-q)로 분류됨.
      • 각각에 해당하는 옵션의 서브옵션을 추가로 붙일 수 있음.
    • 설치나 업데이트를 할 때는 pageages에 패키지 파일의 이름을 지정함.
    • 질의를 할 때는 보통 packages에 패키지의 이름을 사용함.
  • 패키지를 설치할 때 선행 패키지가 설치되어 있지 않으면 '의존성 문제'로 설치가 실해팜.
    • RPM 패키지 관리자를 사용할 때는 '선행 패키지'를 찾아 미리 설치해야하는 문제가 있음.
    • 설치하고자 하는 'RPM 파일'을 가지고 있거나 다운로드 받을 수 있어야 함.

RPM 명령

자주 사용되는 RPM 명령과 옵션

rpm 명령과 옵션 desc
rpm -i package_file RPM 패키지 파일을 가지고 소프트웨어 설치
rpm -e package_name 패키지를 삭제함. 종속성 문제가 생긴다면 삭제되지 않음
rpm -qa 서ㅓㄹ치되어 있는 모든(-a) 패키지를 나열
rpm -qi package_name 패키지 이름, 버젼, 설명 등의 다양한 정보(-i)를 출력
rpm -qf file 지정 파일(-f)을 포함하는 패키지 파일을 출력
rpm -ql package_name 설치된 패키지에 포함되어 있는 모든 파일을 나열(-l)
rpm -qc package_name 설치된 패키지의 모든 설정(-c) 파일을 나열
rpm -qR package_name 패키지가 의존(-R)하고 있는 패키지 목록을 보여줌
rpm -qpl package_name 설치되지 않은 RPM 패키지(-p) 파일에 포함되어 있는 모든 파일 나열(-l)

YUM 패키지 관리자

YUM

  • Yellowdog Updater Modified
  • RPM 방법에 기초한 자동 패키지 설치, 업그레이드 및 삭제 도구.
    • RPM 명령의 어려운 부분인 패키지 의존성 문제를 해결.
      • 선행 패키지를 검색하여 자동으로 설치함.
    • 저장소 기반의 설치 기능을 제공하는 고수준 패키지 관리 도구.
  • 저장소 목록을 유지하여 설치 가능한 패키지를 검색.
    • /etc/yum.conf 또는 /etc/yum.repos.d 디렉토리에 있는 저장 설정 파일 (*.repo) 파일들에 저장소 정보를 저장.
    • 설치하거나 업데이트할 때 저장소로부터 필요한 다른 패키지를 찾아서 설치하거나 업데이트함. 삭제도 마찬가지.

YUM 설정 파일

  • /etc/yum.conf
    • [main] 섹션에 전반적인 설정 옵션이 존재함.
      • 파일을 저장하는 캐시 디렉토리 설치 후 캐시 파일의 보관 여부, 디버그 메세지 수준, 로그 파일, 업데이트 시 아키텍쳐의 일치 여부, 서병 확인 여부 등.
      • 저장소 정보의 설정을 포함할 수 있음.
  • /etc/yum.repos.d/ 디렉토리의 *.repo 파일.
    • 저장소 설정 파일로 [저장소 아이디], 저장소 이름(name), 베이스 URL(baseurl)과 미러리스트(mirrorlist) 등이 설정됨.
    • 베이스 URL과 미러리스트는 실제 패키지가 저장된 장소로 로컬 디렉토리 또는 파일 이거나 네트워크 상에 http 서버나 ftp 서버가 관리하는 디렉토리
    • yum repolist enabled 명령으로 활성화된 저장소를 확인할 수 있음.

YUM 명령

  • yum [options] command
    • command 는 yum의 서브 명령.
    • command 의 인수로 패키지를 지정할 때 name, name.arch, name-ver, name-ver-rel, name-ver-rel.arch 등의 형태를 사용함.
  • 수행 과정(설치)
    • 설정 파일을 읽음.
    • yum 저장소에 있는 모든 패키지의 메타 데이터가 로컬 캐시 디렉토리에 저장됨.
    • 패키지의 의존성을 확인한 후 필요한 패키지를 다운로드 받음.
    • 패키지에 포함된 파일을 적당한 디렉토리에 복사하여 설치함.
    • 설치된 패키지의 정보를 로컬 'RPM 데이터베이스'에 저장함.

yum 명령 사용 예

  • yum search string [strings]
    • 패키지 이름이나 요약에서 문자열을 검색하여 패키지를 찾음.
    • yum search web server
  • yum install package [packages]
    • 패키지를 설치 함.
    • yum install emacx
  • yum update [packages]
    • 패키지를 업데이트 함.
  • yum remove package [packages]
    • 패키지를 삭제함.
  • yum reinstall package [packages]
    • 패키지를 다시 설치함.
  • yum info [options] [packages]
    • 패키지의 설명과 요약 정보를 출력함.
    • yum info firefox
  • yum list available [packages]
    • 설치되어 있지 않은 가용 패키지의 목록을 출력함.
  • yum list installed [packages]
    • 설치되어 있는 패키지 목록을 출력함.
    • yum list installed emacs
  • yum deplist package [packages]
    • 패키지가 의존하는 요소와 그것을 제공하는 패키지를 나열.
  • yum repolist [options]
    • 저장소 목록을 나열함.
    • yum repolist enabled 명령은 활성화된 저장소 목록을 출력함.
  • yum history [info | undo | ...]
    • 패키지의 설치와 삭제 이력이 /var/log/yum.log 파일에 기록됨.
    • yum history 명령으로 이력을 확인할 수 있음.
    • yum history info 3 명령으로 해당 yum 명령의 자세한 내용 확인.
    • yum history undo 3 명령으로 해당 명령을 취소할 수 있음.

압축

  • 시스템 파일이나 데이터를 백업할 때 파일 압축이 필요함.
  • 압축을 통해 디스크 공간을 절약하거나 데이터 전송 시간을 줄일 수 있음.
  • 다양한 압축 기술이 존재.
    • 공간 효율과 압축 속도에서 차이가 남.
    • gzip, bzip2, xz, zip 등

gzip

  • bgzip은 압출 파일의 형식이자 파일의 압축과 해제를 위한 프로그램
    • 가장 널리 사용되는 리눅스 압축 프로그램
    • 초기 UNIX 시스템의 압축 프로그램을 GNU 프로젝트에서 수정한 버전
  • gzip [options] [files]
    • 압축시 원본파일은 .gz 확장자를 갖는 파일로 대체됨
    • gzip file을 수핸하면 file은 사라지고 file.gz이 생성됨
  • 옵션
options desc
-c 결과를 표중 출력으로 보내고 원본 파일은 그대로 유지
-d 압축을 풀 때 사용하며 gunzip 명령과 같음
-r 인수로 디렉토리가 주어질 때 디렉토리에 포함된 모든 파일을 재귀적으로 탐색하여 압축
-t 압축 파일의 무결성을 검사
-v 압축 또는 해제하면서 파일의 이름과 압축률을 출력
-number 압축률을 의미하는 1 ~ 9 사이의 값. 기본값 : 6

gunzip

.zg, .Z, .tgz, .taz 등의 확장자를 가진 압축 파일을 풀고, 확장자를 제거함.
(.tgz -> .tar.gz, .taz -> tar.Z)

options desc
gzip foo.txt 압축 파일 foo.txt.gz 생성. 원본 삭제
gzip -d foo.txt.gz 압축을 풀고 원본 파일을 생성. 압축 파일은 삭제
gzip *.txt 확장자가 txt인 모든 파일에 대해 개별적으로 압축
gunzip -d *.gz 모든 압축 파일을 풀고 원본 파일을 생성
gzip -c file1 > bar.gz
gzip -c file2 >>bar.gz
file1을 압축하여 bar.gz을 만들고, file2를 압축하여 bar.gz에 추가함
gunzip -c bar.gz 압축을 풀고 결과를 표준 출력으로 보냄. 압축파일은 유지함
gzip -d file1 file2 > baz.gz 두 파일을 각각 압축한 후 연결 시켜 압축파일 bar.gz을 만듦

bzip2

  • 블록 정렬 압축 알고리즘을 사용한 파일 압축 프로그램
  • gzip과 유사하나 압축 효율이 높고 속도가 느림
    • 압축후 파일의 크기가 매우 작아짐
  • 사용방법은 gzip과 유사하며 압축 파일의 확장자로 .bz2 사용
    • bzip2 file file.bz2 생성후 원본 제거
    • bzip2 -k file 원본 파일 유지
    • bzip2 -d file.bz2 ==> bunzip2 file.bz2
    • bunzip2 -c file.bz2 ==> bzcat file.bz2

tar

  • 여러 파일을 하나의 아카이브 파일로 묶거나 아카이브 파일에서 파일을 추출하는 명령
    • 아카이브는 백업 등의 목적으로 여러 파일을 하나로 묶은 것.
  • tar mode [options] [tarfile] [pathnames...]
    • tarfile은 아카이브를 의미
    • pathname은 아카이브에 넣을 파일이나 디렉토리
    • 아카이브 파일의 확장자는 보통 .tar를 사용함
    • 모드나 옵션을 사용할 때 대시 (-)를 사용하지 않는 편임
  • mode
    • A : tar 파일을 아카이브에 추가
    • c : 새로운 아카이브 생성
    • x : 아카이브로부터 파일 추출
    • r : 아카이브에 파일 추가
    • t : 아카이브에 포함된 파일의 목록을 출력
  • options
    • f : 아카이브 파일을 지정
    • v : 처리 과정에서 대상 파일을 보여줌
    • z : tar 명령에서 gzip을 사용 (.tar.gz)
    • j : tar 명령에서 bxip (.tar.bz2)
  • 사용 예
    • tar cvf foo.tar *.c
      • : 현재 디렉토리에서 .c로 끝나는 모든 파일을 foo.tar로 묶어 만들고 진행 결과 출력.
    • tar tvf foo.tar
      • : 아카이브 foo.tar에 있는 파일 목록을 출력.
    • tar xvf foo.tar
      • : 현재 디렉토리에 아카이브 foo.tar를 해제.
    • tar cvf bar.tar backup/
      • : 디렉토리 backup의 내용을 묶어 아카이브 bar.tar로 만듦.
    • tar cvfz baz.tar.gz backup/
      • : 위와 같으나 아카이브를 만들 때 gzip을 이용하여 압축.
    • tar xvfz bzx.tar.gz
      • : gzip으로 압축된 아카이브를 해제.

jar

  • jar는 java application을 압축 형식.
  • 실제로는 ZIP 파일 포멧으로 이루어진 압축 파일로 확장자는 .jar
  • JDK에 포함된 jar 명령어를 통해 사용.
  • zip을 사용할 수 있으나 manifest 파일이 필수인 경우에는 정상적으로 작동하지 않을 수 있다.
  • jar {ctxu} [vfm0M] [jar file] [manifest-file] [-C dir || files]
    • 필수 옵션 cxtu
      • c : 새 archive를 생성.
      • x : jar 파일을 해제.
      • t : jar 파일에 해당하는 파일의 content list를 설정.
      • u : jar 파일 내에 들어있는 파일을 수정.
    • 기타 옵션 vfm0M
      • v : console 창으로 진행 사항을 모두 출력.
      • f : archive 될 파일 이름 지정.
      • m : manifest 파일로부터 정보를 포함.
      • 0 : 묶기만 하고 zip으로 압축하지 않음.
      • M : 추가되는 entry에 대해 manifest를 생성하지 않음
    • jar file : archive 대상이 되는 .jar 파일의 이름
    • manifest-file : 정보를 포함할 manifest file의 이름
    • -C dir || files : archive 할 디렉토리 또는 파일 명.
728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linnux] 네트워크 설정 및 점검  (0) 2020.12.05
[Linux] 쉘 스크립트 -2  (0) 2020.11.08
[Linux] 프로세스 관리  (0) 2020.11.01
[Linux] 파일 시스템 관리  (0) 2020.10.25
[Linux] vi 사용 텍스트 편집  (0) 2020.10.25

프로세스 관리

  • 학습 개요
    프로세스 개념을 확인하고 프로세스의 실행과 관련이 있는 실행 파일 또는 디렉토리의 특수 접근권한을 알아보자.
    프로세스의 상태를 모니터링하고 관리하는 명령의 사용법을 알아보자.
    주기적으로 수행되는 작업을 자동으로 수행하게 하는 cron 서비스를 알아보자

  • 학습 목표

    1. 프로세스 개념과 프로세스의 상태 변화를 설명할 수 있다.
    2. 포어그라운드와 백그라운드 프로세스의 차이를 설명할 수 있다.
    3. 프로세스의 상태를 확인하고 관리하는 명령을 사용할 수 있다.
    4. cron 서비스를 이용해 주기적으로 반복되는 작업을 실행할 수 있다.

프로세스

프로세스 정의

  • 커널에 등록되어 관리를 받는 작업 또는 실행중인 프로그램
    • 커널은 프로세스 관리 블록(PCB)에 프로세스에 관한 정보를 저장
    • 프로세스틑 시스템 자원을 사용하여 여러 상태 변화를 겪음
    • 각 브로세스는 유일한 PID를 가짐
  • 프로세스 예
    • init 프로세스는 PID가 1
      • 모든 사용자 프로세스의 조상
    • 로그인을 하거나 터미널 창을 열면 'bash 프로세스'가 할당 됨
    • 필요에 따라 프로세스는 자식 프로세스를 생성함
    • 데몬 프로세스는 서비스 요청을 처리하기 위한 백그라운드 프로세스

프로세스 관리 블록

  • 커널에 등록된 각 프로세스에 대한 정보를 저장하는 영역
    • 프로세스들은 모두 커널 공간에 자신의 정보를 가짐
  • PCB에 저장되는 정보
    • PID, PPID
    • UID, EUID, GID, EGID
    • 프로세스의 현재 상태
      • 실행/준비/조류/지연 등의 상태 정보와 CPI 사용 시간등
    • 프로세스 우선순위
    • 프로세스가 사용 중인 자원에 관한 정보
      • 메모리 주소, 입출력 장치, 파일등
    • 모든 대기중인 시그널 목록
    • 문맥 교환 정보

명령의 실행과 프로세스 생성

  • 쉘에서 명령을 실행하면 새로운 프로세스가 만들어져 처리됨
    • 시스템 호출 fork()를 호출하여 기존 부모 프로세스가 자신의 복사본 자식 프로세스를 만듦
    • 자식 프로세스는 시스템 호출 exec(program)에 의해 새로운 프로그램으로 대체되어 실행됨
    • 프로그램이 종료되면 자식 프로세스가 종료됨
    • 부모 프로세스는 보류 상태에 있다가 자식 프로세스가 종료되면 깨어남
  • 예)
    • 터미널 창에서 ls 명령을 실행하면
    • 쉘은 fork() 를 호출하여 쉘의 복사본(자식 프로세스)를 생성함
    • 자식 프로세스는 exec(ls)를 호출하여 ls 명령을 실행함
  • pstree 명령은 프로세스 트리를 보여주는 명령
[ec2-user@ip-aws ~]$ pstree
systemd─┬─acpid
        ├─2*[agetty]
        ├─amazon-ssm-agen───7*[{amazon-ssm-agen}]
        ├─atd
        ├─auditd───{auditd}
        ├─chronyd
        ├─crond
        ├─dbus-daemon
        ├─2*[dhclient]
        ├─gssproxy───5*[{gssproxy}]
        ├─lsmd
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─rngd
        ├─rpcbind
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd───sshd───sshd───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        └─systemd-udevd

포어그라운드(foreground) 프로세스

  • 쉘 프롬프트에서 명령을 실행하면 포어그라운드 모드로 수행됨
    • 포어그라운드 프로세스가 끝나기 전에는 다른 명령을 수행할 수 없음
      • 포어그라운드 프로세스는 터미널에 대한 제어권을 가짐
    • 포어그라운드 프로세스틑 키보드 입력 및 화면 출력이 가능함
      • 터미널로부터 키보드 입력을 받을 수 있는 프로세스는 하나 뿐임
  • 포어그라운드로 실행중인 프로세스를 강제 중지 -> ctrl + c
  • 포어그라운드로 실행중인 프로세스를 백그라운드로 전환/멈춤 또는 지연 상태로 변경 -> ctrl + z
    • fg jobid bg jobid를 수행하면 실행상태가 됨.

백그라운드(background) 프로세스

  • 백그라운드로 실행하려면 쉘 프롬프트에서 명령의 끝에 &를 추가하여 실행
    • 백그라운드로 프로세스를 실행시키면 쉘은 즉시 명령 대기 상태가 됨
      • 백그라운드 프로세스는 터미널 출력은 가능하나 키보드 입력은 받을 수 없음
      • 백그라운드 프로세스가 키보드 입력이 필요하면 지연 상태가 됨
    • 입력 없이 장시간 실행되어야 하는 경우 주로 사용
    • 터미널 창을 종료하면 연결된 백그라운드 프로세스도 종료 됨
  • 백그라운드 프로세스를 포어그라운드로 전환하는 방법 -> fg jobid
  • jobs 명령으로 백그라운드 프로세스의 상태를 점검할 수 있음
    • jobs -l은 PID를 함께 보여줌

특수권한

SetUID

  • 파일의 접근권한에서 소유자의 실행 권한에 x가 아닌 s 가 표시됨
  • 실행 파일에 SetUID가 설정되어 있으면, 해당 파일이 실행될 때 '실행시킨 사용자'가 아닌 '파일의 소유자' 권한으로 실행
  • 일반 사용자가 passwd 명령으로 비밀번호를 수정하면 결국 /etc/passwd 또는 /etc/shadow 파일이 수정되어야 함(권한 상승이 필요함)
  [ec2-user@ip-aws ~]$ ls -l /etc/passwd
  -rw-r--r-- 1 root root 1304 Oct  4 08:35 /etc/passwd
  [ec2-user@ip-aws ~]$ ls -l /usr/bin/passwd
  -rwsr-xr-x 1 root root 27776 Feb 13  2020 /usr/bin/passwd
  • 설정 방법은 chmod 4755 file 또는 chmod u+s file
  • 해제 방법은 chmod 0755 file 또는 chmod u-s file

SetGID

  • 파일의 접근권한에서 그룹의 실행 권한에 s가 표시됨
  • SetGID가 설정된 파일을 실행하면 '실행자의 그룹 권한'이 아닌 '파일 소유자의 그룹 권한'으로 실행됨
  • 디렉토리에 설정된 경우, 그 디렉토리에 파일을 만들 때 '파일 소유 그룹'이 '디렉토리의 소유 그룹'으로 지정됨
  • 설정 방법은 chmod 2755 file || chmod g+s file

StickyBit

  • 파일의 접근권한에서 기타 사용자의 실행 권한에 t가 표시됨
  • 주로 공유 디렉토리에 설정되며, 누구나 그 디렉토리에 파일 생성할 수 있지만 파일의 소유자만 삭제할 수 있음
  • chmod 1755 file || chmod o+t file

프로세스의 상태

프로세스의 상태 변화

제한된 자원과 멀티 태스킹을 지원하는 운영체제에서 프로세스는 여러 상태 변화를 겪음
(이미지 그러 넣기)

ps 명령

  • 현재 프로세스의 상태를 확인하는 명령
    • 특정 순간에 활동 중인 프로세스의 상태를 보여줌
  • ps [options]
    • 옵션 없이 ps 명령을 실행하면 현재 터미널과 연결괴어 있응 프로세스 중 프로세스의 EUID가 현재 사용자의 UID와 같은 프로세스를 선택하여 보여줌
    • ps -ef, ps aux 명령이 자주 사용되는 옵션임
      • 결과에서 PPID는 부모의 PID, STIME은 시간, TTY는 터미널, TIME은 cpu 누적 사용 시간
[ec2-user@ip-aws ~]$ ps -ef --forest
UID        PID  PPID  C STIME TTY          TIME CMD
root         2     0  0 Oct04 ?        00:00:00 [kthreadd]
root         4     2  0 Oct04 ?        00:00:00  \_ [kworker/0:0H]
root         6     2  0 Oct04 ?        00:00:00  \_ [mm_percpu_wq]
root         7     2  0 Oct04 ?        00:00:03  \_ [ksoftirqd/0]
...
root         1     0  0 Oct04 ?        00:00:32 /usr/lib/systemd/systemd --switched-r
root      1932     1  0 Oct04 ?        00:00:42 /usr/lib/systemd/systemd-journald
root      1955     1  0 Oct04 ?        00:00:00 /usr/sbin/lvmetad -f
root      1968     1  0 Oct04 ?        00:00:00 /usr/lib/systemd/systemd-udevd
root      2653     1  0 Oct04 ?        00:00:06 /sbin/auditd
libstor+  2681     1  0 Oct04 ?        00:00:04 /usr/bin/lsmd -d
root      2687     1  0 Oct04 ?        00:00:34 /sbin/rngd -f
dbus      2689     1  0 Oct04 ?        00:00:21 /usr/bin/dbus-daemon --system --addre
...
root      2703     1  0 Oct04 ?        00:00:00 /usr/sbin/gssproxy -D
root      2920     1  0 Oct04 ?        00:00:00 /sbin/dhclient -q -lf /var/lib/dhclie
root      3025     1  0 Oct04 ?        00:00:02 /sbin/dhclient -6 -nw -lf /var/lib/dh
root      3173     1  0 Oct04 ?        00:00:04 /usr/libexec/postfix/master -w
postfix   3175  3173  0 Oct04 ?        00:00:00  \_ qmgr -l -t unix -u
postfix  22117  3173  0 11:27 ?        00:00:00  \_ pickup -l -t unix -u
...
root      3392     1  0 Oct04 ?        00:00:08 /usr/sbin/sshd -D
root     20986  3392  0 10:54 ?        00:00:00  \_ sshd: ec2-user [priv]
ec2-user 21004 20986  0 10:55 ?        00:00:00      \_ sshd: ec2-user@pts/0
ec2-user 21005 21004  0 10:55 pts/0    00:00:00          \_ -bash
ec2-user 22903 21005  0 11:43 pts/0    00:00:00              \_ ps -ef --forest
...
  • 옵션
옵션 설명
a 터미널과 연결된 모든(all) 사용자의 모든 프로세스를 출력함
-A 또는 -e 모든(every) 사용자의 모든 프로세스를 출력함
u 현재 사용자의 프로세스를 사용자 친화적(user-oriented)로 자세히 출력함
x 현재 사용자가 소유한 모든 프로세스를 출력함. 데몬 프로세스처럼 터미널과 연결되어 있지 않은 프로세스도 출력함
-u users
U users
--user=users
EUID가 주어진 users(사용자 명이나 UID)와 같은 프로세스를 출력함
여러 사용자를 표시할 때는 콤마(,)나 빈칸으로 구분함
-p PIDs 주어진 PID를 가진 프로세스를 출력함
e 프로세스 정보에 관한 환경변수 정보를 포함시켜 출력함
I 또는 -ㅣ 또는 -f 프로세스에 관한 많은(long or full) 정보를 출력함
o format 또는 -o format 출력을 원하는 항목을 지정하여 출력함

프로세스 관리

top 명령

  • 현재 실행 중인 프로세스의 모니터링과 관리를 위한 대화식 도구
    • 현재 실행중인 개별 프로세스의 실시간 정보를 주기적으로 보여줌
      • CPU와 메모리 사용량 및 시스템의 부하 등을 확인
    • ps 명령의 동적 / 대화식 버전
  • top [options]
  • 옵션
    • -p delay : 초 단위로 주기를 지정
    • -p pid, -u user : 특정 프로세스나 사용자 프로세스로 한정
    • -S : 총 CPU 사용시간(자식 프로세스 포함) 출력
  • 기본적으로 CPU 사용량이 많은 프로세스를 먼저 보여줌
  • top명령에서 헤더의 의미는 ps 명령과 유사함
  • 대화식 서브 명령
옵션 설명
Space Bar 화면을 갱신함
k kill 명령을 수행함
r renice 명령을 수행
u 명령 옵션에서 -u의 의미와 같음
M %MEM 값으로 정렬
N PID 값으로 정렬
P %CPU 값으로 정렬
T Time + 값으로 정렬
q top 명령을 종료

kill 명령

  • 프로세스에 시그널을 보내는 명령
    • 다른 프로세스에게 시그널을 보내도록 커널에 요청하는 것
    • 시그널은 프로세스를 관리하는 방법이고 프로세스 간 통신수단
    • 여러 종류의 시그널이 존재하며 기본 시그널은 TERM임
  • kill [-signal] pids
  • kill [-s signal] pids
    • signal은 시그널의 이름 또는 시그널 번호
    • kill pids 명령은 TERM 시그널을 보냄
    • kill -STOP 3188 3188 PID를 가진 프로세스에게 멈춤 시그널을 보냄

killall 명령

  • 특정 프로세스에 한꺼번에 시그널을 보내는 명령
  • killall [options] [-s signal] [-u user] names
    • 프로그램이나 프로세스의 이름을 사용
    • killall -i -d 9 -u jeaha bash는 확인을 거쳐 jeaha 계정의 bash 프로세스에게 kill 시그널을 보냄
  • 시그널의 종류
번호 이름 설명
1 HUP 터미널이 종료될 때 터미널에 연결된 모든 프로세스에게 보내짐.
또는 데몬 프로세스가 설정 파일을 다시 읽어 재시작하게 만들 때 사용하는 시그널
2 INT Interrupt의 의미로 터미널에서 ctrl + c 를 누르는 것과 같음
9 KILL kill의 의미로 프로세스를 강제로 즉시 종료시킴
15 TERM Terminate의 의미로 kill 명령의 기본 시그널. 정상적인 종료 방법으로 끝내게 함
18 CONT Continue의 의미로 STOP 시그널로 중단된 프로세스를 재개시킴
19 STOP Stop의 의미로 프로세스를 잠시 중단시킴
20 TSTOP Terminal Stop의 의미로 터미널에서 ctrl + z를 누르는 것과 같음

nice와 renice

  • 'nice 우선순위(NI) 값'을 조정하는 명령
  • NI 값은 -20(가장 높음) ~ 19(가장 낮음)
    • 우선순위가 높으면 CPU를 점유할 확률이 높음
    • 기본 NI 값은 0

nice [option] [command]

  • 명령을 실행할 때 NI 값을 조정하는 명령
  • 일반 사용자는 NI 값을 0 이상으로만 지정할 수 있음
  • 옵션
    • -n adjustment || -adjustment 는 조정 수치 만큼 NI 값을 조정
    • nice -n +5 top || nice -+5 top은 NI 값을 5 증가 시켜 우선순위를 낮춤

renice priority [option]

  • 실행 중인 프로세스의 NI 값(절댓값)을 바꾸는 명령
  • 일반 사용자는 자신이 소유한 프로세스의 우선순위를 낮출 수만 있음
  • 옵션
    • -p pids는 프로세스를 지정
    • -g gids는 GID를 지정
    • -u users는 사용자를 지정
    • renice 10 -u jeaha는 관리자 또는 본인이 jeaha 계정이 소유한 모든 프로세스의 NI 값을 10으로 조정함

nohup

  • HUP 시그널과 무관하게 명령이 스스로 종료될 때까지 계속 수행시키는 명령
    • 로그아웃을 하거나 터미널 창을 끝내면 프로세스에 HUP 시그널이 보내짐
  • nohup 명령을 실행하는 경우 명령 행의 끝에 '&'를 붙여 백그라운드로 실행해야 함
    • nohup find -size + 100k > catalina.out &
    • 표준 출력과 표준 에러 출력이 필요한 경우 ~/nohup.out에 출력됨

프로세스 관리를 위한 GUI

  • 데스크탑 메뉴에서 '프로그램 > 시스템 도구 > 시스템 정보'를 실행
    • '시스템 정보'창에서 모든 또는 자신이 소유한 프로세스의 상태를 보고 [편집] 메뉴에서 제어할 수 있음

cron 서비스

  • 지정된 시간에 주기적으로 자동 수행되는 작업을 수행함
  • crond 데몬 프로그램이 서비스를 제공
    • 1분 간격으로 'crontab 파일'을 검사하여 수행함
    • 'crontab 파일'에는 'cron 작업의 수행 방법'이 기록되어 있음
    • 일반적으로 'cron 작업'은 쉘 스크립트로 작성됨
  • cron 서비스를 이용한 자동 스케줄
    • /etc/crontab 파일과 /etc/cron.d/ 디렉토리에 존재하는 파일
      • 시스템 수준에서 주기적으로 수행될 작업을 설정
    • crontab
      • 개별 사용자는 crontab 명령을 이용하여 주기적으로 수행될 작업을 설정할 수 있음

crontab 파일의 형식

  • 환경 변수의 설정과 cron 작업의 수행 방법을 정의
[ec2-user@ip-aws ~]$ cat /etc/cron.d/0hourly
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly
  • 항목의 의미
    • 분(059), 시(024), 날짜(031), 달(112), 요일(0~7)
      • *는 매번을 의미, 간격 표시를 위해/, 범위 표시를 위해 -와 ,를 사용할 수 있음
    • 사용자, 실행할 명령
      • 사용자는 시스템 수준 crontab 파일의 경우에만 지정
      • run-parts는 지정된 디렉토리에 있는 스크립트를 수행하는 명령
    • 0 _/6 _ * 1-5 /bin/mail -s "Hi" jeaha@localhost
    • 월요일부터 금요일 까지 0, 6, 12, 18시 정각에 메일을 보냄

crontab

  • 일반 사용자가 자신의 cron 작업을, 자신의 crontab 파일에 등록할 때 사용해야 하는 명령
    • /var/spool/cron/username 파일로 만들어지거나 수정 권한이 없음
  • crontab [option]
  • 옵션
    • -l : crontab 파일의 내용으로 출력
    • -e : crontab 파일을 vi로 편집할 수 있음
      • * * * * * date >> ~/date.txt 를 입력한 후 확인해 볼 것
    • -r : crontab 파일 삭제
    • -u : user는 지정된 사용자의 crontab 파일을 사용(권한 필요)
  • 지정된 시간에 일회성 작업을 예약하려면 at 명령을 사용
728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linux] 쉘 스크립트 -2  (0) 2020.11.08
[Linux] 소프트웨어 관리  (0) 2020.11.01
[Linux] 파일 시스템 관리  (0) 2020.10.25
[Linux] vi 사용 텍스트 편집  (0) 2020.10.25
[Linux] 사용자 관리  (0) 2020.10.25

파일 시스템 관리

  • 학습 개요
    리눅스 시스템에서 저장 장치에 파티션을 만든 후, 파티션에 파일 시스템을 만들어 주고, 파일 시스템을 마운트 시켜 전체 디렉토리 트리 구조에 연결 시켜 보자.
    LVM 볼륨 개념과 사용 방법과 파일 시스템의 종류를 알아보자.

  • 학습 목표

    1. 저장 장치에 여러 파티션을 만들고 관리 할 수 있다.
    2. 파일 시스템의 마운트와 언마운트 명령을 설명할 수 있다.
    3. LVM 도구를 사용하여 볼륨을 만들고 사용할 수 있다.
    4. 리눅스 파일 시스템의 구조와 종류를 설명할 수 있다.

마운트와 언마운트

마운트

  • 파일 시스템을 전체 디렉토리 구조의 특정 디렉토리에 연결하는 것
    • 저장 장치에 파티션이 존재하며, 파티션에 파일 시스템을 만들어져 있음.
  • 마운트 되는 위치를 마운트 지점이라 함.

/etc/fstab

  • 리눅스 시스템이 부팅 될 때 자동으로 마운트 할 파일 시스템의 목록을 가진 설정 파일
    • 각 라인마다 개별 파일 시스템의 마운트 정보가 기록 되어 있음

라인을 구성하는 항목의 의미

필드 내용
디바이스 장치의 이름으로 디바이스 파일(ex:/dev/sda1) 또는 UUID(Universally Unique Identifier)가 사용됨
마운트 지점 파일 시스템 트리에서 디바이스가 부착되는 위치(디렉토리)
파일 시스템 유형 리눅스에서 허용하는 파일 시스템의 유형
옵션 마운트 옵션으로 mount 명령에서 -o 옵션을 사용하는 것과 의미가 같음
덤프 여부 백업 덤프의 여부. 0 : X, 1 : O
파일 시스템 검사 여부 파일 시스템 검사를 위한 것. 0 : X, / 는 1일 경우, 나머지는 2일 경우 검사함.
[ec2-user@ip-aws ~]$ cat /etc/fstab
#
UUID=b24eb1ea-ab1c-47bd-8542-3fd6059814ae     /           xfs    defaults,noatime  1   1

마운트와 /etc/fstab

  • UUID는 파일 시스템을 유일하게 구분하는 32자리 16진수 숫자
    • 블록 디바이스의 정보를 보여주는 blkid명령으로 확인 가능
  • 마운트 또는 언마운트를 하면 내용이 /etc/mtab 파일에 기록 됨
    • 옵션 없이 단순한 mount 명령을 사용하면 현재 마운트 되어 있는 파일 시스템을 보여줌
    • 추가로 마운트한 것이 없다면 /etc/fstab 파일의 내용과 거의 유사함
  • 기본 마운트 옵션은 rw, suid, dev, exec, auto, nouser, async가 적용됨
    • mount 명령에서 옵션 -o를 사용할 때 적용할 수 있음.

mount

  • 파일 시스템을 마운트 하는 명령
    • 파일 시스템을 지장된 디렉토리(마운트 지점)에 붙여 파일 시스템을 사용할 수 있게 함
  • mount -a [options] [-t type]
    • 옵션 -a는 /etc/fstab 파일에 기록된 모든 파일 시스템을 마운트 함
    • 옵션 -t가 추가되면 해당 유형의 파일 시스템만 마운트 함
  • mount [options] [-o mount_options] device | derectory
    • -a가 사용되지 않으면 지정된 장치 또는 디렉토리에 해당하는 것을 찾아 마운트 함
    • 옵션 -o는 파일 시스템을 마운트 할 때 사용할 옵션
  • EX)
    • mount -a -t iso9660
      • /etc/fstab에 나열된 iso9660 유형의 모든 파일 시스템을 마운트
    • mount /dev/cdrom 또는 mount /mnt/cdrom
      • 장치명 또는 마운트 포인트만 명시되면 /etc/fstab에서 해당 파일 시스템을 마운트
  • 일반적인 마운트 명령
    • 실제 마운트는 드물게 사용함
    • mount [options] [-t type] [-o mount_options] device directory
      • mount 명령을 실행하기 전 마운트 지점(디렉토리)를 생성해야 함.
      • 해당 장치가 존재하는지, 파일 시스템 종류가 맞는지 확인함.
      • 존재한다면 /etc/fstab 파일에서 해당 파티션에 지정된 옵션을 적용하고, 옵션 -o에 주어진 것을 적용하며, 사용되었다면 -r 또는 -w를 적용함
  • EX)
    • mount -t ext4 /dev/sdb1 /mnt/data1
    • mount -t iso9660 -o ro /dev/sr0 /media/cd
    • mount -t vfat /dev/hda1 /mnt/win

umount

  • 디렉토리에 마운트 되어 있는 저장 장치를 해당 디렉토리로 부터 분리
  • umount -a [-nv] [-t fs_type]
  • umount [-nv] device | directory
  • EX)
    • umount -a -t iso9660
      • /etc/mtab에서 iso9660 유형의 파일 시스템을 모두 언마운트
    • umount /dev/sr0
    • umount /media/usb

파티션 관리

파티션

  • 물리적 저장 장치를 논리적으로 분할한 구역
    • 하나의 하드디스크를 여러 개의 파티션으로 만들 수 있음
  • 하나의 파티션을 독립적 저장 장치처럼 사용할 수 있음
    • 파티션은 자신만의 디바이스 파일을 가짐
      • 첫 번째는 SCSI 디스크응 /dev/sda
      • 파티션은 /dev/sda1, /dev/sda1, ...
  • 전통적 MBR 유형 파티션 테이블은 4개의 primary 파티션을 저장할 수 있음

디스크를 여러 파티션으로 분할하여 사용하는 이유

  • 여러 운영체제를 별도의 파티션에 설치하여 멀티 부팅을 사용
  • 특정 파티션이 손상되더라도 다른 파티션에 데이터는 보존됨
  • 파티션 별로 다른 파일 시스템을 만들 수 있음
  • /boot 영역을 별도의 파티션으로 분리하여 빠르게 부팅함
  • /var 영역을 별도의 파티션으로 만들어 가용 공간이 줄어드는 문제를 / 영역과 분리함
  • 가상 메모리로 사용될 스왑 영역을 별도로 파티션으로 구성함

파티션 관리 도구

  • 파티션과 파티션 테이블을 관리하는 프로그램
    • MBR 유형 파티션 테이블은 파티션 최대 크기의 제약이 있음(2TB)
    • 최근 운영체제는 GPT 유형의 파티션 테이블을 지원함
  • 파티션의 생성, 삭제, 이동, 크기 변경 및 복사 기능을 제공
    • 파일 시스템을 관리할 때는 다른 도구를 사용하는 것이 좋음
  • 종류
    • fdisk : 전통적 텍스트 기반 대화식 도구. GPT 지원 X
    • parted : MBR, GPT 모두 지원
    • gdisk : GPT 지원. gparted는 parted의 그래픽 버전
  • parted -l 또는 fdisk -l 명령은 모든 블록 디바이스에서 파티션 정보 출력
  • parted /dev/sda를 수행한 후 서브 명령으로 p 수행 가능

파티션 만들기

  • 저장 장치를 실제로 사용하려면 파티션을 만들고, 파일 시스템을 만들어 줘야 함.
    • parted 또는 fdisk 명령을 사용하면 파티션을 만들 수 있음.
    • mkfs 명령으로 파일 시스템을 만듦.
  • 연습을 위한 방법
    • 가상 머신에 하드디스크 추가
      • VirtualBox 메뉴의 설정 > 저장소 > 컨트롤러 IDE에서 [하드 디스크 추가] 실행
    • 가상 머신에 USB 장착
      • 가상 머신 메뉴에서 마운트 가능
  • 저장 장치의 이름을 알아보기 위헤 ls /dev/dd*, parted -l, tail -f /var/log/messages 명령 사용 가능

볼륨 관리

볼륨

  • 볼륨은 크기가 재조정될 수 있는 파티션
    • 디스크 관리 또는 파티션 관리를 위해 새롭게 등장한 개념
    • 볼륨의 크리극 줄이거나 늘릴 수 있음
  • 여러 디스크에 걸쳐 있는 볼륨을 만들 수 있음
  • 용어
    • 물리볼륨(PV) : 하나의 물리적 디스크
    • 볼륨그룹(VG) : 여러 물리 볼륨을 하나로 묶은 것으로 파티션의 한 종류
    • 논리볼륨(LV) : 볼륨 그룹에서 가용한 공간을 분할한 것으로 개념적으로 기존 파티션과 일치
    • 물리 볼륨은 물리 익스텐트(PE)로 나뉘어 있고, 논리 볼륨은 (LE)로 나뉨.

논리 볼륨 만들기

  • 하드디스크에서 파티션을 만듦
  • 하드디스크의 파티션을 물리 볼륨(pv)으로 만듦
  • 하나 이상의 물리 볼륨(pv)를 할당하여 볼륨 그룹(vg)을 만듦
  • 몰륩그룹(vg) 안에서 논리 볼륨(lv)을 생성
  • 파일 시스템을 생성하고 마운트하여 사용

LVM 유틸리티

  • 볼륨 관리 도구
  • 여러 저장 장치에 각각 물리 볼륨을 만들고, 이것을 합쳐 볼륨 그룹(저장 장치 풀)을 구축
  • 볼륨 그룹을 여러 논리 볼륨들로 나누어 사용
LVM 관련 명령 DESC
pvcreate 파티션을 초기화하여 물리 볼륨으로 만듦
pvdisplay 물리 볼륨의 속성 출력
vgcreate 명령 pvcreate로 만든 블록 디바이스로부터 새로운 볼륨 그룹 생성
vgextend 기존 볼륨 그룹의 크기를 늘리기 위해 물리 볼륨을 추가
vgdisplay 볼륨 그룹의 속성 출력
ivcreate 볼륨 그릅에서 새로운 논리 볼륨 생성
ivdisplay 논리 볼륨의 속성을 출력

파일 시스템

  • 정보의 저장과 검색을 위해 저장 장치를 어떻게 구성하고 관리할지에 대한 규칙
    • 파일에 파일명과 경로를 부여하여 저장이나 검색을 위해 파일을 구분하고 식별하는 방법
  • 파일 시스템의 종류에 따라 파티션의 수와 크기, 파일이름의 길이, 파일의 크기, 파일의 총 수, 파일의 복구, 성능/보안/유연성 등에 차이가 남.

파일 시스템의 구조

  • 유닉스 계열의 운영체제에서 사용하는 파일 시스템의 기본 구성 요소 (이미지 만들어서 올리자 1'05")
  • 슈퍼블록
    • 파일 시스템의 특징을 기록한 블록
    • 블록의 크기, 전체 블록의 개수, inode 테이블의 크기와 위치, 디스크 블록 맵, 첫 번째 데이터 블록의 주소 등
  • inode 테이블
    • 'inode list' 라고 함
    • 하나의 항목인 inode는 한 개 파일의 이름을 제외한 모든 정보를 가짐
    • inode 번호, 파일의 형태, 크기, 접근 권한, 소유자, 소유 그룹, 수정 시간, 링크 수, 디스크 블록 위치 등
    • 디렉토리나 특수 파일도 하나의 파일로 간주
  • 데이터 블록
    • 일반 파일의 경우 실제 데이터가 저장됨
    • 디렉토리의 경우 포함된 파일의 이름이 inode 번호와 함께 저장됨.

파일 시스템 유형

파일 시스템 DESC
ex4 리눅스의 기본 파일 시스템으로 범용 파일 시스템
ext2와 ext3의 개선된 버전
최대 크기 1EiB, 최대 파일 크기 16TiB
저널링을 통한 신뢰성, 온라인 단편화 제거, 하위 호환성 등의 기능
iso9660 CD-ROM 과 같은 광학 디스크에서 사용되는 표준 파일 시스템
vfat 윈도우 운영체제와 호환되는 파일 시스템으로 USB에서 주로 사용 됨
HFS+ 매킨토시에서 사용되는 표준 파일 시스템
Btrfs 리눅스 차세대 파일 시스템
XFS 고성능으로 대용량 파일 또는 파일 시스템을 사용하기 위한 파일 시스템

커널이 사용하는 가상 파일 시스템과 네트워크 파일 시스템도 있음

mkfs

  • 파티션이나 논리 볼륨에 리눅스 파일 시스템을 만드는 명령
  • mkfs [-t fs-type] device
    • 옵션 -t fs-type을 사용하여 파일 시스템 종류 지정 가능
    • device는 /dev/sdb1 또는 /dev/sdc1과 같은 장치 이름
  • 실제 mkfs는 mkfs.종류이름을 사용하여 수행 됨

fsck

  • 파일 시스템의 무결성을 검사하고 손상된 파일을 고치는 명령
    • 마운트 되어 있지 않은 파일 시스템을 검사
    • 문제가 있다면 대화식으로 파일 시스템 복원
    • 파일 시스템의 'lost + found' 디렉토리에 손상된 파일이 남아 있을 수 있음
  • fsck [options] device
  • e2fsck와 같은 파일 시스템 고유의 검사 프로그램이 존재할 수 있음

스왑 영영

  • 특정 파티션이나 파일을 스왑 영역으로 저장하여 사용 가능
    • 메모리 사용량을 확인하는 free 명령으로 스왑 메모리도 알 수 있음
  • 파티션을 스왑 영역으로 사용할 때
    • 빈 파티션을 만듦
    • mkswap device를 수행하여 스왑 파티션으로 함
      • 지정한 특정 장치나 파일을 리눅스용 스왑 영역으로 지정
    • swapon device를 수행하여 활성화 시킴
      • free 명령으로 스왑 영역을 확인 가능
    • /etc/fstab 파일에 기록함
  • 파일을 스왑 영역으로 사용할 때?

df

  • 마운트 되어 있는 파일 시스템의 공간 사용 정보를 보여줌
  • df [options] [names]
    • 인수 names는 장치 이름 또는 마운트 지점
  • 옵션
    • -h : 용량 단위를 KB, MB, GB단위로 보여줌
    • -T : 파일 시스템의 유형을 포함하여 출력함
    • -i : inode 사용량을 보여줌
➜  .ssh df -h
Filesystem      Size   Used  Avail Capacity iused      ifree %iused  Mounted on
/dev/disk1s5   932Gi   11Gi  502Gi     3%  488476 9767489684    0%   /
devfs          191Ki  191Ki    0Bi   100%     662          0  100%   /dev
/dev/disk1s1   932Gi  418Gi  502Gi    46% 3497725 9764480435    0%   /System/Volumes/Data
/dev/disk1s4   932Gi  1.0Gi  502Gi     1%       2 9767978158    0%   /private/var/vm
map auto_home    0Bi    0Bi    0Bi   100%       0          0  100%   /System/Volumes/Data/home

du

  • 디렉토리나 특정 파일의 디스크 사용량을 표시하는 명령
  • du [options] [directories]
    • 인수 directoris는 장치 이름 또는 마운트 지점
    • 기본적으로 하위 디렉토리를 포함하고 1KiB 단위로 출력함
  • options
    • -a : 디렉토리 외에 파일의 디스크 사용량도 출력
    • -s : 주어진 디렉토리 또는 파일만의 총 사용량 출력
  • EX)
    • du : 현재 디렉토리와 모든 서브 디렉토리의 사용량을 블록 수로 표시
    • du --max-depth=1 /home 은 사용자 별로 사용량을 블록 수로 표시
728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linux] 소프트웨어 관리  (0) 2020.11.01
[Linux] 프로세스 관리  (0) 2020.11.01
[Linux] vi 사용 텍스트 편집  (0) 2020.10.25
[Linux] 사용자 관리  (0) 2020.10.25
[Linux] 시작과 종료  (0) 2020.10.24

텍스트 편집

  • 학습 개요
    vi 편집기가 제공하는 다양한 편집 기능을 사용하여 텍스트 파일을 편집하는 방법을 알아보자.
    파일의 이름이나 속성으로 파일을 찾거나 파일에서 특정 문자열을 포함하는 라인을 찾는 셸 명령을 알아보자.

  • 학습 목표

    1. vi 편집기의 커서 이동, 편집, 복사, 붙여넣기 방법.
    2. vi 편집기의 라인 모드에서 검색과 대치 명령 사용.
    3. 파일을 찾거나 문자열을 검색하는 방법.

편집기

리눅스와 텍스트 파일

  • 리눅스 시스템에서 중요한 설정 정보나 쉘 스크립트가 텍스트 파일로 존재함
  • 텍스트 파일은 공유가 쉽고, 간단하게 편집할 수 있는 장점이 있음.

리눅스 텍스트 편집기의 종류

  • gedit
    • GNOME 데스크톱에서 제공하는 작고 가벼운 편집기
  • emacs
    • 화면 단위 편집기로 다양한 기능을 제공하지만 사용하기 어려움
  • vi
    • 유닉스 계열 운영체제의 보편적인 화면 편집기
    • vi는 vim으로 alias 되어 있음
    • vim(Vi Improved)이 vi와 다른 점
      • 파일의 구조를 표시하기 위해 컬러 사용
      • 마우스 지원, 다중 undo, 화면 분할
      • 블록을 선택할 경우 비주얼 모드 지원

vi [option] [filename]

vi는 모달 편집기로 사용중에는 다른 작업을 수행할 수 없음.

vi 편집기와 세가지 모드

  • 명령 모드
    • 커서 이동, 삭제, 복사, 붙여넣기
    • 어떤 모드에서든 esc를 두번 누르면 명령 모드로 나옴.
  • 라인 모드
    • 저장, 검색, 대치
  • 입력 모드
    • i : insert
    • a : add
    • o : open a line
    • c : change

vi 종료

  • 명령 모드에서 키보드 명령 입력
    • ZZ : 변경 내용을 저장후 종료
  • 라인모드에서
    • :q : 변경 내용 없이 종료
    • :q! : 저장 없이 강제 종료
    • :w [filename] : 종료 없이 저장
    • :wq [filename] : 저장 후 종료
    • :x [filename] : 변경이 있었다면 저장후 종료
    • :x! [filename] : 같은 이름의 파일이 있다면 덮어 씀

vi로 편집하기

텍스트 입력

  • 초기 명령 모드에서 입력 모드로 이동 후 입력 가능함
  • 입력 모드일 때 화면의 하단에 -- insert --가 표시됨
  • 입력 모드에서 esc를 누르면 명령모드로 돌아감
명령 키 설명
a 현재 커서 위치의 오른쪽부터 텍스트를 추가(add)
A 현재 라인의 끝에 텍스트 추가
i 현재 커서의 위치부터 텍스트 삽입(insert)
I 현재 라인의 처음에 텍스트 삽입
o 현재 라인의 아래에 라인이 열리고(open) 텍스트 추가
O 현재 라인의 위에 라인이 열리고 텍스트를 추가

커서 이동 명령

  • 명령 모드에서 화살표 키와 page up/down 키를 사용할 수 있음
  • 그 외의 다양한 키 존재
명령 키 설명
hjkl left, down, up, right
ctrl + f / ctrl + b page up / down
w 다음 단어의 첫 자로 이동
e 다음 단어의 끝 자로 이동
b 앞 단어의 첫 자로 이동
$ 현재 라인의 마지막 칸으로 이동
20G 20번째 라인으로 이동
G 마지막 라인으로 이동
5j 현재 라인에서 아래로 5라인 이동

텍스트 삭제 명령

명령 모드에서 텍스트를 삭제하거나 변경함.
적당한 위치로 커서를 옮긴 후 삭제함

명령 키 설명
x 커서 위치의 한 문자 삭제
dw 커서의 위치부터 다음 단어 전까지 삭제
d$ 또는 D 커서의 위치부터 현재 라인의 끝까지 삭제
d0 커서의 왼쪽부터 현재 라인의 처음까지 삭제
dd 현재 라인 삭제
dG 현재 라인부터 파일의 끝까지 삭제
d20G 현재 라인부터 라인번호 20까지 삭제
3dW 커서의 위치부터 세 단어를 삭제
5dd 현재 라인부터 다섯 라인을 삭제

텍스트 변경 또는 치환 명령

일정 부분의 텍스트를 삭제하고 입력 모드로 전환됨
삭제, 변경 또는 붙여넣기를 한 후 커서를 이동하고 도트(.) 명령을 수행하면 앞서 수행한 작업을 반복할 수 있음

명령 키 설명
r 커서 위치의 한 문자를 대치
R 커서의 위치부터 계속 대치할 수 있음. 입력 모드로 전환 됨(수정)
s 또는 cl 커서 위치의 문자가 삭제되고 입력 모드로 전환됨 (삽입)
S 또는 cc 현재 라인에 존재하는 문자가 삭제되고 현재 라인에서 입력 모드로 전환
cw 커서 위치부터 단어의 끝까지 삭제되고 입력 모드로 전환
cb 커서 위치부터 단어의 앞까지 "
c) 커서 위치부터 문장의 끝까지 "
c} 커서 위치부터 문잔의 끝까지 "

텍스트 복사

  • 삭제나 변경을 위한 명령 키를 사용할 때 텍스트가 복사 됨
  • 또는 커서를 적당한 위치로 이동한 후 y 명령을 사용하여 복사

텍스트 붙여 넣기

  • P 또는 p
  • 커서의 왼편/위 라인 또는 오른편 아래 라인에 붙여넣기 할 수 있음
명령 키 설명
yy 현재 라인 복사
5yy 현재 라인부터 다섯 라인 복사
yw 커서의 위치부터 다음 단어의 앞 까지 복사
y$ 커서의 위치부터 라인의 끝까지 복사
y0 커서의 왼쪽 부터 라인의 앞까지 복사
y^ 커서의 왼쪽 부터 라인 앞의 빈칸은 무시 하고 복사
yG 현재 라인부터 파일의 끝까지 복사
y) 커서의 위치부터 한 문장을 복사
y} 커서의 위치부터 한 문단을 복사

블록 지정하기

  • v 또는 V 명령을 사용하여 문자 또는 라인 단위로 지정함
    • 블록을 지정하고 싶은 곳에 커서를 이동하고 화살표를 이용해서 블록을 지정하고 삭제(x) 또는 복사(y) 함.
  • 커서를 이동한 후 p 또는 P 명령을 사용하여 붙여 넣기 할 수 있음
명령 키 설명
v 비주얼 모드에서 한 번에 한 문자씩 선택
V 비주얼 모드에서 한 번에 한 라인씩 선택

명령 취소와 기타 명령

명령 모드에서 다음 명령들을 수행 가능

명령 키 설명
u 이전 변경 작업 취소(undo)
ctrl + r 취소를 취소
:e! 마지막 저장을 취소하고 다시 작업
:n n번 라인으로 이동
J 또는 :j 현재 라인과 아래 라인을 합침
!:command vi 를 사용중에 쉘 명령 command를 수행
:sh vi를 빠져나가 쉘 사용 후 exit 할 시 vi로 돌아옴
:se nu 화면 좌측에 라인 번호 표시
ctrl + g 화면 하단에 파일 이름, 전체 라인 수, 현재 라인의 상대 적인 퍼센티지 표시
:r filename 지정된 파일의 내용을 읽어 현재 커서의 아래 줄에 삽입

검색 명령

  • 한 라인에서 검색 할 때 명령 모드에서 f 사용
    • fa 명령은 커서 다음 위치부터 a를 찾음
    • ;을 사용하여 검색 반복
  • 파일 전체를 대상으로 검색 할 때 다음 명령 사용
명령 키 설명
/pattern 순 방향으로 pattern을 검색하여 커서 이동
/pattern/+num pattern 검색 후 그 뒤 + num 번째 라인으로 이동
?pattern 역방향으로 pattern 검색하여 커서 이동
?pattern? -num pattern을 검색하고 그 앞 - num 번째 라인으로 이동
n 이전 검색을 같은 방향으로 반복
N 이전 검색을 반대 방향으로 반복
.* RegExp 사용
?[pP]rint [] 안의 문자 중 하나와 매치

검색 대치

  • 문자열을 검색하여 대치 가능
  • :[g][address]s/pattern/replacement[/option]
명령 키 설명
:s/pattern/replacement 커서가 위치한 라인에서 첫 번째 등장하는 pattern을 replacement에 해당하는 문자열로 대치
:%s/pattern/replacement 전체 범위의 라인에서 위와 같은 것을 수행. % 대신 1,$를 넣어도 됨
:%s/pattern/replacement/g 위와 같으나 등장하는 모든 pattern을 대치
:1,10s/pattern/replacemant/g 위와 같으나 1 ~ 10 라인에서 수행 됨

파일 찾기와 문자열 검색

locate

  • 문자열 패턴이 파일 이름에 포함될 때, 해당 파일의 이름을 출력
    • 절대 경로 상의 디렉토리나 파일 이름에 문자열이 포함되면 출력
  • locate [options] pattern
    • updated 명령에서 만들어진 데이터베이스에서 검색함
    • 접근할 수 없는 파일은 출력 안됨
    • 옵션 -b를 사용하면 마지막 이름만 검색함
  [ec2-user@ip-aws ~]$ locate -b xml
  /etc/amazon/ssm/seelog.xml.template
  /usr/bin/iptables-xml
  /usr/bin/rst2pseudoxml
  /usr/bin/rst2xml
  /usr/bin/xmlcatalog
  /usr/bin/xmllint
  /usr/bin/xmlwf
  ...

find

  • 검색 위치에서 조건에 맞는 파일을 찾고, 검색된 파일을 대상으로 명령을 수행할 수 있음.
    • 파일의 이름, 소유자, 접근 권함, 크기, 수정시간 등의 속성을 조건으로 사용 가능.
  • find [pathnames] [expression]
    • pathname(경로)을 지정하지 않으면 현재 디렉토리( 및 하위 디렉토리)을 기준으로 함.
    • expression(조건이나 액션)이 주어지지 않으면 -print가 기본으로 주어짐
  • EX)
    • 단순히 find 명령을 수행하면 현재 디렉토리와 서브 디렉토리에 존재하는 모든 파일과 디렉토리의 이름을 라인 단위로 출력
    • find /etc -iname '*passwd*'는 이름에 passwd를 포함하는 파일을 찾음
    • find ~ | wc -l은 사용자가 가지고 있는 파일의 총 개수를 출력함

find 명령에서 조건의 지정

  • -cmin n
    • 파일 또는 디렉토리 내용이나 파일 속성의 마지막 수정 시간이 정확히 n분인 경우.
    • n분 보다 작다면 -n 크다면 +n
  • -cnewer file
    • 파일 또는 디렉토리의 내용이나 파일 속성의 마지막 수정 시간이 지전된 file 보다 죄근 것임을 의미
  • -empty
    • 파일 또는 디렉토리가 비어 있는 경우
  • -name pattern
    • 파일 또는 디렉토리의 이름이 pattern과 매칭 되는 경우
  • -iname pattern
    • -name과 같으나 대소문자 구분 X
  • -nouser
    • 파일 또는 디렉토리가 유효한 사용자에 속하지 않은 경우
  • -perm mode
    • 파일 또는 디렉토리의 접근 권한이 mode와 같은 경우.(mode는 8진수 표기나 기호 표기법)
  • -size n
    • 파일 또는 디렉토리의 크기가 n인 경우.
    • 단위로 b(512바이트 블록), c(바이트), k, M, G가 있음
  • -type c
    • 파일의 타입이 c인 경우
    • 파일 타입
      • b : 블록 디바이스
      • c : 문자 디바이스
      • d : 디렉토리
      • f : 정규 파일
      • l : 심볼릭 링크
  • -user name
    • 파일 또는 디렉토리의 소유자가 name인 경우.
      • name또는 UID 사용 가능

find 명령에서 사용되는 액션

  • 검색 된 각 파일에 특별한 액션을 수행할 수 있음
    • 이미 정의 된 액션 또는 사용자 액션을 적용
명령 키 설명
-delete 파일 삭제
-ls 파일 또는 디렉토리의 정보를 자세히 보여줌
-print 경로를 포함하여 파일 이름을 화면에 출력함. 기본 옵션
-quit 매칭 되는 것이 있다면 종료
-exec command {} ; 사용자 정의 액션으로 임의의 command를 수행

find 명령 사용의 예

  • find /user/share -siae +10M
  • find /data -size +500M -size -5G -exec du '{}' ;
  • find . -type f -exec file '[]' ;
  • find /home -user jeaha -ls
  • find /home -user jeaha -or -group staff -ls
  • find /bin -perm 755
  • find /home/jeaha -perm -444 -type d -ls
  • find /bin /usr/bin /sbin /usr/sbin -ctim -3
  • find ~ (-type f -not -perm 0600 ) -or (-type d -not -perm 0700)

grep

  • 파일에서 지정된 문자열 패턴을 포함한 라인을 찾아서 출력
    • 파이프(|)를 사용하여 앞 명령의 결과(검색된 파일)를 입력으로 받아 검색할 때 grep을 자주 사용함
  • grep [options] pattern [files]
    • pattern은 찾으려는 문자열이며 정규식 표현 가능
  • option
    • -r : 디렉토리가 지정될 때, 포함된 모든 파일을 대상으로 검색
    • -i : 대소문자를 구분하지 않음
    • -v : 매칭이 일어나지 않은 라인 출력
  • EX
    • grep root /etc/passwd
    • grep -n unix ~/*.txt
    • ip addr show | grep inet
728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linux] 프로세스 관리  (0) 2020.11.01
[Linux] 파일 시스템 관리  (0) 2020.10.25
[Linux] 사용자 관리  (0) 2020.10.25
[Linux] 시작과 종료  (0) 2020.10.24
[Linux] 파일과 디렉토리  (0) 2020.10.24

사용자 관리

  • 학습 개요
    리눅스 시스템에서 관리자 계정과 일반 사용자 계정의 차이를 이해하고 사용자 계정 또는 그룹 계정의 생성과 관리에 사용되는 명령과 파일에 관해 알아보자.
    패스워드 에이징의 의미를 학습하고 비밀번호 관리에 사용되는 명령과 파일을 살펴보자.

  • 학습 목표

    1. 사용자 계정의 관리에 사용되는 파일을 나열하고 용도를 알아보자
    2. 사용자 계정을 생성, 삭제, 변경 가능.
    3. 그룹 계정을 생성, 삭제, 변경 가능.

사용자 계정

사용자 관리

  • 사용자 계정이 있어야 시스템을 사용할 수 있음
    • 리눅스는 다중 사용자를 지원하는 운영체제
    • '사용자명' 또는 '로그인 아이디'
    • 사용자 계정은 UID를 가짐
  • 관리자 입장에서 사용자 계정 별로 접근 권한을 통제할 수 있음
    • 사용자 계정에 따라 부여된 권한이 다름
    • 일반 계정은 자신의 홈 디렉토리를 제외하면 제한된 권한을 가짐
    • 일반 계정 외에 root 계정 (UID=0) 시스템 계정도 있음

su

  • 사용자를 전환시키는 명령
  • su [-[l]] [username]
    • su -l jeaha 또는 su - jeaha는 지정된 사용자의 로그인 셸을 시작함
    • root 사용자가 아니라면 지정된 사용자의 암호를 알아야 실행시킬 수 있음
    • su -l과 같이 사용자가 생략되면 root 사용자로 로그인 함
    • 단순히 su를 실행하면 로그인 셸이 아니고, 작업 디렉토리도 바뀌지 않음
  ➜  UNIX git:(master) ✗ su -l
  Password:
  su: Sorry
  ➜  UNIX git:(master) ✗
  • 1 개의 셸 명령을 root 계정으로 실행하는 명령
    • su -c 'command'
      • root 암호를 알아야 함
      • 여러 단어로 되어 있다면 명령 부분을 따옴표로 묶어야 함
[ec2-user@ip-aws ~]$ su -c 'ls -l /root/*'
Password:
su: Authentication failure

sudo

root 또는 다른 사용자가 되어 명령을 실행하기 위한 명령

  • 특정 사용자나 그룹별로 세세한 권한을 부여할 수 있음
  • 본인의 암호만 필요하며, root 계정의 암호를 요구하지 않음
  • /etc/sudoers파일에 누가/어디서/어떤 명령을 수행할 수 있는지 설정되어 있어야 함

sudo [-u username] command

  • 현재 셸에서 수행되므로 명령어 부분에 따옴표가 필요 없음
  • -u 옵션을 사용하면 root 사용자가 아닌 특정 사용자로 수행함
  • sudo -l은 자신에게 sudo를 통해 허용된 명령을 확인할 수 있음

/etc/sudoers

  • root 사용자가 visudo를 사용하여 편집함
    • 문법 오류를 검사하고 안전하게 편집할 수 있음
  • 기본 문법은 user MACHINE=COMMANDS형태

useradd

사용자 계정을 만드는 관리자 명령

  • useradd [options] username
    • useradd -d "jeaha, oh" jeaha jeaha라는 계정을 만든다
    • -c 계정의 comment
    • passwd [username] 명령으로 비밀번호 설정 가능
  • useradd -D [options]
    • 계정을 생성할 때 사용되는 홈 디렉토리, 기본 그룹, 만료일, 기본 셸에 관한 기본 설정 가능
    • 다른 옵션을 사용하여 기본 설정을 변경 가능
옵션 설명
-d home_dir 새로운 계정의 홈 디렉토리를 지정. 기본은 /home/username
-D [options] -D만 사용하면 사용자 계정 생성시 사용되는 현재의 환경 설정 값을 보여줌. options로 -b, -e, -g, -s 등을 사용하면 홈 디렉토리의 위치, 만료 날짜, 주 그룹, 기본 셸 등에 관해 변경 가능.
-e expire_date 계정의 만료일 -e 2020-12-31. 기본값은 /etc/default/useradd 파일에 EXPIRE 변수의 값
-g group 계정이 속할 주 그룹을 지정. 그룹은 /etc/group 파일에 이미 존재해야 함. 기본적으로 사용자 계정 및 UID와 같은 값을 가지는 그룹 계정과 GID가 만들어짐
-G group_list 계정이 속한 부 그룹을 지정. 여러 개를 지정하면 콤마로 구분하여 설정
-s shell 사용자 기본 셸을 지정. -s /bin/bash
-u user_id 사용자의 UID를 수동으로 설정

사용자 계정의 생성 절차

  • /etc/login.defs 파일과 /etc/default/useradd 파일을 읽어서 사용자 계전 생성과 관련된 기본값을 확인
  • useradd 명령어에서 주어진 옵션을 검사하여 기본값을 대체할 것인지 확인
  • /etc/passwd 파일과 /etc/shadow 파일에 새로운 사용자 계정에 해당하는 항목을 생성
  • /etc/group 파일에 새로운 그룹에 해당하는 항목을 추가
  • /home/ 디렉토리에서 사용자 계정의 홈 디렉토리 (/home/username)을 생성
  • /etc/skel/ 디렉토리에 있는 파일을 사용자 계정의 홈 디렉토리에 복사

/etc/passwd

  • 사용자 계정에 관한 정보를 가진 텍스트 파일
    • 라인 별로 사용자 계정의 정보가 저장됨
    • 계정의 생성이나 수정을 위해 직접 수정하는 것은 좋지 않음
  • 각 라인은 콜론 : 으로 구분되는 7개 필드를 가짐
  • 사용자계정:암호:UID:GID:설명:홈디렉토리:기본셸
    • jeaha:x:500:500:Jeaha Oh:/home/jeaha:/bin/bash

/etc/skel

사용자 홈 디렉토리에 복사되는 .bash_profile, .bashrc, .bash_login등의 파일을 가짐

/etc/shadow

사용자 계정의 암호 정보와 '패스워드 에이징' 정보를 가짐
각 라인은 아래와 같은 정보를 가짐

  • 202034-364390:!!:18539:0:99999:7:::
  • 사용자계정:암호화된비밀번호:최종비밀번호변경일:minpa:maxpa:pwp:pip:aed::
  • minpa(minimum password age) : 비밀번호 변경 후 바꿀 수 없는 기간
  • maxpa(maximum password age) : 비밀번호 변경 후 다시 변경하지 않고 사용할 수 있는 최대 기간
  • pwp(password warning period) : 비밀번호 만료 전 경고할 날짜 일수
  • pip(password inactivity period) : 비밀번호 만료 후 로그인 가능한 날짜 수
  • aed(account expiration date) : 사용자 계정의 만료일. 빈 값은 계정이 만료되지 않는다.
  • 예약 필드

chage

  • 사용자의 비밀번호 만료에 관한 정보를 변경하는 관리자 명령
  • chage [option] username
    • chage -l username으로 자신의 패스워드 에이징 정보를 확인함
  • 옵션
    • -l days는 비밀번호 만료 후 비활성화 되기 전까지의 날짜 수 (-1은 사용하지 않음)
    • -m days-M days는 각각 비밀번호의 최소(0은 즉시 수정 가능)/최대 사용 날짜 수(최대 : 99999)
    • -d date는 비밀번호의 마지막 변경 날짜 수정
    • -E date는 사용자 계정의 만료일을 지정 (-1은 사용하지 않음)
  [ec2-user@ip-aws ~]$ chage -l ec2-user
  Last password change                                    : Oct 04, 2020
  Password expires                                        : never
  Password inactive                                       : never
  Account expires                                         : never
  Minimum number of days between password change          : 0
  Maximum number of days between password change          : 99999
  Number of days of warning before password expires       : 7

사용자 계정 만들기

사용자 계정의 기본 설정

  • 사용자 계정을 생성할 때 필요한 기본값을 정의한 파일이 있음
  • /etc/login.defs
    • 각 라인은 키워드와 값으로 구성됨
      • UID_MIN과 UID_MAX는 UID를 자동 할당할 때 유효 범위를 지정
      • USERGROUPS_ENAB은 사용자 계정과 같은 이름의 그룹을 자동으로 만들 지를 지정
  [ec2-user@ip-aws ~]$ cat /etc/login.defs
  MAIL_DIR        /var/spool/mail

  PASS_MAX_DAYS   99999
  PASS_MIN_DAYS   0
  PASS_MIN_LEN    5
  PASS_WARN_AGE   7

  UID_MIN                  1000
  UID_MAX                 60000

  SYS_UID_MIN               201
  SYS_UID_MAX               999

  GID_MIN                  1000
  GID_MAX                 60000

  SYS_GID_MIN               201
  SYS_GID_MAX               999

  CREATE_HOME     yes

  UMASK           077

  USERGROUPS_ENAB yes

  ENCRYPT_METHOD SHA512
  • useradd
    • /etc/default/useradd 파일
    • GROUP은 사용자 계정의 주 그룹(자동 생성을 안 할때)을 지정
    • 홈 디렉토리의 생성 위치와 셸의 종류를 지정
    • INACTIVE가 0이면 비밀번호 만료 후 즉시 계정을 비활성화, -1이면 기능을 사용하지 않는 것.
    • EXPIRE 값이 없으면 계정의 만료일이 없는것
  [ec2-user@ip-aws ~]$ cat /etc/default/useradd
  # useradd defaults file
  GROUP=100
  HOME=/home
  INACTIVE=-1
  EXPIRE=
  SHELL=/bin/bash
  SKEL=/etc/skel
  CREATE_MAIL_SPOOL=yes

사용자 계정 수정

usermod

  • 사용자 계정의 정보를 수정하는 관리자 명령
  • usermod [options] username
    • 많은 옵션이 useradd 명령과 유사
    • usermod -g root jeaha는 주어진 사용자의 주 그룹을 root로 변경함
    • id username 주어진 사용자의 uid와 gid를 출력
  • 옵션
옵션 설명
-d home_dir 사용자 계정의 홈 디렉토리 변경
-m -d와 함께 사용해야 하며 기존 홈 디렉토리의 내용을 새 디렉토리로 복사함
-l login_name 사용자 계정의 이름 변경
-u user_id 사용자 계정의 UID를 변경
-L 사용자 계정을 잠금. 실제 /etc/shadow 파일에서 비밀번호 앞에 !를 붙임
-U 사용자 계정의 잠금 해제

userdel

  • 사용자 계정을 삭제하는 관리자 명령
    • /etc/passwd 파일에서 해당 라인 삭제
  • user del [options] username
  • 옵션
    • -r 홈디렉토리와 파일을 함께 삭제, 메일 스풀도 삭제.
    • -f 로그인 중이거나 다른 사용자가 사용 중이어도 삭제, 같은 이름의 그룹도 삭제.

사용자 계정 삭제 시 고려사항

  • 홈 디렉토리도 삭제할 것인가
  • 계정을 삭제하지 않고 잠금 할 것인가
  • 삭제될 계정이 소유하는 파일이 더 있는가
    • 삭제 전에 find / -user username -ls로 확인해야 함
    • 삭제 후라면 find / -uid UID -ls, find / -nouser -ls로 확인

그룹 계정과 관리

그룹 계정

사용자 계정들을 모아서 하나의 집합을 이루는 개념

  • 그룹의 구성원은 특정 파일(또는 디렉토리)에 대해 그룹에 부여된 권한을 가짐
  • 일반 사용자는 bin, mail, sys 등의 '시스템 정의 그룹'에는 포함될 수 없음
  • 사용자 계정을 만들 때 주 그룹(기본 그룹)이 지정됨
    • 기본적으로 사용자 계정과 같은 이름으로 그룹 계정이 만들어짐
  • 사용자 계정은 0개 이상의 부 그룹에 속할 수 있음

groupadd

  • 그룹을 만드는 관리자 명령
    • 그룹도 계정 이름과 GID를 가짐
  • groupadd [options] group
  • 옵션
    • -g gid는 수동으로 GID를 지정
    • -r 시스템 그룹 계정 생성
    • -o -g를 함께 사용시 기존 그룹의 GID를 사용하는 것

/etc/group

  • 그룹 계정의 정보를 가진 텍스트 파일
    • 라인마다 그룹 계정의 정보가 저장됨
  • 각 라인은 : 으로 구분되는 4개 핑드를 가짐
  • 그룹계정:암호:GID:구성원_리스트
    • devs:x:1000:jeaha,jeje
  • 암호화된 비밀번호는 /etc/gshadow에 저장됨
  • 사용자 계정을 부 그룹에 추가하는 방법
    • usermod -G group -a username
  • 사용자가 자신의 그룹을 확인하는 방법
    • id username
    • groups username
  [ec2-user@ip-aws ~]$ id ec2-user
  uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),4(adm),10(wheel),190(systemd-journal)
  [ec2-user@ip-aws ~]$ groups ec2-user
  ec2-user : ec2-user adm wheel systemd-journal

사용자 계정과 그룹 및 파일의 접근권한

  • 사용자가 파일이나 디렉토리를 생성하면 그것의 소유 그룹은 사용자의 주 그룹으로 지정됨
  • 사용자는 0개 이상의 부 그룹에 속할 수 있음
  • 사용자 스스로 다른 그룹의 구성원이 되게 할 수 없음
    • 관리자라면 gpasswd -a user group으로 구성원 추가 가능
  • newgrp group을 실행하면 일시적으로 자신의 주 그룹 변경 가능
    • 자신이 속해 있는 그룹 중에서 지정해야 함
    • 그룹 계정의 비밀번호를 알고 있다면 다른 그룹으로도 지정 가능
    • 단순히 newgrp를 실행하면 원래 주 그룹으로 돌아감

gpasswd

  • 그룹의 관리를 위한 명령
    • 그룹의 관리자가 사용
  • gpasswd [options] group
    • 옵션을 사용하지 않으면 그룹의 비밀번호를 설정
    • 옵션을 사용하면 그룹의 구성원 변경
  • 옵션
    • -a user는 구성원 추가, -A users는 그룹의 관리자를 지정
    • -d user는 구성원 삭제, -M users는 구성원 설정
    • -r 비밀번호 삭제

groupmod

  • 기존 그룹의 정보를 수정하기 위한 명령
    • 그룹의 관리자가 사용함
  • group [options] group
    • -g gid를 사용하여 GID를, -n name은 그룹 이름을 변경함

groupdel

  • 그룹을 삭제하는 관리자 명령
    • 그룹 계정 관련 파일에서 해당 라인을 삭제함
    • 사용자 계정의 주 그룹으로 되어있는 경우 삭제 불가능
  • groupdel group

사용자 관리를 위한 GUI

사용자 관리 도구

GUI를 지원 하지만 CLI방식에 비해 제한이 있다.

  • 시스템 > 관리 > 사용자 및 그룹
    • root 계정의 비밀번호 입력
    • 사용자 추가그룹 추가로 계정을 추가할 수 있음
    • 선택된 계정에서 등록정보 버튼으로 정보를 수정할 수 있음
728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linux] 파일 시스템 관리  (0) 2020.10.25
[Linux] vi 사용 텍스트 편집  (0) 2020.10.25
[Linux] 시작과 종료  (0) 2020.10.24
[Linux] 파일과 디렉토리  (0) 2020.10.24
[Linux] Shell 사용하기  (0) 2020.10.16

리눅스의 시작과 종료

  • 학습 개요
    운영체제의 부팅 절차를 이애하고 리눅스 시스템의 부팅 과정을 알아보자.
    업스타트 init 데몬의 기능과 수행 과정 및 런레벨에 따른 서비스 실행 과정을 알아보자.
    시스템의 부팅과 종료, 런레벨에 따른 서비스의 활성화 여부, 서비스 데본을 수동으로 시작하거나 종료하기 위한 관리자 명령을 알아보자.
  • 학습 목표
    1. 일반적인 운영체제의 부팅 과정을 설명할 수 있다.
    2. 초기화 데몬의 실행과 런레벨을 설명할 수 있다.
    3. 부팅 시 서비스의 활성화와 운영 중 서비스의 시작/종료 방법을 설명할 수 있다.
    4. 리눅스의 재부팅과 종료 방법을 설명할 수 있다.

운영체제의 부팅

부팅 과정

전원은 켜고 로그인 프롬프트가 나올때 까지 과정.
(BIOS 기반 X86 시스템과 MBR(Master Boot Record)방식의 컴퓨터를 가정함)

  • ROM BIOS의 펌웨어가 실행됨
    • 하드웨어 검사 후, 부트 로더를 적재
  • MBR에 있는 부트 로더가 실행 됨
    • 파티션 테이블을 조사하여 부팅 가능한 파티션을 찾음
    • 리눅스의 부트로더인 GRUB을 찾아 적재함
    • GRUB은 그래픽 인터페이스와 멀티 부팅을 지원함
  • 커널 이미지와 initramfs를 로드
    • 커널 이미지는 /boot/vnlinux-
    • initramfs는 부팅과정에서 필요한 임시 램 파일 시스템
  • 커널의 실행
    • 하드웨어를 점검하고 초기화함
      • 메모리, 프로세서, 저장장치, 주변장치 등
      • 디바이스를 찾고 디바이스 드라이버를 로드함
    • 루트 / 파일 시스템을 마운트하고 검사함
    • 커널은 /sbin/init 프로그램을 실생시키고 제어를 넘김
      • init 프로세스는(pid=1) 시스템 운영을 위한 나머지 초기화 과정을
      • init은 부팅이 끝난 후에도 계속 수행됨

(이미지로 한번 더 정리해야 할 듯 하다)

초기화 데몬

전통적 init 데몬

  • System V init 데몬이라고 함.
  • 런레벨 (runlevel)에 기초하여 순차적으로 서비스를 실행하는 방식
    • 런레벨에 따라 실행/중단 되어야 하는 서비스가 정해짐
  • 시간이 오래 걸리며, 복잡한 초기화 스크립트로 인해 새로운 하드웨어나 서비스의 등장에 효율적인 대처가 어려움
    • 안드로이드등 소형 기기에 linux를 사용하면서 불편함이 생기게 됨.

업스타트 init 데몬systemd 데몬

  • 이벤트 기반으로 서비스를 실행하는 방식
  • 복잡한 스크립트가 간단한 설정 파일들로 대체됨
  • Upstart는 Ubuntu에서 개발 되어 2006년에 포함되었고 RHEL에서 채택됨
  • systemd 데몬은 2011년 Fedora에서 채택되었음
  • RHEL7과 SUSE, Ubuntu 16에서 systemd가 Upstart를 대체함

init 프로세스

  • 업스타트는 /sbin/init 데몬으로 구현됨
  • 모든 사용자 프로세스의 최상위 조상 프로세스 (PID-1)
    • ps -e, ps ax 명령으로 확인 가능
  • 나머지 부팅 과정, 시스템 초기화 작업을 실행함
    • 사용자 환경을 준비함. 시스템 운영을 위한 서비스 프로그램의 실행 등
  • 계속 수행되며 시스템 운영을 관리하고 셧다운을 처리함
    • 사용자 프로세스의 정리, 로그아웃 후 로그인 서비스의 제공등을 함
  • /etc/init/ 디렉토리에 있는 'job 설정파일'을 읽음
    • job 설청 파일의 확장자는 .conf
    • init 데몬이 실행하는 job(실행 파일 || 셸 스크립트)이 정의 되어 있음
      • 이벤트가 발생할 때 상응하는 job을 시작하거나 중지시킴
  • '전통적 init 데몬'에서는 /etc/inittab 파일을 환경 설정 파일로 사용했음
    • 현재는 초기 런레벨을 설정하는 용도로만 사용됨
    • 이 파일에 업스타트 초기화 과정을 설명하는 내용이 있음
  • initctl 명령
    • job의 상태를 확인하거나 수동으로 시작/중지 시키는 명령
    • initctl command job
    • initctl list는 모든 job의 상태를 보여줌. (list 외에는 사용할 일이 없을것이다.)
    • initctl start job 또는 init stop job을 사용할 수 있음

환경 설정 파일과 스크립트

'upstart init deamon'은 기존 방식과 호환되도록 설계됨.

  • /etc/init/rcS.conf
    • 부팅 시 한번 실행되며 시스템 초기화와 관련이 있는 내용이 설정 되어 있음.
    • 주요 작엄은 초기 런레벨을 읽고 /etc/rc.d/tc.sysinit 스크립트를 실행하는 것.
    • 호스트명 설정, 시스템 점검, 파일 시스템의 마운팅, LVM 장치 활성화, 쿼터 설정 등
      서버가 작업을 실행하는 데 필요한 모든 작업을 수행함
  • /etc/init/rc.conf
    • 부팅되거나 런레벨이 바뀔 때 필요한 서비스를 시작시키거나 필요 없는 서비스를 중단시키기 위해 스크립트를 실행함.
    • 주요 작업은 /etc/rc.d/rc runlevel을 실행하는 것
  • /etc/inittab
    • 부팅 시 정해지는 초기 런레벨이 정의된 파일
    • '업스타트 init 데몬'을 사용하는 경우 초기 런레벨 외의 다른 설정은 의미가 없음
  • etc/rc.d/rc.local
    • 결과적으로 런레벨 2, 3, 5에서 가장 마지막에 실행되는 스크립트

init 프로세스와 런레벨

  • 초기 런레벨은 /etx/inittab 파일에서 id:5:initdefault:와 같이 설정 되어 있다.
  • 런레벨이 5로 부팅 되는 겨웅
    • /etc/rc.d/rc5.d/ 디렉토리에 존재하는 스크립트 파일이 실행됨
    • K로 시작하는 스크립트는 해당 서비스의 종료를 위한 것.
    • S로 시작하는 스크립트는 해당 서비스의 시작을 위한 것.
    • 이런한 파일은 /etc/tc.d/init.d/ 디렉토리에 돈대하는 실제 스크립트 파일에 대한 심벌릭 링크임
  • 런레벨 2,3,5에서 가장 마지막에 실행되는 스크립트는 S99local 이 가리키는 /etx/rc.d/rc.local
    • 관리자가 원하는 특별한 초기화 작업을 추가할 수 있음.

런레벨

  • 0 : 시스템이 종료될 때 사용되는 레벨로 기본값으로 설정해서는 안됨.
  • 1 : 단일 사용자 모드로, 로그인 과정 없이 root 사용자로 로그인 되며 콘솔에서 시스템 점검이나 복구를 위한 관리자 모드로 사용됨.
    명령 행 인터페이스가 제공되며 네트워크 서비스는 제공되지 않음
  • 2 : 기본적으로 네트워크 서비스를 제공하지 않는 다중 사용자 모드
  • 3 : 모든 네트워킹을 지원하는 다중 사용자 모드.
    리눅스 초기 시절에 보편적으로 사용되었던 레벨. CLI만 지원함
  • 4 : 사용하지 않음
  • 5 : 그래픽 사용자 환경을 제공하는 다중 사용자 모드 최근 배포판은 기본으로 설정됨
  • 6 : 시스템을 재부팅할 때 사용되는 레벨로 기본값으로 설정해서는 안 됨

telinit

  • 런레벨을 바꾸는 관리자 명령
  • telinit runlevel
    • telinit 3은 런레벨을 변경하며 텍스트 모드만 지원함.
    • telinit 0 -> 종료, telinit 6 -> 재부팅
  • runlevel
    • 이전 런레벨과 현재 런레벨을 확인하는 명령

chkconfig

부팅 시 런레벨에 따른 시스템 서비스의 활성화 여부를 확인하거나 변경하는 명령

  • chkconfig [--list] [service]

    • chkconfig --list는 각 런레벨에서 모든 서비스의 활성화 여부를 알려줌

    •   [ec2-user@ip-172-31-45-8 etc]$ chkconfig
      
        Note: This output shows SysV services only and does not include native
              systemd services. SysV configuration data might be overridden by native
              systemd configuration.
      
              If you want to list systemd services use 'systemctl list-unit-files'.
              To see services enabled on particular target use
              'systemctl list-dependencies [target]'.
      
        netconsole      0:off   1:off   2:off   3:off   4:off   5:off   6:off
        network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
        [ec2-user@ip-172-31-45-8 etc]$
    • chkconfig [--list levels] service <on|off>

      • 특정 런레벨에서 서비스의 활성화 여부를 지정
      • chkconfig --level 345 httpd on은 런레벨 3,4,5에서 httpd 서비스를 활성화 시킴

service 명령

시스템 운영 중에 /etc/rc.d/init.d/ 디렉토리에 존재하는 초기화 스크립트를 수동으로 실행 또는 중지 시키는 관리자 명령

  • service script command
    • service httpd start는 httpd를 시작 시킴
    • /etc/rc.d/init.d/httpd start도 같음
    • command는 start, stop, restart, reload, status 중 하나
  • service --status-all
    • 모든 초기화 스크립트의 상태를 출력함
  • 데스크톱 메뉴에서 '시스템>관리>서비스'를 실행하면 나오는 '서비스 설정 창'에서 서비스의 초기 설정(활성화 여부)과 실행의 시작/중지를 시킬 수 있음.

시스템 종료

개인 사용자의 로그아웃

  • 계정의 사용을 마치고 빠져 나오는 것
  • 데스크톱 환경에서 '시스템 > 로그아웃'
  • 로그인 셸에서 logout 또는 exit 명령

시스템의 종료

  • 관리자가 시스템을 안전하게 셧다운 하는 것
    • 접속중인 사용자에게 시스템의 종료를 알림
    • 사용자의 로그인을 차단하고 종료함
  • 데스크톱 환경에서 '시스템 > 끄기 > ...'
    • '다시 시작', '취소', '끄기'

shutdown

  • 시간을 정해 시스템을 종료하는 명령
  • shutdown [options] time [message]
  • option
    • -r : 재부팅
    • -c : 셧다운 취소
    • -k : 경고 메세지만 보냄
    • shutdown -r +10
  • time
    • 종료시간으로 절대시간(24시간 포멧의) 형식, +10은 10분 후
    • now는 즉시
    • shutdown -h now

시스템의 종료 절차

  • 실제 init 프로세스를 통해 런레벨을 바꾸어 셧다운이 처리됨
    • init 프로세스는 모든 프로세스에게 종료를 알림
    • 각 프로세스가 스스로 종료하도록 TERM 시그널을 보냄
    • 종료하지 않은 프로세스에게 강제 종료를 위한 KILL 시그널을 보냄
    • 시스템 파일을 잠그고 파일 시스템을 언마운트 함
    • 버퍼에 있는 데이터를 파일 시스템에 기록함 (sync)
    • 시스템 호출을 통해 커널에 재부팅 또는 종료를 요청함
  • -h 또는 -r 옵션을 사용하지 않으면 단일 사용자 모드로 부팅됨.
  • 종료를 위해 halt 명령을, 재부팅을 위해 reboot 명령을 사용할 수 있음

데스크톱

데스트톱 환견

  • GUI를 제공하는 사용자 환경
    • 그래픽 윈도우, 아이콘, 툴바 ,메뉴, 위젯 등을 마우스나 키보드로 조작
  • 대부분의 데스크톱은 X윈도우 시스템에 기반
  • 시각적으로 다양한 스타일의 데스크톱이 존재함
    • 일반적으로 서버로 사용하는 리눅스는 CLI만 제공한다.

GNOME

Red Hat 계열의 리눅스에서 기본 GUI

  • 단순함, 편의성, 안정성에 초점
    • 기본적으로 상단에 메뉴, 하단에 패널이 있음
    • 오른쪽 하단에서 2개의 작업 공간을 선택할 수 있음(가상윈도우)
  • 터미널 창에서 gnome-control-center&을 실행하면 제어판이 나옴

KDE

K 데스트톱이라고 하며 MS Windows와 비슷

  • 다양한 프로그램을 통합적인 모습으로 보여줌
  • yum -y groupinstall 'KDE 데스크탑'으로 설치 한다고?
  • 로그인 할때 GNOME || KDE 선택 가능함.
728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linux] vi 사용 텍스트 편집  (0) 2020.10.25
[Linux] 사용자 관리  (0) 2020.10.25
[Linux] 파일과 디렉토리  (0) 2020.10.24
[Linux] Shell 사용하기  (0) 2020.10.16
[Linux] 리눅스 설치준비 및 표준 디렉토리  (0) 2020.10.16

파일과 디렉토리

  • 학습 개요
    리눅스에서는 모든 것이 파일로 취급되어 디렉토리나 디바이스도 파일로 취급한다.
    파일의 종류를 살펴보고 파일과 디렉토리의 접근권한이 가지는 의미를 이해해 보자.
    파일과 디렉토리를 다루기 위한 쉘 명령을 익히고 텍스트 파일의 출력을 위한 명령을 알아보자.

  • 학습 목표

    1. 리눅스에서 파일의 종류를 나열할 수 있다.
    2. 파일과 디렉토리를 조작하는 명령의 사용법을 익힌다.
    3. 파일과 디렉토리의 접근권한에 관해 설명할 수 있다.
    4. 파일의 내용을 확인하는 명령을 나열하고 설명할 수 있다.

파일 시스템 탐색

파일 시스템

  • 운영체제가 디스크(파티션)상에 파일을 구성하는 방식
  • 파일과 디렉토리의 집합을 구조적으로 관리하는 체계
  • 다양한 형식의 파일 시스템이 존재
  • 리눅스는 전체 파일 시스템을 개의 트리구조로 관리
    • 1개의 루트(/) 디렉토리만 있음.

ls

  • 파일과 서브 디렉토리 목록을 나열.
    • 파일(또는 디렉토리)가 가지는 속성까지 확인할 수 있음.
  • ls [options] [names]
    • ls directory
      • 디렉토리에 존재하는 파일과 서브 디렉토리의 정보 출력.
    • ls file
      • 해당 파일의 정보를 출력
  ➜  UNIX git:(master) ✗ ls
  Lecture                        중간과제

  ➜  UNIX git:(master) ✗ ls -l
  total 0
  drwxr-xr-x   7 jeahasorrowkissed  staff  224 Oct 19 22:06 Lecture
  drwxr-xr-x  11 jeahasorrowkissed  staff  352 Oct 15 17:46 중간과제

  ➜  UNIX git:(master) ✗ ls -l Lecture
  total 80
  -rw-r--r--  1 jeahasorrowkissed  staff   9161 Oct 16 16:47 01_LINUX.md
  -rw-r--r--  1 jeahasorrowkissed  staff   5615 Oct 16 18:06 02_Install_Linux.md
  -rw-r--r--  1 jeahasorrowkissed  staff  14176 Oct 16 19:53 03_Use_Shell.md
  -rw-r--r--  1 jeahasorrowkissed  staff   1473 Oct 19 22:13 04_File_And_Directory.md

  ➜  UNIX git:(master) ✗ ls -l ./Lecture/01_LINUX.md
  -rw-r--r--  1 jeahasorrowkissed  staff  9161 Oct 16 16:47 ./Lecture/01_LINUX.md

옵션

짧은 옵션 긴 옵션 설명
-a --all 모든 파일을 보여줌 점(.)으로 시작하는 숨김 파일도 보여줌
-d --directory 디렉토리 자체에 대한 정보를 보여줌
-F --classify 우측에 파일의 종류를 알려주는 문자를 붙임. 실행파일은 *, 디렉토리는 /, 심볼릭 링크는 @
-l --format=long 긴 포맥으로 결과를 보여줌
-R --recursive 재귀적으로 수행되는데 서브 디렉토리의 내용도 나열함
-S --sort=size 파일의 크기 순서로 결과를 보여줌
-t --sort=time 최종 수정 시간 순으로 보여줌

파일의 종류

  • 정규 파일
    • 데이터를 저장하는 데 주로 사용
    • 각종 텍스트 파일, 실행 파일, 이미지 파일 등 리눅스에서 사용하는 대부분의 파일
    • 실행 파일이나 이미지 파일의 경우 바이너리 형태로 저장되어 바이너리 파일이라고 함
  • 디렉토리
    • 리눅스에서 디렉토리도 파일로 취급
    • 해당 디렉토리에 저장된 파일이나 하위 디렉토리에 대한 정보가 저장
  • 심볼릭 링크
    • '소프트 링크'라고도 함
    • 원본 파일에 대한 링크로서 다른 이름으로 파일명을 지정한 것
      • 윈도우 바로가기와 비슷한 것
  • 장치 파일
    • 리눅스에서 프린터, CD-ROM, HDD, 키보드 등과 같은 각종 장치를 파일로 취급 함
    • 블록 디바이스 파일과 문자 디바이스 파일로 구분 됨

file

파일의 종류를 알려주는 명령

  ➜  UNIX git:(master) ✗ file ./Lecture/01_LINUX.md
  ./Lecture/01_LINUX.md: UTF-8 Unicode text

pwd

절대 경로 방식으로 현재 작업 디렉토리를 알려줌

➜  UNIX git:(master) ✗ pwd
/Users/Jeaha/git/KNOU/3-2/UNIX

cd

작업 디렉토리를 이동

  • 디렉토리를 지정하지 않으면 사용자의 홈 디렉토리로 이동함
  • cd [directory]
➜  UNIX git:(master) ✗ cd Lecture
➜  Lecture git:(master) ✗

파일과 디렉토리 관리

mkdir

  • 디렉토리를 만드는 명령
  • mkdir [options] directories
  • 옵션
    • -p 필요한 경우 상위 디렉토리를 만듦
    • -m 디렉토리를 만들면서 접근 권한을 설정

rmdir

  • 디렉토리 삭제 명령
    • 비어있는 디렉토리만 삭제할 수 있음
    • 조건없이 디렉토리를 삭제하려면(모든 파일과 하위 폴더를 포함) rm -r dir 또는 rm -rf dir을 사용해야 함(위험하다.)
  • 옵션
    • -p 비어있는 디렉토리를 삭제하면서 부모 디렉토리가 비게 되는 경우 사용

cp

  • 파일이나 디렉토리를 복사
  • cp [options] file1 file2
    • cp -i file1 file2
    • 대상 파일이 존재 한다면 덮어쓰기 함.
  • cp [options] files directory
    • 마지막 인자가 디렉토리인 경우
    • 여러 파일을 지정된 디렉토리에 같은 이름으로 복사
    • cp file1 file2 dir1
  • cp -r [options] dir3 dir2
    • 디렉토리응 재귀적으로 복사할 때 -r 옵션 사용
    • 대상 디렉토리가 존재하는 경우, 그 곳에 디렉토리 자체가 복사됨

mv

  • 파일의 이름을 변경하는 명령
  • 또는 다른 디렉토리로 이동하는 명령
  • mv [options] source target
    • mv file2 file2
    • 대상 파일이 존재한다면 덮어쓰기가 수행됨
    • mv dir1 dir2
    • 디렉토리의 이름을 변경함
      • 대상 디렉토리가 존재한다면 서브디렉토리로 이동됨.
  • mv [options] files directory
    • 마지막 인자가 존재하는 디렉토리인 경우
    • 여러 파일을 지정된 디렉토리로 이동함
    • mv file1 file2 dir1

rm

  • 파일을 삭제
    • 기본적으로 파일만 삭제함
  • rm [options] files
    • 파일을 삭제할 때 조심해야 함
    • alias rm='rm -i'를 해두는 것도 좋은 방법임
  • 옵션
    • -r 디렉토리와 하위 를 모두 함께
    • -i 삭제 전에 물어봄
    • -f 물어보지 않고 무조건 삭제

파일의 접근 권한

  • 권한이 없는 사용자의 접근을 막기 위해 접근권한을 설정함
    • 사용자 부류에 따라 읽기/쓰기/실행 권한을 각각 설정함
  • 사용자 부류
    • u 소유자
    • g 그룹
    • o 기타
  • 권한
    • r 읽기
    • w 쓰기/수정/삭제/이름바꾸기
    • x 실행

디렉토리의 접근 권한

  • 권한
    • r : 디렉토리가 가진 파일과 서브 디렉토리의 목록 보기
    • w : 파일과 디렉토리를 만들거나 삭제
    • x : 디렉토리로 이동하거나 디렉토리에서 프로그램 실행 또는 파일의 메타데이터 보기
  • 디렉토리를 자유롭게 사용하려면 읽기/쓰기/실행 권한을 모두 가져야 함
    • 적어도 읽기/실행 권한을 가지고 있어야 해당 디렉토리로 이동하거나 해당 디렉토리에서 ls -l을 실행할 수 있음.
➜  UNIX git:(master) ✗ ls -ld /home ~root
lrwxr-xr-x  1 root  wheel   25 Oct 22 11:07 /home -> /System/Volumes/Data/home
drwxr-x---  7 root  wheel  224 Apr 19  2020 /var/root

chmod

파일의 소유자가 파일의 접근 권한을 변경하는 명령

  • chmod [options] mode files
    • -R 옵션을 디렉토리에 적용하면 모든 파일과 서브 디렉토리까지 권한을 변경
  • 8진수 모드
    • 읽기(r)은 4, 쓰기(w)는 2, 실행(x)는 1
    • 예: rwxr-xr-x -> 111101101 -> 755
    • chmod -R 755 dir1
  • 기호 모드
    • 형식은 [ugoa][+-=][rwx]
    • ugoa는 각각 user, group, other, all을 의미. 생략 하면 all
    • +-=는 각각 권한의 추가, 제거, 지정을 의미함.
    • chmod u+x file1
    • chmod u=rwx,g=rx,o=x file2

umask

  • 접근권한의 기본값을 출력하거나 설정하는 명령
    • 보통 /etc/bashrc에 설정되어 있음
  • umask [-S][mask]
    • 단순히 umask 또는 umask -S 명령을 실행하면 현재 기본값을 알 수 있음
    • -S 옵션은 기호모드로 결과를 보여줌
    • umask 002 마스크 값이 라는 것은 -------w-, 즉 기타 사용자에게 쓰기 권한을 부여하지 않겠다는 것.
    • 결국 마스크 값이 002 라는 것은 접근 권한을 주는것.
    • 파일의 경우 실행 권한은 부여되지 않으며 접근 권한은 664가 됨.
  • 참고로 touch file 명령을 파일의 접근/수정 시간을 현재 시간으로 변경하며 파일이 존재하지 않으면 파일을 생성함.

chown

root 사용자가 파일이나 디렉토리 소유자를 변경하는 명령

  • 파일 또는 디렉토리는 그것을 생성한 사용자 계정과 그룹이 곧 소유자와 소유 그웁으로 설정됨.
  • chown [options] newowner files
  • newowner에 소유자만 주어지면 소유자를 변경하는것.
    • 소유자:그룹 또는 소유자.그룹 의 형태로 지정할 수 있음.
      • 소유자가 생량디면 :그룹 변경이 없어지는 것이며, 그룹이 생략되면 소유자: 소유자와 같은 그룹으로 정해짐
    • -R 옵션을 사용하여 디렉토리에 재귀적으로 적용할 수 있음

ln

  • 파일에 다른 이름으로 연결(link)하는 명령
  • ln [options] 원본파일명 [대상파일명]
  • 기본적으로 하드 링크를 만들며, -s 옵션을 사용하면 심벌릭 링크가 만들어짐
  • 하드 링크(hard link)
    • 하나의 파일에 다른 이름을 부여하는 것
    • 원본 파일의 링크 카운트가 증가함
    • 다른 파일 시스템에는 링크할 수 없음
  • 심벌릭 링크
    • 윈도우 '바로가기'와 같은 역할의 독립적 파일
    • 다른 파일 시스템에 링크를 만들 수 있음
    • 원본을 삭제하면 심벌릭 링크는 의미가 없어짐
    • 디렉토리의 경우, 심벌릭 링크만 만들 수 있음
  • 하드 링크와 심벌릭 링크의 차이
➜  Lecture git:(master) ✗ ll
total 96
-rw-r--r--  1 jeahasorrowkissed  staff   8.9K Oct 16 16:47 01_LINUX.md
-rw-r--r--  1 jeahasorrowkissed  staff   5.5K Oct 16 18:06 02_Install_Linux.md
-rw-r--r--  1 jeahasorrowkissed  staff    14K Oct 16 19:53 03_Use_Shell.md
-rw-r--r--  1 jeahasorrowkissed  staff   9.9K Oct 22 11:41 04_File_And_Directory.md
➜  Lecture git:(master) ✗ ls -l 04_File_And_Directory.md
-rw-r--r--  1 jeahasorrowkissed  staff  10115 Oct 22 11:41 04_File_And_Directory.md
➜  Lecture git:(master) ✗ ln 04_File_And_Directory.md 04.hl
➜  Lecture git:(master) ✗ ln -s 04_File_And_Directory.md 04.sl
➜  Lecture git:(master) ✗ ls -li 04*
37003925 -rw-r--r--  2 jeahasorrowkissed  staff  10115 Oct 22 11:41 04.hl
37110394 lrwxr-xr-x  1 jeahasorrowkissed  staff     24 Oct 22 11:45 04.sl -> 04_File_And_Directory.md
37003925 -rw-r--r--  2 jeahasorrowkissed  staff  10115 Oct 22 11:41 04_File_And_Directory.md

37003925 -rw-r--r-- 2 jeahasorrowkissed staff 10115 Oct 22 11:41 04_File_And_Directory.md
의 2는 링크의 갯수를 의미함.
37110394 lrwxr-xr-x 1 jeahasorrowkissed staff 24 Oct 22 11:45 04.sl -> 04_File_And_Directory.md
의 ->는 대상 파일의 심볼릭 링크임을 의미함.

파일의 내용 확인

more

  • 파일의 내용을 한 화면 단위로 출력하는 명령
    • 한 화면을 보여준 상태에서 멈춤
  • more [options] file
    • 한 화면에 모두 보여줄 수 없을 때 --More--(69%)와 같은 메세지가 나옴
    • space bar를 누르면 다음 화면으로 이동
    • enter를 누르면 한라인씩 이동
    • q를 누르면 종료
    • more -20 +10 /etc/services
      • 10번째 라인부터, 20라인 단위로 보여줌
    • 한방향으로만 스크롤 가능.

less

  • more 명령의 개선된 버전 양방향 스크롤 가능
  • 위 또는 아래로 스트롤 가능
    • page up, page down, up, down등
  • 그외 내부 명령이 있음
    • 라인/화면 단위 이동, 라인/퍼센트로 위치 지정, 검색 등

head

파일의 맨 앞 부분을 10라인(기본 값) 출력하는 명령

  • head [options][files]
    • 옵션 -n 숫자 또는 -숫자 를 사용하면 보고싶은 라인 수를 변경할 수 있음
    • head -n 5 /etc/passwd
    • head -3 /etc/*.conf

tail

파일의 마지막 부분을 10라인(기본값) 출력하는 명령

  • tail [options] [files]
    • head 명령과 같은 옵션을 사용할 수 있으며,
      옵션 -n + 숫자를 사용하면 해당 라인부터 출력함
    • -f 옵션을 사용하면 변화하는 파일의 내용을 계속 감시함.
      • tail -f /log/catalina.out

cat

하나 또는 여러 파일을 연결(concatenate) 시켜 화면에 출력

  • cat [options] [files]
    • 파일을 지정하지 않으면 표준 입력으로부터 읽음
    • cat > file을 수행하여 텍스트 파일로 만들 수 있음
    • 여러 파일의 내용을 연결시킬 때 사용할 수 있음 (리다이렉션 활용)
    • 옵션 -n을 사용하면 라인 번호를 붙일 수 있음
➜  Lecture git:(master) ✗ cat > cat1.txt
asdf
1234
➜  Lecture git:(master) ✗ cat > cat2.txt
cat2 22222
eee222^C
➜  Lecture git:(master) ✗ cat cat2.txt
cat2 22222
➜  Lecture git:(master) ✗ cat cat*.txt > total.txt
➜  Lecture git:(master) ✗ cat total.txt
asdf
1234
cat2 22222
➜  Lecture git:(master) ✗ ll
total 144
-rw-r--r--  1 jeahasorrowkissed  staff   8.9K Oct 16 16:47 01_LINUX.md
-rw-r--r--  1 jeahasorrowkissed  staff   5.5K Oct 16 18:06 02_Install_Linux.md
-rw-r--r--  1 jeahasorrowkissed  staff    14K Oct 16 19:53 03_Use_Shell.md
-rw-r--r--  2 jeahasorrowkissed  staff    13K Oct 22 12:08 04.hl
lrwxr-xr-x  1 jeahasorrowkissed  staff    24B Oct 22 11:45 04.sl -> 04_File_And_Directory.md
-rw-r--r--  2 jeahasorrowkissed  staff    13K Oct 22 12:08 04_File_And_Directory.md
-rw-r--r--  1 jeahasorrowkissed  staff    10B Oct 22 12:09 cat1.txt
728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linux] 사용자 관리  (0) 2020.10.25
[Linux] 시작과 종료  (0) 2020.10.24
[Linux] Shell 사용하기  (0) 2020.10.16
[Linux] 리눅스 설치준비 및 표준 디렉토리  (0) 2020.10.16
[Linux] 리눅스 란  (0) 2020.10.16

계층형 쿼리

개발을 하다보면 메뉴구성, 조직도 등 같은 테이블 내에서 계층적으로 데이터를 처리해야 하는 경우가 많다.
자주 사용 되기도 하고, 이번 프로젝트에서 이 부분에 대한 삽질을 많이 했기 때문에 정리를 해본다.
계층형(hirarchical) 구조는 계급적, 수직적인 관계로 2진 트리 관계라고 할 수 있다.
실습은 Oracle emp 를 이용하며 설치 여건이 안되므로 livesql를 이용한다.
사용법은 여기서 보면 된다.

계층 구조와 용어

(계층 구조와 용어 이미지 만들어 올리기.)

  • 노드 (node) : 테이블 상의 각각의 row를 노드라고 한다.
  • 루트 (root) : 트리 구조의 최상위에 있는 노드를 의미한다.
  • 부모 (parent) : 부모노드. 트리 구조에서 상위에 있는 노드를 부모라고 한다.
  • 자식 (child) : 자식노드. 트리 구조에서 하위에 있는 노드를 자식이라고 한다.
  • 리프 (leaf) : 리프노드 혹은 말단노드. 하위에 연결된 노드가 없는, 자식이 없는 노드이다.
  • 레벨 (level) : 트리구조에서 각각의 계층을 의미한다. 루트부터 순차적으로 1씩 올라간다.

SELF JOIN

테이블 개수가 1개이며 각 ROW가 상위 코드로 부모 자식 관계로 연결 되어 셀프 조인을 사용한다.
최상단 노드의 경우 상위 코드가 NULL 이므로 외부 조인도 사용한다.

SELECT
    C.ENAME
    , C.EMPNO
    , P.ENAME AS MGR_NN
FROM
    SCOTT.EMP C
INNER JOIN
    SCOTT.EMP P
ON
    C.MGR = P.EMPNO(+)

결과

ENAME   EMPNO  MGR_NN
- - - - - - - - - - - -
BLAKE   7698    KING
CLARK   7782    KING
JONES   7566    KING
ALLEN   7499    BLAKE
WARD    7521    BLAKE
MARTIN  7654    BLAKE
TURNER  7844    BLAKE
JAMES   7900    BLAKE
MILLER  7934    CLARK
SCOTT   7788    JONES
FORD    7902    JONES
ADAMS   7876    SCOTT
SMITH   7369    FORD
KING    7839     - 

동일한 테이블 EMP 를 각각 C, P 로별칭을 주어 셀프 조인 하였고,
C가 하위 ROW, P가 상위 ROW임을 알 수 있다.
계층적인 결과가 나왔지만, 계층형 구조(TREE)와는 다른 결과이다.


START WITH & CONNECT BY

START WITH ... CONNECT BY 절은 계층형 정보를 표현하기 위한 목적으로 나온 조건이다.

문법

SELECT
    [컬럼 ...]
FROM
    테이블
START WITH [최상위 조건]
CONNECT BY [NOCYCLE] [PRIOR] [계층 구조 조건];

예제

SELECT
    C.ENAME
    , C.EMPNO
    , P.ENAME AS MGR_NN
FROM
    SCOTT.EMP C
INNER JOIN
    SCOTT.EMP P
ON
    C.MGR = P.EMPNO(+)
START WITH C.MGR IS NULL
CONNECT BY PRIOR C.EMPNO = C.MGR

결과

ENAME   EMPNO  MGR_NN
- - - - - - - - - - - -
KING    7839     - 
JONES   7566    KING
SCOTT   7788    JONES
ADAMS   7876    SCOTT
FORD    7902    JONES
SMITH   7369    FORD
BLAKE   7698    KING
ALLEN   7499    BLAKE
WARD    7521    BLAKE
MARTIN  7654    BLAKE
TURNER  7844    BLAKE
JAMES   7900    BLAKE
CLARK   7782    KING
MILLER  7934    CLARK

PRIOR 키워드는 이전 결과의 컬럼을 참조하는 키워드로 현재 행의 MGR을 이전 행의 ENPNO와 연결한다는 의미이다.


LEVEL

계층 레벨(depth level)을 나타낸다.

SELECT
    C.ENAME
    , C.EMPNO
    , P.ENAME AS MGR_NN
    , LEVEL
FROM
    SCOTT.EMP C
INNER JOIN
    SCOTT.EMP P
ON
    C.MGR = P.EMPNO(+)
START WITH C.MGR IS NULL
CONNECT BY PRIOR C.EMPNO = C.MGR;
ENAME  EMPNO  MGR_NN  LEVEL
- - - - - - - - - - - - - - -
KING    7839     -      1
JONES   7566    KING    2
SCOTT   7788    JONES   3
ADAMS   7876    SCOTT   4
FORD    7902    JONES   3
SMITH   7369    FORD    4
BLAKE   7698    KING    2
ALLEN   7499    BLAKE   3
WARD    7521    BLAKE   3
MARTIN  7654    BLAKE   3
TURNER  7844    BLAKE   3
JAMES   7900    BLAKE   3
CLARK   7782    KING    2
MILLER  7934    CLARK   3

레벨별로 들여쓰기를 하면 쿼리 결과 볼때 편하다.

SELECT
    LPAD( ' ', 2 * (LEVEL - 1 ) ) || C.ENAME AS ENAME
    , C.EMPNO
    , P.ENAME AS MGR_NN
    , LEVEL
FROM
    SCOTT.EMP C
INNER JOIN
    SCOTT.EMP P
ON
    C.MGR = P.EMPNO(+)
START WITH C.MGR IS NULL
CONNECT BY PRIOR C.EMPNO = C.MGR;
ENAME       EMPNO  MGR_NN  LEVEL
- - - - - - - - - - - - - - - - -
KING         7839   -        1
  JONES      7566  KING      2
    SCOTT    7788  JONES     3
      ADAMS  7876  SCOTT     4
    FORD     7902  JONES     3
      SMITH  7369  FORD      4
  BLAKE      7698  KING      2
    ALLEN    7499  BLAKE     3
    WARD     7521  BLAKE     3
    MARTIN   7654  BLAKE     3
    TURNER   7844  BLAKE     3
    JAMES    7900  BLAKE     3
  CLARK      7782  KING      2
    MILLER   7934  CLARK     3

ORDER SIBLINGS BY

계층형 쿼리에서 ORDER BY 절을 사용하면 계층의 상관 관계가가 유지되지 않은체 정렬이 되어 버린다.
이 문제로 한참 삽질을 했었는데, ORDER SIBLINGS BY를 사용하면 계층 구조를 유지하면서 정렬을 할 수 있다.

일반 ORDER BY를 사용했을 경우

SELECT
    LPAD( ' ', 2 * (LEVEL - 1 ) ) || C.ENAME AS ENAME
    , C.EMPNO
    , P.ENAME AS MGR_NN
FROM
    SCOTT.EMP C
INNER JOIN
    SCOTT.EMP P
ON
    C.MGR = P.EMPNO(+)
START WITH C.MGR IS NULL
CONNECT BY NOCYCLE PRIOR C.EMPNO = C.MGR
ORDER BY EMPNO;
ENAME         EMPNO  MGR_NN
- - - - - - - - - - - - - - -
      SMITH   7369    FORD
    ALLEN     7499    BLAKE
    WARD      7521    BLAKE
  JONES       7566    KING
    MARTIN    7654    BLAKE
  BLAKE       7698    KING
  CLARK       7782    KING
    SCOTT     7788    JONES
KING          7839     - 
    TURNER    7844    BLAKE
      ADAMS   7876    SCOTT
    JAMES     7900    BLAKE
    FORD      7902    JONES
    MILLER    7934    CLARK

ORDER SIBLINGS BY를 할 경우

SELECT
    C.ENAME
    , C.EMPNO
    , P.ENAME AS MGR_NN
FROM
    SCOTT.EMP C
INNER JOIN
    SCOTT.EMP P
ON
    C.MGR = P.EMPNO(+)
START WITH C.MGR IS NULL
CONNECT BY NOCYCLE PRIOR C.EMPNO = C.MGR
ORDER SIBLINGS BY EMPNO;
ENAME         EMPNO  MGR_NN
- - - - - - - - - - - - - - -
KING          7839   - 
  JONES       7566  KING
    SCOTT     7788  JONES
      ADAMS   7876  SCOTT
    FORD      7902  JONES
      SMITH   7369  FORD
  BLAKE       7698  KING
    ALLEN     7499  BLAKE
    WARD      7521  BLAKE
    MARTIN    7654  BLAKE
    TURNER    7844  BLAKE
    JAMES     7900  BLAKE
  CLARK       7782  KING
    MILLER    7934  CLARK

CONNECT_BY_ISLEAF

계층 구조에서 ROW의 최하위 레벨 여부의 반환이다.
해당 ROW가 말단 노드라면 1 아니라면 0을 반환한다.

SELECT
    LPAD( ' ', 2 * (LEVEL - 1 ) ) || C.ENAME AS ENAME
    , C.EMPNO
    , P.ENAME AS MGR_NN
    , CONNECT_BY_ISLEAF LEAF
FROM
    SCOTT.EMP C
INNER JOIN
    SCOTT.EMP P
ON
    C.MGR = P.EMPNO(+)
START WITH C.MGR IS NULL
CONNECT BY NOCYCLE PRIOR C.EMPNO = C.MGR
ORDER SIBLINGS BY EMPNO;
ENAME        EMPNO  MGR_NN  LEAF
- - - - - - - - - - - - - - - - -
KING          7839   -        0
  JONES       7566  KING      0
    SCOTT     7788  JONES     0
      ADAMS   7876  SCOTT     1
    FORD      7902  JONES     0
      SMITH   7369  FORD      1
  BLAKE       7698  KING      0
    ALLEN     7499  BLAKE     1
    WARD      7521  BLAKE     1
    MARTIN    7654  BLAKE     1
    TURNER    7844  BLAKE     1
    JAMES     7900  BLAKE     1
  CLARK       7782  KING      0
    MILLER    7934  CLARK     1

CONNECT_BY_ROOT

계층구조 쿼리에서 LEVEL이 0인 최상위 로우의 정보를 얻어 올 수 있다.

SELECT
    LPAD( ' ', 2 * (LEVEL - 1 ) ) || C.ENAME AS ENAME
    , C.EMPNO
    , P.ENAME AS MGR_NN
    , CONNECT_BY_ROOT C.ENAME ROOTNANME
FROM
    SCOTT.EMP C
INNER JOIN
    SCOTT.EMP P
ON
    C.MGR = P.EMPNO(+)
START WITH C.MGR IS NULL
CONNECT BY NOCYCLE PRIOR C.EMPNO = C.MGR
ORDER SIBLINGS BY EMPNO;
ENAME        EMPNO  MGR_NN  ROOTNANME
- - - - - - - - - - - - - - - - - - - -
KING          7839   -        KING
  JONES       7566  KING      KING
    SCOTT     7788  JONES     KING
      ADAMS   7876  SCOTT     KING
    FORD      7902  JONES     KING
      SMITH   7369  FORD      KING
  BLAKE       7698  KING      KING
    ALLEN     7499  BLAKE     KING
    WARD      7521  BLAKE     KING
    MARTIN    7654  BLAKE     KING
    TURNER    7844  BLAKE     KING
    JAMES     7900  BLAKE     KING
  CLARK       7782  KING      KING
    MILLER    7934  CLARK     KING

SYS_CONNECT_BY_PATH

계층 구조에서 ROOT노드부터 현제 노드까지의 PATH 정보를 가져올 수 있다.

SELECT
    LPAD( ' ', 2 * (LEVEL - 1 ) ) || C.ENAME AS ENAME
    , C.EMPNO
    , P.ENAME AS MGR_NN
    , SYS_CONNECT_BY_PATH( C.ENAME, '/') PATH
FROM
    SCOTT.EMP C
INNER JOIN
    SCOTT.EMP P
ON
    C.MGR = P.EMPNO(+)
START WITH C.MGR IS NULL
CONNECT BY NOCYCLE PRIOR C.EMPNO = C.MGR
ORDER SIBLINGS BY EMPNO;
ENAME         EMPNO  MGR_NN  PATH
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
KING          7839     -      /KING
  JONES       7566    KING    /KING/JONES
    SCOTT     7788    JONES   /KING/JONES/SCOTT
      ADAMS   7876    SCOTT   /KING/JONES/SCOTT/ADAMS
    FORD      7902    JONES   /KING/JONES/FORD
      SMITH   7369    FORD    /KING/JONES/FORD/SMITH
  BLAKE       7698    KING    /KING/BLAKE
    ALLEN     7499    BLAKE   /KING/BLAKE/ALLEN
    WARD      7521    BLAKE   /KING/BLAKE/WARD
    MARTIN    7654    BLAKE   /KING/BLAKE/MARTIN
    TURNER    7844    BLAKE   /KING/BLAKE/TURNER
    JAMES     7900    BLAKE   /KING/BLAKE/JAMES
  CLARK       7782    KING    /KING/CLARK
    MILLER    7934    CLARK   /KING/CLARK/MILLER
728x90
반응형

'Database' 카테고리의 다른 글

[DB] INDEX REBUILD  (0) 2021.01.07
[DBeaver - cubrid] DBeaver Cubrid UTF-8 문제  (1) 2020.12.07
[MongoDB] 설치하기 (MacOS)  (0) 2020.05.18
[SQL] TIMESTAMP TO MILLIS  (0) 2020.04.09
[PostgreSQL] 랜섬웨어  (0) 2020.03.03

셸 사용하기

  • 학습 개요
    셸은 명령 행 인터페이스를 제공한다.
    셸 명령의 기본 사용법과 온라인 매뉴얼의 활용법을 살펴본다.
    셸이 제공하는 강력한 기능으로 파이프, 입출력 리다이렉션, 명령 치환, 수식과 변수의 확장 및 환경 변수와 환경 설절 파일 등을 학습한다.

  • 학습 목표

    1. 셸 명령의 기본 사용법을 익히고 온라인 매뉴얼 기능을 활용할 수 있다.
    2. 히스토리 기능과 명령 행 자동 완성 기능을 사용할 수 있다.
    3. 셸의 특수문자, 명령 치환, 수식과 변수의 확장에 관해 설명할 수 있다.
    4. 셸의 환경 설정 파일을 나열하고 설명할 수 있다.

셸 개요

Shell

  • 명령어 해석기 또는 명령 행 인터페이스
    • 사용자와 커널 사이에서 명령어를 해석하여 처리
    • 셸 명령을 사용하면 GUI로는 하기 힘든 다양한 기능을 수행할 수 있음
  • 셸 명령을 프로그램으로 작성하여 처리할 수도 있음
    • 셸 스크립트는 텍스트 파일로, 프로그래밍을 통한 셸 명령의 조합
    • 반복적으로 수행되는 작업을 셸 스크립트로 작성할 수 있음
    • 셸이 쉘 스크립트 파일을 읽어 처리할 수 있음
  • 로그인을 하면 기본 셸이 주어짐.

Shell 사용하기

  • 터미널에서 로그인을 해야 함
  • GNOME 데스크톱에서 터미널 창을 실행 시켜 셸을 사용함
  • '프로그램 > 시스템도구 > 터미널'
    • 여러 터미널 창을 띄워 사용할 수 있음
    • 셸은 명령 프로프트와 명령 행을 제공함
  • 기본적으로 한 라인에 명령을 입력하고 Enter를 쳐 명령을 수행함
    • 결과가 출력되면 명령 프롬프트가 다시 등장함
    • 세미콜론(;)을 사용하면 한 라인에 여러 명령을 입력할 수 있음

Shell의 종류

  • 많은 리눅스 배포판에서 bash를 기본 셸로 사용함
    • 명령 프롬프드로 일반 사용자는 $, root 사용자는 #을 사용함
  • 셸의 종류에 따라 alias 설정, 초기화 파일, 스크립트 작성, 명령 행 완성 기능, 명령 행 편집 기능 등에 차이가 있음

bash shell

  • Bourne Again Shell로 Bourne Shell의 개선된 버전
    • 많은 셸 스크립트의 문법이 Bourne Shell에 기반을 둠
  • C Shell과 Korn Shell의 유용한 기능을 가져옴
  • 실행 명령은 /bin/bash
    • /etc/passwd 파일에 다음과 같은 라인이 있음
    • jeaha:x:500:500:jeaha:/home/jeaha:/bin/bash

셸 선택하기

  • 기본 셸을 변경할 수 있음
    • chsh -s /bin/셸이름
  • 터미널 창은 대화형 셸임
    • 셸을 종료하면 exit 명령어 또는 ctrl + d를 실행
  • 로그인 셸과 비로그인 셸을 구분해야 함.
    • logout 명령은 로그인 셸에서만 사용 가능
    • 셸 프롬프트에서 셸 프로그램을 실행하면 '서브 셸'이 실행 됨

셸 명령

셸 명령의 형식과 실행

  • $명령어 옵션 인수
    • 예) usermod -L jeaha
    • 옵션과 인수는 여럿일 수 있으며 선택적 또는 필수적
  • 명령어는 프로그램의 이름
  • 가장 간단한 형태의 실행은 명령의 이름만 사용
    • who, date, ls, pwd

chsh 명령

  • 기본 셸을 바꾸는 명령
  • chsh [*option*] [*username*]
    • 대괄호는 생략 가능, 이텔릭체는 적당한 내용으로 대체해야 함
    • 복수는 여러 개가 가능하다는 의미

옵션과 인수

  • 짧은 옵션 -
    • li -l
    • ls -latls -l -a -t는 같은 것
  • 긴 옵션 --
    • ls --all
  • 인수는 명령의 수행 대상을 지정하는 것
    • cat -n /etc/passwd
    • grep "jeaha" /etc/passwd
  • 옵션도 인수를 가질 수 있음
    • chsh -s /bin/sh jeaha
    • chsh --shell=/bin/bash jeaha

명령어의 종류

명령어 설명
엘리어스 alias 명령을 사용하여 만든 명령의 별칭
셸 예약어 예약된 단어로 do, while, case
함수 셸에서 수행되는 함수의 정의
내장 명령 셸 내부에 존재하는 명령으로 cd, echo, pwd
일반 명령 실행 파일이 존재하는 명령

환경 변수 PATH에 설정된 경로 중에 실행 파일이 존재하면 이름만으로 실행이 가능

  • 아니면 절대경로를 사용해야 함
  • 현재 디렉토리(.)는 보통 PATH에 포함되어 있지 않음
  • echo $PATH로 저장된 경로를 확인할 수 있음

alias

자주 사용되는 명령의 단축 명령을 만드는 명령.
계속 유지하려면 셸의 환경 설정 파일에 기록해 두어야 함.

  • alias
  • alias la=ls -a
  • alias rm=rm -i

type

명령이 어떻게 해석 되는지 알려주는 명령

  • type cd
  • type -a ls

which

실행 프로그램을 환경변수 PATH를 기초로 찾아 경로를 출력함

  • which rm
  • 비슷한 명령으로 whereis가 있음

man

메뉴얼 페이지를 보여줌

  • 명령의 사용법이나 설정 파일 등에 관한 온라인 도움말 제공
  • man passwd 또는 man 5 passwd
  • 명령어의 간단한 도움말을 보려면 명령 --help를 사용할 수 있음.
섹션 내용 섹션 내용
1 사용자 명령 5 시스템 설정 파일
2 커널의 시스템 호출 6 게임
3 C 라이브러리 함수 7 파일 포멧, 인코딩 등
4 디바이스 드라이버 정보 8 시스템 관리 명령

history

이전에 수행했던 명령 행의 목록을 불러옴

  • history 또는 history 10

히스토리 기능을 이용하여 명령을 실행하는 방법

  • 이전에 수행했던 명령을 이용하여 명령을 수행할 수 있음.
  • 다음을 입력하고 실행함.
    • 명령 행 편집도 가능
입력 방법 설명
!! 직전 명령을 불러옴
!n 히스토리 목록에서 해당 명령을 불러옴
!string 지정된 문자열로 시작되는 최근 명령을 불러옴
up or down 누를 때마다 직전 또는 직후 명령을 불러옴

명령 행 자동 완성

  • 일부만 입력하고 나머지를 자동으로 완성하는 기능
  • 처음 몇 자만 입력한 후, tab 키를 누르면 실행됨
    • 명령어, 변수, 파일, 디렉토리 등을 구분하여 결정함
  • 정보가 충분하지 않은 경우, tab 키를 한번 더 누르면 모든 가능한 경우를 보여주고 원래의 명령 행이 유지 됨

명령의 연결과 확장

특수문자

셸에서 특별한 의미를 가지는 문자

문자 의미
\ 특수 문자의 기능을 제거하는 escape 문자 또는 긴 명령 행을 분리할 때 사용
~ ~ 또는 ~username은 사용자의 홈 디렉토리를 의미
. 현재 작업 디렉토리를 표시 또는 명령 행의 맨 앞에서 셸 스크립트를 실행하는 source 명령
.. 현재 디렉토리의 부모 디렉토리
# # 문자의 뒤에 나타나는 문자를 주석으로 처리
$ $ *변수*는 변수의 값을 추출
& 명령&는 명령을 백그라운드로 실행시킴
* 파일 이름에서 사용할 때, 0 개 이상의 임의 문자열과 대응됨
? 파일 이름에서 사용할 때, 1 개 문자와 대응됨
| 앞 명령의 출력을 다음 명령의 입력으로 연결 시킴
<또는> 입출력 리다이렉션에서, 즉 파일로부터 입력 받을 때 또는 파일로 출력할 때 사용
>> 표준 출력을 파일의 끝에 덧붙일 때 사용
! 명령 히스토리 기능을 이용할 때 사용

파이프

앞 명령의 출력 결과를 다음 명령의 입력으로 연결

  • 명령1 | 명령2
    • cat /etc/passwd | sort | more

입출력 리다이렉션

  • 명령 < 파일 : 명령 수행에 필요한 표준 입력 대신 파일로부터 얻음
    • sort < /etc/passwd
  • 명령 > 파일 : 명령 수행의 결과를 표준 출력으로 보내지 않고 파일에 기록함
    • grep typedef /usr/include/* > typedef.out
  • 명령2 > 파일 : 명령 수행 중 표준 오류 출력을 파일에 덧붙임
    • ls 2 >> error.txt

명령 치환

명령을 수행할 때, 명령의 인수로서 다른 명령의 결과를 사용

$(command) 또는 `command`

➜  UNIX git:(master) ✗ ls -l $(which passwd)
-rwxr-xr-x  1 root  wheel  45312 Sep 22 09:29 /usr/bin/passwd
➜  UNIX git:(master) ✗ which passwd
/usr/bin/passwd
➜  UNIX git:(master) ✗ ls -l /usr/bin/passwd
-rwxr-xr-x  1 root  wheel  45312 Sep 22 09:29 /usr/bin/passwd
➜  UNIX git:(master) ✗

인용 부호

  • 빈칸을 포함하는 문자열을 개의 인수로 사용할 때 인용 부호가 필요함
  • 작은 따옴표 ''는 특수 문자의 의미를 제거함
  • 큰 따옴표 ""는 $, ``, , !를 해석하여 확장함.
➜  UNIX git:(master) ✗ echo "$(date)"
Fri Oct 16 19:29:05 KST 2020
➜  UNIX git:(master) ✗ echo "\$(date)"
$(date)
➜  UNIX git:(master) ✗ echo 'Today is $(date)'
Today is $(date)
➜  UNIX git:(master) ✗

수식과 변수의 확장

  • 수식의 결과를 명령 수행 전에 전달
    • $[수식] 또는 $((수식))
  • 변수의 값을 추출하여 명령 수행 전에 전달
    • $변수
➜  UNIX git:(master) ✗ echo "I am $[ 2020 - 1992 ] years old."
I am 28 years old.
➜  UNIX git:(master) ✗ echo BASH
BASH
➜  UNIX git:(master) ✗ ls -l $BASH
total 24
-rw-r--r--   1 jeahasorrowkissed  staff  10623 Oct 16 19:31 03_Use_Shell.md
drwxr-xr-x   4 jeahasorrowkissed  staff    128 Oct 16 16:51 Lecture
drwxr-xr-x  11 jeahasorrowkissed  staff    352 Oct 15 17:46 중간과제

셸 변수

셸 변수와 환경 변수

  • 셸 변수는 셸의 환경을 설정하기 위함 값을 저장

    • 모든 변수와 값을 출력하기 위해 set 명령을 사용
  • 셸 변수

    • 현재 셸에서만 사용이 가능하고 서브 셸로는 전달되지 않음(지역변수)
  • 환경 변수

    • 현재 셸뿐만 아니라 서브 셸로도 전달 (전역 변수)
    • 보통 변수 이름으로 대문자를 사용함
    • 터미널 창을 열어 셸을 시작하면 이미 많은 환경 변수가 설정되어 있음
    • 모든 환경 변수와 값을 출력하기 위해 prrntenv 명령을 사용
  • 변수 설정과 환경 변수로 만드는 방법

    • 변수=값
    • export 변수
  • 특정 환경 변수의 값 확인하는 방법

    • printenv 변수
    • echo $변수는 모든 종류의 변수 값을 확인할 수 있음
  ➜  UNIX git:(master) ✗ FOO=bar
  ➜  UNIX git:(master) ✗ export FOO
  ➜  UNIX git:(master) ✗ sh
  sh-3.2$ echo $FOO
  bar
  sh-3.2$ printenv FOO
  bar
  sh-3.2$ exit
  exit
  ➜  UNIX git:(master) ✗ unset FOO

자주 사용되는 환경 변수

변수 내용
HISTSIZE 1개 셸에서 저장되는 명령 히스토리 목록의 최대 개수로 기본 값은 1000
HOME 홈 디렉토리
MAIL 사용자의 메일박스에 해당하는 파일로 보통 /var/spool/mail/username
PATH 명령을 수행할 때 실행 파일을 찾기 위한 디렉초리 목록
PS1 셸 프롬프트를 표시하기 위한 문자열
SHELL 사용 중인 기본 셸
PWD 현재 작업 디렉토리
USER 현재 사용자 계정

로그인과 셸의 환경 설정 파일

  • 로그인할 때 또는 셸을 시작할 때 자동으로 실행되는 명령을 저장한 파일
    • 시스템 환경 설정 파일과 사용자 환경 설정 파일이 있음
    • 셸의 종류에 따라 다른 이름의 파일을 사용함
    • bash 셸의 경우 다음과 같음.
파일 설명
/etc/profile 모든 사용자에게 적용. 로그인할 때 가장 먼저 수행 됨 PATH, MAIL, HISTZISE 등 전역의 환경 변수가 설정됨
~/.bash_profile 로그인할 때 수행되며 개별 사용자에게 적용됨 보통 내부에서 ~./bashrc를 수행
~/.bashrc 셸을 시작할 때마다 수행되며 개별 사용자에게 적용됨 보통 내부에서 /etc/bashrc를 수행
/etc/bashrc 모든 사용자에게 적용. 셸을 시작할 때마다 수행됨 PS1, alias 설정, umask를 사용한 접근 권한의 초기값, 함수등 설정.
~/.bash_logout 로그아웃을 수행할 때 실행되는 스크립트 파일
728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linux] 사용자 관리  (0) 2020.10.25
[Linux] 시작과 종료  (0) 2020.10.24
[Linux] 파일과 디렉토리  (0) 2020.10.24
[Linux] 리눅스 설치준비 및 표준 디렉토리  (0) 2020.10.16
[Linux] 리눅스 란  (0) 2020.10.16

+ Recent posts