소소한개발팁
article thumbnail
Published 2023. 10. 18. 22:57
Linux 기초 OS/Linux
반응형

운영체제

 컴퓨터의 하드웨어와 소프트웨어 자원을 관리하는 시스템 소프트웨어
 


운영체제 구성요소

 1)커널
커널은 운영체제의 핵심 부분으로, 하드웨어와 소프트웨어 간의 상호 작용을 관리하고 시스템 자원을 효율적으로 관리합니다. 커널은 프로세스 관리, 스케줄링, 메모리 관리, 입출력 관리 등의 기능을 수행합니다.


 2)프로그램 실행과 멀티태스킹
운영체제는 여러 프로그램을 동시에 실행하고, CPU 자원을 효율적으로 공유하며 멀티태스킹을 지원합니다. 이를 통해 여러 응용 프로그램이 동시에 실행될 수 있습니다.


 3)인터럽트
인터럽트는 하드웨어나 소프트웨어 이벤트로 인해 CPU의 현재 작업을 일시적으로 멈추고 다른 작업을 수행하는 메커니즘입니다. 인터럽트는 입출력 작업, 하드웨어 에러 처리 등에 사용됩니다.


 4)메모리관리
운영체제는 시스템 메모리를 관리하여 프로세스들이 충돌 없이 메모리를 사용할 수 있도록 합니다. 이는 가상 메모리, 페이지 교체, 메모리 보호 등을 포함합니다.


 5)파일 시스템
파일 시스템은 데이터를 저장하고 관리하는 운영체제의 부분입니다. 파일을 생성, 읽기, 쓰기, 삭제하고 파일 구조를 조직화하는데 사용됩니다.


 6)디바이스 드라이버
디바이스 드라이버는 운영체제와 하드웨어 간의 인터페이스 역할을 합니다. 이 드라이버는 키보드, 마우스, 프린터, 네트워크 카드 등의 하드웨어와 상호작용합니다.


 7)네트워킹
운영체제는 네트워크 연결을 관리하고 네트워크 프로토콜을 지원하여 컴퓨터 간의 통신을 가능하게 합니다.


 8)사용자 인터페이스
사용자와의 상호 작용을 허용하기 위한 그래픽 사용자 인터페이스(GUI)나 명령 줄 인터페이스(CLI)를 제공합니다.
 

패키지 관리 시스템(Package management system)

패키지 (Package)
패키지는 소프트웨어 프로그램, 라이브러리, 설정 파일 및 관련 리소스를 묶어 놓은 단위입니다. 각 패키지에는 패키지의 이름, 버전, 설명 및 소프트웨어 파일이 포함됩니다.

패키지 관리자 (Package Manager)
패키지 관리자는 패키지의 설치, 업데이트, 제거 및 관리를 담당하는 도구입니다. 리눅스 배포판마다 다른 패키지 관리자가 사용됩니다. 예를 들어, Debian 계열 배포판에서는 APT(Advanced Package Tool)을 사용하며, Red Hat 계열에서는 YUM 또는 DNF을 사용합니다.

패키지 저장소 (Package Repository)
패키지 저장소는 인터넷을 통해 소프트웨어 패키지를 제공하는 공식 또는 비공식 서버입니다. 패키지 관리자는 이러한 저장소에서 패키지 정보와 실제 패키지 파일을 가져와 설치 및 업데이트를 수행합니다.

의존성 해결 (Dependency Resolution)
패키지 관리자는 패키지 설치 또는 업데이트 시 필요한 다른 패키지들과의 의존성을 해결합니다. 이것은 필요한 라이브러리나 다른 패키지가 자동으로 설치되어 시스템이 원활하게 동작하도록 보장합니다.

업데이트 및 보안 패치
패키지 관리 시스템을 통해 운영체제와 소프트웨어 패키지를 주기적으로 업데이트하고 보안 패치를 적용할 수 있으므로 시스템의 보안과 안정성을 유지할 수 있습니다.
 
