[부트캠프 - 14일차] 1/9.금 - Linux

developowl·2026년 1월 12일

부트캠프

목록 보기
5/24
post-thumbnail

5. ProcessManagement

[Review]

  • 일반 프로세스: 자신의 작업을 수행하면 종료
  • Daemon: 백그라운드에서 무한정 수행하고 있는데, 사용자의 요청이 오면 처리
    • 서버 용도 & 시스템 관리 및 감시
  • 포그라운드(like. 동기) / 백그라운드(like. 비동기) 작업

작업 전환

  • CTRL + z
    • 포그라운드 작업을 중지(종료가 아니고 중단)
  • bg %작업 번호
    • 작업 번호가 지시하는 작업을 백그라운드 작업으로 전환
  • fg %작업 번호
    • 작업 번호가 지시하는 작업을 포그라운드로 전환

      # 실습
      
      # 작업 생성
      sleep 200
      
      # 포그라운드 작업 중지
      Ctrl + z
      
      # 작업 번호가 [1]번인 작업을 백그라운드 작업으로 전환(Running)
      bg %1
      
      # 작업 번호가 [1]번인 작업을 포그라운드 작업으로 전환
      fg %1

작업 종료

  • 포그라운드 작업은 CTRL + c 를 입력하면 대부분 종료되는데, 인터럽트 시그널을 포그라운드 프로세스에 전달하며 인터럽트를 받으면 프로세스가 종료됨.
    • 프로그램에서 무시하도록 설정한 경우에는 종료되지 않음
  • 다른 터미널에서 해당 프로세스의 PID를 찾아 강제로 종료하는 것

로그아웃 후에도 백그라운드 작업 계속 실행하기

  • nohup 명령 &

작업 예약

정해진 시간에 한 번만 실행

at [옵션] [시각]
  • 옵션

    • -l : 현재 실행 대기 중인 명령의 전체 목록을 출력
    • -r 작업 번호 : 현재 실행 대기 중인 명령 중 해당 작업 번호를 삭제
    • -m : 출력 결과가 없더라도 작업이 완료되면 사용자에게 메일로 알려줌
    • -f 파일 : 표준 입력 대신 실행할 명령을 파일로 지정
  • 작업 확인

    • /var/spool/cron/atjobs 파일에 작업이 기록되는데 수행할 명령이 없으면 삭제됨
      ls -l /var/spool/cron/atjobs
      
      at -l
      
      atq
  • 예약된 작업 삭제

    • at -d 작업 번호
    • atrm 작업 번호
  • 사용 제한

    • 시스템 관리자는 at 명령을 사용하도록 허용하거나 사용하지 못하도록 제한할 수 있는데, 이와 관련된 파일이 /etc/at.allow 와 /etc/at/deny
    • 한 줄에 하나씩 계정을 입력하면 됨
    • at.allow 가 있으면 at.deny 는 무시
    • at.allow 가 없으면 at.deny 사용자를 제외한 모든 사용자가 at을 사용 가능
    • 둘 다 없으면 root만 사용 가능
    • 초기 설정은 at.deny 만 있는데 비어있는 상태라서 모든 사용자가 at 사용 가능

정해진 시간에 반복 실행

⭐️ crontab

📌 crontab

  • 리눅스 시스템에서 특정 시간에 특정 작업을 자동으로 실행하게 해주는 예약 작업 스케줄러
    • Cron Table 의 약어
    • cron 이라는 daemon(백그라운드 프로세스)이 이 테이블을 보고 있다가 정해진 시간이 되면 명령어를 실행
      • cron 은 Linux/Unix 계열 운영체제에서 특정 시간이나 주기에 맞춰 명령어나 스크립트 같은 작업을 자동으로 실행시켜주는 스케줄러이다.
