11/120

김건호·2022년 2월 21일
0

링크 파일

특정 파일에 대한 접근을 쉽게하기 위해서 사용하는 파일

inode

파일들의 정보가 담긴 자료구조
파일의 권한, 소유주, 수정시간, 크기, 파일의 위치 데이터를 포함함


윈도우의 바로가기와 같은 기능으로 파일 자체(경로)를 가리키는 파일.

Symbolic Link의 생성

ln -s [원본파일][symbolick link 파일이름]

[root@localhost ~]# touch 0221
[root@localhost ~]# ln -s 0221 slink
[root@localhost ~]# ls -il 0221 slink
68131349 -rw-r--r--. 1 root root 0  2월 21 06:20 0221
68131593 lrwxrwxrwx. 1 root root 4  2월 21 06:20 slink -> 0221

Symbolic Link의 이해

원본 파일 제거 시 접근이 불가능

심볼링 링크를 수정하면 원본파일도 같이 수정됨

[root@localhost ~]# echo "hello"> slink
[root@localhost ~]# cat 0221
hello

링크파일로 원본 파일을 변경할 수 있음
원본을 제거하더라도 접근에 이상이 없음.

Hard Link의 생성

ln [원본파일][Hard link 파일 이름]

[root@localhost ~]# touch 0221
[root@localhost ~]# ln 0221 hlink
[root@localhost ~]# ls -il 0221 hlink
68131349 -rw-r--r--. 2 root root 0  2월 21 06:28 0221
68131349 -rw-r--r--. 2 root root 0  2월 21 06:28 hlink

inode가 똑같은 다른 파일임을 알 수 있다

Symbolic Link와 Hard Link의 차이

  • Symbolic Link : 원본 파일과 다른 inode, 다른 테이블을 통해 간접적으로 접근
  • Hard Link : 원본 파일과 같은 inode를 바라봄

Shell 메타 문자

Shell에서 사용할 때 특수한 기능을 가지고 있는 문자
Shell에서 사용하는 메타문자와 정규 표현식에서 사용하는 메타 문자를 혼동하지 말 것

경로 이름 메타문자

디렉토리의 경로 축약

  • ~ : 현재 사용자 홈 디렉토리
  • ~+ : 현재 디렉토리
  • ~- : 이전 디렉토리
    ~+와 ./의 차이는 절대경로와 상대경로

파일 이름 메타문자

파일 이름 대체

  • * : 모든 것을 의미
[root@localhost dir01]# ls
a  b  c  d  e  f  file01  file02  file03  file04  filea  fileb  filec  filed  g  h  i  j
[root@localhost dir01]# ls -l file*
-rw-r--r--. 1 root root 0  2월 20 20:10 file01
-rw-r--r--. 1 root root 0  2월 20 20:10 file02
-rw-r--r--. 1 root root 0  2월 20 20:10 file03
-rw-r--r--. 1 root root 0  2월 20 20:10 file04
-rw-r--r--. 1 root root 0  2월 20 20:10 filea
-rw-r--r--. 1 root root 0  2월 20 20:10 fileb
-rw-r--r--. 1 root root 0  2월 20 20:10 filec
-rw-r--r--. 1 root root 0  2월 20 20:10 filed
  • ? : 1개의 문자 일치
[root@localhost dir01]# ls -l file?
-rw-r--r--. 1 root root 0  2월 20 20:10 filea
-rw-r--r--. 1 root root 0  2월 20 20:10 fileb
-rw-r--r--. 1 root root 0  2월 20 20:10 filec
-rw-r--r--. 1 root root 0  2월 20 20:10 filed
[root@localhost dir01]# ls -l file??
-rw-r--r--. 1 root root 0  2월 20 20:10 file01
-rw-r--r--. 1 root root 0  2월 20 20:10 file02
-rw-r--r--. 1 root root 0  2월 20 20:10 file03
-rw-r--r--. 1 root root 0  2월 20 20:10 file04
  • [..] : []안의 문자를 한 문자씩 대치
[root@localhost dir01]# ls -l file0[135]
-rw-r--r--. 1 root root 0  2월 20 20:10 file01
-rw-r--r--. 1 root root 0  2월 20 20:10 file03
[root@localhost dir01]#
[root@localhost dir01]# ls -l file[a-c]
-rw-r--r--. 1 root root 0  2월 20 20:10 filea
-rw-r--r--. 1 root root 0  2월 20 20:10 fileb
-rw-r--r--. 1 root root 0  2월 20 20:10 filec
  • [!..] : []안의 문자를 제외한 나머지 문자들을 한 문자씩 대치
