Bueno seguimos con algo mas de linux, que podemos hacer si entramos en un servidor ?? un viejo tuto en hecho en un mandrake hace ya bastantes años… por ahi del 96 pero que todabia funciona hasta en mi debian, no a cambiando nada, y va de maravilla para aprender un poco…
ABREVIACIONES PARA TRABAJAR EN CONSOLA
Ctrl + a -> xa situarse al principio de la linia.
Ctrl + e -> xa situarse al final de la linia.
Ctrl + w -> recorta la palabra anterior al puntero.
Ctrl + u -> recorta toda la linia antes del puntero.
Ctrl + k -> recorta toda la linia despues del punter.
Ctrl + y -> pega lo k hay en memoria (portapapeles).
Ctrl + l -> limpia la pantalla (equivale a ‘CLEAR’).
VARIABLES DE ENTORNO
RANDOM -> genera un numero aleatorio
SHLVL –> incrementa en uno cada vez k invocamos a un nuevo interprete.
SECONDS -> indica el numero de segundos desde k se ha creado el
interprete.
HISTCMD -> indice en el historico.
DIRSTACK -> almacena el ultimo directorio accedido.
HOSTTYPE -> arquitectura de la maquina.
OSTYPE -> indica el SO.
MACHTYPE -> info sobre la arquitectura, distro y SO.
SHELL -> indica el interprete actual.
SHELLOPTS -> indica las opciones activas en el interprete (equivalente
a SET -O).
IFS -> caracteres separadores xa la lectura con READ.
LC_ -> hacen referencia a datos locales.
TMOUT -> numero de segundos k se espera el interprete antes de k se
introduzca una entrada. Si no se introduce nada, finaliza.
HISTCONTROL -> si contiene:
-ignoredups -> no pone en el historico las linias duplicadas.
-ignorespaces -> no pone en el historico las linias k empiezan
x espacios.
-ignoreboth -> combina las dos opciones anteriores.
S_ -> contiene el ultimo parametro de un comando.
GZIP -> comprime archivos:
-c (comprime archivos y los redirecciona a un fichero)
-v (indica el % de compresion cuando se comprime)
-S (cambia la extension del archivo comprimido)
-vl (visualiza info sobre el archivo comprimido: ratio de compresion,
nombre, metodo de compresion, tamanyo antes y despues, …)
SYSCTL –> xa consultar la info de /PROC
-a (consultar)
-w (modificar)
NOTA -> los comandos k no se encuentren en el PATH (son del superusuario),
no es
k no se puedan ejecutar, solo hay k poner toda la ruta. Hay k diferenciar de
aquellos k han sido compilados con alguna opcion k hace k no los puedan
ejecutar
los usuarios normales aunque tengan permisos de ejecucion.
DD -> xa copiar documentos, xo tb tiene otras utilidades como x ejemplo:
-copiar el sector de arranque del disco duro xa poder arrancar desde
un Windows.
dd if=/dev/hda of=boot_sector.bin bs=512 count=1 (como rOOt)
-hacer una ISO de un CD.
dd if=/dev/cdrom of=cdrom.iso
-encriptacion sencilla.
dd if=text_pla.txt of=text_encriptat.txt bs=512 conv=ebcdic
(ya k es una mierda de encriptacion, lo podemos combinar con el
cifrado simetrico de GPG)
xa desencriptar primero GPG y despues passar a ASCII:
gpg -d fichero.gpg | dd conv=ascii
eso pedira la contrasenya xa desencriptarlo y despues lo presenta en
pantalla; si se quiere poner en un fichero:
gpg -d fichero.gpg | dd of=fichero.txt conv=ascii
-pasar un texto a majusculas o minusculas:
dd if=fichero.txt of=majuscules.txt conv=ucase
dd if=fichero.txt of=minusculas.txt conv=lcase
UNSET-> comando interno k sirve xa desactivar variables. Es util xa cuando
entres en un servidor y que no se registren los comandos introducidos; hay
dos formas (seguramente alguien sabra alguna otra):
unset HISTFILE
export HISTFILE=/dev/null
-En caso de k no preveamos k no queden registrados los comandos, tb se puede
solucionar a posteriori:
cp /dev/null .bash_history
cat /dev/null > .bash_history
export HISTSIZE=0
NOTA: estos 3 comandos borraran (casi) totalmente el historico y si el admin
es
un poco espabilado notara k alguien ha entrado. Tb se puede editar a mano xa
borrarlos, xo siempre quedara registrado el primer comando introducido; x
ejemplo si vamos a editar el historico con VI, registrara:
vi .bash_history
de la misma manera pasa con:
cp /dev/null .bash_history
cat /dev/null > .bash_history
La 3a manera es la unica k borrara totalmente el contenido del historico.
READONLY -> desde el punto de vista del admin no se querra k se desactive la
variable HISTFILE; bueno, hay muchos capullos k ni saben k esa variable
existe..
Este comando interno hace k no se pueda modificar ni desactivarla.
NOTA: si alguien sabe la manera de poder modificar o desactivar variables
protegidas con READONLY k me avise y lo pondre en la proxima revision del
DOC.
DECLARE -> comando interno k tiene opciones utiles:
-x (variables exportadas; equivalente a EXPORT)
-i (variables k contienen enteros: PPID, UID, EUID)
-r (variables de solo lectura; equivalente a READONLY)
-a (variables vector)
LS -> comando universal; opciones utiles:
-B (no muestra las copias de seguridad)
-L (muestra la info del archivo apuntado x un enlace)
READLINK -> indica el archivo al k apunta un enlace simbolico. Equivalente a
LS -L.
BASENAME -> indica la ruta a un archivo.
DIRNAME -> indica el archivo de la ruta.
SSH-AGENT-> x defecto se inicia en la interfaz grafica, xo no en consola.
Xa
activarlo y poder almacenar la frase de paso y no tener k volver a
introducirla
hace falta poner:
ssh-agent /bin/bash (crea un BASH padre)
ssh-add (almacena la frase de paso)
-En la interfaz grafica se puede poner un icono k haga la conexion:
campo ORDEN -> ‘xterm -bg black -fg white -e ssh maquina_remota’
GREP -> busqueda de palabras en un texto:
-v (buesqueda inversa). Es util cuando buscas un proceso y no quieres k
salga el GREP entre los procesos encontrados:
ps aux | grep ‘sshd’ | grep -v ‘grep’
^cadena (busqueda de palabras k empiezan asi)
-buscar en un guion las linias k no sean comentarios:
grep -v ^# guio.sh
STRACE ->comando k tracea las llamadas al sistemas y las senyales y las
muestra en pantalla (el resultado del comando en la salida estandar y la de
las
llamadas y senyales en la salida de error).
NOTA -> no se tiene en cuenta MORE en la ejecucion de STRACE, ya k solo
afecta a
la salida estandar:
strace /bin/ls
X tanto, xa poder controlar la salida del comando, hace falta redirigirlo
todo a
la salida estandar:
strace /bin/ls 2>&1 | more
LTRACE -> traceador de librerias dinamicas utilizadas en la ejecucion de un
comando.
UPDATEDB -> comando de rOOt k actualiza una base de datos con todos los
binarios
instalados.
LOCATE -> forma rapida de localizar un fichero o comando.
INCONVENIENTE -> todavia no se la forma de k lo tome de forma literal:
locate profile
y k solo encuentre ‘PROFILE’, y no palabras k lo contengan.
Si alguien sabe como corregirlo k me envie un correo.
LOCALE -> comando k imprime las variables de entorno k hacen referencia al
sistema monetario o horario de este entorno, …
NM -> comando k lista la tabla de simbolos de un binario (comienzo de la
seccion BSS o de DATOS, …).
OBJDUMP -> muestra info sobre un fichero objeto (cabeceras y cosas x el
estilo).
READELF -> mostra info sobre binarios ELF:
-h (info de la cabecera))
-l (info de la program header)
-S (info de la section header)
-e (equivalente a -h -l -S)
-s (tabla de simbolos)
STRIP -> elimina los simbolos de un fichero objeto:
-S (elimina todos los simbolos)
–strip-debug (elimina solo los simbolos de depuracion -> olvidate de
depurar)
STRINGS -> comando k imprime las cadenas de caracteres de un binario.
(imprime tb trozos de la tabla de simbolos)
NOTA -> muy util si quieres aprovecharte de un troyano protegido con
contrasenya
k haya colocado alguien en un sistema, ya k con este comando podras ver la
contrasenya.
ROUTE -> xa manejar las rutas de encaminamiento (se pueden anyadir,
eliminar,..)
IFCONFIG -> muestra las interfaces de una maquina:
sin parametros (muestra las interfaces activas)
-a (muestra todas las interfaces)
-Hay caminos cortos xa hacer las cosas:
-xa tirar una interfaz a tierra:
ifconfig eth0 down –> ifdown eth0
-xa levantar una interfaz:
ifconfig eth0 up –> ifup eth0
-Se puede cambiar la direccion MAC (hace falta ser rOOt):
ifdown eth0
ifconfig eth0 hw ether 00:00:00:00:00:00
ifup eth0
-Xa poner la interfaz en modo promiscuo (hace falta ser rOOt):
ifconfig eth0 promisc
NETSTAT -> muestra las connexions activas, rutas de encaminamiento y
interfaces:
-n (formato numerico; no hace resolucion DNS)
-a (todas las conexions: TCP, UDP y UNIX_DOMAINS)
-t (solo conexions TCP)
-u (solo conexions UDP)
-r (equivalente a ROUTE)
-e (indica el UID)
-ei (equivalente a IFCONFIG)
-M (indica si el nucleo soporta IP_MASQUERADE; en caso de k se haya
compilado con esa opcion, muestra las conexiones masquerading)
NOTA: normalmente el UID de los servicios de red son 0 (rOOt); xo no sera
asi
si tu pones a funcionar algun servicio como usuario normal (tunneling SSH).
SERVICE -> comando k no tiene MAN y k permite manipular los servicios de red
xa iniciarlos, detenerlos, reiniciarlos, comprovar su estado, … (es
equivalente a dar toda la ruta /ETC/INITD/servicio y pasarle la opcion
correspondiente):
service servei status
service servei start
service servei stop (equivalente a KILL -KILL servicio)
service servei restart (equivalente a KILL -HUP servicio -vuelve a leer
el archivo de configuracion del servicio)
NOTA: xa saber si un servicio esta activo, solo tienes k mirar si consta en
/VAR/RUN, donde encontraras un fichero con su nombre y extension PID k
contiene
su pid (no hace falta ser muy espabilao xa imaginarlo).
Si es un servicio k maneja XINETD no esperes encontrarlo como servicio
independiente, sino k solo encontraras el pid del XINETD k es el k lo
maneja.
Si quieres k se inicie el servicio, tienes k configurarlo en el
correspondiente
archivo dentro de /ETC/XINET.D/ y poner YES o NO en el campo DISABLE.
STTY -> indica las caracteristicas de la terminal, tales como la velocidad
en
baudios y otras cosas:
-a (todas las opciones posibles)
IGNCR (desactiva el retorno de carro -> se puede suplir apretanto ALT-15
IUCLC (traduce los caracteres majuscula a minuscula)
OLCUC (traduce los caracteres minuscula a majuscula)
-echo (desactiva el ECHO de la terminal; es muy util cuando quieres k un
programa pida una contrasenya x pantalla y no kieres k se vea x
si alguien espia lo k tecleas).
TOSTOP (detiene los procesos en segundo plano k intenten escribir en
terminal, y una vez quieras k el proceso continue y imprima en pantalla
solo tienes k poner FG si tienes un proceso o FG %ntarea si tienes unos
cuantos)
NOTA: hay algunos cambios sobre consola k no se pueden deshacer y xa
canviarlos
tienes k volver a entrar en una nueva sesion, o xa aquellos k si se puede
cambiar tienes k poner ‘-ARGUMENTO’ xa desactivarlo o ‘ARGUMENTO’ (sin el
guion)
si lo quieres activar.
NOTA: sobre TOSTOP decir k x defecto la shell aunque pongas el proceso en
segundo plano enviara la salida a la terminal, x tanto aparte de TOSTOP otra
forma de evitar k se imprima en pantalla la salida es hacer redireccion:
find / -name ‘*.txt’ > fichero.txt &
NOTA: junto al documento va un guion de BASH k contiene el comando STTY xa
demostrar k es muy util.
-Siguiendo con STTY tb puedes hacer asignaciones a caracteres especiales
como:
intr (senyal de interrupcion)
eof (final de fichero)
stop (detiene la salida)
La forma de cambiarlo puede ser en forma circunfleja (^) o hexadecimal (0x):
stty intr ^x (con CTRL-X detendras ahora un proceso)
EJECT -> expulsara la primera unidad detectada en el sistema; si quieres
expulsar alguna otra unidad tienes k indicarlo, x ejemplo si quieres
expulsar
el DVD-ROM y esta referenciado x /DEV/HDD:
eject /dev/hdd
NOTA: puedes expulsar un lector ya sea x el dispositivo k lo controla (/DEV)
como x el punto de montaje (/MNT), y automaticamente los desmontara (si no
lo
habias desmontado antes). No hace falta poner toda la ruta del punto de
montaje (cdrom) o dispositivo (hdc).
ULIMIT -> comando interno xa establecer limites a los recursos del sistema:
-c (tamanyo de archivos CORE)
-u (cantidad maxima de procesos)
-f (tamanyo maximo de un archivo)
-v (tamanyo maximo de la memoria virtual)
NOTA: x defecto las distros actuales desactivan la creacion de archivos CORE
xo si tu la quieres activar xa pasarle un CORE al GDB:
ulimit -c unlimited
-Si lo k quieres es desactivarlo, pon 0 en lugar de UNLIMITED.
RDEV -> sobre una imagen del nucleo indica el dispositivo de arranque.
RPM -> servicio xa instalar/desinstalar paquetes y hacer otras cosillas:
-qa (lista todos los paquetes instalados)
-qi paquete (da info sobre el paquete: nombre, version, descripcion,…)
-ql paquete (indica los componentes del paquete: binarios y doc)
-qR (dependencias del paquete: librerias dinamicas y demas)
TAR -> utilidad xa empaquetar/desempaquetar archivos (historicamente xa
hacer
copias de seguridad en cintas):
tar czf paquet.tgz archivo1.txt archivo2.txt archivo3.txt (empaqueta
archivos)
tar xzf paquete.tgz (desmpaqueta un TAR)
tar ztf paquete.tgz (visualiza los archivos k contienen un TAR)
tar f paquete.tar –delete archivo2.txt (elimina un archivo de un TAR)
tar f paquete.tar -r archivo2.txt (anyade un archivo a un TAR)
NOTA: TAR con la opcion «t» es muy util xa saber donde se van a
desempaquetar
los archivos, ya k asi sabes si se van a poner en un directorio o los vas a
esparcir x ahi. En el 2o caso, es conveniente crearte un directorio y ahi
desempaquetarlos.
NOTA: no he podido anyadir/eliminar archivos a un TAR comprimido; si alguien
consigue solucionarlo k me envie un correo y me lo diga xa anyadirlo al
texto.
STARTX -> guion de BASH k llama a XINIT el cual inicia la interfaz grafica
con
los argumentos del cliente y el servidor X:
startx — -bpp 32 -nolisten tcp :0&
(muy recomendable ponerse a trabajar en otra VC, ya k este
proceso envia muchos mensajes a la consola k impiden trabajar
o tocarse los huevos — segun se mire –)
NOTA: con las opciones «-BPP 32» (profundidad 32 bits) y «-NOLISTEN TCP »
(no
abres el puerto 6000) no se pueden lanzar mas de una interfaz
NOTA: xa ver mejor los programas a los k llama STARTX, poner PSTREE. Pondra
una
linia parecida a esta:
-login–bash–startx–xinit-+-X
`-gnome-session–ssh-agent
MAN ->
-k (equivalente a APROPOS)
-f (equivalente a WHATIS)
RSYNC -> comando muy util xa hacer copias de directorios entre maquinas
remotas,
con la ventaja de k solo copia lo k ha cambiado mediante un algoritmo de
busqueda CHECKSUM:
-a («archive mode» -> preserva todos los atributos del archivo y
funciona de forma recursiva)
-z (comprimido)
-v (muestra las operaciones k se realizan)
NOTA: si se incluye «/» al final de la ruta de directorios, quiere decir k
solo
se copia el contenido del directorio y no el directorio en si. Xa copiar el
directorio, no hay k poner la barra al final de la ruta.
NOTA: x defecto RSYNC encripta la info con SSH, x tanto hace falta k en la
maquina remota haya un servidor SSH; xo tb se puede configurar xa k atienda
las peticiones en la maquina remota otro servicio con la opcion «-e».
NOTA: otro uso puede ser hacer copias en la maquina local (sustituye al CP),
lo
k va de puta madre ya k mejora el tiempo de copia; solo copia lo necesario.
ESCUCHAR MUSICA DESDE CONSOLA
-con los comandos PLAY o MPG123 (creo k tb con SOXPLAY) -> a mi no me
funciona) Ahora tambien existe moc
IMPRIMIR PAGINAS DE MANUAL
man ls | col -b -x > man_ls.txt
lp man_ls.txt
DIVIDIR UN ARCHIVO GRANDE EN FICHEROS PEQUENYOS
split -b 1.2m fichero
cat x* > fichero_original
TERMINAL BOBA
-Despues de catear un fichero binario, a veces la terminal presenta signos
extranyos; solo tienes k poner RESET y se restaurara.
FORMATEAR UN DISKET A BAJO NIVEL
FDFORMAT -> formata el disket a bajo nivel:
fdformat /dev/fd0
MKFS.EXT2 -> crea el sistema de ficheros. Es equivalente a MKE2FS:
mkfs.ext2 /dev/fd0
NOTA -> se puede crear un disket de arranque haciendo un CAT sobre una
imagen
VMLINUX del CD de la distro de DEBIAN (x ejemplo).
-Poniendo en /ETC/PASSWD como shell:
/BIN/TRUE -> devuelve TRUE
/BIN/FALSE -> devuelve FALSE
/DEV/NULL -> devuelve EOF
/DEV/ZERO -> devuelve el caracter ‘\0’
/DEV/URANDOM -> devuelve caracteres aleatorios
Automaticamente cuando el usuario entre, el sistema lo echara.
CAMBIAR AL DIRECTORIO HOME
-Hay 2 formas muy tipicas:
cd $HOME
cd ~
-Xo tb hay otra k permite cambiar a cualquier directorio HOME (tienes k ser
rOOt):
cd ~usuario
es mas, puedes ver todos los usuarios k hay en el sistemas con:
cd ~[TAB]
-Se pueden hacer operaciones en un mismo directorio a la vez sin necesidad
de
indicar la ruta absoluta xa cada uno de ellos; en lugar de poner:
cp /usr/bin/lsattr /usr/bin/at ~but/binarios
substituir x:
cp /usr/bin/{lsattr,at} ~but/binarios
NOTA: substituir CP x cualquier comando, x ejemplo «LS -L«.
SOBREESCRIBIR FICHEROS
-Se pueden sobreescribir aunque este activada la opcion del bash NOCLOBBER:
ls >| fitxer.txt
VACIAR UN ARCHIVO
cat /dev/null > fichero.txt
cp /dev/null > fichero.txt
(lo mismo con DD)
VER Y CAMBIAR LAS FECHAS DE UN FICHERO
-Ver las fechas de un fichero:
ls -l fichero.txt (muestra la fecha de modificacion)
ls -lu fichero.txt (muestra la fecha de acceso)
ls -lc fichero.txt (muestra la fecha de cambio de estado de inodo)
CREAR FICHEROS VACIOS
touch fichero.txt
> fichero.txt
LLENAR UN FICHERO INFINITAMENTE
dd if=/dev/urandom of=fichero.txt
cp /dev/urandom fichero.txt
Los dos comandos se pueden parar con Ctrl-C, o en el caso de DD se puede
establecer un limite con COUNT (dd if=/dev/urandom of=fichero.txt count=10).
-> eliminar permisos de ejecucion en el guion BASH correspondiente.
-> eliminar el enlace con el correspondiente directorio RC.
BUSQUEDAS EXACTAS
-Xa buscar un proceso con exactitud y k no salgan nombres de procesos k
empiecen
asi, pon «\>» detras del nombre:
ps aux | grep ‘nombre_proceso\>’
-Si no se devuelve un valor en el guion, devolvera el codigo de salida de la
ultima instruccion
ejecutada. X tanto es conveniente indicar un valor de retorno!!!
-Cuando haces un ECHO indicando un error como puede ser k no se ha pasado un
argumento necesario xa el funcionamiento del guion, es util enviar la salida
al
descriptor de fichero asociado a la salida de error estandar. Y tb si
quieres
indicar como utilizar el guion, poner BASENAME xa k solo imprima el nombre
del
guion y no toda la ruta. En este ejemplo he aplicado estos 2 consejos:
echo «US: `basename $0` servidor» >&2
`BASENAME $0` -> indica k solo imprimimos en pantalla el nombre del guion de
shell y no toda la ruta.
>&2 -> indica k enviamos todo lo del ECHO a la salida de error.
BASH_PROFILE y .BASHRC
-Los 2 son archivos de configuracion, xo la diferencia esta en k
..BASH_PROFILE
se ejecuta solo cuando se entra al sistema (x ejemplo, desde una VC), y el
..BASHRC se ejecuta siempre k se inicie una nueva shell (dentro de una misma
sesion).
TAR CON SSH
-Xa crear un TGZ de un directorio de la maquina local y luego enviarlo
mediante SSH a otra maquina y desempaquetarlo ahi:
tar zcf – . | ssh servidor «tar zxf -«
-Xa descomprimir remotamente en el directorio PAQUETES un TGZ local:
ssh servidor «cd ~david/paquetes; tar zxf -» < paquete.tgz
-Xa crear un TGZ en la maquina remota de un directorio local:
tar zcf – . | ssh servidor «cat > paquete.tgz»
-Xa escribir un TGZ remotamente en un dispositivo de cinta (o cualquier
otro):
tar zcv – . | ssh servidor «cat > /dev/tape»
-Xa descomprimir localmente un TGZ de una maquina remota:
ssh servidor «cat paquete.tgz» | tar zxf –
NOTA: en un libro k lei ponia k las operacions con TAR de forma remota no se
ejecutaban si habian instruccions en el .BASHRC k escribian en la terminal,
xo
lo he probado y a mi no me da error; xo bueno, de todas formas lo pongo x si
a
alguien no le va, k sepa k la razon es esa.
Ahora, tengo k decir k si has editado el .BASHRC y haces copias con el SCP
NO TE VA A FUNCIONAR!!!
IMPORTANTE: si quieres escribir alguna cosa en la terminal (con ECHO o
instrucciones parecidas), ponlo en el .BASH_PROFILE, ya k no se lee cuando
quieres ejecutar algun comando en una maquina remota mediante SSH, solo se
lee
el .BASHRC.
APROVECHANDO AL MAXIMO LA PROGRAMACION BASH
-Todos sabemos k en la programacion BASH hay estructuras como WHILE o FOR;
xo no
todos sabemos k estas estructuras pueden aprovechar como entrada la salida
de
cualquier comando como CAT o LS o el k sea.
-En el caso de WHILE es:
cat /usr/share/dict/words | where read i; do grep ‘st$’; done
y en el de FOR:
ls -l | for i in read; do grep ‘^-‘; done
NOTA: si al poner alguna de estas linias (u otras k inventes tu) no te caben
en
una unica linia de terminal y queda poco claro, puedes dividirlo en
diferentes
linias con el caracter «\»:
cat /usr/share/dicts/words | \
where read i; do grep ‘st$’; done
GUARDAR LAS COPIAS DE SEGURIDAD
-A mi me molestan las copias de seguridad (~) k se crean cuando editas algun
fichero de texto, y normalmente las eliminaba «rm -f *~», xo el otro dia me
equivoque escribiendolo y poco mas y me cargo todo el directorio. X eso
decidi
editar el .BASH_LOGOUT y introducir comandos k hacen k cuando salga de
consola
automaticamente se muevan las copias de seguridad a un directorio, y a una
mala
k un dia pierda los archivos originales, las copias las tendre en ese
directorio.
-Introducir en el .BASH_LOGOUT:
mv -f `find . -name ‘*~’` /tmp/copias_seguridad 2> /dev/null
SYSRQ -> opcion k xa estar activa ha de ser compilada en el nucleo, y
permite
un mayor control sobre el sistema.
-Xa comprobar si esta activa, mirar si /PROC/SYS/KERNEL/SYSRQ contiene un 1.
-Xa ejecutarlo hace falta apretar Alt + Impr_Pant + OPCION:
-k (mata todos los processos de una VC; util xa cargarse posibles
keyloggers activos)
-b (reinicia sin sincronizar ni desmontar los sistemas de ficheros)
-o (apaga el sistema YA)
-p (hace un volcado de los registros y flags)
-t (hace un volcado de las tareas y info relacionada)
Meritos a bitguarro..
Nos vemos