crontab[-u UserID] [Option] [fileName]
  • 옵션
    • -e : 사용자의 crontab 파일을 편집
    • -l : crontab 파일의 목록을 출력
    • -r : crontab 파일을 삭제
  • crontab 명령으로 관리하는 파일은 사용자 별로 생성되는데 이 파일에 반복 실행할 작업을 저장
  • crontab 파일에는 여러 개의 작업을 저장할 수 있으며, 한 행에 하나의 작업을 설정

  • 앞에서부터 다섯 항목은 시간과 날짜를 나타내는 숫자.
  • 마지막 항목은 반복적으로 수행할 명령
  • 요일: 0-일요일, 1-월요일, … , 6-토요일
  • 각 항목은 공백 문자로 구분
  • 항목의 값이 *이면 해당 항목의 모든 값을 의미
  • - : 값의 범위를 지정할 수 있음.
    • 요일 필드에서 1-5를 설정하면 작업이 매주 평일 실행. 처음과 마지막 값 모두 범위에 포함
  • , : 반복에 대한 값 목록을 정의할 수 있음
    • 시간 필드 1, 3, 5 → 오전 1시, 3시, 5시에 실행
  • / : 범위와 함께 사용 가능.
    • 분 필드 1-10/2 → 1, 3, 5, 7, 9 를 지정하는 것과 같음
    • */20 → 20분마다 실행할 작업
  • 예시)
  • 파일 내용 확인
    • crontab -l
  • 파일 삭제
    • crontab -r
# 편집기 선택하기
crontab -e

# 편집기를 선택하고 작성
42 1 * * * ls -l > ~developowl/cron.out
# vim 설정 파일
vi ~/.vimrc

# 설정 내용 입력
set number # 줄 번호 표시
set autoindent # 줄 바꿈 시 이전 줄의 들여쓰기 유지
set smartindent # if, for 등 문법에 맞춰 자동으로 들여쓰기
syntax on # 코드 문법 강조
  • crontab 관련 파일

  • crontab 로그

    • 우분투 시스템에서는 기본적으로 cron 로그 기록이 비활성화 되어 cron.log 가 syslog 에 통합되는데 cron.log 를 활성화하고 싶은 경우에는 /etc/rsyslog.d/50-default.conf 파일에 접근하여 cron 로그를 활성화 시켜주면 됨

.sh 파일은 항상 실행 전 권한 부여하기

  • sudo chmod 700 /aaa.sh

6.SoftwareManagement

우분투 패키지

개요

  • 리눅스 SW는 소스 코드 형식 또는 바로 설치해서 사용할 수 있는 패키지 형태로 배포
  • 소스 코드로 배포하는 경우는 대부분 하나의 아카이브 파일로 묶어서 압축한 후 배포
  • 바이너리 패키지로 배포하는 경우 리눅스에서 주로 사용하는 패키지 형식은 RPM과 deb 두 가지인데 우분투는 기본적으로 deb 형식의 패키지를 사용하고 RPM 형식은 redhat 계열 리눅스에서 주로 사용
    • 우분투에서는 특별한 경우가 아니면 RPM 형식을 사용하지 않음
  • 우분투는 16.04 부터 새로운 패키지 형식으로 스냅을 도입
    • 스냅 패키지는 기존 패키지 형식의 의존성 문제를 해결한 것으로 deb 패키지와 호환성이 있음

특징

  • 바이너리 파일로 구성되어 있어 컴파일이 필요 없음
  • 패키지 내의 파일이 관련 디렉토리에 바로 설치됨
  • 패키지를 삭제할 때 관련된 파일을 일괄적으로 삭제할 수 있음
  • 기존에 설치한 패키지를 삭제하지 않고 바로 업그레이드 할 수 있음
  • 패키지의 설치 상태를 검증할 수 있음
  • 패키지에 대한 정보를 제공
  • apt 명령을 이용해서 의존성이 있는 패키지를 자동으로 설치

카테고리

  • main: 우분투에 의해 공식적으로 지원되며 자유롭게 배포할 수 있음
  • restricted: 우분투에 의해 지원되나 완전한 자유 라이센스 소프트웨어는 아님
  • universe: 자유 라이선스일 수도 있고, 아닐 수도 있는데 기술적 지원을 보장하지 않음
  • multiverse: 개인이 직접 라이센스를 확인해야 함

우분투 패키지의 이름

