educación, informática y demás

24.13 - Repaso general

Comandos y scripts básicos

En esta serie de ejercicios vamos a plantear una serie de scripts simples para recordar o practicar con comandos de administración de sistemas básicos y ficheros de configuración en sistemas GNU/Linux.

En estos scripts nos vamos a olvidar un poco de algoritmia y vamos a practicar con comandos. De hecho, se podrían ejecutar los comandos desde una terminal pero para facilitar la entrega posterior y la persistencia de todos los comandos ejecutados y seleccionados los vamos a meter en un script para cada ejercicio.

De esta forma, cada ejercicio tendrá como respuesta un script con los comandos que se deberían ejecutar ordenados en secuencia para obtener el resultado que se solicita.

Por último, antes de comenzar, recuerda que tienes información sobre comandos de GNU/Linux en la sección de Comandos GNU/Linux de este sitio web.

Ejercicio 1

Vamos a crear un script llamado creaDirectorios.sh. Este script creará la siguiente jerarquía de directorios en el sistema:

  • /educatica
    • 2023
    • 2024
      • modulos
        • ssoo
        • redes
        • web
        • bbdd
      • recursos
        • ovas
        • isos
        • documentacion
        • practicas
      • publico
      • privado
      • estudiantes

Puedes utilizar si quieres variables. No se pide que hagas ningún tipo de control de errores ni utilices funciones o valores por parámetro. La finalidad de este script es practicar con comandos de GNU/Linux y entender las secuencias de comandos.

Creando directorios

Para crear directorios utilizaremos el comando mkdir. No obstante, si tenemos que crear directorios en una jerarquía de directorios que no existe, podemos utilizar la opción -p para crear toda la jerarquía o ruta de directorios de una sola vez.

Permisos de administración

Para poder crear estos directorios, tendremos que trabajar como usuario root. Pero este es un problema que se debe afrontar a la hora de ejecutar el script o el comando en sí.

Es importante que no utilicemos el comando sudo dentro de un script. Si el script debe ser ejecutado por root, podemos indicarlo o controlarlo con control de errores inicialmente, pero no insertamos comando sudo dentro del script.

Solución

Creamos parte de directorios

Ostras.. me piden que cree un script. Pero es importante que tengamos claro cómo funcionan los comandos, así que ahora que sabemos cómo usar mkdir con la opción -p vamos a crear un script.

¿Qué pasa con los comandos que hemos ejecutado? Podemos consultarla a través del comando history

Ejercicio 2

Tenemos que crear una serie de usuarios y grupos en el sistema. Para ello vamos a utilizar comandos de gestión de GNU/Linux. Podemos automatizarlo si queremos en un script o podemos ejecutar los comandos uno a uno.

creaUsuarios.sh Este script no recibe nada por parámetro. Lo único que tiene que hacer es crear una serie de grupos, después crear una serie de usuarios y añadir usuarios a grupos.

UsuarioGrupos
solgmdireccion, fol, ssoo, educatica
evahaweb, design, educatica
monicamzweb, design, educatica
miguelmpssoo, desarrollo, educatica
javigpssoo, desarrollo, educatica
javicgssoo, desarrollo, educatica
estrellaflssoo, estadistica, sales, educatica
evaccweb, marketing, educatica
javierpmdireccion, ssoo, educatica
Listado de usuarios y grupos del sistema

Añadiendo usuarios

Podemos utilizar dos comandos para crear usuarios en nuestro sistema: adduser y useradd. El comando adduser añadirá el usuario, pero nos solicitará inforamción de forma interactiva cuando ejecutemos el comando (salvo que utilicemos ciertos parámetros). El comando useradd nos permite crear el usuario sin tener que proporcionar información de forma interactiva. Por tanto, useradd es el comando más adecuado para poder añadir cuentas de usuario desde un script.

A la hora de crear una cuenta de usuario con useradd deberíamos indicar, si así lo queremos, que se cree el directorio personal del usuario con la opción -m y que se le establezca como shell o interprete de comandos el intereprete /bin/bash con la opción -s

Cambiar la contraseña de un usuario

Una vez creado un usuario con useradd este no tendrá asignada contraseña. Para establecer la contraseña de un usuario desde un script de manera que no se pida la nueva contraseña del usuario podemos utilizar el comando chpasswd y pasarle la información de nombre de usuario y contraseña a través de una tubería.

