29 votos

Alguien puede explicar el uso de la tilde?

Yo estaba confundido, tratando de copiar algunos archivos de un PC a otro. Yo lo tengo resuelto, pero la sintaxis es todavía confuso para mí. Esto funciona:

scp ~/Desktop/Volenteer.png jay@server.ip:~j0h/b

que pone Volenteer.png en la carpeta /home/j0h/b. Sin embargo, esto no funciona:

scp ~Desktop/Volenteer.png     jay@server.ip:~j0h/b

Esto también falla, dando un estado de salida 1 archivo no encontrado:

scp ~/Desktop/Volenteer.png     jay@server.ip:~/j0h/b

Como se hace esto:

scp ~Desktop/Volenteer.png     jay@server.ip:~j0h/b

Así que, claramente, hay alguna diferencia entre ~ y ~/ Esa diferencia es la presencia de /

$~/
bash: /home/j0h/: Is a directory
$ ~
bash: /home/j0h: Is a directory

Entonces, ¿por qué en el scp, ¿el ~ resolver a ~/? Que es una suposición, no puedo verificar que es lo que está sucediendo. Pero parece incoherente, y por lo tanto confuso. Es esto un error en scp? o es que hay algo acerca de la tilde me estoy perdiendo?

68voto

muru Puntos 43315

~ es su directorio de inicio.

~foo es el directorio home del usuario foo, si un usuario existe, o simplemente un directorio de nombre ~foo, si el usuario no existe.


Por lo tanto, en:

scp ~Desktop/Volenteer.png     jay@server.ip:~j0h/b

~Desktop expandirá al directorio home del usuario Desktop, si un usuario existe (y por lo general no lo hace), o ser sólo ~Desktop (un camino que normalmente no existe).


En:

scp ~/Desktop/Volenteer.png     jay@server.ip:~/j0h/b

~/j0h se ampliará a un directorio de nombre j0h en jay's home, que, de nuevo, es poco probable que exista.


En:

scp ~Desktop/Volenteer.png     jay@server.ip:~j0h/b

De nuevo, ~Desktop es poco probable que exista por las razones ya.


No ~ y ~/ , en donde la diferencia se produce, pero en ~ y ~foo.

21voto

Berek Bryan Puntos 349

Tienen una lectura a través de la GNU de documentación para Bash Tilde de Expansión (tal y como era antes de mi primera iteración de esta respuesta).

~/Desktop y ~j0h están haciendo cosas distintas, lo que explica por qué ~Desktop no funciona:

  • Una llanura ~ es sustituir su actual $HOME variable de entorno, set de inicio de sesión. Por lo ~ resuelve /home/oli para mí, y ~/Desktop lee como /home/oli/Desktop. Esto es donde se ve la tilda de ser utilizado más.

  • ~username se resuelve en la home de ese usuario, tal como se establece en /etc/passwd. Por lo ~oli resuelve /home/oli, ~j0h podría resolver a /home/j0h , pero no necesariamente, su homedir puede estar en cualquier lugar.

  • ~not-a-username no se resuelve. Porque Desktop no es un usuario, ~Desktop no es sustituido. Se toma literalmente como un archivo o ruta de acceso nombre ~Desktop (que no existe).

Y huelga decir que todo esto está ocurriendo de forma remota (que sería inútil en scp si se sustituyen con los valores locales). Esto funciona debido a que Bash no sustituirá ~... si es precedido por nada, pero el espacio en blanco.

4voto

El símbolo ~ es utilizado como un acceso directo para /home/user en bash, por lo que en el caso de ~/Desktop/Volenteer.png que es la abreviatura de /home/user/Desktop/Volenteer.png.

Así como usted puede ver el /, como siempre, se muestra un nuevo nivel en la jerarquía del sistema de archivos.

3voto

ad rees Puntos 530

~ , "es la abreviatura de la variable de entorno $HOME en la mayoría de los c shell derivados/apoyo POSIX conchas. el uso más común para ~ es cuando se hace referencia a su propio directorio home o el de otro usuario de la casa:

cd ~ # ie shell, take me to my home folder

cd ~root # i.e. shell, take me to root's home folder

Para encontrar el directorio home para cualquier usuario local en un sistema POSIX (UNIX, Linux, OS X, BSD) que está utilizando el passwd(5) de la base de datos ejecutar awk en /etc/passwd como así:

awk -F: '{ print $1,$(NF-1) }' /etc/passwd

Esto mostrará una lista de cada usuario local y su directorio home.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X