Expresiones regulares y filtros

Expresiones regulares y filtros

Una expresión regular es un patrón que define a un conjunto de cadenas de caracteres. Las expresiones regulares se construyen de forma análoga a las expresiones aritméticas. Existe la posibilidad de combinar expresiones simples; para ello, debemos emplear distintos operadores.

Los bloques básicos de construcción son las expresiones regulares que referencias un único carácter. La mayoría de los caracteres, incluyendo todas las letras y dígitos, son expresiones regulares que se definen a si mismos. Cualquier metacarácter con significado especial debe ser precedido del símbolo backslash para que pierda su significado especial.

Una lista de caracteres encerrados dentro de [] referencia cualquier carácter sencillo de esa lista. Si el primer carácter es un ^ entonces estaremos haciendo referencia a los caracteres que no aparecen en la lista.

Los caracteres ^ y $ son metacaracteres que representan una cadena vacía al principio y al final de la línea, respectivamente. Los símbolos < y > representan una cadena vacía al principio y al final de una palabra.

Una expresión regular que representa un carácter sencillo puede ser continuada con uno o varios caracteres de repetición:

?El elemento precedente es opcional y debe coincidir al menos una vez.
*El elemento precedente debe coincidir cero o más veces
{n}El elemento precedente debe coincidir exactamente n veces
+El elemento precedente debe coincidir una o más veces.
{,m}El elemento precedente es opcional y debe coincidir al menos m veces.
{n,m}El elemento precedente debe coincidir al menos n veces pero no más de m veces.

Dos expresiones regulares pueden unirse con el operador |. La expresión resultante representa cualquier cadena que responda a uno de los dos patrones.

Ejemplos:

PatrónQué representa
pabloLa cadena pablo
^pabloLa cadena pablo al comienzo de una línea.
pablo$La cadena pablo al final de una línea.
^pablo$La cadena pablo formando una única línea.
niñ[oa]La cadena niño o niña
ni[^aeiou]oLa tercera letra no es una vocal minúscula.
ga.oLa tercera letra es cualquier carácter.
^….$Cualquier línea que contenga 4 caracteres.
^.Cualquier línea que comienza por punto.
^[^.]Cualquier línea que no comienza por punto.
niños*niño, niños, niñoss, niñosss, etc
“niño”niño entre comillas dobles.
“*niño”*niño con o sin comillas dobles.
[a-z][a-z]*una o más letras minúsculas.
[a-z]+una o más letras minúsculas (sólo válido en algunas aplicaciones).
[^0-9A-Z]cualquier caracter que no sea ni número ni letra mayúscula.
[a-zA-Z]cualquier letra sea mayúscula o minúscula.
[Ax5]cualquier carácter que sea A, x o 5.
niño|niña|nadauna de las tres palabras.
(s|arb)ustola palabra susto o arbusto.
ga?t[oa]gato, gata, gasto, gaita, etc.
<gacualquier palabra que empiece por ga.
 ño>cualquier palabra que termine por ño
<niño>la palabra niño
o{2,}dos o más oes en una misma fila.

Siempre que empleemos expresiones regulares con grep, deben se encerradas entre comillas dobles para que el interprete de órdenes no los considere. Si dentro de la expresión regular tenemos el metacarcter $ , deberemos emplear comillas simples en lugar de las comillas dobles.

Filtros

sort: Sintaxis sort [-ndt] [+campo] [archivo(s)]
Este filtro se utiliza para ordenar líneas compuestas por cmpos, separados por tabuladores, aunque podemos especificar cualquier tipo de separador de campo. Si a sort no le pasamos ningún archivo como prámetro, tomará su entrada de la entrada estándar como cualquier filtro. Con este filtro podemos ordenar las líneas de uno varios archivos según un campo en particular. Esta ordenación no produce ninguna modificación en los archivos tratados.

Algunas opciones:

-nconsidera el valor numérico para ordenar los campos.
-dconsiderar sólo espacios en blanco y caracteres alfanuméricos.
-t seputiliza sep como separador de campos.

 

grep: Sintaxis grep [-inv] patrón [archivo(s)]

Es un filtro que permite buscar cadenas de caracteres en los archivos que le indiquemos
Opciones:

