Regresar a saberes y documentación

Comandos básicos del shell

Este será un pequeño ejemplo de como puedes usar los primeros comandos básicos, con breves explicaciones sobre ellos, sugiero seguir paso por paso las instrucciones.

El prompt

Es por lo que estará representada nuestra consola, terminal o shell para poder digitar los comandos que necesitemos, un ejemplo de simbolo del prompt es:

usuario@maquina:~$

En donde el símbolo $ nos indica que es un usuario común y corriente y por el contrario si es el administrador del sistema se representa por un el símbolo #.

root@maquina:~#

Posicionamiento

El comando pwd nos será util para hacer saber, en que lugar del sistema de ficheros estamos parados, para ello debemos hacer:

usuario@maquina:~$ pwd

Se imprimirá en la pantalla una línea como:

/home/usuario

Crear ficheros

Usaremos el comando touch para crear un fichero, el fichero quedará vacio.

usuario@maquina:~$ touch fichero.txt otro_fichero.txt

Lo que acabas de hacer es ejecutar un comando y pasar dos parámetros a él, en este caso el comando es touch y los parámetros son fichero.txt y otro_fichero.txt.

Observa que el el carácter de espacio sirve para separar los parámetros.

(!) Tip: Evita los nombres de fichero con espacios, usa el guión (-) o el underscore (_).

Crear un directorio o carpeta

Para crear un directorio usa el comando mkdir y pasas como parámetro el nombre del directorio que deseas crear.

usuario@maquina:~$ mkdir mi_directorio 

Como muchos comandos mkdir acepta mas de un parámetro, en ese caso, creará varios directorios.

Borrar un directorio o carpeta

usuario@maquina:~$ rmdir directorio_vacio

usuario@maquina:~$ rm -R directorio

Listar contenido

El comando ls nos mostrará ficheros dentro del directorio actual.

usuario@maquina:~$ ls 

Salida del comando.

fichero.txt   otro_fichero.txt   mi_directorio

Copiar un fichero

Para copiar ficheros de un directorio a otro escriba en la consola el comando cp seguido del nombre de fichero, un espacio, y luego la ruta donde deseas poner la copia:

usuario@maquina:~$ cp fichero.txt mi_directorio/

Copiar un directorio con su contenido

Para copiar un directorio con su contenido, utilice el comando cp con la opción -R para copia recursiva, seguido del parámetro ruta donde se desea hacer la copia:

usuario@maquina:~$ cp -R directorio otro_directorio/

Explorar un directorio

Utilizarás el comando cd para moverte de un lugar a otro dentro del sistema de ficheros.

usuario@maquina:~$ cd mi_directorio/
usuario@maquina:~mi_directorio/$ cd ../
usuario@maquina:~$

Mover un fichero

Para mover ficheros de un directorio a otro escriba en la consola el comando mv seguido del fichero a mover, y luego la ruta del directorio donde quiere que quede el fichero:

usuario@maquina:~$ mv otro_fichero.txt mi_directorio/

Renombrar un fichero

Para renombrar un fichero, hacemos uso del comando mv seguido del nombre original del fichero a renombrar (primer argumento), y luego el nombre que se quiere dar al fichero (segundo argumento):

usuario@maquina:~$ mv nom_fichero.txt nuevo_nom_fichero.txt

Borrar un fichero

