Linux.Operaciones con archivos.

Quiero organizarme un poco y empezar a crear mis carpetas.

mkdir carpeta1 carpeta2 #Crea una varias carpetas.
mkdir /home/ismaelroyano79/prueba1 #Podemos indicar el camino completo si queremos.

Ya no lo estoy usando, quiero borrarlo.

rmdir carpeta1 carpeta2 #Borra una o varias carpetas.
rmdir /home/ismaelroyano79/prueba1 #Podemos indicar el camino completo si queremos.

Tanto trabajar con carpetas…¿y los archivos?. 
¡A copiar!

El comando que se encarga de esta tarea es cp, de las siglas…¿a que no lo adivináis?, pues sí de copy.

El modo de empleo de este comando es muy sencillo, sólo basta con poner el origen y el destino de lo que queremos copiar. Vamos a hacer unos ejemplos:

cp /home/ismaelroyano79/prueba.txt /home/ismaelroyano79/Documents #Sintaxis.
#Si el archivo está en carpeta que actual en la que nos encontramos, pues podemos evitar el camino completo del origen; 
cp prueba.txt /home/ismaelroyano79/Documents/
Si el origen y el destino es la misma carpeta, es decir, en las que nos encontramos, podemos evitar el camino completo de ambos, quedando de la siguiente manera; 
cp prueba.txt prueba2.txt #A esto se le llama directorios por omisión. Vaya, también puede cambiar el nombre al destino, es decir, puede copiar un archivo y renombrar el resultado con otro nombre distinto.

Me estoy cansando y voy a borrar a diestro y siniestro.

Para borrar archivos y directorios se encarga el comando rm. Vamos a ver su uso:

rm <nombre del archivo/carpeta> #Borra archivos y archivos y carpetas.
rm -r <nombre de carpeta> #Cuando se trata de carpetas, la opción “-r” se encarga de borrar recursivamente, es decir, borra el directorio que le digamos y todo lo que haya dentro, incluidos carpetas y subcarpetas que puedan contener dentro de ésta.

No me gusta esto aquí, lo voy a poner en otro lugar.

El comando mv se encarga de mover archivos de un lado a otro. Pero no solo hace eso, es capaz también de renombrar el archivo borrando el antiguo. Funciona exactamente igual que el comando cp. Vamos a verlo con ejemplos:

mv prueba.txt /home/ismaelroyano79/Documents/ #Mueve el archivo de la carpeta actual a otro lugar.
mv prueba.txt prueba2.txt #En este caso lo que hace es borrar el antiguo y le cambia el nombre y lo guarda en la carpeta actual donde estamos.
mv /home/ismaelroyano79/prueba.txt /home/ismaelroyano79/Documents/ #Si nos interesa podemos usar en el origen y el destino los caminos completos donde se encuentran los archivos.

No tengo ni idea como se llaman los archivos, ¿Puedo hacer búsquedas por aproximación?.

En todo sistema operativo podemos usar caracteres comodines para indicar, en algunos comandos, una serie de archivos que nos puedan interesar:

  • *. El asterisco se utiliza para indicar que desconocemos el carácter que es.
  • ?. La interrogación se utiliza para referirnos a un sólo carácter. Podemos incluso mezclar el asterisco y la interrogación en cualquier consulta para hallar lo que necesitamos.

Todo archivo está compuesto por un nombre, un punto y una extensión, de manera que la extensión indica al sistema el tipo de archivo que es y utilidad con la que lo podemos abrirlo. (nombre.extensión). Vamos a ver un par de ejemplos con caracteres comodines:

ls *.txt #Muestra todos aquellos archivos cuya extensión sea txt.
ls l*.* #Muestra todos aquellos archivos cuya primera letra del nombre sea la “l”, las demás letras me da igual y la extensión me da igual.
ls ?p?.* #Muestra todos aquellos archivos cuya segunda letra sea la “p” y la extensión me de igual.
ls ?p?*.* #¿Existe alguna diferencia entre éste y el anterior?. La diferencia está en que el anterior muestra archivos cuyos nombres sólo tienen 3 caracteres y ésta que tengan 3 o más caracteres en en nombre.
ls ?r?* #En los ejemplos anteriores hemos puesto siempre en punto en medio indicando que queremos que tengan extensión, pero es posible que haya archivos sin extensión, como son los directorios. En este ejemplo buscamos archivos cuyo segunda letra sea la “r” y lo demás no importa, es decir que no mostrará archivos con y sin extensión.
ls ?p*l #Ahora sólo va a mostrar aquellos archivos cuyo segundo carácter sea la p pero que terminen en l.