-iIndica a grep que se ignoren mayúsculas y minúsculas
-vvisualiza por pantalla las líneas que no contienen el patrón indicado.
-nmuestra por pantalla el número de línea en que se encuentra el patrón.

 

wc: Sintaxis wc [-lwc] [archivo(s)]
Se trata de un contador de líneas, palabras y caracteres.
Opciones:

-lvisualiza sólo el número de líneas.
-wvisualiza sólo el número de palabras.
-cvisualiza sólo el número de caracteres.

 

cut: Sintaxis cut -c lista [archivo(s)]
cut -f lista [-dcar] [archivo(s)]
Se usa para cortar y pasar a la salida estándar las columnas o campos de la entrada estándar o del archivo especificado. La opción -c es para cortar columnas y -f para cortar campos. Al cortar un campo, existe la opción -d para especificar los caracteres de separación entre los distintos campos (car). Por defecto el delimitador es el tabulador, al menos que se indique otra cosa.
Una lista es una secuencia de números que se usa para indicarle a cut qué campos o columnas se quieren cortar. Hay varios formatos para esta lista.

X-YColumnas o campos desde X hasta Y inclusive.
X-Columnas o campos desde X hasta el final.
X-YColumnas o campos X e Y.

 

tr: Sintaxis tr [-dsc] cadena1 cadena2
Se emplea como traductor. Como todo filtro tr lee datos de la entrada estándar, los procesa y deposita los resultados en la salida estándar. Busca los caracteres indicados por cadena1 y los sustituye por cadena2.

-dsirve para eliminar los caracteres indicados por cadena 1
-selimina caracteres repetidos indicados por cadena1
-cindica contrario, que no coincida con cadena1.

 

tee: Sintaxis tee [-a] [archivo(s)]
Esta orden orden lee la entrada estándar por defecto y escribe su salida a la salida estándar y al archivo especificado. Si se utiliza la opción -a (append), tee  añade su salida al archivo en lugar de sobreescribirlo.

 

find: Sintaxis find camino expresión
La orden find es una de las más potentes de UNIX, pero también una de las que tienen una sintaxis más compleja. Esta orden se usa para examinar toda la estructura de directorios, o señalados en la línea de órdenes. Una vez localizados, podemos hacer que ejecute distintas acciones sobre ellos. El campo expresión sirve para indicar los criterios de selección de los archivos y la acción que queremos aplicarles al encontrarlos.

Ejemplo:
$ find / -name ifconfig                               (busca el archivo ifconfig dentro de la estructura de directorios)
La opción -name indica a find que únicamente se busquen los archivos cuyo nombre se especifica a continuación. Cuando find no puede buscar en un determinado directorio por no poseer derechos de acceso, no los comunica. Para evitar estos mensajes de error podemos redirigir el error a /dev/null.
Ejemplo:
$ find / -name login 2>/dev/null
Opciones:

-userle indicamos a find que seleccione los archivos que pertenezcan al usuario que se indica a continuación de -user.
-groupselecciona los archivos pertenecientes al grupo indicado a continuación.
-mtime narchivos modificados hace n días.
-mtime -narchivos modificados en los últimos n días.
-mtime +narchivos modificados hace más de n días.
-size -marchivos cuyo tamaño es menor de m bloques.
-size +marchivos cuyo tamaño es mayor de m bloques.
-type xarchivos del tipo indicado por x (d directorios, f archivos, l enlaces, etc.).
-inum narchivos cuyo inodo es n
-perm modearchivos cuyos permisos sean los dados por mode.
-exec ordenejecuta la orden usando como argumento los resultados de la búsqueda.

Todas estas opciones pueden ser negadas con el carácter ! seguido de un espacio en blanco.

sed: Sintaxis  sed [-f f_ord] [-n] [archivo(s)]
La herramienta sed es un editor de flujo (stream editor) utilizado para manipular archivos de texto. sed copia los archivos indicados (por defecto, el archivo estándar de entrada) en la salida estándar después de procesarlos. Este procesamiento de los archivos de entrada se lleva a cabo línea por línea, acorde con las órdenes dadas a sed, estas órdenes pueden residir en un archivo, en cuyo caso usaremos la opción -f seguida del nombre del archivo que contiene las órdenes (f_ord). La opción -n se utiliza si queremos ver la línea que está siendo procesada.
Algunas órdenes de sed:
         sustituye  sed ‘s/procesar/manipular/g’ archivo        (aquí indicamos que queremos sustituir procesar por manipular a lo largo de todo   el archivo, lo indica g.)
