14/120

김건호·2022년 2월 24일
0

작업예약(작업 스케쥴링)

제어할 수 있는 터미널을 지정받지 못 했기 때문에, 출력하는 명령어의 결과를 화면에 띄울 수가 없음 => 출력하는 명령어의 결과를 메일로 보내오거나 리다이렉션을 이용해서 파일로 저장을 해야 함

메일은 mail명령어로 확인 가능

[root@localhost ~]# mail
// 빠져나올 시 CTRL + D

단일성 작업

특정시기에 한 번 작업을 수행
자주 사용되지는 않지만, 부재중일 때 어떤 명령을 처리해야할 때 사용
ex) 부재중일 때 시스템을 재부팅해야 할 때

at

atd 서비스 사용

# at timespec
at> 작업명령
at> CTRL + D
<EOF>
[root@localhost ~]# date
2022. 02. 24. (목) 11:07:05 KST
[root@localhost ~]# at 11:10
at> date
at> <EOT>
job 1 at Thu Feb 24 11:10:00 2022

옵션

  • -l or atq : 예약 확인
[root@localhost ~]# at -l
1       Thu Feb 24 11:10:00 2022 a root
[root@localhost ~]# atq
1       Thu Feb 24 11:10:00 2022 a root
  • -c 예약번호 : 작업 내용 확인
  • atrm 예약번호 : 작업예약 취소

timespec

# at [시간] [날짜]
예시
  • 지금으로 부터 2시간 뒤 작업
# at now +2hour (분 min, 시 hour)
  • 오후 4시 작업

# at 16:00 
# at 04:00 PM
# at teatime
# at 16:00 2/23/22 (월,일,년)
# at 16:00 23-02-23 (년,월,일)
# # at 04:00 PM today
# at teatime today
  • 새벽 12시 작업
# at 00:00
# at 12:00 AM
# at midnight
  • 내일 정오 작업
# at 12:00 PM 2/24/22
# at noon tomorrow

timespec에 대한 정보는 /usr/share/doc/at-3.1.13/timespec 파일에서 확인 가능

# cat /usr/share/doc/at-3.1.13/timespec
...
%token  NOW
%token  AM PM
%token  NOON MIDNIGHT TEATIME
...

주기적 작업

주기에 맞춰서 해당 작업을 수행
crond 서비스를 이용, 데몬서비스(시스템에 의해)에 의해서 실행

사용자 cron(crontab)

사용자들이 crontab이라고 하는 명령어를 통해서 등록

옵션

  • -e : 작업예약
[root@localhost ~]# crontab -e
[vi 편집기창]
"/tmp/crontab.f4PqeM" 0L, 0C

crontab안에는 기본설정이 쓰여있지만, crontab -e를 하면 비어있음 => -e옵션에 기본설정이 포함되어 있음

[root@localhost ~]# vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

crontab에 직접 예약을 한다면
/etc/cron.d/파일명 으로 저장해야 함

[root@localhost ~]# ls /etc/cron.d
0hourly  pcp-pmie  pcp-pmlogger  raid-check  sysstat

임시파일로 저장해둠

  • -l : 작업예약 목록 확인
  • -r : 작업예약 취소(모든 작업 취소)
  • crontab 파일명 : 다른 파일에 만들어놓은 작업을 불러오기
  • -u : 특정 사용자에 대해 예약
# 아래와 같은 방법도 가능
* * * * * ecntos date > datefile
/etc/cron.d/centosrcron

cron의 timespec 설정법

요일command
0~590-231-311-12(약식월)0-7,(약식요일)(sun,mon,tue...)}
특수문자
  • * : 모두 참
  • - : 범위
  • / : 주기
  • , : 연속되지 않은 다수
예시
  • 1월1일 새벽12시 reboot
0 0 1 1 * reboot
  • 12월 15일 오후 3시부터 오후 6시까지 15분마다 date
