320x100

리눅스의 주요 역할

  1. 응용 프로그램 관리 (App Management)
    • 리눅스는 다양한 응용 프로그램을 실행하고 관리하는 역할을 합니다. 프로세스의 생성, 스케줄링, 종료 등을 통해 여러 응용 프로그램이 효율적으로 자원을 사용할 수 있도록 합니다.
  2. 하드웨어 관리 (Hardware Management)
    • CPU, RAM, 디스크, 네트워크 장치 등 하드웨어 리소스를 관리합니다. 이를 통해 시스템 자원의 효율적인 사용과 안정성을 보장합니다.

리눅스의 물리적 실체

  • 리눅스 커널은 C 코드로 작성되어 있으며, 컴파일을 통해 vmlinux라는 실행 파일로 변환됩니다. 이 커널은 약 10만 개의 함수로 구성되어 있으며, 그 중 300~400개는 사용자 호출이 가능한 시스템 콜로 제공됩니다. 예를 들어, open, read, write 등의 시스템 콜이 있습니다.

바이너리 실행 파일 및 ABI

  • 리눅스에서 실행되는 바이너리 파일은 ELF(Executable and Linkable Format) 형식을 따릅니다. ABI(Application Binary Interface)는 운영체제, CPU, 컴파일러 간의 규칙과 규약을 정의합니다. ABI를 준수하면, 소스 코드를 한 번만 컴파일하더라도 여러 시스템에서 재컴파일 없이 실행할 수 있습니다.

.

ABI는 소프트웨어와 하드웨어 간의 상호작용을 정의하는 중요한 규칙 세트로, ELF 파일 형식, 시스템 호출 번호, 호출 규약, 가상 메모리 매커니즘 등을 포함하여 다양한 컴포넌트를 통해 운영체제와 응용 프로그램 간의 호환성을 보장합니다. 이를 통해 개발자는 다양한 환경에서 소프트웨어를 효과적으로 개발하고 배포할 수 있습니다.

메모리 관리

  • 소스 코드는 물리적 메모리 주소 기반으로 컴파일되지만, 실제 실행 시에는 가상 주소(VA)가 사용됩니다. 이때, OS와 CPU는 VA를 물리적 주소(PA)로 변환하여 메모리를 관리합니다.
  • OS는 프로세스를 실행할 때 task_struct와 mm_struct를 사용하여 각 프로세스의 가상 주소 공간을 기록합니다. 이 구조체는 가상 메모리 영역(VMA)을 관리합니다.

페이지 테이블 및 MMU

  • CPU 내부의 MMU(Memory Management Unit)는 가상 주소를 물리적 주소로 변환하는 역할을 합니다. 만약 현재 프로세스의 페이지 테이블에 해당 VA가 존재하지 않는 경우, 페이지 폴트(page fault) 예외가 발생합니다. 이는 필요한 페이지를 메모리에서 로드하거나, 다른 처리를 통해 해결해야 함을 의미합니다.
  • 리눅스는 후매핑 방식을 사용하여 필요한 페이지가 실제로 사용될 때까지 물리 메모리에 로드하지 않습니다. 즉, 프로세스가 특정 메모리 페이지에 접근하려 할 때, 해당 페이지가 메모리에 존재하지 않으면 페이지 폴트가 발생합니다.

pagefault는 프로세스가 접근하려는 가상 주소가 물리 메모리에 존재하지 않을 때 발생합니다. 이 경우, OS는 해당 VA가 유효하지 않음을 확인하고 페이지를 디스크에서 로드하여 페이지 테이블을 업데이트합니다. 페이지 크기는 일반적으로 4KB이며, 페이지 테이블은 VA와 PA 간의 연결을 관리하여 메모리 접근을 효율적으로 수행합니다. 이 모든 과정은 가상 메모리 시스템의 핵심적인 부분으로, 프로세스가 메모리를 안전하고 효율적으로 사용할 수 있도록 돕습니다.

*페이지 크기: 4KB,4096,0x1000, 12bit, 2^12

 

 

