Somente para o software que você precisa, use seu diretório pessoal em vez de /usr/local.
Em vez de alterar a propriedade /usr/localou ter que executar comandos como root quando não quiser, basta configurar suas construções para que sejam instaladas no diretório inicial em vez de /usr/local. Isso aborda todos os possíveis problemas com a alteração da propriedade /usr/local, incluindo como seus subdiretórios bine sbinestão no rootcaminho.
Se você precisar permitir que outros usuários executem seu software, poderá conceder acesso a eles. De fato, eles provavelmente já poderão, porque, por padrão, seu diretório pessoal tem acesso permissivo de leitura e execução . (Se você não quer isso, pode alterá-lo facilmente, apenas usando os chmodarquivos ou diretórios que deseja tornar privados e, possivelmente, também alterando o seu umask.)
Com o software instalado em seu diretório pessoal, os binários que seriam inseridos /usr/local/binserão inseridos . Você receberá outros subdiretórios do diretório inicial correspondentes aos subdiretórios dos quais o software que você instala precisa. Isso normalmente acontece automaticamente quando você instala o software a partir do código fonte./home/username/bin/usr/local
Configurando suas compilações
A maioria dos softwares que você cria a partir do código fonte possui uma etapa em que você executa:
./configure
Para a grande maioria dos softwares fornecidos com um configurescript que pode ser executado dessa maneira, o padrão é configurar a compilação para instalação interna /usr/localquando você eventualmente executar sudo make installa instalação. O motivo é que é implicitamente equivalente à execução:
./configure --prefix=/usr/local
Para configurar uma compilação para instalação em seu diretório pessoal, use isto:
./configure --prefix="$HOME"
Na prática, no Ubuntu, os caminhos do diretório inicial não contêm espaços, outros espaços em branco ou outros caracteres que serão tratados especialmente pelo shell *, portanto, a menos que você configure sua conta de usuário de maneira bastante estranha, basta digitar:
./configure --prefix=$HOME
( Porém, não recomendo o hábito de escrever scripts . Além disso, em alguns outros sistemas operacionais - como o macOS - é menos incomum que os caminhos para os diretórios pessoais dos usuários contenham espaços.)
Ou, se preferir, digite o caminho completo do diretório inicial:
./configure --prefix=/home/username
(Substitua usernamepelo seu nome de usuário real, é claro. Se, por algum motivo, seu diretório pessoal não estiver, /homeentão você precisará ajustar em conformidade.)
Instalando suas compilações
Depois de executar make, você pode estar acostumado a executar sudo make install, mas quando instala em seu próprio diretório inicial, não é necessário executá-lo como root, para que você possa - e deva - omitir sudo. Apenas corra:
make install
Da mesma forma, para software que suporta um uninstalldestino:
make uninstall
Isto é exatamente o que você estava pedindo ... apenas no seu diretório pessoal, não /usr/local.
Executando seus programas
Provavelmente, o binsubdiretório do diretório inicial é:
- já está no seu
$PATH, ou
- estará no seu
$PATHse você simplesmente sair e entrar novamente.
O motivo é que o .profilearquivo no diretório inicial, que contém comandos executados quando você faz login, contém isso por padrão para contas de usuário criadas na maioria das versões do Ubuntu (incluindo a conta de administrador inicial criada quando você instala o sistema operacional):
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Esse código é executado quando você faz login (porque está dentro .profile) e coloca seu bindiretório pessoal $PATH somente se ele existir naquele momento. É por isso que você pode precisar sair e entrar novamente.
Versões mais antigas como o Ubuntu 14.04, assim como versões mais recentes como o Ubuntu 17.10, vêm com isso. No entanto, o Ubuntu 16.04, que é provavelmente o lançamento mais popular até agora, tem o seguinte:
# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Isso simplesmente adiciona o binsubdiretório do seu diretório pessoal - assim como o .local/binsubdiretório - ao seu $PATH, sem verificar se esses diretórios realmente existem. Portanto, se você usa o 16.04, ou se atualizou de um sistema que era 16.04 quando a sua conta de usuário foi criada, o binsubdiretório do diretório inicial provavelmente já está no seu $PATH.
Seu .profilearquivo é copiado do /etc/skeldiretório quando sua conta de usuário é criada. Se sua conta de usuário foi criada em uma versão mais antiga do Ubuntu, ela recebeu essa versão .profilee não foi alterada - para sua conta de usuário - atualizando para uma versão mais recente.
Uma vez que o binsubdiretório do seu diretório pessoal esteja no seu $PATH, você poderá executar programas cujos arquivos executáveis estão instalados lá apenas digitando seus nomes, assim como você faria com os programas instalados pelo gerenciador de pacotes do Ubuntu ou instalados dentro dele /usr/local.
A .localOpção
Você deve ter notado que o .profilearquivo padrão para contas de usuário criadas em algumas versões do Ubuntu, incluindo no 16.04, conforme descrito acima, não apenas adiciona $HOME/binao seu caminho, mas também $HOME/.local/bin. Se você .profilenão adicionar isso, mas quiser , basta editá-lo.
Embora geralmente seja usado para armazenar configurações e dados em cache , você também pode instalar o software dentro do .localsubdiretório do diretório inicial. Você deve se sentir desinibido ao fazê-lo, pois, do ponto de vista da usabilidade e segurança, --prefix="$HOME/.local"é semelhante a --prefix="$HOME".
Lembre-se de que os arquivos e diretórios iniciados com .não são mostrados por padrão nos navegadores gráficos (use Ctrl+ Hpara mostrar e reexibir) ou pelo lscomando (passe o sinalizador -Aou -apara mostrá-los). Pode não ser o que você deseja ou pode ser exatamente o que você deseja. Esta é uma questão de preferência pessoal.
No entanto, observei que alguns gerenciadores de pacotes automatizados baseados em fontes que criam e instalam software no diretório pessoal de alguém usam $HOME/.local. Na verdade, eu não sei o quão comum isso é - espero investigar melhor e atualizar esta resposta - mas você pode preferir usar apenas as $HOMEcoisas que compila manualmente. Dessa forma, ficará claro de onde as coisas vieram. E se houver uma colisão, é provável que o software coexista de forma aceitável.
Você também pode instalar deliberadamente algum software dentro $HOME/.locale outro software dentro $HOME. Você decide. O bindiretório que aparecer primeiro na $PATHvariável de ambiente é aquele a partir do qual um comando será executado, caso existam comandos com o mesmo nome em ambos.
Os créditos são atribuídos a Zanna e Videonauth por apontar erros em uma versão anterior desta resposta, sobre quais versões do Ubuntu possuem qual código padrão .profilee me ajudar a corrigi- los (veja também aqui ).