라이브러리 동적 로딩 (Dynamic Loading of Libraries)
라이브러리 동적 로딩은 프로그램이 실행 중에 외부 라이브러리 파일을 로드하고 사용하는 메커니즘을 가리킵니다. 동적 로딩은 프로그램의 실행 시간에 필요한 라이브러리를 로드하고 사용자에게 필요한 추가 기능을 제공하는 방법 중 하나입니다. 불필요한 라이브러리 로딩을 피할 수 있어 메모리 사용을 최적화합니다. 런타임에 라이브러리를 변경하거나 업데이트할 수 있어 유연성을 제공합니다. 라이브러리가 필요한 경우에만 로드하므로 시작 시간을 단축합니다.

의존성 (Dependency) 
의존성은 프로그램이 다른 모듈, 라이브러리 또는 리소스와 상호 작용하는 방법을 나타내는 것을 말합니다. 프로그램은 종종 외부 라이브러리나 모듈에 의존성이 있으며, 이것은 프로그램이 올바르게 동작하기 위해 필요한 외부 요소입니다.
프로그램은 런타임에 필요한 라이브러리와 모듈을 로드하고, 그 로드된 모듈과 라이브러리와 상호 작용합니다. 이것을 의존성 해결이라고 합니다. 의존성은 정적 의존성과 동적 의존성으로 나뉩니다.

  • 정적 의존성(Static Dependency): 컴파일 시간에 프로그램에 필요한 모든 라이브러리 및 모듈이 링크되며 실행 파일에 포함됩니다. 실행 파일 크기가 크지만 의존성 문제가 상대적으로 적습니다.
  • 동적 의존성(Dynamic Dependency): 프로그램은 실행 시간에 필요한 라이브러리와 모듈을 동적으로 로드하며 실행 파일 크기가 작아집니다. 그러나 실행 시 의존성 문제를 해결해야 합니다.

 

가상화 

리눅스 가상화 (Linux Virtualization)
리눅스 가상화는 하나의 물리적 서버에서 여러 개의 독립적인 가상 환경을 생성하고 관리하는 기술입니다. 리눅스 가상화 기술은 하드웨어 가상화와 컨테이너 가상화 두 가지 주요 유형이 있습니다.

하드웨어 가상화

가상머신을 사용하여 하드웨어 자원을 가상화하는 기술입니다. 각 가상머신은 자체 운영 체제를 실행하며 하드웨어 가상화 소프트웨어 (예: KVM, Xen, VMware)를 사용하여 가상머신을 관리합니다. 각 가상머신은 독립적인 운영 체제를 가지며 애플리케이션을 실행할 수 있습니다.

컨테이너 가상화

컨테이너는 하드웨어 가상화보다 경량화된 방식으로 애플리케이션을 격리 및 실행하는 기술입니다. 컨테이너는 동일한 운영 체제 커널을 공유하며, 여러 개의 컨테이너는 호스트 시스템의 리소스를 효율적으로 공유합니다. Docker, Kubernetes, Containerd와 같은 컨테이너 오케스트레이션 도구가 인기 있습니다.

가상머신 (Virtual Machine)
하드웨어 가상화 기술을 사용하여 하나의 물리적 컴퓨터에서 여러 개의 독립적인 가상 운영 체제 환경을 구축하는 소프트웨어나 하드웨어 기반의 가상화를 가리킵니다. 각 가상 머신은 자체 운영 체제를 가지며 가상화 소프트웨어 (가상 머신 모니터 또는 하이퍼바이저)를 사용하여 가상 머신을 관리합니다. 이러한 가상화 환경은 다음과 같은 특징을 갖습니다:

격리

각 가상 머신은 독립적인 운영 체제 환경을 제공하므로 서로 간에 격리가 유지됩니다.
하드웨어 추상화: 각 가상 머신은 하드웨어를 가상화하고 애플리케이션을 실행하는 것처럼 보이게 합니다.
다양한 운영 체제 호환성: 서로 다른 운영 체제를 동일한 물리적 하드웨어에서 실행할 수 있습니다.

 

리눅스 쉘

