A origem do .DS_Store (2006)
(arno.org).DS_Storeé a abreviação de Desktop Services Store, criada quando o Finder para Mac OS X foi refeito em 1999- Na época, a base de código do Finder tinha cerca de 8 anos, então até pequenas mudanças tinham alto custo e quebravam recursos aparentemente não relacionados, tornando necessária uma reescrita completa
- O novo Finder separou a interface de usuário do backend, e o backend ficou responsável por enumeração de arquivos, monitoramento de alterações, posições de ícones e metadados como configurações de pastas
- O backend do Finder se tornou candidato a uma API pública que também poderia ser usada fora do Finder e, junto com a possibilidade de renomear o Finder para “Desktop”, recebeu o nome Desktop Services
- O
.DS_Storeoriginalmente deveria ser criado apenas ao alterar configurações de visualização ou posições de ícones, mas, por causa de um bug, muitas vezes era gerado simplesmente ao visitar uma pasta
O nascimento do nome Desktop Services Store
- Em 1999, quando a Apple estava criando um novo Finder para o Mac OS X, a base de código do Finder existente tinha cerca de 8 anos
- Alterações exigiam grande esforço de engenharia
- Mudanças normalmente quebravam 2 ou 3 recursos aparentemente não relacionados
- Foi decidido que o Finder para Mac OS X seria reescrito do zero
- Durante a reescrita, a interface de usuário do Finder foi separada do backend de funcionalidades principais
- Os nomes internos eram
Finder_FEeFinder_BE, respectivamente - O backend era responsável por enumerar arquivos, monitorar mudanças no sistema de arquivos, processar metadados, posições de ícones e configurações de pastas
- Os nomes internos eram
- Como o backend do Finder também poderia ser útil fora do Finder, surgiu o plano de oferecê-lo algum dia como uma API pública
- Com base na experiência anterior de nomear
Icon ServiceseNavigation Services, foi escolhido o nomeDesktop Services - Na época, também estava em análise a possibilidade de renomear o Finder para “Desktop”
.DS_Storevem de “Desktop Services Store”- O
.inicial foi uma escolha para que o arquivo fosse tratado como invisível em sistemas operacionais Unix-like e no Mac OS
- Com base na experiência anterior de nomear
Condições de criação e impacto posterior
- O nome poderia ter sido mais descritivo, mas, depois que já estava amplamente em uso, ficou difícil mudá-lo
- O arquivo
.DS_Storeoriginalmente deveria ser criado apenas quando o usuário ajustasse as configurações de visualização de uma pasta ou definisse manualmente a posição dos ícones- Porém, devido a um bug não corrigido, o arquivo passou a ser criado em excesso
- Na prática, fica quase garantido que um arquivo
.DS_Storeseja criado apenas ao visitar uma pasta
Finder_BE, ou seja, Desktop Services, também é usado fora do FinderNavigation Services, isto é, as caixas de diálogo de abrir/salvar, também passou a usá-lo posteriormente- Nos lançamentos iniciais do Mac OS,
Navigation Servicesnão o usava - A
Desktop Services APIainda não foi totalmente tornada pública
1 comentários
Opiniões no Hacker News
Além desse arquivo, também havia momentos de confusão por causa do conceito de fork no sistema de arquivos do Mac
Aqui, fork não era
fork(), mas uma estrutura em que um componente de dados e um componente de recursos existiam como um par dentro do sistema de arquivos; um era tratado como metadados, e o outro como o conteúdo do arquivoNo Unix, os metadados ficavam no lado dos blocos de diretório/inode e não eram um formato vinculado exclusivamente ao arquivo, então estruturas como
tar,cpioezipprecisavam representá-los separadamentePara implementar suporte a arquivos compatíveis com Mac no Unix, era preciso tratar o resource fork como dados de primeira classe, e o modo natural era colocar um arquivo como
.fileao lado de cada arquivoNa época, os blocos de inode do UFS não conseguiam mapear todos os atributos do resource fork, e ele também continha coisas como ícones. Sistemas de arquivos mais modernos têm estruturas de blocos de diretório maiores, capazes de lidar melhor com esses dados
O mais correto é ver como dois conjuntos de conteúdo de arquivo: um era chamado
data, e o outro,rsrc; no disco, ambos eram apenas fluxos de bytesPorém, o resource fork normalmente armazenava uma estrutura de pequenos pedaços de dados indexados por um código de tipo de 4 bytes e um ID inteiro de 2 bytes
Aplicativos Mac 68K colocavam quase tudo no resource fork — código, menus, caixas de diálogo, imagens, ícones, strings etc. — e, se você copiasse um app antigo de Mac para um PC ou Unix sem conversão, ele parecia um arquivo vazio
Por isso, para enviar apps de Mac pela rede, era preciso codificá-los em um único fluxo; no início eram usados BinHex
.hqxou MacBinary.bin, e depois arquivos Stuffit.sitO motivo de essa estrutura não caber bem em um inode é que seria, na prática, como enfiar um arquivo inteiro ali dentro. A estrutura do resource fork em si tinha um limite de 16 MB, mas, se fosse tratada como um fluxo de dados separado, podia ser tão grande quanto se quisesse
Por exemplo, plugins do Escape Velocity usavam tipos de recurso personalizados e podiam ser editados facilmente com um plugin do ResEdit
https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(AD...
Tipo de arquivo, creator code, bloqueio, bits invisible e bozo etc. sempre eram armazenados no sistema de arquivos
Por exemplo, veja a descrição do formato de disco MFS: https://wiki.osdev.org/MFS#File_Directory_Blocks
Fazer um DVD de boot para Mac também não era exatamente trivial
Lembro que antigamente havia uma forma de desativar a criação de
.DS_Store, mas a Apple a removeu, e não entendo de jeito nenhum por que fez essa mudançaAcabei escrevendo eu mesmo um programa que monitorava todo o sistema de arquivos e apagava
.DS_Storeassim que ele aparecia[0] https://github.com/slmjkdbtl/dskill
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUEhttps://support.apple.com/en-us/102064
Não me lembro de algum dia ter havido uma forma de desativar em volumes locais
.na raiz do sistema de arquivosDepois que
.DS_Storefoi permitido, parece que ficou fácil para outros engenheiros aprovarem coisas como.fseventsde.Spotlight-V100Nem sei dizer quantos sistemas de arquivos “contaminados” já vi por causa desses arquivos. Eram principalmente cartões SD ou pendrives USB, mas às vezes havia casos muito mais terríveis
Normalmente, nessas situações, eu rodo
rm -rf .DS_Store .Trashes ._.Trashes .fseventsd .Spotlight-V100e ejeto rapidamente o drive antes que algo mais seja escritoEspecialmente quando é preciso copiar dados de um disco em estado de degradação, a última coisa que você quer é que ele comece a indexar tudo e a gravar no disco
Sério, isso deveria ter uma opção de configuração
find / -name ".DS_Store" -exec rm {} \; 2>/dev/nullÉ só colocar isso em um script e adicionar ao
crontab.DS_Storeparece um design realmente azarado. Tem um propósito e há várias formas de contornar, mas, na prática, acabou virando algo que espalha lixo de arquivo para 99% das pessoas que se deparam com eleEm termos de acabamento da experiência do usuário, não parece coisa da Apple
Cresci usando System 7.5, OS X e Windows juntos, e o Mac tendia a não fazer você ver detalhes de implementação como arquivos ou formatos de arquivo desnecessários, ou “como o computador funciona internamente”
Por isso, ver esse arquivo surgindo por toda parte me parece estranho, porque contraria muito meu modelo mental sobre o Mac
.DS_Store, a menos que use o terminalO Finder agora não os mostra nem quando a exibição de arquivos ocultos está ativada
Mas, ao compartilhar arquivos de um Mac com usuários de Windows, fica realmente feio, e acho que pode causar uma má primeira impressão em quem está pensando em migrar para o Mac
Não entendo por que precisa ficar na mesma pasta. O sistema operacional não poderia manter seu próprio pequeno banco de dados em algum lugar e referenciar cada caminho?
Concordo com a ideia de que “só deveria ser criado quando o usuário realmente ajusta as configurações de visualização ou define manualmente a posição dos ícones dentro da pasta”. Mas, na prática, só visitar uma pasta quase garante que um
.DS_Storeseja criadoEssa é minha maior reclamação sobre o Finder
É um recurso realmente ótimo poder personalizar de várias formas a aparência e o tamanho das janelas de pastas individuais, como no Finder do Classic Mac OS
Mas basta passar pela mesma pasta numa janela de navegador e, mesmo sem mudar nada, a maior parte dessa personalização acaba sendo sobrescrita pelas configurações da janela de navegador
Se vai quebrar tão facilmente, não faz sentido permitir uma personalização excelente
Eu abro a pasta Applications com um atalho global, mas não adianta querer personalizar a aparência dessa janela. Cada vez que aperto o atalho, não sei o que vou ver, e ela fica sendo redefinida
O motivo é que não há no Finder uma forma de definir uma configuração padrão de janela de navegador. Em vez disso, ele deixa as configurações atuais do navegador em cada pasta visitada, o que é realmente frustrante
Era muito bom — e dá saudade — ver a mesma janela aparecer na frente exatamente do jeito em que tinha sido deixada da última vez
cmd-shift-Ae a pasta Utilities comcmd-shift-UComo não sou usuário de Mac, sempre fico meio irritado quando um
.tgzbaixado de lugares como o GitHub vem cheio de.DS_StoreO macOS provavelmente usa o GNU
tar, então é bem surpreendente que não tenham modificado ou configurado para ignorar.DS_Storepor padrãoSe você exportar
COPYFILE_DISABLE=true, otarpula os arquivos.DS_StoreVale mencionar que há uma forma de desativar por padrão a criação de arquivos
.DS_Storeao navegar por volumes de rede. Caso contrário, só passear pelo Finder já altera o horário de modificação dos diretórios, e isso é péssimohttps://old.reddit.com/r/MacOS/comments/lvju40/comment/gpc8i...
.DS_Storeno volume de rede, parecia que não havia, mas, ao ir para o terminal, eles estavam lá de fatoAgora não dá para confiar no recurso do Finder de mostrar arquivos ocultos. Em vez de mostrar todos os arquivos ocultos, ele mostra apenas os arquivos ocultos que o Finder julga que o usuário deveria se importar em ver
Meu compartilhamento de rede é um Synology local, então não é um grande problema, mas no trabalho esses arquivos criavam uma situação bem bagunçada
Também existem os arquivos com ponto e sublinhado (
._). Há alguma forma de desativar para que esses arquivos não apareçam em compartilhamentos de rede?[0] https://superuser.com/questions/212896/is-there-any-way-to-p...
Felizmente, usando o gerenciador de arquivos Dired do Emacs, dá para fingir facilmente que esses arquivinhos incômodos e os arquivos gerados pela execução do LaTeX não existem
(setq dired-omit-mode tdired-omit-files "^.+\\.\\(DS_Store\\|aux\\|bak\\|bbl\\|bcf\\|blg\\|dvi\\|ent\\|idx\\|ilg\\|ind\\|log\\|orig\\|out\\|pdf-view-restore\\|pdf#\\|reg\\|run.xml\\|synctex.gz\\|toc\\)$")