Sou obrigado a copiar /etc/passwd
para um diretório que já criei, com o novo nome my_passwd
. Eu entendo como copiá-lo com um caminho absoluto: cp /etc/passwd /home/user/work/my_passwd
.
Entendo que .
é onde estou no shell e ..
é usado para mover-me para cima no diretório em que estou e digitei cd work
e posso mover para lá se estiver em casa? Estou errado e como eu faria para copiar com um caminho relativo?
Um caminho relativo é um caminho que não começa com
/
.Neste exemplo particular,
/etc/passwd
é um caminho absoluto, e se você souber o caminho absoluto de um arquivo que deseja copiar , não há (muitas vezes) nenhum propósito prático de convertê-lo em um caminho relativo (na verdade, pode apenas confundir as coisas, pois o caminho depende de onde na árvore de diretórios você está localizado atualmente).O diretório para o qual você deseja copiar o arquivo tem
$HOME/work
o nome de arquivomy_passwd
.$HOME
irá expandir para o caminho absoluto do seu diretório inicial.Para copiar o arquivo usando apenas caminhos absolutos:
Isso não depende de onde no sistema de arquivos você está localizado atualmente (o que é bom).
Para encontrar o caminho relativo para o
/etc/passwd
arquivo, você pode usar orealpath
comando no Linux (este utilitário pode não estar disponível em outros tipos de sistemas Unix e está disponível pelo menos no Ubuntu). Supondo que você esteja localizado em seu diretório inicial (depois de dar o comandocd
sem argumentos):Isso nos diz que "
/etc/passwd
está localizado dois diretórios acima daqui e depois abaixo emetc
".Para copiar o arquivo usando caminhos relativos, de estar localizado em seu diretório pessoal (não funcionará de outros locais na árvore de diretórios):
work/my_passwd
é o caminho relativo de seu diretório inicial para o arquivomy_passwd
nowork
subdiretório.combinação de éter de
ou
obviamente também funcionaria (a partir do seu diretório inicial), dependendo de qual dos caminhos você gostaria de especificar de forma absoluta ou relativa.
Como fazer um caminho relativo para
/etc/passwd
? Crie um caminho relativo para/
e adicioneetc/passwd
. Como fazer um caminho relativo para/
? Conte a profundidade do seu diretório atual e vá em direção à raiz em muitos passos.Então, se estivermos em
/home/user/work
, vamos em direção à raiz três vezes com../../../
. Programaticamente, conte as barras no caminho atual ou apenas substitua todos os nomes de diretório por..
e mova a primeira barra para o final.Vamos fazer o último no Bash:
A saída é, por exemplo:
Talvez uma situação mais prática seja aquela em que precisamos de um caminho relativo de
/foo/bar/some/path
para/foo/bar/otherpath
, caso em que basta descartar o prefixo comum e aplicar a solução acima.