2 pontos por GN⁺ 2024-04-21 | 1 comentários | Compartilhar no WhatsApp

Dicas para a estrutura do diretório home

  • Estruturar ou organizar diretórios não é muito diferente de estruturar ou organizar outras coisas; o principal é fazer do jeito que faça mais sentido para você
  • Ao lidar com organização, é muito fácil que tudo saia rapidamente do controle
  • O principal objetivo da organização é a eficiência: você deve conseguir encontrar com facilidade e rapidez o que procura e salvar com facilidade e rapidez o que precisa guardar

Arquivos e diretórios ocultos padrão

  • No meu diretório home, existem todos os arquivos ocultos padrão que fazem parte de um sistema operacional Unix moderno, como .config, .aliases, .profile, .gnupg, .mozilla e outros
  • Eu preferiria que todos os aplicativos respeitassem XDG_CONFIG_HOME, mas não interfiro nem me preocupo muito com isso
  • No passado, eu mantinha o $HOME no Git, e essa é uma excelente forma de organizar dotfiles
  • Ainda coloco todos os dotfiles no Git para manter o histórico de alterações, mas deixo como estão apenas os dotfiles que funcionam da mesma forma nos vários sistemas que uso
  • Os dotfiles específicos de configuração ficam no diretório dotfiles, e eu uso links simbólicos

Organização geral de arquivos e diretórios

  • Arquivos e diretórios em geral são organizados principalmente de duas formas: por "categoria" e por "data"
  • Estrutura básica de diretórios:
    • bin
    • data
    • edata
    • mnt
    • usr/dotfiles
  • Os diretórios Desktop e Downloads são mantidos como estão (porque parece que a maioria dos aplicativos os impõe)
  • No diretório bin, guardo scripts de shell e executáveis binários pessoais (exceto os instalados por meio do gerenciador de pacotes)
  • O diretório mnt é usado para vários pontos de montagem, como cartões SD, discos USB e armazenamento compartilhado usado no homelab
  • Nunca uso montagem automática; em vez disso, uso scripts de shell para montar
  • O diretório usr/dotfiles é gerenciado com Git junto com dotfiles gerais como .aliases, e usa links simbólicos para os arquivos relacionados no diretório dotfiles

Organização do diretório de dados

  • Os diretórios data e edata são os dois diretórios principais onde todo o material é armazenado
  • Esses dois diretórios são datasets ZFS executados em um pool espelhado de discos, separado da instalação raiz
  • Aproveito o ZFS para usar snapshots e também envio e recebimento de ZFS regularmente, o que facilita o backup para armazenamento em rede
  • A diferença entre data e edata é que edata é um dataset com criptografia nativa do ZFS
  • A criptografia é boa para a privacidade, mas é uma camada terrível de complexidade colocada sobre uma hierarquia de sistema de arquivos que já é complexa, e a criptografia do ZFS tem bugs
  • Recomendo fortemente que dados importantes sejam sempre copiados em backup para várias soluções de armazenamento e locais diferentes
  • Não uso armazenamento em nuvem para nada importante

Dicas adicionais

  • A regra básica para nomear arquivos e diretórios é que você deve conseguir identificar facilmente o que é apenas pelo nome
  • Se você não consegue saber sobre o que é um arquivo sem abri-lo, deve abri-lo imediatamente e renomeá-lo para algo mais significativo na próxima vez que olhar para o nome
  • Se você deixar arquivos e diretórios sem organizar, depois fica muito difícil corrigir isso
  • Quando necessário, uso nomes de arquivo longos com descrições detalhadas para conseguir entender o conteúdo do arquivo sem abri-lo

Opinião do GN⁺

  • Este artigo oferece dicas práticas sobre como organizar e estruturar diretórios. Em especial, é interessante a forma de separar e gerenciar diretórios criptografados e não criptografados usando datasets ZFS.

  • Pessoalmente, acho bom armazenar dados importantes de forma criptografada. No entanto, como há desvantagens como perda de desempenho e aumento da complexidade por causa da criptografia, parece melhor usar isso de forma seletiva conforme a situação.

  • Além disso, considero um ponto importante compartilhar com a família a forma de acessar os dados criptografados. É necessário garantir que os dados não sejam perdidos mesmo que a própria pessoa não consiga mais acessá-los por causa de um acidente ou algo do tipo.

  • Para gerenciar dados pessoais, é muito importante estabelecer uma estratégia de backup sistemática como a do autor. Seguir a regra de backup 3-2-1 e, em vez de armazenamento em nuvem, usar armazenamento local fisicamente distribuído também parece uma boa abordagem.

  • Ferramentas open source úteis para organização de dados pessoais incluem Syncthing e Nextcloud. Se essas ferramentas forem bem utilizadas, parece possível fazer uma gestão de dados pessoais organizada e segura.