[root@localhost dir01]# ls -l file0[!1]
-rw-r--r--. 1 root root 0  2월 20 20:10 file02
-rw-r--r--. 1 root root 0  2월 20 20:10 file03
-rw-r--r--. 1 root root 0  2월 20 20:10 file04
[root@localhost dir01]#
[root@localhost dir01]# ls -l file0[!1-3]
-rw-r--r--. 1 root root 0  2월 20 20:10 file04

Brace 확장

임의의 문자열을 생성할 때 사용
{a,b,c} or {a..z} 식으로 사용

[root@localhost dir01]# touch file{1,2,3,4}
[root@localhost dir01]# ls
 a   c   e   file01   file03   file1   file3  'file[1-5]'   fileb   filed   h   j
 b   d   f   file02   file04   file2   file4   filea        filec   g       i

[root@localhost dir01]# touch file{01..10}
[root@localhost dir01]# ls
file01  file02  file03  file04  file05  file06  file07  file08  file09  file10

인용부호 메타문자

메타문자의 의미를 다르게 하거나 무시

  • ' ' : 문자 그대로를 전달
[root@localhost dir01]# echo 'date command result is $(date)'
date command result is $(date)
  • " " : 내용 안의 특수문자를 인식하여 전달
[root@localhost dir01]# echo "date command result is $(date)"
date command result is 2022. 02. 20. (일) 20:23:54 EST
  • \ : 바로 뒤 특수문자를 일반문자 취급
[root@localhost dir01]# echo "\$(date) command result is $(date)"
$(date) command result is 2022. 02. 20. (일) 20:26:16 EST
  • ` ` : 내용 안의 문자를 명령어로 실행
[root@localhost ~]# echo date command result is `date`
date command result is 2022. 02. 21. (월) 07:04:47 EST

방향재지정 메타문자

표준 입력화 출력 등을 재지정

  • > 파일 : 표춘 출력을 파일로 저장(덮어쓰기)
  • >> 파일 : 기존 파일의 내용에 이어 쓰기
  • 2>파일 : 표준에러 파일로 저장
  • 2>/dev/null : 표준 오류를 출력도 파일로 저장도 하지 않음
  • >파일 2>&1 or &>파일 : 표준 출력과 표준 오류를 함께 파일에 저장(덮어쓰기)
  • >>파일 2>&1 or &>> : 동일한 파일의 기존 내용에 이어쓰기

pipe(|)

왼쪽 명령어의 출력을 오른쪽 명령어의 입력으로 보냄
파이프라인은 하나 이상의 파이프로 구성

tee

출력을 두 방향의 입력으로 전송

[root@localhost ~]# yum list | grep ssh | tee 파일이름

redirection 이 아니라 tee 를 쓰는 경우 : shell script 에서 root 권한으로 특정 파일을 쓰거나 append 할때 주로 활용

프로세스(process)

실행되고 있는 프로그램을 뜻함 => 메모리에 올라가서 CPU에 의해 실행되고 있는 프로그램

time-sharing 기법 : 여러 명의 사용자가 사용하는 시스템에서 컴퓨터가 사용자들의 프로그램을 번갈아가며 처리해 줌으로써 각 사용자에게 독립된 컴퓨터를 사용하는 느낌을 주는 방식

컴퓨터의 구성요소 4가지
CPU : 프로그램의 연산을 실행하고 처리하는 장치
MEMORY : 주기억장치로, 전원이 꺼지면 데이터가 사라지는 휘발성이 있음
HDD, SDD : 보조기억장치로, 전원이 꺼지더라도 데이터가 남아있는 비휘발성 장치
I/O device : 입출력장치

프로세스의 이해

  • 기존 프로세스는 자체 주소 공간(fork)을 복제해서 새로운 프로세스 구조를 생성
    fork 함수를 호출하는 프로세스는 부모 프로세스가 되고 새롭게 생성되는 프로세스는 자식 프로세스가 됨
  • 모든 프로세스는 하위 프로세스 생성 가능
  • 보안ID, 파일 설명자, 우선 순위, 환경 변수 등 상속

PID(Process Identification Number) : 프로세스가 시작될 때 부여되는 고유한 ID Number
PPID(Parent Process Identification Number) : 부모 프로세스의 PID 값

프로세스 종류

  • 부모 프로세스/자식 프로세스 : 부모 프로세스는 여러 개의 자식 프로세스를 실행하여 다수의 작은 작업들을 동시에 처리하도록 할 수 있음
  • 고아 프로세스 : 일반적으로 부모프로세스가 죽게 되면 자식프로세스도 죽음
    어떠한 이유로 인해서 부모프로세스가 죽더라도 자식프로세스가 살아남는 경우가 발생.
  • 좀비 프로세스 : 부모가 자식프로세스를 탄생시키고 자식 프로세스가 일을 끝마치면 부모는 자식을 죽이고 해당 리소스를 모두 회수. 시스템적으로는 자식은 죽은 것으로 표시 되지만 실제는 살아서 리소스를 잡아놓고 있는 경우
  • 데몬프로세스(daemon process) : 사용자가 아닌 시스템에 의해서 실행된 프로세스. 보통 신, 웹서비스와 같은 프로세스

