필수 개념 및 명령어
종료
$ shutdown -p now
$ halt -p now
$ init 0
시스템 재부팅
$ shutdown -r now
$ reboot
$ init 6
로그아웃
$ logout
$ exit
가상 콘솔
- 가상의 모니터라고 생각하면 됨
- 각각의 가상 콘솔로 이동하는 단축키는 Ctrl + Alt + F3 ~ F6
Runlevel
Runlevel | Eng-mod | Desc | Note |
---|
0 | Power Off | 종료 모드 | |
1 | Rescue | 시스템 복구 모드 | 단일 사용자 모드 |
2 | Multi-User | | 사용하지 않음 |
3 | Multi-User | 텍스트 모드의 다중 사용자 모드 | |
4 | Multi-User | | 사용하지 않음 |
5 | Graphical | 그래픽 모드의 다중 사용자 모드 | |
6 | Reboot | | |
예시
$ ln –sf /lib/system/system/multi-user.target /etc/systemd/system/default.target
자동 완성과 히스토리
- 자동 완성: Tab 키 활용
- 히스토리: history
vi 기능 요약
명령 모드 -> 입력 모드
- i: 현재 커서 위치부터 입력
- a: 현재 커서의 위치 다음 칸부터 입력
- I: 현재 커서 줄의 맨 앞에서부터 입력
- A: 현재 커서 줄의 맨 뒤부터 입력
명령 모드에서 커서 이동
명령 모드에서 삭제, 복사 붙여넣기
- x: 현재 커서가 위치한 글자 삭제
- X: 현재 커서가 위치한 앞 글자 삭제
- dd: 현재 커서의 행 삭제
- number + dd: 현재 커서부터 숫자만큼의 행 삭제
- yy: 현재 커서가 있는 행을 복사
- number + yy: 현재 커서부터 숫자만큼의 행을 복사
- p: 복사한 내용을 현재 행 이후에 붙여넣기
- P: 복사한 내용을 현재 행 이전에 붙여넣기
Mount
- 보조기억장치나 파일 시스템이 다른 디스크를 /의 하위 디렉터리로 연결해서 사용해주는 것
- 요즘은 Plug and Play 기능이 있어 자동으로 등록하지만, 서버 환경에서는 없는 경우도 많음
$ mount [option] [device] [directory]
기본 명령어
- ls: 디렉터리에 있는 파일 목록을 나열
- cd: 디렉터리 이동
- pwd: 현재 디렉터리 전체 경로
- rm: 삭제
- cp: 복사
- touch: 크기가 0인 파일 생성
- mv: 파일의 이름을 변경하거나 위치 이동
- mkdir: 새로운 디렉터리 생성
- rmdir: 디렉터리 삭제
- cat: 텍스트로 작성된 파일 출력
- head, tail: 앞 10행 또는 뒤 10행 출력
- more: 텍스트 파일을 페이지 단위로 출력
- less: more와 용도가 비슷하지만 확장된 기능
- file: 어떤 종류의 파일인지 출력
- clear: 명령창 클리어
사용자와 그룹
- 리눅스는 Multi-User system
- root라는 이름을 가진 Superuser가 있으며 모든 작업을 할 수 있는 권한이 있음
- 모든 사용자는 하나 이상의 그룹에 소속되어 있음
- 사용자는 /etc/passwd 파일에 정의되어 있음
- 사용자의 비밀번호는 /etc/shadow 파일에 정의되어 있음
- 그룹은 /etc/group 파일에 정의되어 있음
- /etc/skel 디렉터리는 사용자가 처음 생성되면 기본으로 포함해야 할 정보를 가짐
사용자와 그룹 관련 명령어
- useradd: 새로운 사용자 추가
- passwd: 사용자의 비밀번호 지정 또는 변경
- usermod: 사용자의 속성 변경
- userdel: 사용자 삭제
- change: 사용자의 암호를 주기적으로 변경하도록 설정
- groups: 사용자가 속한 그룹을 보여줌
- groupadd: 새로운 그룹 생성
- groupmod: 그룹 속성 변경
- groupdel: 그룹 삭제
- gpasswd: 그룹 암호 설정 또는 그룹 관리 수행
파일과 디렉터리의 소유와 허가권
파일 유형
- 일반 파일 (-)
- 데이터를 저장하는 데 주로 사용
- 각종 텍스트 파일, 실행 파일, 이미지 파일 등
- Directory (d)
- 디렉토리에 저장된 파일 또는 하위 디렉토리에 대한 정보 저장
- 링크 파일 (l)
- 원본 파일을 대신해서 원본 파일을 다른 파일 이름으로 지정한 것
- 특수 파일
- 블록형 장치 파일 (b)
- 문자형 (c)
- 파이프 (p)
- 소켓 (s)
파일 허가권
- 3개씩 끊어서 읽음
- 첫 번째는 User의 파일 접근 권한
- 두 번째는 Group의 파일 접근 권한
- 세 번째는 그 외 사용자의 파일 접근 권한
- 8진수 숫자로도 표현 가능
- chmod: 파일 허가권 변경 명령어
파일 소유권
- 파일을 소유한 사용자와 그룹을 의미
- chown/chgrp: 파일의 소유권을 변경하는 명령어
INODE
- inode는 리눅스/유닉스 파일 시스템에서 사용하는 자료구조
- 파일이나 디렉터리의 여러 정보를 가지고 있음
- 모든 파일이나 디렉터리는 한 개의 inode를 가지며 inode에는 파일의 소유권, 허가권, 파일 종류 등의 정보와 해당 파일의 실제 위치가 있음
- inode들이 모여있는 공간을 inode 블록이라고 함
링크
- 파일의 링크에는 하드 링크와 심볼릭 링크 (또는 소프트 링크) 두 가지가 있음
- 하드 링크를 생성하면 하드 링크 파일만 하나 생성되며 같은 inode를 사용
- 소프트 링크를 생성하면 새로운 inode를 만들고 데이터는 원본 파일을 연결하는 효과
RPM (Redhat Package Manager)
- Windows의 "setup.exe"와 비슷한 설치 파일
- 확장명은 .rpm이며 이를 패키지라고 부름
$ rpm -Uvh PACKAGENAME
- RPM은 포로그램을 설치할 때 의존성이 있는 선행 패키지가 설치되어 있지 않으면 설치가 불가능하다는 게 단점
DNF (Danifired YUM)
- RPM의 패키지 의존성 문제를 해결
- 인터넷을 통해 필요한 파일을 Repository에서 자동으로 다운로드해서 설치
작동 방식 설정 파일
- /etc/yum.conf: 특별히 변경할 필요 없음
- /etc/yum.repos.d/ 디렉터리: dnf 명령을 입력했을 때 검색하게 되는 네트워크의 주소가 들어 있는 여러 개의 파일이 있음
- /etc/yum.repos.d/ 디렉터리의 .repo 파일: 패키지를 받아올 위치를 결정
파일 압축과 묶기
파일 압축
- 압축 파일 확장명은 xz, bz2, gz, zip, Z 등
파일 압축 관련 명령
- xz: xz로 압축을 하거나 해제
- bzip2: bz2로 압축을 하거나 해제
- gzip: gz로 압축을 하거나 해제
파일 묶기
- 리눅스나 유닉스에서는 파일 압축과 파일 묶기는 별개의 프로그램으로 수행
- 파일 묶기의 명령어는 tar이며 묶인 파일의 확장명도 .tar
파일 묶기 명령
- 확장명 tar로 묶음 파일을 만들어 주거나 묶음을 풀어줌
- 동작: c(묶기), x(풀기), t(경로 확인)
- 옵션: f(파일), v(과정 보이기), J(tar + xz), z(tar + gz), j(tar + bz2)
파일 위치 검색
$ find [경로] [옵션] [조건] [action]
Cron과 At
Cron
- 주기적으로 반복되는 일을 자동적으로 실행될 수 있도록 설정
- 관련된 데몬은 crond, 관련 파일은 /etc/crontab
at
- cron은 주기적으로 반복되는 작업을 예약하는 것이지만 at은 일회성 작업을 예약
네트워크 관련 명령어
- nmtui: 네트워크와 관련된 대부분의 작업을 수행
- 자동 IP 주소 또는 고정 IP 주소 사용 결정
- IP 주소, 서브넷 마스크, 게이트웨이 정보 입력
- DNS 정보 입력
- 네트워크 카드 드라이버 설정
- 네트워크 장치 (ens160) 설정
- 텍스트 기반으로 작동
- nslookup: DNS 서버의 작동을 테스트하는 명령어
$ systemctl [start/stop/restart/status] NetworkManager
$ ifup [장치 이름]
$ ifdown [장치 이름]
$ ifconfig [장치 이름]
$ ping [IP 주소 또는 URL]
네트워크 설정과 관련된 주요 파일
- /etc/sysconfig/network: 네트워크의 기본적인 정보가 설정되어 있는 파일
- /etc/sysconfig/network-scripts/ifcfg-ens160: ens 장치에 설정된 네트워크 정보가 있는 파일
- /etc/resolv.conf: DNS 서버의 정보 및 호스트 이름이 있는 파일
- /etc/hosts: 현 컴퓨터의 호스트 이름 및 FQDN이 있는 파일
- 위 네 개 파일을 직접 편집하면 nmutui들 사용하지 않아도 됨
Pipe, Filter, Redirection
Pipe
- 두 개의 프로그램을 연결해주는 연결 통로
- "|" 문자 사용
$ ls -l /etc | more
Filter
- 필요한 것만 걸러주는 명령어
- grep, tail, wc, sort, awk, sed 등
- 주로 파이프와 같이 사용
$ ps -ef | grep bash
Redirection
- 표준 입출력의 방향을 바꿔줌
- ">" 문자 사용
$ ls - l > list.txt
Process, Daemon
- Process: 하드디스크에 저장된 실행코드가 메모리에 로딩되어 활성화된 것
- Daemon: 유닉스(Unix) 운영체제에서 부팅 시 자동으로 켜져, 백그라운드에서 계속 실행되는 프로세스
- Foreground process
- 실행하면 화면에 나타나 사용자와 상호작용하는 프로세스
- 대부분의 응용 프로그램
- Background process
- 실행은 되었지만 화면에는 나타나지 않고 실행되는 프로세스
- 서버 데몬 등
- Process number: 각각의 프로세스에 할당된 고유 번호
- 작업 번호: 현재 실행되고 있는 백그라운드 프로세스의 순차 번호
부모 프로세스와 자식 프로세스
- 모든 프로세스는 부모 프로세스를 가지고 있음
- 부모 프로세스를 kill 하면 자식 프로세스도 자동으로 kill 됨
프로세스 관련 명령
- ps: 현재 프로세스의 상태를 확인하는 명령어
- kill: 프로세스를 강제로 종료하는 명령어
- pstree: 프로세스의 관계를 트리 형태로 보여줌
Service, Socket
Service
- 시스템과 독자적으로 구동되어 제공하는 프로세스
- 실행 및 종료는 대개 "systemctl start/stop/restart SERVICENAME"으로 사용됨
- 서비스의 실행 스크립트 파일은 /usr/lib/systemd/system/ 디렉터리에 SERVICENAME.service 라는 이름으로 확인할 수 있음
Socket
- 서비스는 항상 가동되지만 소켓은 외부에서 특정 서비스를 요청할 경우에 systemd가 구동시킴
- 요청이 끝나면 소켓도 종료됨
- 소켓으로 설정된 서비스를 요청할 때는 처음 연결되는 시간이 서비스에 비교했을 때 약간 더 걸릴 수 있음
- systemd가 서비스를 새로 구동하는 데 시간이 소요되기 대문
- Telnet 서버 등
- 소켓과 관련된 스크립트 파일은 /usr/lib/systemd/system/ 디렉터리에 SOCKETNAME.socket 이라는 이름으로 존재
GRUB 부트로더
- 부트 정보를 사용자가 임의로 변경해 부팅할 수 있음
- 즉, 부트 정보가 올바르지 않더라도 수정하여 부팅할 수 있음
- 다른 여러 가지 운영체제와 멀티부팅 가능
- 대화형 설정을 제공
- 비밀번호 분실 시 GRUB 부트로더로 해결 가능
모듈의 개념과 커널 컴파일의 필요성
IDE, SATA, SCSI
- 리눅스에서 하드디스크가 물리적으로 나눠진 것을 /dev/sda, /dev/sdb, /dev/sdc, ... 형식으로 부름
- 디스크 파티션이 논리적으로 나눠진 것을 /dev/sda1, /dev/sda2, /dev/sda3, ... 형식으로 부름
IDE (Intergrated Drive Electronics)
- 일반적인 메인보드에서 지원되는 하드디스크
- ODD 등의 장치들의 인터페이스를 총칭
ATA (Adavanced Technology Attachment)
- CD-ROM 드라이브나 하드디스크 장치 등을 IDE 인터페이스에 접속하기 위한 규격, 연결 방식
- PATA: Parallel ATA
- SATA: Serial ATA
SCSI (Small Computing System Interface)
- 서버 환경이나 워크스테이션 등에 주로 이용되는 장치
- 빠른 RPM
- 빠른 전송률
- 긴 수명
- 안정적 데이터 보존률
하드디스크 추가하기
- 파티션을 그냥 사용할 수 없으며 반드시 특정한 디렉터리에 마운트 시켜야 사용 가능
- fdisk: 파티션을 나눠주는 명령어
- Partition Type
- Primary Partition
- 실제 데이터를 저장하는 파티션
- 1 ~ 4개 까지 생성 가능
- Extended Partition
- 실제 데이터 저장이 불가능한 파티션
- 파티션 테이블 영역을 확장하는 용도
- 파일 시스템 및 마운트 지정 불가능
- 단 한 개의 파티션만 생성 가능
- Logical Partition
- 데이터 저장은 가능하나 운영체제 설치 불가
- 확장 영역의 크기 내에서 분할해서 사용 가능
- mkfs: 파티션을 원하는 파일 시스템으로 포맷하는 명령어
- fdisk를 사용한 파티션 분할, mkfs로 디스크 포맷까지 완료했다면 mount를 통해 사용 가능하도록 등록해야 함 (디렉터리 생성 후 mount)
- mount 후 /etc/fstab 파일에 설정으로 입력해 재부팅 후에도 자동으로 마운트 되어있을 수 있도록 함
RAID
- 여러 개의 디스크를 하나의 디스크처럼 사용하는 방식
- 하드웨어 RAID와 소프트웨어 RAID로 구분
- 비용 절감 + 신뢰성 향상 + 성능 향상의 효과
- mdadm: RAID 생성
각 RAID 방식의 비교
Linear RAID
- 최소 두 개의 하드디스크가 필요
- 두 개 이상의 하드디스크를 한 개의 볼륨으로 사용
- 앞 디스크부터 차례로 저장
- 100%의 공간 효율성 (비용 저렴)
RAID 0
- 최소 두 개의 하드디스크가 필요
- 모든 디스크에 동시에 저장됨
- 100%의 공간 효율성 (비용 저렴)
- 신뢰성 낮음
- 빠른 성능을 요구하되 전부 잃어버려도 큰 문제가 되지 않는 자료가 적당
RAID 1
- Mirroring이라고 부름
- 데이터 저장에 두 배의 용량이 필요
- Fault-tolerance 제공 (신뢰성 높음)
- 공간 효율 나쁨
- 저장 속도, 성능은 변화 없음
RAID 5
- RAID 1의 안정성, + RAID 0의 공간 효율성
- 최소 세 개 이상의 하드디스크
- 오류가 발생했을 때는 Parity를 이용해 데이터 복구
- 디스크 개수 - 1의 공간을 사용
- 어느 정도 결함을 허용해 주면서 공간 효율이 좋음
RAID 6
- RAID 6 방식은 RAID 5 방식이 개선된 것
- 공간 효율은 RAID 5보다 약간 떨어지지만 두 개의 디스크가 동시에 고장나도 데이터에는 이상이 없도록 함
- 최소 네 개의 하드디스크 필요
- 공간 효율, 성능은 RAID 5보다 약간 떨어지는 반면에 데이터에 대한 신뢰도는 좀 더 높아지는 효과
RAID 10
- 최소 네 개의 하드디스크 필요
- 두 개의 디스크를 RAID 0으로 묶어 용량을 늘리고, 각 pair를 또 묶어서 복제본을 만듦
- 신뢰성과 성능을 모두 잡을 수 있지만, 디스크의 낭비가 발생
LVM (Logical Volumn Manager)
- 하드디스크를 통합한 뒤 논리적인 크기로 분할하는 기법
- 여러 개의 하드디스크를 한 개의 파일 시스템으로 사용
구성
- Physical Volume: /dev/sda1, /dev/sdb1 등의 파티션
- Volume Group: 물리 볼륨을 합쳐서 한 개의 물리 그룹으로 만드는 것
- Logical Volumn: 볼륨 그룹을 한 개 이상으로 나눠서 논리 그룹으로 나눈 것
Shell
- 사용자와 커널 중간에서 사용자에게 명령을 받아 그것을 해석하고 프로그램을 실행할 때 사용하는 인터페이스
bash
- 기본 Shell은 bash (Bourne Again Shell)
특징
- Alias 기능 (명령어 단축 기능)
- History 기능
- 연산 기능
- Job Control 기능
- 자동 이름 완성 기능
- 프롬프트 제어 기능
- 명령 편집 기능
Shell의 명령문 처리 방법
$ rm -rf /mydir
환경 변수
- echo $환경변수이름 으로 확인 가능
- export 환경변수=값 으로 환경 변수 값을 설정