1. Linux 접속 방법
OS Booting
OS 프로그램을 메모리에 load 후 OS를 실행하여 OS가 동작하는 초기 과정
직접접속
직접 Linux에 접속
- ID /PW 입력을 통한 접속 -> 어느 리눅스던 기본 방식
- 자동 로그인: 별도의 ID / PW 입력과정 없이 login
=> Linux를 서버 목적으로 사용하는 경우는 여러 사람이 같이 쓰기 때문에 일반적 방식 X
- Linux를 Desktop 방식으로 사용 시 많이 활용
원격접속
네트워크를 이용한 접속; 일반적으로 Linux 접근시 사용
SSH Client 프로그램 이용
SSH (Secure SHell)
네트워크를 이용하여 원격 접속 가능케 함
특히 공개 키 암호방식으로 접속하여 보안 강화 (22번 포트 활용)
SSH Client 프로그램
SSH Client 프로그램은 CLI 방식으로 작동
- Windows : PuTTY (무료), xshell (유료) 등
- Linux, MacOS : terminal 프로그램 사용
Putty
공개 키 파일 형식 ( .ppk ), 비밀 키는 리눅스가 가짐
- Session 메뉴 : Hostname 또는 IP 주소와 포트 결정 후 open 버튼 선택 시 접속 (주로 이 방식)
- Connection 메뉴 -> SSH 메뉴 -> Autho 항목에서 private key 파일 별도 지정 가능
원격 접속을 위해서는 Linux에 SSH Server 프로그램이 동작하고 있어야 한다.
- Ubuntu 배포판: SSH 서버 프로그램 기본 설치 X -> Ubuntu 설치 후 별도 설치 필요
- CentOS 배포판 : SSH 서버 프로그램 기본 설치, booting 시 자동 실행
2. Linux 구조
Linux 구조
Kernel
HW (CPU/메모리/IO 장치) 제어; Kernel Space 동작
System Call Interface
Kernel과 Shell 또는 Library, Application 간 통신을 수행하는 함수 (function) 집합; Kernel Spacel 동작
Shell
사용자의 Kernel에게로의 명령 전달 및 실행결과 확인용 프로그램 + 프로그램 실행 수행
=> User Space 동작
"터미널 프로그램은 shell 동작시켜줄 GUI 프로그램"
"Linux system을 운영한다는 것은 shell을 이용하여 운영하는 것"
GNU (glibc 또는 libc)
Linux 기본 라이브러리, Linux용 App이 기본으로 사용하는 함수 집합; User Space 동작
사용자 Library / Application
사용자 응용 SW; User Space 동작
Kernel Space
Kernel이 동작하는 영역, 실행모드가 보호 모드로 동작
-> 일반 App이 직접 Kernel 영역 내용을 사용하진 X
User Space
Kernel을 제외한 프로그램이 동작하는 영역, 사용자 모드로 프로그램 동작
32 bit CPU 환경에서 Kernel Space 2GB, User Space 2GB 메모리 고정 할당
=> 따라서 이 이상 용량을 늘려줘도 항상 실질 사용량은 총합 4GB로만 고정
Linux Kernel 구조
작업 관리자
- CPU 동작 및 관련 처리 담당
- 프로그램 실행 (= process 생성) 및 관리: context
- Scheduler : multi-process 제어를 위한 기능, CPU 동작에 연관
메모리 관리자
- 메모리 관리
- 가상 메모리 관리
- Linux의 모든 프로세스는 가상 메모리에서 동작
- 가상 메모리와 물리 메모리 연결 관리 수행
파일 시스템
- Linux는 모든 I/O 장치를 파일 형태로 관리
- 장점: 장치에 상관없이 동일한 명령 적용 가능
- 추상화 (Absolute) 계층적 성격 - 정해진 인터페이스를 이용하여 동일한 사용법으로 제어
- 파일 시스템을 통해 I/O 장치 내용 관리
네트워크 관리자
디바이스 관리자
- HW 연결 관리 프로그램 (= Device Driver)
- Linux에서 관리하는 디바이스 유형은 Block Device와 Character Device로 구분하여 관리
Shell 명령은 Kernel 내용 中 작업 관리자 / 메모리 관리자 / 파일 시스템에 대한 내용이 주를 이룸;
필요에 따라 네트워크 관리자 / 디바이스 관리자 사용가능
Linux Kernel 소스 => https://makelinux.github.io/kernel/map
3. Linux 사용자 이해
관리자 (Supervisor)
- Linux 시스템에 대한 모든 권한을 갖는 사용자
- 관리자 ID는 root로 고정되어 있으면 변경 혹은 추가 관리자 등록은 불가능
- 배포판에 따라 관리자 login을 허용하지 않는 배포판 존재 => 그게 바로 Ubuntu
- Shell 명령 프롬프트는 #으로 표기
- 관리자 기본 홈 디렉토리는 /root 사용
- login 또는 관리자 계쩡 전환시 홈 위치는 /root
- 일반적으로 일반유저로 login한 후에 필요에 따라 관리자 권한 획득 (sudo 명령)을 하거나 필요시 관리자 전환 (su 명령)을 통해 관리자로 사용 (supervisor 로그인은 가급적 지양)
sudo 명령
관리자 권한 획득 후 관리자 권한의 명령 수행
sudo <명령>
- 일반 유저로 login 후 관리자 권한 필요시 사용
- 명령: 관리자 권한이 필요한 명령
- 이때 입력하는 비밀번호는 login 사용자 PW
su - [<사용자 ID>]
- root 사용자로 전환, 비밀번호는 root 사용자 PW
일반 사용자
- 관리자와 별도 등록된 사용자
- 일반 유저권한의 작업만 가능
- Shell 명령 프롬프트는 $로 표시
- 일반 유저 홈 디렉토리는 /home/<사용자 ID>
- login시 홈 위치는 /home/<사용자 ID>
pwd 명령 : 현재 디렉토리 경로(path) 출력 명령
Shell
- Linux Kernel - 사용자 사이 상호작용을 위해 사용하는 Linux 응용 프로그램
- Shell은 독립된 Linux 응용 프로그램 -> 필요시 Shell을 변경하여 사용
- 현재 Linux 표준 Shell은 bash (bourne-again shell) 사용
- Linux 표준 Shell은 sh
- Linux Shell의 종류는 다양; csh, zsh (MacOS 표준), ksh, sh, bash 등
- 현재 Shell 확인 명령: echo $SHELL -> 현재 사용하고 있는 shell 표시
Shell Prompt
- Shell 명령을 입력할 수 있도록 대기 상태
- Shell Prompt가 표시되어야 다음 명령 입력 가능,
Shell Prompt 표시가 없으면 현재 명령을 수행하고 있다는 의미
- terminal 프로그램은 Shell을 실행하기 위한 윈도우 프로그램
Shell Prompt 형태
사용자@hostname: 현재 디렉토리 < $ | # >
- 사용자: 현재 사용자
- hostname: 현재 사용중인 Linux System 이름, IP 주소 형식 또는 Domain 형식으로 표시
- 현재 디렉토리: 현재 위치한 디렉토리 이름
~ : 현재 사용자 홈 디렉토리를 의미
- $ | # : 일반 유저 ( $ ) 또는 관리자 ( # )
whoami : 현재 사용자 확인
명령 history (이력) 기능 제공
- history
Shell에서 입력한 명령 history 관리
Shell에서 입력한 명령이 차례대로 쌓임
history 관리 대상 명령 개수는 환경설정에 의해 변경 가능 (기본은 1000개의 명령 history 관리)
- 상/하 방향키를 이용하여 이전 명령 history 사용
Shell에서 사용하는 단축키
- Ctrl + L : 터미널 화면을 지울 때 사용
clear : 터미널 화면 지우는 명령
- Ctrl + W : 입력 명령을 단어 단위 삭제
- Ctrl + U : 입력 명령 전체 삭제
- Ctrl + C : 현재 동작 중인 프로그램 강제 종료
- Ctrl + D : 프로그램 (정상) 종료
- 명령 자동 완성
tab 키 : 입력된 문자를 갖는 명령에 대한 자동완성
tab 키 + tab 키 : 입력된 문자를 모두 포함하는 명령 목록 출력
4. 파일 종류와 특징
Linux 파일 시스템
File System
보조기억장치에 파일 및 디렉토리 관리 방법
Linux 관리 대상 파일 종류
일반 파일
데이터 저장
-
텍스트 파일 ( text file )
텍스트 형식 (ASCII 코드)으로 데이터 저장
내용 직접 확인 가능
문자 코드 종류
- ASCII 코드 : 7 ~ 8 bit
- UNICODE : 2 byte
- UTF-8 : 대표적인 문자 encoding, 1 ~ 3 byte 크기, 영어/한글 혼용시 주로 사용
- CP949 : Windows가 사용하는 문자 인코딩 방식, 他 OS 호환 X -> 요즘 거의 안쓰임
-
바이너리 파일 ( binary file )
바이너리 형식 (이진수, 메모리 내용)으로 저장한 파일
통상 실행 가능한 파일 多
디렉토리 파일
디렉토리 정보 전달
여기서 Windows와의 차이: Windows에선 디렉토리를 파일로 간주하지 않으나 리눅스에선 파일 취급
특수 파일
링크 파일: 파일에 대한 링크 (연결) 정보 파일
디바이스 파일
IO 디바이스 접근 목적 파일 ; 저장보다는 연결 목적
- 문자 (Character) 디바이스 파일 : 문자 단위 입출력 장치에 대한 파일 - Keyboard
- 블록 (Block) 디바이스 파일 : 블록 단위 입출력 장치에 대한 파일 - HDD, SSD
파이프 (pipe) 파일
프로세스 (process) 간 통신 수행시 사용, 역시 데이터 저장 목적 X
Linux는 파일 형식에 따라 확장자로 구분하는 / 파일 작성시 확장자를 반드시 포함하는 별도 규칙 X
=> 파일명 통해서 파일형식 파악 어려움
파일 형식 확인 명령
file <파일 path를 포함한 파일명>
- 파일 형식 출력 명령
- ELF 포맷 파일은 실행 가능한 파일
Linux 기본 디렉토리 구조
Linux 디렉토리 구조는 / (root) 기준으로 계층 구조 형성
디렉토리 계층 구조 명령
tree
- 기본명령 X -> 별도 설치과정 필요
Ubuntu
sudo snap install tree : 명령 다운로드
sudo apt install tree : 명령 설치
CentOS
su 명령어 입력 후 -> yum install -y tree
(sudo yum install -y tree 명렁어는 직접 확인해본 결과 실행되지 않음)
- -d : directory만 표시
각 디렉토리 목록
- / (root) : 루트 디렉토리, 최상위 디렉토리, 통상 별도파일 저장 X, 디렉토리만 생성
- /bin : Linux 기본 명령어 (Built-in) 저장
- /boot : Linux 부팅 관련 파일 저장
- /dev : 디바이스 파일 저장
- /etc : 환경설정 파일 저장
- /root : root 사용자 홈 디렉토리
- /home : 일반 사용자 홈 디렉토리
- /lib : library 파일 및 kernel 모듈 저장
- /usr : 일반 사용자 공통파일 저장, Windows OS의 Program Files 폴더 같은 개념
- /mnt : 외부장치 연결 (mount) 파일 저장
- /proc : Linux Kernel 작업 관리자에서 사용하는 임시파일 저장,
가상파일 시스템, Linux 동작중에만 내용 저장
- /var : 시스템 운용 중 생성되는 임시데이터 저장소
- /sbin : 시스템 관리자 명령 저장
- /tmp : 임시파일 저장소, 가상파일 시스템
- /opt : 추가 패키지 저장