De esta forma, con el comando echo podemos mostrar en pantalla el nombre del usuario separado de la contraseña a establecer separados por dos puntos.

echo «usuario:passwd»

No obstante, nosotros no queremos mostrar por pantalla esta información, queremos que le llegue al siguiente comando, al comando chpasswd, a través de una tubería como información de entrada. Para ello, utilizamos una tubería

echo «usuario:passwd» | chpasswd

De esta forma, estableceremos como contraseña del usuario usuario la contraseña passwd.

Crear grupo y añadir usuarios

Para añadir grupos podemos utilizar el comando addgroup. Para añadir un usuario a un grupo podemos utilizar el comando adduser seguido por el nombre del usuario que queramos añadir al grupo y el nombre del grupo.

Permisos de administración

Por supuesto para poder realizar todas estas operaciones de administración, al igual que en el caso anterior, tendremos que trabajar como usuario root. Pero este es un problema que se debe afrontar a la hora de ejecutar el script o el comando en sí.

Es importante que no utilicemos el comando sudo dentro de un script. Si el script debe ser ejecutado por root, podemos indicarlo o controlarlo con control de errores inicialmente, pero no insertamos comando sudo dentro del script.

Solución

Creamos los grupos

Ahora, deberíamos crear las cuentas de usuario y añadir cada cuenta a los grupos a los que pertenece como la idea es hacerlo finalmente en un script, vamos a usar el comando useradd. Vamos a echar un vistazo al man de useradd.

Vamos a mirar si hay opciones que nos interesen para lo que tenemos que hacer

Crea el directorio personal del usuario si no existe
Establece la ruta del shell que utilizará el usuario
Nos permite establecer una lista de grupos, separados por comas, de los que será miembro el usuario

Vamos a comprobar si el comando funciona correctamente

Ahora lo insertamos en nuestro script y creamos los comandos necesarios para añadir al resto de usuarios.

Lo lanzamos para que cree los usuarios

Ahora vamos a ver si se han creado los usuarios, para ello vamos a mirar el fichero /etc/passwd.

Con las últimas 10 líneas del fichero /etc/group no es suficiente para poder comprobar que se han creado los grupos necesarios y añadido los miembros cómo se solicitaba.

¿Cómo podría mostrar las 10 primeras líneas de las últimas 19 del fichero /etc/group?

Vamos a comprobar si se han creado los directorios personales. Los directorios personales de los usuarios en un sistema GNU/Linux se guardan en /home.

Ejercicio 3

Ya hemos creado usuarios, grupos y directorios en nuestro sistema. A continuación vamos a crear más directorios y configurarlos.

La idea es que practiquemos con comandos de GNU/Linux para realizar las actividades que nos solicitan en este ejercicio, pero podemos escribir todos los comandos en orden en un script que podemos llamar configuraDirectorios.sh

Para cada usuario creado en el ejercicio anterior crearemos un directorio con su nombre dentro del directorio /educatica/2024/staff, otro en /educatica/2024/privado y otro en /educatica/2024/publico.

Configuraremos el directorio del usuario en /educatica/2024/staff de forma que el usuario pueda acceder para realizar cualquier operación, los miembros del grupo educatica puedan acceder para realizar operaciones de lectura y el resto de usuarios no pueda realizar ninguna operación.

Configuraremos el directorio del usuario en /educatica/2024/privado de forma que solo el usuario pueda acceder para realizar cualquier operación, el resto de usuarios del sistema no podrá acceder ni realizar ninguna operación.

Configuraremos el directorio del usuario en /educatica/2024/publico de forma que el usuario y los miembros del grupo educatica puedan acceder para realizar cualquier operación y el resto de usuarios del sistema pueda acceder para realizar operaciones de lectura.

Por último, mostramos en pantalla información de permisos, propietario y grupo de cada uno de los tres directorios creados y configurados para el usuario, y volvemos a empezar con el siguiente usuario.

Permisos, propietario y grupo

Recuerda los comandos para establecer permisos, propietario y grupo, así como para mostrar información de extendida de permisos propietario y grupo de ficheros y directorios.

  • chmod
  • chown
  • chgrp
  • ls, con la opción -l y con la opción -ld

