Linux에서 fd의 전체 이름은 "파일 설명자"이고 중국어 이름은 "파일 설명자"입니다. 이는 열린 파일을 효율적으로 관리하기 위해 커널이 생성한 인덱스입니다. 정수, 사용 열린 파일을 참조하기 위해 I/O 작업을 수행하는 모든 시스템 호출은 파일 설명자를 통해 구현됩니다.
이 튜토리얼의 운영 환경: linux7.3 시스템, Dell G3 컴퓨터.
리눅스에서 fd의 전체 이름은 "파일 설명자"이고, 중국어 이름은 "파일 설명자"입니다. 파일 설명자는 음수가 아닌 정수이며 본질적으로 인덱스 값입니다(이 문장은 매우 중요합니다).
Linux의 파일 설명자(fd)
우리는 Linux 시스템의 모든 것이 파일로 간주될 수 있으며 파일은 일반 파일, 디렉터리 파일, 링크 파일 및 장치 파일로 나눌 수 있다는 것을 알고 있습니다. 이러한 소위 파일을 조작할 때 조작할 때마다 이름을 찾아야 하므로 많은 시간과 효율성이 소모됩니다. 따라서 리눅스에서는 각 파일이 인덱스에 해당한다고 규정하고 있기 때문에 파일을 조작하고 싶을 때 직접 인덱스를 찾아 조작하면 된다.
파일 설명자는 열린 파일을 효율적으로 관리하기 위해 커널에서 생성한 인덱스입니다. I 시스템의 모든 실행은 /를 호출하는 데 사용됩니다. O 작업은 파일 설명자를 통해 구현됩니다. 동시에 시스템이 방금 시작되면 0은 표준 입력, 1은 표준 출력, 2는 표준 오류라고 규정되어 있습니다. 즉, 이때 새 파일을 열면 해당 파일 설명자는 3이 되고, 다른 파일을 열면 파일 설명자는 4가 됩니다...
리눅스 커널에는 열려 있는 모든 파일에 대한 파일 설명이 있습니다. 각 파일 디스크립터 사이의 관계를 인덱스로 저장하는 디스크립터 테이블, 간단히 이해하면 아래와 같은 배열입니다. 파일 디스크립터(인덱스)는 파일 디스크립터 테이블에 있는 배열의 첨자입니다. 콘텐츠는 열린 파일을 하나씩 가리키는 포인터입니다.
위 내용은 단순한 이해일 뿐입니다. 실제로 파일 설명자와 관련하여 Linux 커널은 3가지 데이터 구조를 유지합니다.:
- 프로세스 수준 파일 설명자 테이블
- 시스템 수준 열린 파일 설명자 테이블
- 파일 시스템의 i-노드 테이블
Linux 프로세스가 시작된 후 커널 공간에 PCB 제어 블록이 생성됩니다. PCB 내부에는 현재 사용 가능한 모든 파일 설명을 기록하는 파일 설명자 테이블이 있습니다. 프로세스 기호, 즉 현재 프로세스의 열려 있는 모든 파일입니다. 프로세스 수준 설명자 테이블의 각 항목은 단일 프로세스에서 사용하는 파일 설명자에 대한 정보를 기록합니다. 프로세스는 서로 독립적입니다. 한 프로세스가 파일 설명자 3를 사용하면 다른 프로세스도 3를 사용할 수 있습니다. 프로세스 수준 파일 설명자 테이블 외에도 시스템은 열린 파일 테이블과 i-노드 테이블이라는 두 개의 다른 테이블도 유지 관리해야 합니다. 이 두 테이블은 열려 있는 각 파일의 열린 파일 핸들을 저장합니다. 열린 파일 핸들은 열린 파일과 관련된 모든 정보를 저장합니다.
시스템 수준 열린 파일 설명자 테이블:
- 현재 파일 오프셋(read() 및 write() 호출 시 업데이트되거나 lseek()를 사용하여 직접 수정됨)
- 파일 열 때 식별(열기(플래그 매개변수) of))
- 파일 액세스 모드(예: open() 호출 시 설정된 읽기 전용 모드, 쓰기 전용 모드 또는 읽기-쓰기 모드)
- 시그널 드라이버 관련 설정
- 파일 i-node 객체 참조, i.e. i-노드 테이블 포인터
파일 시스템의 i-노드 테이블:
- 파일 유형(예: 일반 파일, 소켓 또는 FIFO) 및 액세스 권한
- 파일에 대한 포인터 보유된 잠금 목록
- 다양한 유형의 작업과 관련된 파일 크기 및 타임스탬프를 포함한 파일의 다양한 속성
파일 설명자, 열린 파일 핸들 및 i-노드 간의 관계는 아래와 같습니다.
- 프로세스 A에서 파일 설명자 1과 20은 모두 23이라는 레이블이 붙은 동일한 열린 파일 테이블 항목을 가리킵니다(열린 파일 테이블에서 인덱스 23의 배열 요소를 가리킴). 이는 dup() , dup2( ), fcntl() 또는 동일한 파일에 대한 open() 함수에 대한 여러 호출.
- 프로세스 A의 파일 설명자 2와 프로세스 B의 파일 설명자 2는 모두 동일한 파일을 가리킬 수 있습니다(즉, 프로세스 A와 B는 상위-하위 프로세스 관계임). 프로세스는 동일한 파일을 열기 위해 open() 함수를 단독으로 호출한다. 이때 프로세스 내부의 디스크립터는 다른 프로세스가 파일을 열기 위해 사용하는 것과 동일한 디스크립터에 할당된다.
- 프로세스 A의 설명자 0과 프로세스 B의 설명자 3은 각각 다른 열린 파일 테이블 항목을 가리키지만 이러한 테이블 항목은 i-node 테이블(1976으로 표시됨)의 동일한 항목을 가리킵니다. 같은 파일입니다. 이는 각 프로세스가 동일한 파일에 대해 별도의 open() 호출을 하기 때문에 발생합니다. 동일한 프로세스가 동일한 파일을 두 번 열면 비슷한 상황이 발생합니다.
즉, 동일한 프로세스의 서로 다른 파일 설명자가 동일한 파일을 가리킬 수 있습니다. 서로 다른 프로세스의 동일한 파일 설명자가 서로 다른 파일을 가리킬 수 있습니다. 세 개의 특수 파일(0, 1, 2) 외에도 서로 다른 프로세스의 서로 다른 파일 설명자가 동일한 파일을 가리킬 수도 있습니다.
Linux에서 파일 열기 예
예를 들어 Linux에서 vim test.py를 사용합니다. 파일을 열고 열어 둔 다음 새 셸을 열고 pidof vim Get 명령을 입력합니다. vim 프로세스 pid 번호를 입력한 다음 ll /proc/$pid/fd를 입력하여 vim 프로세스에서 사용하는 파일 설명자 목록을 확인하세요.
/dev/pts은 원격 로그인(telnet, ssh 등) 후 생성된 콘솔 장치 파일이 있는 디렉터리입니다. Xshell을 통해 원격으로 로그인했기 때문에 표준 입력 0, 표준 출력 1, 표준 오류 2의 파일 설명자는 모두 가상 터미널 콘솔 /dev/pts/6을 가리킵니다. 아래 새로 열린 test.py의 파일 디스크립터를 보면 4로 나와 있습니다. 3부터 시작하는 데 동의하셨나요?
이 문제로 오랫동안 고민했는데, 결국 큰 상사의 도움으로 포럼에서 그 이유를 찾았습니다. 중국어로 찾을 수 없으면 한 번 시도해 보세요. 영어 검색. vim과 같은 편집기의 원칙은 먼저 소스 파일을 열고 복사한 다음 소스 파일을 닫은 다음 자신의 복사본을 여는 것입니다. 파일을 수정하고 저장한 후 복사본의 이름을 직접 바꾸고 소스 파일을 덮어씁니다. 따라서 소스 파일을 열 때 파일 설명자 3를 사용한 다음 파일 설명자 4를 사용할 차례입니다. 그런 다음 소스 파일을 닫으면 파일 설명자 3가 해제됩니다. 확인해 보면 4만 남는데, 이는 vim이 만든 복사본 파일을 가리킵니다. 이것은 단지 일반적인 아이디어일 뿐입니다. vim - Oort Nebula Ambassador의 구현 원리를 더 자세히 알아보기 위해 다음은 당시 제가 본 포럼의 정보 스크린샷입니다. 링크는 여기입니다.
믿을 수 없다면 꼬리와 같은 다른 프로세스를 시도해 볼 수 있습니다.
Linux에서 tail -f test.py를 사용하여 파일을 엽니다. 파일을 열어 둔 다음 새 셸을 열고 pidof tail 명령을 입력합니다. tail 프로세스의 pid 번호를 가져온 다음 ll /proc/$ pid/fd tail 프로세스에서 사용하는 파일 디스크립터 목록을 확인하면 3부터 실제로 파일 디스크립터가 사용되는 것을 확인할 수 있습니다. Tail은 편집기에서 파일을 수정하지 않으므로 파일 설명자를 사용하여 소스 파일을 직접 엽니다. 실제로 ll /proc/$pid/fd 명령을 사용하여 현재 실행 중인 모든 프로세스의 파일 설명자 사용량을 가져올 수 있습니다.
확장된 지식: Linux 구성 시스템 최대 열린 파일 설명자 수
(1) 시스템 수준 제한
이론적으로는 시스템 메모리만큼 많은 파일 설명자를 열 수 있지만 실제로는 커널이 이에 따라 이를 처리합니다. 일반적으로 최대 열린 파일 수는 시스템 메모리(KB로 계산)의 10%입니다. 시스템 수준 제한이라고 합니다. 이 숫자는 cat /proc/sys/fs/file-max 또는 sysctl -a | grep fs.file-max 명령을 통해 볼 수 있습니다.
시스템 수준 제한을 변경하는 방법에는 두 가지가 있습니다: 임시 변경과 영구 변경:
임시 변경: 세션 연결이 끊어지거나 시스템이 다시 시작되면 원래 설정 값이 복원됩니다. sysctl -w fs.file-max=xxxx 명령을 사용합니다. 여기서 xxxx는 설정할 숫자입니다.
영구 변경: vim은 /etc/sysctl.conf 파일을 편집하고 끝에 fs.file-max=xxxx를 추가합니다. 여기서 xxxx는 설정할 숫자입니다. 저장하고 종료한 후 sysctl -p 명령을 사용하여 적용합니다.
(2) 사용자 수준 제한
동시에 각 프로세스에서 소비하는 파일 리소스를 제어하기 위해 커널은 단일 프로세스에 대해 최대 열린 파일 수에 대한 기본 제한도 설정합니다. 프로세스, 즉 사용자 수준 제한입니다. 32비트 시스템의 기본값은 일반적으로 1024이고, 64비트 시스템의 기본값은 일반적으로 65535입니다. ulimit -n 명령을 사용하여 볼 수 있습니다.
사용자 수준 제한을 변경하는 방법에는 두 가지가 있습니다: 임시 변경과 영구 변경:
임시 변경: 세션 연결이 끊어지거나 시스템이 다시 시작되면 원래 설정 값이 복원됩니다. ulimit -SHn xxxx 명령을 사용하여 수정합니다. 여기서 xxxx는 설정할 숫자입니다.
영구 변경 사항: vim은 /etc/security/limits.conf 파일을 편집하고 hard nofile xxxx 및 soft nofile xxxx를 수정합니다. 여기서 xxxx는 설정할 번호입니다. 저장하고 종료합니다. 하드와 소프트의 차이에 대해서는 아래 5번째 참고링크를 참고해주세요.
관련 추천: "Linux 비디오 튜토리얼"
위 내용은 리눅스 fd가 뭐야?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

