Monday 7 September 2015

Consejos y trucos, artículos básicos sobre configuraciones que ayudan a un mejor desempeño de nuestros SO's. Cada proceso ha sido personalmente comprobado.






En este blog continuamos con la parte de comandos referentes a los archivos, así que sigamos aprendiendo acerca de los maravillosos y geniales comandos Linux.

El cajón de los comandos Linux es una guía de referencia rápida para todos los usuarios Linux que desean aprender los comandos de este gran SO. Los comandos se dividen en 15 categorías, lo cual nos permite tener un mayor entendimiento acerca de que comando utilizar en una específica situación. El agradecimiento total al creador de esta guía +Bobbin Zachariah.

Esta guía puede ser utilizada ya sea para usuarios nuevos o avanzados, proveyendo el mejor esfuerzo para dar a conocer los comandos Linux más relevantes. 

Así que empecemos con la 3ª parte de los comandos referentes a los archivos.


$ cp

Copiar archivos o directorios es una de las actividades básicas en cada sistema operativo,  si hablamos de respaldar archivos  es básicamente copiar folders y directorios. En los sistemas UN*X, podemos hacer uso del comando cp.
 
¿Qué es el comando cp? 
Como mencionamos anteriormente, cp es un comando para crear una copia de archivos y directorios. He aquí algunas muestras de cp que podriamos utilizar en el día a día:
 
- 1. ¿Cómo ejecutar cp sin opciones? 
Este es un uso muy básico de cp. Para copiar un archivo denominado linux.jpg de un lugar a otro, podemos escribir así:


Si no escribimos ninguna ruta, esto significa que estamos copiando un archivo en el directorio actual. En la imagen anterior, linux.jpg se encuentra en /home/li-khrissteam/Pictures. No tenemos que escribir /home/li-khrissteam/Pictures/linux.jpg para copiar linux.jpg si estamos en el directorio /home/li-khrissteam/Pictures. Mientras que /home/li-khrissteam/oficina es una carpeta donde se copiará el archivo.
 
- 2. ¿Podemos copiar varios archivos al mismo tiempo? 
Para copiar múltiples archivos al mismo tiempo, solo tenemos que poner estos después del comando cp, separados por un espacio. He aquí un ejemplo:
 


- 3. ¿Cómo copiar un directorio?   
Copiar  un directorio es un poco confuso, es necesario añadir la opción -r o -R para hacerlo; -r o -R significa recursivo. Esta opción es  necesaria ya sea que el directorio este vacío o no. He aquí un ejemplo:



- 4. ¿Podemos crear enlaces duros a los archivos en lugar de copiarlos? 

Para copiar archivos debemos tener un poco de espacio para su almacenamiento. En ocasiones, por algún motivo, es posible que deseemos crear un "atajo" o enlaces a los archivos en lugar de copiarlos. Para esto, podemos utilizar la opción -l. 


En la imagen anterior, vemos que un enlace de archivo_4.otf se copia en /home/li-khrissteam/oficina/. Se caracteriza por el mismo inodo, 1841617. Pero tengamos en cuenta, que los enlaces duros no se pueden crear en los directorios. Echemos un vistazo  a un ejemplo a continuación:


El original directorio_1 tiene número de inodo 1841639

El original archivo_5.otf  tiene número de inodo 1841636

Con el comando cp copiamos en el directorio_1

El directorio_1 copiado tiene número de inodo 1841368

El archivo_5.otf copiado tenía número de inodo 1841636, el mismo que su archivo original.
Como podemos ver en las imagenes arriba copiamos e intentamos hacer un enlace duro de un directorio con su contenido, el directorio cambio su número de inodo, más sin embargo su contenido que era un archivo mantuvo su mismo número de inodo.

- 5. ¿Se pueden crear enlaces simbólicos a los archivos?   
Hay otro tipo de enlaces llamados enlaces suaves simbólicos. Utilizamos la opción -s para hacer esto. Veamos un ejemplo:

  
La creación de enlaces simbólicos solo se puede hacer en el directorio actual. En la imagen anterior, queremos crear un enlace simbólico del directorio de origen  /home/li-khristeam/Pictures/archivo_6.otf a /home/li-khrissteam/oficina. Pero para crear enlaces suaves, debemos estar dentro de /home/li-khrissteam/oficina que seria la carpeta de destino, una vez  allí, podemos correr el comando cp -s como lo vimos arriba.

Cuando vemos el archivo con detalle, observamos que /home/li-khrissteam/oficina/archivo_6.otf apunta al archivo original, señalandolo con una flecha después del nombre del archivo.




- 6. ¿Cómo copiar enlaces simbólicos sin acudir a la fuente?  
Para esto, podemos utilizar el parámetro -P. Cuando el comando cp encuentre un archivo con enlaces simbólicos, lo copiará  tal cual. Veamos una  muestra a continuación:
 

Como podemos ver, el comando cp copiará el archivo archivo_6.otf como esta, el tipo de archivo permanece como un enlace simbólico.
 

