[unix] Linux는 파일을 열 응용 프로그램을 어떻게 선택합니까?

파일이 OS에 파일 형식을 알려 주면 OS는 기본적으로 파일을 열 응용 프로그램을 어떻게 선택합니까?

Windows에서 연결이 레지스트리 테이블에 저장됩니까?

Linux는 파일을 열 응용 프로그램을 어떻게 선택합니까?

나는 노틸러스를 많이 사용했지만 이제 터미널로 바꿨습니다. 터미널에서 파일을 열 응용 프로그램을 항상 명시 적으로 지정해야한다는 것이 사실입니까? 기본적으로 특정 형식의 파일을 여는 응용 프로그램의 설정이 파일 관리자 (예 : 노틸러스)에 속하는가? 터미널에 거주 할 때 문제가되지 않습니까?



답변

이러한 기본 설정을 처리하는 메커니즘이 다를 수 있습니다. 그러나 다른 답변은 완전한 데스크탑 환경에 중점을 두는 경향이 있으며 각 환경에는 고유 한 메커니즘이 있습니다. 그러나 이들은 항상 시스템 (OpenBox를 많이 사용)에 설치되는 것은 아니며이 경우와 같은 도구 xdg-open가 사용될 수 있습니다.

아치 위키 인용하기 :

xdg-open은 사용자의 기본 응용 프로그램을 구성하기위한 데스크탑 독립적 도구입니다. 많은 응용 프로그램에서 xdg-open 명령을 내부적으로 호출합니다.

현재 우분투 (12.04)를 사용하고 xdg-open있습니다. 그러나 그놈과 같은 완전한 데스크탑 환경을 사용하는 xdg-open경우 간단한 전달자 역할을하고 파일 요청을 DE로 릴레이 한 다음 원하는대로 처리 할 수 ​​있습니다 (예 : 그놈 및 노틸러스에 대한 다른 답변 참조). .

데스크탑 환경 (예 : 그놈, KDE 또는 Xfce) 내에서 xdg-open은 단순히 데스크탑 환경의 파일 오프너 응용 프로그램 (gvfs-open, kde-open 또는 exo-open)에 인수를 전달합니다. 연결은 데스크탑 환경에 맡겨집니다.

…이 경우 다른 답변으로 되돌아갑니다. 여전히 이것이 유닉스와 리눅스이기 때문에 우분투에게 묻지 않기 때문에 :

데스크탑 환경이 감지되지 않으면 (예 : Openbox와 같은 독립형 창 관리자를 실행하는 경우) xdg-open은 자체 구성 파일을 사용합니다.

전체적으로 :

                            |-- no desktop env. > handle directly.
User Request > xdg-open > --|
                            |-- desktop env.    > pass information to the DE.

첫 번째 경우 명령을 사용하여 직접 구성xdg-open 해야합니다 xdg-mime(어떤 응용 프로그램이 어떤 파일을 처리해야하는지 확인할 수도 있음). 두 번째 경우에는 …

                        |-- GNOME? > gvfs-open handles the request.
                        |
Info. from xdg-open > --|-- KDE?   > kde-open handles the request.
                        |
                        |-- XFCE?  > exo-open handles the request.

… 데스크탑 환경과 관련된 파일 오프너를 구성해야합니다. 경우에 따라 구성이 xdg-mime환경의 적절한 구성 도구로 리디렉션 될 수 있습니다.


답변

로부터 위키 항목,

KDE 및 GNOME과 같은 Linux 기반 GUI는 MIME 유형 기반 연결을 지원합니다. 예를 들어 MIME 유형 text / plain은 텍스트 편집기와 연결됩니다.

또한 답변에는 자세한 내용이 있습니다.

파일 관리자는 종종 옵션 a와 b의 조합을 사용합니다 (예 : 파일 확장자를 모르거나 파일 확장자가없는 경우 먼저 파일 확장자를 확인한 후 내용을보십시오).

파일 유형은 일반적인 Linux 파일 시스템에서 메타 데이터로 저장되지 않습니다.

에서 대답 나는 아래의 정보를 참조하십시오.

파일 관리자 (기본적으로 노틸러스)는 파일의 MIME 유형을 사용하여 파일을 열 프로그램을 결정합니다. 응용 프로그램이 설치되면 열 수있는 MIME 유형과 / usr / share / applications에있는 .desktop 파일의 파일을 여는 데 사용할 명령을 지정할 수 있습니다. 메뉴, 바탕 화면 바로 가기 등에 사용되는 파일입니다.


답변

파일은 한 가지 예외를 제외하고 OS에 파일 형식을 알려주지 않습니다.

실행 파일이 소위 shebang 줄로 시작하면

#! /usr/bin/perl

이 줄은 리눅스 커널에게 시작해야한다고 알려줍니다 /usr/bin/perl(즉,이 파일을 실행하는 대신이 파일을 실행 usr/bin/perl하여 인수로 제공 해야합니다 ). 이것은 물론 shebang 행을 무시하거나 이해하는 파일 형식에서만 작동합니다.

그 외에 운영 체제는 파일 형식에 대해 아무것도 모릅니다. 그러나 다른 파일을 열 수있는 많은 프로그램에는 어떤 파일을 열 때 사용할 프로그램을 결정하는 자체 메커니즘이 있습니다. 프로그램 자체의 목록 일 수도 있고 (예 : Firefox에서 그러한 목록을 유지 보수 함) 프로그램이이를 데스크탑 환경 (Linux의 경우 여러 가지)에 위임 할 수도 있습니다.