유지 보수 모드는 단일 사용자 모드 또는 구조 모드를 통해 Linux 시스템에 입력 된 특수 작동 수준이며 시스템 유지 관리 및 수리에 사용됩니다. 1. 유지 보수 모드를 입력하고 "sudosystemctlisolaterscue.target"명령을 사용하십시오. 2. 유지 보수 모드에서는 파일 시스템을 확인하고 수리하고 "FSCK/DEV/SDA1"명령을 사용할 수 있습니다. 3. 고급 사용법에는 루트 사용자 비밀번호 재설정, 파일 시스템을 읽기 및 쓰기 모드로 장착하고 비밀번호 파일을 편집하는 것이 포함됩니다.

유지 보수 모드는 시스템 유지 보수 및 수리에 사용되므로 관리자는 단순화 된 환경에서 작업 할 수 있습니다. 1. 시스템 수리 : 손상된 파일 시스템 및 부트 로더 수리. 2. 비밀번호 재설정 : 루트 사용자 비밀번호를 재설정합니다. 3. 패키지 관리 : 소프트웨어 패키지를 설치, 업데이트 또는 삭제합니다. Grub 구성을 수정하거나 특정 키로 유지 보수 모드를 입력하면 유지 보수 작업을 수행 한 후 안전하게 종료 할 수 있습니다.

