티스토리 뷰

 
* 영어가 다르면 의미도 다름
* man + 명령어 또는 명령어 -h(help)를 통해 옵션을 사용할 줄 알아야 함.

 
 
1. 프로세스 : 메모리에 이미 실행중이라 작동되고 있는 것
> 주 프로세스 : systemd(CentOs7 미만 : init)
> 식별자(pid - 프로세스 식별자)가 없는 프로그램은 없다.
> 프로세스는 두 가지 방식으로 운영이 됨. Foreground Process와 Background Process로 나뉨
 
1) pstree
> 프로레스 구조를 트리 형태로 출력
#pstree [옵션]
 
<옵션>
-p : 프로세스 ID 출력
#pstree
#pstree -p : pid까지 출력
 
2) ps
> 프로세스 상태 출력(현재 상태). 사용자와 관련된 프로세스만 출력.
#ps [옵션]
#ps -aux
#ps -ef
 
< 옵션 >
-a : All
-u : 사용자 정보 출력
-x : 터미널과 관련 없는 프로세스 정보 출력(-au 까지만 적으면 터미널과 관련 있는 것만 나오는 것)
-e : 커널 프로세스를 제외한 모든 프로세스를 보여준다.
-f : Full 포맷. UID, PID, PPID 등이 함께 표시되는 유닉스 스타일을 의미한다.
 
 
 
USER : USER NAME. 프로세스를 실행한 계정명.
PID : 프로세스 식별자 
PPID : Parent PID. 부모 프로세스의 식별자
C : CPU의 짧은 시간 사용률
TTY : 어떤 경로로 들어왔는지. 접속 경로, 접속 위치, 터미널 등
STAT : 프로세스의 상태. 실행인지 대기인지 등
START : 프로세스 실행 시작 시간. 언제 실행 시작하였는지. S(sleeping), R(running), T/D(stop), Z(zombie)
TIME : 실행된 후 누적 실행시간
CMD 또는 COMMAND : 명령어/프로세스명/프로그램명
%CPU : 해당 프로레스의 CPU 점유율. 이 프로그램이 CPU를 얼마나 사용하는지%MEM : 해당 프로세스의 메모리 점유율. 이 프로그램이 메모리를 얼마나 사용하는지VSZ : 가상 메모리 사용량RSS : 실제 메모리 사용량PR : 우선순위 값. 모든 프로세스를 다 동일하게 대접하지 않음. priority. 사용자가 변경할 수 없음. 오직 CPU만이 가능하다. 수치가 낮을수록 우선순위가 높다. 0은 거의 무한대를 의미NI : 이건 관리자가 바꿀 수 있음.VIRT : 가상메모리 사용량RES : 실제 메모리 사용량SHR : 공유메모리. 프로세스가 메모리를 공유할 때(공동 자산)S : 상태
 
 

빠져나가려면 q
하이픈(-)을 붙이지 않으면 COMMAND가 계층화되어서 나온다.

 
 
3) top
> 프로세스 상태를 실시간 출력(디폴트 3초마다 갱신)
 
 
#top [옵션]
> 실행할 때 옵션
-d + 숫자: 갱신주기 설정
#top -d 5 : 기본 3초가 아닌 5초마다 갱신
 
-n + 숫자: 갱신횟수 설정
#top -n 4 : 4회만 갱신 후 자동 멈춤
 
> 실행 후 옵션
-P : CPU 점유율 순 정렬 출력
 
 
top :
up :
2 users : 사용자 2명 접속
load average : 부화 평균. 1/5/15분 단위. 1분 평균/5분 평균/15분 평균 포맷으로 알려줌
tasks(일꾼) : 총 몇개의 프로세스가 실행되고 있는지.
running : tasks 중 실행중인 프로세스 
sleeping : 실행중인 프로세스 외 나머지. 언제든지 부르면 깨어날 수 있는 프로세스
stopped : 
zombie : 멍 때리고 있는 상태. 아무일도 안하고... 자식 프로세스는 죽어도 부모 프로세스와는 상관이 없음. 부모 프로세스가 죽으면 자식 프로세스는 따라 죽음. 부모 프로세스가 죽어도 자식 프로세스가 살아남아 멍때리는 상태가 좀비 프로세스이다. 이런 프로세스는 관리자가 찾아 kill 시켜야 한다. 부모 프로세스가 없으면 자식 프로세스가 일을 할 수 없기 때문. 부모 프로세스는 자식 프로세스를 일 시킨다.
%Cpu us : us-사용자 점유율, sy-시스템(=커널) 점유율, ni-처리하느라 사요중, id-놀고있는, wa-외부처리 대기시 협의되는 용량, hi-하드웨어나 소프트웨어 처리, si-, st-. wa까지는 신경써서 알아야함
%CPU가 10% 넘어갈 일이 거의 없음. 특히 30-40% 넘는 점유율이 있다면 공격으로 받아들이고 kill 시키는 것이 좋음
MiB Mem : total 메모리, free : 남은 용량, used 사용된 용량
MiB Swap : 임시 메모리. 주 기억장치가 모자랄 때 사용하기도 함. 가상 메모리가 있기 때문에 swap을 굳이 쓸 일이 없긴 하다.
 
 