Solución

Aquí tenemos el código para un solo usuario…

Vamos a probar primero si esto funciona:

Esto, si queremos hacerlo manualmente, secuencialmente, sin utilizar ninguna de las ventajas de un lenguaje de programación nos llevaría a tener que copiar y pegar el código y cambiar el nombre del usuario en cada porción de código pegada.

Tendríamos que copiar y pegar 9 veces, cambiar el nombre del usuario y si metemos la pata puede que el error nos pase desapercibido.

Solución más simple, pero no la mejor: variables.

Ahora, si queremos crear los directorios para los 9 usuarios tendremos que ejecutar ese bloque 9 veces.

Vamos a dejar esta tarea para más adelante, para el siguiente ejercicio de esta serie…

Creamos un script que recibe un único parámetro, el nombre del usuario.

Creamos un segundo script que invoca al primero con cada uno de los nombres de los usuarios.

Esta solución funciona, pero habría que pulirla un poco (podemos utilizar lista variable de parámetros, funciones, etc) algo que haremos más adelante.

Vamos a ver si funciona…

¡Hemos cometido un error!

Error humano. Soluciones, tener más cuidado y/o utilizar las herramientas que proprorcionan los editores de texto: buscar y reemplazar.

Ahora si

Vamos a probar de nuevo, para dejar todo como debería

Ejercicio 4

Vamos a mostrar la información de los usuarios y grupos que hemos creado. Para ello consultaremos información en el fichero de cuentas de usuario y en el fichero de cuentas de grupo del sistema. Estos ficheros son /etc/passwd y /etc/group respectivamente.

Vamos a mostrar en pantalla un listado con todos los usuarios cuyo interprete de comandos sea /bin/bash. Solo mostraremos el nombre del usuario y la ruta de su directorio personal. La lista deberá estar ordenada por el nombre del usuario.

Después mostraremos los grupos que hemos creado en el ejercicio 2. Para cada grupo mostraremos el nombre del grupo y un listado de los miembros que contiene.

La idea sería que ejecutáramos estos comandos uno detrás de otro, pero vamos a guardarlos en un script llamado muestraInformacion.sh.

Tuberías y filtros

Para realizar el ejercicio deberíamos utilizar tuberías y una serie de filtros, comandos especiales, como grep, cut, tr y sort.

Solución

Vamos a mostrar en pantalla un listado con todos los usuarios cuyo interprete de comandos sea /bin/bash. Solo mostraremos el nombre del usuario y la ruta de su directorio personal. La lista deberá estar ordenada por el nombre del usuario.

Mostramos las líneas del fichero /etc/passwd en las que aparece /bin/bash al final.

Solo queremos mostrar el nombre del usuario y la ruta del directorio personal: comando cut (filtro).

Ahora vamos a cambiar el caracter «:» por un espacio en blanco » «: Comando tr.

Usando tr convertimos, traducimos, sustituimos.. el carácter «:» por » «

Para terminar, tan solo tenemos que ordenar la lista: comando sort.

Mostrar los miembros de los grupos que hemos creado

Después mostraremos los grupos que hemos creado en el ejercicio 2. Para cada grupo mostraremos el nombre del grupo y un listado de los miembros que contiene.

La idea sería que ejecutáramos estos comandos uno detrás de otro, pero vamos a guardarlos en un script llamado muestraInformacion.sh.

Vamos a mostrar tan solo los datos de un grupo, el grupo educatica. Cuando seamos capaces de hacerlo, creamos un script que muestre toda la información que nos han solicitado.

La segunda opción está mucho mejor. Ahora tenemos que conseguir que solo se muestre el nombre del grupo y la lista de miembros.

Ahora tendría que repetir el proceso para cada uno de los grupos que hemos creado :_(

Vamos a escribirlo en un script que tendrá que:

  1. Mostrar los datos de los usuarios que utilicen /bin/bash, cómo hemos hecho al principio de esta solución.
  2. Mostrar los datos de cada uno de los grupos que hemos creado.

Podemos añadir algunas líneas que formateen la salida, al menos que muestren unas etiquetas

Ahora lo ejecutamos y vemos el resultado

Dejar una respuesta