대학원 일기

리눅스 본문

School/Linux

리눅스

대학원생(노예) 2023. 10. 16. 01:46

Linux 소개

Linux란?

Unix

  • 1969년 Ken Thompson & Dennis Ritchie에 의해 미국의 AT&T 벨 연구소에서 사용하기 위해 만들어진 OS이다.

Linux

  • 리눅스가 유닉스로 부터 개발 되었기 때문에 두 OS는 비슷한 부분이 많다 명령어도 거의 비슷하다.
  • 교육용으로 만든 MINIX라는 OS가 있엇는데 당시 핀란드 헬시키 대학의 학생이던 Linus Bendict Tovals(리누스 토발즈)가 Minix를 이용하여 Linux를 만들었다.

Linux의 구성도

Linux 구성도

  • 리눅스는 커널(Kernel)은 운영체제에 있어 가장 핵심이며, 운영체제 맨 하층에서 작동되는 소프트웨어이다.
  • 리눅스 셸(Shell)은 커널(Kernel)과 사용자를 연결해주는 인터페이스이며, 사용자가 입력하는 명령을 읽어 해석하고 프로그램을 실행시킨다.
  • 커널은 하드웨어를 제어하고, 셸은 명령어로 리눅스 OS와 상호 작용한다.

Linux OS 동작

리눅스 커널은 1만 줄 이상의 C프로그램과 1000여 줄의 어셈블리어로 구성되어 있어, 이식성이 좋고, 커널은 리눅스가 부팅할 때 메모리로 로딩됨

Kernel과 Shell

  • 사용자(User)는 명령을 입력하면 셸(Shell)에서 그 명령을 해독하여 커널에 전달하여 결과를 출력한다.
  • 셸(Shell)을 사용하면 커널(Kernel)에서 복잡한 동작 방식을 알필요 없이 셸 상의 인터페이스로 시스템 자원을 쉽게 관리할 수 다.
  • 셸(Shell)은 본셸(Bourne again shell, bash), C셸(C shell, csh), 콘셸(kron shell, ksh)이 있으며 대부분의 리눅스 시스템에서 본셸(bash)을 주로 사용한다.

커널(Kernel)이란?

커널(Kernel)이란 리눅스 운영체제의 핵심으로서 프로세스(Process)관리, 메모리 관리, I/O시스템 관리, 파일 시스템 관리 등을 수행하는 역할이다.

커널은 운영체제의 핵심이며 도스(DOS)에서 IO.SYS와 MSDOS.SYS이다.

모든 부분에서 여러 가지 기본적인 서비스를 제공하고,시스템의 하드웨어와 다양한 프로세스나 메모리 등을 관리하고 제공한다.

쉘(Shell)이란?

사용자와 커널(Kernel)사이의 인터페이스 역할을 한다. 사용자가 입력하는 명령을 읽어 해석하고 프로그램을 실행시키는 인터페이스인 것이다.

커널(Kernel)과 사용자(User) 프로그램의 중간에 위치하여 명령어를 해석하는역할

사용자 프로그램에서 실행시킨 명령어를 해석하여 그결과를 커널로 보내주는 역할을 한다.

쉘(Shell)의 중요 3가지 역할

  1. 대화식(Interactive)사용
    • 사용자의 요청을 기다려서 요청 즉 결과 값을 출력해주는 대화형 구조를 갖는다.
  2. 프로그래밍
    • 복합적인 작업을 수행할 수 있도록 일련의 명령어들을 묶어서 사용할 수 있다(스크립트)
  3. 리눅스 세션(session)의 설정(customization)
    • 리눅스의 세션에 대한 변수들을 정의하여 사용자가 리눅스 환경을 자신이 원하는 상태로 설정할 수 있게한다.

쉘(Shell)의 종류

Sh(Bourne Shell)