관련 명령어

ps

현재 실행중인 프로세스 목록과 상태를 보여줌.

  • ps 단독 사용 : 현재 터미널에 대한 정보
  • ps -ef : 시스템에 실행되고 있는 모든 프로세스 확인 가능(모든 프로세스를 출력하는 옵션 e와 pid, ppid 등을 풀 포맷으로 보여주는 옵션 f)
[root@localhost ~]# ps -ef | egrep '(bash|PID)'
UID          PID    PPID  C STIME TTY          TIME CMD
root         853       1  0 19:04 ?        00:00:00 /bin/bash /usr/sbin/ksmtuned
user        2761    2730  0 19:05 pts/0    00:00:00 bash
root        2917    2914  0 19:06 pts/1    00:00:00 -bash
root        4906    2917  0 22:13 pts/1    00:00:00 grep -E --color=auto (bash|PID)
  • TTY : 프로세스가 연결된 터미널
  • CMD : 프로세스의 실행 명령행

pstree -p

프로세스의 구조를 트리구조로 pid와 함께 볼 수 있음

[root@localhost ~]# pstree -p
systemd(1)─┬─ModemManager(891)─┬─{ModemManager}(916)
           │                   └─{ModemManager}(933)
           ├─NetworkManager(1006)─┬─{NetworkManager}(1011)
           │                      └─{NetworkManager}(1012)
           ├─VGAuthService(817)
           ├─accounts-daemon(966)─┬─{accounts-daemon}(972)
           │                      └─{accounts-daemon}(975)

Foreground & Background Process

Foreground Process

쉘 상태에서 명령을 내리면 해당 프로세스가 종료될때까지 대기

[root@localhost ~]# sleep 50
^C

CTRL + Z 정지
CTRL + C 종료

fg

포그라운드로 전환하는 명령어

[root@localhost ~]# jobs
[1]+  Running                 sleep 50 &
[root@localhost ~]# fg %1
sleep 50

Background Process

명령어 뒤에 &을 붙여서 동작, 명령을 내린 사용자는 다른 명령어를 계속 실행 가능

[root@localhost ~]# sleep 50 &
[1] 3805
[root@localhost ~]#

bg

백그라운드로 전환하는 명령어

[root@localhost ~]# sleep 500
^Z
[1]+  Stopped                 sleep 500
[root@localhost ~]# jobs
[1]+  Stopped                 sleep 500
[root@localhost ~]# bg %1
[1]+ sleep 500 &

jobs

백그라운드에서 실행되는 프로세스를 확인할 수 있는 명령어

[root@localhost ~]# jobs
[1]+  Running                 sleep 50 &
[root@localhost ~]#

프로세스의 관리

signal

프로세스에게 특정 이벤트가 발생했을 때 알리는 신호
인터럽트의 일종
한 프로세스가 다른 프로세스에게 보낼 수도 있고, 커널이 프로세스에게 보낼수도 있음
비동기적이므로 어느 시점에서 발생할지 예측할 수 없음

사용법

kill [option](default : -15) PID 

signal 종류

자주 쓰는 종류들

번호짧은옵션긴옵션
-1–HUP–SIGHUP재설정(reload)
-2–INT–SIGINTInterrupt(ctrl + c)
-9–KILL–SIGLILL강제종료
-15–TERM–SIGTERM정상종료(terminated)
-18–CONT–SIGCONT계속 (continue)
-19–STOP–SIGSTOP일시정지(ctrl + z)

프로세스 관리 명령어

pkill

프로세스를 지정하여 시그널을 보내는 명령어
사용자 계정에서 사용 시 자신의 프로세스에게만 시그널 보낼 수 있음
루트 계정에서는 모든 프로세스에게 보낼 수 있음
터미널별로 관리도 가능

pkill –15 –t pts/1 sleep

killall

입력한 프로세스명 모두에게 시그널을 보내는 명령어

[root@localhost ~]# ps -ef | grep sleep
root        3573     849  0 07:19 ?        00:00:00 sleep 60
root        3574    2925  0 07:19 pts/1    00:00:00 sleep 2000
root        3575    2925  0 07:19 pts/1    00:00:00 sleep 4000
root        3579    2925  0 07:20 pts/1    00:00:00 grep --color=auto sleep
[root@localhost ~]# killall sleep
[1]-  종료됨               sleep 2000
[2]+  종료됨               sleep 4000

