É possível acessar o código-fonte ou um arquivo de configuração de um comando do terminal, para ler como funciona e até personalizá-lo no computador local? [duplicado]

4

Estou tentando entender o Linux e estou resolvendo meus problemas caso a caso sem realmente aprender a responder a mim mesmo, o que, é claro, prefiro não fazer.

Por exemplo, eu configurei um atalho de teclado para selecionar uma área e uma captura de tela. Toda vez que eu seleciono uma área, sempre é padronizado como / Pictures, e eu gostaria de editar o diretório padrão ou as opções rápidas que ele me apresenta.

Eu encontrei uma resposta como de costume, no entanto, desta vez eu gostaria de saber como as pessoas normalmente abordam isso se não houve resposta. Certamente deve haver um conjunto lógico de etapas para identificar como um comando de terminal funciona / onde ele recebe seus argumentos.

Para este caso em particular, eu olhei online para qual comando o Ubuntu usa para tirar screenshots, o que acaba sendo import .

Então, minha pergunta é: quais são as abordagens para

  1. Encontre onde os arquivos de configuração / localização / informações de nível de código (como não como chamá-lo, mas o que especificamente faz quando é chamado) de um comando de terminal

  2. Como descobrir a qual comando terminal corresponde uma ação específica. (Descobrir import é chamado quando eu tirei uma captura de tela, por exemplo)

Em outras palavras, como eu poderia ter descoberto isso se não tivesse acesso à internet, ou ninguém soubesse a resposta? :) Estou mais interessado na abordagem / lógica, no entanto import neste caso seria um bom exemplo.

Editar:

Eu não acho que minha pergunta seja a mesma com a possível duplicação sugerida, porque estou pedindo uma maneira de acessar o código-fonte, se isso for possível. De outras formas, estou pedindo uma maneira de ler o código-fonte de um comando e os arquivos que ele usa (por exemplo, talvez haja um arquivo de configuração para a função de importação e, se eu pudesse encontrá-lo, eu teria alterado o padrão-salvar- diretório). Para esclarecer ainda mais, o arquivo que estou tentando encontrar (se é possível encontrá-lo) um código equivalente ao seguinte pseudo-código:

<when run>
change mouse pointer to + shape
..wait for a click..
on click -> wait for release..
on release -> take the area between click and release coordinates
read config file located at ./config and get default-save-directory variable
initialize path to default-save-directory
ask user where to save the image

Isso precisa ser salvo em algum lugar no sistema operacional. "Isso não é possível porque ..." (talvez esteja em nível de montagem, por exemplo) também é uma resposta, mas usar man para obter instruções sobre o que essa função faz não é uma resposta, porque quero entender como ela funciona.

Em ainda outras palavras, se um ninja do Linux fosse modificar o comando de importação em seu computador local, para onde ele iria, e acrescentaria uma assinatura nas imagens salvas com a captura de tela.

    
por Özgen Eren 09.04.2018 / 17:13

4 respostas

1

Encontrando a fonte

Sim, você pode facilmente encontrar e ler o código-fonte de tudo no mundo do Linux, exceto por alguns casos extremos (como drivers de placas de vídeo somente binários).

Por exemplo, para saber mais sobre o comando ls , google ls source code , que fornecerá um hit especial do google diretamente na parte superior, informando que ls faz parte do coreutils .

Os coreutils , que são GNU, não Linux, são os comandos que você usa todos os dias na maioria distribuições. A partir dessa página de destino, você pode facilmente fazer o download do tarball inteiro ou procurar seu repositório git diretamente.

Por exemplo, este é o diretório mais interessante (neste momento, o link mostra um hash fixo, então não deixe de navegar do topo novamente se você ler esta resposta mais tarde): vista histórica de "src" no ramo principal

Enfoques semelhantes funcionam para todos os outros programas de código aberto, incluindo o próprio kernel.

Onde está tudo?

which ls mostra onde esse binário específico está localizado.

O Linux Filesystem Standard lista todos os lugares usuais onde os arquivos são mantidos.

Gerenciamento de pacotes

Dependendo da sua distribuição, você pode fazer o download de pacotes de fontes com maior ou menor facilidade por meio do gerenciador de pacotes (por exemplo, apt-get source $package ), que deve ser ainda mais simples. Isto tem o benefício óbvio de que é a) muito fácil eb) deve retornar exatamente a versão do código fonte que seu binário está realmente usando. Dependendo da distribuição do curso.

Encontrar coisas

A carne da sua pergunta é como descobrir o comportamento de algum software. Isso geralmente não é trivial se você apenas buscar a fonte. Em casos extremos, ou seja, se o software é realmente crítico / essencial para você, e você absolutamente precisa fazê-lo funcionar, isso pode ser uma rota viável, mas, em geral, você deve estar melhor pesquisando. Eu fiz o meu quinhão de (ab) usando o código-fonte de pacotes grandes, especificamente ao compilar software (muitas vezes há casos estranhos em que bibliotecas ou versões de compilador têm pequenas incompatibilidades), e garanto que pode ser gratificante, mas muitas vezes é muito trabalho.

Se você encontrar uma solução para o seu problema, deixe-a fluir de volta para os mantenedores atuais através do pull request, se você acha que vale a pena para os outros (e não apenas consertar o software para se adequar mais aos seus desejos pessoais) .