1. CPU와 MMU의 상호작용

  • CPU는 실행 중인 프로그램의 명령어를 처리하며, 메모리에 접근할 때 가상 주소(VA)를 사용합니다.
  • **MMU (Memory Management Unit)**는 CPU가 요청한 가상 주소를 물리 주소(PA)로 변환하는 역할을 합니다. MMU는 페이지 테이블을 참조하여 VA의 유효성을 검사하고, 해당하는 PA를 획득합니다.

2. 메모리 접근 과정

  • CPU가 메모리에 접근할 때, 다음 과정이 일어납니다:
    1. CPU가 MMU에 가상 주소를 전달합니다.
    2. MMU는 페이지 테이블을 조회하여 VA에 해당하는 PA를 찾습니다.
    3. PA가 결정되면, MMU는 이 주소를 CPU에 반환합니다.

3. 캐시 계층

  • PA가 획득되면, 다음 단계는 캐시 메모리입니다:
    1. 캐시 컨트롤러는 PA를 기반으로 캐시 메모리(SRAM L1, L2, L3)에 접근합니다.
    2. 만약 요청한 데이터가 캐시에 없다면, "cache miss"가 발생합니다.
    3. 이 경우, **메모리 컨트롤러(MC)**는 DRAM에서 데이터를 가져와야 합니다.

4. Huge Page

  • Huge Page는 메모리 관리에서 더 큰 페이지 크기를 사용하는 방식입니다. 예를 들어, 4KB 페이지를 512개 사용하여 2MB의 메모리를 할당할 수 있습니다. Huge Page는 페이지 테이블의 크기를 줄이고 TLB(Translation Lookaside Buffer)의 효율성을 높여 성능을 개선합니다.

5. 프로세스 및 쓰레드 구조

  • 프로세스가 생성될 때, test_struct와 같은 구조체가 만들어집니다. 이 구조체는 프로세스의 정보와 상태를 담고 있습니다.
  • 각 쓰레드는 task_struct를 사용하여 관리됩니다. 이 구조체는 쓰레드의 실행 정보 및 상태를 포함합니다.
  • 하지만 여러 쓰레드가 동일한 프로세스 내에서 실행될 때, 메모리 관리 구조체인 mm_struct를 공유합니다. 이는 모든 쓰레드가 동일한 가상 메모리 공간을 사용하게 함으로써 효율적인 메모리 관리를 가능하게 합니다.

*쓰레드(Thread)는 프로세스 내에서 실행되는 가장 작은 단위로, 프로세스가 수행하는 작업의 흐름을 나타냅니다. 쓰레드는 프로세스의 자원을 공유하며 독립적으로 실행될 수 있습니다. 여러 쓰레드가 동시에 실행됨으로써 멀티태스킹을 구현할 수 있으며, 이를 통해 프로그램의 성능을 향상시킬 수 있습니다.

 

 

  1.  

1. 프로세스 관리 (PM)

  • 프로세스 관리는 운영체제가 프로세스의 생성, 스케줄링, 종료 등을 관리하는 기능입니다.
  • task_struct: 각 프로세스에 대한 정보를 담고 있는 구조체로, 프로세스 ID, 상태, 우선순위, 스케줄링 정보 등을 포함합니다.
  • CFS (Completely Fair Scheduler): Linux의 기본 스케줄러로, 프로세스의 CPU 시간을 공정하게 분배하는 알고리즘입니다. 각 프로세스의 가상 실행 시간을 기반으로 스케줄링을 수행합니다.

2. 메모리 관리 (MM)

  • 가상 메모리 관리: 프로세스가 사용하는 가상 주소 공간을 관리합니다. mm_struct는 가상 메모리 영역(VMA)을 정의하며, 여기에는 스택, 힙, 텍스트 영역이 포함됩니다.
    • Stack VMA: 함수 호출 시 사용하는 스택 메모리 영역.
    • Heap VMA: 동적 메모리 할당을 위한 힙 메모리 영역.
    • Text VMA: 실행 코드가 위치하는 영역.
  • VA-PA 매핑 테이블: 가상 주소를 물리 주소로 변환하기 위한 페이지 테이블을 포함합니다.
  • 물리 메모리 관리:
    • 버디 시스템: 메모리 할당을 효율적으로 관리하는 방법으로, 메모리를 2의 거듭제곱 크기로 분할하여 관리합니다.
    • 페이지 조각 관리: 4KB 크기의 페이지를 기본 단위로 하여 메모리를 관리합니다.