리눅스와 다른 유닉스 계열 운영 체제에서 사용되는 사용자와 운영 체제 커널 간의 상호 작용을 담당하는 명령줄 인터페이스 (Command-Line Interface, CLI)입니다. 리눅스 쉘은 다양한 기능을 수행하는 명령어를 입력하고 실행하며, 파일 및 디렉터리 관리, 프로세스 제어, 시스템 설정 및 자동화 작업 등을 수행하는 중요한 도구입니다.

 

리눅스 쉘의 주요 특징 및 역할

명령어 해석 (Command Interpretation)
리눅스 쉘은 사용자가 입력한 명령어를 해석하고 실행합니다. 이러한 명령어는 파일 또는 디렉터리 관리, 데이터 조작, 프로세스 관리 등 다양한 작업을 수행할 수 있습니다.

파일 및 디렉터리 관리
리눅스 쉘을 사용하여 파일 및 디렉터리를 생성, 삭제, 복사, 이동, 이름 변경 등의 작업을 수행할 수 있습니다. ls, cd, cp, mv, rm, mkdir 등의 명령어를 사용합니다.

프로세스 제어
리눅스 쉘을 통해 실행 중인 프로세스를 모니터하고 제어할 수 있습니다. 이를 통해 프로그램 실행, 중지, 일시 중단, 백그라운드 실행, 작업 관리 등을 수행할 수 있습니다.

시스템 설정 및 관리
리눅스 쉘을 사용하여 시스템 설정 및 구성을 관리할 수 있습니다. 시스템 설정 파일을 편집하거나 네트워크 설정, 사용자 계정 관리, 패키지 관리, 서비스 제어 등을 수행할 수 있습니다.

자동화
리눅스 쉘은 스크립트 작성을 통해 자동화 작업을 수행할 수 있는 강력한 기능을 제공합니다. 셸 스크립트는 시스템 관리, 백업, 로그 처리, 작업 스케줄링 등 다양한 작업에 사용됩니다.

다양한 쉘
리눅스에는 다양한 쉘 종류가 있으며, 가장 널리 사용되는 것은 Bash (Bourne-Again SHell)입니다. 그러나 다른 쉘인 Zsh, Fish, Csh, Tcsh 등도 사용됩니다. 각 쉘은 고유한 기능과 확장성을 가지고 있으며 사용자의 환경에 맞게 선택할 수 있습니다.

기본 쉘 명령어 

- 메뉴얼 조회 : man
- 파일 목록/내용 조회 관련 명령어 : ls, cat, head, tail
- 검색/탐색 관련 명령어 : grep, find
- 압축/해제 관련 명령어 : tar, gzip/gunzip, zip/unzip
- 시간 관련 명령어 : date, cal
- 기타 명령어 : echo, exit, history
- 관리자 권환 실행: sudo
- 패키지 매니저 : apt <
- 텍스트 에디터 : nano
- 현재 위치 : pwd

 

반응형

 

리눅스 파일 및 디렉터리 구조

계층적으로 구성되어 있으며, 모든 파일 및 디렉터리는 루트 디렉터리(/)에서 시작하여 하위 디렉터리로 계층 구조를 형성합니다. 

루트 디렉터리 (/)
모든 파일 및 디렉터리는 루트 디렉터리 아래에 위치합니다.
루트 디렉터리는 파일 시스템의 시작점이며 모든 경로는 /로 시작합니다.

홈 디렉터리 (/home)
사용자의 홈 디렉터리는 사용자 계정 이름과 연결되며 개별 사용자의 
데이터 및 설정 파일을 저장하는 곳입니다.

시스템 디렉터리 (/bin, /sbin, /usr, /lib, /etc, 등)
/bin: 기본 실행 파일 (binary)이 저장되는 디렉터리로, 리눅스 시스템의 기본 명령어를 포함합니다.
/sbin: 시스템 관리자가 사용하는 시스템 실행 파일을 포함합니다.
/usr: 사용자 관련 파일 및 프로그램을 포함하며, /usr/bin, /usr/sbin 디렉터리를 포함합니다.
/lib 및 /lib64: 라이브러리 파일이 저장되며, /lib은 32비트 라이브러리, /lib64는 64비트 라이브러리를 포함합니다.
/etc: 시스템 구성 파일이 저장되는 디렉터리로, 주요 설정 파일들을 포함합니다.