패키지 저장소

  • 패키지에 대한 정보와 패키지를 저장하고 있는 서버인 패키지 저장소라는 개념이 있음
  • 패키지 저장소에서 내려받아 사용을 함
  • 패키지 저장소를 이용하려면 등록을 해야 하는데, 우분투에서는 /etc/apt/sources.list.d/ubuntu.sources 파일에 저장되어 있음

우분투 패키지 관리

apt-cache

  • APT 캐시에 질의해서 여러가지 정보를 검색
  • 통계 정보 확인: apt-cache stats
  • 캐시에서 패키지 확인: apt-cache search 패키지 이름
  • 캐시에서 패키지 정보 출력: apt-cache show 패키지 이름
  • 사용 가능한 패키지 이름 확인: apt-cache pkgnames

apt-get 또는 apt

apt-get [option] 서브 명령
  • 옵션

    • -d : 패키지를 내려받기만 수행
    • -f : 의존성이 깨진 패키지를 수정하려고 시도
    • -h : 도움말 출력
    • -y : 설치 여부를 묻는 부분을 생략
  • 서브 명령

    • update : 패키지 저장소에서 새로운 패키지 정보를 가져옴, 설치한 후 맨 처음 한 번 수행
      • 명시한 저장소로부터 패키지 정보를 다시 읽어 동기화
      • 새로운 패키지 정보를 가져와서 APT 캐시를 수정하는 것
      • 저장소를 추가한 경우 이 명령을 반드시 실행
    • upgrade : 현재 설치된 패키지 업그레이드
      • 기존 패키지의 새로운 버전이 나온 경우 적용할 때
    • install 패키지명 : 패키지를 설치
      • 하나 이상의 패키지를 설치하거나 업그레이드할 때 사용
    • remove 패키지명 : 패키지를 삭제
      • 삭제할 때 해당 패키지의 설정 파일을 남겨두는데, 이는 나중에 같은 패키지를 다시 설치할 때 재활용하기 위함.
      • 설정 파일 조차 삭제하고 싶으면 purge 사용
    • purge 패키지명 : 패키지를 삭제
    • download 패키지명 : 패키지를 현재 디렉토리로 내려 받기
    • autoclean : 불완전하게 내려받았거나 오래된 패키지를 삭제
    • clean : /var/cache/apt/archives에 캐시되어 있는 모든 패키지를 삭제하여 디스크 공간을 확보
    • check : 의존성이 깨진 패키지를 확인
  • 패키지 자동 정리 및 삭제하기

    • sudo apt-get autoremove
  • 디스크 공간 정리

    • sudo apt-get clean
  • 패키지 다운로드

    • sudo apt-get download xterm
  • 패키지의 소스 관련 서브 명령: source

    • 특정 패키지의 소스 코드를 내려받기만 하는 경우
      • sudo apt-get --downloadonly source 패키지명
    • 특정 패키지의 소스 코드를 내려받고 압축을 푸는 경우
      • sudo apt-get source 패키지명
    • 특정 패키지의 소스 코드를 내려받아 압축을 풀고 컴파일하는 경우
      • sudo aptget --compile source 패키지명

dpkg 명령으로 패키지 관리

  • APT 명령은 fedora의 yum이나 dnf 명령과 비슷하게 인터넷이 연결된 환경에서 패키지를 자동으로 설치하는데 fedora의 rpm과 같은 명령이 dpkg
  • 데비안 계열의 리눅스에서 패키지를 관리하는 데 사용
  • APT 명령도 내부적으로는 dpkg 명령을 사용
  • 일반적으로 패키지를 설치할 때 APT 명령을 사용하면 되지만 시스템의 특정
    파일이 어느 패키지에 속했는 지를 확인하는 등 보다 세부적인 기능을 사용하려면 dpkg 명령이 필요
dpkg [option] 파일명 또는 패키지명
  • 옵션
    • -l : 목록을 출력
    • -l 패키지명 : 패키지의 설치 상태를 출력
    • -s 패키지명 : 패키지의 상세 정보를 출력
    • -L 패키지명 : 패키지를 설치할 때 사용한(설치된) 파일의 목록을 출력
    • -c .deb 파일 : 파일의 내용을 출력
    • -i .deb 파일 : 해당 파일을 설치
    • -r 패키지명 : 패키지 삭제
    • -P 패키지명 : 패키지와 설정 파일 모두 지움
    • -x .deb 파일 디렉토리 : 해당 파일을 디렉토리에 풀어놓기