d    borra sed ‘1,3d’ archivo   (elimina desde la línea 1 hasta la 3 del archivo)

y   traduce caracteres (los cambia por otros) sed ‘y/[aeiou]/[AEIOU]/’ archivo               (cambia las vocales en minúsculas por vocales en mayúsculas).

Procesos (LINUX)

Procesos

Cada proceso en UNIX tiene asociado un número que lo identifica. Este número es asignado por el núcleo, y se denomina identificador de proceso o PID (process identitifier). Además del PID los procesos tienen asignado otro número denominado PPID (parent PID), que identifica el proceso padre.
Todo proceso, desde que se inicia hasta que termina, va pasando por una serie de estados, cada uno con unas características determinadas.
Estados:

  1. El proceso se está ejecutando. En máquinas con un sólo procesador sólo puede haber un proceso en ese estado. UNIX permite que la CPU sea compartida por varios procesos, dividiendo todo el tiempo del procesador en cuantos o rodajas, y asignado esos cuantos alternativamente a cada proceso, acorde con su prioridad.
  2. El proceso está durmiendo. Un proceso entra en este estado cuando no puede proseguir su ejecución por faltarle algún recurso o porque está esperando la terminación de una operación de entrada salida.
  3. El proceso no dispone del procesador, pero está listo para ejecutarse. Continuará su ejecución en cuanto se lo indique el planificador de la CPU.

Como hemos visto es posible ejecutar varios procesos de forma que parece que lo hacen simultáneamente, si estamos en la consola y ejecutamos un programa este no devuelve el prompt del shell hasta que no finaliza su proceso, para permitir que podamos ejecutar otros procesos será necesario enviar este primer proceso a segundo plano, lo cual se puede hacer de dos formas.

  1. Una vez que está en marcha pulsar ctrl+z lo que hará aparecer de nuevo el prompt y dejará el proceso en suspenso. Si queremos ponerlo en marcha debemos utilizar el comando bg <numero> donde numero indica el proceso que queremos pasar a segundo plano. Si en lugar de bg utilizamos fg <numero> lo que haremos será traer el proceso a primer plano y no podremos hacer otra cosa hasta que lo enviemos a segundo plano o lo paremos.
  2. Ejecutar un comando terminando la línea de orden con el símbolo &, el cual le indica al shell que ejecute la orden y que la pase a segundo plano.

Para saber que procesos se están ejecutando en un instante determinado podemos emplear la orden ps.
Si ejecutamos ps sin opciones nos devolverá los procesos asociados a nuestro terminal.

Para obtener más información debemos usar las distintas opciones que nos permite la orden ps aquí se exponen algunas de las más usadas.

-e         nos informa de todos los procesos que hay en el sistema.
-f         proporciona una lista completa de cada proceso.
-l          da listados largos y completos que contienen muchos detalles de los procesos
-a         muestra los procesos de otros usuarios.
-A        muestra todos los procesos
-x         muestra procesos sin ningún terminal asociado
-u         muestra el usuario y el tiempo de inicio.

Ejemplos:


USER              Usuario propietario del proceso.
PID                 Identificador del proceso.
%CPU             % de uso de los recursos de la CPU
%MEM           % de memoria utilizada.
VSZ                indica la cantidad de kilobytes del programa en la memoria virtual.
RSS                 indica la cantidad del kilobytes del programa en memoria.
TTY                terminal de control asociado al proceso.
STAT              información acerca del estado del proceso. R: listo; S: durmiendo; T: detenido; Z:                               Zombie (su proceso padre no los detuvo apropiadamente).
START            Hora de inicio del proceso.
TIME              Tiempo que lleva ejecutándose
COMMAND  Nombre del programa que contiene la imagen del proceso.

Otra orden que nos permite estudiar los procesos en ejecución es top.

También puede resultar muy útil utilizar la orden pstree que nos mostrará los procesos en forma de árbol permitiendo ver las dependencias de procesos padre e hijos.