3. 시스템 이벤트

  • 인터럽트: 하드웨어나 소프트웨어가 CPU의 작업을 중단하고 이벤트를 처리하도록 하는 신호입니다.
    • 타이머 인터럽트: 주기적으로 발생하여 프로세스 스케줄링 등을 수행합니다.
    • 네트워크 인터럽트: 네트워크 패킷 수신 시 발생합니다.
  • 예외: 특정 이벤트가 발생했을 때 처리하는 메커니즘입니다.
    • 시스템 호출 (syscall): 사용자 공간에서 커널 공간으로 요청을 전달하는 방법입니다.
    • 페이지 폴트 (page fault): 요청된 페이지가 메모리에 존재하지 않을 때 발생하며, 페이지를 메모리에 로드하는 과정이 필요합니다.

4. I/O 관리

  • 네트워크:
    • L4 (TCP): 전송 계층 프로토콜로 데이터 전송을 담당합니다.
    • L3 (IP): 네트워크 계층 프로토콜로 패킷의 라우팅을 담당합니다.
    • Netfilter (iptables): 패킷 필터링 및 네트워크 주소 변환(NAT)을 위한 프레임워크입니다.
    • L2 (MAC): 데이터 링크 계층에서의 주소 지정 및 프레임 전송을 관리합니다.
  • 디스크:
    • VFS (Virtual File System): 다양한 파일 시스템을 추상화하여 일관된 인터페이스를 제공하는 계층입니다.
    • FS (File System): 파일 시스템의 구현으로, submit bio를 통해 블록 장치에 대한 읽기/쓰기 요청을 처리합니다.
    • 블록 파일 시스템: 물리 디스크 블록을 읽고 쓸 방식을 정의합니다. 예: ext4, xfs, btrfs, f2fs 등.
  • 디바이스 드라이버:
    • 다양한 하드웨어 장치를 운영체제가 사용할 수 있도록 해주는 소프트웨어입니다. 예를 들어, 네트워크 카드, 블루투스 장치, PCI-e 장치 등이 있습니다.

기타: 보안, 도구, 사운드


권한 확인

getfacl hello.txt

 

 

소유자에게는 읽기, 쓰기(6) 권한을 주고, 그룹과 기타 사용자에게는 읽기(4) 권한만 부여

chmod 644 hello.txt

 

 

chmod g-r hello.txt

그룹(g) 권한의 읽기(r) 권한을 제거(-)

 

 

/usr/bin 폴더안에 있는 파일들이 진짜 바이너리파일들만 있을까?

/usr/bin 폴더안에 있는 파일들 중에서 스크립트 파일만 추려내려면?

 

  • LIST=$(ls /usr/bin)
  • echo $LIST
  • for name in $LIST
  • do
  • file $name
  • done
  • for name in $LIST; do file $name; done | grep -v ELF

제시하신 명령어는 LIST 변수에 저장된 파일 목록을 순회하면서 각 파일의 타입을 file 명령어로 확인하고, 그 결과 중에서 ELF 파일을 제외하는 작업을 수행합니다.

  • echo “hello” : 터미널 stdout 출력화면 print
  • cat hello.txt : 파일을 read 해서 stdout 출력
  • awk: column 추출
  • grep: 가로추출: 라인 by 라인 필터링
  • sort: 정렬 → 알파벳, 숫자(-n), KGM -h

패키지

아이폰 → 앱스토어 →앱설치, 삭제, 업데이트

