2023.10.31 TIL
사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다려야 하는 foreground 방식으로 처리되는 process
$ sleep 100
→ Foreground로 실행. sleep 명령이 끝날 때까지 기다려야 한다.
명령을 실행하면 명령의 처리가 끝나는 것과 관계없이 곧바로 prompt가 출력되어 사용자가 다른 작업을 계속할 수 있음
$ sleep 100 &
→ Background로 실행. Prompt가 바로 나와 다른 명령 실행 가능
Background로 처리할 때는 주로 출력과 오류 방향 전환을 하여 실행 결과와 오류 메세지를 파일로 저장
$ find / -name passwd > pw.dat 2>&1 &
→ pw.dat에 결과와 오류 저장
jobs [%작업 번호]
→ Background로 실행되고 있는 작업 출력
+
→ 가장 최근에 접근한 작업
-
→ + 작업보다 바로 전에 접근한 작업
bg [%작업 번호]
→ Background 작업으로 전환
fg [%작업 번호]
→ Foreground 작업으로 전환
control+Z
, stop [%작업 번호]
→ 작업을 잠시 중단. 종료가 아니다
control+C
→ Foreground 작업 종료
kill [%작업 번호]
→ Background 작업 강제 종료
nohup find / -name passwd &
→ find 명령을 계속 실행, 자동으로 nohup.out 생성
more nohup.out
→ 다시 로그인하여 파일 내용 확인
nohup find / -name passwd > pw.dat 2>&1 &
→ nohup.out 파일을 생성하지 않고 지정한 파일 pw.dat에 결과와 오류메세지 출력
특정한 시간에 작업을 수행하도록 예약할 수 있는 두가지 방법
at
at 10:15 pm June 18
→ Enter → 명령 입력
at 4pm + 3days
→ 지금부터 3일 후 오후 4시에 작업 수행
at 1am tomorrow
→ 내일 오전 1시에 작업 수행
-l
, $ atq
→ 현재 실행 대기중인 명령의 전체 목록 출력
-r [작업 번호]
→ 현재 실행 대기중인 명령 중 해당 작업번호를 삭제
-d [작업 번호]
, $ atrm [작업 번호]
→ 설정한 작업이 실행되기 전에 삭제
-m
→ 출력 결과가 없더라도 작업이 완료되면 사용자에게 메일로 알림
-f [파일]
→ 표준 입력 대신 실행할 명령을 파일로 지정
명령 입력 마지려면 control+D
at 작업파일 확인
sudo ls -l /var/spool/cron/atjobs
daemon 그룹의 사용자만 해당 디렉토리 확인 가능
at 명령 사용 제한하기
sudo apt-get install at
, sudo apt-get install mailutils
crontab
crontab -u user1 -e
→ user1의 crontab 파일 편집
-u
→ 특정 사용자에 대해 적용. 생략시 현재 사용자
-e
→ 사용자의 crontab 파일 생성, 편집. vi 편집기 열림
-l
→ crontab 파일 내용 확인
-r
→ crontab 파일 삭제
crontab 파일 확인
sudo ls -l /var/spool/cron/crontabs
파일과 디렉토리의 집합을 구조적으로 관리하는 체계이다.
Journaling 기능 도입하여 Disk 복구기능을 강화하였다.
최대 32TB까지 지원한다.
현재 주로 default로 쓰이는 파일 시스템이다.
1EB 이상의 볼륨, 16TB 이상의 파일을 지원한다.
최대 16EB까지 지원한다.
swap → swap 영역을 관리하기 위한 것
tmpfs → 메모리에 임시 파일을 저장하기 위한 것, 시스템이 재시작할때마다 내용 삭제됨
proc → /proc 디렉토리, 커널의 현재 상태를 나타내는 파일을 가짐
ramfs → 램디스크를 지원
cat /proc/filesystems
→ 현재 커널이 지원하는 file system의 종류 출력
전체 file system을 관리하기 위한 block으로,
File system과 관련된 다양한 정보를 저장한다.
→ 전체 inode 개수, 전체 block의 개수, free block의 개수, free inode의 개수, block의 크기, mount 시간 등등
Super block에 문제가 생길 경우 복사본을 사용하여 복구 가능하다.
파일 시스템을 디렉토리 계층 구조의 특정 디렉토리와 연결하는것
디렉토리 계층 구조에서 파일 시스템이 연결되는 디렉토리
리눅스에서 시스템이 부팅될 때 자동으로 파일 시스템이 마운트되게 하려면 /etc/fstab 파일에 설정
/etc/fstab 파일의 구조
장치명, 마운트포인트, 파일 시스템 종류, 옵션, 덤프 관련 설정, 파일 점검 옵션
Universally Unique IDentifier, 로컬 시스템과 다른 시스템에서 파일 시스템을 유일하게 구분해주는 128bit 숫자
UUID로 저장된 장치는 /dev/disk/by-uuid 디렉토리에 들어간다.
mount /dev/sdb1 /mnt
→ /dev/sdb1 이라는 device를 /mnt에 mount
mount -t ext3 /dev/sdb1 /
→ /dev/sdb1을 root에 ext3 파일시스템으로 mount
mount -t iso9660 /dev/cdrom /mnt/cdrom
→ cdrom 장치를 /mnt/cdrom에 mount
-t [파일시스템 종류]
→ 파일 시스템 종류 지정
-o [마운트옵션]
→ mount 옵션을 지정
-f
→ mount 할수 있는지 점검만 한다
-r
→ read-only로 mount
mount 명령으로 출력되는 정보는 /etc/mtab 파일의 내용과 동일하다.
umount /dev/sdb1
→ /dev/sdb1 device를 unmount
-t [파일시스템 종류]
→ 파일 시스템 종류 지정
VMWare Player → Player → ‘Removable Devices-Silicon Motion USB Mass Storage Device-Connect(Disconnect from host)’ 를 선택
USB 장치를 host OS에서 분리하여 가상 머신에 연결한다는 메세지 출력
sudo fdisk -l
→ 장치명 확인 (Device 항목)
mount
실행 → 마지막에 장치가 추가되었는지 확인
unmount [장치명]
→ 마운트 해제해보기
sudo fdisk /dev/sdb
→ Command (m for help): n
→ 새로운 파티션 생성 → Enter
* 3 (default로)
→ Command (m for help): p
→ 파티션 설정 정보 출력
→ Command (m for help): d
→ 파티션 제거
sudo mke2fs -t ext4 /dev/sdb1
→ 생성한 파티션을 포맷하여 파일 시스템 생성
sudo mount /dev/sdb1 /mnt
→ USB 마운트
mount
로 확인
cd /mnt
→ USB로 이동
sudo umount /mnt
→ USB 제거 → ‘busy’ 라고 뜨면 해당 디렉토리를 누가 사용중
→ cd
→ sudo umount /mnt
→ 정상적인 마운트 해제 가능 → USB 제거 가능
df -Th
→ 파일시스템 장치명, 전체 용량, 사용량, 남은 용량, %, 마운트포인트
-a
→ 모든 파일 시스템을 대상으로 디스크 사용량 확인
-k
→ 디스크 사용량을 KB 단위로 출력
-m
→ 디스크 사용량을 MB 단위로 출력
-h
→ 알기 쉬운 단위(GB, MB, KB 등)로 출력
-t [파일시스템]
→ 파일시스템 종류에 해당하는 디스크 사용량 출력
-T
→ 파일시스템 종류도 출력
du [directory]
→ 디렉토리별 디스크 사용량 출력
du -s
→ 현재 디렉토리의 디스크 사용량 출력
du -s ~user1
→ /home/user1 밑의 디렉토리 탐색해서 디스크 사용량 출력
-s
→ 특정 디렉토리의 전체 사용량 출력
-h
→ 알기 쉬운 단위(GB, MB, KB 등)로 출력
inode, block, 디렉토리, 파일 링크 등을 검사, 필요시 복구 작업도 수행
❗️반드시 unmount된 장치에 대해서만 fsck
사용 ❗️
sudo fsck /dev/sdb1
→ /dev/sdb1 검사
sudo fsck.ext4 /dev/sdd3
→ 파일 시스템 종류를 지정해 검사
-f
→ 강제로 점검
-b [Super Block]
→ Super block으로 지정한 백업 super block 사용
-y
→ 모든 질문에 yes로 대답하게 한다
-a
→ 파일 시스템 검사에서 문제 발견시 자동으로 복구
sudo e2fsck /dev/sdd1
→ 리눅스의 확장 파일 시스템(ext2, ext3, ext4) 점검
-f
→ 강제로 점검
-b [Super Block]
→ Super block으로 지정한 백업 super block 사용
-y
→ 모든 질문에 yes로 대답하게 한다
-j ext3/ext4
→ ext3나 ext4 를 검사할 때 지정
sudo badblocks -v /dev/sdd1
→ 장치의 Bad block을 검색
sudo badblocks -v -o bad.out /dev/sdb1
→ 장치의 Bad block 검색 결과를 bad.out에 저장
-v
→ 자세히 출력
-o [출력 파일]
→ 지정한 출력 파일에 검색한 Bad block 목록 저장
sudo dumpe2fs
→ 백업 Super block의 위치 확인
sudo dumpe2fs /dev/sdb1
→ 백업 Super block의 정보 출력
sudo dumpe2fs /dev/sdd1 | grep superblock
→ Super block에 관한 정보만 추출 (위치 확인)
sudo e2fsck -b 8193 -y /dev/sdd1
→ 8193 위치에 있는 백업 Super block 이용해 파일시스템 복구
/boot
아래에 ‘vmlinuz-버전명
' 의 형태로 제공ls /boot/vm*
)[]
로 표시, 주로 PID 번호가 낮게 배정됨dmesg | more
, more /var/log/boot.log
→ 부팅시 출력된 메세지 확인 가능
init process가 처음 생성된 process로서 PID가 1번
그래픽 로그인 시스템 GDM(GNOME display manager) 동작, 로그인 프롬프트 출력
스크립트를 순차적으로 실행하여 다른 process를 동작한다.
현재는 systemd로 대체되었다.
init과 관련된 스크립트 파일 : /etc/init.d 디렉토리에 아직 일부 서비스의 스크립트 파일이 남아있다.
man systemd.[유닛이름]
으로 자세한 내용 확인systemctl
→ 현재 동작중인 unit 목록 출력
sudo systemctl start cron
→ cron unit을 시작한 후 systemctl is-active cron
→ active
systemctl status cron
→ cron.service의 상태 출력
systemctl start atd.service
→ atd.service 시작
sudo systemctl stop cron
→ cron.unit을 정지한 후 systemctl status cron
→ inactive (dead)
-a
→ 상태와 관계없이 unit 전체를 출력
-t [unit종류]
→ 지정한 종류의 unit만 출력
start
→ unit을 시작
stop
→ unit을 정지
reload
→ unit의 설정파일을 다시 읽어옴
restart
→ unit restart
status
→ unit 상태 출력
q
→ 출력 목록에서 다시 prompt로 나오기
enable
→ 부팅 시 unit이 시작하도록 설정
disable
→ 부팅 시 unit이 시작하지 않도록 설정
is-active
→ unit이 동작하고 있는지 확인
is-enabled
→ unit이 시작되었는지 확인
isolate
→ 지정한 unit 및 이와 관련된 unit만 start, 나머지는 stop
kill
→ unit에 signal 전송
runlevel
로 현재 Run Level을 확인할 수 있다.
Run Level | target 파일 (Symbolic Link) | target 원본 파일 |
---|---|---|
0 | runlevel0.target | poweroff.target |
1, S | runlevel1.target | rescue.target |
2 | runlevel2.target | multi-user.target |
3 | runlevel3.target | multi-user.target |
4 | runlevel4.target | multi-user.target |
5 | runlevel5.target | graphical.target |
6 | runlevel6.target | reboot.target |
systemctl set-default [target name].target
→ /etc/systemd/system 아래의 symbolic link인 default.target이 가리키는 target 파일 변경
sudo systemctl set-default multi-user.target
→ 현재 target인 graphical.target(Run Level 5) 에서 multi-user.target(Run Level 3)로 변경
systemctl isolate multi-user
→ multi-user.target(Run Level 3)로 변경
systemctl isolate runlevel3
→ multi-user.target(Run Level 3)로 변경
systemctl isolate graphical
→ graphical.target(Run Level 5)로 변경
systemctl isolate runlevel5
→ graphical.target(Run Level 5)로 변경
set-default
를 사용하는게 더 일반적이긴 함
telinit
, init
으로도 변경 가능하긴 함
systemctl isolate rescue
→ rescue.target(Run Level 1)로 변경
systemctl isolate runlevel1
→ rescue.target(Run Level 1)로 변경
init 1
→ rescue.target(Run Level 1)로 변경
telinit S
→ rescue.target(Run Level 1)로 변경
sudo shutdown -r +3 "System is going down"
→ 3분 뒤 reboot, 해당 메세지 출력
sudo shutdown -h now
→ 현재 시간, 시스템 즉시 종료
sudo shutdown -c
→ shutdown 명령 취소
sudo shutdown -k 2
→ 사용자들에게 2분 후 shutdown 된다는 메세지 전달만 함
-k
→ 실제로 시스템을 종료하지 않고 사용자들에게 메세지만 전달
-r
→ 종료 후 재시작
-h
→ 종료, halt나 power-off 상태로 이동
-c
→ 이전에 했던 shutdown 명령 취소
[time]
→ 종료할 시간 (hh:mm, +mm, now)
[message]
→ 모든 사용자에게 보낼 메세지
sudo init 0
→ 시스템 종료
sudo init 6
→ 시스템 재시작
systemctl isolate poweroff.target
→ 시스템 종료
systemctl isolate renlevel0.target
→ 시스템 종료
systemctl isolate reboot.target
→ 시스템 재시작
systemctl isolate runlevel6.target
→ 시스템 재시작
reboot
, halt
, poweroff
→ /var/log/wtmp 파일에 시스템 종료 기록을 남기고 종료, 재시작
-n
→ 종료, 재시작 전에 sync(메모리의 내용을 disk에 모두 쓰는것) 호출 안함
-w
→ 실제로 재시작, 종료 안함, wtmp 파일에 기록은 남김
-d
→ wtmp 파일에 기록을 남기지 않음
-f
→ 강제로 명령 실행, shutdown 호출 안함
-p
→ 시스템의 전원을 끔
Linux의 background에서 동작하면서 각종 서비스를 제공한다.
Unix에서 super daemon의 이름 : inetd
💁 Ubuntu에서는 보안 기능이 포함된 xinetd
사용
◽️ systemd daemon 확인 : pstree
◽️ Kernel thread daemon 확인 : ps
명령으로 확인했을때 []
로 둘러싸여 있는 process들
원격 보안 접속 서비스 제공(ssh)
GRUB(GRand Unified Bootloader)을 주로 사용한다.
LILO보다 설정과 사용이 편리한다.
부팅시 명령을 사용하여 수정이 가능하고,
멀티 부팅 기능을 지원한다.
💁 Ubuntu 기본 bootloader : GRUB2
/etc/grub.d 디렉토리 : GRUB 스크립트를 가지고 있으며, GRUB 명령이 실행될 때 grub.cfg 파일생성됨
/etc/default/grub 파일 : GRUB 메뉴 설정 내용이 저장됨
e
를 눌러 편집 모드로 전환ro quiet splash $vt_handoff
를 rw init=/bin/bash
로 수정F10
을 눌러 재시작 → root 계정으로 동작reboot -f
명령으로 시스템을 재시작했을 때 GRUB 화면 출력Enter
키를 눌러 Ubuntu 부팅어떤 이유든 Ubuntu가 부팅되지 않는다면 복구 모드로 부팅하는 것이 유용하다.
복구 모드 : root 계정으로 로그인하여 시스템의 복구에 필요한 작업 수행가능
recovery mode
선택root
항목 선택하기$ mount -o remount,rw /
reboot -f