O comando which retorna apenas executáveis: ele não sabe nada sobre aliases, já que é um programa externo e não há mecanismo para passar informações de alias para um processo filho.
Se você digitar o comando type -a cp , verá todas as interpretações possíveis, em ordem de preferência. Isso inclui qualquer alias, pois type é um comando bash internal.
É importante perceber que um alias não será interpretado por um subprocesso, como um script ou um editor interativo que tenha a opção de executar comandos do sistema.
Se você criar a função cp , sua versão será executada em scripts, mas não em outros programas:
cp() { /usr/local/bin/gcp "$@"; }
Se você quiser que seu cp funcione em todos os lugares, adicione $HOME/bin na cabeça da lista PATH e aponte $HOME/bin/cp para apontar para ele:
ln -s /usr/local/bin/gcp $HOME/bin/cp
Isso cria um link simbólico, embora você possa torná-lo um link físico um pouco mais eficiente (omit -s ), mas isso normalmente precisará de permissões de root ( sudo ln ... ). Criar uma função e adicionar à variável PATH será feito em um dos scripts de inicialização bash , com permissões de usuário.