리눅스

  • 패키지관리자 (apt, dnf, yum)을 통해 패키지 설치, 삭제, 업데이트를 할 수있다.
  • 오픈소스라서 자유도가 높다 (기업활용, 지속적발전)

패키지 관리자

  1. High-Level 패키지 관리자:
    • apt, yum, dnf는 고수준 패키지 관리 도구로, 사용자 친화적인 인터페이스를 제공하고, 패키지의 설치, 삭제, 업데이트 등을 쉽게 수행할 수 있도록 도와줍니다.
    • 이 도구들은 내부적으로 저수준 패키지 관리자(rpm, dpkg)를 호출하여 실제 패키지 파일을 처리합니다.
  2. Low-Level 패키지 관리자:
    • rpm(Red Hat Package Manager)과 dpkg(Debian Package)는 저수준 패키지 관리 도구로, 패키지 파일을 직접 설치하거나 관리합니다.
    • 이들은 패키지의 세부 정보를 직접 처리하며, 패키지 정보(이름, 버전 등)를 기반으로 패키지 리스트를 생성합니다.
  3. 패키지 파일:
    • .rpm  .deb 파일은 각각 Red Hat 계열과 Debian 계열의 패키지 형식으로, 윈도우의 설치 파일과 유사합니다.
    • 이 파일들은 패키지 설치 시 사용됩니다.

프로세스와 커널

  1. 프로세스 실행:
    • OS에서 실행 중인 프로세스의 수를 확인하려면 다음 명령어를 사용할 수 있습니다:

      bash

      ps -ef | wc -l
      
  2. 유저 프로세스 vs 커널 프로세스:
    • 유저 프로세스는 사용자 애플리케이션(예: Nginx, MySQL, Tomcat, PostgreSQL)으로, 실제로 사용자가 상호작용하는 프로그램입니다.
    • 커널 프로세스는 시스템 자원을 관리하고, 하드웨어와 상호작용하는 데 필요한 작업을 수행합니다.
  3. 커널 프로세스의 필요성:
    • 커널은 하드웨어와 소프트웨어 간의 인터페이스 역할을 하며, 시스템의 안정성과 보안을 보장합니다.
    • 커널 프로세스는 이벤트 핸들러와 같은 역할을 하여, 시스템 자원을 효율적으로 관리합니다.

인터럽트 처리

  1. 하드 인터럽트(Top-half):
    • 하드웨어 인터럽트가 발생했을 때 즉시 처리되는 부분으로, 빠른 응답이 필요한 작업입니다.
  2. 소프트 인터럽트(Bottom-half):
    • 하드 인터럽트가 발생한 후, 이후에 처리해도 되는 작업을 지연시켜 처리하는 부분입니다.
    • 주로 workqueue, softirq, tasklet을 통해 구현됩니다.

1. mm_struct

  • 목적: 각 프로세스에 대한 메모리 관리 정보를 저장합니다. 커널은 이 구조체를 통해 프로세스의 가상 메모리 공간을 관리합니다.
  • 구성 요소:
    • vma (Virtual Memory Area): 프로세스의 가상 메모리 영역을 나타내는 구조체의 리스트입니다. 각 vma는 특정 메모리 영역(예: 텍스트, 힙, 스택 등)에 대한 정보를 포함합니다.
    • 페이지 테이블: 가상 주소와 물리 주소 간의 매핑 정보를 저장하는 테이블입니다.
    • 메모리 관리 상태: 페이지 폴트 처리 및 메모리 할당 상태를 관리합니다.

2. vm_area_struct

  • 목적: 각 가상 메모리 영역에 대한 정보를 저장하는 자료구조로, 프로세스의 메모리 공간을 세부적으로 관리합니다.
  • 구성 요소:
    • 시작 주소와 끝 주소: 해당 영역의 가상 메모리 주소 범위를 지정합니다.
    • 메모리 접근 권한: 읽기, 쓰기, 실행 권한을 설정합니다.
    • 백킹 저장소: 해당 영역에 대한 데이터가 어떻게 저장되는지를 나타냅니다(예: 파일 매핑, 익명 메모리 등).