Estas búsquedas tan raras puede que no tengan mucho sentido con el comando ls, pero se pueden utilizar con muchos comandos que aceptan caracteres comodines, como por ejemplo, cp, mv, rm.

Una ayudita por favor.

Un comando que nos puede servir de mucho para curiosear es man. Su modo de empleo es muy sencillo, basta con poner man <comando> y mostrará el manual para que podamos mirar con más tranquilidad como funciona. Para salir se utiliza la q.

Visualizar Archivos.

cat. Es un comando que nos permite concatenar ficheros y visualizarlos por la pantalla. Nosotros vamos a usarlo para saber el contenido de los ficheros.

#Su formato es muy simple. 
cat <nombre del fichero>
#Otras des las cosas que puede hacer este comando es concatenar. Vamos a imaginar que tenemos 3 archivos *.mp3 y lo que queremos es que agruparlos en uno sólo
cat *.mp3 > concierto.mp3

less. Otro comando que podemos utilizar para ver el contenido de los archivos.

#Su formato es muy simple
less <nombre del archivo>
#Para navegar por el archivo hay argunas teclas de funciones:
Re Pág. Retroceder por página.
Av Pág. Avanzar por página.
Up. Retroceder por línea.
Down. Avanzar por línea.
G. Ir al final del archivo.
g. Ir al principio del archivo.
/. Buscar texto.
h. Ayuda.
q. Salir de less.

Este comando también lo podemos usar cuando el tenido que queremos visualizar es más de una pantalla y no nos de tiempo a verlo todo.

ls /dev -all | less #Muestra información como si fuera un archivo. 
#head. Muestra las primeras líneas de un archivo. 
head <nombre de archivo>
#tail. Muestra las 10 últimas líneas de un archivo. 
tail <nombre de archivo
#wc. Muestra el número de líneas, palabras y caracteres de un archivo. 
wc <nombre del archivo>
#grep. Este comando sirve para buscar expresiones dentro de un archivo de texto. Actúa como un filtro de otros comandos determinando lo que queremos que muestre.

Vamos a crear un archivo de texto.

 ls /etc -all > listado

Lo que queremos es que nos muestre las líneas donde se encuentra la palabra sudo;

 cat listado | grep sudo

El comando lo que esta enseñando son aquellas líneas que contengan, terminen, empiecen con sudo. Podemos añadirle algunas opciones que pueden ser interesantes:

#-n. Nos muestra el número de línea donde se encuentra la coincidencia. 
cat listado | grep -n sudo
#-v. Nos muestra el resultado contrario del patrón, es decir, todas aquellas líneas que no tengan el resultado que ponemos. 
cat listado | grep -v sudo
#Si la lista que nos da es muy larga, pues usamos el less.
cat listado | grep -n sudo | less
-w. Esta opción lo que hace es buscar exactamente lo que pongamos de patrón, es decir, en este caso sólo busca líneas que aparezca "sudo", ni más ni menos.

file. Este comando nos muestra el tipo de archivo que es.

 file <nombre de archivo>

find. find <nombre de archivo>. Busca nombre de archivos. Podemos usar el camino o también caractereis comodines;

find / *.txt

diff. Busca diferencias entre dos archivos y las muestra.

diff <archivo1> <archivo2>. 

Redireccionando.

Vamos a teclear cat > texto.txt y pulsamos enter. La consola se queda como esperando que hagamos algo. Vamos a escribir cualquier cosa y cuando terminemos pulsamos Control+D. Ahora teclear cat texto.txt.

¿Que ha pasado?

Pues resulta que todo lo que hemos escrito lo ha guardado “texto.txt”. Pues ya sabemos para que sirve el signo >. Simplemente lo que escribamos con el comando cat lo redireccione al fichero texto.txt y el Control+D significa que hemos terminado de introducir texto. Y para finalizar hemos visualizado su contenido. También podemos usar cat < texto.txt y también visualizará el contenido.

