miércoles, 15 de junio de 2016

Scripts VII.

Ejercicios propuestos en la prueba 10-6-2016

  1. Realiza un script que utilice dos números enteros como argumentos y deben devolverse todos los números enteros del intervalo formado por los dos números. El programa debe comprobar que se pasan sólo 2 números y que el segundo es mayor que el primero, en caso contrario mostrar mensaje de error.
  2. if test $# -ne 2 –a $1 –lt $2

    then

    echo “ Perdona pero introduce solo dos números y el segundo mayor que el primero”

    else

    for (( i=$1; i<=$2;i++))

    do

    echo “$i”

    done

    fi

  3. Guión que devuelva los enlaces duros que hay en el directorio actual.
    1. find . –type f –links +1 ¡cuidado! los enlaces duros sobre enlaces blandos no salen
    2. ls -li | tail –n +2|sort -k1 -n -r > fichero

      cont=`ls –li|tail –n +2|wc –l`

      while [ $cont -gt 0 ]

      do

      var1=`head -"$cont" fichero | tail -1 |tr -s " " | cut -d" " -f1`

      conti=`expr $cont - 1`

      var2=`head -"$conti" fichero | tail -1 | tr -s " " | cut -d" " -f1`

      if [ $var1 -eq $var2 ]

      then

      head -"$cont" fichero | tail -1 | tr -s " " | cut -d" " -f10 > enlaces

      fi

      cont=`expr $cont - 1`

      done

      cat enlaces

    3. Arrai=(`ls –li|sort –k1 –n –r`|tr –s “ “ “ “|cut –d “ “ –f1`)

      For((i=0;i<${#arrai[*]}; i++))

      Do

      Cont=0

      For((j=0;j<${#arrai[*]}; j++))

      Do

      if [ ${arrai[$i]} –eq ${arrai[$j]}

      then

      Cont=$(($cont+1))

      fi

      Done

      if [ $cont -gt 1 ]

      then

      echo “enlaces duros encontrados”

      find . –inum $i

      fi

      done

  4. Realiza un script que compruebe cada 15 minutos, la carga media del procesador en esos 15 últimos minutos y que envíe un mensaje al terminal /pts/5 en el caso de que la carga supere más del 20%. (el 20% es simbólico, nos referimos a una carga cualquiera).

    creamos el script: carga.sh

    v=`cat /proc/loadavg|cut -d" " –f3`

    entero=$(echo "$v/1"|bc) otra forma de hacerlo entero=`echo "$v*100"|bc|cut -d"." -f1`

    if [ $entero -gt 20 ] siguiendo la anterior forma if [ $entero -gt 2000 ]

    then

    echo aviso $entero >>/dev/pts/5

    fi

    En el crontab -e

    */15 * * * * ./root/carga.sh

  5. EL archivo /etc/login.defs contiene muchos comentarios y líneas en blanco, haz un guion para ver las líneas que no son comentarios o líneas en blanco (los ajustes de configuración real).

    grep -Ev /etc/login.defs '^$|^#'

  6. Realiza un script que me devuelva el nombre de los procesos que realmente están ejecutándose.

    c=(`ps -eo stat -o pid|grep "R"|tr -s " " |cut -d" " -f2`)

    for v in ${c[*]}

    do

    ps aux|grep $v|tr -s " "|cut -d" " -f11

    done

  7. Realiza un shell-script que pida por teclado el nombre de un usuario y nos diga si está o no conectado al sistema. Si está conectado que me indique el número de procesos que tiene en el sistema.

    echo –n nombre de usuario

    read usuario

    var=`who|grep –w $usuario`

    if [ $? –eq 0 ]

    then

    n=`Ps aux |grep "^usuario" |wc –l` también ps –u $usuario|wc -l

    echo el usuario $usuario está conectado y tiene $n procesos

    else

    echo el usuario $usuario no está conectado

    fi

viernes, 3 de junio de 2016

miércoles, 1 de junio de 2016

Solución prácticas II.

  1. Varias posibilidades:
    • find / -perm -o+t 2>/dev/null
    • find / -perm -o=t 2>/dev/null
    • find / /perm /o+t 2>/dev/null
  2. ls -ld /var/tmp
  3. su user1 mkdir carpeta1 touch fichero1
  4. su user2 mkdir carpeta2 touch fichero2
  5. no, porque el directorio /var/tmp tiene el sticky bit, que hace que sólo el propietario pueda borrar los ficheros.
  6. su user1 cd mkdir ayuda
  7. man more>moreman man less>lessman (no estamos dentro de ayudas)
  8. tar -cvjf fichero.tbz moreman lessman.
  9. tar -tjf fichero.tbz
  10. stat fichero.tbz
  11. tar -xjvf /home/user1/ayudas/fichero.tbz
  12. su - y como root cd /home/user1/ chmod o+t ayuda o chmod +1000 ayuda
  13. Varias posibilidades:
    • cat /etc/passwd|cut -d":" -f1,3| grep -E -v "1[0-9][0-9][0-9]|root"|cut -d"," -f1
    • cat /etc/passwd| cut -d":" -f1,3|grep -E -v "[0-9]{4}|root"|cut -d"," -f1
    • aún así, con las anteriores soluciones, puede que en algunas distribuciones se muestren cuentas como el nobody con UID 65534
    • cat /etc/passwd| grep -E -v –w “/bin/bash”
  14. ejecutar: lastlog (te muestran todos los usuarios del sistema incluso los que nunca han accedido) lastb (los usuarios que han cometido un error al logarse) last (usuarios que se han conectado).
  15. lastb | grep "Fri"|tr -s " " | cut -d" " -f1|sort -k1 -u
  16. lastb|grep -c 'user1'
  17. cat /etc/group | grep users|cut -d: -f4:|tr "," " "|wc -w
  18. cat /etc/group|grep -E -v '[0-9]{4}' | sort -t: -k3 -n
  19. find . -type l