원격관리

  • 학습 개요
    telnet, ftp, rcp 등 원격 관리를 위한 전통적 방법을 알아보고 문제점을 파악해 보자.
    암호화를 이용하는 SSH 서비스에 관해 알아보고, OpenSSH 퍀지의 설치 여부와 방화벽 설정 및 서비스 실행 여부를 확인해 보자.
    ssh, sftp, scp 등 다양한 SSH 클라이언트 프로그램의 사용법을 알아보자.

  • 학습 목표

    1. telnet, ftp, rcp의 보안 취약점을 설명 가능.
    2. OpenSSH 패키지 설치.
    3. 방화벽 설정과 서비스 설정, SSH 서버 운영 가능.
    4. ssh, sftp, scp 클라이언트 프로그램 사용 가능.

전통적인 방법

전통적 원격 접속 방법

  • telnet, rlogin, rsh, ftp, rcp 등.
  • 전통적인 방법들은 암호화가 되지 않은 데이터를 주고 받음.
    • 도청이나 위변조 등 보안에 취약함.
  • 현재 거의 쓰지 않음.

telnet

  • 원격 컴퓨터에 telnet 프로토콜로 접속하는 프로그램
    • 사용자 계정, 비밀번호를 이용하여 원격으로 로그인 함.
  • telnet [-l user] host || telnet user@host
    • -l 생략 할 경우 호스트로부터 사용자 계정을 요구 받음.
    • -l 옵션 대신 @을 이용, 사용자 계정을 제시할 수도 있음.
  • 사용이 끝나면 logout 또는 exit을 이용하여 로그아웃.

ftp

  • 원격에서 터미널로 접속하여 파일을 업로드하거나 다운로드 할 수 있는 파일 전송 프로토콜 또는 프로그램

rcp

  • 원격의 컴퓨터와 서로 파일을 복사하는 프로그램
    • cp 명령과 유사
  • rcp [-r] source_file target_file
    • source_file을 target_file로 복사함.
    • ex) rcp a.txt jeaha@aws.ip:.
    • target_file이 디렉토리라면 해당 디렉토리에 source_file을 복사함.
    • -r 옵션을 사용하면 source_file이 디렉토리이며,
      그 안의 모든 서브 디렉토리도 함께 target_file 디렉토리로 복사함.
    • 원격 파일의 경우 [user@]host[:remote_file]의 형태.
  • rcp는 ftp와 달리 일회성으로 파일을 전송함.

Secure Shell (SSH)

  • telnet, ftp, rcp 등의 서버와 클라이언트 간 연결을 통해 주고 받는 모든 명령과 결과 및 계정 정보 등이 암호화 되지 않는 문제가 있음.
  • SSH는 원격 로그인이나 원격 데이터 통신에 사용되는 프로토콜로 패킷을 암호화하여 전홍
    • 전통적인 원격 관리 방법들의 문제점을 해결함.
  • 서버 / 클라이언트 구조로 동작하며, 보통 TCP 포트 22를 사용하여 서로 통신함.
    • 보안을 위해 우선 전자서명을 이용하여 서버와 클라이언트 간 연결을 인증하고, 그 후 서버와 클라이언트 간에 주고받는 메세지를 모두 암호화 함.
  • SSH를 사용하기 위해 필요한 프로그램
    • Server : sshd가 deamon 형태의 프로세스로 동작 중이어야 함.
    • Client : 사용 목적에 따라 ssh, sftp, scp 등이 필요.

OpenSSH 패키지

  • SSH 프로토콜을 사용하는 패키지로 공개 소스 프로그램.
    • 암호화된 안전한 통신을 제공하는 네트워크 연결 도구의 집합.
      • server : sshd
      • client : scp, sftp, ssh
  • 현재 대부분의 리눅스 배포판에 OpenSSH가 포함되어 있음.
    • 설치 확인 : yum list installed | grep openssh
    • 서버 설치 : yum -y install openssh openssh-server
    • 클라 설치 : yum -y install openssh-clients
    • 업데이트 : yum -y update openssh
  • 전역 설정 파일은 /etc/ssh/ 디렉토리에 저장됨.
  • 개별 사용자 설정 파일은 ~/.ssh/ 디렉토리에 저장됨.

SSH 서버의 실행

  • SSH를 이용하기 위해서는 sshd 데몬이 실행 중이어야 함.
    • 실행 : service sshd start
    • 중지 : service sshd stop
    • 상태 : service sshd status
  • 부팅 시 자옫으로 데몬을 시작시킬 수 있음(활성화).
    • 런레벨 별 서비스의 활성화 여부 확인은 chkconfig --list sshd.
    • 부팅 시 자동 실행 방법은 chkconfig sshd on.

서비스 설정 도구

  • 데스크탑 메뉴에서 '시스템 관리 > 관리 > 서비스' 실행.
  • '서비스 설정'창을 연 후 sshd를 찾아서 활성화 및 활성 상태를 확인하고 변경 가능.

방화벽 설정

  • 방화벽을 사용 중이라면, 설정을 확인한 후 사용하려는 서비스의 해당 포트와 프로토콜을 열어둬야 함.
    • 원격의 사용자가 어떤 서비스를 사용할 수 있는지를 제어할 수 있음
    • 방화벽 설정 파일은 /etc/sysconfig/iptables
  • 데스크탑 메뉴에서 '시스템 > 관리 > 방화벽'
    • 방화벽 설정 창에서 [신뢰하는 서비스] 선택, 해당 서비스를 선택, 적용.
    • [비활성화]는 방화벽을 사용하지 않는다는 뜻.

가상 머신의 SSH 서버에 접속하기

  • 호스트 PC 또는 외부 가상 머신에 설치된 sshd 또는 httpd에 접속.
    • 호스트 PC는 네트워크 인터페이스를 가지고 있음.
    • 가상 머신은 별도의 가상 네트워크 인터페이스를 가짐.
    • 가상 머신의 IP 주소는 기본적으로 10.0.2.15로 할당 됨.
  • 방법
    • 가상 머신의 리눅스에서 방화벽 설정 확인.
    • 가상 머신 리눅스에서 서버 프로세스 실행 여부 확인.
  • Port Forwarding 설정
    • 호스트 PC의 IP 주소와 Port 로 접속할 때,
      가상 머신의 IP 주소와 Port로 연결.