Para borrar ficheros de un directorio escriba en la consola el comando rm, debe tenerse cuidado con este comando ya que si eres el administrador (aparece el el símbolo # en tu prompt), puede que si no tienes cuidado, borres un fichero importante del sistema:

(!) Nota: Usar con precaucion.

usuario@maquina:~$ rm fichero.txt

Ver espacio en disco

Con el comando df podremos visualizar las particiones como dispositivos, su tamaño, el tamaño usado y el tamaño disponible en cada particion, tambien en donde ha sido montado el dispositivo y puede mostrar mas información necesaria.

$ df -h

Ver tamaño del directorio

El comando para esta información es du, el cual nos da un total de uso de espacio de archivos en determinado directorio:

$ du -hs directorio

Ordenado por tamaño

Tamaño de las carpetas ordenado de menor a mayor

$ du -hs $(du -s * | sort -g | awk '{print $2}')

Documentación de comandos

Para ver mas información de como funciona determinado comando en la shell, podemos usar el famosos comandos man e info así:

$ man man

$ info man

Enlaces blandos

Crear un enlace blando de la carpeta /carpeta con el nombre enlace

ln -s /carpeta enlace

Operaciones siguiendo enlaces blandos

ls -L muestra la información del archivo al que referencia el enlace
cp -rL copia el archivo al que referencia el enlace
du -hsL añade el tamaño del archivo al que referencia el enlace

Búsqueda básica y avanzada de archivos

Sintaxis

find /ruta -name "comodinARCHIVOcomodin" -OPCIONES

El comando find podría ser considerado entre los comandos más útiles para un administrador de Sistema UNIX / Linux, veamos algunos ejemplos:

  1. Buscar Archivos con extensión .txt en el directorio raíz, con tamaño mayor a 30MB y fecha de acceso mayor a 8 días:
     find / -name "*.txt" -size +30000 -atime +8
  2. Buscar archivos con extensión diferente a .log que se encuentran en el directorio /home/usuario/, y que han sido modificados en los últimos 30 días
     find /home/usuario \! -name "*.log" \! -mtime +30 

Ahora bien, y qué tal si el mismo comando que usamos para buscar, fuera capaz de realizar acciones por nosotros, a manera de iteraciones (ciclos), con cada uno de esos archivos?, veamos otros ejemplos:

  1. Buscar en el directorio home del usuario actual los archivos con fecha de acceso mayor a 5 días, con excepción de los archivos con extensión .log y listar sus características (usuario, permisos, fecha de acceso):
     find $HOME -mtime +5 \! -name "*.log" -exec ls -lua {} \;

    Ufff... comando denso, verdad?... pero es de gran utilidad, y realmente no es muy complejo ;-)

  2. Buscar los archivos con extensión .txt dentro del directorio /home, con consecutivo diferente a 2006, con fecha de acceso mayor a 7 días, con tamaño mayor a 5MB, y comprimirlos con el comando compress, y otro con el comando gzip:
     find /home -name "*.txt" \! -name "*2006*" -atime +7 -size +5000 -exec compress -v {} \;
     find /home -name "*.txt" \! -name "*2006*" -atime +7 -size +5000 -exec gzip -9 {} \;
    Qué gran ayuda, verdad?... cuanto tardas en buscar y comprimir más de 10 archivos?

Un ejemplo más... pero es de advertir que debe realizarse con mucho cuidado, con la conciencia de que no es reversible:

  1. Buscar los archivos con nombre core dentro del directorio home de los usuarios del sistema que se encuentra en la ruta /aplicativo/produccion, con fecha de modificación mayor a 5 días, y tamaño mayor a 3MB, y eliminarlos del sistema:
     find /aplicativo/produccion -name core -mtime +5 -size +3000 -exec rm {} \;

    Ojo, el comando es muy sencillo, pero es un comando de mucho cuidado, donde el error humano, puede costar una fortuna para la compañía, la pérdidad de datos, corrupción de bases de datos, y procesos de recuperación de backups bastante extensos

Iterar en archivos con nombres que tienen espacios

Para cuando tenemos varios archivos con nombres como 1280 Almas/Hablame de horror/01 - Soledad criminal.flac y queremos ejecutar una operación con ellos.

SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for f in *
do
  echo "$f"
done
IFS=$SAVEIFS

Ejemplos

Cambiar los permisos de todas las carpetas de una jerarquía

SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for f in $(find -type d); do
  chmod u=rwx,g=,o= "$f"
done
IFS=$SAVEIFS

Cambiar los permisos de todos los archivos de una jerarquía

SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for f in $(find -type f); do
  chmod u=rw,g=,o= "$f"
done
IFS=$SAVEIFS

Artículos relacionados

Enlaces externos


CategoryGnuLinux

ComandosBasicosDelShell (last edited 2009-10-19 11:54:47 by kmilo)