*/15 15-18 15 12(or dec) * date
  • 매월 첫번째 월요일 오후 1시 정각에 date
0 13 1-7 * 1(mon) date
  • 매분마다 date명령어를 datefile에 기입(이어쓰기로)
* * * * * date >> datefile

cron은 root사용자만 확인할 수 있지만, crontab은 setuid 가 설정되어 있어서 root사용자가 아닌 다른 사용자도 예약을 할 수 있음

[root@localhost ~]# ls -l /bin/crontab
-rwsr-xr-x. 1 root root 57576  4월 11  2018 /bin/crontab

시스템 cron

cron과 anacron 2가지 종류 존재

  • cron : 시스템이 켜져 있는 동안에만 해당 시간의 작업을 수행 => 해당 시간에 시스템이 다운되어 있으면 수행하지 않음
  • anacron : 시스템이 켜지면 일정시간 대기 후에 해당 작업을 실행(시스템 다운 후, 다음 주기에 반드시 해야되는 작업이 있음) => 보통 시스템에서 설정

anacron 내용

[root@localhost ~]# vi /etc/anacrontab
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly
  • period에는 @~ly 형식으로도 주기 표기가 가능
  • in days 는 n분 딜레이 후에 수행하겠다는 뜻
  • run-parts의 역할은 /etc/cron.~ly에는 스크립트 파일이 있는데 해당 스크립트 파일을 순차적으로 실행한다는 명시

예제

매주 수~금 오후 5시에 /var/log/secure의 내용 중 오전 8시 정각부터 오후 5시59분까지의 내용을 securefile에 갱신하도록 설정

0 17 * * 3-5 egrep ‘^... .. (0[89|1[0-7]])’ /var/log/secure > securefile’

파일에 쓰고 불러오기

vi 파일명
... timespec 작업내용 작성
:wq
crontab 파일명

n번 작업만 삭제

crontab -e
vi 편집기에서 n번 작업 내용 삭제
:wq

crontab -r이 취소라며❓ -r 옵션은 모든 예약 내역을 삭제. 하나의 예약만 삭제가 불가능하기 때문에

리눅스 파일 시스템

시스템 디스크 사용 절차

절차디스크 삽입 ->파티션 생성->파일시스템 포맷->마운트
비유땅을 산다건물을 짓는다인테리어를 한다문을 만들어서 연결한다

디스크의 논리 구조 : sector -> track -> cyliner -> disk

lsblk

현재 시스템의 블록장치에 관련한 상태 확인