Linux 네트워크 구성은 다음 단계를 통해 완료 할 수 있습니다. 1. 네트워크 인터페이스 구성 IP 명령을 사용하여 구성 파일 관리 설정을 일시적으로 설정하거나 편집하십시오. 2. 고정 IP가 필요한 장치에 적합한 정적 IP를 설정합니다. 3. 방화벽을 관리하고 IPTables 또는 방화구 도구를 사용하여 네트워크 트래픽을 제어하십시오.

유지 보수 모드는 Linux 시스템 관리에서 중요한 역할을 수행하여 수리, 업그레이드 및 구성 변경을 돕습니다. 1. 유지 보수 모드를 입력하십시오. 그루브 메뉴를 통해 선택하거나 "sudosystemctlisolaterscue.target"명령을 사용할 수 있습니다. 2. 유지 보수 모드에서는 파일 시스템 수리 및 시스템 업데이트 작업을 수행 할 수 있습니다. 3. 고급 사용법에는 루트 비밀번호 재설정과 같은 작업이 포함됩니다. 4. 유지 보수 모드를 입력하거나 파일 시스템을 마운트 할 수없는 것과 같은 일반적인 오류는 Grub 구성을 확인하고 FSCK 명령을 사용하여 수정할 수 있습니다.

Linux 유지 관리 모드 사용 타이밍 및 이유 : 1) 시스템이 시작될 때 2) 주요 시스템 업데이트 또는 업그레이드를 수행 할 때 3) 파일 시스템 유지 관리를 수행 할 때. 유지 보수 모드는 안전하고 제어 된 환경을 제공하여 운영 안전 및 효율성을 보장하고 사용자에게 미치는 영향을 줄이며 시스템 보안을 향상시킵니다.