메모리 관리 및 페이지 설정

  • 페이지 테이블: 가상 주소(VA)와 물리 주소(PA) 간의 매핑을 관리합니다. 페이지 테이블은 일반적으로 4KB 크기의 페이지 단위로 할당되며, 이로 인해 메모리 사용의 효율성을 높입니다.
  • Huge Page: 큰 페이지를 사용하여 메모리 할당의 오버헤드를 줄입니다. 예를 들어, 2MB 또는 1GB의 큰 페이지를 사용하면, 많은 수의 작은 페이지를 관리하는 것보다 효율적입니다.

메모리 할당과 해제

  • malloc 및 free: 메모리 할당 요청(malloc)이 발생하면 mm_struct에 해당 정보를 기록합니다. 해제 요청(free)이 없으면, 가상 메모리 사용량(vsz)은 계속 증가하게 됩니다.
  • 가상 주소와 물리 주소 연결: 현재는 가상 메모리 주소이지만, VA-PA 연결이 이루어진 후에는 실제로 존재하는 가상 주소로 변환되어 사용됩니다.
  • dnf 란 ? “Dandified YUM” yum (Yellowdog Updater, Modified)의 후속 버전으로, 더 향상된 의존성 해결 알고리즘과 성능 최적화를 제공하고 자동화된 문제 해결기능, 유저 친화적인 기능 등으로 발전된 소프트웨어 패키지 관리자 이다.

패키지 관리 및 의존성

  1. 패키지 저장소 서버 URL 설정
    • 패키지 저장소의 URL은 /etc/ 디렉토리에 설정됩니다. 이곳에서 패키지 관리 도구가 사용할 저장소의 위치를 지정합니다.
  2. 패키지 정보 및 파일
    • 패키지 정보와 관련된 파일은 /var/cache 디렉토리에 저장됩니다. 이곳은 패키지 관리 도구가 다운로드한 패키지 파일의 캐시를 보관하는 위치입니다.
  3. 캐시
    • 캐시는 미리 읽어놓은 데이터로, 패키지 관리 도구가 더 빠르게 작업을 수행할 수 있도록 도와줍니다.
  4. 의존성 패키지
    • apt, yum, dnf와 같은 패키지 관리 도구는 소프트웨어 설치 시 필요한 의존성 패키지를 자동으로 관리합니다.
  5. 패키지 삭제 시 의존성 관리
    • 예를 들어, httpd 패키지를 삭제할 경우, 해당 패키지에 의존하는 C, D 패키지는 자동으로 삭제되지 않습니다. 이는 의존성 패키지가 다른 소프트웨어에서 사용될 수 있기 때문입니다.
    • 그러나 apt autoremove 명령어를 사용하면 더 이상 사용되지 않는 의존성 패키지를 정리할 수 있습니다. 이 명령은 시스템에서 필요 없는 패키지를 자동으로 찾아 삭제합니다.
  6. 패키지 설치 예시
    • nginx 설치 시 A, B, C, D 의존성 패키지가 설치됩니다.
    • nodejs 설치 시 C, D 의존성 패키지가 설치됩니다.
    • httpd 설치 시 F, G, C, D 의존성 패키지가 설치됩니다.

내가 설치한것중에 mariadb 관련 뭐가 있지?

패키지정보(이름, 버전)만 가져오는 것 : yum check-update / apt update

패키지 버전 업그레이드 : yum update / apt upgrade

→ 백그라운드 업그레이드가 진행될 수 있다.

ls /boot

grep -v “#”

**`lsb_release -a` 명령어는 리눅스 시스템에서 설치된 배포판의 버전 정보를 출력하는 데 사용됩니다.**