SSH 클라이언트 - 원격 접속

  • ssh는 SSH 서버에 원격으로 접속하기 위한 클라이언트 프로그램
    • 사용자 계정과 비밀번호를 이용하여 로그인하고, 이후에는 컴퓨터에 직접 로그인한 것과 동일하게 이용할 수 있음.
    • telnet, rlogin, rsh 등을 대체
  • [-l user] host || ssh user@host
    • ssh -l jeaha 192.168.0.10과 같이 실행.
    • ssh에서는 telnet과 같이 리눅스 명령어의 사용이 가능함.
    • exit, logout 명령으로 로그아웃.
  • 클라이언트 컴퓨터에서는 ~/.ssh/know_hosts 파일에
    원격으로 접속했던 호스트의 호스트 명, 암호의 종류, 원격 호스트 공개 키를 저장.
  • 윈도우에서는 공개 소프트웨어인 Putty 또는 Xshell을 클라이언트 프로그램으로 이용해서 접속 가능.

SSH 클라이언트 - 원격 파일 전송 : sftp

  • sftp는 서버에 원격 접속하여 파일을 업로드 하거나 다운로드 할 수 있는 클라이언트 프로그램.
    • 암호화된 연결릉 제외하면 사용 방법은 ftp와 같음.
  • sftp [user@]host
    • sftp jeaha@192.168.0.20
    • 원격 호스트 접속에 성공하면 지정된 사용자 계정의 호스트를 이용할 수 있음.
      • 업로드 : put localfile
      • 다운로드 : get remotefile
  • sftp 명령
CMD DESC
help sftp에서 사용할 수 있는 명령 조회
ls 원격 작업 디렉토리 조회
cd path 원격 작업 디렉토리 변경
mkdir path 원격 디렉토리 생성
chmod mode path 파일 path에 대한 권한을 mode로 변경
get 파일을 원격 서버에서 로컬 클라이언트로 받음
put 파일을 로컬 에서 원격으로 보냄
mget 여러 파일을 원격으로 부터 로컬로 받음. 파일 이름에 wildcard 가능
mput 여러 파일을 로컬에서 원격으로 보냄. wildcard 가능.
bye, exit, quit 종료

SSH 클라이언트 - 원격 파일 복사 : scp

  • 원격의 컴퓨터와 서로 파일을 복사하는 명령
  • scp [-r] source_file target_file
    • 소스(또는 타겟) 파일이 원격에 존재하는 경우
  • sftp로도 scp 기능을 수행할 수 있음.
    • 대화식이 아닌 일회성으로 파일을 전송하는 것이 가능.
728x90
반응형

네트워크 설정 및 점검

  • 학습 개요
    네트워크 인터페이스와 네트워킹과 관련이 있는 시스템 서비스를 확인해 보자.
    네트워크 설정을 확인하거나 설정을 바꾸는 명령을 학습하고 네트워크 설정 정보를 가지고 있는 파일에 관해 살펴보자.
    네트워크의 상태를 점검하는 명령의 기능과 사용법을 알아보자.

  • 학습 목표

    1. ifconfig 명령의 사용법과 출력 결과의 이해.
    2. 네트워크 설정 파일을 나열.
    3. 네트워크 상태를 점검하는 명령을 나열하고 설명.

네트워크 설정

네트워크 인터페이스

  • 컴퓨터와 네트워크 간의 연결을 제공하는 장치.
  • 네트워크 인터페이스 카드(NIC)에 위치함.
    • 랜(LAN) 카드 또는 이더넷(Ethernet) 카드라고도 불림.
  • 개별 네트워크 인터페이스 카드는 고정된 이더넷 주소(MAC ADDR)를 가지고 있으며 IP 주소를 할당 받을 수 있음.

ifconfig

  • 네트워크 인터페이스 정보를 확인하거나 설정하는 명령.

    • 이더넷 주소와 IP 주소를 확인할 수 있음.
    • 관리자는 IP 주소를 설정할 수 있음.
    • 네트워크 인터페이스 설정이나 통계를 확인할 수 있음.
      [ec2-user@AWS ~]$ ifconfig
      eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
            inet  172.31.0.0 (IP)  netmask 255.255.240.0 (class c의 주소)  broadcast 172.31.0.0
            inet6 0::0:0:0:0  prefixlen 64  scopeid 0x20<link>
            ether 0:0:0:0:0:0  txqueuelen 1000  (Ethernet)
            RX    packets 1516448  bytes 525514468 (501.1 MiB)
            RX    errors 0  dropped 0  overruns 0  frame 0
            TX    packets 1250885  bytes 169586125 (161.7 MiB)
            TX    errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
      lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
          inet  127.0.0.1  netmask 255.0.0.0
          inet6 ::1  prefixlen 128  scopeid 0x10<host>
          loop  txqueuelen 1000  (Local Loopback)
          RX    packets 12  bytes 848 (848.0 B)
          RX    errors 0  dropped 0  overruns 0  frame 0
          TX    packets 12  bytes 848 (848.0 B)
          TX    errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    • eth : 이더넷.
    • lo : (loop back interface) 같은 컴퓨터 내에서 가상의 네트워크 인터페이스.
  • ifconfig [-a] [interface]

    • 옵션 -a는 모든 네트워크 인터페이스에 대한 정보를 보여줌.
    • 네트워크 인터페이스를 지정하면 해당 정보만 보여줌.
  • ifconfig interface [IP_ADDR] [NETMASK_ADDR] [BROADCAST_ADDR] [UP|DOWN]

    • interface : 네트워크 이름(ex: eth0).
    • IP_ADDR : 설정하려는 IP 주소.
    • NETMASK_ADDR : 설정하려는 서브넷 마스크.
    • BROADCAST_ADDR : 설정하려는 브로드캐스트 주소.
    • UP | DOWN : 해당 네트워크 인터페이스를 활성화 또는 비활.