aptitude

  • APT 명령처럼 패키지 관리를 자동화하여 쉽게 작업할 수 있는 명령
  • curses 는 터미널에서 텍스트 그래픽 기능을 제공하므로 메뉴를 선택하면서 작업할 수 있음

snap

  • 우분투가 새로 도입한 패키지 형식으로 샌드박스 형태의 패키지
  • 패키지를 만들 때 프로그램이 사용하는 모든 라이브러리를 패키지 안에 포함하는 방식으로 외부에서 받은 파일을 그냥 실행하는 것이 아니라 보호된 영역에서 실행해보는 것으로 외부 파일이 내부 시스템에 악영향을 주는 것을 방지하는 보안 기술을 위한 것(Sandbox)
  • 기존 시스템과 격리된 형태로 사용
  • 단점은 패키지가 커지게 됨
    snap [option] 명령
    • 옵션
      • -h : 도움말을 출력
    • 명령
      • disable : 스냅 서비스 중지
      • download 스냅명 : 다운로드
      • enable : 스냅 서비스와 실행 파일의 사용을 시작
      • find 스냅명 : 조회
      • info 스냅명 : 상세정보 출력
      • install 스냅명 : 설치
      • list : 목록 이름 출력
      • remove 스냅명 : 삭제

파일 압축

tar(tape archive)

tar 기능[옵션] [아카이브 파일] [파일명]
  • 기능

    • c : 새로운 tar 파일 생성
    • t : tar 파일의 내용을 출력
    • x : 원본 파일을 추출 (압출 풀기)
    • r : 새로운 파일을 추가
    • u : 수정된 파일을 업데이트
  • 옵션

    • f : 아카이브 파일이나 테이프 장치를 지정하는데 파일명을 -로 지정하면 tar 파일 대신 표준 입력에서 읽어들임
    • v : 처리하고 있는 파일의 정보를 출력
    • h : 심볼릭 링크의 원본 파일을 포함
    • p : 파일을 복구할 때 원래의 접근 권한을 유지
    • j : bzip2로 압축하거나 해제
    • z : gzip으로 압축하거나 해제
  • 자주 사용하는 옵션

    • cvf : 압축
    • xvf : 압축 해제
    • tvf : 내용 확인
    • uvf : 업데이트
    • rvf : 파일 추가
  • 압축과 압축 해제

    mkdir ex_archive
    
    cd ec_archive
    
    mkdir sample1 sample2 sample3
    
    # sample1을 가지고 sample1.tar 로 압축
    tar cvf sample1.tar sample1
    
    # 압축된 파일의 내용을 확인
    tar tvf sample1.tar
    
    # sample1 디렉토리 삭제: rmdir sample1 OR rm -r sample1
    rm -r sample1
    
    # 현재 디렉토리에 sample1.tar 파일의 압축을 해제
    tar xvf sample1.tar
    
    # 압축 파일에 내용 추가
    tar rvf sample1.tar sample2 
    # 에러 발생 - 디렉토리를 추가할 수 없음
    

  • 사이즈 줄이기
    • z 옵션을 추가헤서 압축을 하면 압축 파일의 사이즈르르 줄일 수 있음
      tar czvf sample1.tar.gz sample1 test.txt
      
      tar cjvf sample1.tar.bz sample1 test.txt

AWS) S3 ↔ Glacier

  • S3: 파일 그대로 저장
  • Glacier: 파일을 압축하여 저장

gzip, gunzip

  • 압축률이 좋은 유틸
  • 지정한 파일의 크기를 줄여서 저장하는데 확장자는 일반적으로 gz 를 사용
    gzip [옵션] [파일명]
    • 옵션
      • -d : 해제
      • -l : 정보 출력
      • -r : 하위 디렉토리를 탐색하여 압축
      • -t : 압축 파일 검사
      • -v : 압축 정보를 화면에 출력
      • -9 : 최대한 압축
  • 압축 해제
    gunzip sample1.tar.gz
  • 원본 파일을 압축 파일로 완전히 대체 → 압출을 풀면 (.gz → 원본) 압축 파일이 사라지고 원본 파일만 남게 됨.