터미널별로 관리도 가능

killall –15 –u test1 sleep

skill

주로 시스템에 접속해 있는 사용자 혹은 특정 터미널을 종료시키는데 사용
불필요한 접속자 혹은 공격자 등을 차단할 경우

pgrep

프로세스에 대해 특정 정보를 이용한 검색 기능
ps + grep와 같은 효과

우선순위

프로세스의 처리 순서
중요도에 따른 가중치 부여
기본 값(priority) + 조정 값(nice)

root일반사용자
최초 부여 가능한 값-20~191~19
조정 가능한 값모든 값 가능기존의 값보다 큰 값

nice 값

nice 값이 높을 수록 우선순위 낮음

nice

프로세스 실행 시 설정

[root@localhost ~]# nice -n -10 sleep 1000 &
[1] 6075
[root@localhost ~]# ps -l | egrep '(sleep|NI)'
F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S     0    6075    2917  0  90 -10 -  1436 hrtime pts/1    00:00:00 sleep

user는 음수 불가

[user@localhost ~]$ nice -n -11 sleep 2000 &
nice: cannot set niceness: 허가 거부

renice

프로세스 동작 중 우선 순위 변경

[root@localhost ~]# renice -n –15 2435
2435 (process ID) old priority -11, new priority –15

user는 더 낮은 값으로 변경 불가

[user@localhost ~]$ ps -l | egrep '(sleep|NI)'
F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000    2491    2450  0  80   0 -  1436 hrtime pts/0    00:00:00 sleep
0 S  1000    2492    2450  0  85   5 -  1436 hrtime pts/0    00:00:00 sleep
[2] 2492
11. nice 값을 4로 수정해보시오.
[user@localhost ~]$ renice -n 4 2492
renice: failed to set priority for 2492 (process ID): 허가 거부

파일 아카이브

리눅스에서 파일을 주고 받거나, 백업을 수월하기 하기 위해 여러 파일이나 디렉토리를 압축
파일의 메타데이터가 함께 들어가기 때문에 파일의 용량이 없더라도 아카이브에는 용량이 존재

아카이브 경로 설정 시, 주의 점

[root@localhost dir01]# tar cf alph1.tar /root/dir01/[a-z]
tar: 구성 요소 이름 앞에 붙은 `/' 제거 중
tar: 하드 링크 대상 앞에 붙은 `/' 제거 중

에전에는 절대경로로 설정하면 절대경로 인식했음
덮어쓰기 위험을 방지하기 위해 시스템에서 /제거

tar

생성시 피드백이 없고 바로 덮어씀

옵션
c(creat)새로운 묶음 생성
x(extract)묶인 파일 해제
t(list)묶음을 풀기 전 목록 보여줌
f(file)묶음 파일 지정
v(visual)과정을 보여줌
ztar + gzip
jtar + bzip
Jtar + xz

-C 옵션을 통해 아카이브가 생성될 경로를 지정할 수 있음

[root@localhost dir01]# tar xJf bin.tar.xz –C /tmp

아카이브 생성

# tar cvf [생성될 아카이브 파일명] [아카이프할 파일이나 디렉토리]

아카이브 해제

# tar xvf [생성될 아카이브 파일명] [아카이프할 파일이나 디렉토리]

아카이브 확인

# tar tvf [생성될 아카이브 파일명] [아카이프할 파일이나 디렉토리]

아카이브 종류

  • gzip & gunzip
    가장 오래된 압축툴 압축속도 빠름 압축률 낮음
[root@localhost dir01]# tar czf etc.tar.gz /etc/
  • bzip2 & bimzip2
    압축속도 중간 압축률 중간

    [root@localhost dir01]# tar cjf etc.tar.bz2 /etc/
    ``
    
  • xz & unxz
    압축속도 느림 압축률 높음

[root@localhost dir01]# tar cJf etc.tar.xz /etc/

크기비교

[root@localhost dir01]# ls -l
합계 43688
-rw-r--r--. 1 root root 29378560  2월 21 01:36 etc.tar
-rw-r--r--. 1 root root  4783605  2월 21 01:36 etc.tar.bz2
-rw-r--r--. 1 root root  6523900  2월 21 01:36 etc.tar.gz
-rw-r--r--. 1 root root  4044864  2월 21 01:37 etc.tar.xz

참고문서 [하드링크와 심볼릭 링크], [파일 아카이브]

profile
Ken, 🔽🔽 거노밥 유튜브(house icon) 🔽🔽

0개의 댓글