Ahora vamos repetir el proceso, pero vamos a escribir otro texto diferente y veamos que pasa:

  • cat > texto.txt (y escribimos otra cosa).
  • cat texto.txt. Ahora resulta que la frase anterior nos la ha borrado y sólo muestra la nueva que hemos escrito ahora. Bueno pues ya sabemos que el signo > crea un archivo si no existe y si existiera lo borra y lo crea de nuevo.

¿Que hago si quiero introducir mas texto sin borrar el que ya tenemos?.

Pues basta con poner doble redirección de salida y esto añadimos mas texto sin perder el ya almacenado;

cat >> texto.txt

Hablando de redireccionar, como información voy a explicar como crear un iso con el comando cat.

cat /dev/sr0 > imagen.iso #¡Mola!, ¿verdad?.

Ordenando un poco las cosas.

Habrá veces que nos pueda interesar ordenar resultados que nos muestre por la pantalla, para ello se utiliza el comando sort.

Vamos a crear un archivo y vamos a ir metiendo nombre en desorden:

cat > amigos

Ahora vamos a combinar cat y sort;

cat < amigos | sort > amigosenorden

Lo que hemos hecho es visualizar el archivo amigos y después ordenarlo redireccionandolo a un nuevo archivo. Si sólo queríamos ordenarlo sin guardarlo, con sólo poner sort amigos nos valdría. El carácter | sirve para filtrar resultados.

¿Que son los enlaces de archivos?.

Puede llegar alguna situación en la que necesitemos dar a un archivo distintos nombres para proteger los datos, o que también que podamos necesitar ponerle a un mismo archivo distintos nombres con diferentes permisos porque pueda ser modificado por varios usuarios. Para esto se usan los enlaces.

Internamente el sistema operativo accede a los archivos mediante un número que los identifica de los demás llamado inodo. Esto quiere decir que cuando estamos copiando un archivo en realidad el ordenador no usa sus nombres ni sus extensiones para trabajar, busca su inodo, que es lo que idéntica inequívocamente.

Existen dos tipos de enlaces; Los duros y los simbólicos.

Enlaces Duros.

Los enlaces duros son asignar distintos nombres a un mismo inodo y con ello podemos tener muchísimos nombres, pero en realidad se refiere a un mismo fichero con su inodo correspondiente. Pero hay que tener en cuenta que con este tipo de enlaces, cualquier cambio que podamos hacer en uno solo de ellos, afecta a todos los demás.

El comando que se utiliza para crear enlaces es ln. Vamos a ver la información de los inodos de nuestros archivos con la opción -i;

ls -i -all

Si nos fijamos bien en la imagen, ahora tenemos una columna mas que muestra el número de inodo de cada archivo.

Ahora vamos a crear un enlace duro. Lo primero es crear el archivo cat > prueba.txt y metemos cualquier texto para que contenga algo. Ahora vamos a crear el enlace duro;

ln prueba.txt enlace.txt

Vamos a ver su información;

ls -i *.txt -all

Si nos fijamos en la imagen, hereda todo respecto al archivo original, es decir, el inodo es el mismo, los permisos son los mismos, lo único que cambia es el nombre, pero si modificamos cualquier cosa dentro de archivo enlace.txt, se modificará también en el original y todos los enlaces duros que puedan existir.

Este tipo de enlaces no te permite hacer enlaces duros en distintas particiones, es decir, el archivo original y los posibles enlaces deben estar en la misma partición.

Otro inconveniente es que no permite crear enlaces a ficheros que no existen.

Enlaces Simbólicos o Blandos.

Los enlaces simbólicos son diferentes y no tiene la limitación de los enlaces duros. Este tipo de enlaces no enlaza con los inodos del fichero original, lo que hace es apuntar el nombre del fichero que enlaza y le da un inodo diferente. Estos enlaces son algo parecidos a los accesos directos de Windows, pero nada que ver.

Para crear un enlace simbólico se le debe añadir la opción -i al comando ln;

ln -s prueba.txt enlace2.txt

Estos tipos de enlaces no heredan los permisos como pasa con los enlaces duros.

Continúa por Comandos del sistema.