bzip2, bunzip2

  • 압축률은 일반적으로 gzip보다 좋은데 속도가 약간 느림
    bzip2 [옵션] [파일명]
    • 옵션
      • -d : 해제
      • -l : 정보 출력
      • -t : 압축 파일 검사
      • -v : 압축 정보를 화면에 출력
      • --best : 최대한 압축
# sample1.tar 파일의 사이즈 줄이기
bzip2 sample1.tar

# 압축 해제
bunzip2 sample1.tar.bz2
  • 압축 후 원본 파일 → .bz2 로 대체(replace)함

xz

  • 가장 최근에 등장한 압축 방식으로 압축률이 가장 뛰어남

zip, unzip

  • windows 와의 호환성 때문에 제공

다운로드

wget

  • web get의 약어로 웹 상의 파일을 다운로드 받을 때 사용하는 명령어
  • 비상호작용 네트워크 다운로더
  • HTTP, HTTPS, FTP 프로토콜을 지원하고 HTTP proxy 에서 데이터를 가져올 수 있음
  • 비상호작용 네트워크 다운로더라서 사용자가 로그인하지 않은 상태 동안에도 백그라운드에서 동작할 수 있음
  • HTML, XHTML, CSS 페이지를 다운로드 받아서 웹 사이트의 로컬 버전을 만들 수 있고, 본래 사이트의 디렉토리 구조를 만들 수 있고, recuresive downloading 을 지원해서 사이트 전체를 쉽게 내려받을 수 있음
  • 느리거나 불안정한 네트워크 환경에서도 매우 잘 작동하는 견고한 프로그램으로 네트워크 환경이 불안정해서 도중에 연결이 끊겼다면 연결이 끊어진 시점에서 다운로드 가능
wget [옵션] ... [URL] ...
  • 기본 다운로드

    • wget https://~~/file.zip
  • 파일 이름 변경

    • wget -O 파일명 https://~~/file.zip
  • 다운로드 이어서 받기(중단된 경우)

    • wget -c https://~~/file.zip
  • 백그라운드에서 다운로드

    • wget -b https://~~/file.zip
  • 속도 제한

    • wget --limit-rate https://~~/file.zip
  • 웹사이트 미러링

    • wget -m https://~~.com
      • -r : 하위 디렉토리까지 따라가면 다운로드
      • -np : 상위 디렉토리로 이동하지 않도록 제한
      • -k : 로컬에서 오프라인으로 보기 편하도록 링크를 변환

curl

  • 터미널 환경에서 다양한 프로토콜을 사용해서 데이터를 전송하거나 가져오는 도구

  • 서버와의 데이터 통신 및 API 테스트에 최적화되어 있어 개발자들이 거의 필수적으로 사용하는 도구

    curl [옵션] [URL]
  • 웹 페이지 소스 보기

    • curl https://example.com
  • 파일로 저장

    • curl -o 파일이름 https://example.com
    • curl -O https://example.com
  • HTTP 헤더 확인

    • curl -l https://example.com
  • 리다이렉트 자동 추적

    • curl -L http://google.com

📌 Redirection

  • Forwarding → 보통 Read
    • 요청의 흐름을 이어가면서 이동
    • 이전의 요청을 갖고 있음
  • Redirection → 보통 CUD
    • 요청의 흐름을 끊고 이동
    • 요청을 새로 만듦
  • REST API 테스트 할 때 많이 사용하는 옵션

    • -X : 사용할 HTTP 메서드
    • -d : 전송할 데이터
    • -H : 헤더 정보를 추가
  • 자주 사용하는 옵션: -fsSL

    • f : HTTP 오류가 발생하면 아무것도 출력하지 말고 실패 처리
    • s : 에러 메시지 표시하지 않음
    • S : s와 함께 사용하는데, 진짜 에러가 난 경우에만 메시지를 출력
    • L : 리다이렉트된 경우 추적해서 데이터를 가져옴
  • sh 나 bash 로 연결된 스크립트 파일을 실행할 때 사용

    • 출력이 깔끔함
    • 안정성(에러 페이지를 보여주기 때문)
      • 404가 발생했을 때 불필요하게 에러코드가 쉘에게 전송되는 것을 막기 위해서
    • 유연성

