Introducción al shell


  • Un shell es un programa cuyo propósito principal es leer comandos y ejecutar otros programas.
  • Esta lección utiliza Bash, el shell por defecto en muchas implementaciones de Unix.
  • Los programas pueden ejecutarse en Bash introduciendo comandos en el prompt de la línea de comandos.
  • Las principales ventajas del intérprete de comandos son su elevada relación entre acciones y pulsaciones, su capacidad para automatizar tareas repetitivas y su capacidad para acceder a máquinas en red.
  • Un reto importante a la hora de utilizar el shell puede ser saber qué comandos hay que ejecutar y cómo ejecutarlos.

Navegación por archivos y directorios


  • El sistema de ficheros se encarga de gestionar la información del disco.
  • La información se almacena en ficheros, que a su vez se almacenan en directorios (carpetas).
  • Los directorios también pueden almacenar otros directorios, que entonces forman un árbol de directorios.
  • pwd imprime el directorio de trabajo actual del usuario.
  • ls [path] imprime un listado de un fichero o directorio específico; ls por sí solo lista el directorio de trabajo actual.
  • cd [path] cambia el directorio de trabajo actual.
  • La mayoría de los comandos toman opciones que comienzan con -.
  • Los nombres de directorio en una ruta se separan con / en Unix, pero \ en Windows.
  • / por sí solo es el directorio raíz de todo el sistema de ficheros.
  • Una ruta absoluta especifica una ubicación desde la raíz del sistema de ficheros.
  • Una ruta relativa especifica una ubicación a partir de la ubicación actual.
  • . por sí solo significa ‘el directorio actual’; .. significa ‘el directorio por encima del actual’.

Trabajar con archivos y directorios


  • cp [old] [new] copia un archivo.
  • mkdir [path] crea un nuevo directorio.
  • mv [old] [new] mueve (renombra) un archivo o directorio.
  • rm [path] elimina (borra) un archivo.
  • * coincide con cero o más caracteres en un nombre de archivo, por lo que *.txt coincide con todos los archivos que terminan en .txt.
  • ? coincide con cualquier carácter de un nombre de archivo, por lo que ?.txt coincide con a.txt pero no con any.txt.
  • El uso de la tecla Control puede describirse de muchas maneras, incluyendo Ctrl-X, Control-X y ^X.
  • El intérprete de comandos no tiene papelera: una vez que se borra algo, desaparece de verdad.
  • Los nombres de la mayoría de los ficheros son something.extension. La extensión no es necesaria y no garantiza nada, pero normalmente se utiliza para indicar el tipo de datos del archivo.
  • Dependiendo del tipo de trabajo que realice, es posible que necesite un editor de texto más potente que Nano.

Pipes y filtros


  • wc cuenta líneas, palabras y caracteres en sus entradas.
  • cat muestra el contenido de sus entradas.
  • sort ordena sus entradas.
  • head muestra por defecto las 10 primeras líneas de su entrada sin argumentos adicionales.
  • tail muestra por defecto las 10 últimas líneas de su entrada sin argumentos adicionales.
  • command > [file] redirige la salida de un comando a un archivo (sobreescribiendo cualquier contenido existente).
  • command >> [file] añade la salida de un comando a un archivo.
  • [first] | [second] es una pipe: la salida del primer comando se usa como entrada del segundo.
  • La mejor manera de usar el shell es usar pipes para combinar programas simples de un solo propósito (filtros).

Bucles


  • Un bucle for repite los comandos una vez por cada cosa de una lista.
  • Cada bucle for necesita una variable para referirse a lo que está operando en ese momento.
  • Utilice $name para expandir una variable (es decir, obtener su valor). también se puede utilizar ${name}.
  • No utilice espacios, comillas o caracteres comodín como ‘*’ o ‘?’ en los nombres de fichero, ya que complica la expansión de variables.
  • Dar a los ficheros nombres consistentes que sean fáciles de emparejar con patrones comodín para facilitar su selección para el bucle.
  • Utilice la tecla de flecha arriba para desplazarse por los comandos anteriores para editarlos y repetirlos.
  • Utilice Ctrl+R para buscar entre los comandos introducidos anteriormente.
  • Usa history para mostrar comandos recientes, y ![number] para repetir un comando por número.

Scripts de shell


  • Guarda comandos en archivos (normalmente llamados shell scripts) para reutilizarlos.
  • bash [filename] ejecuta los comandos guardados en un archivo.
  • $@ se refiere a todos los argumentos de línea de comandos de un script de shell.
  • $1, $2, etc., se refieren al primer argumento de la línea de comandos, al segundo argumento de la línea de comandos, etc.
  • Ponga las variables entre comillas si los valores pueden contener espacios.
  • Dejar que los usuarios decidan qué archivos procesar es más flexible y más consistente con los comandos Unix incorporados.

Encontrar cosas


  • find encuentra archivos con propiedades específicas que coinciden con los patrones.
  • grep selecciona las líneas de los archivos que coinciden con los patrones.
  • --help es una opción soportada por muchos comandos bash, y programas que pueden ser ejecutados desde dentro de Bash, para mostrar más información sobre cómo usar estos comandos o programas.
  • man [command] muestra la página del manual de un comando determinado.
  • $([command]) inserta la salida de un comando en su lugar.