Para enviar señales a los procesos en ejecución se utiliza la orden kill cuya sintaxis es:

kill -señal PID – Envia la señal al proceso indicado por PID.

Cuando un proceso recibe una señal puede actuar de tres formas diferentes:

  1. Ignorar la señal
  2. Invocar a la rutina de tratamiento por defecto proporcionada por el núcleo.
  3. Invocar una rutina propia que se encargará de tratar dicha señal.

Cada señal tiene asociado un número entero positivo que la identifica. En el caso del UNIX System V
existen 19 diferentes, numeradas del 1 al 19.

1        SIGHUP: Es enviada a todos los procesos asociados a un mismo terminal cuando se pulsa la tecla de interrupción. Por defecto provoca la terminación de los procesos que la reciben.
2        SIGINT: Interrupción. Es enviada a todos los procesos asociados a un mismo terminal cuando se pulsa la tecla de interrupción. Por defecto provoca la terminación de los procesos que la reciben.
3        SIGQUIT: Salir. Es similar a SIGINT, pero en este caso se envía cuando pulsamos la tecla de salida Ctrl-4.
5        SIGTRAP: Es enviada cuando se ejecutan instrucciones paso a paso en un programa. Por defecto provoca la terminación de los procesos que la reciben.
6        SIGIOT: Fallo de hardware
7        SIGEMT: Fallo de hardware
8        SIGFPE: Es enviada cuando el hardware detecta un error en una operación en coma flotante. Por defecto provoca la terminación de los procesos que la reciben.
9        SIGKILL: Provoca la terminación del proceso. Esta señal no puede ser ignorada.
10        SIGBUS: Error de acceso a memoria.
11        SIGSEGV: Violación de segmentos de memoria
12        SIGSYS: No se usa
13        SIGPIPE: Intento de escritura en una tubería en la cual no hay nadie leyendo.
14        SIGALARM: Es enviada al proceso cuando alguno de sus temporizadores llega a cero. Por defecto provoca la terminación de los procesos que la reciben.
15        SIGTERM: Indica que el proceso debe terminar. Puede ser ignorada.
16        SIGUSR1: Reservada para el usuario.
17        SIGUSR2: Reservada para el usuario.
18        SIGCLD: Se envía al padre de un proceso si éste muere.
19        SIGPWR: Fallo de alimentación.

Por defecto la orden kill envía la señal 15 al proceso especificado. Si queremos eliminar el proceso definitivamente lo mejor es enviarle la señal 9.

Cómo desinstalar completamente OneDrive en Windows

OneDrive viene instalado con Windows 10 y está habilitado de forma predeterminada si inicias sesión con una cuenta de Microsoft. Sin embargo, si no lo utilizas y no deseas que se ejecute en segundo plano, hay algunos trucos que puedes usar para deshabilitarlo o deshacerte de él completamente en Windows 10.

Te mostramos cómo deshacerte del icono de OneDrive en el Explorador de archivos con un hack de registro, pero eso no desinstala el programa y seguirá apareciendo en otro lugar. Aunque Microsoft no proporciona una forma fácil de quitarlo, puedes deshabilitarlo en todas partes en Windows 10 o desinstalarlo manualmente.

Al inhabilitar OneDrive, se evitará que se ejecute, además de quitarlo del Explorador de archivos, y puedes volver a habilitarlo más tarde si lo deseas.

Lamentablemente, los usuarios de Windows 10 Home no tienen acceso al editor de políticas de grupo, por lo que no tendrán esta opción. Pero si está ejecutando el sistema operativo en versión Pro u otra versión de Windows 10: ve al Editor de directivas de grupo (escriba «»gpedit.msc»» en el cuadro de búsqueda) y ve a Política de equipos locales> Configuración del equipo> Plantillas administrativas> Componentes de Windows> One Drive. A continuación, habilite el ajuste «»Evitar el uso de One Drive para almacenamiento de archivos»».

Como desinstalar completamente onedrive:

Abre el símbolo del sistema en modo Administrador: haz clic con el botón derecho en el icono de Windows en la barra de tareas y selecciona Símbolo del sistema (Admin).

