CS/OS

운영체제 : 3.Linux OS 이용/관리 : 2.특징/구조

OSP 2024. 12. 3. 20:41

3. Linux OS 이용/관리


 

3.2. 특징/구조


3.2.1. Linux 특징

3.2.1.1. Windows는 사용자들에게 보편적인 OS라면, Linux는 기술자들에게 보편적인 OS이다.

3.2.1.2. 1991년 Linus benedict torvalds에 의해 개발되었다.

3.2.1.3. Linux 특징은 하기와 같다.

다중사용자지원 Linux의 두드러진 특징은 아니다. 
안정성과 보안성 Linux의 두드러진 특징은 아니다. 다양한 사람에 의해 자유롭게 수정/보완되기에 안정성과 보안성이 준수된다고 하는데, 오히려 그렇기에 불특정 위험에 노출된 것도 사실이다. 
오픈소스 중요한 특징이다. "공짜다." 그리고, "필요하면 아무나 가져가서 니 입맛대로 바꿔서 써라"
이식성과 확장성 1. 오픈소스 소프트웨어임을 원인으로 하는 결과적인 특징이라 할 수 있다.
2. 리눅스는 POSIX(Portable OS Interface Portable Operating System Interface) 표준을 따른다.

3.2.2. 디렉토리 구조

3.2.2.1. 윈도우에는 환경설정 값을 한 곳에 몰아 넣은 레지스트리(registry, 중앙집중데이터베이스)가 있으나, 리눅스에는 여러 디렉토리에 분산되어 저장되어 있다고 한다. 오랜 기간 유저친화적으로 변화해서 그런가 중앙집중형이 분산형보다 관리가 더 어렵다. 레지스트리도 최상위만 묶어놨지 펼치면 이보다 더 분산적으로 폴더링하기도 어렵다. 애초에 윈도우는 관리자 친화적으로 설게/발전된 OS가 아니다.

디렉토리 내용
/ 최상위 디렉토리
/boot Boot loader
/root root 계정의 홈 디렉토리 *administrator 폴더
/bin 기본적인 명령어
/sbin 시스템 관리자용 명령어
/lib 부팅에 필요한 핵심 시스템 라이브러리
/etc 시스템 설정 파일(/passwd, /shadow, /group, /fstab, /hostname, /network)
/dev 하드 디스크 등 시스템 디바이스 (CD-ROM 등)
/mnt 탈부착 장치에 대한 일시적 접속 지점
/media USB, CD-ROM등 장치들의 접속 지점
/opt 추가적인 프로그램들의 설치경로
/srv 서버에서 제공받은 서비스 데이터 파일
/tmp 임시파일 디렉토리(공용 디렉토리)
/proc 현재 메모리 위에 있는 프로세스에 대한 파일
/var 시스템 운용 중의 데이터 기록
/var/lib 시스템이나 어플리케이션의 DB, 정보 파일(소프트웨어 라이브러리랑 약간 다름)
/var/cache 사용하는 프로그램의 캐시 데이터
/var/spool 처리를 기다리는 프로세스의 임시 저장 공간
/var/log 시스템 로그 파일
/var/tmp 임시/공용 파일
/usr 일반 계정의 공용 디렉토리(설정 DB)
/usr/bin 일반 계정의 기본 명령어
/usr/sbin 네트워크 관련 명령어 등
/usr/lib 일반 사용자의 응용 프로그램 라이브러리
/usr/include 표준 라이브러리 헤더 파일
/usr/share 테마, 메뉴얼 등 시스템 공유 파일
/home 사용자 계정별 홈 디렉토리 *실사용 폴더

3.2.3. 서비스/데몬(daemon)

3.2.3.1. 리눅스 서비스/데몬은 백그라운드 서비스를 말한다.(부팅시자동실행+백그라운드실행의 결합을 의미하는 경우도 흔하다) 부팅하면 매번 같은 설정을 실행해야 하는 귀찮음을 자동화한 것이다. (service:윈도우의 사용자 친화적 입장 / daemon:리눅스의 기술자 친화적 입장) 

3.2.3.2. systemctl list-unit-fiels --type=service (시스템 내 서비스를 나열 확인)

systemctl은 systemd를 기반으로 하는 초기 시스템(init) 및 서비스 관리자이다. wsl에서는 기본적으로 안 된다.(2에서 실험적 제공)

UNIT FILEE STATE VENDOR PRESET
해당 유닛 파일 이름 해당 파일의 설정값 해당 파일의 디폴트 설정값
enabled 부팅시 자동실행 좌동
disabled 부팅시 자동실행X
(수동 실행)
좌동
static 필요시 자동실행 좌동
masked 실행 금지 상태 좌동

3.2.3.3. 초기화 시스템이 systemd인 경우 서비스 관리 명령은 하기와 같다.

명령어 내용
sudo systemctl status ufw.service 서비스 상태 확인
sudo syetemctl start ufw.service 서비스 시작
sudo systemctl stop ufw.service 서비스 정지
sudo systemctl restart ufw.service 서비스 재시작
sudo systemctl enable ufw.service 부팅시 서비스 활성화
sudo systemctl disable ufw.service 부팅시 서비스 비활성화

3.2.3.4. 다른 초기화시스템에 따라서는 하기와 같다.

초기화 시스템 서비스 관리 명령 예시
SysVinit sudo service ufw.service status
Upstart sudo initctl status ufw.service
OpenRC sudo rc-service ufw.service status
runit sudo sv status ufw.service
launchd (macOS) sudo launchctl list ufw.service

3.2.4. 스케줄러