[root@localhost ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   60G  0 disk
├─sda1   8:1    0    4G  0 part [SWAP]
└─sda2   8:2    0   56G  0 part /
sdb      8:16   0   20G  0 disk
├─sdb1   8:17   0    2G  0 part
├─sdb2   8:18   0    2G  0 part
├─sdb3   8:19   0    2G  0 part
└─sdb4   8:20   0    1K  0 part
sr0     11:0    1 1024M  0 rom

df -Th

파일시스템 상태 확인
장치관련은 /dev로 시작

[root@localhost ~]# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda2      xfs        56G  4.3G   52G   8% /
devtmpfs       devtmpfs  985M     0  985M   0% /dev
tmpfs          tmpfs    1000M     0 1000M   0% /dev/shm
tmpfs          tmpfs    1000M  9.3M  991M   1% /run
tmpfs          tmpfs    1000M     0 1000M   0% /sys/fs/cgroup
tmpfs          tmpfs     200M   12K  200M   1% /run/user/42
tmpfs          tmpfs     200M     0  200M   0% /run/user/0
/dev/sdb1      ext4      2.0G  6.0M  1.8G   1% /mnt/disk1
/dev/sdb2      ext4      2.0G  6.0M  1.8G   1% /mnt/disk2
/dev/sdb3      ext4      2.0G  6.0M  1.8G   1% /mnt/disk3

blkid

파일시스템 관련 파티션 확인

[root@localhost ~]# blkid
/dev/sda1: UUID="88f82736-89b0-49e6-88c5-165c88bcc5bf" TYPE="swap"
/dev/sda2: UUID="231c776b-3197-4e9f-a142-6b80be0ca930" TYPE="xfs"
/dev/sdb1: UUID="636ceaa2-2ff1-44aa-8036-921b7b7c9a11" TYPE="ext4"
/dev/sdb2: UUID="05deec60-c3cb-4621-9eab-6e4c0f0f0447" TYPE="ext4"
/dev/sdb3: UUID="ab8eddaa-3401-414a-95f4-f6a7516f4f8a" TYPE="ext4"
/dev/sdb5: UUID="ae020ac0-2ecc-4497-82d8-5cd97cc216eb" TYPE="xfs"
/dev/sdb6: UUID="a5e62c11-63e3-43ff-8b7c-6a35bdfefebf" TYPE="xfs"
/dev/sdb7: UUID="33b3b32d-6ae2-4df0-8a0b-70e7e9b617fe" TYPE="xfs"
/dev/sdb8: UUID="bb718729-6184-41ec-a3c2-338f00e4ed8d" TYPE="xfs"

UUID는 자동으로 파티션, 스왑 마운트 할 때 사용되는 값

파티션

드라이브를 논리적으로 여러 부분으로 분할하는 것
=> 백업을 목적으로 시스템과 데이터를 분리할 수 있는 장점

파티션 방식

MBRGPT
개발시기1980년대 초1990년대 말
파티션 수주 파티션 4개 or 주1 확장1주 파티션 128개
인식용량최대 2TB, 초과 시 인식 불가8ZB(80억 TB)
명령어fdiskgdisk공통은 parted

한 디스크에는 하나의 파티션 종류만 사용이 가능

fdisk

MBR 파티션 생성

# fdisk [디스크명]
Command (m for help):
   d   delete a partition 
   m   print this menu
   n   add a new partition  
   p   print the partition table
   q   quit without saving changes   
   t   change a partition's system id
   # t옵션 사용시
   Hex code (type L to list all codes): L
   L을 입력 시 id목록을 확인할 수 있음
   w   write table to disk and exit

대상:/dev/sdb
주 파티션 2G 2G 2G

# 첫 번째 주 파티션 생성
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +2G
Partition 1 of type Linux and of size 2 GiB is set

# 두번 째 주 파티션 생성
Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p):
Using default response p
Partition number (2-4, default 2):
First sector (4196352-41943039, default 4196352):
Using default value 4196352
Last sector, +sectors or +size{K,M,G} (4196352-41943039, default 41943039): +2G
Partition 2 of type Linux and of size 2 GiB is set


# 세번 째 주 파티션 생성
Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p):
Using default response p
Partition number (3,4, default 3):
First sector (8390656-41943039, default 8390656):
Using default value 8390656
Last sector, +sectors or +size{K,M,G} (8390656-41943039, default 41943039): +2G
Partition 3 of type Linux and of size 2 GiB is set

# 확장 파티션 생성
Command (m for help): n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e):
Using default response e
Selected partition 4
First sector (12584960-41943039, default 12584960):
Using default value 12584960
Last sector, +sectors or +size{K,M,G} (12584960-41943039, default 41943039):
Using default value 41943039
Partition 4 of type Extended and of size 14 GiB is set

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x76abe2a7

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
/dev/sdb2         4196352     8390655     2097152   83  Linux
/dev/sdb3         8390656    12584959     2097152   83  Linux
/dev/sdb4        12584960    41943039    14679040    5  Extended

sdb4 확장 파티션엔 2G를 할당했는데 왜 1K만 나올까❓ logical 파티션을 생성하기 위해 공간만 확보한 것이지 실제로 logical 파티션을 만들기전 까지는 용량이 없음 => 확장 파티션을 삭제하면 logical 파티션까지 함께 삭제됨