Escribe taskkill / f / im OneDrive.exe para finalizar cualquier proceso de OneDrive y pulsa Intro.

A continuación, escribe %SystemRoot%System32OneDriveSetup.exe /uninstall si estás utilizando Windows de 32 bits o %SystemRoot%SysWOW64OneDriveSetup.exe /uninstall si estás utilizando Windows de 64 bits y pulsa Intro .

No verás un cuadro de diálogo de confirmación o barra de progreso al hacer esto, pero si intentas buscar OneDrive, la aplicación ya no se encontrará. Sin embargo, tu carpeta y archivos de OneDrive seguirán estando disponibles.

Si deseas quitar las carpetas relacionadas de OneDrive y su contenido, dirígete a TechJourney para que se ejecuten comandos adicionales así como las claves de registro huérfanas para limpiar.

Si cambias de idea y deseas reinstalar OneDrive, ve a la carpeta «»% SystemRoot% SysWOW64 «» en el Explorador de archivos y ejecuta el programa OneDriveSetup.exe.

Estos son los pasos sencillos que deberás seguir si quieres eliminar OneDrive de tu equipo Windows 10: eso sí, no olvides hacer una copia de seguridad de los archivos de las carpetas, porque pueden dañarse en la desinstalación.

Enrutamiento

La tabla de encaminamiento.

En los sistemas bajo Linux, la información sobre cómo han de dirigirse los datagramas se almacena en una estructura del kernel llamada tabla de encaminamiento. Es esta tabla de encaminamiento la que hay que manipular para configurar las decisiones de encaminamiento, basándose en la información fija que suministra el administrador (para el encaminamiento estático), o bien en la información de accesibilidad adquirida mediante BGP, (Border Gateway Protocol, Protocolo para pasarelas de frontera), para el encaminamiento dinámico.

Examinando la tabla de encaminamiento.

La ruta de encaminamiento puede examinarse con el comando netstat –r, tal y como se muestra a continuación.

En los sistemas Linux también se puede utilizar route en lugar de netstat –r, pero puesto que otros sistemas no lo permiten, probablemente es conveniente adquirir el hábito de usar netstat –r.
La opción –n de netstat o de route les impide intentar convertir en nombres las direcciones IP. Los campos de salida de netstat –r son los siguientes.

  • Destination (destino). Identifica las direcciones IP de destino para las que se tiene en cuenta esta ruta.
  • Gateway (pasarela). Proporciona la dirección IP de la interfaz (si la hay) que enviará paquetes para estos destinos. Si no se necesita pasarela de envío, aparece una dirección 0.0.0.0 o *, si se omite el argumento –n.
  • Genmask (máscara general). Es la máscara de red usada para las direcciones de destino.
  • Flags (indicadores). Indica varios detalles acerca de la ruta. Los indicadores más importantes son U (la ruta está en funcionamiento), G( se debería usar la pasarela especificada para esta ruta), y H (la ruta es para un host, no para una red). D (instalación dinámica), M (modificada) y R (rehabilitada) son indicadores que advierten que la ruta fue creada o manipulada por un demonio de encaminamiento o después de encontrarse con un mensaje ICMP de redirección. El indicador ¡ señala el rechazo de una ruta.
  • Metric (métrica). Es un índice de calidad para la ruta. Normalmente sólo útil para encaminamiento dinámico.
  • Ref (referencias). No usado por el Kernel de Linux, pero para otros sistemas representa el número de referencias a la ruta.
  • Use (uso). Informa del número de consultas para esa ruta.
  • MSS. Maximum Segment Size (tamaño máximo de segmento). El máximo tamaño de segmento predeterminado para las conexiones TCP en esa ruta.
  • Window (ventana). El tamaño predeterminado de ventana para las conexiones TCP en esa ruta.
  • Irtt. Initial Tound Trip Time ( tiempo para la ronda inicial). El kernel lo emplea para seleccionar valores para determinados parámetros TCP sin tener que esperar a las respuestas potencialmente lentas de los hosts remotos.
  • La salida de netstat –r mostrada anteriormente indica que el sistema tiene rutas para los siguientes destinos:
  • 127.0.0.0: Esta es la ruta para la red de bucle cerrado. Para los kernel Linux de la serie 2.2.x y superiores, esta ruta no es en realidad necesaria. El kernel ya sabe cómo encaminar hacia la red de bucle cerrado.
  • 192.168.1.2: Esta dirección IP está en realidad conectada con la propia interfaz eth0 del sistema. De nuevo, esta ruta no es necesaria, pero se crea durante la inicialización de RedHat.
  • 192.168.1.0. Ésta es una ruta para la red a la que está conectada la interfaz eth0. No se necesita pasarela.
  • 0.0.0.0: Ésta es la ruta predeterminada; se emplea para cualquier datagrama que no haya sido tratado por las otras rutas. Si se omite la opción –n, aparece la palabra default en lugar de los ceros. Esta ruta especifica que los datagramas se envíen al sistema de pasarela 192.168.1.1 para su reenvío a otras redes.