Sobre como outras pessoas descobrem; muitas vezes eles funcionam porque eles realmente trabalham no software e são contatados através de seu rastreador de bugs - sabendo que a base de código já ajuda tremendamente.

Depois, há, é claro, seus verdadeiros hackers que realmente gostam de mergulhar fundo no código-fonte para qualquer coisa que eles tropeçam.

Em suma, para qualquer problema real, é incrivelmente provável que alguém já o tenha, e tenha postado sobre isso, então googling certamente não é uma má abordagem. Usar as palavras-chave corretas pode ser uma arte em si.

Levando-o para o próximo nível

Tudo isso é legal e divertido, mas se você quiser ir real para dentro da toca do coelho, você pode fazer o bootstrap Linux a partir do zero . Este site o guia através da construção de um completo (embora muito pequeno) sistema Linux completamente a partir do zero, ou seja, a partir do código-fonte. Não há binários prontos.

    
por AnoE 09.04.2018 / 22:05
8

Resposta rápida:

Pesquise o comando do terminal.

Não existe uma regra de conjunto absoluta de onde as variáveis ou detalhes são armazenados. Se você não souber os detalhes de um comando de terminal, terá que procurar para ter certeza.

A maioria dos comandos de terminal, especialmente os comandos que têm muitas opções, têm manuais que são instalados no sistema por padrão, o que torna isso fácil. Isso também inclui o shell para os comandos do terminal, que no caso do Ubuntu é bash por padrão.

Antes de a internet ser tão popular para a realização do não saber ao qual você se refere, as pessoas confiavam muito nas bibliotecas, nos livros e nos manuais. As pessoas tinham muitos livros e manuais em casa. A frequentava a livraria e a biblioteca com frequência. Eu costumava passar muitas horas na biblioteca, quase sempre tinha dois ou três livros check-out para pesquisa em casa (ou programação e comandos). Já faz 20 anos desde que fui à biblioteca para fazer pesquisa. De tempos em tempos, vou à biblioteca para alguns seminários ou reuniões. Eu também pertencia a dois clubes de computadores, que compartilhavam informações. Ambos os clubes publicaram boletins mensais que incluíam importantes informações sobre programação e computador.

Se você não tiver acesso à Internet, poderá usar os manuais que já são seu computador para os comandos do terminal.

Obrigado por um comando de terminal e digite:

$ man [terminal command]

Você pode pesquisar o bash e o comando import (da sua pergunta) com:

$ man bash
$ man import

Ambos os manuais mostrarão muitas informações que você pode pesquisar sem a Internet. Eles também incluem um glossário que você pode usar palavras desses manuais para fazer mais pesquisas.

Para conhecer os detalhes das variáveis de um comando , você teria que pesquisar o comando em particular. Alguns dos mesmos comandos podem até ter vários tipos de variações ou variações que podem armazenar algumas de suas variáveis ou detalhes em uma área diferente, dependendo da distribuição do Linux ou do mantenedor do comando específico.

Como baixar o código-fonte dos comandos e aplicativos do Ubuntu:

Você pode baixar o código-fonte dos comandos adicionando a fonte ao seu repositório. Você pode encontrar isso por:

  • Ir para Software & Atualizações - >
  • (clique na guia Ubuntu Software - >
  • (coloque uma marca de seleção) Código-fonte

    Use este comando para obter o pacote de origem que você deseja baixar:

    $ sudo apt source <package name>
    
        
  • por L. D. James 09.04.2018 / 17:39
    4

    O Ubuntu realmente usa gnome-screenshot , não import (pelo menos em 14.04). Como eu descobri isso? Bem, antes de tudo, import é bem antigo, então isso me deu uma dica. Mas também ...

    • man -k pode ser usado para pesquisar as descrições dos comandos do terminal.

      Procurei algumas palavras-chave relacionadas a capturas de tela, como "captura de tela", "captura", "screencap" etc. Dependendo do termo de pesquisa, isso trouxe alguns itens ou muitos. Eu vi alguns comandos continuarem chegando, principalmente gnome-screenshot e shutter (que eu instalei).

      Quando estamos lidando com a GUI, também pode ajudar a pesquisar os arquivos do aplicativo, por exemplo:

      find /usr/share/applications/ ~/.local/share/applications/ -iname "*screenshot*"
      grep -i "screenshot" /usr/share/applications/*.desktop ~/.local/share/applications/*.desktop
      
    • Eu abri gnome-system-monitor , classificado por Iniciado e observei se um comando apareceu quando tirei uma captura de tela. Foi quando eu confirmei que era gnome-screenshot

      Na linha de comando, você poderia usar

      watch "ps -ef --sort=start_time | tail"
      
    por wjandrea 09.04.2018 / 20:01
    1

    man <command> costuma ser um excelente lugar para começar, leia e veja se você pode encontrar o que precisa.

    Um comando frequentemente esquecido é info, isso sempre tem informações adicionais, infelizmente para import ele não funciona muito bem, mas para um teste tente man gpg , e ele oferece uma breve visão geral e tente info gpg você verá muito mais informações.

    Alguns dos comandos mais obscuros / antigos terão boas info páginas.

    Boa sorte.

        
    por Pete 09.04.2018 / 18:04