위에가 요약(Summary) 정보, 아래가 상세(Detail) 정보이다.

 
4) kill
> 시그널을 프로세스로 전송하는 명령어
> 프로세스 종료
 
#kill [옵션] [PID]
 
< 옵션 >
-l : 시그널 목록 출력
 
#kill -9 4733
 

bash는 터미널창이다. kill로 터미널 창을 끌 수 있다.

 
 
15번 : 정상종료. init 0나 shutdown 명령어 등을 실행하면 15번 시그널에 프로세스에 전송됨
9번 : 강제종료. kill -9 이런 것들.. 
1번 : 재시작
2번 : 인터럽트
3번 : 시스템 종료.  quit
18 : 지속. continue. sleeping 프로세스를 깨우는 상황일 때 등
19 : 
20 : 
 

 
5) killall
> 여러 프로세스를 한 번에 종료시킬 수 있음
> pid가 아닌 프로세스명으로 종료시키는 점이 #kill과의 차이점
 
#killall [옵션] [프로세스명]
#killall -9 httpd
 

httpd 다운로드 후 killall까지 실행하는 일련의 과정
계정명이 apache며, 프로세스명이 httpd인 것을 확인할 수 있음

 
6) nice
> 프로그램 실행 시 우선 순위값 변경
> 우선 순위 값 범위 : -20 ~ 19(디폴트 : 0)
> 우선 순위 값은 낮을수록 우선순위가 높아진다.
 
#nice [옵션] [프로그램]
 
< 옵션 >
-n : 우선 순위 값 지정
 
#nice -10 top : 우선순위 ni를 10 낮춤(-10은 +10)
#nice --20 top : 우선순위 ni를 20 올림(--20은 -20)
 
프로세스가 여러 개일때 관리해야한다 = 스케줄링 해야한다. 자원이 한정되어있기 때문.
이때 스케줄링은 우선순위를 기준으로 해야한다.
 
7) renice
> 프로그램 실행 후 우선 순위값 변경
 
# renice [옵션] [PID]
#renice -10 [top의 PID] : 우선순위를 10 올림
#renice 10 [top의 PID] : 우선순위를 10 낮춤
 
 

변경됨

 

변경됨

 
< 예시 상황 >
* 편의상 PR/NI 형식으로 표시하겠다.
#nice -10 top
결과 : 30/10
#nice --10 top
결과 :  10/-10
#nice -10 top
결과 :  30/10
#nice --10 top
결과 :  10/-10
(해당 창을 q로 중지하지말고 다른 창에서)
#ps -aux -> top의 PID 확인
#renice 10 37001(확인한 top의 PID)
결과 :  30/10
#renice -10 37001

결과 :  10/-10
 
 
8) cron
> 실무에서 정말 많이 쓰는 명령어.
* shutdown 명령어에서는 시간은 설정할 수 있어도 날짜와 명령어 설정을 못한다. 이때 cron을 사용하면 참 편리하다.
> 스케줄링
> 주기적 : cron, 일시적(at, anacron)
 
#crontab [옵션]
 
<옵션>
-l : 스케줄 목록 출력
-e : 스케줄링 설정(vi 에디터가 실행됨)
-r : 스케줄 전체 삭제
 
> 스케줄 포맷(*은 주기적임을 나타냄. 매주, 매일, 매월)

[분] [시] [일] [월] [요일] [실행할 명령어]
0~59분 00~23시 1~31일 1~12월 0~6일
(일요일: 0, 7)
 

 
ex) 45 16 * * * /home/cron.sh : 매일 16시 45분에 /home/cron.sh 실행
 

지우고 다시 만들 때의 상황

 
 
[ 스케줄 설정하는 방법 ]
1️⃣ 어떤 디렉터리에 vi 파일 생성

셸 스크립트이기 때문에 .sh 표시

2) 해당 vi 파일에 실행하고픈 명령어 작성

3) 해당 vi 파일에 권한 설정

 
4) #crontab -e 명령어를 통해 어느 경로에 파일을 명령어로써 실행할 것인지 설정

:wq를 통해 저장하고 나오면 new crontab이 install 되었다고 표시됨

 
5) #crontab -l 명령어를 통해 스케줄 목록 출력하여 해당 파일이 제대로 실행될 것인지 확인

#crontab -e를 통해 작성해두었던 스케줄이 표시됨