Linux의 필수 명령에는 다음이 포함됩니다. 1.LS : 목록 디렉토리 내용; 2.CD : 작업 디렉토리 변경; 3.mkdir : 새 디렉토리 생성; 4.RM : 파일 또는 디렉토리 삭제; 5.CP : 파일 또는 디렉토리 복사; 6.mv : 파일 또는 디렉토리를 이동하거나 바꾸십시오. 이러한 명령은 사용자가 커널과 상호 작용하여 파일 및 시스템을 효율적으로 관리하는 데 도움이됩니다.

Linux에서 파일 및 디렉토리 관리는 LS, CD, MKDIR, RM, CP, MV 명령을 사용하며 권한 관리는 CHMOD, Chown 및 CHGRP 명령을 사용합니다. 1. 파일 및 디렉토리 관리 명령 LS-L 목록 상세 정보와 같은 MKDIR-P는 디렉토리를 재귀 적으로 생성합니다. 2. CHMOD755FILE SET 파일 권한 설정, ChownUserFile 변경 파일 소유자 및 CHGRPGROUPFILE와 같은 허가 관리 명령은 파일 그룹을 변경합니다. 이러한 명령은 파일 시스템 구조 및 사용자 및 그룹 시스템을 기반으로하며 시스템 호출 및 메타 데이터를 통해 작동 및 제어합니다.

MaintenanceModeInlinlinlinuxisspecialbootenvernmentforcriticalsystemmaintenancetasks.itallowsAdministratorStorformtaskSlikeresettingpasswords, Repairingfilesystems, Andrecoveringfrombootfailuresinaminimalenvernment.toentermaintingancemode, intermainteancemode


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구