1979년, Bell 연구소의 Steven Bourne이 개발한 최초의 대중화된 유닉스 셸이다. 가장 오랫동안 UNIX 시스템에서 표준 구성요소를 자리잡고 있었다.

이후 개발된 셸에 비하여 기능적이 부족하지만, 현재 리눅스에서 가장 많이 사용하고 있는 Bourne Shell의 변종인 Bash가 있다.

Prompt : $

1974년 'Stephen Bourne' (스티브 본) 이 개발한 최초의 쉘

Ksh(Korn Shell)

Bourne Shell을 포함하는 셸이며, 명령어 편집기로 인해 일반적으로 유닉스에서 많이 사용되며 명령어를 확장할 셸이여서 호환성이 좋다.

Prompt : $

C Shell의 기능들도 제공한다.

Csh(C Shell)

Csh은 버클리 대학교에서 개발되었고, Bourne Shell (sh)과 호환이 되지만 인터페이스 구조가 다르다.

Csh은 C언어 문법과 제어 구조에 비슷한 면을 가지고 있고, 명령어 모드에서 다양한 기능을 제공한다.

Prompt : $

UNIX에서 기본 쉘(Shell)로 사용된다.

TCsh(TC Shell)

TC Shell은 코넬 대학에서 C Shell (Csh) 수정본에 Korn Shell (Ksh)의 기능을 포함하여 개발한 쉘이다. 프리 소프트웨어에서 많이 사용되며 C shell의 모든 기능을 제공한다.

Prompt : >

명령어 편집을 emacs 스타일 방식을 취한다.

Bash(Bourne Again Shell)

Bourne Shell의 기능을 추가하고 발전한 것으로, C Shell (csh)과 Korn Shell (ksh)에서 제공하는 기능을 상당수 포함되어 있다. 또한 다른 쉘에 비해 쉽게 접근이 가능하다.

Prompt : $

Linux 표준 쉘로 채택 (리눅스에서 가장 많이 사용하는 쉘)

Linux, MAC OS X 등 다양한 OS에서 사용됨

ZShell

ZShell은 Bourne Shell (sh)의 확장 된 버전으로, 많은 새로운 기능과 플러그인 및 테마를 지원한다. 이 쉘은 전문가도 정확히 사용하기 힘든 다양한 기능이 추가되어있다

 

 

Shell의 기능 비교

 

Ubuntu(우분투)

우분투(Ubuntu)는 가장 널리 쓰이는 오픈소스 리눅스 배포판 중 하나이며, Debian 기반 으로 제작된 Linux 배포판입니다.

우분투 LTS버전이란?

우분투에서는 LTS 버전이란 Long Term Support의 약어로 개발사에서 10년간 유지 보수와 업데이트를 지원해주는 버전이다.

 

 

리눅스 기본 명령어

터미널 창의 개념

그래픽 기반 사용자 인터페이스(GUI)가 아닌 명령 기반 인터페이스 (CLI)를 바탕으로 개발된 프로그램이다.

💡 GUI, CLI

GUI : Graphical User Interface

CLI : Command-Line Interface

 

리눅스 시간

운영체제에서는 두가지의 형태로 제공을 한다.

  • 하드웨어 시계 RTC(Real Time Clock)
    • 메인보드에 배터리로 실시간 시계는 현재의 시간을 유지시키는 컴퓨터 시계이다. 배터리로 구동된다.
  • 소프트웨어 시계 (System Clock)
    • 커널에 의해 시간이 관리 되는 시간을 말한다.

디렉토리와 파일

파일의 구성요소