6) 스케줄이 제대로 실행되었는지 확인

passwd 복사가 정확이 잘 되었음을 확인할 수 있음

 
참고)

여러 개의 파일을 시간차를 두고 실행할 수도 있다!

 

 
2. 디스크 관리
 
1) 디스크 관련 명령어
1️⃣ df
> 파일 시스템 단위로 사용량 출력
#df [옵션] [장치명]
 
- Filesystem : 리눅스가 파일시스템으로 인식
- 1K-blocks
- Used
- Available
- Use%
- Mounted on
 
< 옵션 >
-h : Human Readable 옵션. 사용자가 읽기 편하게 용량이 표시됨. G, M, K 등으로...
-k : KB 단위로 표시
-m : MB 단위로 표시
-t : Type 확인 가능
 

여러 가지 용량 표시
타입도 확인할 수 있다.

 
 
2️⃣ du
> 디렉터리 단위로 사용량 출력
#du [옵션]
 
2) 하드디스크 추가

[0] 하드디스크를 추가하기 전. 총 3개의 하드디스크가 있음을 알 수 있다.

 
1️⃣ HDD 추가 : 디스크에 전원케이블과 메인메모리 케이블을 메인보드에 꽂는다.

* 핫스와핑 기능 *

: 핫 스와핑 기능이란, 

 

* Disk Type(Interface  타입에 가까움)
(1) IDE/EIDE - 4개까지 설치 가능
>  /dev/hd[물리적 HDD 개수][파티션 넘버]
>  /dev/hda1 : 첫 번째 HDD의 첫 번째 파티션

 
(2) SCSI - 16개까지 설치 가능(서버용 하드디스크)
> /dev/sd[물리적 HDD 개수][파티션 넘버]
 
(3) S-ATA - 127개까지 설치 가능
> /dev/sd [물리적 HDD 개수][파티션 넘버]

/dev/sda

 
* Memory Type
(1) NVMe : 비휘발성 메모리. 전원공급이 안되도 메모리가 남아있는 것.(참고: RAM은 휘발성 메모리이다)

 

 

속도 : IDE/EIDE < SCSI < S-ATA < NVMe

 

[1-1] shutdown 상태에서 Edit virtual machine settings를 누른다.
[1-2] 그러면 뜨는 settings 창이다. 여기서 Add... 버튼을 누른다.
[1-3] Hard Disk가 선택된 상태에서 Next 버튼을 누른다.
[1-4] 여러 가지 종류의 하드 디스크를 선택할 수 있다. 필자는 가장 마지막 NVMe를 선택한 후 Next를 누른다.
[1-5] Create가 선택된 상태에서 Next 버튼을 누른다.
[1-6] 여러가지 설정을 할 수 있지만 필자는 디스크 사이즈 40GB에 single file을 선택한 상태에서 Next 버튼을 누른다.
[1-7] 리눅스는 디스크도 파일시스템으로 인식하므로 파일 name을 작성하라고 한다. 디폴트로 적혀있는 것을 그대로 사용해도 무관하다. 후에 Finish를 누르고 OK 버튼을 눌러 Settings 창을 나온다.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[1-8] 부팅한다.

 
2️⃣ 파티션 나누기(이만큼 쓰겠다는 영역 설정)

* 디스크의 구성 *

(1) 트랙

(2) 섹터

(3) 실린더

 

#fdisk [장치명]
#fdisk -l : HDD 목록 출력(#df 만으로는 아직 안보임)
#fdisk /dev/nvme0n2
 
* 파티션 종류
(1) Primary Partition(기본 파티션): 리눅스에서는 기본 파티션을 4개까지밖에 못나눔

/dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4

 
(2) Extended Partition(확장 파티션)
> 더 나누고 싶을때 이용. 확장 파티션으로 바꾸기만 해서는 사용할 수 없음. 논리 파티션을 위한 공간이 확장 파티션이라고 생각하면 편하다.
> 마지막 파티션을 확장 파티션으로 바꾼 후, 해당 확장 파티션을 논리 파티션으로 바꿔주어야 사용가능.

/dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4(확장 파티션)

 
(3) Logical Partition(논리 파티션)

/dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4 /dev/sda5

 

[2-1] #df 로 확인하니 아직 리눅스가 인식하지 못하고 있음을 알 수있다.&nbsp; 네 번째 NVMe 하드디스크 이기 때문에 /dev/nvme0n4 관련이 떠야 하는데 없다. 그러니 파티셔닝부터 마운트까지 해보자.

 

[2-2] #fdisk -l을 통해 HDD 목록을 출력해보자. nvme0n3는 파티셔닝까지 되어 있지만, nvme0n4는 아무런 파티셔닝이 되어있지 않음을 확인할 수 있다. 빨간색 표시가 된 부분이 nvme0n3의 파티셔닝 표시이다.

 