네트워킹 관련 서비스

  • network 서비스
    • 네트워킹의 사용을 위해 반드시 필요하며 네트워크 카드의 활/비활을 담당.
    • 부팅시 수행되는 /etc/rc.d/init.d/network 스크립트를 의미.
  • NetworkManager 서비스.
    • 네트워크 설정의 편리한 관리를 위해 필요.
      • 네트워크의 자동 연결 또는 네트워크 설정의 변경을 즉시 인지하여 처리함.
    • 부팅시 수행되는 /etc/re.d/init.d/NetworkManager 스크립트를 의미.

ifconfig 명령으로 확인 가능한 네트워크 인터페이스 정보

INFO DESC
MAC 주소 Ethernet H/W 주소 또는 어댑터 주소라고도 하며 48bit 구성
IP 주소 32bit 구성
broadcast 주소 같은 네트워크에 속한 모두에게 메세지를 보낼 때 사용하는 주소. ARP(Address Resolution Protocol), DHCP(Dynamic Host Configuration Protocol) 등에 사용
subnet mask 서브 네트워크의 범위를 나타내는 값
MTU 패킷의 최대 크기, 보통 1500
RX packets 받은 패킷 수
TX packets 보낸 패킷 수
RX bytes 받은 바이트 수
TX bytes 보낸 바이트 수
Interrupt 주소 인터럽트 주소

네트워크 관리를 위한 GUI

  • GNOME -> '시스템 > 기본 설정 > 네트워크 연결'
    • '네트워크 연결' 창이 나타남.
    • 여기서 네트워크 인터페이스 정보를 확인하거나 변경 가능.
    • 데스크톱 패널에서 NetworkManager 아이콘을 사용할 수 있음.

네트워크 설정 파일

  • 네트워크를 사용하기 위해 필요한 여러 가지 정보를 저장.
    • 네트워크 기능이 정확하게 동작하기 위해 필요함.
    • 여러 네트워크 설정 파일이 존재함.
  • 네트워크 설정 파일은 대부분 /etc 디렉토리에 위치함.
    • 또는 /etc/sysconfig 디렉토리에 위치함.
  • /etc/sysconfig/network-scripts/ 디렉토리에 존재하는 ifcfg-eth0과 같은 인터페이스 설정 파일도 있음.
    • 개별로 인터페이스에 대한 IP 주소, 넷마스크, 브로드캐스트 주소와 네트워트 파라미터를 설정.

/etc/sysconfig/network

  • 네트워킹의 활성화 여부, 호스트 명, 기본 게이트웨이 등 기본적 네트워크 설정을 포함한 파일
    • 모든 네트워크 인터페이스에 적용됨.
    • 파일을 변경했다면 네트워크 서비스나 시스템을 재시작해야 효과가 나타남.
  • 라인별로 설정할 대상과 값을 표시함
    •   NETWORKING=yes
        HOSTNAME=unix.knou.ac.kr
        GATEWAY=192.168.0.1
    • NETWORKING : ... 네트워크 설정이 되어 있으면 yes
    • HOSTNAME : ... 호스트명. 도메인명으로 나타냄
    • GATEWAY : ...는 기본 네트워크 게이트웨이의 IP 주소

/etc/resolv.conf

  • DNS 서버를 지정하며 사용할 도메인명과 도메인 검색 경로 등도 지정.
    • 네임서버 설정이 없으면 숫자로 된 IP 주소를 사용해야 함.
  • 라인 별로 설정할 대상과 값을 표시 함.
    nameserver 192.168.0.1
    nameserver 192.168.0.1
    domain jeaha.dev
    search jeaha.dev abc.dev asdf.dev
    • nameserver :
      • DNS 서버의 IP 주소를 지정.
      • 만약 DNS 서버를 추가로 설정할 경우에는 새로운 줄에 nameserver와 함께 IP 주소를 기록.
      • 첫 번째 네임 서버에 문제가 생기면 다음 네임서버를 사용 함.
    • domain :
      • 로컬 도메인명을 기록
    • search :
      • 불완전하게 호스트명만 사용하는 경우, 도메인명으로 사용할 수 있는 것을 설정.
        • 기본적으로 로컬 도메인명이 사용됨.
        • 빈칸을 구분하여 최대 6개까지 지정할 수 있음.

/etc/hosts

  • 호스트명과 IP 주소 및 별명을 설정한 파일.
    • 보통 첫 줄에 루프백 인터페이스에 대한 정보를 포함하고 있음.
    • 파일에 설정된 IP 주소는 DNS를 사용하지 않고 직접 전송함.
      127.0.0.1   localhost localhost.localdomain
      192.168.0.1 www.jeaha.dev

/etc/hosts.allow

  • host.deny 파일과 함께 '호스트 엑세스 제어 파일'이라 함.
  • 현재 시스템의 TCP/IP 서비스를 이용할 수 있는 호스트들을 설정.
  • 라인 별로 서비스와 호스트를 지정함
      sshd: 12.34.56.67, 192.168.0.
      httpd: ALL

/etc/hosts.deny

  • 현재 시스템의 TCP/IP 서비스를 이용할 수 없는 호스트들을 설정함
      sshd: 12.34.56.77
      in.telnetd: ALL
  • 두 파일 /etc/hosts.allow와 /etc/hosts.deny가 모두 있는 경우는 다음과 같이 처리 됨.
    • 우선 hosts.allow 파일 검사.
    • 매칭이 발생하면 첫 번째 것을 따름.
    • 두 파일에서 모두 매칭이 일어나지 않으면 허용 됨.

네트워크 점검

