Mac OS X: locais convencionais em que os arquivos binários devem residir

61

Fiz o download de um aplicativo que é uma linha de comando e quero colocá-lo em algum lugar onde eu possa executá-lo a partir da linha de comando sem precisar digitar o caminho explicitamente.

  1. Quais são os caminhos convencionais usados ​​para algo assim? /usr/bin? Existem opções diferentes, uma se eu quiser para todos os usuários e outra se eu quiser apenas para um usuário específico, como minha conta de administrador?

  2. Ou devo colocá-lo em seu próprio diretório no diretório Aplicativos e adicioná-lo ao caminho? Em caso afirmativo, qual arquivo controla onde o caminho está definido?

Jason S
fonte

Respostas:

53

Resposta principal: você provavelmente quer /usr/local/bin. Dependendo de quão recente é o seu macOS, pode ser necessário atualizar o seu padrão $PATH. Veja abaixo para mais detalhes.

ATUALIZAÇÃO 12-01-2018 Em algum momento desde que escrevi minha resposta original, a Apple alterou seu padrão $PATH. Como resultado, muito do que digo abaixo é irrelevante para os Macs recentes. Se você digitar echo $PATHum terminal e /usr/local/binfor o primeiro, poderá ignorar tudo abaixo sobre como alterar seu $PATH.

Resposta original

Macs são incomuns a esse respeito. A $PATHvariável padrão para um usuário comum se parece com isso:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

Ao colocar /usr/local/bin depois /usr/bin e /bin, o Mac altera o sistema usual. Normalmente, você pode inserir algo /usr/local/bin(digamos, um segundo intérprete Perl, compilado de alguma maneira não-padrão) e, em seguida, um usuário comum acessa o personalizado em vez do primeiro em todo o sistema. Isso é bom. Os usuários podem obter variantes, mas o sistema permanece puro. Dado o padrão da Apple $PATH, no entanto, itens /usr/binou /binserão encontrados antes de qualquer coisa /usr/local/bin. (Isso basicamente derrota o propósito de instalar, por exemplo, o Perl in customizado /usr/local/bin).

Para corrigir isso, você pode alterar o usuário comum $PATHeditando o .profilearquivo no diretório inicial do usuário. (Esse arquivo pode não existir, se você tiver uma instalação totalmente nova. Nesse caso, crie-o.)

Semi-relacionado: o Homebrew fornece excelente gerenciamento de pacotes para Macs. Por padrão, o Homebrew instala o software /usr/local, mas o faz de uma maneira que facilita a remoção de coisas e o retorno ao estado de baunilha posteriormente.

Telêmaco
fonte
1
No meu recém-instalado OsX 10.13.6 (High Sierra), o caminho contém / usr / local / bin primeiro (mesmo que a pasta nem exista) por padrão.
Legolas
1
@ Legolas A Apple parece ter mudado a maneira como lidam com isso. Eu vou editar a postagem.
Telemachus
9

/usr/local/bine /usr/local/sbinvale a pena adicionar ao seu caminho, pois muitos makefiles para compilações de código-fonte são instalados por padrão.

Se você usar MacPorts , vale a pena acrescentar /opt/local/bine /opt/local/sbinbem.

A melhor maneira de fazer isso é adicionar

export PATH=/usr/local/bin:/usr/local/sbin:/opt/local/bin:/opt/local/sbin:$PATH

ao .bashrcarquivo no diretório inicial (que está oculto, portanto a CLI é a melhor maneira de fazer isso) ou, se você deseja alterar o caminho amplo do sistema, adicione a mesma linha a /etc/bashrc(não oculto), mas você precisa sudofazer isso.

Se você não tiver um .bashrcna página inicial de nenhum usuário, poderá criar um e adicionar essa linha a ele, mas lembre-se de alterar as permissões no arquivo criado para torná-lo legível pelo usuário em questão (obviamente não é relevante se você ' está fazendo isso para o seu próprio perfil).

O $PATHfinal anexa o caminho padrão do sistema para o que você colocou antes. Observe que o sistema procura binários na ordem dos caminhos indicados; portanto, se você instala um binário /usr/localou /opt/localtambém é instalado por padrão no sistema, as versões instaladas serão encontradas primeiro, o que pode (embora raramente) perturbar as coisas. Vale a pena assistir.

Boas informações estão aqui .

Devo observar que o exposto acima pressupõe que você esteja usando o Bash para o shell, que é o padrão no Mac OS X versão 10.4 (Tiger) e no Mac OS X versão 10.5 (Leopard), mas não nos sistemas anteriores, que tcsheram usados ​​em vez disso, que tem uma sintaxe diferente.

Espero que ajude ...

avstrallen
fonte
1
/usr/local/binjá está em um OS X padrão $PATH(embora seja tarde demais - veja minha resposta). Se você usa o MacPorts, o instalador deve editar o seu caminho conforme necessário - pelo menos sempre na minha experiência. Dito isto, é bom que os usuários saibam o que estão fazendo (e por que).
Telemachus
bem visto @Telemachus: sempre que construo um Mac para mim, personalizo o caminho fora do caminho, para que eu nunca me lembre do que é padrão e do que é meu!
21809 avstrallen
1
Sei o que você está pensando sobre o instalador do MacPorts personalizando os caminhos no .profile, mas tive uma ocasião no passado em que, por algum motivo, não sei o que, isso não foi possível (o que me deixou confuso por causa de ! um bom tempo) ... assim desde então eu tendem a conectá-lo à mão ...
avstrallen
"que está oculto, portanto, a CLI é a melhor maneira de fazer isso": pergunta idiota, como você executa o TextEdit em um arquivo no prompt de comando?
21713 Jason S
Não openexiste uma pergunta idiota: use o comando com o nome do arquivo como argumento e ele deverá abrir com o que estiver definido como o editor de texto padrão (TextEdit como padrão).
21809 avstrallen
7

Eu costumo ir com /usr/local. Aqui está uma boa explicação do motivo , que se refere ao FHS (Filesystem Hierarchy Standard) .⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢, que em turn diz sobre /usr/local:

Hierarquia terciária para dados locais, específicos para este host. Normalmente, possui subdiretórios adicionais, por exemplo, bin, lib, share.⁢

John Topley
fonte
Sim, é praticamente o mesmo que outros sistemas operacionais * nix a esse respeito.
jtbandes
2
Cite as partes essenciais da resposta nos links de referência, pois a resposta pode se tornar inválida se as páginas vinculadas forem alteradas.
DavidPostill