© All rights reserved. www.keepcoding.io
Comandos GNU
Julián García-Sotoca Pascual
© All rights reserved. www.keepcoding.io
Índice
● Edición de ficheros con vi
● Procesando secuencias de texto y filtros
● Tuberías y redirecciones
● Crear, monitorizar y matar procesos
© All rights reserved. www.keepcoding.io
Edición básica de ficheros con vi
● VI es un editor de texto disponible en todas las distribuciones
GNU/Linux y en la mayoría de Unix
● Proporciona muchas funcionalidades que lo hacen ser uno de los
más usados por los administradores
● Realmente cuando se portó de los antiguos Unix al proyecto GNU
se añadieron funcionalidades, creando el vi improved o vim
● Existen muchos otros como emacs o nano, pero Vi se ha
convertido en el estándar
● En ciertas situaciones de emergencia es el único editor disponible
© All rights reserved. www.keepcoding.io
Edición básica de ficheros con vi
● Modos de operación:
○ Comando: acepta comandos en forma de letras
○ Edición o Insert: cualquier caracter introducido es insertado
en el documento a excepción de la tecla esc
○ Ex o Última línea: precedido por : permite la manipulación de
ficheros
● Es importante reconocer el modo en que estamos operando
● El editor arranca en modo comando
© All rights reserved. www.keepcoding.io
Edición básica de ficheros con vi
● Modos de operación:
Comando
Última línea
Edición
ESC Intro / ESC
:
i a I A o O
Salida
q q! x wq
© All rights reserved. www.keepcoding.io
Edición básica de ficheros con vi
● Guía básica: vi fichero arranca en modo comando editando el fichero indicado
i inserta texto a la izquierda del cursor
a inserta texto a la derecha del cursor
I Inserta texto al inicio de la línea
A inserta texto al final de la línea
ESC Vuelve al modo comando
X borra el caracter bajo el cursor
dd borra la línea actual
dw borra la palabra actual
h o flecha izquierda mueve el cursor a la izquierda
j o flecha abajo mueve el cursor a la línea de abajo
k o flecha arriba mueve el cursor a la línea de arriba
l o flecha derecha mueve el cursor a la derecha
:w guarda los cambios
:q sale del editor
© All rights reserved. www.keepcoding.io
Edición básica de ficheros con vi
● Formas de iniciar:
○ vi: abre el programa sin abrir ningún archivo
○ vi fichero: edita el fichero si existe y si no lo crea
○ vi fichero1 fichero2: edita varios archivos, para cambiar al
siguiente archivo :next o :n y para el previo :prev o :N
○ vi +[número] fichero: edita el fichero iniciando en la línea
indicada
○ vi +/patrón fichero: edita el fichero iniciando en la primera vez
que encuentre el patrón
© All rights reserved. www.keepcoding.io
Edición básica de ficheros con vi
● Modo comando:
○ Multiplicadores: permite ejecutar un comando tantas veces
como se le indica
5Y copia 5 líneas
10dd borra 10 líneas
3dw borra 3 palabras
8j mueve el cursor 8 líneas abajo
© All rights reserved. www.keepcoding.io
Edición básica de ficheros con vi
● Modo comando:
○ Movimiento del cursor
○ Movimiento de pantalla
Flechas mover en distintas direcciones
^ o $ mueve al inicio o al final de la línea
G última línea
xG mueve el cursor a la línea x
xl mueve el cursor al carácter x de la línea
Ctrl+f una pantalla adelante
Ctrl+b una pantalla atrás
Ctrl+d media pantalla adelante
Ctrl+u media pantalla atrás
© All rights reserved. www.keepcoding.io
Edición básica de ficheros con vi
● Modo comando:
○ Borrado
○ Copiar y pegar
x borra un carácter
dd borra la línea
D o d$ borra desde el cursor hasta fin de línea
d0 borra desde el cursor hasta el inicio de línea
dw borra desde el cursor hasta fin de la palabra
Y o yy copia línea
P pega antes del cursor
p pega después del cursor
yw copia palabra
© All rights reserved. www.keepcoding.io
Edición básica de ficheros con vi
● Modo comando:
○ Búsqueda
○ Otros
/cadena busca adelante la cadena
?cadena busca atrás la cadena
n repite el último comando de búsqueda
N repite el último comando de búsqueda en sentido inverso
dw borra desde el cursor hasta fin de la palabra
u deshace la última acción
U deshace todos los cambios en una línea
. repite la acción
© All rights reserved. www.keepcoding.io
Edición básica de ficheros con vi
● Modo última línea:
:q salir si no ha habido cambios
:q! salir sin guardar
:w guardar cambios
:w fichero1 guardar cambios en el fichero1
:wq o :x guardar y salir
:r arch2 inserta un archivo
:e arch2 edita un archivo nuevo
:r! comando inserta la salida de un comando
© All rights reserved. www.keepcoding.io
Edición básica de ficheros con vi
● Modo última línea:
○ configuración
Se puede modificar permanentemente añadiendo las opciones
en el fichero .vimrc
:set number muestra los números de línea
:set nonumber oculta los números de línea
:set showmode muestra el modo actual de vi
:set
noshowmode
oculta el modo actual de vi
:set list muestra caracteres ocultos
:set nolist no muestra caracteres ocultos
:set ignorecase ignora mayúsculas en las búsquedas
:set
noignorecase
no ignora mayúsculas en las búsquedas
© All rights reserved. www.keepcoding.io
Procesado de secuencias de texto y filtros
● cut
○ selecciona determinadas columnas o campos de un fichero y lo
muestra por pantalla
○ útil para mostrar el contenido de ficheros tabulados
○ opciones más comunes:
■ -b: devuelve los bytes seleccionados
■ -c: devuelve los caracteres seleccionados
■ -d: cambia el delimitador de campo, por defecto es TAB
■ -f: selecciona únicamente esos campos
© All rights reserved. www.keepcoding.io
Procesado de secuencias de texto y filtros
● fmt
○ permite reformatear un texto que tiene líneas demasiado largas
○ con -width o w, se puede cambiar la longitud de la nueva línea
● nl
○ numera las líneas del fichero parseado, equivalente a cat -b
○ opciones más comunes:
■ -ba para enumerar también las líneas vacías
■ -i permite cambiar el valor de incremento
■ -n permite cambiar el formato de numeración
© All rights reserved. www.keepcoding.io
Procesado de secuencias de texto y filtros
● join
○ permite combinar dos ficheros macheando el contenido de algún
campo específico
○ con -t se puede especificar el carácter que separa los campos
○ ambos ficheros deben tener los campos en el mismo orden
● paste
○ similar a join, pero no utiliza un campo clave, en este caso pega
línea a línea separado por un tabulador
© All rights reserved. www.keepcoding.io
Procesado de secuencias de texto y filtros
● expand/unexpand
○ convierte los tabuladores en espacios
○ en ocasiones es mejor reemplazarlo para mejorar la
compatibilidad
○ por defecto sustituye un tabulador por 8 espacios
○ unexpand hace la operación inversa
○ opciones comunes:
■ -t: cambia el número de espacios
■ -i: solo convierte en el inicio de las líneas
© All rights reserved. www.keepcoding.io
Procesado de secuencias de texto y filtros
● od
○ permite mostrar el contenido de ficheros en Octal
○ utilizando las herramientas anteriores con ficheros binarios es
posible que deje la consola incontrolable
○ la salida está compuesto por números del 0 al 7 (octal) en
agrupaciones de 6 bytes
○ el primer campo de cada línea es el índice sobre el fichero
© All rights reserved. www.keepcoding.io
Procesado de secuencias de texto y filtros
● split:
○ permite dividir un fichero en dos o más ficheros
○ es necesario pasarle un prefijo que usará para construir los
nuevos ficheros a los que se le añadirá un código alfabético
○ es necesario pasarle cual será el tamaño máximo de los ficheros
divididos
■ para dividir por bytes se usa -b
■ para dividir por líneas se usa -l
© All rights reserved. www.keepcoding.io
Procesado de secuencias de texto y filtros
● tr
○ intercambia o borra caracteres que vienen del standard input (lo
veremos más adelante)
○ se ejecuta pasándole dos grupo de caracteres, el primero los
que se quieren reemplazar (SET1) y el segundo los que se van a
usar para reemplazarlos (SET2)
○ con -d se borran los caracteres del SET1
© All rights reserved. www.keepcoding.io
Procesado de secuencias de texto y filtros
● wc
○ permite obtener un conteo de palabras
○ por defecto devuelve las líneas, las palabras y los bytes de un
fichero
○ con -l devuelve únicamente las líneas
○ con -w devuelve las palabras
○ con -c los bytes
○ con -m los caracteres
© All rights reserved. www.keepcoding.io
Procesado de secuencias de texto y filtros
● xargs
○ herramienta muy potente que permite construir un comando
desde la entrada estandard
xargs comando argumentos <entrada>
○ al comando que se construye se le pasa todo el contenido hasta
que alcanza un límite especificado por -n o -L
© All rights reserved. www.keepcoding.io
Procesado de secuencias de texto y filtros
● sort
○ ordena el contenido de un fichero
○ por defecto ordena alfabéticamente pero también puede
ordenar:
■ ignorando mayúsculas con -f
■ numérico con -n
■ en orden inverso con -r
■ por un campo específico con -k
○ Con -u podriamos evitar la aparición de líneas duplicadas
© All rights reserved. www.keepcoding.io
Procesado de secuencias de texto y filtros
● uniq
○ elimina líneas consecutivas duplicadas
○ para ser más útil es posible que se necesite ordenar antes el
fichero
© All rights reserved. www.keepcoding.io
Procesado de secuencias de texto y filtros
● grep
○ busca determinado patrón en uno o más ficheros
○ devuelve el fichero que contiene el patrón y la línea donde lo
contiene
○ permite usar expresiones regulares en el patrón
○ algunas de las opciones más usadas:
■ -r búsqueda recursiva en el directorio especificado y
subdirectorios
■ -i ignora la diferencia entre mayúsculas
■ -An o -Bn, o -Cn: devuelve las n-líneas anteriores o posteriores
a la ocurrencia
■ -v muestra todas las líneas excepto la que tiene el patrón
© All rights reserved. www.keepcoding.io
Procesado de secuencias de texto y filtros
● grep
○ existen 2 variantes
■ egrep: usa expresiones regulares extendidas
■ fgrep: no interpreta expresiones regulares
© All rights reserved. www.keepcoding.io
Procesado de secuencias de texto y filtros
● sed
○ modifica el contenido de ficheros sacando por pantalla la salida
modificada
○ se suele utilizar para automatizar ediciones repetitivas
○ se le puede pasar un comando a ejecutar o listas más complejas
desde un fichero
○ algunos de los comandos más comunes son:
■ d → borrar líneas
■ s → sustituciones, permitiendo añadir banderas
● g sustituye todas las instancias del patrón
● n sustituye la n-ésima instancia de patrón
© All rights reserved. www.keepcoding.io
Procesado de secuencias de texto y filtros
● sed
○ ejemplos
sed s/patrón/nuevo_string/ fichero Sustituye la primera ocurrencia de patrón en cada línea
sed s/patrón/nuevo_string/g fichero Sustituye todas las ocurrencias de patrón en cada línea
sed 1,5s/patrón/nuevo_string/g fichero Sustituye todas las ocurrencias de patrón en el rango de líneas
sed -i s/patrón/nuevo_string/g fichero Guarda los cambios de la sustitución en la misma línea (no es reversible)
© All rights reserved. www.keepcoding.io
Procesado de secuencias de texto y filtros
● awk
○ se utiliza para extraer y sacar por pantalla partes específicas de
un fichero
○ es muy potente y es un lenguaje de programación en sí mismo
○ trabaja muy bien con campos y registros
○ el fichero de entrada se lee línea a línea y awk machea la
expresión en el orden y realiza la acción
○ con -F se le puede indicar el carácter separador de campo
○ el comando o acción, debe ir entre comillas simples
© All rights reserved. www.keepcoding.io
Procesado de secuencias de texto y filtros
● awk
○ ejemplos
awk ‘{print $0}’ /etc/passwd Devuelve todo el fichero
awk -F: ‘{print $0}’ /etc/passwd Devuelve la primera columna de cada línea
awk -F: ‘{print $0 $7}’ /etc/passwd Devuelve la primera y la séptima columna de cada línea
© All rights reserved. www.keepcoding.io
Procesado de secuencias de texto y filtros
● sed & awk da para escribir un libro
© All rights reserved. www.keepcoding.io
Tuberías y redirecciones
● Todos los procesos en Unix abren 3 descriptores
○ stdin → standard input. Valor numérico 0
○ stdout → standard output. Valor numérico 1
○ stderr → standard error. Valor numérico 2
● Dispositivos virtuales: /dev/stdin, /dev/stdout y /dev/stderr
● stdin normalmente hace referencia al teclado
● stdout y stderr normalmente hace referencia a la pantalla
© All rights reserved. www.keepcoding.io
Tuberías y redirecciones
Standard streams
© All rights reserved. www.keepcoding.io
Tuberías y redirecciones
File descriptors
© All rights reserved. www.keepcoding.io
Tuberías y redirecciones
● Flujos
○ Para redireccionar la salida estándar a un archivo → “>”
○ Si no se quiere sobreescribir el archivo → “>>”
○ Para redireccionar el contenido de un archivo a la entrada
estandard → “<”
○ Para especificar la salida:
■ “2>” → solo redirige el stderr al fichero
■ “&>” → redirige el stdout y stderr al fichero
© All rights reserved. www.keepcoding.io
Tuberías y redirecciones
● Flujos
○ La tubería (pipe) permite enviar la salida de un comando a la
entrada de otro. Se especifica con el carácter “|”
○ Con el comando tee se puede redireccionar simultáneamente a
un archivo y a la stdout
○ Se puede utilizar la salida de un comando como argumento para
otro con comillas invertidas “`”
© All rights reserved. www.keepcoding.io
Tuberías y redirecciones
Pipes and Filters – The Unix Shell
© All rights reserved. www.keepcoding.io
Tuberías y redirecciones
Pipes
© All rights reserved. www.keepcoding.io
Tuberías y redirecciones
● Ejemplos cmd > fichero
cmd 1> fichero
Envía el stdout al fichero
cmd 2> fichero Envía el stderr al fichero
cmd > fichero 2>&1 Envía el stdout y stderr al fichero
cmd > fichero 2> fichero2 Envía el stdout al fichero y stderr al fichero2
cmd < fichero Recibe en el stdin desde fichero
cmd >> fichero
cmd 1>> fichero
Añade el stdout al fichero
cmd 2>> fichero Añade el stderr al fichero
cmd >> fichero 2>&1 Añade el stdout y el stderr al fichero
cmd1 | cmd2 Pasa el stdout del cmd1 como stdin del cmd2
cmd1 2>&1 | cmd2 Pasa el stdout y el stderr del cmd1 como stdin del cmd2
© All rights reserved. www.keepcoding.io
Tuberías y redirecciones
● tee:
○ lee del Standard Input y escribe en un fichero y en el standard
output
○ con -a añade si el fichero donde se escribe ya existe
○ Ejemplo:
cmd1 | tee salida_cmd1.log | cmd2 | cmd3
De esta forma en el fichero salida_cmd1.log tendríamos el stdout
del cmd1 que además se habría pasado como entrada del cmd2.
Por pantalla veríamos la salida del cmd3
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Procesos
○ Un proceso es un programa en ejecución
○ Cada proceso está identificado por un PID
○ Linux es multitarea permitiendo arrancar más de un proceso
simultáneamente.
○ Estados de un proceso:
Process In a Linux Based System - Nilmar Shereef PT
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Procesos
○ Todo lo que se ejecuta en el sistema es un proceso
○ Un proceso puede ejecutar otros procesos, también conocidos
como procesos hijos
○ Cada proceso tiene una serie de atributos:
■ PID
■ UID & GUI
■ Proceso padre o PPID
■ Entorno
■ Directorio de trabajo
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Tipos de procesos
○ Interactivos: necesitan ser iniciados por un usuario
○ Batch: procesos automáticos y programados
○ Daemons: procesos de servidor que se ejecutan continuamente
○ Threads: tareas o procesos ligeros que se ejecutan bajo el
paraguas de un proceso principal, compartiendo memoria y
otros recursos
○ Kernel Threads: tareas del kernel sobre las que el usuario no
tiene ningún control
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Monitorización:
○ ps: muestra procesos activos
○ top o htop: monitorización continua
○ pstree: muestra el árbol de procesos
○ pidof: devuelve el PID de un programa
○ kill: envía señales de control para procesos
○ killall o pkill: utiliza el nombre del proceso en lugar del PID
○ nice o renice: nos permite gestionar las prioridades de un
proceso
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Señales de control:
○ Cada proceso corriendo en el sistema está en escucha de
señales
○ Estas señales son mensajes numéricos muy simples que envía el
kernel o el usuario
○ Cuando el proceso recibe una señal puede realizar una acción
○ Existen multitud de señales definidas, cada una se referencia con
un nombre y un número
○ Se puede usar el comando kill para enviar señales a los
procesos. Para mostrar todas las señales disponibles
ejecutamos kill -L
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Señales de control:
Señal ID Función
SIGHUP 1 Reinicia el proceso, recarga la configuración
SIGINT 2 Interrumpe el proceso, igual a Ctrl+C
SIGKILL 9 Fuerza la finalización del proceso
SIGSEGV 11 Fuerza un Segmentation fault
SIGTERM 15 Solicita al proceso que finalice
SIGTSTP 20 Para la ejecución y lo deja listo para continuar
SIGCONT 18 Continúa la ejecución
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Terminando procesos
○ Se suele utilizar el comando kill para matar procesos
○ La señal por defecto que se envía es la 15 o SIGTERM
○ En caso de que no responda al comando se puede enviar la
señal 9 o SIGKILL
○ Ocasionalmente algún proceso se ha podido quedar bloqueado
en el momento de terminar y en el ps o top aparecen como
zombi.
■ estos procesos siguen consumiendo algunos recursos
■ si es recurrente es posible que haya un fallo en el software
■ y recuerda...
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Terminando procesos
You can’t kill zombies,
because they’re already
dead!!
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Control de procesos:
○ Formas de iniciar un proceso:
■ comando → debe estar en el path
■ ./comando → lanzado desde el directorio donde está
■ /home/keepcoding/script/comando → ruta absoluta al
comando
○ Cuando se arranca un proceso de esta manera se queda
ocupando el terminal, en primer plano o foreground
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Control de procesos:
○ Si quisiéramos mantener libre el terminal, el proceso lo
deberíamos arrancar en segundo plano o background
○ Para ello:
■ lo arrancamos directamente en segundo plano añadiendo &
■ lo arrancamos con nohup (hace que no responda a señales
SIGHUP)
■ lo pasamos a segundo plano: con Ctrl+Z le mandaríamos un
SIGSTPT y con el comando bg le diríamos que continuase su
ejecución en background
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Control de procesos:
○ Por cada proceso en background se crea un job
○ Se pueden listar con el comando jobs
○ para recuperar el control de un job en concreto usamos el
comando fg
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Prioridades
○ Linux nos permite modificar las prioridades de cierto proceso
○ Útil para el control de procesos que utilizan muchos recursos
○ La prioridad de los procesos se muestra en la salida del top o del
ps -l
○ Cuanto mayor es el número menos tiempo de CPU se le asigna
○ Para cambiar la prioridad se utiliza:
■ nice → al arrancar un proceso
■ renice → en un proceso que ya está ejecutándose
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Prioridades
○ Las prioridades que se indican en los comandos nice y renice
van de entre el -20 (mayor prioridad) al 19 (menor prioridad)
○ Si no se indica otra se ajusta a 10
○ por defecto los procesos tienen prioridad 0
○ Solo root puede asignar prioridades <0
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Programación de tareas
○ Existen tres opciones para programar tareas para ejecutarse
más adelante en el tiempo:
■ at → para ejecuciones puntuales
■ cron → para ejecuciones recurrentes
■ anacron
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Programación de tareas
○ at
■ permite especificar de varias formas un tiempo futuro en el que
ejecutar cierta tarea → now, noon, midnight, teatime, 12pm,
04:50, now+2
■ Al ejecutar el comando at entra en una shell donde
introducimos los comandos a ejecutar (Ctrl+D para salir)
■ Algunas herramientas nos sirven para gestionar estos jobs:
● atq
● atrm
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Programación de tareas
○ cron
■ Servicio que corre en background
■ Cada minuto examina los ficheros de configuración y
determina si debe ejecutar alguna tarea
■ Los ficheros de configuración se encuentran en:
● /etc/cron.d
● /etc/crontab
● /var/spool/crontab
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Programación de tareas
○ cron
■ Existen dos métodos para programar la ejecución de tareas:
● Editar el crontab con el comando crontab -e
● Añadir los scripts que se quieren ejecutar en los directorios
/etc/cron.daily, /etc/cron.hourly, /etc/cron.weekly o
/etc/cron.monthly
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Programación de tareas
○ El formato de los ficheros crontab es el siguiente:
■ para los ficheros /etc/crontab y /etc/cron.d/:
■ para los crontab de usuario /var/spool/crontab/usuario:
© All rights reserved. www.keepcoding.io
Crear, monitorizar y matar procesos
● Programación de tareas
○ anacron
■ similar a cron, pero en lugar de fijar una hora exacta se
especifican intervalos
■ posiblemente anacron sea invocado por el mismo cron

Lista de Comandos UNIX

  • 1.
    © All rightsreserved. www.keepcoding.io Comandos GNU Julián García-Sotoca Pascual
  • 2.
    © All rightsreserved. www.keepcoding.io Índice ● Edición de ficheros con vi ● Procesando secuencias de texto y filtros ● Tuberías y redirecciones ● Crear, monitorizar y matar procesos
  • 3.
    © All rightsreserved. www.keepcoding.io Edición básica de ficheros con vi ● VI es un editor de texto disponible en todas las distribuciones GNU/Linux y en la mayoría de Unix ● Proporciona muchas funcionalidades que lo hacen ser uno de los más usados por los administradores ● Realmente cuando se portó de los antiguos Unix al proyecto GNU se añadieron funcionalidades, creando el vi improved o vim ● Existen muchos otros como emacs o nano, pero Vi se ha convertido en el estándar ● En ciertas situaciones de emergencia es el único editor disponible
  • 4.
    © All rightsreserved. www.keepcoding.io Edición básica de ficheros con vi ● Modos de operación: ○ Comando: acepta comandos en forma de letras ○ Edición o Insert: cualquier caracter introducido es insertado en el documento a excepción de la tecla esc ○ Ex o Última línea: precedido por : permite la manipulación de ficheros ● Es importante reconocer el modo en que estamos operando ● El editor arranca en modo comando
  • 5.
    © All rightsreserved. www.keepcoding.io Edición básica de ficheros con vi ● Modos de operación: Comando Última línea Edición ESC Intro / ESC : i a I A o O Salida q q! x wq
  • 6.
    © All rightsreserved. www.keepcoding.io Edición básica de ficheros con vi ● Guía básica: vi fichero arranca en modo comando editando el fichero indicado i inserta texto a la izquierda del cursor a inserta texto a la derecha del cursor I Inserta texto al inicio de la línea A inserta texto al final de la línea ESC Vuelve al modo comando X borra el caracter bajo el cursor dd borra la línea actual dw borra la palabra actual h o flecha izquierda mueve el cursor a la izquierda j o flecha abajo mueve el cursor a la línea de abajo k o flecha arriba mueve el cursor a la línea de arriba l o flecha derecha mueve el cursor a la derecha :w guarda los cambios :q sale del editor
  • 7.
    © All rightsreserved. www.keepcoding.io Edición básica de ficheros con vi ● Formas de iniciar: ○ vi: abre el programa sin abrir ningún archivo ○ vi fichero: edita el fichero si existe y si no lo crea ○ vi fichero1 fichero2: edita varios archivos, para cambiar al siguiente archivo :next o :n y para el previo :prev o :N ○ vi +[número] fichero: edita el fichero iniciando en la línea indicada ○ vi +/patrón fichero: edita el fichero iniciando en la primera vez que encuentre el patrón
  • 8.
    © All rightsreserved. www.keepcoding.io Edición básica de ficheros con vi ● Modo comando: ○ Multiplicadores: permite ejecutar un comando tantas veces como se le indica 5Y copia 5 líneas 10dd borra 10 líneas 3dw borra 3 palabras 8j mueve el cursor 8 líneas abajo
  • 9.
    © All rightsreserved. www.keepcoding.io Edición básica de ficheros con vi ● Modo comando: ○ Movimiento del cursor ○ Movimiento de pantalla Flechas mover en distintas direcciones ^ o $ mueve al inicio o al final de la línea G última línea xG mueve el cursor a la línea x xl mueve el cursor al carácter x de la línea Ctrl+f una pantalla adelante Ctrl+b una pantalla atrás Ctrl+d media pantalla adelante Ctrl+u media pantalla atrás
  • 10.
    © All rightsreserved. www.keepcoding.io Edición básica de ficheros con vi ● Modo comando: ○ Borrado ○ Copiar y pegar x borra un carácter dd borra la línea D o d$ borra desde el cursor hasta fin de línea d0 borra desde el cursor hasta el inicio de línea dw borra desde el cursor hasta fin de la palabra Y o yy copia línea P pega antes del cursor p pega después del cursor yw copia palabra
  • 11.
    © All rightsreserved. www.keepcoding.io Edición básica de ficheros con vi ● Modo comando: ○ Búsqueda ○ Otros /cadena busca adelante la cadena ?cadena busca atrás la cadena n repite el último comando de búsqueda N repite el último comando de búsqueda en sentido inverso dw borra desde el cursor hasta fin de la palabra u deshace la última acción U deshace todos los cambios en una línea . repite la acción
  • 12.
    © All rightsreserved. www.keepcoding.io Edición básica de ficheros con vi ● Modo última línea: :q salir si no ha habido cambios :q! salir sin guardar :w guardar cambios :w fichero1 guardar cambios en el fichero1 :wq o :x guardar y salir :r arch2 inserta un archivo :e arch2 edita un archivo nuevo :r! comando inserta la salida de un comando
  • 13.
    © All rightsreserved. www.keepcoding.io Edición básica de ficheros con vi ● Modo última línea: ○ configuración Se puede modificar permanentemente añadiendo las opciones en el fichero .vimrc :set number muestra los números de línea :set nonumber oculta los números de línea :set showmode muestra el modo actual de vi :set noshowmode oculta el modo actual de vi :set list muestra caracteres ocultos :set nolist no muestra caracteres ocultos :set ignorecase ignora mayúsculas en las búsquedas :set noignorecase no ignora mayúsculas en las búsquedas
  • 14.
    © All rightsreserved. www.keepcoding.io Procesado de secuencias de texto y filtros ● cut ○ selecciona determinadas columnas o campos de un fichero y lo muestra por pantalla ○ útil para mostrar el contenido de ficheros tabulados ○ opciones más comunes: ■ -b: devuelve los bytes seleccionados ■ -c: devuelve los caracteres seleccionados ■ -d: cambia el delimitador de campo, por defecto es TAB ■ -f: selecciona únicamente esos campos
  • 15.
    © All rightsreserved. www.keepcoding.io Procesado de secuencias de texto y filtros ● fmt ○ permite reformatear un texto que tiene líneas demasiado largas ○ con -width o w, se puede cambiar la longitud de la nueva línea ● nl ○ numera las líneas del fichero parseado, equivalente a cat -b ○ opciones más comunes: ■ -ba para enumerar también las líneas vacías ■ -i permite cambiar el valor de incremento ■ -n permite cambiar el formato de numeración
  • 16.
    © All rightsreserved. www.keepcoding.io Procesado de secuencias de texto y filtros ● join ○ permite combinar dos ficheros macheando el contenido de algún campo específico ○ con -t se puede especificar el carácter que separa los campos ○ ambos ficheros deben tener los campos en el mismo orden ● paste ○ similar a join, pero no utiliza un campo clave, en este caso pega línea a línea separado por un tabulador
  • 17.
    © All rightsreserved. www.keepcoding.io Procesado de secuencias de texto y filtros ● expand/unexpand ○ convierte los tabuladores en espacios ○ en ocasiones es mejor reemplazarlo para mejorar la compatibilidad ○ por defecto sustituye un tabulador por 8 espacios ○ unexpand hace la operación inversa ○ opciones comunes: ■ -t: cambia el número de espacios ■ -i: solo convierte en el inicio de las líneas
  • 18.
    © All rightsreserved. www.keepcoding.io Procesado de secuencias de texto y filtros ● od ○ permite mostrar el contenido de ficheros en Octal ○ utilizando las herramientas anteriores con ficheros binarios es posible que deje la consola incontrolable ○ la salida está compuesto por números del 0 al 7 (octal) en agrupaciones de 6 bytes ○ el primer campo de cada línea es el índice sobre el fichero
  • 19.
    © All rightsreserved. www.keepcoding.io Procesado de secuencias de texto y filtros ● split: ○ permite dividir un fichero en dos o más ficheros ○ es necesario pasarle un prefijo que usará para construir los nuevos ficheros a los que se le añadirá un código alfabético ○ es necesario pasarle cual será el tamaño máximo de los ficheros divididos ■ para dividir por bytes se usa -b ■ para dividir por líneas se usa -l
  • 20.
    © All rightsreserved. www.keepcoding.io Procesado de secuencias de texto y filtros ● tr ○ intercambia o borra caracteres que vienen del standard input (lo veremos más adelante) ○ se ejecuta pasándole dos grupo de caracteres, el primero los que se quieren reemplazar (SET1) y el segundo los que se van a usar para reemplazarlos (SET2) ○ con -d se borran los caracteres del SET1
  • 21.
    © All rightsreserved. www.keepcoding.io Procesado de secuencias de texto y filtros ● wc ○ permite obtener un conteo de palabras ○ por defecto devuelve las líneas, las palabras y los bytes de un fichero ○ con -l devuelve únicamente las líneas ○ con -w devuelve las palabras ○ con -c los bytes ○ con -m los caracteres
  • 22.
    © All rightsreserved. www.keepcoding.io Procesado de secuencias de texto y filtros ● xargs ○ herramienta muy potente que permite construir un comando desde la entrada estandard xargs comando argumentos <entrada> ○ al comando que se construye se le pasa todo el contenido hasta que alcanza un límite especificado por -n o -L
  • 23.
    © All rightsreserved. www.keepcoding.io Procesado de secuencias de texto y filtros ● sort ○ ordena el contenido de un fichero ○ por defecto ordena alfabéticamente pero también puede ordenar: ■ ignorando mayúsculas con -f ■ numérico con -n ■ en orden inverso con -r ■ por un campo específico con -k ○ Con -u podriamos evitar la aparición de líneas duplicadas
  • 24.
    © All rightsreserved. www.keepcoding.io Procesado de secuencias de texto y filtros ● uniq ○ elimina líneas consecutivas duplicadas ○ para ser más útil es posible que se necesite ordenar antes el fichero
  • 25.
    © All rightsreserved. www.keepcoding.io Procesado de secuencias de texto y filtros ● grep ○ busca determinado patrón en uno o más ficheros ○ devuelve el fichero que contiene el patrón y la línea donde lo contiene ○ permite usar expresiones regulares en el patrón ○ algunas de las opciones más usadas: ■ -r búsqueda recursiva en el directorio especificado y subdirectorios ■ -i ignora la diferencia entre mayúsculas ■ -An o -Bn, o -Cn: devuelve las n-líneas anteriores o posteriores a la ocurrencia ■ -v muestra todas las líneas excepto la que tiene el patrón
  • 26.
    © All rightsreserved. www.keepcoding.io Procesado de secuencias de texto y filtros ● grep ○ existen 2 variantes ■ egrep: usa expresiones regulares extendidas ■ fgrep: no interpreta expresiones regulares
  • 27.
    © All rightsreserved. www.keepcoding.io Procesado de secuencias de texto y filtros ● sed ○ modifica el contenido de ficheros sacando por pantalla la salida modificada ○ se suele utilizar para automatizar ediciones repetitivas ○ se le puede pasar un comando a ejecutar o listas más complejas desde un fichero ○ algunos de los comandos más comunes son: ■ d → borrar líneas ■ s → sustituciones, permitiendo añadir banderas ● g sustituye todas las instancias del patrón ● n sustituye la n-ésima instancia de patrón
  • 28.
    © All rightsreserved. www.keepcoding.io Procesado de secuencias de texto y filtros ● sed ○ ejemplos sed s/patrón/nuevo_string/ fichero Sustituye la primera ocurrencia de patrón en cada línea sed s/patrón/nuevo_string/g fichero Sustituye todas las ocurrencias de patrón en cada línea sed 1,5s/patrón/nuevo_string/g fichero Sustituye todas las ocurrencias de patrón en el rango de líneas sed -i s/patrón/nuevo_string/g fichero Guarda los cambios de la sustitución en la misma línea (no es reversible)
  • 29.
    © All rightsreserved. www.keepcoding.io Procesado de secuencias de texto y filtros ● awk ○ se utiliza para extraer y sacar por pantalla partes específicas de un fichero ○ es muy potente y es un lenguaje de programación en sí mismo ○ trabaja muy bien con campos y registros ○ el fichero de entrada se lee línea a línea y awk machea la expresión en el orden y realiza la acción ○ con -F se le puede indicar el carácter separador de campo ○ el comando o acción, debe ir entre comillas simples
  • 30.
    © All rightsreserved. www.keepcoding.io Procesado de secuencias de texto y filtros ● awk ○ ejemplos awk ‘{print $0}’ /etc/passwd Devuelve todo el fichero awk -F: ‘{print $0}’ /etc/passwd Devuelve la primera columna de cada línea awk -F: ‘{print $0 $7}’ /etc/passwd Devuelve la primera y la séptima columna de cada línea
  • 31.
    © All rightsreserved. www.keepcoding.io Procesado de secuencias de texto y filtros ● sed & awk da para escribir un libro
  • 32.
    © All rightsreserved. www.keepcoding.io Tuberías y redirecciones ● Todos los procesos en Unix abren 3 descriptores ○ stdin → standard input. Valor numérico 0 ○ stdout → standard output. Valor numérico 1 ○ stderr → standard error. Valor numérico 2 ● Dispositivos virtuales: /dev/stdin, /dev/stdout y /dev/stderr ● stdin normalmente hace referencia al teclado ● stdout y stderr normalmente hace referencia a la pantalla
  • 33.
    © All rightsreserved. www.keepcoding.io Tuberías y redirecciones Standard streams
  • 34.
    © All rightsreserved. www.keepcoding.io Tuberías y redirecciones File descriptors
  • 35.
    © All rightsreserved. www.keepcoding.io Tuberías y redirecciones ● Flujos ○ Para redireccionar la salida estándar a un archivo → “>” ○ Si no se quiere sobreescribir el archivo → “>>” ○ Para redireccionar el contenido de un archivo a la entrada estandard → “<” ○ Para especificar la salida: ■ “2>” → solo redirige el stderr al fichero ■ “&>” → redirige el stdout y stderr al fichero
  • 36.
    © All rightsreserved. www.keepcoding.io Tuberías y redirecciones ● Flujos ○ La tubería (pipe) permite enviar la salida de un comando a la entrada de otro. Se especifica con el carácter “|” ○ Con el comando tee se puede redireccionar simultáneamente a un archivo y a la stdout ○ Se puede utilizar la salida de un comando como argumento para otro con comillas invertidas “`”
  • 37.
    © All rightsreserved. www.keepcoding.io Tuberías y redirecciones Pipes and Filters – The Unix Shell
  • 38.
    © All rightsreserved. www.keepcoding.io Tuberías y redirecciones Pipes
  • 39.
    © All rightsreserved. www.keepcoding.io Tuberías y redirecciones ● Ejemplos cmd > fichero cmd 1> fichero Envía el stdout al fichero cmd 2> fichero Envía el stderr al fichero cmd > fichero 2>&1 Envía el stdout y stderr al fichero cmd > fichero 2> fichero2 Envía el stdout al fichero y stderr al fichero2 cmd < fichero Recibe en el stdin desde fichero cmd >> fichero cmd 1>> fichero Añade el stdout al fichero cmd 2>> fichero Añade el stderr al fichero cmd >> fichero 2>&1 Añade el stdout y el stderr al fichero cmd1 | cmd2 Pasa el stdout del cmd1 como stdin del cmd2 cmd1 2>&1 | cmd2 Pasa el stdout y el stderr del cmd1 como stdin del cmd2
  • 40.
    © All rightsreserved. www.keepcoding.io Tuberías y redirecciones ● tee: ○ lee del Standard Input y escribe en un fichero y en el standard output ○ con -a añade si el fichero donde se escribe ya existe ○ Ejemplo: cmd1 | tee salida_cmd1.log | cmd2 | cmd3 De esta forma en el fichero salida_cmd1.log tendríamos el stdout del cmd1 que además se habría pasado como entrada del cmd2. Por pantalla veríamos la salida del cmd3
  • 41.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Procesos ○ Un proceso es un programa en ejecución ○ Cada proceso está identificado por un PID ○ Linux es multitarea permitiendo arrancar más de un proceso simultáneamente. ○ Estados de un proceso: Process In a Linux Based System - Nilmar Shereef PT
  • 42.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Procesos ○ Todo lo que se ejecuta en el sistema es un proceso ○ Un proceso puede ejecutar otros procesos, también conocidos como procesos hijos ○ Cada proceso tiene una serie de atributos: ■ PID ■ UID & GUI ■ Proceso padre o PPID ■ Entorno ■ Directorio de trabajo
  • 43.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Tipos de procesos ○ Interactivos: necesitan ser iniciados por un usuario ○ Batch: procesos automáticos y programados ○ Daemons: procesos de servidor que se ejecutan continuamente ○ Threads: tareas o procesos ligeros que se ejecutan bajo el paraguas de un proceso principal, compartiendo memoria y otros recursos ○ Kernel Threads: tareas del kernel sobre las que el usuario no tiene ningún control
  • 44.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Monitorización: ○ ps: muestra procesos activos ○ top o htop: monitorización continua ○ pstree: muestra el árbol de procesos ○ pidof: devuelve el PID de un programa ○ kill: envía señales de control para procesos ○ killall o pkill: utiliza el nombre del proceso en lugar del PID ○ nice o renice: nos permite gestionar las prioridades de un proceso
  • 45.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Señales de control: ○ Cada proceso corriendo en el sistema está en escucha de señales ○ Estas señales son mensajes numéricos muy simples que envía el kernel o el usuario ○ Cuando el proceso recibe una señal puede realizar una acción ○ Existen multitud de señales definidas, cada una se referencia con un nombre y un número ○ Se puede usar el comando kill para enviar señales a los procesos. Para mostrar todas las señales disponibles ejecutamos kill -L
  • 46.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Señales de control: Señal ID Función SIGHUP 1 Reinicia el proceso, recarga la configuración SIGINT 2 Interrumpe el proceso, igual a Ctrl+C SIGKILL 9 Fuerza la finalización del proceso SIGSEGV 11 Fuerza un Segmentation fault SIGTERM 15 Solicita al proceso que finalice SIGTSTP 20 Para la ejecución y lo deja listo para continuar SIGCONT 18 Continúa la ejecución
  • 47.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Terminando procesos ○ Se suele utilizar el comando kill para matar procesos ○ La señal por defecto que se envía es la 15 o SIGTERM ○ En caso de que no responda al comando se puede enviar la señal 9 o SIGKILL ○ Ocasionalmente algún proceso se ha podido quedar bloqueado en el momento de terminar y en el ps o top aparecen como zombi. ■ estos procesos siguen consumiendo algunos recursos ■ si es recurrente es posible que haya un fallo en el software ■ y recuerda...
  • 48.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Terminando procesos You can’t kill zombies, because they’re already dead!!
  • 49.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Control de procesos: ○ Formas de iniciar un proceso: ■ comando → debe estar en el path ■ ./comando → lanzado desde el directorio donde está ■ /home/keepcoding/script/comando → ruta absoluta al comando ○ Cuando se arranca un proceso de esta manera se queda ocupando el terminal, en primer plano o foreground
  • 50.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Control de procesos: ○ Si quisiéramos mantener libre el terminal, el proceso lo deberíamos arrancar en segundo plano o background ○ Para ello: ■ lo arrancamos directamente en segundo plano añadiendo & ■ lo arrancamos con nohup (hace que no responda a señales SIGHUP) ■ lo pasamos a segundo plano: con Ctrl+Z le mandaríamos un SIGSTPT y con el comando bg le diríamos que continuase su ejecución en background
  • 51.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Control de procesos: ○ Por cada proceso en background se crea un job ○ Se pueden listar con el comando jobs ○ para recuperar el control de un job en concreto usamos el comando fg
  • 52.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Prioridades ○ Linux nos permite modificar las prioridades de cierto proceso ○ Útil para el control de procesos que utilizan muchos recursos ○ La prioridad de los procesos se muestra en la salida del top o del ps -l ○ Cuanto mayor es el número menos tiempo de CPU se le asigna ○ Para cambiar la prioridad se utiliza: ■ nice → al arrancar un proceso ■ renice → en un proceso que ya está ejecutándose
  • 53.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Prioridades ○ Las prioridades que se indican en los comandos nice y renice van de entre el -20 (mayor prioridad) al 19 (menor prioridad) ○ Si no se indica otra se ajusta a 10 ○ por defecto los procesos tienen prioridad 0 ○ Solo root puede asignar prioridades <0
  • 54.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Programación de tareas ○ Existen tres opciones para programar tareas para ejecutarse más adelante en el tiempo: ■ at → para ejecuciones puntuales ■ cron → para ejecuciones recurrentes ■ anacron
  • 55.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Programación de tareas ○ at ■ permite especificar de varias formas un tiempo futuro en el que ejecutar cierta tarea → now, noon, midnight, teatime, 12pm, 04:50, now+2 ■ Al ejecutar el comando at entra en una shell donde introducimos los comandos a ejecutar (Ctrl+D para salir) ■ Algunas herramientas nos sirven para gestionar estos jobs: ● atq ● atrm
  • 56.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Programación de tareas ○ cron ■ Servicio que corre en background ■ Cada minuto examina los ficheros de configuración y determina si debe ejecutar alguna tarea ■ Los ficheros de configuración se encuentran en: ● /etc/cron.d ● /etc/crontab ● /var/spool/crontab
  • 57.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Programación de tareas ○ cron ■ Existen dos métodos para programar la ejecución de tareas: ● Editar el crontab con el comando crontab -e ● Añadir los scripts que se quieren ejecutar en los directorios /etc/cron.daily, /etc/cron.hourly, /etc/cron.weekly o /etc/cron.monthly
  • 58.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Programación de tareas ○ El formato de los ficheros crontab es el siguiente: ■ para los ficheros /etc/crontab y /etc/cron.d/: ■ para los crontab de usuario /var/spool/crontab/usuario:
  • 59.
    © All rightsreserved. www.keepcoding.io Crear, monitorizar y matar procesos ● Programación de tareas ○ anacron ■ similar a cron, pero en lugar de fijar una hora exacta se especifican intervalos ■ posiblemente anacron sea invocado por el mismo cron