ping

  • ICMP(Internet Control Message Protocol)의 에코(echo)를 이용하여
    원격 호스트와의 연결 여부와 네트워크 상태 정보를 점검함.
  • ping [option] destination
    • destination은 호스트명 또는 IP 주소
    • 보낸 패킷 수(packet transmitted), 받은 패킷 수(received),
      유실된 패킷 수(packet loss), 응답 속도 등을 알 수 있음.
  • OPTION
    • -c count : 에코를 보내는 횟수 지정.
    • -i interval : 패킷을 보내는 간격(초)를 지정. 기본값은 1
    • -w deadline : ping 명령을 종료하는 시간(초)를 지정.

arp

  • 같은 네트워크에 있는 호스트들의 MAC 주소, IP 주소, 인터페이스 이름을 확인하는 명령
  • arp [hostname] || arp -a [hostname]
    • 인수 없는 arp 는 현재 같은 네트워크에 연결 되어 있는 시스템의 MAC 주소와 IP 주소를 출력
      • ARP 캐시 정보를 보여주는 것으로 /proc/net/arp 파일의 내용을 보여줌.

traceroute

  • 현재 호스트에서 특정 호스트까지 통신이 이루어지는 경로를 확인함.
    • IP 패킷에서 hop을 지날 때마다 ttl(time to live) 값이 줄어드는 성질을 이용.
    • 대상 호스트까지의 통신 가능 여부, hop 수, 지연 구간 등을 확인할 수 있음.
  • traceroute [option] hostname
OPTIONS DESC
-I ICMP의 에코를 이용하여 경로를 확인한다.
-T TCP의 SYN을 이용하여 경로를 확인한다.
-m max_ttl hop 수가 max_ttl을 넘지 않을 때까지만 경로를 확인한다. 기본값 30.
-q nqueries 각 hop에서 nqueries 번씩 패킷을 보냄. 기본값 3.

route

  • IP 라우팅 테이블을 설정하거나 확인하는 명령.

  • 단순한 route 명령은 라우팅 테이블의 내용을 출력함.

    • netstat -r 과 같음.
  • 라우팅 테이블을 편집할 수 있음.

    • 지정된 호스트를 라우팅 테이블에 추가하거나 삭제함.
    • route add [-net|-host] target [netmask, ...] [gw ..] ...
    • route del [-net|-host] target [netmask, ...] [gw ..] ...
    • target은 호스트명 또는 IP 주소
  • route 실행 예

      [ec2-user@ip-AWS ~]$ route
      Kernel IP routing table
    
      Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
      default         ip-172-xx-xx-1. 0.0.0.0         UG    0      0        0 eth0
      instance-data.a 0.0.0.0         255.255.255.255 UH    0      0        0 eth0
      172.xx.xx.0     0.0.0.0         255.255.240.0   U     0      0        0 eth0
    
  • 항목의 의미

    • Destination : 목적지 네트워크
    • Gateway: 목적지에 도달하는 데 사용되는 게이트웨이
    • Genmask : Netmask를 의미
    • Flags : 경로의 특징
    • Metric : 목적지까지의 거리
    • Ref : 접속을 이루려고 참조된 경로 횟수
    • Use : 이 경로를 통해 전송된 패킷 수
    • Iface : 사용되는 네트워크 인터페이스 이름

netstat

  • 네트워크 상태에 관한 정보를 출력하는 명령
    • 네트워크 인터페이스 정보, 네트워크 연결 상태, 시스템 라우팅 테이블, 프로토콜멸 네트워크 통계, 멀티 캐스팅 등을 확인할 수 있음.
  • netstat [options]
OPTIONS DESC
-i 인터페이스의 정보 출력
-a 모든 소켓을 출력
-l liseten 하는 소켓을 출력
-p 소켓의 프로그램명과 PID 를 출력
-r 라우팅 테이블을 출력
-t 활성화된 TCP 소켓을 출력
-u 활성화 된 UDP 소켓을 출력

nslookup

  • DNS 서버를 이용하여 호스트이 IP 주소를 확인함.
  • nslookup [hostname]
    • hostname에 대한 IP주소를 보여 줌.
    • hostname을 생략하면 대화식으로 사용 가능.(exit으로 종료)
  • host 또는 dig 명령과 유사함.
➜ nslookup www.knou.ac.kr
Server:         xxx.xxx.xxx.xxx
Address:        xxx.xxx.xxx.xxx#53

Non-authoritative answer:
Name:   www.knou.ac.kr
Address: 203.232.172.70
728x90
반응형

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

[Linux] 웹 서버  (0) 2020.12.13
[Linux] 원격 관리  (0) 2020.12.13
[Linux] 쉘 스크립트 -2  (0) 2020.11.08
[Linux] 소프트웨어 관리  (0) 2020.11.01
[Linux] 프로세스 관리  (0) 2020.11.01

Linux 에서 Tomcat 재시작 하는 스크립트

테스트 서버에서 구성해 둔 Tomcat을 재기동할 때마다 일일히 shutdown 시키고, startup 하는게 귀찮아서 한방에 재시작할 수 있도록 restart.sh를 만들어 봤다.
기존의 startup.sh와 shutdown.sh가 있는 상태에서 작동한다.

#!/bin/bash
export LANG=ko_KR.UTF-8

## 이곳에 각자 경로를 넣어주면 됨
C_HOME=/usr/local/tomcat7
C_PATH=$C_HOME/bin
C_LOG=$C_HOME/logs

#echo $C_HOME
#echo $C_PATH
#echo $C_LOG

## FUNCTION WAIT FOR 5 SECS
function stanby() {
  # full bar, e.g. 20 chars
  BAR='####################'
  VAC='                    '

  for i in {1..20}; do
    # waited sec
    var=`echo "0.25*$i"|bc`
    # print $i chars of $BAR from 0 position && from $i to 20
    echo -ne "\r>> STANBY [${BAR:0:$i}${VAC:$i:20}] $var sec << "
    # wait 250ms between "frames"
    sleep .25
  done
  echo -ne "\n"
}

### CHECK IS SERVER ALIVE
function isAlive() {
  if [ -z "`ps -eaf | grep java | grep $C_PATH`" ]; then
    # END
    echo 0
  else
    # RUN
    echo 1
  fi
}