1 comentários

 
GN⁺ 2024-04-21
Opiniões do Hacker News
  • Odeio quando o diretório home fica bagunçado, e fico especialmente irritado quando um app acha que precisa criar no home um diretório que nem sequer é oculto
    O que mais me irrita é o ~/go, o diretório padrão dos módulos Go. Eu detestava tanto isso que evitei instalar apps em Go ou desenvolver em Go por anos, mas no fim precisei usar; dá para mudar configurando GOPATH, mas como padrão é péssimo

    • O pior são ferramentas de CLI feitas no Mac que ignoram o XDG. Como não é um conceito comum por lá, cada ferramenta suja os dotfiles com seu próprio diretório, como .rustup, .mix, .npm, .yarn
      Mesmo assim, poluir o diretório home sem nem ter a decência de se esconder, como ~/go, é realmente desrespeitoso
    • Acho que o próprio GOPATH é um design ruim. Em vez de ter uma estrutura de diretórios independente por projeto, como em outras linguagens, ele faz coisas de projetos sem relação ficarem misturadas na mesma estrutura de diretórios
      Isso vai tão contra a forma como organizo meus projetos que foi o principal motivo de eu não me interessar por Go. Pode fazer mais sentido para quem prefere reunir vários projetos sem relação em um único monorepo, mas não é o meu gosto
    • Dica: não coloque seus arquivos em $HOME. $HOME é onde os apps fazem bagunça; meus arquivos podem ficar literalmente em qualquer outro lugar
    • Abandonei há muito tempo a ideia de um diretório home limpo. Tudo que é importante fica dentro de diretórios sincronizados no home, como pCloud e Dropbox, e dentro deles tudo é perfeitamente organizado
      .vimrc e .gitconfig ficam como links simbólicos para um repositório Git. Assim, o resto do diretório home pode ser um lixo completo que não faz diferença; se a máquina morrer, consigo recuperar em outra máquina em poucos minutos
    • Teria sido bom se o Unix tivesse, desde o começo, separado como padrão o “diretório home onde os apps colocam tudo que quiserem” do “diretório home onde o usuário coloca seus próprios arquivos”
  • O xdg-ninja me ajudou a reduzir o problema da maioria dos apps despejar arquivos no diretório home
    Em resumo, ele escaneia os programas instalados e informa se é possível configurá-los para seguir o padrão XDG. Não funciona para tudo, mas muitos apps têm essa opção
    https://github.com/b3nj5m1n/xdg-ninja

  • Além de organização, quero fazer backup e portar entre máquinas de forma simples e enxuta
    A pasta .config é uma grande dor de cabeça para backups estratégicos, porque os apps colocam ali gigabytes de dados de sessão
    “Dados de sessão” não são “configuração”. A “configuração” de um app não deveria ter vários gigabytes

    • A menos que eu peça ao programa para fazer uma mudança permanente de configuração, .config deveria conseguir funcionar como somente leitura
    • Concordo muito. Não entendo por que os apps usam .config como se fosse um armazenamento de dados do app. Para esse uso existem .local e .cache
  • Isso é tão pessoal que a solução do autor não serve para mim, e acho que a minha também não ajudaria muito outras pessoas
    Meu diretório home é quase vazio. Todos os arquivos de trabalho ficam no OwnCloud, e a pergunta real é qual é a estrutura de diretórios dentro do OwnCloud. Repositórios Git locais ficam em uma partição totalmente separada
    Agora que o KeepassXC cuida das chaves SSH, as chaves em .ssh também foram para dentro de um arquivo Keepass no OwnCloud. Ficou extremamente simples, e agora quase não há nada no diretório home com que eu precise me preocupar

    • O que importa é a portabilidade ao trocar de sistema e a separação entre ambientes de trabalho e pessoal
      Depois de fazer login, eu deveria conseguir sincronizar com um único comando o conjunto de arquivos adequado ao ambiente em que estou: se é Linux, se é de trabalho, pessoal, desktop ou servidor
      Por exemplo, variáveis de ambiente como um endpoint do vault de casa ou determinados tokens são coisas que eu jamais quero exportar para um sistema de trabalho
      Recentemente migrei para o home-manager do projeto NixOS, e parece bem promissor. A linguagem Nix é complexa, mas a abstração para definir vários ambientes era exatamente o que eu precisava, e dá para separar o conteúdo de arquivos de trabalho/pessoais com branches do Git
    • Ainda assim, deixo .vimrc e .bashrc/.zshrc no home
  • A ideia é boa, mas não gosto da forma de dividir mídia em uma estrutura tipo família. Parece que, mais tarde, você acaba com um monte de arquivos duplicados e cópias duplicadas editadas, que se misturam facilmente e podem fazer você perder as versões editadas
    Acho melhor organizar fotos por palavras-chave EXIF. Armazene os metadados na própria foto, talvez dentro do tipo MIME, e, se for algo relacionado à família, marque com tags como #family ou #personx. Então as fotos ficam em pastas por data, e o resto é editado com palavras-chave em um programa como o Adobe Bridge
    Para a estrutura de nomes de arquivos de documentos, já usei tanto Date then Description.txt quanto Keyword Title or Description and then Date.txt. Para a data, uso uma data ISO no formato YYYY-MM-DD-hhmm para ordenação, e o -hhmm é opcional
    Às vezes quero ordenar por assunto, ou seja, por palavra-chave ou título, mas quando o mais importante é quando algo foi registrado, como em logs, é melhor colocar a data no começo
    Pode parecer desnecessário, já que a data também fica salva no sistema, mas, ao mover arquivos, a data acaba mudando, e muda ainda mais facilmente se você cometer algum erro. Já a data no nome do arquivo não muda e também ajuda na ordenação da lista

    • Um armazenamento endereçado por conteúdo por tipo de mídia parece ser a direção certa para esse problema. Idealmente, seria uma camada de sobreposição que apenas referencia os arquivos, sem alterar a estrutura de diretórios ou a organização de arquivos existente
      photoprism e photostructure parecem não se importar muito com a estrutura de diretórios ou a organização, mas o paperless(-ngx e variações mais recentes) é famoso por ser bastante teimoso quanto à organização e por não querer respeitar estruturas existentes
      Usei camlistore/perkeep para fotos por um tempo, mas o Google Photos tem uma capacidade avassaladora de descobrir quem está em cada foto, até levando em conta diferenças de idade. Meus dois filhos, que têm 8 anos de diferença, eram muito parecidos quando estavam em idades semelhantes, mas ele distingue exatamente quem é quem. Não sei se usa análise facial ou metadados das fotos, mas nunca se confundiu. O problema é que não há uma forma razoável de extrair essas informações de tags para fora do Google Photos, mesmo eu pagando por isso
      Acho que está na hora de dar outra olhada. Não me lembro se photostructure ou photoprism tentam fazer reconhecimento facial, mas, mesmo que ainda não façam, em breve devem chegar a um nível parecido com o Google Photos, ou pelo menos ficar bons o suficiente para cortar a dependência do Google
      Quanto a documentos e fotos/vídeos, tudo bem, mas e música? Para o bem ou para o mal, faz uns 10 anos que não gerencio diretamente uma coleção de músicas como arquivos. Hoje em dia existe algum sistema de biblioteca para música mais profundamente integrado ao conteúdo do que simples “arquivos no disco”, como paperless ou photoprism?
    • Para gerenciar tags arbitrárias de arquivos, vale experimentar TagSpaces https://www.tagspaces.org/ ou TMSU https://tmsu.org/. Não se limita apenas a arquivos EXIF ou ID3
  • O meu jeito é assim
    Itens relacionados a GUI ficam em maiúsculas, e itens relacionados a CLI ficam em minúsculas. Eu prefiro algo como ~/documents, mas o pessoal de GUI insiste em maiúsculas, então simplesmente aceitei. Quase nunca preciso misturar os dois, então não é um grande problema
    ~/dotfiles é o diretório de dotfiles que gerencio com Git. Crio links simbólicos como ~/.zshrc -> dotfiles/zshrc. Não uso nenhum software de gerenciamento separado, apenas crio links. Antes eu usava ~/.dotfiles, mas acho que faz mais sentido deixá-lo visível
    ~/projects é o diretório de projetos. ~/projects/test é para projetos de teste descartáveis, só para verificar algo; ~/projects/my é para projetos pessoais; ~/projects/company é para projetos da empresa onde trabalho atualmente. Às vezes trabalho com várias empresas, meio como freelancer, então preciso dessa separação
    ~/tmp é o diretório para todo trabalho descartável. Tenho uma função de shell chamada mkcdtmp, que cria um diretório com a data atual, como ~/tmp/240419, e entra nele. É um método realmente bom. Prefiro comprar um disco grande e deixar o lixo para trás de uma forma minimamente organizada, então quase nunca limpo. Se eu precisar de algo de ontem ou do mês passado, sei onde está, e foi a coisa que mais ajudou a organizar trabalhos temporários. Se necessário, também posso criar ~/tmp/whatever, e de qualquer forma é tudo coisa para jogar fora
    Não uso ~/Desktop. Também quase não uso ~/Documents e ainda preciso encontrar uma forma de organizá-lo. Coisas como notas curtas eu jogo no repositório GitHub que constrói meu site pessoal. Tentei vários apps de notas, mas um site simples em Markdown foi o que funcionou melhor para mim
    Nunca consegui organizar meu trabalho de forma muito estruturada. Sempre há uma pilha de lixo circulando que, no fim, vira algo utilizável; então, em vez de lutar contra mim mesmo, decidi transformar esse lixo em lixo organizado
    Essencialmente, meu computador é consumível. Tudo em ~/projects está no Git, e ~/tmp é mais como um cache ou trabalho descartável sem muita importância. Tento organizar as coisas para não demorar muito a restaurar a partir de um estado limpo. Reinstalo o OS do zero com frequência e também troco bastante de sistema operacional e notebook; esse método é o que funciona melhor para mim

    • Eu realmente odeio escrever qualquer coisa com maiúsculas. Sei que é só apertar uma tecla a mais, mas acho irritante demais
  • Uma das minhas grandes reclamações com o sistema de arquivos é que diretórios demais começam com D
    Desktop, Dev, Downloads, Documents, Dropbox etc.
    Pensei em mudar alguma coisa, mas, como o autor diz, muitos aplicativos são bem teimosos quanto a isso

    • Uso /src para evitar esse problema
  • Uso uma estrutura bem simples, mas que funciona bem para mim
    Dentro de projects/, crio pastas por ano, como 2023/, 2024/, e cada projeto recebe um prefixo de mês+dia, como 0000-something/, 0312-other-project/, 0419-hn-comment/
    Todo ano crio uma pasta do ano e, quando quero destacar um projeto de longo prazo no topo, coloco 0000 ou deixo só a data como 00
    É simples e funciona em qualquer OS. No Linux, uso alguns scripts auxiliares
    Também é fácil criar rapidamente um diretório para mover arquivos da pasta de downloads, e, mantendo a hierarquia em apenas um nível, fica fácil encontrar as coisas. Acho melhor do que padrões como YYYY/MM/DD, que adicionam mais um nível para o mês

    • Uso uma abordagem parecida quando organizo pastas relacionadas em ordem cronológica
      No diretório de nível superior, normalmente deixo o que estou trabalhando no momento. É algo como “hoje” ou “esta semana”
      Quando vou arquivar algo fora dessa janela de tempo, por exemplo hoje, crio uma pasta em um formato como 041924 e movo para lá todos os arquivos criados naquele dia
      Em geral, considerando a expectativa de vida humana, não vejo necessidade de usar uma string como 2024. Não acho que vou viver até 2100, e nada antes de 2000 é relevante, então 24 basta
      Como o tempo continua passando, o número de pastas arquivadas aumenta, mas elas são pequenas e fáceis de encontrar. Funciona especialmente bem quando você cria todos os dias arquivos-padrão que não são muito únicos
    • Não daria para usar a data de modificação da pasta? Daria para ordenar
      projects/ | 01.01.2017
      something/ | 01.01.2024
      other-project/ | 01.01.2023
      hn-comment/ | 01.01.2022
    • Eu também migrei para algo parecido, acrescentando uma estrutura de pastas com um caráter de “processo”. Vai aumentar os dados duplicados, mas preserva a saúde mental
  • Sobre backups, certa vez tentei configurar um Mac novo a partir de um backup do Time Machine, mas o Mac não conseguia ver nada dentro do backup do Time Machine
    Ao entrar em contato com o suporte da Apple, ouvi que existe um bug raro em que o processo de instalação, às vezes, em vez de instalar a partir do backup, inicializa o backup do Time Machine
    Felizmente eu tinha configurado o Backblaze, o que me salvou, mas restaurar centenas de gigabytes levou muito tempo
    Hoje uso Time Machine, Backblaze e backup do iCloud, e de vez em quando empacoto tudo em um .tgz e envio para o S3

  • Entre hífen e underline em nomes de arquivos e diretórios, concordo totalmente com o hífen
    Usar hífen ao navegar no terminal é tão prático que acho que deveria ser o padrão. É muito melhor do que ter que digitar algo a mais toda vez para selecionar nomes de arquivo com underline, ou lidar com espaços

    • Essa é uma das pequenas coisas de que gosto em Lisp. Dá para nomear variáveis como foo-bar-baz, e não é preciso apertar Shift ao digitar