wget과 curl의 차이점

wgetcurl
주요 목적단순 파일 / 사이트 다운로드데이터 전송 및 API 테스트
재시도재시도 가능재시도하지 않음
재귀적 다운로드가능가능하지 않음
복잡성단순하고 직관적매우 다양한 프로토콜 및 옵션 제공

7. LinuxBootingSystem

  • 리눅스의 부팅은 PC 전원을 켜는 순간부터 리눅스가 완전히 동작해서 로그인 프롬프트가 출력될 때까지를 의미

  • 부팅에 필요한 서비스가 시작되도록 설정해야 하고 부팅 과정에서 문제가 발생한 경우 이를 해결하기 때문에 이해를 해야 함

  • 부팅 과정

    • PC 부팅 → 리눅스와 무관
      • 전원 ON, BIOS 단계
    • 리눅스 부팅
      • Boot Loader → Kernel Initialize → systemd service → Login prompt

BIOS 단계

  • Basic Input Output System
  • ROM에 저장되어 있어서 ROM BIOS(==펌웨어) 라고도 함
  • MBR(Master Boot Record) : 컴퓨터에 장착된 키보드, 디스크 상태를 확인하고 부팅할 장치를 선택해서 부팅 디스크의 섹터에서 512B 를 로딩.
    • 디스크의 어느 파티션에 부팅 프로그램(Boot Loader)이 있는지에 대한 정보를 저장하고 부트 로더를찾아 메모리에 로딩하는 작업까지 수행

Boot Loader 단계

  • 운영체제 중에서 부팅할 운영체제나 부팅 방법을 선택할 수 있도록 메뉴를 제공

  • 우분투에서는 부트 로더로 GRUB를 사용하는데 기본적으로 멀티 부팅이 아니라면 GRUB 메뉴를 출력하지 않고 바로 부팅 작업을 진행

  • 부팅할 GRUB 메뉴를 출력하고자 한다면 /etc/default/grub 파일을 수정하면 되는데, GRUB_TIMEOUT_STYLE=hidden 으로 되어 있어서 부팅 메뉴가 출력되지 않음

    • 이 부분을 주석으로 처리하면 부팅 메뉴가 화면에 출력되고 GRUB_TIMEOUT=0 부분의 0을 수정해서 값을 설정하면 그 값이 메뉴가 출력되는 시간
  • 이 파일을 수정한 경우 sudo update-grub 명령을 수행

  • 리눅스 커널을 메모리에 로딩하는 역할을 수행

    • 리눅스 커널은 /boot 디렉터리 아래에 vmlinuz-버전명의 형태로 제공
    • 우분투를 처음 설치한 후 업데이트를 하면 커널이 추가로 생성

Kernel Initialization 단계

  • 시스템에 연결된 하드웨어를 사용할 준비

systemd 서비스 단계

  • daemon 을 모두 실행한 뒤 로그인 프롬프트 화면을 출력

  • 소프트웨어를 사용할 준비 완료

  • 부팅 끝

  • GUI를 사용하면 부팅 과정에서 보여지는 메시지가 출력되지 않고 부트 스플래시라는 이미지가 출력됨

  • GUI 환경에서도 부팅 메시지를 출력하고자 하는 경우에는 /etc/default/grub 파일에서 GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash” 부분을 삭제한 후 sudo update-grub 를 수행

    • 이 설정은 GUI 리눅스에서 부팅 실패하는 경우 설정해서 확인한다.
  • 부팅한 후 이 메시지를 확인하고자 하면 /var/log/dmsg 혹은 /var/log/bootstrap.log 을 확인. (more 사용 권장)


profile
Don’t get mad at the computer.

0개의 댓글