TL; DR
- o caminho é lido da esquerda para a direita, com o diretório mais à esquerda especificado sendo o topo da árvore de diretórios que você está percorrendo
- levando
~/no caminho significa sua pasta pessoal - à esquerda
./significa nesta pasta ou no diretório de trabalho atual - navegar para um diretório pode ser feito fornecendo caminho relativo ao seu diretório de trabalho atual ou especificando o caminho completo
-
~é relevante apenas na linha de comandos, não na GUI (como mencionado em comentários ).
A resposta é editada para incluir uma explicação mais formal da expansão do til e para se adequar ao novo título editado da pergunta, então, por favor, leia a explicação mais formal abaixo. As duas primeiras seções são explicações mais ou menos gentis do que OP fez e não fez.
O problema
O% principal co_de% (til) seguido por barra no caminho é entendido como referência ao diretório inicial do usuário, ou seja, ~ sempre significa ~/Documents . (Há exceções e casos especiais, mas com o propósito de explicar o básico, vamos simplificar até agora; veja abaixo a explicação mais profunda).
Então, quando você faz /home/chance/Documents , você está dizendo que me leve ao diretório cd ~/xmr-stak-cpu-1.3.0-1.5.0 que está localizado na minha pasta pessoal . O que também é importante notar, é que um caminho é sempre lido da esquerda para a direita, separado por barras, com a esquerda sendo o topo da árvore de diretórios que você referencia . Portanto, se você quiser descer de casa, para Documentos, para sua pasta, todas as partes devem estar presentes no caminho, separadas por barras, e a pasta na qual você deseja terminar, é claro, tem que ser a mais adequada. / p>
Veja a mensagem de erro de perto:
bash: cd: **/home/chance/xmr-stak-cpu-1.3.0-1.5.0**: No such file or directory
O shell% expandido xmr-stak-cpu-1.3.0-1.5.0 foi ~ e juntou-se ao que você deu. Claro, porque o diretório que você especificou não existe, você recebeu a mensagem de erro apropriada.
O que você deveria ter feito
Você pode fazer isso de duas maneiras - dê um caminho completo ou pule para /home/chance primeiro e, em seguida, pule para o diretório desejado. Quando você ~/Documents e deseja navegar para a pasta localizada dentro do diretório atual em que está , é possível usar a cd ~/Documents notation. Então você faria:
$ cd ~/Documents
$ cd ./xmr-stak-cpu-1.3.0-1.5.0/
É claro que você não precisa adicionar ./ , quando simplesmente ./ irá olhar automaticamente dentro do seu diretório de trabalho atual. No entanto, é melhor ser explícito e, além disso, cd xmr-stak-cpu-1.3.0-1.5.0 ajuda a evitar problemas com nomes de arquivos que podem começar com ./ (que é um pacote totalmente diferente de problemas e é um tópico para outro dia).
Como alternativa, você pode fornecer o caminho completo:
$ cd ~/Documents/xmr-stak-cpu-1.3.0-1.5.0/
Observe que você também pode usar a variável - em vez de $HOME , que é praticamente a mesma em vigor, mas diferem na natureza e no material extra que você pode fazer com ~ . Veja minha resposta em CD e cd da diferença .
Explicação mais formal e detalhada
Tudo bem, até agora mantivemos as coisas bastante simples com o objetivo de explicar o básico para novos usuários. Mas há muito mais a til, dot-slash e navegar na árvore de diretórios do que isso. Os assuntos ficam mais complicados quando consideramos que til e ~ se comportam de maneira diferente em outros shells, e se considerarmos também o padrão POSIX . Algumas das coisas aqui que eu já toquei na minha resposta relacionada no Unix & amp; Linux , então não deixe de conferir também.
Em shells parecidos com o Bourne (que são cd , bash , ksh implementações relacionadas como ksh e mksh padrão do Ubuntu, que na verdade é /bin/sh ) o til inicial sem aspas significa < href="http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_01"> Expansão de til , que é de fato especificada como comportamento padrão por POSIX. Dependendo do que segue um til principal sem aspas, tem efeitos diferentes:
-
com um
dashsem aspas, quando não houver caracteres após (ou se não houver nada entre~e próximo sem coeficiente~, isto é, uma sequência nula) ele será expandido para o mesmo valor que/environment variável, ou seja, sua pasta pessoal. Portanto,$HOMEecd ~significam alterar o diretório para sua pasta pessoal. Observe quecd ~/e~devem ser sem aspas:$ bash -c 'cd /etc/; ls -d ~' /home/xieerqi $ bash -c 'cd /etc/; ls -d ~/' /home/xieerqi/ $ bash -c 'cd /etc/; ls -d ~"/"' ls: cannot access '~/': No such file or directory $ bash -c 'cd /etc/; ls -d "~"/' ls: cannot access '~/': No such file or directory -
com um
/sem aspas, a coleção de caracteres que o seguem é considerada um possível nome de login. Portanto,~oucd ~testusersignificaria que você deseja pular para o diretório de trabalho atual decd ~testuser/. Mais uma vez, citando questões:$ bash -c 'cd /etc/; ls -d ~testuser' /home/testuser $ bash -c 'cd /etc/; ls -d ~"testuser"' ls: cannot access '~testuser': No such file or directory $ bash -c 'cd /etc/; ls -d ~testuser"/"' ls: cannot access '~testuser/': No such file or directory
Tudo isso é um comportamento padrão e funciona em todos os níveis em testuser , dash e, é claro, ksh .No entanto, existem algumas coisas que as shells fazem de maneira diferente. Em particular, bash tem expansões extras que você pode executar com o til, e lida com uns unset bash diferentemente de outros shells. Aqui estão as expansões extras que você pode fazer em HOME :
-
bashfaz referência ao seu diretório de trabalho atual, o mesmo que~+variable. Isso também funciona emPWD, mas não emksh.$ bash -c 'echo ~+; unset PWD;echo ~+' /home/xieerqi ~+ -
dashfaz referência ao seu diretório de trabalho anterior, igual à variável~-. Também funciona emOLDPWD, mas não emksh.$ bash -c 'cd /etc/;cd /usr; echo ~-; unset OLDPWD;echo ~-' /etc ~- -
Em
dash, você pode navegar e registrar onde você esteve, empurrando diretórios específicos na pilha de diretórios (ou matriz), e pode referenciá-los porbash, onde~[+-]<NUMBER>significaria olhar da esquerda da matriz e+da direita. Isso é-específico e não funciona embashnemksh.$ bash -c 'pushd /etc/; pushd /usr; echo ~+1' /etc ~ /usr /etc ~ /etcVeja o diagrama na resposta do muru para uma questão relacionada, que mostra como usar índices para
dashe~+.
Outra coisa que eu já indiquei é a variável de ambiente unset ~- . O fato de ser uma variável e não configurável representa um problema - conforme especificado pelo padrão POSIX, a expansão do til depende das variáveis de ambiente, mas de acordo com o padrão "[i] HOME não está definido, os resultados não são especificados." Nesse caso, HOME e ksh simplesmente quebram:
$ ksh -c 'cd /usr; unset HOME; cd ~'
ksh: cd: xieerqi: [No such file or directory]
$ dash -c 'cd /usr; unset HOME; cd ~'
dash: 1: cd: can't cd to ~
Na verdade, isso também está de acordo com o padrão para dash :
- Se nenhum operando de diretório for fornecido e a variável de ambiente HOME estiver vazia ou indefinida, o comportamento padrão será definido pela implementação e nenhuma outra etapa deverá ser executada.
Por contraste, cd lida com as coisas de maneira diferente. De acordo com o manual do bash :
Se o HOME não estiver definido, o diretório inicial do usuário que está executando o shell será substituído. Caso contrário, o prefixo-til é substituído pelo diretório inicial associado ao nome de login especificado.
Em outras palavras, quando o home é apenas unset , o bash não vai quebrar, mas se bash for setado para a string nula, ele irá quebrar:
$ bash -c 'cd /etc; unset HOME; cd ~; pwd'
/home/xieerqi
$ bash -c 'cd /etc; HOME=""; cd ~; pwd'
/etc
Fato divertido
HOME foi escolhido para representar o diretório pessoal do usuário porque, uma vez, as chaves ~ e ~ costumavam residir na mesma tecla do terminal Lier-Siegler ADM-3A. ( fonte )