Se um arquivo informa ao sistema operacional o formato do arquivo, como o sistema operacional escolhe qual aplicativo abrir por padrão?
No Windows, a associação é armazenada na tabela de registro?
Como o Linux escolhe qual aplicativo abrir um arquivo?
Eu costumava usar muito o Nautilus, mas agora mudo para o terminal. É verdade que, no terminal, sempre precisamos especificar explicitamente qual aplicativo abrir um arquivo? As configurações de qual aplicativo abrir um arquivo de um determinado formato por padrão pertencem ao gerenciador de arquivos (por exemplo, Nautilus), e isso não é um problema quando moramos em terminais?
files
file-opening
Tim
fonte
fonte
Respostas:
Pode haver diferentes mecanismos para lidar com essas configurações padrão. No entanto, outras respostas tendem a se concentrar em ambientes de desktop completos, cada um com seu próprio mecanismo. No entanto, eles nem sempre são instalados em um sistema (eu uso muito o OpenBox) e, nesse caso, ferramentas como as que
xdg-open
podem ser usadas.Citando o Arch Wiki :
Neste momento, estou usando o Ubuntu (12.04) e
xdg-open
está disponível. No entanto, quando você usa um ambiente de área de trabalho completo como o GNOME,xdg-open
age como um encaminhador simples e retransmite as solicitações de arquivo para o seu DE, que fica livre para manipulá-lo como quiser (consulte outras respostas para o GNOME e o Nautilus, por exemplo) .... o que leva você de volta às outras respostas nesse caso. Ainda assim, como esse é Unix e Linux, e não o Ask Ubuntu:
Contudo:
Se o primeiro caso, você precisará configurar
xdg-open
diretamente , usando oxdg-mime
comando (que também permitirá que você veja qual aplicativo deve lidar com qual arquivo). No segundo caso ...... você precisará configurar o abridor de arquivos associado ao seu ambiente de área de trabalho. Em alguns casos, a configuração feita
xdg-mime
pode ser redirecionada para a ferramenta de configuração adequada em seu ambiente.fonte
xdg-open
é apenas um desses componentes que tenta reunir as duas extremidades.Na entrada do wiki ,
Além disso, esta resposta tem mais detalhes.
A partir desta resposta, vejo as informações abaixo.
fonte
Um arquivo não informa ao sistema operacional o formato do arquivo, com uma exceção:
Se um arquivo executável iniciar com a chamada linha shebang, como
então esta linha informa ao kernel do Linux que ele deve ser iniciado
/usr/bin/perl
(ou seja, em vez de executar este arquivo, ele deve executarusr/bin/perl
e fornecer esse arquivo como argumento). Obviamente, isso funciona apenas com formatos de arquivo que ignoram (ou entendem) essa linha shebang.Fora isso, o sistema operacional não sabe nada sobre os tipos de arquivo. No entanto, muitos programas que permitem a abertura de outros arquivos têm seu próprio mecanismo para decidir qual programa usar para abrir o arquivo. Pode ser uma lista dentro do próprio programa (o Firefox, por exemplo, mantém essa lista) ou o programa pode delegá-lo ao ambiente de área de trabalho (dos quais existem vários para Linux).
Geralmente, esses mecanismos consideram apenas o nome do arquivo para decidir que tipo de arquivo é; uma exceção são os clientes de email e navegadores da web, em que geralmente o tipo de arquivo é explicitamente fornecido pelo servidor / indicado no email.
O mecanismo geralmente é de duas etapas:
fonte
gnome-open
. Tenho certeza de que existem ferramentas de linha de comando semelhantes para os outros ambientes de área de trabalho. Edit: Acabei de notar que John WH Smith dá um comando que é independente do seu ambiente de trabalho.É feito de forma semelhante ao MS-Windows.
Isso não é feito pelo sistema operacional. Isso é feito pelo gerenciador de arquivos, parte do sistema de janelas. Geralmente, a parte do nome do arquivo após o último ponto
.
é usada para tomar a decisão. Existe uma maneira de defini-los nas configurações ou quando você clica com o botão direito do mouse em um arquivo.Portanto, o arquivo não informa ao sistema operacional, o arquivo não está ativo e não pode fazer nada por si só, mas o gerenciador de arquivos analisa o nome do arquivo, o gerenciador de arquivos também pode procurar dentro do arquivo da mesma forma que o
file
utilitário.fonte
shell32!ShellExecute()
e, embora o shell32 faça parte do Windows Shell, ele não faz parte do Windows Explorer, que é o gerenciador de arquivos padrão.Como @richard diz, é semelhante ao Windows. Um gerenciador de arquivos genérico pode examinar primeiro o nome de um arquivo e tentar reconhecer uma extensão de arquivo associada a um programa. Se isso falhar, ele pode tentar abrir o arquivo e procurar um cabeçalho. Se você tentar ler um arquivo que não seja de texto (por exemplo, um arquivo .jpeg), verá uma sequência de dados que descreve o arquivo. Por exemplo, esta é a primeira linha de um .jpeg que eu tinha por aí:
'\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'
fonte
file.png
arquivo PNG parafile.gif
ainda abrirá o visualizador de imagens. E se você esvaziar o arquivo, ele será aberto no editor de texto.Tentarei dar uma resposta subjacente sobre como os sistemas Unix lidam com arquivos. Como outros já apontaram, sua formulação da pergunta é enganosa, pois os arquivos em si não informam que tipo são e o próprio kernel não decide quais aplicativos usar.
Nos sistemas operacionais Unix e Windows, os arquivos são estruturados simplesmente como uma sequência de bytes. Dos sistemas operacionais de Tanenbaum , terceira edição:
É por isso que, em um ambiente de área de trabalho,
xdg-open
é usado para determinar aplicativos padrão para abrir tipos de arquivos específicos.Em um sistema Unix, os arquivos são diferenciados entre arquivos regulares e arquivos especiais . Um arquivo regular é apenas um dado do usuário que pode ser um arquivo de texto (codificação ASCII ou Unicode) ou binário (código executável). Arquivos especiais são arquivos essenciais para executar o sistema operacional. Isso inclui diretórios, links, tubos, soquetes e arquivos de dispositivos. ¹
É por convenção que os nomes de arquivos contêm extensões para indicar que tipo de arquivo eles podem ser, por exemplo, * .c para código-fonte C, * .html para páginas da web, etc. De Tanenbaum:
Se um arquivo é salvo ou renomeado sem a extensão adequada, ele ainda mantém o mesmo formato para esse tipo de arquivo. É assim que a maioria dos gerenciadores de arquivos decide com quais aplicativos abrir arquivos, e por que, sem a extensão, a maioria dos arquivos será solicitada ao usuário "Escolha o programa que você deseja usar para abrir este arquivo:".
Por fim, as variáveis de ambiente são usadas para definir configurações em todo o sistema e no nível do usuário. Por exemplo, a variável
EDITOR
é usada para especificar qual editor de texto abrir ao manipular textovim
, por exemplonano
, etc. É assim que os processos sabem qual editor abrir, como ao editar umagit
mensagem de confirmação. Caso contrário, você está correto ao especificar qual aplicativo usar. Observe quevim
detecta tipos de arquivo verificando extensões e inspecionando o conteúdo do arquivo, se a configuraçãofiletype on
estiver definida, que aplica o realce, a indentação etc. da sintaxe correta ²TL; DR
Em resumo, são os aplicativos no nível do usuário que determinam com quais programas abrir um tipo de arquivo específico e não o próprio sistema operacional.
fonte