일반적으로 이러한 메커니즘은 파일 이름 만 고려하여 파일 형식을 결정합니다. 이메일 클라이언트 및 웹 브라우저는 예외이며, 일반적으로 파일 유형은 서버에서 명시 적으로 제공하거나 메일에 명시되어 있습니다.

이 메커니즘은 일반적으로 2 단계입니다.

  • 먼저 파일 이름 또는 제공된 정보에서 파일의 MIME 유형을 결정하십시오 (MIME 유형은 표준화되었지만 확장 가능한 파일 유형 목록입니다).
  • 둘째, MIME 형식에서 일반적으로 프로그램 자체 또는 프로그램이 작성된 데스크톱 환경에 의해 유지 관리되는 일종의 레지스트리를 통해 실행할 프로그램을 결정합니다.

답변

MS-Windows와 유사하게 수행됩니다.

OS에 의해 수행되지 않습니다. 윈도우 시스템의 일부인 파일 관리자가 수행합니다. 일반적으로 마지막 점 뒤의 파일 이름 부분이 .결정에 사용됩니다. 설정에서 또는 파일을 마우스 오른쪽 버튼으로 클릭 할 때 설정하는 방법이 있습니다.

따라서 파일은 OS에 알리지 않고 파일이 활성화되어 있지 않으므로 자체적으로 아무것도 할 수 없지만 파일 관리자는 파일 이름을보고 파일 관리자는 file유틸리티 와 마찬가지로 파일 내부를 볼 수 있습니다 .


답변

@richard이 말했듯이 Windows와 비슷합니다. 일반 파일 관리자는 먼저 파일 이름을보고 프로그램과 연관된 파일 확장자를 인식하려고 시도 할 수 있습니다. 실패하면 파일을 열고 헤더를 찾습니다. 텍스트가 아닌 파일 (예 : .jpeg)을 읽으려고하면 파일을 설명하는 데이터 문자열이 표시됩니다. 예를 들어, 이것은 내가 누워있는 .jpeg의 첫 번째 줄입니다.

'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xfe\x00;CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), quality = 90'


답변

유닉스 시스템이 파일을 처리하는 방법에 대한 기본적인 대답을하려고합니다. 다른 사람들이 지적했듯이 파일 자체는 어떤 유형을보고하지 않으며 커널 자체는 사용할 응용 프로그램을 결정하지 않기 때문에 질문에 대한 문구가 잘못되었습니다.

Unix 및 Windows 운영 체제에서 파일은 단순히 바이트 시퀀스로 구성됩니다. Tanenbaum 운영 체제 , 제 3 판 :

실제로 운영 체제는 파일의 내용을 알거나 신경 쓰지 않습니다. 보이는 것은 바이트입니다. 모든 의미는 사용자 레벨 프로그램에 의해 부과되어야합니다.

이것이 데스크탑 환경에서 xdg-open특정 파일 유형을 열기위한 기본 응용 프로그램을 결정하는 데 사용되는 이유 입니다.

유닉스 시스템에서 파일은 일반 파일특수 파일로 구분 됩니다. 일반 파일은 텍스트 파일 (ASCII 또는 유니 코드 인코딩) 또는 이진 (실행 코드) 일 수있는 사용자 데이터 일뿐입니다. 특수 파일은 OS 실행에 필수적인 파일입니다. 여기에는 디렉토리, 링크, 파이프, 소켓 및 장치 파일이 포함됩니다. ¹

그것은 파일 이름들이 파일의 종류를 표시하는 확장을 포함하는 것이 관례입니다 있을 예를 들어, * C 소스 코드, 타넨 바움에서 등 웹 페이지에 대한 * 또는 .html이 .c :

일부 시스템 (예 : UNIX)에서 파일 확장자는 규칙 일 뿐이며 운영 체제에 의해 시행되지 않습니다. file.txt라는 파일은 일종의 텍스트 파일 일 수 있지만 실제 이름을 컴퓨터에 전달하는 것보다 소유자에게 상기시키는 것이 더 좋습니다. 반면에 C 컴파일러는 실제로 .c로 컴파일 할 파일을 요구할 수 있으며 그렇지 않은 경우 컴파일을 거부 할 수 있습니다.

적절한 확장자없이 파일을 저장하거나 이름을 바꾸어도 해당 파일 형식과 동일한 형식을 유지합니다. 이것은 대부분의 파일 관리자가 파일을 열 응용 프로그램을 결정하는 방법이며, 확장명이 없으면 “이 파일을 여는 데 사용할 프로그램을 선택하십시오.”라는 메시지가 표시되는 이유는 무엇입니까?

마지막으로 환경 변수는 시스템 전체 및 사용자 수준 설정을 정의하는 데 사용됩니다. 예를 들어, 변수가 EDITOR텍스트 등을 처리 할 때 열 수있는 텍스트 편집기 지정하는 데 사용됩니다 vim, nano등 프로세스는이 편집 할 때 같은 오픈에있는 편집기, 알 방법이이 git메시지를 커밋합니다. 그렇지 않으면 사용할 응용 프로그램을 지정해야합니다. vim설정 filetype on이 설정된 경우 확장자를 확인하고 파일 내용을 검사하여 파일 유형 을 감지 하면 올바른 구문 강조, 들여 쓰기 등이 적용됩니다. ²

TL; DR

요약하면 OS 자체가 아닌 특정 파일 형식으로 열 프로그램을 결정하는 것은 사용자 수준 응용 프로그램입니다.


답변