echo -e "\n\n\t\t !!>> RESTART.SH RUN `date +%Y-%m-%d' '%H:%M:%S` <<!!\n\n" >> $C_LOG/catalina.out

## RUN SHUTDOWN.SH
echo -e "\nShutdown tomcat now...\n"
bash $C_PATH/shutdown.sh

stanby

## CHECK THE PROCESS ENDED
if [ isAlive == 0 ]; then
  echo -e "\n\t>>> Tomcat was terminated successfully. <<<\n"
else
  ## IF IT HAS NOT ENDED KILL PROCESS
  ps -eaf | grep java | grep $C_PATH | awk '{print $2}' |
  while read PID
  do
    echo "Killing $PID... "
    kill -9 $PID
    echo -e "Tomcat($PID) is being killed\n"
  done

  stanby
fi

echo -e "\n\t>>> try to restart tomcat now <<<\n"

## RUN STARTUP.SH
bash $C_PATH/startup.sh

if [ isAlive == 0 ]; then
  echo -e "\n\t>>> ERROR!!! CAN NOT START TOMCAT!!  <<<"
else
  ## IF IS PROCESS RUN, CHECK USER WANNA TAIL LOG
  echo -e "\n\t>>> TOMCAT STARTUP COMMAND IS ON ACTION. <<<"
  echo -en "tail log?? (y|n) : "
  read yn

  ## TAIL LOG
  if [ $yn == "y" ] || [ $yn == "Y" ]; then
    # **CHECK DIR**
    tail -f $C_LOG/catalina.out
  fi
fi

프로세스 확인하는 함수를 따로 빼 두거나,
startup이나 shutdown의 경로를 따로 변수로 잡아주면 좋을것 같지만 일단 킵해두도록 함.

추가적으로 서버 기동 후 로그를 보는 명령어도 귀찮아서 shell 파일로 만들어 봤다.

    #!/bin/bash
    export LANG=ko_KR.UTF-8

    tail -f ../logs/catalina.out
728x90
반응형

쉘 스크립트 - 2

  • 학습 개요
    쉘 스크립트에서 선택과 반복을 위한 제어 구조를 사용해보자.
    선택 구조인 if / case, 반복 주조인 for / while / until 명령의 문법과 의미를 알아 보자.
    조건 검사가 필요할 때 사용되는 명령과 수식의 작성법을 알아 보자.

  • 학습 목표

    1. 선택 구조를 사용하여 쉘 스크립트를 작성하자.
    2. 반복 구조를 사용하여 쉘 스크립트를 작성하자.
    3. 수식을 포함하는 쉘 명령을 선택과 반복 구조에서 사용하자.

선택 구조

제어 구조

  • 쉘 스크립트에서 실행을 제어하기 위해 선택과 반복 구조를 사용함.
  • if, for, case, while, until

if

  • 프로그래밍 언어에서 if 문의 기능

if command ...; then
  command ...
[ elif command; then
  command ... ]...
[ else
  command ... ]
fi
  • ;은 같은 라인에서 다른 단어(then elif else fi)와 구분이 필요할 때 사용함.
  • if다음의 명령을 실행하여 참이면 then 다음의 명령을 실행함. (if 명령은 종료됨)
    • if나 elif 다음에 조건 검사를 위한 test 명령을 사용할 수 있음.
    • if나 elif 다음에 나오는 마지막 명령의 종료 상탯값으로 참과 거짓을 구분함.
    • 종료 상탯값 0은 성공적 종료를 의미하며 참으로 간주.
  • 거짓이면 elif 다음의 명령을 실행하여 참 / 거짓을 판단하고 실행함.
  • 만족 되는 것이 없으면 else 다음의 명령을 실행함.
  [ec2-user@ip-AWS ~]$ cd /usr/bin
  [ec2-user@ip-AWS bin]$ echo $?
  0
  [ec2-user@ip-AWS bin]$ cd /bin/usr
  -bash: cd: /bin/usr: No such file or directory
  [ec2-user@ip-AWS bin]$ echo $?
  1
  [ec2-user@ip-AWS bin]$ if true; then
  > echo "SUCCESS"
  > else
  > echo "FAILURE"
  > fi
  SUCCESS
  [ec2-user@ip-AWS bin]$ if true; false; then
  > echo "TRUE"
  > fi

test

  • 조건 검사를 위해 사용하는 명령
  • 조건이 만족되면 종료 상탯값으로 0(true), 1(false)를 리턴함
  • test expression || [ expression ]
    • expression은 파일의 상태 검사, 문자열의 비교, 정수 비교를 위한 수식
    • **대괄호와 expression 사이에 공백이 있어야 함.
[ec2-user@ip-AWS ~]$ cat intCompare.sh
#! /bin/bash
if [ $# !=2 ]; then
        echo "you must supply two numbers as arguments"
        exit 1
fi

if [ $1 -eq $2 ]; then
        echo "$1 equals to $2"
elif [ $1 -gt $2 ]; then
        echo "$1 is greater than $2."
else
        echo "$1 is less than $2."
fi

echo "$1 + $2는 $[$1+$2]임."

[ec2-user@ip-AWS ~]$ chmod u+x intCompare.sh

[ec2-user@ip-AWS ~]$ ./intCompare.sh 36 68
./intCompare.sh: line 2: [: 2: unary operator expected
36 is less than 68.
36 + 68는 104임.

case

  • 다중 선택을 지원하는 복합 명령
    • switch 문과 비슷
case word in
  [ pattern [ | pattern ]... ) command...;; ]...
esac
  • word 부분을 먼저 확장하고 pattern과 매칭되는지 검사함
  • 매칭이 이루어지면 상응하는 명령이 수행됨
  • 일단 매칭이 이루어지면 이후의 매칭 시도는 없음
  • pattern에서 *은 프로그래밍에서 'default 키워드'를 사용함.

case에서 패턴 사용 예

pattern ) desc (word가 다음과 같은 경우 패턴 매칭이 일어남)
a) a인 경우
[[:alpha:]]) 1개의 알파벳 문자인 경우
???) 임의의 세 글자인 경우
*.txt .txt로 끝나는 경우
[aeiou]) 모음에 해당하는 영문 소문자 1개인 경우
[ABE][0-9] 앞 글자가 A, B, E중 하나이고 다음 글자가 숫자인 두 글자인 경우
*) 임의 길이의 글자와 매칭됨. case 명령에서 마지막 패턴으로 사용하는 것이 좋음

