Responde a los siguientes apartados:

  1. (0’5 puntos) Ejecuta en Ubuntu la orden

    ps waxu | cut -c 1-80 >> /tmp/procesos.txt
    

    Describe qué hace esa orden.

    • ps muestra información sobre los procesos, es decir, los programas que se están ejecutando en el ordenador.
    • waxu son las opciones de ps; por omisión, ps muestra pocos procesos; con waxu aparecen muchos más.
    • | es un tubo, lo que significa que la salida del comando ps se convierte en la entrada de cut.
    • cut es un comando que se queda con parte de la información de cada renglón que le entra; en este caso, la opción -c indica que se queda con ciertos caracteres, en concreto, los 80 primeros, por el recorrido indicado como 1-80.
    • >> indica redirección no destructiva, es decir, la salida de cut se almacenará en el fichero indicado y, si ya existía dicho fichero, su contenido no se borra, sino que la nueva salida se añade a lo que había.
    • /tmp/procesos.txt es una ruta absoluta que apunta al fichero procesos de tipo texto txt albergado en la carpeta tmp del directorio raíz /.
  2. (1 punto) Haz una estadística descriptiva univariante de las columnas contenidas en /tmp/procesos.txt
    • El fichero contiene campos separados por espacios, por lo que en principio sería conveniente cargarlo en R mediante read.table.
    • Contiene un renglón de cabecera, por lo que habría que emplear la opción header=TRUE de read.table.
    • Se produce el error: more columns than column names.
    • La última columna, COMMAND, contiene comandos que pueden incluir espacios. Posibles formas de soslayarlo:
      • Sustituyendo esos espacios por otro símbolo:

        cat /tmp/procesos.txt | cut -c 1-65 > /tmp/procesos-izq.txt
        cat /tmp/procesos.txt | cut -c 66- | tr " " "_" | sed 's/_/ /'  > /tmp/procesos-der.txt
        paste -d"\0" /tmp/procesos-izq.txt /tmp/procesos-der.txt > /tmp/procesos.ssv
        
      • Leyendo el fichero con header=FALSE:

        p <- read.table("/tmp/procesos.txt", header=FALSE, fill=TRUE)
        p$V11 <- paste(p$V11, p$V12, p$V13)
        p$V12 <- p$V13 <- NULL
        names (p) <- trimws (as.character (p[1,]))
        p <- p[-1,]
        
    • Descriptiva univariante:
      • Hay 71 registros (individuos, procesos) y 11 campos (variables)
      • USER variable cualitativa nominal

        tail (sort (table (p$USER)))
        
      • PID son números enteros que no se repiten (identificadores de procesos)

        all (table(p$PID) == 1) # es verdadero
        summary (as.numeric (p$PID))
        
      • %CPU son números reales positivos pequeños en general

        summary (as.numeric (p$"%CPU")) # de 0,0 a 2,4
        
      • %MEM similar aunque algo mayores

        summary (as.numeric (p$"%MEM")) # de 0,0 a 9,9
        
      • VSZ son números enteros grandes

        summary (as.numeric (p$VSZ))
        
      • RSS ídem

        summary (as.numeric (p$RSS))
        
      • TT es cualitativa nominal y su moda es el extraño valor ??

        tail (sort (table (p$TT)))
        
      • STAT es cualitativa nominal con 19 categorías

        sort (table (p$STAT))
        
      • STARTED es la hora de inicio de cada proceso

        summary (as.POSIXct (p$STARTED, format="%H:%M%p"))
        
      • TIME es el tiempo que lleva ejecutándose un proceso

        tiempos <- as.POSIXlt(p$TIME, format="%M:%OS")
        summary (tiempos$min * 60 + tiempos$sec)
        
      • COMMAND es el programa ejecutado (entre ellos está ps -waxu)
  3. (0’5 puntos) Haz una gráfica de barras con la salida de shuf -r -i 1-6 -n 10000

    shuf -r -i 1-6 -n 10000 | sort -n | uniq -c # barplot en R con esos valores
    
  4. (0’5 puntos) Describe estadísticamente la salida de

    shuf -r -i 1-999 -n 100 | xargs -I'{}' date -Im -d '{}'days
    
    • Genera cien fechas al azar desde mañana a dentro de 999 días (casi tres años):

      system ("shuf -r -i 1-999 -n 100 | xargs -I'{}' date -Im -d '{}'days > /tmp/salida")
      summary (as.POSIXct (readLines ("/tmp/salida")))
      
  5. (0’5 puntos) Crea el fichero /tmp/passwd que sea igual que /etc/passwd pero ordenado numéricamente por el tercer campo.

    sort -n -t':' -k3 -o /tmp/passwd /etc/passwd
    

    En R, se podría hacer algo como

    a <- read.table("/etc/passwd", sep=":")
    b <- a[order(as.numeric(a[,3])),]
    write.table(b, "/tmp/passwd", sep=":")
    

Author: recursos didActicos de carleos

Created: 2023-07-11 mar 19:43

Validate