리눅스는 모든 처리 과정에서 파일 단위로 처리하고 계층적 특성을 지닌다. 파일 구성요소로 3가지의 충족 요건이 있다.

  • 파일 이름
    • 파일 이름은 사용자가 파일을 사용목적으로 맞도록 사용하고 해당 파일에 정확하게 접근 할 수 있는 변별력을 제공해야한다. 또한 변별력은 파일을 조작하기 위한 과정에도 사용된다
    • 만약 파일 이름을 정확히 파악할 수 없는 상태라면 다른 파일을 조작하여 시스템에 예상치 못한 결과를 초래할 수 있다.
    💡 Windows 운영체제에서는 파일의 속성에 따라 각각의 확장명(ex : exe, hwp, txt)이라는 개념을 사용하지만, 리눅스 시스템에서는 특별한 확장명이 제공되지 않는다. 단지 시스템을 관리하면서 관리가 쉽도록 파일을 구분하기 위한 차원에서 사용되는 정도이다.

 

  • I-node
    • i-node(Index Node)는 파일을 기술하는 디스크 상에서의 데이터 구조를 의미한다.
    • i-node는 파일의 데이터 블록이 디스크 상의 어느 주소에 위치하고 있는가에 대한 정보를 기록하기 위해 사용된다.
    • 일반적으로 파일을 생성하게 되면 i-node의 Link가 “0”인 위치에 i-node를 생성하고 정보를 저장한 다음에 Link의 값이 “1”의 위치로 이동된다.
    💡 리눅스에서 파일을 생성하기 위해서는 파일의 데이터를 저장하기 위한 디스크 내의 공간을 먼저 확보해야한다. 이때 파일이 저장될 주소에 대한 정보를 기록하기 위해 i-node는 각각의 파티션마다 “0”부터 시작하는 정수의 형태로 고유의 식별 번호를 부여한다.

 

  • 데이터 블록
    • 데이터 블록(Data Block)은 파일에서 데이터를 저장하는 블록을 의미하며 일반 파일이나 디렉토리 파일의 데이터가 존재하며 디스크 장치에 파일을 저장할 때 실제 데이터는 특별한 구분 없이 디스크에 저장된다.
    • 파일1과 파일2가 디스크에 저장될 때 특별히 2개를 따로따로 구분하지 않고 디스크에 차례대로 기록된다.
    • 파일들의 실제 데이터는 디스크의 어느 한 곳에 차례대로 쌓여있으며 그 부분을 데이터 블록이라 부른다.
    • 데이터 블록이라는 영역은 어떤 파일인지 구분하지 않기 때문에 파일을 구분할 수 있는 부가정보를 i-node에 저장하여 부가 정보를 구별할 수 있도록 제공한다.
    💡 블록 그룹은 블록의 모임을 의미하며 OS커널이 같은 파일에 속하는 데이터 블록은 같은 블록 그룹에 저장하는 기능을 제공하므로 파일의 단편화를 줄일 수 있다. 파일 시스템의 전체적인 정보는 슈퍼 블록(Super Block)과 그룹 디스크립터 테이블(Group Descriptor Table)에 저장된다.

 

파일의 종류

리눅스에서 관리하는 모든 데이터는 파일로 인식한다. 즉 파일은 사용자가 이용할 수 있는 데이터의 실체를 의미한다.

  • 현재 실행 중인 프로세스, 일반 파일, 하드웨어