[2-3] #fdisk /dev/nvme0n4를 통해 파티셔닝을 하러 들어가보자.

 

[2-4] 파티셔닝 과정이다. n 입력 -> p 입력 -> 파티션 개수 입력 -> 시작 용략 입력(그냥 엔터치면 default로 들어감, 2047까지는 기본 설정이 들어가있는 부분이기 때문에 꼭 2048부터 시작해야 함. 2048보다 큰 숫자를 입력할 경우 2048부터 해당 숫자까지의 부분은 버리는 용량이 된다.) -> 끝 용량 입력 (그냥 엔터치면 default로 들어감) -> w 입력(저장)

 
3️⃣ 파일 시스템 생성 : 어떤 방식으로 이 영역에 저장할 것인가. = 윈도우에서 포맷이라고 부르는 기능
#mkfs.xfs [장치명]
 
#mkfs.xfs /dev/nvme0n2p1
#mkfs -t ext4 /dev/nvme0n2p1

[3] 파일 시스템을 생성한다.
참고 ) xfs 파일시스템으로 만들 때


< 옵션 >
-t : ext4까지 생성가능
 
4️⃣ 마운트 : 생성된 파일 시스템을 리눅스에 연결시켜주는 것
> 리부팅 하면 마운팅 했던 건 날아감

#mount -t [파일시스템 유형] [장치명] [마운트 포인트(마운트할 지점)]

> xfs 파일 시스템은 -t 옵션을 붙이지 않아도 자동으로 된다.

#mount /dev/nvme0n3p1 /mnt


#mount -t ext4 /dev/nvme0n2p1 /mnt

[4] 마운트를 시키고 다시 #df를 통해 확인하면 이제서야 추가한 하드디스크를 사용할 수 있음을 알 수 있다.

 
5️⃣ 마운트 해제
#umount [장치명]
#umount [마운트 포인터]
 
#umount /dev/nvme0n3p1
#umount /mnt

[5] 마운트 해제도 가능하다.

 
6️⃣ 자동 마운트
> 관련 파일: /etc/fstab
(1) vi /etc/fstab을 통해 에디터 열기
(2) 아래의 화면처럼 입력

[장치명] [마운트 포인트] [파일 시스템 유형] [옵션] [덤프 여부] [검사 여부]
/dev/nvme0n4p1 /mnt ext4 defaults 0 0

 

- 장치명: 마운트할 장치

- 마운트 포인트: 장치를 마운트할 지점 

- 파일 시스템 유형: 해당 파일 시스템(ext, ext2, ext3, ext4, xfs)...iso9660(CD-ROM)

- 옵션: defaults(rw, suid, dev, exec, auto, nouser, async)

  • auto: 부팅  시 자동 마운트 허용
  • exec: 실행 파일 실행 허용
  • suid: SetUID, SetGID 사용 허용
  • ro: 읽기 전용
  • rw: 읽기, 쓰기 허용
  • user: 일반 사용자로 마운트 할 수 있게 허용
  • nouser: 일반 사용자 마운트 제한
  • noauto: 자동 마운트 제한
  • noexec: 실행 파일 실행 제한
  • nouid: SetUID, SetGID 사용 제한
  • usrquota: 일반 사용자 쿼터 설정
  • grpquota: 그룹 사용자 쿼터 설정

- 덤프 여부: "부팅 시" 덤프(백업). 따라서 덤프 여부란, 시스템이 부팅을 할 때 어떤 오류가 생길 수 있는데, 그랬을 때 백업을 할 지 여부를 의미한다.(0: 백업x, 1: 백업 설정)

- 검사 여부 : "부팅 시" 파일 시스템 검사 여부(0: 검사x, 1: root 파일 시스템 검사, 2: root 파일 시스템을 제외한 모든 파일 시스템 검사) 

 

15번째처럼 작성하면 됨. 이제 리부팅해도 해당 디스크를 자동을 쓸 수 있을 것이다.

 

7️⃣ 파티션 삭제

> 마운트 해제를 한 뒤에 파티션을 삭제하는 것이 안전합니다.

> 파티션까지 삭제했다면, 하드디스크까지 삭제해도 좋습니다.(단, 자동마운트 설정이 없는 상태여야 함)


3. 파일 시스템(#df -Th를 통해 타입을 확인하게 됐을때 나오는 것들)
> 리눅스는 모든 주변 장치를 파일 시스템으로 인식한다.
> 종류 : ext, ext2//ext3, ext4, xfs
> 저널링 기능 : ext3 이상에서 지원되는 기능
> 저널링 파일 시스템(처음부터 저널링 기능을 가지고 태어난 아이들) : xfs, jfs, reiserfs. CentOS 7 이상에서 xfs 사용 시작

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함