Linux가 파일 확장자와 아무 관련이 없음에도 불구하고 파일 확장자를 사용하여 파일을 여는 기본 프로그램을 결정하는 이유

Linux가 파일 확장자와 아무 관련이 없음에도 불구하고 파일 확장자를 사용하여 파일을 여는 기본 프로그램을 결정하는 이유

텍스트 파일이 있습니다. abc.text내용은 다음과 같습니다.Hi I'm a text file.

파일을 두 번 클릭하여 열면 gedit편집기에서 열립니다.

그러나 파일 이름을 다음으로 바꾸면 abc.html(내용을 변경하지 않고) 기본적으로 Chrome에서 열립니다.

Windows는 파일 확장자를 사용하여 파일 형식을 식별하므로 이 동작은 Windows 컴퓨터에서 허용됩니다. 그러나 내가 아는 한 Linux에는 파일 확장자가 필요하지 않습니다.

그렇다면 Linux에서 파일 확장자를 변경하면 파일을 여는 기본 프로그램이 변경되는 이유는 무엇입니까?

답변1

Linux는 파일 확장자를 사용하여 파일을 여는 방법을 결정하지 않지만 Linux는 파일 확장자를 사용하여 파일을 여는 방법을 결정합니다.

여기서 문제는 "Linux"가 운영 체제의 다른 부분을 지정할 수 있고 "파일 열기"도 다른 의미를 가질 수 있다는 것입니다.

Linux와 Windows의 차이점은 애플리케이션 파일과 데이터 파일을 처리하는 방식입니다. Windows에서는 둘 사이의 경계가 흐려집니다. 확장자( .exe, .bat등)에 따라 결정되는 여러 유형의 실행 파일이 있지만 대부분의 경우 모든 파일을 "실행"할 수 있으며(예: 탐색기에서 클릭) 이 파일 유형이 사용됩니다. 연관된 실행 파일에 의해, 여기서 파일 유형은 전적으로 확장자에 의해 결정됩니다(따라서 실행 파일이 .doc시작될 수 있고 c:\Program Files\something or other\winword.exe, 실행 파일이 .pyPython 인터프리터를 시작할 수 있습니다 등).

Linux에는 파일 이름과 무관한 실행 파일이라는 개념이 있습니다. 실행 파일은 일반적으로 사용자가 입력하기 때문에 확장자가 없습니다. 파일 형식은 중요하지 않습니다. 사용자는 파일을 실행하기만 하면 됩니다. 커널은 내용에 따라 파일을 실행하는 방법을 결정합니다. 일부 파일 형식을 기본적으로 알고 있으며셰르본메커니즘을 사용하면 파일이 다른 실행 파일을 해석기로 선언할 수 있습니다.

반면에 데이터 파일은 일반적으로 데이터 유형을 나타내는 확장자를 갖습니다. 여기서 일반적인 아이디어는 데이터 유형이 파일을 여는 데 사용된 응용 프로그램과 동의어가 아니라는 것입니다. Okular, Evince, Xpdf, Acroread 또는 Mupdf 등에서 PDF를 볼 수 있습니다.

그러나 사용할 애플리케이션을 명시적으로 지정하지 않고도 데이터 파일을 열 수 있는 도구가 많이 있습니다. 이러한 도구는 거의 전적으로 파일 확장자를 토대로 결정을 내립니다. 파일 확장자와 파일 내용은 이러한 도구가 사용할 수 있는 유일한 정보입니다. Linux는 파일 형식에 대한 메타 정보를 저장하지 않습니다. 따라서 .pdf파일 관리자에서 파일을 클릭하면 (또는 .pdf적절하게 구성된 zsh 명령줄에서 파일을 실행하는 경우 등) 파일 관리자는 데이터베이스를 참조하여 파일의 기본 응용 프로그램을 찾습니다 .pdf. 데이터베이스는 두 부분으로 나눌 수 있습니다. 하나는 확장자를 MIME 유형( /etc/mime.types, ~/.local/share/mime)과 연결하는 부분이고 다른 하나는 MIME 유형을 응용 프로그램( /etc/mailcap,~/.local/share/applications), 그러나 그 경우에도 원점은 확장입니다. 일반적으로 파일 내용에서 애플리케이션을 파악하는 것이 가능하지만 속도가 느리고 항상 가능한 것은 아닙니다(많은 형식이 텍스트 파일처럼 보이고 a는 .jar파일 유형 .zip등입니다).

리눅스 아니오필요파일 확장자는 실행 파일을 실행하는 방법을 결정하는 데 사용되지 않지만 데이터 파일을 여는 데 사용할 프로그램을 결정하는 데 사용됩니다.

¹ 파일은 기본 실행 파일이어야 하며 shebang 실행 파일은 잠재적인 끝없는 재귀를 방지하기 위해 다른 shebang 실행 파일을 가리킬 수 없습니다.

답변2

데스크탑 환경에는 파일 브라우저에서 파일을 선택할 때 어떤 파일을 여는 데 사용할 응용 프로그램을 결정하는 자체 메커니즘이 있습니다. 이는 기본 Unixoid 운영 체제와는 아무런 관련이 없습니다. 이 경우 Linux(커널과 핵심 라이브러리 및 유틸리티를 의미)는 여전히 확장과 관련이 없습니다.

이 메커니즘은 일반적으로 사용자 편의와 다음을 위해 확장을 기반으로 합니다.최소한의 놀라움 규칙. MIME 유형은 여기에서 공통 콘텐츠 유형에 여러 확장자(예: 등)를 할당하기 위해 사용된 추상화일 뿐이며 .htm, 파일로 원하는/수행할 수 있는 작업을 결정하는 데 사용됩니다. 따라서 데스크탑 설정에서 MIME 유형에 확장자를 할당하고 각 유형에 대해 파일을 여는 데 사용되는 응용 프로그램을 선택할 수 있습니다..html.HTML

그러나 실행 파일의 경우 옛날 DOS에서는 운영 체제가 세 가지 유형의 파일만 실행할 수 있었고 확장자: .bat, .com, 로 해석하는 방식을 결정했습니다 .exe. 이 시대는 오래 전에 지나갔고, 다른 운영 체제(예: Unix 및 모든 하위 버전)는 이러한 미묘한 메커니즘에 의존하지 않았지만 파일 실행 여부와 방법을 결정하는 다른 방법이 항상 있었습니다.

이것관습확장 기능을 사용하는 것이 유용하고 확장되었으며 여전히 사용되지만 운영 체제의 목적이 아니라 사용자의 편의를 위해 볼 필요가 없습니다.입력하다something.sh포함된 내용을 검색하기 위해 이름이 지정된 파일입니다 . 하지만,운영 체제는 이에 의존하지 않습니다., 그러나 애플리케이션은 다음을 수행할 수 있으며 스크립트는 항상 다음을 수행합니다.

for file in *.html; do ...

답변3

다른 사람들이 대답했듯이 특정 파일을 여는 데 사용할 프로그램을 선택하는 것은 프로그램(셸)에 달려 있습니다.

그러나 선택을 내리는 것은 확장자만이 아닙니다. 일반적으로 형식을 식별하는 파일 시작 부분에 서명이 있습니다. [이는 UNIX 파생 형식뿐만 아니라 거의 모든 바이너리 프로그램에서 공통적입니다]. 이 프로그램 file(및 해당 데이터베이스)은 파일 형식을 해독하기 위한 기본 소스입니다.

관련 정보