리눅스는 3개의 파일 종류로 갖고있다.

  • 일반파일
    • 일반 파일(Regular File)은 데이터를 관리하는데 주로 사용되는 일상적인 파일을 의미한다.
    • 각종 실행파일이나 텍스트 파일, 이미지 파일, 프로그램 소스 파일 등 리눅스에서 사용하는 대부분의 파일을 의미한다. 실행파일, 이미지 파일의 경우 데이터가 바이너리 형태로 저장된다.
  • 디렉토리 파일
    • 리눅스에서는 디렉토리 역시 파일로 취급되며 디렉토리 파일 또한 해당 디렉토리에 저장된 파일이나 하위디렉토리에 대한 정보를 갖고있다.
    • 디렉토리는 일반 파일과 마찬가지로 디스크에 저장되어 다른 파일을 조작하고 액세스 하는데 필요한 정보를 가지고 있다.
  • 링크파일
    • 하드링크(Hard Link)
      • 원본 파일을 복사하여 원본 파일고 ㅏ동일한 내용의 사본 파일을 만드는 것을 의미한다.
      • 하드 링크로는 원본 파일과 링크 파일 2개가 서로 다른 파일로 취급되어, 하나가 삭제되더라도 다른하나는 유지된다.
    • 심볼릭 링크(Sysmbolic Link)
      • 리눅스에서 통상적으로 사용되는 링크 파일은 심볼릭 링크이며 다른 표현으로 소프트링크(Soft Link)라 부른다.
      • 링크 파일은 Windwos에서 바로가기와 같은 기능을 수행한다.
  • 특수 파일
    • 특수 파일은 리눅스에서 지원하는 파이프, 소켓, 디바이스를 의미하며, 디바이스는 디스크를 의미한다.
    💡 Windwos에서는 C:, D:, E:와 같은 디스크로 표현되지만, 리눅스에서는 /dev/hda1, /dev/hda3와 같은 표현으로 사용된다.
  • 키보드, 모니터, 마우스 도 특수 파일로 사용된다.

 

문서파일과 이진 파일

  • 문서파일
    • 키보드로 입력 받은 값을 가지며 ASCII 문자열로 구성되어 있다. 문서를 작성시 ASCII 문자열로 매칭한다.
  • 이진파일
    • 이진 파일은 프로그램을 코딩하여 컴파일을 수행하는 과정에서 생성되는 파일을 의미하며 실행파일로 부른다.
    💡 이진 파일은 문자가 아닌 데이터 파일이 들어 가 있으며, 기계어인 0, 1의 값으로 구성되어 있다.

 

디렉토리와 파일관리

리눅스는 디렉토리 계층 구조가 트리 형태로 이루어 져있으며 사용 목적에 따라 디렉토리로 구분하여 제공한다.

 

루트 디렉토리와 서브 디렉토리

루트 디렉토리는 기본적으로 서브 디렉토리를 갖고 있으며 유닉스와 호환성을 가지므로 약간식 다를 수 있지만, 파일 명 뒤에 붙어 있는 “/”는 디렉토리 파일을 의미하고 “@”은 심볼릭 링크 파일을 의미한다.

 

절대 경로와 상대 경로

리눅스에서 제공하고 있는 경로(Path)는 특정 파일이나 디렉토리의 위치를 나타내며 각 경로의 구분자 “/”를 사용하여 구분되도록 표기되며 디렉토리와 관리는 “절대 경로”, “상대경로” 구가지고 구분 짓는다.

  • 절대 경로
    • 절대 경로는 표시할 때 항상 루트”/” 디렉토리 위치부터 표시하는 것을 말한다.
  • 상대경로
    • 상대 경로는 사용자가 어느 디렉토리에서 작업하고 있느냐에 따라 경로 명이 달라진다.

디렉토리 생성 규칙

리눅스에서는 파일명과 디렉토리 명을 생성할 때는 규칙을 준수해야한다.

  • “/” 는 파일 명이나 디렉토리명에 사용할 수 없음
  • 파일과 디렉토리 이름에 알파벳, 숫자, -, _, .(마침표)만 사용할 수 있다.
  • 공백, *, |, “, ‘, #, $, #, %, ^, & 등 사용할 수 없다.
  • 알파벳 대/소문자는 엄격하게 구별되어 다른 문자로 취급된다.
  • 파일과 디렉토리 명을 선언할때 시작위치에 . 을 사용하면 숨김 파일로 간주된다.

 

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

리눅스 디스크 관리  (0) 2023.10.16
리눅스: 소프트웨어 관리  (0) 2023.10.16
리눅스 프로세스 관리  (0) 2023.10.16
리눅스 기본 명령어  (0) 2023.10.16
리눅스 에디터  (0) 2023.10.16
Comments