- 7. ¿Podemos copiar el archivo original a través  del enlace simbólico?  
Podemos hacer esto con la opción -L. Básicamente, esta es una opción opuesta a -P vista anteriormente. Aquí tenemos una muestra:

Con esta opción, el archivo copiado es el mismo que  el del archivo fuente  archivo_6.otf; esto se sabe por el tamaño del archivo, el archivo copiado tiene 146432 bytes de tamaño, mientras que el archivo_6.otf como enlace simbólico tiene 42 bytes de tamaño.
 
- 8. Archivando.
 
Cuando vamos a copiar un directorio, usamos  el parámetro -r o -R. Pero también podemos utilizar la opción -a para guardar los archivos. Esto creará una copia exacta de los archivos y directorios, incluyendo enlaces simbólicos. Echemos un vistazo:


El comando anterior copiará el directorio llamado directorio_1 en la carpeta /home/li-khrissteam/oficina. Como podemos ver, el archivo_6.otf se copió siempre como un enlace suave.
 
- 9. ¿Puedo ver el proceso ejecutándose?
 
Por defecto, cuando la actividad de la copia tiene éxito, veremos  un símbolo del sistema nuevo. Si queremos saber lo que sucede mientras se copian los archivos, podemos hacerlo con el parámetro -v.


Cuando copiamos todos los archivos .otf del directorio actual a /home/li-khrissteam/oficina/, la opción -v mostrará lo que se está haciendo. Esta información adicional nos dará más seguridad acerca de la actividad de la copia.
 

- 10. Copiar solo el archivo  más reciente.  
Para esto, podemos utilizar el parámetro -u. Veamos:


Al inicio vemos que el archivo_1.otf tiene 143844 bytes. Luego lo editamos con vi, añadimos un poco de contenido y lo guardamos; a continuación, vemos que el tamaño del archivo ha cambiado a 154300 bytes.
Mientras tanto, en el directorio /home/li-khrissteam/oficina, ya tenemos todos los archivos *.otf. Cuando usamos la opción -u, se combina con el parámetro -v para ver que esta pasando, el comando cp solo copia el archivo, que es el más reciente del directorio destino. Como resultado, vemos que solo archivo_1.otf se copia en el directorio /home/li-khrissteam/oficina.

 

- 11. Modo interactivo.  
El modo interactivo nos preguntará si queremos sobreescribir en caso que la carpeta de destino ya tenga el archivo. Para activar el modo interactivo, usamos la opción -i.  



- 12. ¿Podemos crear respaldo de fecha para cada archivo?  
Cuando en la carpeta de destino ya existe el archivo, por defecto cp sobrescribirá el mismo archivo en el directorio de destino; si usamos el parámetro --backup, el comando cp hará un respaldo de cada archivo de destino existente. ../oficina se referirá a /home/li-khrissteam/oficina. Veamos una muestra:


Como podemos ver la opción, --backup=simple  creará un archivo de copia de seguridad que es marcada por  tilde (~) al final del archivo. Con el parámetro --backup podemos controlar  esto, algunas opciones  son:

    none, off:       nunca respaldar aun utilizando la opción --backup    

    numbered, t: hacer respaldos numerados.
    existing, nilhacer copia de respaldo numeradas si existen, de lo contrario  

                           hacer una copia sencilla.
    simple, never: siempre hacer copias de seguridad sencillas.




- 13. ¿Se puede copiar solamente atributos de archivos?
 
El comando cp también nos dará la opción --attributes-only. Como se podemos pensar debido a su nombre, este parámetro solo copiará un nombre de archivo y sus atributos sin copiar ningún dato. He aquí una muestra.


En la imagen anterior, el archivo original  vibrancy-colors_2.0~trusty~Noobslab.com_all.deb tiene 22141832 bytes de tamaño; con el uso de la opción --attributes-only, el archivo copiado tendrá 0 bytes de tamaño. Esto es porque el contenido del archivo no está siendo copiado.
 


- 14. Forzando la copia.   
El uso del parámetro -f obligará  la actividad de la copia. Si los archivos de destino no se pueden abrir, entonces -f vuelve a intentarlo.


- 15. Removiendo el destino antes de la copia.   
Para ello, podemos utilizar la opción --remove-destination. Este parámetro es contrario a -f visto anteriormente. Si el comando cp encuentra el mismo nombre de archivo en la carpeta de destino, cp eliminará el archivo de destino en primer lugar, y copiará el nuevo. Veamos un ejemplo.


Conclusión.  
El comando cp es uno de los comandos básicos de los sistemas *nix. Para aquellos que quieran aprender Linux, deben saber este comando.  Podemos escribir man cp o --help cp desde nuestra consola para mostrar el manual y poder explorar con más detalle sobre este comando.



$ mv

Después de conocer acerca del comando de copia, el siguiente comando que se relaciona es el  comando mv. Cuando deseamos mover archivos de un lugar a otro y  no queremos duplicados, entonces el comando mv es absolutamente el correcto para esta tarea.