장치 파일 (/dev)
하드웨어 및 장치 파일을 나타내는 디렉터리로, /dev/null, /dev/sda, /dev/tty 등이 여기에 위치합니다.

부팅 파일 (/boot)
부팅 로더와 커널 이미지를 저장하며, 시스템 부팅 시 필요한 파일이 저장됩니다.

프로세스 관리 (/proc)
프로세스 및 커널 상태 정보를 제공하는 가상 파일 시스템으로, 시스템 상태 및 프로세스 정보에 접근 가능합니다.

로그 파일 (/var/log)
시스템 및 애플리케이션 로그 파일이 저장되는 디렉터리로, 시스템 로깅과 문제 해결에 사용됩니다.

임시 파일 (/tmp)
임시 파일 및 디렉터리가 저장되며, 임시 데이터 및 작업에 사용됩니다.

사용자 및 그룹 정보 (/etc/passwd, /etc/group)
사용자와 그룹 정보가 저장된 파일로, 사용자 계정과 권한을 관리하는 데 사용됩니다.

네트워크 관련 (/etc/network, /etc/hostname, /etc/resolv.conf)
네트워크 설정 파일 및 호스트 이름과 관련된 파일들을 포함합니다.

리눅스의 파일 종류

일반 파일 (Regular Files)
텍스트 파일, 바이너리 파일, 문서 파일, 이미지 파일 등 모든 종류의 데이터를 저장하는 데 사용됩니다.
텍스트 파일은 읽을 수 있으며, 바이너리 파일은 실행 가능한 프로그램 또는 데이터 파일일 수 있습니다.
예: .txt, .jpg, .mp3, .doc, .sh 등


디렉터리 파일 (Directory Files):
파일과 다른 디렉터리를 포함하는 디렉터리 구조를 만드는데 사용됩니다.
디렉터리는 파일 및 하위 디렉터리의 목록을 관리합니다.
예: /home, /var, /usr/bin 등


심볼릭 링크 (Symbolic Links)
다른 파일이나 디렉터리에 대한 참조 또는 별칭을 생성합니다.
심볼릭 링크는 링크된 파일이나 디렉터리의 경로를 저장하며, 해당 파일 또는 디렉터리를 가리킵니다.
예: file.txt라는 파일을 가리키는 link.txt라는 심볼릭 링크


특수 파일 (Special Files)

하드웨어 장치와 관련된 파일로, 리눅스 시스템의 입출력(I/O)를 관리합니다.


블록 장치 파일 (Block Device Files)

블록 기반 장치인 하드 드라이브와 같은 파일


문자 장치 파일 (Character Device Files)

문자 기반 장치인 터미널, 마우스, 프린터 등과 같은 파일.
예: /dev/sda (블록 장치 파일), /dev/tty1 (문자 장치 파일)


소켓 파일 (Socket Files)
프로세스 간 통신(IPC)을 위한 파일로, 네트워크 소켓 및 Unix 도메인 소켓과 같은 통신 수단을 제공합니다.
서버와 클라이언트 프로세스 간에 데이터를 교환하는 데 사용됩니다.
예: /var/run/mysql/mysql.sock


파이프 파일 (Named Pipes)
프로세스 간 통신(IPC)을 위한 파일로, 명명된 파이프를 통해 데이터 스트림을 전송합니다.
파이프는 프로세스 간 데이터 교환 및 파이프 기반 작업을 지원합니다.
예: /tmp/my_pipe


캐릭터 특수 파일 (Character Special Files)
문자 기반 입출력 장치와 관련된 특수 파일로, 터미널, 모뎀 및 시리얼 포트와 같은 장치와 관련이 있습니다.


블록 특수 파일 (Block Special Files)
블록 기반 장치와 관련된 특수 파일로, 하드 디스크 드라이브, CD/DVD 드라이브 등과 관련이 있습니다.

 

 

 

반응형

'OS > Linux' 카테고리의 다른 글

Vmware에서 복사 및 붙여 넣기 활성화하기  (0) 2024.02.10
profile

소소한개발팁

@개발자 뱅

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!