Adición y eliminación de rutas estáticas.

El método más fácil de añadir y eliminar rutas estáticas es emplear alguna herramienta de configuración que venga con nuestra distribución. Sin embargo, a veces es necesario intentar reparar redes en situaciones donde no están disponibles estas herramientas más complejas. Vamos a ver como se hace “manualmente” utilizando el comando route.

El primer argumento del comando route debería ser una de las palabras add o del para indicar que se está añadiendo o borrando, respectivamente, la ruta descrita por los otros argumentos.
La sintaxis de los otros argumentos depende del tipo de la ruta que se esté añadiendo. El caso más sencillo es añadir la ruta predeterminada.
route add defalult gw x.x.x.x
donde x.x.x.x es la dirección IP del hsot que va a reenviar los paquetes. Para que esta ruta sea utilizable debe haber ya otra ruta (normalmente estática) para x.x.x.x. La pasarela puede ser especificada mediante su nombre de host, pero normalmente se emplea una dirección IP numérica.

Para añadir rutas que no son las predeterminadas, el segundo argumento es nomalmente una de las palabras –net –host, para indicar si la ruta es para una red o para un host. Sin embargo, este argumento se puede omitir si la ruta es para un host. El argumento inmediatamente después de estas palabras es la dirección IP de destino. Esto debería ir seguido de la palabra netmasky, a continuación, la máscara de red real para emplear con esta ruta. La máscara de red puede omitirse si se ajusta a la máscara natural para la dirección de destino.
Por último, debe aparecer una indicación de la ruta que tomar para este destino.

Si el destino está disponible directamente, se usa la palabra clave dev seguida del dispositivo que hay que emplear como (eth0). Si esta es la última parte de la línea del comando, se puede omitir la palabra dev. Si las rutas para este destino han de ser transmitidas por un sistema que haga las funciones de pasarela, hay que usar la palabra gw con la dirección IP (nombre o número) del sistema de pasarela. Al igual que como sucede para la ruta predeterminada, debe existir previamente una ruta para el sistema de pasarela.

También es posible añadir una ruta de rechazo. Al añadir la palabra reject al final del comando route, se instala una ruta de rechazo que fuerza a fallar la consulta de búsqueda de ruta. Se utiliza para prohibir el enrutamiento a ciertas redes antes de que se llegue a aplicar la ruta predeterminada.

Ejemplos de aplicación del comando route.

  1. route add –net 192.168.1.0 netmask 255.255.255.0 dev eth0

Añade una ruta para la rede 192.168.1.0/24 en el dispositivo eth0, que probablemente, tiene una dirección IP en esa red.

  1. route add default gw 192.168.1.1

Convierte a 192.168.1.1 en la pasarela para reenviar paquetes en la ruta predeterminada.

  1. route add –net 127.0.0.0 netmask 255.255.255.0 lo

Esta es la sintaxis correcta para añadir una ruta a la red de bucle cerrado. Incluso aunque esta ruta sea innecesaria en los nuevos kernels, se incluye este ejemplo porque en el manual de route está incorrecto.

  1. route add –net 10.0.0.0 netmask 255.0.0.0 gw 192.168.1.17

Añade una ruta a la red 1.0.0.0/8, usando como pasarela el sistema con la dirección IP 192.168.1.17. La máscara de red es innecesaria en este caso porque se ajusta a la máscara natural de la red de destino.

esquema