[root@localhost ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   60G  0 disk
├─sda1   8:1    0    4G  0 part [SWAP]
└─sda2   8:2    0   56G  0 part /
sdb      8:16   0   20G  0 disk
├─sdb1   8:17   0    2G  0 part
├─sdb2   8:18   0    2G  0 part
├─sdb3   8:19   0    2G  0 part
└─sdb4   8:20   0    1K  0 part
sr0     11:0    1 1024M  0 rom

4번째 파티션을 진행할 때 default가 확장 파티션인데 주 파티션으로 만드는 경우 직면할 수 있는 경고 메시지

  • 남은 용량이 5G라 5G를 직접 할당했는데 용량이 모자라다고 오류가 나는 이유는❓ 이미 mbr partition table(주(primary) 파티션 엔트리를 포함하고 있는 테이블)이 할당되어 있기때문에
    그래도 default로 할당하면 대략 5G로 할당 됨

확장 파티션 2G 2G 2G 2G


Command (m for help): n
All primary partitions are in use
Adding logical partition 5
First sector (12587008-41943039, default 12587008):
Using default value 12587008
Last sector, +sectors or +size{K,M,G} (12587008-41943039, default 41943039): +2G
Partition 5 of type Linux and of size 2 GiB is set

Command (m for help): n
All primary partitions are in use
Adding logical partition 6
First sector (16783360-41943039, default 16783360):
Using default value 16783360
Last sector, +sectors or +size{K,M,G} (16783360-41943039, default 41943039): +2G
Partition 6 of type Linux and of size 2 GiB is set

Command (m for help): n
All primary partitions are in use
Adding logical partition 7
First sector (20979712-41943039, default 20979712):
Using default value 20979712
Last sector, +sectors or +size{K,M,G} (20979712-41943039, default 41943039): +2G
Partition 7 of type Linux and of size 2 GiB is set

Command (m for help):
Command (m for help): n
All primary partitions are in use
Adding logical partition 8
First sector (25176064-41943039, default 25176064):
Using default value 25176064
Last sector, +sectors or +size{K,M,G} (25176064-41943039, default 41943039): +2G
Partition 8 of type Linux and of size 2 GiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# partprobe /dev/sdb

gdisk

GPT 파티션 생성

# gdisk [디스크명]

GPT 파티션 생성

partprobe

디스크 정보를 시스템에 등록

# partprobe [디스크명]

파티션 정보 변경사항에 대해 현재 시스템에게 알려야하기 때문에, 파티션 정보 변경 이후 반드시 사용해줘야 함

파일시스템 포맷

format - file system을 사용할 수 있게 구조를 만들어주는 과정

포맷을 하면 내용이 왜 지워질까❓ 기존 구조에 새로운 구조 자체를 덮어버리기때문에

mkfs

파일시스템을 포맷하는 명령어

# mkfs -t [파일시스템] [옵션] [파티션명]

파티션 1~3 ext4로 포맷

# 파티션 1 ext4로 포맷하는 과정만 명시
[root@localhost ~]# mkfs -t ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

# mkfs.[파일시스템] [옵션] [파티션명]

파티션 5~8 xfs로 포맷

# 파티션 5 xfs로 포맷하는 과정만 명시
[root@localhost ~]# mkfs.xfs /dev/sdb5
meta-data=/dev/sdb5              isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

파일시스템 종류는 mkfs -t 입력-> TAB 2번 or mkfs. 입력-> TAB 2번으로 확인할 수 있음

옵션

  • -f : 포맷하려는 시스템에 다른 시스템이 있다면 강제로 덮어쓰기

마운트

디스크와 같은 물리적인 장치를 특정 위치(디렉토리)와 연결시켜주는 과정

mount

마운트 실행 및 수동 마운트

# mount [장치명] [마운트포인트(path)]

/mnt/disk1~3 에 파티션 1~3 을 각각 수동 마운트

# 파티션 1 마운트만 명시
[root@localhost ~]# mount /dev/sdb1 /mnt/disk1
# 마운트된 결과 확인
[root@localhost ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   60G  0 disk
├─sda1   8:1    0    4G  0 part [SWAP]
└─sda2   8:2    0   56G  0 part /
sdb      8:16   0   20G  0 disk
├─sdb1   8:17   0    2G  0 part /mnt/disk1
├─sdb2   8:18   0    2G  0 part /mnt/disk2
├─sdb3   8:19   0    2G  0 part /mnt/disk3
├─sdb4   8:20   0    1K  0 part
├─sdb5   8:21   0    2G  0 part
├─sdb6   8:22   0    2G  0 part
├─sdb7   8:23   0    2G  0 part
└─sdb8   8:24   0    2G  0 part
sr0     11:0    1 1024M  0 rom

# 통로역할을 하게 되어 기존 파일은 보이지 않음
[root@localhost ~]# ls /mnt/disk1
lost+found

옵션

  • -a : /etc/fstab에 등록된 마운트 실행

umount

마운트 해제

# umount [장치명] [마운트포인트(path)]

옵션

  • -a : 사용중인 마운트 제외한 모든 마운트 해제

자동 마운트

수동 마운트는 메모리에 남기 때문에 전원이 꺼지면 마운트가 사라지게 됨. 영구적으로 마운트하기 위해선 /etc/fstab 파일을 수정해야함

# /etc/fstab에 추가한 내용
# 장치명         마운트위치     파일시스템명    옵션     덤프여부   파일시스템체크순서
"abc08951-c39c-4ada-84ad-a0446db6f986" /mnt/disk1 xfs defaults 1 1
/dev/sdb2      /mnt/disk2     xfs             defaults  1          1
/dev/sdb3      /mnt/disk3     xfs             defaults  1          1

재부팅해야 마운트가 되지만, mount -a 명령어를 통해 재부팅 없이 가능

자동 마운트 해제

/etc/fstab 에 추가한 내용을 모두 삭제

swap

RAM이 가득 찼을 경우 때 시스템에서 메모리 자원이 더 필요한 경우, 메모리의 비활성화된 항목들(할당된지 가장 오래되고 사용빈도수가 낮은 프로세스)이 swap으로 이동 => 빠른 속도인 RAM에서 더 많은 공간을 사용할 수 있게 해줌

free

스왑공간 확인

[root@localhost ~]# free
              total        used        free      shared  buff/cache   available
Mem:        2047700      369756     1332280        9552      345664     1489340
Swap:       4194300           0     4194300

mkswap

스왑파일시스템 생성

# mkswap [옵션] [파티션명]
[root@localhost ~]# mkswap /dev/sdb1
Setting up swapspace version 1, size = 3145724 KiB
no label, UUID=1d14ec1f-5ab5-497c-90e0-c8d5c67d8c3e

swapon

수동 스왑 마운트

# swapon [파티션명]

옵션

  • -a : /etc/fstab에 설정 된 스왑 마운트 실행
  • -s : 스왑상태일때 사용중인 파티션 확인
[root@localhost ~]# swapon -s
Filename      Type            Size    Used    Priority
/dev/sda1     partition       4194300 0       -1

sda1이 스왑으로 사용중

swapoff

수동 스왑 마운트 해제

# swapoff [파티션명]

옵션

  • -a : 모든 스왑 마운트 해제

자동마운트

/etc/fstab 파일을 수정

# /etc/fstab에 추가한 내용
# 장치명         마운트위치     파일시스템명    옵션     덤프여부   파일시스템체크순서
UUID="0c07e4f0-3e6a-43d6-bf4f-0fe722eb09ad" swap swap defaults 0 0
/dev/sdb3 swap swap defaults 0 0
profile
Ken, 🔽🔽 거노밥 유튜브(house icon) 🔽🔽

0개의 댓글