Foros del Web » Administración de Sistemas » Unix / Linux »

Script Linux

Estas en el tema de Script Linux en el foro de Unix / Linux en Foros del Web. Hola buenas, debo realizar un script para linux para que recorra todos los usuarios del sistema con el UID mayor de 500. Luego chequear su ...
  #1 (permalink)  
Antiguo 18/05/2015, 08:25
 
Fecha de Ingreso: mayo-2015
Ubicación: Murcia
Mensajes: 3
Antigüedad: 8 años, 11 meses
Puntos: 0
Script Linux

Hola buenas, debo realizar un script para linux para que recorra todos los usuarios del sistema con el UID mayor de 500. Luego chequear su directorio y si supera 10000 Mb guardarlo en un archivo llamado CopiaDir. Este archivo será el resultado que producirá el programa.
No tengo muy claro como empezar, había pensado en usar un bucle for para recorrer todos los usuarios y luego usar un if para realizar las operaciones en los que tengan el UID mayor de 500, pero no se que variables podría usar para chequear todos los usuarios en el bucle.
Para realizar la copia creo que debo utilizar la variable $HOME en una sentencia if pero no se me ocurre como puedo compararla con el tamaño del directorio.
A ver si me podéis ayudar un poco porque estoy perdidisimo en este tema.
  #2 (permalink)  
Antiguo 18/05/2015, 11:06
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Script Linux

1. Los ID de los usuarios son un campo en /etc/passwd
2. Para saber el tamaño de un directorio, usas "du"

Con eso deberías poder comenzar. Como regla general, te recomiendo hacer que tu código funcione para un usuario particular, y recién después hacerlo funcionar en un bucle.

Ah, y de paso pido mover este mensaje al foro de UNIX/Linux.


Saludos.
  #3 (permalink)  
Antiguo 18/05/2015, 11:13
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Script Linux

Listo, movido al foro UNIX/Linux
__________________
Grupo Telegram Docker en Español
  #4 (permalink)  
Antiguo 18/05/2015, 12:35
 
Fecha de Ingreso: mayo-2015
Ubicación: Murcia
Mensajes: 3
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Script Linux

He ido probando varias cosas y de momento lo que he conseguido es esto
Código:
#!/bin/bash
# script.sh

var1 = 0

awk -F: '{if ($3 > 500) {print $1}}' /etc/passwd
awk -F: '{if ($3 > 500) {
var1 = du /home/$1
print $var1
}}' /etc/passwd
El primer awk muestra por pantalla los usuarios que tienen el UID mas grande que 500, esto funciona correctamente. En el segundo awk quiero hacer que por cada usuario que tenga el UID mas grande que 500 se almacene el resultado del comando du en la variable var1, para luego hacer un if anidado, pero me da error. Ya que estamos lo pregunto también, es posible hacer un if anidado en esta situación? lo he probado a parte y no he conseguido lograrlo.
  #5 (permalink)  
Antiguo 18/05/2015, 12:47
 
Fecha de Ingreso: mayo-2014
Ubicación: US
Mensajes: 17
Antigüedad: 9 años, 11 meses
Puntos: 1
Respuesta: Script Linux

para se guarde el resultado en var1 tienes que ejecutar el comendo en un sub-shell por ejemplo asi

var1=`/home/$1`

nota los 2 `
  #6 (permalink)  
Antiguo 18/05/2015, 16:00
 
Fecha de Ingreso: mayo-2015
Ubicación: Murcia
Mensajes: 3
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Script Linux

He logrado que no me de ningún error, pero ahora el segundo awk no hace absoultamente nada, cuando debería crear el directorio /home/copias/Rusuario y luego copiar el contenido del directorio principal del usuario en él cuando el tamaño de el directorio principal supere los 10000.
Código:
#!/bin/bash
# script.sh

awk -F: '{if ($3 > 500) {print $3}}' /etc/passwd
awk -F: '{if ($3 > 500) {
if (size = "$(du -s /home/$1)" > 10000) {
mkdir /home/copias/R$1
cp /home/$1 /home/copias/R$1
}
}}' /etc/passwd
  #7 (permalink)  
Antiguo 19/05/2015, 10:13
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Script Linux

No deberías pedirle a awk que ejecute todos estos comandos, AWK es un programa en sí mismo y no interpreta las cosas igual que la shell.

Lo que yo haría es filtrar /etc/passwd con awk, y leer la salida de awk en un bucle while con read, y hacer el respaldo dentro del bucle while.


Saludos.

Etiquetas: linux, programa, programación-general
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:10.