Chapter 1 리눅스의 이해
1. 리눅스 종류 및 특징
Slackware | 가장 오래된 배포판 |
Debian | 패키지 설치 및 업그레이드가 편리 예 : Ubuntu, Kali Linux 등 |
Ubuntu | 데비안 기반 고유한 데스크톱 환경인 유니티(Unity) 사용 편리한 사용자 인터페이스 제공 6개월마다 새로운 버전 배포 |
Redhat | 유료인 RHEL과 무료인 Fedora로 나뉜다. 예 : CentOS, Fedora, RHEL |
RHEL | 상용 리눅스 배포판 상용 패키지는 유료, 소스코드는 무료 공개 계약기간동안에는 기술지원 및 업그레이드 자유로움 18~24개월마다 새로운 버전 공개, 라이선스 별도 판매X |
Fedora | RPM기반 소프트웨어를 포함 6개월마다 새로운 버전 배포 |
CentOS | 레드햇 리눅스와 완벽하게 호환되는 기업용 무료 배포판 플랫폼을 제공할 목적으로 개발, 자체 커뮤니티에 의해 관리 레드햇 기술지원은 받지 않음 |
SuSe | 독일에서 개발, 배포, 유럽에서 많이 사용 풍부한 기능, 안전성, 보안 기능 포함 |
Kali | Offensive Security가 개발한 오픈소스 리눅스 배포판 해킹도구와 설명서 포함 |
cf) 국내에서 배포하는 리눅스 : Sulinux
2. 리눅스 라이센스
1) GNU
- GNU is NOT Unix라는 재귀적 약어(유닉스를 배포X, 유닉스와 비슷한 것을 배포O)
- 리차드 스톨만이 설립한 자유 소프트웨어 재단(FSF)에서 진행하는 프로젝트
- 많은 GNU 프로그램이 GCC로 컴파일되었다.
cf) GCC : GNU 프로젝트에서 개발되어 널리 쓰이고 있는 컴파일러
2) GNU GPL(General Public License)
- FSF에서 만든 자유 소프트웨어 라이센스
- 1989년 1차 버전, 2007년 3차 버전 발표
- 어떤 형태(무료 혹은 유료)로든 외부에 공표, 배포할 때는 전체 소스코드를 공개해야 한다.
3) GNU LGPL
- GPL보다 완화된(Lesser) 조건의 오픈소스 소프트웨어 라이센스
- LGPL 이용하여 개발하였을 경우, 프로그램 소스코드 공개하지 않아도 되지만 LGPL 소스코드 사용하였음을 명시해야 한다.
- 단순히 이용하는 것이 아닌 이를 수정 또는 이로부터 파생된 라이브러리를 개발하여 배포하는 경우, 전체 소스코드 공개해야 한다.
4) BSD(Berkeley Software Distribution)
- 버클리 대학의 오픈소스 소프트웨어 라이센스
- 소프트웨어의 개작, 수정, 배포에 제한이 없다.
- 소스코드 공개의무 없으며, 상용 소프트웨어에서도 자유롭게 사용가능
5) Apache License
- 아파치 소프트웨어 재단에서 개발한 소프트웨어 라이센스
- 아파치 2.0 라이센스는 누구나 해당 소프트웨어로부터 파생된 소프트웨어 개발할 수 있고, 저작권을 양도, 배포할 수 있다.
- 아파치 소프트웨어 전체 또는 일부를 개인적 또는 상업적으로 사용할 수 있다.
- 재배포시 원본 또는 수정한 소스코드 반드시 포함시켜야 하는 것 아니며, 아파치 라이센스 2.0을 포함시켜야 하며, 아파치 소프트웨어 재단에서 개발된 소프트웨어라는 것을 명시해야 한다.
6) MIT License
- BSD 라이센스를 기초로 작성된 라이센스
- 누구나 개작할 수 있고, 수정본의 재배포시 소스코드 비공개로 할 수 있다.
- 예 : X Window System(X11)
7) MPL(Mozila Public License)
- 오픈소스이며 자유 소프트웨어 라이센스
- 1.0 버전은 넷스케이프 커뮤니케이션즈 코퍼레이션사의 미첼 베이커에 의해 개발
- 1.1 버전은 모질라 재단이 개발
- 변형 BSD 라이센스와 GNU GPL 라이센스의 혼합적 성격
- 소스코드와 실행파일의 라이센스를 분리, 사용한 MPL과 수정한 MPL 소프트웨어에 대한 공개의무만 가지며, 별도 소스코드와 실행파일은 독점적인 라이센스를 가진다.
3. 리눅스 역사 및 철학
(1) 역사
- 1965년 MIT, AT&T 벨 연구소, General Electronic에서 Multics라는 운영체제 공동개발
- 1969년 AT&T 벨 연구소의 켄 톰슨이 최초 UNIX 운영체제 개발
- 1971년 AT&T 벨 연구소의 데니스 리치가 C언어 개발
- 1980년 MIT 연구소의 리차드 스톨만이 GNU 프로젝트 시작, 85년 FSF 설립 후 GNU 선언문 발표
- 1987년 앤드류 타넨바움이 Minix(교육용 유닉스) 개발
- 1991년 핀란드 헬싱키 대학의 리누스 토발츠가 Minix의 커널 소스를 수정하여 GNU 시스템에 적합한 커널 개발
- 1991년 9월 0.01 버전 리눅스 커널이 핀란드 대학교와 FUNET의 FTP 서버에 공개, 10월에 0.02 버전 출시
- 1994년 리눅스 커널 버전 1.0 공개
- 1996년 리눅스 커널 버전 2.0 공개
(2) 철학
- 1991년 리누스 토발츠에 의해 최초 공식 버전 0.02 발표
- 유닉스 시스템의 표준 인터페이스인 POSIX를 기반으로 하고 있으나, 진정한 자유 소프트웨어 구현을 위해 유닉스 소스코드 사용을 배재하고 모든 소스코드 재작성
- 최고의 이식성을 가지는 운영체제
- GNU GPL : GNU 정신에 입각하여 모든 프로그램의 소스코드 공개하는 것이 목적, GNU GPL이 적용된 리눅스 소스코드는 누구나 자유롭게 개작, 수정, 배포 가능
- GNU 정신 : 사람을 경쟁적으로 만들고 상업적으로 만들며 폐쇄적으로 만드는 정책에 반대하는 정신
4. 리눅스 특징 및 장단점
(1) 특징
- 오픈소스 운영체제로 개발, 개작, 배포가 자유로우며 독점권을 가질 수 없다.
- 멀티 유저, 멀티 태스킹을 지원
- 다양한 파일 시스템(계층형 트리 구조), 강력한 네트워킹 지원
- 뛰어난 이식성, 유연성, 확장성, 안정성, 보안성
- 가격 대비 성능 우수, 다양한 응용프로그램 제공, 다양한 배포판 존재
- 리눅스 커널은 C언어로 작성됨, 유닉스와 유사
- 리눅스 커널 버전이 2(주 버전).3(부 버전).x는 불안정 버전, 부 버전이 짝수이어야 안정 버전
cf) 커널 : 운영체제의 중심에 위치하여 모든 작업에 우선하는 프로그램으로 메모리 관리, 파일시스템 관리, 프로그래밍 인터페이스 제공 등 운영체제의 기본적인 기능들을 제공하는 핵심 부분
(2) 장단점
- 장점 : 유닉스와 완벽한 호환, POSIX 규격, 안정적인 운영체제, 하드웨어 효율적 운영
- 단점 : 공개용 및 무료 운영체제로는 기술지원 받기 어려움, 특정 하드웨어에 대한 지원 부족, 한글 지원 미흡, 처음 사용 어려움
Chapter 2 리눅스의 설치
1. 리눅스 설치 및 유형
1) 배포판 다운로드
- 배포판 : 리눅스에서 작동하는 여러 종류의 프로그램을 패키지로 모아놓은 것
2) 리눅스 설치 유형(미니멀, 데스크톱, 서버, 업그레이드, 워크스테이션)
- Minimal : 필수 패키지만 설치
- Desktop : 개인용 컴퓨터에 적합한 패키지 설치, 문서 작성, 멀티미디어, 그래픽 도구 등 설치
- Server : Basic서버, Web서버, FTP서버, DB서버 등이 있다.
- Laptop : 노트북 PC 관련 패키지 설치
- Virtual Host : 가상화 시스템 관련 패키지 설치
- Software Development Workstation : 소프트웨어 관리를 위한 도구를 포함한 패키지 설치, 소스 컴파일 도구 포함
- Custom : 사용자에게 필요한 패키지를 직접 선택하여 설치
3) 배포판 설치
- Custom을 제외한 설치유형을 선택하면 설치과정에서 자동으로 하드디스크를 재구성하므로 기존자료 모두 삭제된다.
- 중요한 자료는 리눅스 설치전 백업필요
4) 리눅스 OS 구성 계층도
- 하드웨어 -> 커널 -> 쉘 -> 유틸리티
5) 기타
- 리눅스는 CD-ROM, 하드디스크, USB, 네트워크 등을 이용하여 설치할 수 있다.
- 리눅스 설치된 상태에서 Windows 설치했을 때 복구 디스크 없는 경우 대처방법 : linux-install cd를 CD-ROM 드라이브에 넣고 컴퓨터 시작 -> 설치화면 프롬프트에서 vmlinuz root=/dev/hda6 명령을 입력 -> 리눅스의 root로 로그인하여 콘솔 창에서 /sbin/lilo 또는 /sbin/grub-install 입력 -> 확인을 위해 리부팅하기
- glinux : Google의 워크스테이션 운영체제로 사용되는 데비안 기반 리눅스 배포판
- wlinux : 윈도 서브시스템에서 구동되는 리눅스로, 데비안 기반이며 MS가 개발
- qlinux : 초보 리눅스 사용자에게 설치과정 중 가장 힘든 파티션 부분을 없애고 윈도우상에서 쉽고 편리하게 설치가능
- flinux : C언어로 작성된 윈도 바이너리, 윈도우에서 수정되지 않은 리눅스 바이너리 실행하는데 사용, Flinux는 윈도 운영체제에서 실행할 수 있도록 리눅스 바이너리를 번역
- 리눅스 설치과정에서 기본적 설정사항 : 키보드, 마우스, 모니터 등 (스캐너X)
- boot.img : 리눅스 설치 부팅 디스크를 만들 때 사용되는 부팅 이미지
- 리눅스 시스템을 초기화하기 전에 컴퓨터와 컴퓨터의 console 단말장치를 설치해야 하는데, console은 컴퓨터가 처음 시작될 때 규정되는 유일한 단말장치(리눅스가 설치된 컴퓨터에 직접 연결된 입출력 장치)
- 터미널 : 네트워크 장비나 케이블 등을 이용하여 보다 먼 거리까지 연결된 장치(시스템에 데이터 입력하거나 표시하는데 사용하는 장치)
2. 리눅스 부트
- 복구모드(Rescue mode) : 리눅스로 부팅할 수 없어서 문제점 고치고 싶을 때 들어간다.
- 리눅스 부트 디스크 : 멀티 부트 로더가 이상이 생겨 부팅이 되지 않는 경우를 대비하여 생성하는 것
(1) 부트 매니저(Boot Manager)
- 사용자 PC에 다양한 운영체제를 설치하여 사용할 경우, 부팅할 때 운영체제를 선택하여 부팅하는 기능
(2) 리눅스 부팅 과정
- ROM-BIOS 실행 -> 부트 로더 실행 -> 스와퍼 프로세스 실행 -> init 프로세스 실행 -> 부트 레벨 결정 -> rc.sysinit 스크랩트 실행 -> rcx.d 스크랩트 실행 -> X윈도 실행
(3) 부트 로더(Boot Loader)
- 부트스크랩 로더의 약어
- 컴퓨터를 사용자가 사용할 수 있도록 하드디스크에 저장된 운영체제를 주기억장치(RAM)에 적재해주는 프로그램
- 운영체제가 실행되기 전에 미리 실행되어 커널이 안정적으로 실행되기 위한 모든 관련 작업을 완료하는 프로그램
- 멀티 부팅 : 하나의 시스템에 여러 운영체제 있는 경우, 선택하여 부팅할 수 있도록 한다.
1) 종류 및 특징
LILO (Linux Loader) |
- 다양한 운영체제를 선택하여 사용가능 - 반드시 MBR(Master Boot Record)에 설치되어야 하는 것은 아니다. - 사용방법 그래픽 로그인할 때, Linux와 다른 운영체제 보인다. text 로그인일 때, Tab키 눌러주면 사용가능한 운영체제 보인다. lilo -u 입력하면 설치된 LILO 삭제가능 - LILO 설정파일(/etc/lilo.conf) boot=/dev/hda : LILO 설치될 위치 map=/boot/map : LILO에 의해서 자동으로 생성되는 파일 install=/boot/boot.b : 부트섹터 위치정보를 가진 파일 timeout=숫자 : 키보드 입력 없을시 자동 부팅시간(단위 : 1/10초) - 컴퓨터 바이오스(BIOS) 정보를 참조하여 부팅정보를 얻는다. - LILO boot: 프롬프트가 나오지 않고 LI문자만 출력하고 부팅안되는 경우 미묘한 geometry 불일치에 의해서 또는 Map Installer 실행없이 /boot/map이 이동되어 두번째 부트섹터 로더가 잘못된 주소로 로드된 경우이다. |
GRUB (Grand Unified Bootloader) |
- 리눅스 운영체제 외에도 사용가능, LILO 단점을 보완(lilo 명령 불요), GNU에서 개발 - 대화형이므로 커널의 경로와 파일이름만 알면 부팅가능 - 메뉴 설정환경을 지원하며 부트 정보 설정가능 - IDE 하드디스크를 장착한 순서대로 인식한다. - 부트 디스크를 통한 부팅을 지원하지 않는다. - 역할 : 리눅스의 명령어 설치, 리눅스 설치에 필요한 크기를 확보, 리눅스 부트 디스크 생성 |
2) GRUB
- 환경설정 파일내용(cat /boot/grub/grub.conf 입력시 나옴)
default | 초기 부팅화면에서 메뉴를 선택하지 않았을 경우, 기본 부팅메뉴 선택 각 메뉴의 번호는 0번부터 시작하며, 첫번째 부팅메뉴는 0번, 두번째는 1번과 같은 순서로 지정 |
timeout | 초기 부팅화면의 대기시간을 초단위로 설정 대기시간동안 메뉴 선택하지 않는다면 default 메뉴로 부팅 |
splashimage | 초기 부팅화면 배경이미지 설정 |
password | 부팅시 GRUB 모드로 들어가기 위한 암호화된 패스워드 password 항목이 없으면 패스워드 없이 GRUB 모드로 들어갈 수 있다. |
title | 초기 부팅화면의 메뉴에 나타나는 제목이며, 간단한 설명문 적어도 됨 |
root | 해당 메뉴로 부팅시 사용할 루트장치를 지정 루트 장치 설정하는 형식 : root (하드디스크 장치명, 부트 파티션명) |
kernel | 커널이미지 파일의 경로지정 |
initrd | SCSI 하드디스크 사용하는 경우에는 반드시 지정해야 하는 항목(안하면 kernel panic 오류발생) 해당 메뉴로 부팅시 사용할 initrd 이미지를 지정 |
- GRUB 편집모드 : 초기화면에서 C키 입력 또는 E키 입력
- 편집모드에서 사용하는 키
a | 커널과 관련된 매개변수 추가 |
b | 선택된 부트메뉴로 시스템 부팅 |
c | 대화식으로 직접 입력할 수 있는 모드 |
d | 선택된 행 삭제 |
e | 선택된 부트메뉴 편집 |
o | 새로운 행을 커서 다음 행에 삽입 |
O | 새로운 행을 커서 앞 행에 삽입 |
esc | GRUB 이전 메뉴로 이동 |
(4) 런 레벨(Run Level)
- 리눅스 부팅의 마지막 단계에서 모든 프로세스의 부모 프로세스인 init 생성된다.
- 부팅시 init 프로세스가 참조하는 것이 런 레벨, 런 레벨은 0부터 6까지 있다.
- 런 레벨 실행 스크립트 파일(ls -l 로 확인가능)
init.d | 여러가지 서비스 데몬들을 시작하고 종료, 재시작하는 스크립트 파일들이 저장됨 |
rc.local | 부팅시 자동으로 명령어 스크립트 수행하며, 일반적으로 시스템 부팅시 자동실행될 명령어를 추가하여 사용하는 스크립트 파일 |
rc0.d~rc6.d | init 프로세스가 런 레벨을 결정하면 각각의 런 레벨에 맞는 서비스를 실행해야 하는데, 이때 각 런 레벨별로 실행해야 하는 서비스들의 디렉터리 |
- 런 레벨 설정 : cat /etc/inittab 또는 runlevel 입력
런 레벨 | 운영모드 | 설명 |
0 | Halt | 시스템 종료 |
1 | Single | 단일 사용자 모드(CLI) |
2 | Multi User Mode | 다중 사용자 모드(CLI), 네트워크 사용 불가 |
3 | Multi User Mode | 다중 사용자 모드(CLI), 콘솔 모드(텍스트 모드)라고 불림 |
4 | Not Used | 사용하지 않음 |
5 | Multi User Mode | 다중 사용자 모드(GUI, X윈도) |
6 | Reboot | 재시작 |
(5) 로그인 및 로그아웃
1) 로그인
- 로그인 과정 : 로그인 프롬프트에서 아이디/패스워드 입력, 입력값을 /etc/passwd 파일비교 후 일치하면 로그인 허용
- 로그인 프롬프트 예 : terminal에서 [root@localhost ~]# 또는 [test@localhost ~]$
- 로그인 메시지 출력
/etc/issue | 로컬접속시 메시지 출력 |
/etc/issue.net | 원격접속시 메시지 출력 |
/etc/motd | 로컬,원격 접속시 로그인 성공 후 메시지 출력 |
2) 로그아웃
- 명령어 종류 : logout, exit 또는 ctrl + D 키 입력
- 자동 로그아웃 설정 : cat /etc/profile 에서 export TMOUT=숫자로 되어 있는 것
(6) 시스템 종료 명령어
1) shutdown
- 시스템을 종료하거나 재시작하는 명령어
- 현재 실행 중인 프로세스나 저장되지 않은 데이터를 안전하게 디스크에 저장하고, 모든 파일시스템을 umount 시킨 후 시스템을 종료
- 형식 : shutdown [옵션] [시간] [경고메시지]
-c | 예약된 종료 명령을 취소 |
-h | 시스템을 안전하게 종료 |
-k | 종료 명령을 수행하지 않고 경고 메시지만 출력 |
-P | 시스템 강제 종료 |
-r | 시스템 재시작 |
- 예 : shutdown -h now -> 즉시종료, shutdown -h +5 -> 5분후 종료, shutdown -h 18:00 -> 18시에 종료, shutdown -r now -> 즉시 재시작
2) init
- 시스템 종료하거나 재시작하는 명령어
- 형식 : init [런 레벨]
- 예 : init 0 -> 시스템 종료, init 6 -> 시스템 재시작
3) halt
- 시스템 종료 명령어
- 형식 : halt [옵션]
- 옵션으로는 -f가 있다. 시스템 강제종료를 의미
- 예 : halt -> 모든 프로세스 종료되지만 전원은 꺼지지 않는다. halt -f -> 모든 프로세스 종료하고 전원 꺼진다.
4) poweroff
- 시스템 종료 명령어
- 형식 : poweroff
(7) 시스템 재시작 명령어(reboot)
- 형식 : reboot [옵션]
- 옵션으로는 -f가 있다. 시스템 강제 재시작을 의미
3. 파일 시스템과 파티션
(1) 파일 시스템
- 기능 : 파일에 대한 다양한 종류의 접근제어 방법을 제공, 파일 생성, 수정, 삭제 등을 관리, 파일의 무결성 유지와 보안 유지기능(읽기전용으로 하는 등) 제공, 데이터의 백업 및 복구기능 제공, 데이터의 효율적 저장과 관리를 위한 방법 제공
- 지원하는 파일 시스템 종류 : 리눅스(ext, ext2, ext3, ext4), 네트워크(SMB, CIFS, NFS), 윈도우(FAT, VFAT, NTFS), 유닉스(HPFS, SysV), 저널링(JFS, XFS, ReiserFS), CD-ROM(iso9660), 클러스터링(Redhat GFS, IBM GPFS, IBM SanFS, Oracle OCFS2)
- ext2 : 파일명 대소문자 구분, 일반파일 및 장치파일 및 디렉터리 모두 하나의 파일개념으로 취급, 파일명 내의 공백이나 필드 분리자 포함가능, 255바이트 크기로 파일이름 제한, 경로명은 제한X
- 일반적으로 Linux 파일시스템에서 확장자의 의미는 없으며, 확장자 부여하지 않아도 된다.
(2) 파티션
- 하나의 물리적인 디스크를 여러 개의 논리적인 디스크로 분할하는 것을 의미, 실린더를 기준으로 나뉜다.
- Disk Druid : GUI 환경으로 사용자가 쉽게 파티션 분할할 수 있도록 지원하는 유틸리티
- 파티션 상태 확인하는 파일 : /proc/partitions
- 종류
기본 파티션(Primary Partition) | 하나의 하드디스크에는 최대 4개의 기본파티션 생성가능 4개 이상의 파티션이 필요한 경우에는 확장 파티션 내에 논리 파티션을 만듬 기본 파티션 3개 사용 후 확장 파티션 선언가능 |
확장 파티션(Extend Partition) | 하드디스크를 5개 이상의 파티션으로 나누고자 할 때 만드는 파티션 논리 파티션을 만들 수 있게 하는 공간으로 디스크당 하나만 만들 수 있음 |
논리 파티션(Logical Partition) | 하나의 하드디스크에서 논리 파티션은 최대 12개까지 생성가능 |
스왑 파티션(Swap Partition) | 하드디스크 일부를 주기억장치(RAM)처럼 사용하는 가상기억장치 리눅스 설치시 반드시 필요한 영역 기본 파티션 또는 논리 파티션에 생성 스왑영역의 크기는 일반적으로 RAM의 2배로 설정 |
- 장점 : 부팅시간 단축, 고 안정성, 백업과 업그레이드가 편리
- 형식 : fdisk [옵션] [장치명]
- 옵션
-a | 부팅 가능한 플래그로 지정 |
-l | 알려진 파티션 유형 목록 출력 |
-m | 이 목록 출력 |
-n | 새로운 파티션 생성 |
-t | 파티션 유형 변경 |
-w | 파티션 정보를 디스크 테이블에 기록 |
-p | 파티션 정보 확인 |
-q | 작업종료 후 빠져나감 |
- 디스크 유형 및 장치명
플로피 디스크 | 첫번째 플로피 디스크 | /dev/fd0 |
두번째 플로피 디스크 | /dev/fd1 | |
IDE 유형 디스크 | Primary Master | /dev/hda |
Primary Slave | /dev/hdb | |
Secondary Master | /dev/hdc | |
Secondary Slave | /dev/hdd | |
SCSI 유형 디스크 | 첫번째 드라이브 | /dev/sda |
두번째 드라이브 | /dev/sdb | |
CD-ROM | SCSI CD-ROM | /dev/scd0 또는 /dev/sr0 |
- 장치명 및 파티션 번호 예 : /dev/sd a 2 -> SCSI 유형 하드디스크의 첫번째 물리적인 하드디스크에 두번째 파티션
(3) 디렉터리(계층적 트리구조)
/ | 최상위 디렉터리로 루트 디렉터리라고 함 |
/bin | System Binary의 약어, 이진파일, 리눅스에서 기본 명령어 저장됨 |
/usr | 시스템에 사용되는 각종 프로그램이 설치됨 |
/etc | 리눅스 시스템의 각종 환경설정 파일과 디렉터리가 저장됨 fstab : 파일 시스템 정보를 저장, 리눅스 부팅시 마운트 정보를 저장하는 파일 hosts : 운영체제가 호스트 이름을 IP주소에 매핑할 때 사용하는 파일 passwd : 사용자 로그인 계정, 암호화된 비밀번호, UID, GID 등을 저장하는 파일 |
/sbin | 시스템 관리를 위한 명령어가 저장됨 |
/lib | 프로그램의 각종 라이브러리 파일이 저장됨, 유틸리티와 패키지 등의 파일 포함 |
/var | 시스템에서 사용되는 동적 파일 저장함 각종 시스템 로그파일, 사용자 로그인에 대한 로그기록 메일서버 운영한다면 사용자에게 전송된 메일을 임시로 저장 |
/tmp | 임시 디렉터리, Stick Bit가 설정되어 있음 |
/root | 시스템 관리자(root)의 홈 디렉터리 |
/proc | 시스템의 각종 프로세스, 프로그램 정보, 하드웨어 정보가 저장됨 가상 파일 시스템으로 하드디스크에 물리적인 용량을 가지지 않음 |
/dev | 시스템의 각종 장치에 접근하기 위한 장치 드라이버가 저장됨 |
/home | 일반 사용자의 홈 디렉터리 |
- /opt : 추가된 응용프로그램 패키지가 설치되는 디렉터리
- /boot : 일반적으로 부팅에 필요한 시스템 파일이 위치, 리눅스 커널과 부트로더가 존재
(4) LVM(Logical Volume Manager)
- 논리 볼륨 관리자라는 의미로, 여러 개의 물리적인 하드디스크를 논리적인 디스크로 할당하여 유연하게 관리하게 도움
- 여러 개 의 물리적인 하드디스크를 하나의 대용량 파일 시스템으로 만든다.
- 서버 운영시 대용량 저장공간이 필요할 때 주로 사용
(5) RAID(Redundant Array of Independent Disks)
- 여러 개의 물리적인 하드디스크를 하나의 논리적인 디스크로 인식하게 만드는 기술
- 중요한 데이터를 가지고 있는 서버에 주로 사용되며, 여러 개의 하드디스크에 동일한 데이터를 다른 위치에 중복해서 저장하는 기술
- 종류 : 하드웨어 RAID(안정적이지만 고가), 소프트웨어 RAID(성능향상 적고 안정성 떨어짐, 주로 운영체제 안에서 구현)
- 레벨 구조
RAID 0 | 빠른 데이터의 입출력을 위해 스트라이핑을 사용 하나의 디스크에 오류 발생하면 데이터 잃어버릴 수 있음 |
RAID 1 | 두 개 이상의 디스크를 미러링을 통해 하나의 디스크처럼 사용 완전히 동일하게 데이터 복제하기 때문에 사용량이 절반밖에 안됨 하나의 디스크에 오류 발생시 미러링된 디스크를 통해 복구 가능 |
RAID 0+1 | 0과 1을 결합한 방식, 최소 4개 이상의 디스크에서 먼저 2개씩 스트라이핑으로 묶고 이것을 다시 미러링으로 결합하는 방식 |
RAID 2 | 오류 정정을 위해 해밍코드를 사용하는 방식, 비트 단위에 해밍코드를 적용 |
RAID 5 | 3개 이상의 디스크를 사용하여 하나의 디스크처럼 사용하고, 각각의 디스크에 패리티 정보를 가지고 있는 방식 하나의 디스크에 오류발생시 다른 두 개의 디스크를 통해 복구가능 패리티 디스크를 별도로 사용하지 않으므로 병목현상 발생하지 않는다. |
(6) 기타
- rpm : 리눅스에서 가장 많이 사용되는 패키지 관리 툴, Redhat에서 제공, 리눅스 설치, 제거, 업그레이드 등 편리 제공
- gtk : 김프 툴킷의 약어, X윈도 시스템을 위한 위젯 툴킷 중 하나
Chapter 3 기본 명령어
1. 사용자 생성 및 계정 관리
(1) 사용자 관련 명령어
1) useradd
- 사용자 계정을 생성하는 명령어
- 생성된 사용자 계정정보는 /etc/passwd, /etc/shadow, /etc/group 파일에 저장된다.
- 형식 : [root@localhost ~]# useradd [옵션] [계정명]
- 옵션
-c | 사용자 계정에 설명 추가 |
-d | 사용자 계정의 홈 디렉터리 지정 |
-e | 사용자 계정의 유효기간 설정 |
-f | 패스워드 만료된 후 계정의 만료날짜 지정 |
-G | 사용자 계정의 새로운 그룹 추가 |
-s | 사용자 계정의 로그인 기본 셸 지정 |
- 활용 예 : useradd -c linux test -> test 계정에 linux라는 설명 추가하여 사용자 계정 생성
2) passwd
- 사용자 계정의 패스워드 변경 및 관리하는 명령어 (최소 6자 이상, 대소문자 구분, 특수문자와 숫자 포함가능)
- 생성된 패스워드의 정보는 암호화되어 /etc/shadow 파일에 저장된다(shadow 활성화인 경우).
- 형식 : [root@localhost ~]# passwd [옵션] [계정명]
- 옵션
-d | 사용자 계정의 패스워드 삭제 |
-l | 사용자 계정을 잠금(해당 계정으로 로그인 불가) |
-S | 계정 상태 출력(PS : 정상, NP : 패스워드 설정안됨, LK : 잠금상태) |
-u | 잠금상태의 사용자 계정을 해제 |
- 활용 예 : passwd test -> New password : 1234 -> Retype : 1234 --> test 계정의 비밀번호를 1234로 변경
3) su
- Switch User의 약어로, 현재 사용자 계정에서 로그아웃하지 않고 다른 사용자 계정으로 전환하는 명령어
- 형식 : [root@localhost ~]# su [옵션] [사용자] [셸 변수]
- 옵션
-, -l, --login | 사용자 환경변수를 적용하여 로그인 |
-c | 셸 실행하지 않고 주어진 명령어 실행 |
-s | 지정된 셸로 로그인 |
- 활용 예 : su root -> root 사용자로 전환
(2) 사용자 관련 파일
1) /etc/default/useradd 파일
- 사용자 계정 생성시 가장 먼조 참조하는 파일
- vi 편집기 또는 useradd -D 명령어로 확인 및 변경 가능
- 파일내용
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
- 설정값
GROUP | 새로 사용자 계정 생성시 기본적으로 소속될 그룹의 GID 지정 |
HOME | 새로 사용자 계정 생성시 홈 디렉터리 지정 |
INACTIVE | 새로 사용자 계정 생성시 패스워드 사용기간 만료된 후 계정이 사용불가능하게 되는 날짜 지정 (0이면 사용불가능, -1이면 무한대) |
EXPIRE | 새로 사용자 계정 생성시 패스워드 만료날짜 지정 |
SHELL | 새로 사용자 계정 생성시 기본 셸 지정 |
SKEL | 새로 사용자 계정 생성시 추가되는 홈 디렉터리에 복사할 파일들이 있는 디렉터리의 경로 |
CREATE_MAIL_SPOOL | 새로 생성되는 사용자 계정의 메일함 생성여부 지정 |
2) /etc/login.defs 파일
- 새로 사용자 계정 생성시 두번째로 참조하는 파일, 기본값을 정의하는 파일
- 파일내용
#QMAIL_DIR Maildir
MAIL_DIR /var/spool/mail
#Password aging controls:
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
# Min/max values for automatic uid selection in useradd
UID_MIN 1000
UID_MAX 60000
CREATE_HOME yes
# The permission mask is initialized to this value. If not specified.
# The permission mask will be initialized to 022.
UMASK 077
# This enables userdel to remove user groups if no members exist.
USERGROUPS_ENAB yes
# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512
- 설정값
MAIL_DIR | 메일 디렉터리 지정 |
PASS_MAX_DAYS | 패스워드 만료일 |
PASS_MIN_DAYS | 패스워드 변경 후 다시 변경할 수 있는 최소 일수 |
PASS_MIN_LEN | 패스워드 최소 길이 |
PASS_WARN_AGE | 설정된 일수가 남았을 때, 패스워드 만료 경고메시지 보냄 |
UID_MIN | 사용자에게 할당할 수 있는 최소 UID 번호 |
UID_MAX | 사용자에게 할당할 수 있는 최대 UID 번호 |
CREATE_HOME | 홈 디렉터리 생성여부 |
UMASK | 사용자 계정 생성시 홈 디렉터리의 UMASK 값 설정 |
USERGROUPS_ENAB | userdel 명령시 그룹도 삭제여부 |
ENCRYPT_METHOD | 암호화 방법 |
3) /etc/skel 디렉터리
- /etc/default/useradd 파일에서 SKELL 값은 /etc/skel 디렉터리를 의미
- useradd 명령어 사용시 /etc/skel 디렉터리에 있는 파일들이 새롭게 생성되는 사용자의 홈 디렉터리로 복사한다.
4) /etc/passwd 파일
- 사용자 계정 정보를 저장하고 있는 파일, 로그인시 사용
- 사용자 계정의 UID, GID, 홈 디렉터리 등을 저장
- 7개의 필드로 구성되어 있으며, :(콜론)으로 구분한다.
- 파일내용
test:x:1000:1000:test:/home/test:/bin/bash
- 파일구조 : username:password:uid:gid:comment:homedirectory:shell
5) /etc/shadow 파일
- 사용자의 패스워드가 저장된 파일
- shadow 활성화/비활성화(pwconv/pwunconv)
- 9개의 필드로 구성되어 있으며, :(콜론)으로 구분한다.
- 파일내용
sshd:!!:18185:::::
test:$6$CWA90qcuqNsVFrEw$NvfCN4S1iJHbRfgDGrzaFGOxVJ0jv0::0:99999:7:::
- 파일구조 : username:password:lastchange:mindays:maxdays:warndays:inactive:expire:flag
inactive : 만료 후 비활성화 기간
flag : 예약
- 두번째 필드 분석
$6$CWA90qcuqNsVFrEw$NvfCN4S1iJH
첫번째 $항은 해시암호 알고리즘 종류 -> $6 ($1 : MD5, $5 : SHA256, $6 : SHA512)
두번째 $항은 Salt 값 -> $CWA90qcuqNsVFrEw
세번째 $항은 암호화된 비밀번호 -> $NvfCN4S1iJHbRfgDGrzaFGOxVJ0jv0
! or !! : 계정에 비밀번호가 설정되어 있지 않아 잠가놓은 상태
* : 이 계정을 통해서 아예 로그인을 할 수 없음을 의미
빈 값 : 비밀번호 없이 로그인을 할 수 있는 상태를 의미
(3) 사용자 계정 관리
1) usermod
- 사용자 계정 정보를 변경하는 명령어
- 형식 : [root@localhost ~]# usermod [옵션] [설정값] [계정명]
- 옵션
-c | 설명 변경 |
-d | 사용자 홈 디렉터리 변경 |
-e | 계정 만료일 변경 |
-f | 사용자 계정 유효일 지정 |
-G | 지정한 그룹에 사용자 추가 |
-s | 로그인시 사용할 기본 셸 변경 |
-g | GID 변경 ex) usermod -g IHD ihduser -> ihduser 계정의 그룹을 IHD로 변경 |
-u | UID 변경 |
- 활용 예 : usermod -d /home/test2 test -> test 계정의 홈 디렉터리를 /home/test2로 변경
2) userdel
- 사용자 계정 정보를 삭제하는 명령어
- 옵션지정없이 해당 명령어 실행하면 /etc/passwd, /etc/shadow, /etc/group 파일 사용자 계정 정보 삭제된다.
- 형식 : [root@localhost ~]# userdel [옵션] [계정명]
- 옵션
-r | /etc/passwd, /etc/shadow, /etc/group 파일정보와 /var/spool/mail/계정 파일과 홈 디렉터리 모든 내용 삭제 |
(4) 사용자 정보 조회 명령어
1) users
- 시스템에 로그인한 사용자 정보를 출력하는 명령어 (예 : root root 출력)
2) w
- 시스템에 로그인한 사용자 정보를 자세히 출력하는 명령어
3) who
- 시스템에 로그인한 사용자 정보를 간단히 출력하는 명령어
4) whoami
- 현재 나의 사용자명을 출력하는 명령어 (예 : root라는 사용자만 출력한다는게 user과의 차이점)
5) id
- 시스템에 로그인한 사용자의 uid, gid, group 정보를 출력하는 명령어
2. 그룹 생성 및 그룹 관리
(1) 그룹 관리 명령어
1) groupadd
- 그룹 생성시 사용하는 명령어
- 형식 : [root@localhost ~]# groupadd [옵션] [그룹명]
- 옵션
-g | GID 지정 |
-o | -g 옵션과 같이 사용되며, GID 중복 허용 |
-r | 시스템 그룹 생성시 사용하며, GID 499번 이하 값 지정 |
- 활용 예 : groupadd -g 1004 test2 -> GID가 1004인 test2 그룹 생성
2) groupmod
- 그룹 정보 변경시 사용하는 명령어
- 형식 : [root@localhost ~]# groupmod [옵션] [그룹명]
- 옵션
-g | GID 변경 |
-n | 그룹명 변경 |
- 활용 예 : groupmod -n test2 abc -> test2 그룹명을 abc로 변경
3) groupdel
- 그룹 삭제시 사용하는 명령어
- 형식 : [root@localhost ~]# groupdel [그룹명]
(2) 그룹 관련 파일
1) /etc/group 파일
- 사용자 그룹 정보가 저장되어 있는 파일
- 파일구조 : groupname:password:gid:members
members : 소속된 사용자
2) /etc/gpasswd 파일
- 그룹의 패스워드가 암호화되어 저장되어 있는 파일
- 파일구조 : groupname:password:owner:members
(3) 그룹 정보 조회 명령어(groups)
- 현재 사용자가 속한 그룹 정보를 확인하는 명령어
3. 디렉터리 및 파일
(1) 디렉터리 관련 명령어
1) mkdir
- 디렉터리 생성 명령어
- 형식 : [root@localhost ~]# mkdir [옵션] [디렉터리명]
- 옵션
-m | 디렉터리 생성시 권한 설정 |
-p | 하위 디렉터리를 한번에 생성 |
-v | 디렉터리 생성 후 생성된 디렉터리 정보 출력 |
- 활용 예 :
mkdir test -> test 디렉터리 생성
mkdir -p /home/test1/test2/test3 -> 1,2,3 디렉터리를 하위 디렉터리로 생성
2) rmdir
- 디렉터리 삭제 명령어
- 빈 디렉터리만 가능하며, 해당 디렉터리에 파일이나 디렉터리가 존재하면 삭제할 수 없다.
- 형식 : [root@localhost ~]# rmdir [디렉터리명]
3) cd
- 디렉터리 이동 명령어
- 디렉터리는 절대경로(루트 디렉터리를 포함한 주소를 갖는 경로)와 상대경로(루트 디렉터리 포함X)로 지정할 수 있다.
- 형식 : [root@localhost ~]# cd [대상 디렉터리]
- 옵션
~ | 현재 사용자의 홈 디렉터리로 이동 |
. | 현재 디렉터리 |
.. | 한 단계 상위 디렉터리로 이동 |
- 활용 예 : cd /home -> /home 디렉터리로 이동, cd home -> 현재 디렉터리 내에 존재하는 home 디렉터리로 이동
4) pwd
- 현재 작업 중인 디렉터리를 출력하는 명령어
- 형식 : [root@localhost /etc]# pwd [옵션]
- 옵션
-L | 심볼릭 링크안에 있다면 그대로 심볼릭 링크의 경로를 표시 |
-P | 심볼릭 링크안에 있다면 심볼릭 링크가 가리키는 원래 디렉터리의 경로를 표시 |
(2) 파일 관련 명령어
1) ls
- 디렉터리 안의 파일이나 디렉터리 목록을 출력하는 명령어
- 형식 : [root@localhost ~]# ls [옵션] [디렉터리명]
- 옵션
-a | 숨김파일을 포함한 모든 목록 출력 |
-d | 디렉터리 목록만 출력 |
-F | 파일이 디렉터리인 경우 /(슬래시), 실행파일인 경우 *(별표), 소켓파일인 경우 =(등호), 심볼릭 링크파일인 경우 @를 파일 뒤에 표시하여 출력 |
-l | 파일의 모드, 링크 수, 소유자, 크기 등을 상세히 출력 (라인당 한 파일씩 출력) |
-m | ,(쉼표)로 구분하여 출력 |
-r | 파일이나 디렉터리명의 알파벳 역순으로 출력 |
-R | 하위 디렉터리 목록까지 순차적으로 출력 |
-s | Kbyte 단위로 출력 |
-t | 최종 수정시간을 기준으로 출력 |
2) cp
- 파일이나 디렉터리를 복사하는 명령어
- 형식 : [root@localhost ~]# cp [옵션] [원본파일/디렉터리] [대상 디렉터리]
- 옵션
-b | 원본과 동일한 파일명이 존재할 경우, 원본파일의 복사본을 생성 |
-f | 원본과 동일한 파일명이 존재할 경우, 덮어쓰기 여부를 묻지 않고 복사 |
-i | 원본과 동일한 파일명이 존재할 경우, 덮어쓰기 여부를 묻고 복사 |
-p | 원본과 동일한 모드, 소유자, 시간 정보를 유지하고 복사 |
-P | 원본이 디렉터리 경로와 함께 지정되었을 경우, 지정된 디렉터리 경로를 그대로 복사 |
-r | 하위 디렉터리까지 모두 복사 |
-S | 원본과 동일한 파일명이 존재할 경우, 백업파일을 생성, 백업파일 끝에 붙여질 접미사(확장자)를 원하는 이름으로 지정 |
-u | 원본과 동일한 파일명이 존재할 경우, 원본파일이 대상파일보다 최신파일일 경우에만 복사 |
-s | 심볼릭 링크를 만든다. |
-l | 하드링크 형식으로 복사한다. |
-d | 심볼릭 링크 파일 그대로 복사 |
3) mv
- 파일이나 디렉터리 이동 또는 이름변경시 사용하는 명령어
- 형식 : [root@localhost ~]# mv [옵션] [원본파일/디렉터리] [대상파일/디렉터리]
- 옵션
-b | 원본과 동일한 파일명이 존재할 경우, 원본파일의 복사본을 생성 |
-f | 원본과 동일한 파일명이 존재할 경우, 덮어쓰기 여부를 묻지 않고 복사 |
-i | 원본과 동일한 파일명이 존재할 경우, 덮어쓰기 여부를 묻고 복사 |
-u | 원본과 동일한 파일명이 존재할 경우, 원본파일이 대상파일보다 최신파일인 경우에만 이동 |
-v | 파일 옮기는 과정 출력 |
4) rm
- 파일이나 디렉터리 삭제시 사용하는 명령어
- 형식 : [root@localhost ~]# rm [옵션] [파일/디렉터리명]
- 옵션
-d | 디렉터리 삭제(안에 파일이나 디렉터리 존재시 삭제X) |
-f | 삭제여부 묻지않고 삭제 |
-i | 삭제여부 묻고 삭제 |
-r | 하위 디렉터리를 포함한 모든 파일 삭제 |
-v | 삭제 과정을 출력 |
5) touch
- 파일크기가 0바이트인 빈 파일 생성하는 명령어
- 현재 시간으로 파일의 접근시간, 수정시간, 변경시간 등의 타임스탬프를 변경하는 명령어
- 형식 : [root@localhost ~]# touch [옵션] [설정값] [파일/디렉터리명]
- 옵션
-a | 현재 시간으로 파일의 접근시간, 변경시간을 수정 |
-c | 기존에 파일이 없으면 생성X |
-d | 지정한 시간으로 접근시간, 수정시간 변경되고, 변경시간은 현재 시간으로 수정 |
-m | 현재 시간으로 수정시간, 변경시간을 수정 |
-r | 지정한 파일의 접근시간, 수정시간으로 파일이 수정되고, 변경시간은 현재 시간으로 수정 |
-t | 지정한 시간으로 접근시간, 수정시간이 수정되고, 변경시간은 현재시간으로 수정 |
- 활용 예 :
touch test.txt -> test.txt 라는 파일 존재하지 않을 경우 생성
touch -t 202010311045 test.txt -> 2020년 10월 31일 10시45분으로 수정
6) file
- 파일의 유형 및 속성 확인시 사용하는 명령어
- 형식 : [root@localhost ~]# file [옵션] [파일/디렉터리명]
- 옵션
-b | 지정한 파일명은 출력하지 않고, 유형만 출력 |
-f | 파일목록에서 지정한 파일들에 대해서만 명령 실행 |
-i | MIME 타입 문자로 출력 |
-L | 심볼릭 링크 파일을 추적하여 원본파일 정보 출력 |
-z | 압축된 파일의 내용 출력 |
7) find
- 주어진 조건에 맞게 파일이나 디렉터리 검색하여 경로 출력하는 명령어
- 형식 : [root@localhost ~]# find [경로] [옵션] [설정값1, 설정값2, ...]
- 검색 조건이 둘 이상이면 -o(or) -a(and) 및 ()을 추가하여 우선순위 지정할 수 있다.
- 옵션
-delete | 검색된 파일이나 디렉터리 삭제 |
-empty | 크기가 0인 파일이나 빈 디렉터리 검색 |
-exec | 검색된 파일에 대하여 지정된 명령 실행 |
-name | 지정된 문자열 패턴을 기준으로 검색 |
검색결과 출력 | |
-size | 파일 크기를 기준으로 검색 [+-]n[단위] : +-가 없으면 정확히 n size, +n이면 초과, -n은 미만 검색 단위는 b(blocks), c(bytes), k(kilobytes), M(megabytes), G(gigabytes) |
-type | 파일 유형을 기준으로 검색 (f : 일반파일, d : 디렉터리, b : 블록장치파일, c : 문자장치파일, l : 심볼릭링크파일, s : 소켓파일, p : 파이프) |
-atime | 접근 시각을 기준으로 검색 [+-]n : +-가 없으면 정확히 n일, +n이면 n일 초과, -n이면 n일 미만 검색 -> atime, ctime, mtime 동일 |
-ctime | 속성 변경 시각을 기준으로 검색 |
-mtime | 데이터 수정 시각을 기준으로 검색 |
-perm | /로부터 해당 허가권과 일치하는 것 찾기(접근권한을 지정) ex -4000, 4000("-"가 없으면 정확히 mode 권한과 일치하는 파일만 검색, "-"있으면 포함하는 파일 검색) |
- 활용 예 : find / -name passwd -print -> 루트 디렉터리 밑에 passwd 문자열을 갖는 파일이나 디렉터리 검색하여 출력
8) locate
- 파일 위치 검색 명령어
- 미리 만들어 놓은 DB파일에서 파일을 검색하기 때문에 빠른 검색이 가능하지만, DB파일을 업데이트해야 최근 삭제된 파일 검색안되게 할 수 있다. (업데이트는 updatedb 명령 실행)
- 형식 : [root@localhost ~]# locate [옵션] [파일명]
- 옵션
-e | 검색에서 제외할 디렉터리 지정 |
-n | 지정한 개수만큼 검색 |
9) whereis
- 명령어의 바이너리(실행파일), 소스, 메뉴얼 파일의 위치 검색하는 명령어
- 형식 : [root@localhost ~]# whereis [검색할 명령어]
10) which
- 명령어 실행파일(또는 링크) 위치 검색 명령어
- 형식 : [root@localhost ~]# which [검색할 명령어]
(3) 파일 내용 출력 명령어
1) cat
- 파일 내용을 출력하거나 두 개의 파일 내용 합치는 명령어
- 형식 : [root@localhost ~]# cat [옵션] [파일명]
- 옵션
-e | 제어문자를 '^' 형태로 출력하면서, 각 행의 끝에 '$' 문자 추가 |
-b | 화면 왼쪽에 행 번호 출력(비어있는 행 제외) |
-n | 화면 왼쪽에 행 번호 출력(비어있는 행 포함) |
-s | 연속되는 2개 이상의 빈 행을 한 행으로 출력 |
2) head
- 파일의 처음 행부터 지정한 줄 수만큼 출력하는 명령어
- 형식 : [root@localhost ~]# head [옵션] [설정값] [파일명]
- 옵션
-c | 처음부터 지정한 Kbyte 만큼 출력 |
-n | 처음부터 n행까지 출력 |
-q | 파일이름을 헤더에 출력하지 않음 |
-v | 파일이름을 헤더에 출력 |
3) tail
- 파일의 마지막 행부터 지정한 줄 수만큼 출력하는 명령어
- 형식 : [root@localhost ~]# tail [옵션] [설정값] [파일명]
- 옵션
-c | 마지막부터 지정한 Kbyte 만큼 출력 |
-n | 마지막부터 n행까지 출력 |
-f | 파일의 마지막 10줄을 실시간으로 연속해서 출력 |
-F | 파일의 마지막 10줄을 실시간 연속 출력, 로그파일처럼 특정 시간이 지난 후 파일이 변동하게 되면 새로운 파일 출력 |
4) more
- 파일의 내용을 화면단위로 출력하는 명령어
- 화면의 위에서 아래로만 이동할 수 있다.
- 형식 : [root@localhost ~]# more [파일명]
5) less
- 파일의 내용을 화면단위로 출력하는 명령어
- 화면의 위, 아래로만 이동할 수 있다.
- 형식 : [root@localhost ~]# less [파일명]
6) grep
- 파일 안에서 지정한 패턴이나 문자열을 검색한 후, 그 패턴을 포함하는 모든 행을 표준 출력하는 명령어
- 한 디렉터리 안에서 지정한 패턴을 포함하는 파일을 출력할 수도 있다.
- 종류 : grep(다중 패턴 검색), egrep(정규 표현식 검색), fgrep(단순 패턴 검색)
- 형식 : [root@localhost ~]# grep [문자열] [옵션] [파일명]
- 옵션
-c | 패턴이 일치하는 행의 수 출력 |
-i | 대소문자 구분하지 않음 |
-l | 패턴이 포함된 파일이름 출력 |
-n | 행 번호 출력 |
-v | 지정한 패턴과 일치하지 않는 행만 출력 |
-w | 패턴이 전체 문자열과 일치하는 행만 출력 |
-e | 다음 패턴을 정규식으로 사용한다. |
-C | 일치하는 문장의 상,하 두 라인까지 포함하여 출력 |
-r | 현재 디렉터리의 하위 디렉터리까지 모두 포함하여 지정된 패턴을 포함하는 행 출력 |
- 활용 예 : grep -v 'grep' test.txt -> grep이라는 단어 포함하지 않는 행만 출력
7) wc
- 파일 안의 행, 단어, 문자 수를 출력하는 명령어
- 형식 : [root@localhost ~]# wc [옵션] [파일명]
- 옵션
-c | 문자 개수 출력 |
-l | 행 개수 출력 |
-w | 단어 개수 출력 |
8) sort
- 명령어 수행 결과나 파일 내용을 정렬하여 출력하는 명령어
- 형식 : [root@localhost ~]# sort [옵션] [파일명]
- 옵션
-b | 선행 공백 무시 |
-c | 정렬 여부 검사 |
-f | 대소문자 구별하지 않음 |
-m | 정렬된 파일 병합 |
-n | 숫자로 한정하여 정렬 |
-o | 저장할 파일명 지정 |
-r | 역순(내림차순)으로 정렬 |
-R | 해시값을 기준으로 랜덤하게 정렬 |
-t | 필드 구분자 지정 |
-u | 정렬 후 중복된 내용 제거 |
9) cut
- 파일에서 특정 필드를 추출하여 출력하는 명령어
- 형식 : [root@localhost ~]# cut [옵션] [파일명]
- 옵션 (필드구분자 기본은 TAB으로 되어 있음, 따라서 TAB으로 구분되지 않는 행은 하나의 필드)
-b | 바이트 단위 지정 |
-c | 문자 단위 지정 |
-d | 필드 구분자를 TAB 대신에 DELIM 사용 |
-f | 지정한 필드만 출력 |
-s | 필드 구분자를 포함하지 않는 행을 출력X |
10) split
- 하나의 파일을 여러 개의 파일로 분할하는 명령어
- 형식 : [root@localhost ~]# split [옵션] [파일명]
- 옵션
-a | 접미사의 길이 지정 |
-b | 바이트 단위 분할 |
-l | 행 수로 분할 |
--additional-suffix | 확장자명 지정 |
(4) 파일 내용 비교 명령어
1) diff
- 두 개의 파일을 비교하여 차이점 출력하는 명령어 (diff3은 3개의 파일을 비교)
- 실행결과 차이점 없다면 0, 차이점 있다면 1, 에러 상황이라면 2 이상의 값을 반환
- 형식 : [root@localhost ~]# diff [옵션] [파일명1] [파일명2]
2) cmp
- 두 파일을 바이트 단위로 비교하여 출력하는 명령어
- 형식 : [root@localhost ~]# cmp [옵션] [파일명1] [파일명2]
3) comm
- 두 파일을 행 단위로 비교하여 차이점 출력하는 명령어
- 형식 : [root@localhost ~]# comm [옵션] [파일명1] [파일명2]
(5) 리다이렉션과 파이프
1) 리다이렉션(Redirection)
- 표준 입력, 출력, 오류를 화면이나 파일로 출력되도록 재지정
- 형식 : [root@localhost ~]# cat [파일1] [옵션] [파일2]
- 옵션
> | 지정한 파일이 존재하면 덮어쓰고, 존재하지 않으면 새로운 파일 생성 |
>> | 지정한 파일이 존재하면 명령 실행 결과를 파일에 이어쓰기, 존재하지 않으면 새로운 파일 생성 |
< | 키보드가 아닌 지정된 파일에서 입력 내용을 읽어 옴 (명령행에서 입력할 때 사용하는 기호) |
>& | 명령의 출력을 다른 명령의 입력으로 보냄 |
<& | 명령의 입력을 읽고 다른 명령의 출력으로 보냄 |
2) 파이프(Pipe)
- 두 개의 명령어를 연결하는 기능, 즉 프로세스와 프로세스 간의 통로
- 명령의 출력이 다른 명령의 입력으로 전달
- 형식 : [root@localhost ~]# [명령어1] | [명령어2] | [명령어3]
3) 세미콜론(;)
- 하나의 명령어 라인에 여러 개의 명령을 실행할 수 있도록 도와준다.
- 첫번째 명령 실패하여도 다음 명령 실행한다.
- 형식 : [root@localhost ~]# [명령1]; [명령2]; [명령3]
4. 기타 명령어
(1) 네트워크 관련 명령어
1) ping
- 네트워크에 연결된 호스트와 호스트 간의 연결상태를 확인하는 명령어
- ping을 이용하여 DoS attack 가능하나, 외부 시스템의 DoS attack 여부를 확인하는 것은 불가능
- 형식 : [root@localhost ~]# ping [옵션] [IP주소/도메인]
- 옵션
-c | 지정된 횟수만큼 패킷 전송 |
-d | 소켓이 사용하는 SO_DEBUG 기능 켬 |
-f | 다량의 패킷 전송 |
-i | 패킷 전송 사이 대기시간 지정 |
-l | 패킷 전송할 인터페이스 지정 |
-n | 호스트 이름을 찾지 않고 IP주소만 찾아 보냄 |
-r | 패킷을 라우팅 테이블이 아닌 로컬 인터페이스에만 보냄 |
2) traceroute
- 목적지 호스트까지 경로를 출력하고, 그 정보를 기록하는 명령어
- 형식 : [root@localhost ~]# traceroute [옵션] [IP주소/도메인]
- 옵션
-m | 홉(hop)수 지정 |
-n | 호스트 이름 검색하지 않음 |
-p | 시작 포트 번호 지정 |
-q | 패킷 수 지정 |
-w | 타임아웃 시간 지정 |
3) nslookup
- 도메인 이름으로 IP주소를 조회하거나 IP주소로 도메인 이름을 조회하는 명령어
- 형식 : [root@localhost ~]# nslookup [-type=유형] [IP주소/도메인]
- 레코드 유형
a | IPv4 주소 지정 |
aaaa | IPv6 주소 지정 |
mx | 메일서버 지정 |
ns | 네임서버 지정 |
soa | 도메인에 대한 선언 부분 |
srv | 특정 서비스에 대한 특정 도메인 연결 |
txt | 도메인 이름을 텍스트 문자열에 매칭 |
ptr | 역방향 질의로 IP주소에 대한 도메인 응답 |
cname | 별칭 지정 |
4) dig
- Domain Information Groper의 약어, nslookup과 기능 유사
5) host
- DNS서버를 이용하여 도메인 이름에 대한 IP주소를 조회하는 명령어
- 형식 : [root@localhost ~]# host [옵션] [도메인/IP주소] [DNS서버]
6) hostname
- 호스트 이름을 확인하거나 변경하는 명령어
- 형식 : [root@localhost ~]# hostname [옵션] [파일명]
(2) 기타 명령어
1) date
- 시스템의 날짜를 출력하거나 변경하는 명령어
- 형식 : [root@localhost ~]# date [옵션] [MMDDhhmmCCYY.ss]
- 활용 예 : date 101213202020 -> 2020.10.12 13:20으로 날짜 및 시간 변경
2) rdate
- 원격지의 타임서버에서 시간정보를 가져와 로컬 시스템의 시간과 동기화하는 명령어
- 형식 : [root@localhost ~]# rdate [옵션] [타임서버 IP주소/도메인]
- 옵션
-4 | IPv4 주소만 사용 |
-6 | IPv6 주소만 사용 |
-o | 지정한 포트로 연결 |
-p | 호스트 정보만 출력하고, 설정은 하지 않음 |
-s | 설정만 하고, 호스트 정보는 출력하지 않음 |
-u | TCP 대신 UDP 사용 |
-v | 상세한 정보 출력 |
3) cal
- 달력을 출력하는 명령어
- 형식 : [root@localhost ~]# cal [옵션] [연도]
- 옵션
-j | 해당연도 1월1일부터 현재까지 며칠인지 출력 |
-y | 해당연도 기준 모든 월 출력 |
4) time
- 프로그램의 실행시간을 출력하는 명령어
5) tty
- 현재 사용하고 있는 단말장치의 경로와 파일명 출력하는 명령어
6) clear
- 터미널 화면 모두 지우는 명령어
7) wall
- 현재 로그인된 모든 사용자에게 터미널을 통해 메시지 전송하는 명령어
- 형식 : [root@localhost ~]# wall [메시지]
8) write
- 지정된 사용자에게만 메시지 전송하는 명령어
- 형식 : [root@localhost ~]# write [사용자명] [tty명]
9) mesg
- 수신메시지 수신여부를 확인하고 제어하는 명령어
- 형식 : [root@localhost ~]# mesg [y/n]
(3) 기타
- /etc/profile : 셸이 명령어를 찾을 수 있도록 지정하는 검색경로를 설정하는 파일
- 리눅스에서 디렉터 리명이 두 단어 이상인 경우 띄어쓰기를 사용할 수 없으며, ""(큰따옴표)로 구분해주어야 한다.
- ps : 프로세스 상태 확인하는 명령어
-f | 프로세스 정보가 한 줄씩 출력 |
-l | -f보다 더 많은 정볼르 출력 |
-a | 최근 많이 실행된 제어 터미널을 가진 프로세스 정보 출력 |
-A, -e | 현재 시스템에서 실행 중인 모든 프로세스 정보 출력 |
- * : 와일드카드 문자로, 해당 디렉터리 안에 있는 모든 파일이나 디렉터리를 의미
- 하드링크는 일반파일, 심볼릭링크는 디렉터리를 링크하는데 사용한다.
- 표준 입력 : 0, 표준 출력 : 1, 표준 에러 : 2
- man : 명령어들의 자세한 사용법이나 메뉴얼 볼 때 사용하는 명령어
- fsck : 파일 시스템 검사 및 오류 수정
- netstat(->ss) : 시스템의 네트워크 상태를 확인하는 명령어 (-a : 모든 네트워크 상태 출력, -c : 현재실행명령을 매초마다 실행, -i : 인터페이스별 통계값 출력, -r : 라우팅 테이블 출력)
- finger : 로컬 사용자나 원격 사용자의 계정정보를 확인하는 명령어