case 실행의 예

[ec2-user@ip-AWS ~]$ cat caseTest.sh
#!/bin/bash

echo "
plz select :
a. Display System Information
b. Show Information about File Systems
c. Summarlize Disk Usage Information
q. Quit
"

read -p "Enter selection [a, b, c or q] > "

case $REPLY in
  a|A)
      echo "Hostname : $HOSTNAME"
      uptime
      ;;
  b|B)
      df -h
      ;;
  c|C)
      if [$( id -u) -eq 0 ]; then
        echo "All user's home disk space utillization"
        du -sh /home/*
      else
        echo "($USER)' home disk space utilization"
        du -sh $HOME
      fi
      ;;
  q|Q)
      echo "Program terminated."
      exit
      ;;
  *)
      echo "Invalid entry" > $2
      exit 1
      ;;
esac

[ec2-user@ip-AWS ~]$ ./caseTest.sh
plz select :
a. Display System Information
b. Show Information about File Systems
c. Summarlize Disk Usage Information
q. Quit

Enter selection [a, b, c or q] > a
Hostname : ip-AWS.ap-northeast-2.compute.internal
07:45:43 up 34 days, 0 min,  1 user,  load average: 0.00, 0.00, 0.00


[ec2-user@ip-AWS ~]$ ./caseTest.sh
plz select :
a. Display System Information
b. Show Information about File Systems
c. Summarlize Disk Usage Information
q. Quit

Enter selection [a, b, c or q] > b
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        474M     0  474M   0% /dev
tmpfs           492M     0  492M   0% /dev/shm
tmpfs           492M  408K  492M   1% /run
tmpfs           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.9G  6.2G  24% /
tmpfs            99M     0   99M   0% /run/user/1000

[ec2-user@ip-AWS ~]$ ./caseTest.sh
plz select :
a. Display System Information
b. Show Information about File Systems
c. Summarlize Disk Usage Information
q. Quit

Enter selection [a, b, c or q] > c
./caseTest.sh: line 19: [1000: command not found
(ec2-user) home disk space utilization
92K     /home/ec2-user

[ec2-user@ip-AWS ~]$ ./caseTest.sh
plz select :
a. Display System Information
b. Show Information about File Systems
c. Summarlize Disk Usage Information
q. Quit

Enter selection [a, b, c or q] > d
./caseTest.sh: line 30: $2: ambiguous redirect

[ec2-user@ip-AWS ~]$ ./caseTest.sh
plz select :
a. Display System Information
b. Show Information about File Systems
c. Summarlize Disk Usage Information
q. Quit

Enter selection [a, b, c or q] > g
./caseTest.sh: line 30: $2: ambiguous redirect

[ec2-user@ip-AWS ~]$ ./caseTest.sh
plz select :
a. Display System Information
b. Show Information about File Systems
c. Summarlize Disk Usage Information
q. Quit

Enter selection [a, b, c or q] > q
Program terminated.

반복 구조

for

  • 모든 데이터를 한 차례씩 처리하는 제어구조
  •   for variable [ in word ... ]; do
        command ...
      done
  • word ... 부분 (값의 목록)을 먼저 확장함
  • word 목록에 존재하는 값을 순차적으로 변수 variable에 대입하고 do와 done 사이의 명령을 수행함.
  • word 부분이 없다면 in "$@"가 있는 것으로 가정함.
  [ec2-user@ip-AWS ~]$ echo {A..D}
  A B C D
  [ec2-user@ip-AWS ~]$ for i in {A..D}; do echo $i; done
  A
  B
  C
  D
  [ec2-user@ip-AWS ~]$ cat testFor.sh
  #! /bin/bash
  for FILE
  do
    echo $FILE
  done

  [ec2-user@ip-AWS ~]$ chmod u+x testFor.sh

  [ec2-user@ip-AWS ~]$ ./testFor.sh `ls`
  arg.sh
  caseTest.sh
  first.sh
  intCompare.sh
  list.bak
  testFor.sh
  whoson.sh
  • C나 Java에서 사용하는 형태

  •   for (( exp1; exp2; exp3 )); do
        command...
      done
  • exp1~3은 수식으로 각각 생략 가능

  • exp1은 제어 변수의 초기화를 위해 한 번 수행 됨

  • exp2가 참인 동안 명령과 exp3이 반복 수행 됨

  • [ec2-user@ip-AWS ~]$ cat testFor3.sh
      #! /bin/bash
      LIMIT=10
    
      for(( a=0; a<LIMIT; a++)); do
        echo "$a"
      done
      [ec2-user@ip-AWS ~]$ . testFor3.sh
      0
      1
      2
      3
      4
      5
      6
      7
      8
      9
      [ec2-user@ip-AWS ~]$

while

  • 조건이 참인 동안 명령을 반복함.
  •   while command...; do
        command
      done
  • while 다음에 나오는 명령을 실행하여 참 또는 거짓을 판단함
  • if 명령과 마찬가지로 종료 상탯값이 0이면 참으로 판단
  • 조건 비교를 위해 test expression 또는 [ expression ]을 자주 사용함.
  [ec2-user@ip-AWS ~]$ cat testWhile.sh
  #! /bin/bash
  N=1
  S=0

  while [ $N -le 10 ]; do
    echo -n "$N "
    S=$[ $S+$N ]
    N=$[ $N+1 ]
  done
  echo
  echo $S
  [ec2-user@ip-AWS ~]$ . testWhile.sh
  1 2 3 4 5 6 7 8 9 10
  55

for 와 while

  • for 명령 (2)를 다음과 같이 변환 가능
  •   (( exp1 ))
      while (( exp2 )); do
        command...
        (( exp3 ))
      done
  • (( expression ))은 수식 계산에 사용되는 복합 명령
  • let "expression"과 동일하며 test 명령 대신에 사용 가능
    • 조건 비교를 위해 test expression 또는 [ expression ]과 함께 자주 사용함.
  • while 다음의 (( expression ))에서 수식 결과가 0이 아닌 경우 종료 상탯값이 0이 되며 참으로 판단.
  [ec2-user@ip-AWS ~]$ cat testWhile2.sh
  #! /bin/bash
  LIMIT=10

  ((a=0))
  while (( a<LIMIT )); do
    echo "$a"
    (( a++ ))
  done
  [ec2-user@ip-AWS ~]$ . testWhile2.sh
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9

until

  • 조건이 만족될 때까지(거짓인 동안) 명령을 반복하여 수행함
  •   until command ... ; do
        command ...
      done
  • until 다음에 나오는 명령이 참이 될 때까지 반복함
    • 거짓인 동안 반복하게 됨
  • 조건을 표시하기 위해 test expression, [ expression ], (( expression ))을 사용할 수 있음.
  [ec2-user@ip-AWS ~]$ cat testUntil.sh
  #! /bin/bash
  N=1
  S=0
  until [ $N -gt 10 ]; do
    echo -n "$N "
    let S=$S+$N
    let N=$N+1
  done
  echo
  echo $S
  [ec2-user@ip-AWS ~]$ . testUntil.sh
  1 2 3 4 5 6 7 8 9 10
  55
728x90
반응형

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

[Linux] 원격 관리  (0) 2020.12.13
[Linnux] 네트워크 설정 및 점검  (0) 2020.12.05
[Linux] 소프트웨어 관리  (0) 2020.11.01
[Linux] 프로세스 관리  (0) 2020.11.01
[Linux] 파일 시스템 관리  (0) 2020.10.25

쉘 스크립트 - 1

  • 학습 개요
    쉘은 명령어 해석기 이며 스크립트 언어이다.
    일련의 쉘 명령이나 함수의 조합을 프로그램의 제어 구조를 사용하여 쉘 스크립트 파일로 작성해 두면 편리하게 사용할 때가 있다.
    쉘 스크립트의 기본 작성법을 알아보고 변수와 함수의 사용법과 예제를 보자.

  • 학습 목표

    1. 쉘 스크립트 파일의 실행 방법을 알 수 있다.
    2. 쉘 스크립트에서 변수를 사용할 수 있다.
    3. 쉘 스크립트에서 함수를 정의하고 호출하여 사용할 수 있다.

쉘 스크립트 개요

쉘 스크립트

  • 쉘 명령어의 집합으로 이루어진 실행 가능한 텍스트 파일.
    • 쉘이 파일의 내용을 읽어 처리함.
    • 선택 / 반복 등의 프로그래밍 구조를 사용할 수 있음.
    • 긴 작업, 반복적으로 일어나는 작업을 쉘 스크립트로 작성할 수 있음.
    • 쉘 스크립트를 새로운 명령어처럼 사용할 수 있음.
  • 예)
    • ~/.bash_profile, ~/.bachrc 등의 쉘 초기화 스크립트.
    • 디렉토리 /etc/rc.d/init.d/에 존재하는 시스템 초기화 스크립트.
  • 3차 USE_SHELL을 복습 할 것.

쉘 스크립트의 실행 방법

  • bash script_file
    • 스크립트 파일에 실행 권한을 추가할 필요가 없음.
    • 명령 행에서 script_file 다음에 인수를 추가할 수 있음.
    • 서브 쉘을 새로 생성하여 스크립트를 실행함.
  • ./script_file
    • 스크립트 파일에 실행 권한을 추가 해야 함.
    • PATH 환경 변수에 설정된 디렉토리에서 스크립트 파일을 찾음.
    • 스크립트 파일의 첫 행에서 #! 다음에 해석기(/bin/bash)를 지정함.
    • 서브 쉘을 새로 생성하여 스크립트를 실행함.
  • source script_file || / . script_file
    • source는 쉘 내장 명령이며 현재 쉘에서 스크립트 파일을 실행함.

쉘 스크립트 문법

  • #으로 시작하는 단어와 행은 주석으로 처리 됨.
  • $0은 스크립트 파일의 이름으로 확장됨.
    • source 명령으로 실행하는 경우 쉘의 이름(bash)으로 확장 됨.
  • $1은 첫 번째 인수, $2는 두 번째 인수로 확장 됨
  • 스크립트가 복잡하다면 적절한 echo 명령을 넣는 것이 좋음.
  • 변수=값을 사용하여 변수에 값을 지정하고 $변수를 사용하여 값을 추출할 수 있음
    • 등호(=)의 좌우에 공백이 있으면 안됨
  • bash -x script_file과 같이 실행하면 수행되는 명령을 확인할 수 있음.(디버깅 모드)

변수의 사용

쉘스크립트에서 변수의 사용

  • 선언 없이 변수를 사용할 수 있음
    • MYCOLOR=blue || echo $PATH
  • 변수의 값은 기본적으로 문자열로 취급
    • 연산이 필요하고, 변환이 가능한 경우에 정수로 다루어짐
  • 변수 이름의 작명
    • 대소문자 구분
    • 영문자, 숫자, 언더스코어로 구성
    • 첫 자는 숫자가 될 수 없음.

변수 사용의 예

ex desc
a=ls 변수 a에 문자열 'ls'를 대입
b="A string" 따옴표를 사용하여 공백을 가진 문자열을 대입
c="A string and $b" $b를 '변수 확장'한 후 문자열을 대입
d=$(ls wc -l)
e=$[5*7] $[...]는 '수식 확장'을 의미. 대괄호 안의 수식을 계산한 후 결과를 대입
f="\t\tA string\n" 이스케이프 문자 \를 사용
g=5 h="A String" 한 행에 2개의 변수를 사용하는 예
i=${b}1 변수 이름을 중괄호로 묶으면 뒤따라 나오는 문자를 분리할 수 있음. "A string1"이 대입됨. 실제 $b는 ${b}를 줄여 쓴 형태
$a 먼저 변수 확장이 일어나고, 쉘은 이것을 하나의 명령어로 해석하여 처리
$a=$e 변수 확장의 결과는 ls=35. 쉘은 이 자체를 하나의 명령어로 처리하므로 오류가 발생. eval "$a=$e"를 실행할 수 있음

명령 행 인수

  • 쉘이 스크립트를 처리할 때 사용되는 인수
    • 사용자가 스크립트 실행에 필요한 입력값을 주어야 함
  • $0은 스크팁트 파일의 이름으로 확장
  • 나머지를 위치 매개변수(positional parameteer)라 하며 $1, $2, $3 등은 이러한 인수를 의미함
  [ec2-user@ip-aws ~]$ cat > arg.sh
  echo "This script's name is $0"
  echo Argument 1 : $1
  echo Argument 2 : $2
  ^C
  [ec2-user@ip-aws ~]$ ls
  arg.sh  first.sh  list.bak
  [ec2-user@ip-aws ~]$ chmod u+x arg.sh
  [ec2-user@ip-aws ~]$ ./arg.sh first second
  This script's name is ./arg.sh
  Argument 1 : first
  Argument 2 : second
  [ec2-user@ip-aws ~]$ /home/ec2-user/arg.sh one two
  This script's name is /home/ec2-user/arg.sh
  Argument 1 : one
  Argument 2 : two

특별한 매개변수

  • 명령 행 인수와 관계가 있는 특별한 변수
  • 변수의 값을 참조만 할 수 있음
ex desc
$* "$*"는 $0을 제외한 모든 위치 매개변수를 포함하는 1 개의 큰 따옴표 like "$1 $2 $3 ..."
$@ 여러 개별 큰 따옴표 문리된 문자열로 확장 됨. "$1", "$2", "$3", ...
$$ 쉘의 프로세스 ID PID로 확장
$# 위치 매개변수의 개수로 확장
$? 최근에 실행된 포어그라운드 명령의 종료 상탯값으로 확장됨. 성공적 종료는 0.
$! 최근 실행된 백그라운드 명령의 프로세스 ID로 확장됨.

read

  • 키보드로 부터 한 라인을 읽은 후, 단어를 상응하는 변수에 저장함.
    • 대화식으로 스크립트를 실행시킬 수 있음.
  • read [options] [variable...]
    • 첫 번째 변수에 첫 번째 단어를, 두 번째 변수에 두 번째 단어를 저장.
    • 마지막 면수에 나머지 모두를 저장.
    • 남아있는 변수가 있으면 빈 문자열이 됨.
    • 변수의 이름을 사용하지 않으면 쉘 면수 REPLY에 저장됨.
    • 옵션 -p prompt는 입력을 위한 프롬프트를 지정함.

함수의 사용

함수

  • 함수는 쉘 스크립트에서 반복적으로 사용되는 명령의 묶음.
  • 쉘 스크립트 파일에 함수를 정의할 수 있음.
    • 정의되어 있는 함수를 호출하여 사용함.

함수의 호출 방법

  • 함수가 정의된 스크립트 파일에서 함수를 호출하여 사용할 수 있음.
  • 함수가 정의된 스크립트 파일을 실행하면 쉘 환경에 함수 정의가 추가됨.
    -> 같은 쉘에서 함수 이름을 쉘 명령어처럼 사용.
    • source 명령이나 도트(.) 명령으로 쉘 스크립트를 실행하면 함수 정의가 현재 쉘 환경에 추가됨.
      • set 명령으로 확인하고 unset name으로 삭제할 수 있음.
    • 이후 함수를 쉘 명령어처럼 사용할 수 있음.

함수 정의 방법

  function name {
    command ...
    return
  }

  name() {
    command ...
    return
  }
  • return [n] 문은 함수를 종료하는 문장으로 종료 상탯값을 리턴할 수 있음(n이 생량되면 직전 명령의 종료 상탯값을 리턴)
  • 함수 정의를 항상 사용하려면 .bashrc에 넣는것이 좋음
    • alias 설정도 마찬가지.

함수 실행 예

  [ec2-user@ip-aws ~]$ touch whoson.sh
  [ec2-user@ip-aws ~]$ vi whoson.sh
  [ec2-user@ip-aws ~]$ cat whoson.sh
  #!/bin/bash

  whoson () {
    date
    user=$USER
    echo "$user currently logged on"
  }

  echo "STEP 1"
  whoson
  echo "STEP 3"

  [ec2-user@ip-aws ~]$ . whoson.sh
  STEP 1
  Thu Nov  5 12:50:41 UTC 2020
  ec2-user currently logged on
  STEP 3

  [ec2-user@ip-aws ~]$

  [ec2-user@ip-aws ~]$ . whoson.sh
  STEP 1
  Thu Nov  5 12:50:59 UTC 2020
  ec2-user currently logged on
  STEP 3

  [ec2-user@ip-aws ~]$ whoson
  Thu Nov  5 12:51:19 UTC 2020
  ec2-user currently logged on

  [ec2-user@ip-aws ~]$ echo $user
  ec2-user
[ec2-user@ip-aws ~]$ cat .bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
  . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions

[ec2-user@ip-aws ~]$ vi ~/.bashrc

[ec2-user@ip-aws ~]$ cat .bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
  . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions
arg1 () {
  echo "$1"
}

ds() {
  echo "DISK DPACE UTILIZATION FOR $USER"
  du -sh ~
}

[ec2-user@ip-aws ~]$ . ~/.bashrc

[ec2-user@ip-aws ~]$ arg1 first
first

[ec2-user@ip-aws ~]$ ds
DISK DPACE UTILIZATION FOR ec2-user
80K     /home/ec2-user
728x90
반응형

소프트웨어 관리

  • 학습 개요
    소프트웨어의 설치와 관리를 위한 패키지 관리 도구를 알아보자.
    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

+ Recent posts