¿Qué es el comando mv?
 
Este mv es similar a cp, sin embargo este no crea una copia o duplicado de los archivos o directorios. Este comando viene por defecto en todas las distribuciones unix-like. Echemos un vistazo a algunos ejemplos utilizando mv en las operaciones del día a día. 


¿Cómo muevo archivos?  
El requisito para mover archivos es que la ubicación de destino sea diferente a la que actualmente estamos; por ejemplo para mover archivo_1.otf  de su actual directorio a otro, lo hacemos de la siguiente manera:


Como podemos observar al mover archivo_1.otf este fue eliminado de su previa ubicación.


¿Y si quiero mover varios archivos?  
Para este proposito, simplemente ponemos el nombre de los archivos separados por espacio.



También podemos usar patrones si nuestros archivos lo tienen; digamos que, para mover todos los archivos que tienen extensión .otf usamos el siguiente comando:




¿Cómo muevo un directorio?
Diferente del comando cp, mover un directorio utilizando el comando mv es más directo; para mover un directorio simplemente usamos mv sin ninguna opción. Veamos:



Renombrando archivos o directorios.
También utilizamos el comando mv para renombrar archivos y directorios, para lograr dicho objetivo, la ubicación de destino debe ser la misma a la ubicación fuente, por supuesto el nombre debe ser diferente.
Supongamos que estamos en el directorio /home/likhrissteam/Pictures y queremos renombrar archivo_1.otf a archivo_2.otf, entonces lo hacemos de la siguiente manera:



¿Cómo veo el proceso de lo que sucede?
Cuando movemos o renombramos un número grande de archivos o directorios, probablemente queremos saber si la operación se está llevando a cabo exitosamente. Para esto nos ayuda la opción -v; digamos que queremos mover todos los archivos .otf y ver el proceso, lo hacemos como en este ejemplo:


De la misma manera se hace con directorios.


¿Puedo usar modo interactivo igual que con cp?
Cuando movemos archivos a otra ubicación, y ya existe algún otro archivo con el mismo nombre, el comando mv por defecto sobreescribirá, sin mostrarnos ninguna notificación. Pero para que podamos ver una notificación antes de sobreescribir podemos usar la opción -i. Echemos un vistazo:



Esta notificación nos pondrá al tanto que ya existe un archivo con el mismo nombre en la ubicación de destino, al presionar "y" el archivo será movido.


Utilizando opción de actualización.
Mientras que -i nos notifica acerca de sobreescribir archivos el parámetro -u desempeñará una función de actualización, únicamente si la fuente es más nueva que el archivo de destino. Veamos:



Tenemos archivo_3.otf y archivo_4.otf con los siguientes atributos:
  • archivo_3.txt con 146432 bytes de tamañomodificado la ultima vez en el 2009
  • archivo_4.txt con 144472 bytes de tamaño y modificado la ultima vez en el 2009


Queremos moverlos adentro del directorio /home/likhriss/oficina; pero en la ubicación de destino ya tenemos archivo_3.otf y archivo_4.otf asi que movemos archivo_3.otf y archivo_4.otf del directorio actual a /home/likhriss/oficina utilizando el comando:

Como resultado vemos que los archivos se han movido y esto es porque sus ultimas modificaciones en cuanto al registro de tiempo son más recientes que los archivos que en directorio /home/li-khrissteam/oficina.

¿Hay algún parámetro para no sobreescribir archivos?  
Si la opción -i nos pregunta si queremos sobreescribir el archivo, el parámetro -n no permitira sobreescribir ningún archivo ya existente, usando el ejemplo del punto anterior si cambiamos la opción de -u a -n combinado con el parámetro -v, veremos entonces que no hay archivos movidos en el directorio /home/li-khrissteam/oficina.



¿Cómo crear un respaldo al mover archivos?  
Por defecto, mover archivos sobreescribirá los archivos de destino si estos ya existen, ¿Pero que pasa si estamos moviendo los archivos equivocados y los archivos de destino están ya sobreescritos con nuevos? ¿Hay alguna manera para recuperar los antiguos? Si la hay. Para esto usamos la opción -b este parámetro hará un respaldo del archivo de destino antes de sobreescribirlo con uno nuevo. De nuevo usaremos el escenario del punto anterior.

Como podemos ver en la imagen en el directorio /home/li-khrissteam/oficina tenemos un archivo llamado archivo_3.otf y archivo_4.otf la tilde (~) significa que esos archivos estan ya respaldados, podemos ver sus atributos si son mas antiguos que archivo_3.otf y archivo_4.otf.


Conclusión.
Mover archivos o directorios también es una de las tareas básicas de los sistemas Unix-like. Y como usualmente podemos escribir man mv o mv --help para obtener más ayuda desde nuestra consola. 



Saludos especiales a tod@s espero este aporte pueda ser de su ayuda. Si les fue útil compartan y comenten.