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


38

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

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

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

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


24
리눅스는 OS 커널 일뿐입니다. 여기서 데스크탑 환경 또는 파일 관리자 를 의미한다고 가정합니다 . KDE, Gnome, XFCE 등을 실행하는 Android, ChromeOS, Linux (또는 Linux 이외의) 기반 OS
Stéphane Chazelas

아마. 어떤 일을하는지 모르겠습니다. 나는 그놈을 사용하고 있지만 일반에 대해서도 알고 싶습니다.
Tim

그런 다음 OS 및 데스크탑 환경과 응용 프로그램을 명확히하십시오. "unity"데스크톱이있는 Ubuntu 12.04의 노틸러스와 같습니다.
Stéphane Chazelas

(1) 나는 우분투 12.04에 있습니다. 데스크탑 Gnome 또는 "Unity"입니까? (2) 노틸러스를 많이 사용했지만 이제 터미널로 변경합니다. 터미널에서 파일을 열 응용 프로그램을 항상 명시 적으로 지정해야한다는 것이 사실입니까? 기본적으로 특정 형식의 파일을 여는 응용 프로그램의 설정이 파일 관리자 (예 : 노틸러스)에 속하는가? 터미널에 거주 할 때 문제가되지 않습니까?
Tim

답변:


35

이러한 기본 설정을 처리하는 메커니즘이 다를 수 있습니다. 그러나 다른 답변은 완전한 데스크탑 환경에 중점을 두는 경향이 있으며 각 환경에는 고유 한 메커니즘이 있습니다. 그러나 이들은 항상 시스템 (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환경의 적절한 구성 도구로 리디렉션 될 수 있습니다.


11
이상적인 세계에서 Gnome과 KDE는 xdg 설정을 사용하여 파일을 열 앱을 선택하고 xdg 옵션을 변경하는 UI를 제공합니다. 그런 다음 각 DE마다 하나씩 대신 하나의 설정 데이터베이스를 가질 수 있습니다. 아아 xdg는 너무 늦게 나타났다.
joeytwiddle

2
이상적인 세계에서는 3 개의 DE가 없습니다.
Russell Borogove

1
@RussellBorogove-우리는 모두 Windows로 옮겨야합니다. 이상적인 세상입니다.
don_crissti

@don_crissti 이것이 "개발자 나 관리자에게 이상적"이라고 생각합니다. 최종 사용자에게 다양성을 제공하는 것이 좋지만 실제로는 디자이너가 단일 시스템에 집중하는 것이 훨씬 쉬울 것입니다. xdg-open이 두 구성 요소 중 하나 일뿐입니다.
John WH Smith

1
@John-관리자 및 다양한 앱 개발자 / 디자이너 : 약정 ... 그러나 업스트림 개발자는 그저 많은 일을 할 수 있습니다 . 이상적인 세계에서는 이에 대한 불만 대신 KDE, Gnome 등과 같은 업스트림 프로젝트에 기여 하여 DE 간의 사용 성과 반복성 향상에 기여할 것 입니다. 우리 모두 (수백만)가 약간의 노력을 기울 였다면 이러한 모든 문제는 며칠 안에 해결 될 것입니다.
don_crissti

11

로부터 위키 항목,

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

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

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

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

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

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


1
내 질문은 "파일 형식 형식으로"파일을 열 응용 프로그램을 결정합니다.
Tim

11

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

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

#! /usr/bin/perl

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

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

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

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

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

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

명령 행에서 Gnome 연관을 사용하려면 명령을 사용할 수 있습니다 gnome-open. 다른 데스크탑 환경에 유사한 명령 줄 도구가 있다고 확신합니다. 편집 : John WH Smith는 데스크탑 환경과 독립적 인 명령을 제공합니다.
celtschk

6
정정 : shebang 행은 커널에 대한 메시지 가 아닙니다 . 쉘에 대한 메시지 입니다.
Kazark


2
링크 된 페이지의 실제 코드에 대한 링크가 지금 작동하지 않는 것 같습니다. 여기에 쉐방 라인을 처리하는 커널 코드에 대한 링크가 있습니다 : lxr.free-electrons.com/source/fs/binfmt_script.c- 물론 커널 소스를 직접 설치하고 파일을 살펴보십시오.
celtschk

4

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

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

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


아마도 Windows에서는 파일 관리자 자체가 수행하지 않습니다. 모든 응용 프로그램은 호출 할 수 있습니다 shell32!ShellExecute(), 그리고 shell32를 윈도우 쉘의 일부이지만, 그것은이다 Windows 탐색기의 일부가 아니다 기본 파일 관리자.
Ruslan

3

@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'


2
일부 파일 관리자는 파일 이름 확장자 전에 파일 내용을 분석합니다 (확장자는 항상 확장자를 무시할 수도 있음). 예를 들어 KDE의 돌고래에서 브라우저와 관련된 GIF 이미지가 있고 이미지 뷰어가있는 file.pngPNG가있는 경우 PNG 파일의 이름을 바꾸면 이미지 뷰어 file.gif가 계속 열립니다. 파일을 비우면 텍스트 편집기에서 열립니다.
Ruslan

3

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

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 자체가 아닌 특정 파일 형식으로 열 프로그램을 결정하는 것은 사용자 수준 응용 프로그램입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.