3.2.4.1.1. cron(chronos, 시간)이란 주기적인 스케줄링 시스템을 의미한다. 명령어는 아니고 추상적인 개념이다.

3.2.4.1.2.  wsl에서는 기본적으로 cron이 비활성상태이기 때문에 활성화시켜줘야 한다.

3.2.4.1.3. cron 관리 명령어는 crontab이며, 구체적인 옵션과 예제는 하기와 같다.

명령어 기능
sudo crontab -u exampleuser 다른 사용자(exampleuser)의 cron 환경을 아래의 옵션과 결합해 작업. *sudo 필요
crontab -l 모든 cron 작업 확인
crontab -e cron 작업 추가 (editor 실행)
crontab -r 모든 cron 작업 제거
crontabl -i cron 작업 제거시 알람
  1. vim test.sh
  2. 스크립트 입력 후 저장한다
  3. test.sh를 실행하는 데몬을 설정하기 위해 실행 권한을 부여한다
  4. crontab -e로 에디터[1~4]를 지정해서 시간과 커맨드를 입력하고 저장한다

    매분 매시 매일 매월 매요일 test.sh 실행 및 그 출력을 testresult에 입력하는 cron
    -l 옵션은 crontab -e 의 에디터 내용을 그대로 출력한다. corn 전용 cat함수라 볼 수 있다.
    1분이 지나자 스크립트를 실행하는 모습. test.sh의 실행 출력을 testresult의 입력으로 받은 것을 확인할 수 있다.
    뒷정리
  5. 구체적인 커맨드 형식은 하기와 같다.
요일 주기
1분마다 스크립트 실행
*/10 * * * * 10분마다 스크립트 실행
0 * * * * 매 시간 0분마다 스크립트 실행
5 */1  * * * 매 시간 1분마다 스크립트 실행
25 15 5 * * 매월 5일 15시 25분에 스크립트 실행
0 /6 * * 0,6 매월 일, 토요일 6시, 12, 18, 24시 정각에 스크립트 실행
0 0 15 * 0 매월 15일이 일요일인 경우 0시 0분에 스크립트 실행

 

3.2.4.2.1. At은 특정 작업을 단발성으로 실행하는 것으로, 주기적으로 동작하는 cron과 다르다.

3.2.4.2.2. 구체적인 커맨드 형식과 예시는 하기와 같다.

커맨드 및 예시 내용
echo "hello" | at now + 5minutes 시간 상대지정
echo "hello" | at now + 1 hours
echo "hello" | at now + 1 day
echo "hello" | at now + 2 weeks
echo "hello" | at 3:00 PM 시간 절대지정
echo "hello" | at 15:00 12/25
echo "hello" | at 06:00 2024-12-31
atq 예약된 작업 및 일련번호 나열
atrm 일련번호 해당 일련번호 예약 작업 삭제

3.2.4.3.1. systemd timers

3.2.4.4.1. 반복루프 스크립팅으로 할 수도 있다. 다만 불필요한 작업을 메모리에 계속 얹어놓는 것이라 비효율적이다. 리눅스에서 이미 내장된 시계가 있음에도 별도로 시스템 자원에다가 초(sec) 세라고 계속 시키는 꼴이기 때문이다.(sleep)

  1. vim rooptest.sh
  2. 스크립트 입력 및 저장
  3. 실행권한부여 및 실행

2루프 후 ctr+c로 강제 종료한 모습

 


 

3.2.4.4.2 반복루프 스크립팅2 (특정시간에 반복)

  1. vim rooptest2.sh
  2. 스크립트 입력 및 저장 
    현재시간을 출력하고 목표 시간 분을 입력으로 받아 해당 시/분/00초에 도달할 떄마다 hello를 출력하는 함수이다. 리눅스 에디터는 $(()), $(), $를 각각 수학연산구문, 명령어구문, 변수호출구문으로 사용하기에 익숙치 않으면 불편하다.
  3. 실행권한 부여 및 실행

지정 시간에 스크립트가 실행된 모습. 셸 프롬프트가 드러나지 않고 터미널 커서가 아래에서 깜빡이는 것으로 보아 스크립트가 계속 실행중임을 알 수 있다. 권한부여 명령은 위와 같다.

 


 

3.2.4.4.3 단발 스크립팅

  1. vim attest.sh
  2. 스크립트 입력 및 저장
  3. 실행권한 부여 및 실행
    셸 프롬프트가 드러나는 것으로 보아 지정시간에 실행 후 스크립트가 종료된 것을 알 수 있다.

 

3.2.5. 디스크 관리

 

3.2.5.1. 파티션 및 파일시스템 설정 등으로 저장장치 자원을 효율적으로 사용하도록 설정할 수 있다.

3.2.5.2. 디스크 관리 명령어는 하기와 같다.

명령어 기능
fdisk 디스크 파티션의 생성, 수정, 삭제
df 전체 디스크 사용량 확인
mkfs 파일시스템 생성
mount 파티션이나 저장장치를 특정 디렉토리에 꽂는(연결하는) 것.
*사용자 폴더처럼 저장장치/파티션 폴더를 지정하는 명령어라 할 수 있다.

3.2.5.3. 리눅스는 etx(extended file system)파일 시스템을 사용하며, 구체적인 내용은 하기와 같다.

파일시스템 since 특징 파일최대크기 디스크최대용량
ext1 초기 Linux 2GB 2GB
ext2 1993 간단하고 빠른 속도, 그러나 데이터 손실 우려 2TB 32TB
ext3 2001 저널링 기능 도입(데이터 손실 우려 감소) 2TB 32TB
ext4 2008 전체적인 양적 성능 향상 16TB 1EB