패키지 저장소 서버 URL 설정파일

  • /etc/apt/sources.list
  • /etc/yum.repo.d/*.repo

패키지 정보(이름, 버전), 파일(.rpm, .deb)

  • /var/cache /yum

APT 패키지 관리 시스템

  1. APT 내부 구성
    • apt는 apt-get과 apt-cache를 내부적으로 사용하여 패키지를 관리합니다. apt-get은 패키지 설치, 제거 등의 작업을 수행하며, apt-cache는 패키지 정보 조회를 담당합니다.
  2. 패키지 정보 저장
    • 패키지 정보는 /var/lib/apt/lists/ 디렉토리에 저장됩니다. 이 폴더가 비어 있으면 현재 리눅스 시스템에서 패키지 정보(이름, 버전)가 없으므로 apt search 명령어를 사용할 수 없습니다.
    • 그러나 이미 설치된 패키지에 대한 정보는 여전히 존재하므로, 설치된 패키지에 대한 정보는 조회할 수 있습니다.
  3. 패키지 저장소와 정보
    • 패키지 정보는 패키지 저장소(repo) 서버로부터 수집됩니다. 이 정보에는 패키지의 이름, 버전 등이 포함됩니다.
  4. 패키지 조회 과정
    • 사용자가 apt search 명령어를 입력하면, APT는 저장소에서 패키지 정보를 조회하여 사용자가 요청한 패키지를 검색합니다.
  5. 패키지 파일 다운로드
    • 패키지 파일(.deb)은 임시로 /var/cache/apt/archives/에 다운로드됩니다.
    • 이 위치에 저장된 .deb 파일은 설치가 완료된 후 dpkg를 통해 처리됩니다.
  6. 패키지 설치 후 처리
    • 패키지가 성공적으로 설치되면, APT는 /var/cache/apt/archives/에 저장된 .deb 파일들을 제거하여 공간을 절약합니다.

정리

패키지 설치 실패 원인

  1. 외부망 및 DNS 설정 문제
    • 외부망 연결 문제: 폐쇄망 환경에서 외부망에 연결되지 않으면 패키지 공식 서버로부터 데이터를 다운로드할 수 없습니다.
    • DNS 설정 문제: DNS 설정이 잘못되면 도메인 이름을 IP 주소로 변환할 수 없어 패키지 저장소에 접근하지 못합니다. 예를 들어, ping 8.8.8.8은 성공하지만 ping www.google.com이 실패하는 경우 DNS 설정이 잘못된 것입니다.
  2. 패키지 저장소 URL 설정 문제
    • 패키지 저장소의 URL 설정에 문제가 있을 수 있습니다. URL이 만료되었거나 수정된 경우에도 패키지 정보를 가져올 수 없습니다.
    • 패키지 저장소의 설정 파일은 /etc/apt/sources.list (APT) 또는 /etc/yum/repo.d/*.repo (YUM)에서 확인할 수 있습니다.
  3. 패키지 정보 저장 경로
    • 패키지 정보는 패키지 저장소 서버로부터 가져와 /var/cache 또는 /var/lib/lists에 저장됩니다. 이 정보가 없으면 패키지 조회 및 다운로드가 불가능합니다.
  4. 패키지 조회 및 다운로드 과정
    • 패키지 조회(apt search 또는 yum search)를 통해 패키지 정보를 확인합니다. 이 과정에서 문제가 발생하면 패키지를 찾을 수 없습니다.
    • 패키지 파일은 .rpm (YUM) 또는 .deb (APT) 형식으로 다운로드됩니다.
  5. 패키지 설치 과정
    • 다운로드된 패키지 파일은 rpm 또는 dpkg를 통해 설치됩니다. 이 과정에서 오류가 발생할 수 있으며, 패키지 설치 후 임시로 저장된 패키지 파일들은 기본적으로 삭제됩니다.

 

리눅스 문제해결 접근방법과 전략

 

에러 메시지 처리 및 문제 해결 프로세스

  1. 에러 메시지
    • 예시: No such file or directory
    • 이 메시지는 시스템이 요청한 파일이나 디렉토리를 찾을 수 없음을 의미합니다.
  2. 문제 정의
    • 문제는 목표와 현재 상태 간의 차이(Gap)입니다. 예를 들어, 특정 파일에 접근해야 하는데 그 파일이 없어서 작업이 중단되는 상황입니다.
  3. 원인 분석
    • 동작 과정이나 절차를 나열하고 관찰하여 문제의 근본 원인(root cause)을 찾습니다.
    • 예를 들어, 우분투 버전을 업그레이드한 후 리드 성능이 30% 느려졌다면, 다음과 같은 과정을 통해 진단할 수 있습니다:
      • 원래 리드 성능이 어떻게 이루어지는지 분석합니다.
      • 시스템 아키텍처를 고려하여 유저 → 커널(VFS → syscall → FS → submit_bio → Block) 경로를 추적합니다.
      • smartctl 등을 사용하여 디스크 상태를 점검합니다.
      • 펌웨어나 드라이버가 이전보다 성능이 떨어질 수 있으므로, 이를 확인하고 필요 시 펌웨어를 업그레이드해야 할 수 있습니다.
  4. 성능 관련 고려 사항
    • 유저가 10바이트를 리드 요청했더라도 디스크가 느릴 경우, 예상되는 블록을 미리 읽어오는 방식(read-ahead)이 적용될 수 있습니다.
    • 미리 읽기 사이즈가 크면 성능이 좋아질 수 있습니다. 예를 들어, 넷플릭스와 같은 영상 스트리밍 서비스에서는 큰 데이터 블록을 미리 읽어와 버퍼링을 줄이는 방법이 효과적입니다.
  5. 해결책 적용
    • 다양한 해결 방식을 적용하여 문제를 해결합니다.
    • 해결 과정에 대한 기록과 메모를 남기는 것이 중요합니다.
    • 적용한 해결 방식의 평가를 통해 임시방편적인지, 근본적인 해결 방법인지 분석합니다.
    • 예를 들어, 펌웨어 업데이트가 효과적이었다면, 이는 근본적인 해결책으로 평가할 수 있습니다. 반면, 임시 방편적인 조치일 경우 추가적인 조치가 필요할 수 있습니다.

리눅스 명령어 및 파일 관련 오류

쉘(sh, bash, zsh, …) → 명령어에 반응하는 프로그램

사용자 → 명령어를 입력 → bash → PATH 변수를 확인 → 여러개의 폴더 경로정보를 알 수 있다. → 폴더들을 전부 순회하면서 해당 명령어의 문자열이 일치하는 바이너리 실행파일을 찾는다. → 실행한다.

PATH=

PATH 경로 관련

주석을 바꾸면 file hello 에서 형식이 구분이 된다.

~/.bashrc 파일의마지막 라인에 PATH=$PATH:/home/realinux 를 추가하면 새롭게 열린 bash/shell 에서도 PATH 정보를 확인해서 home/realinux 를 찾을 수있다.

터미널생성 → bash 새롭게 ㅣㄹ행 → 최초실행시 ~/.bashrc 를 세팅한다.

기존 터미널에서 ~/.bashrc 를 수정했다면 source ~/.bashrc 명령어를 하면 새로운 터미널을 안켜도 현재 터미널에서 설정이 적용된다.

~/.bashrc 파일 마지막 라인에 아래 라인을 적고

alias test_ls=’ls -l —color=auto’

저장후에 source ~/.bashrc 설정 적용 하고 alias 명령어를 통해서 설정적용결과 확인하고 test_ls 명령어 입력해보기

아래의 명령어 맨 밑에 사진과 같이 입력을 하면 새로운 터미널을 켰을떄도 인석을 함

nano ~/.bashrc

alias grep=” 를 적고 저장후에

source ~/.bashrc 설정 적용하고

ps -ef | grep kwroker 가 정상동작 안되는 상황을 만들어보자

bash 쉘에서 명령어를 입력했을떄 처리되는 과정:

  1. alias 별칭인지?
  2. bash 쉘 내장명령어 인지? → compgen -b (내장명령어만 입력할 수 있다)
  3. bash 쉘이 아닌 외부명령어를 찾자 → PATH 변수를 참조해서 폴더를 순회하고 없으면 command not found 나옴
300x250

+ Recent posts