educación, informática y demás

GNU/Linux bash

Ejemplos de comandos. Tuberías

Muestra la ruta del directorio personal del usuario alfredoff.

Queremos mostrar el campo 1 y 6, es decir el nombre del usuario y su directorio personal.

Muestra el nombre del usuario, su uid, gid y directorio personal.

Para todos los usuarios del sistema, muestra su nombre de usuario y ruta del directorio personal.

Hay una serie de cuentas de usuario que se crean para servicios y/o aplicaciones del sistema.

Muestra información de la cuenta de usuario www-data.

No va a poder iniciar sesión.

Muestra información de las cuentas de usuario que utilicen como shell /bin/bash

Mola, pero solo queremos los nombres de los usuarios.

Esta bien, pero si tenemos que buscar algo… vamos a ordenarlo con el comando sort.

Está guay, pero queremos ordenarlo en orden inverso.

Mola, pero queremos esta información en un fichero de texto plano llamado users.txt. Si el fichero existe, añade la información al final del mismo.

Vamos a mostrar el nombre de las cuentas de usuario que no son usuarios normales del sistema, es decir aquellas cuentas de usuario que no inician sesión en el sistema con /bin/bash.

Hmmmm… ordena la lista y guardala en el fichero servicios.txt. Si el fichero existe, sobrescríbelo.

Muestra el directorio personal del usuario al. Si no existe, no mostrará nada.

Tenemos que utilizar la opción -w para seleccionar solo la palabra completa.

Muestra la información de configuración de cuentas de usuario de los usuarios cuyo nombre comience por ana.

Con el caracter ^ antes del patrón indicamos que el patrón tiene que aparecer al inicio de la línea.

Con el caracter $ al final del patrón, indicamos que el patrón tiene que aparecer al final de la línea para que lo seleccionemos.

¡Más comandos! – Procesos y tuberías

Vamos a trabajar con comandos de gestión de procesos y tuberías. Tienes toda la información necesaria para afrontar estos comandos en el PDF de comandos de GNU/Linux.

Hemos iniciado sesión con marinapg en la terminal virtual número 2. Volvemos a la terminal virtual 7, que es en la que estoy yo ahora mismo, y ejecutamos este comando.

Muestra los procesos que estén ejecutando bash.

Iniciamos sesión con alfredff en la terminal virtual número 1

Vamos a crear un script con alfredoff, para ello utilizamos el editor de texto en modo texto nano. El script se llamará helloWorld.sh.

Guardamos el fichero y, sin salir de nano, volvemos a la terminal virtual en modo gráfico.

Guardamos información en el fichero procesos.txt añadiendo

Queremos información extra de los procesos en ejecución en el sistema. Utilizamos ps con la opción aux

Pero esto es mucha información en pantalla.. muestra solo los cinco primeros procesos.

Vamos a mostrar los procesos que está ejecutando el usuario alumno.

Muestra solo los cinco primeros procesos en ejecución de alumno.

Ahora vamos a mostrar todos los procesos en ejecución del usuario alumno, pero que no aparezcan los que estén ejecutando aplicaciones en /usr/bin.

Tendremos que mirar la ayuda del grep si no nos acordamos…

Nos gustaría que no se mostraran ni los procesos de /usr/bin ni los de /usr/lib y lo que sea…

¿Habría alguna forma de no tener que utilizar dos greps seguidos para eliminar ocurrencias?

Mostramos información de alumno

Ahora queremos de marinapg

Salimos de nano… y usamos la magia de bash.

Si ejecutamos esto, no va a funcionar. Realmente estamos ejecutando el comando echo ps aux y su salida se la pasamos con una tubería al siguiente comando, el grep.

Para mostrar la cadena de texto tenemos que entrecomillar todo el comando para indicar a bash que es una cadena de texto y que no tiene que tener en cuenta, por ejemplo, las tuberías que hay en ella.

Ahora nos damos cuenta de que bash ha expandido, como es normal, la variable usuario que hemos creado previamente. Como queremos que se muestre $usuario y no el contenido de la variable, tenemos que indicar que el carácter $ no tiene que interpretarlo, que lo deje como está. Para eso utilizamos el carácter \ delante del $.

Ahora nos resta redirigir la salida del comando al fichero que contiene el script, pero con doble redirección para que no lo sobrescriba.

Ahora, podemos ejecutar el script para almacenar la información del usuario cuyo nombre le pasemos por parámetro, por ejemplo marinapg.

Matando procesos..

Mata el proceso nano que está ejecutando alfredoff en la terminal virtual número 1.

No es un proceso propiedad del usuario alumno, por tanto para matarlo tendremos que hacerlo como administrador.

Vamos a comprobar si el proceso sigue en ejecución.

No aparece…

Si cambiamos a la terminal virtual número 1, podemos ver el siguiente mensaje. Se ha escrito un crimen…

Si queremos matar o acabar con procesos por el nombre de proceso podemos utilizar killall. Cuidado, porque killall acabará con todos los procesos cuyo nombre coincida.

Parece que no ha funcionado…. Esto es así porque killall no ha utilizado la señal SIGTERM o -9 para indicar a los procesos que terminen su ejecución. Vamos a mandar la señal SIGTERM o 9 utilizando la opción -s.

De esta forma, enviamos la señal SIGTERM que hace que los procesos terminen su ejecución en cuanto la reciban.

Matando un proceso de una ventana. Supongamos que hemos ejecutado algún programa en GUI y la ventana se ha quedado bloqueada. Podemos utilizar un comando especial para terminar con el proceso que está ejecutando dicha ventana.

Lanzamos firefox en segundo plano para probar el comando xkill.

El cursor del ratón cambia, apareciendo un par de aspas cruzadas. Está esperando a que hagamos clic sobre la ventana cuyo proceso queremos matar. Si hacemos clic sobre dicha ventana, xkill terminará con el proceso responsable de la ventana.

El comando tr

Ahora ya podemos utilizar el cut con » » como delimitador.

Dejar una respuesta