Bienvenidos/as al proceloso mar de las Oposiciones. Aquí hay fuentes de información, enlaces a páginas, libros y reflexiones sobre el duro trabajo del opositor/a (a Informática). Además, un podcast de Informática y 7.000 vídeos en Youtube.
domingo, 26 de febrero de 2012
sábado, 18 de febrero de 2012
Shell Scritp Ejercicio bastante completito
#!/bin/bash
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#Realizar un script llamado copiaSeg para gestionar el sistema centralizado de copias de seguridad de un servidor.
#El script sin parámetros hará una copia de segundad de todos los usuarios del sistema, y con el parámetro -u usuario hará una copia de seguridad de la información del usuario pasado como parámetro. Este script sólo podrá ser ejecutado por root. La sintaxis del script será:
#copiaSeg [-u usuario ]
#Los usuarios podrán utilizar el sistema de copias automatizado creando en su directorio de trabajo un fichero oculto, llamado copiaSeg.dat con el siguiente contenido:
#Copias que se desean mantener
#numeroCopias=2
#Contenido de la copia, único obligatorio
#contenidoCopia=dir1:dir2:fichero1:fichero2,,.
#En caso de que no exista alguno de los campos configurables anteriores, se usarán los valores por defecto, definidos en el propio script. El único campo obligatorio es el campo contenidoCopia,que contendrá todos los ficheros y directorios que se desean incluir en la copia.
#Si dicho campo no estuviese definido, no se copiaría nada para ese usuario.
#El sistema creará un directorio /copiaSeg y dentro un directorio por usuario, si no existiese, que sólo podrá ser accesible por su dueño. En el interior de este directorio se almacenarán tantas copias de seguridad copiaSeg_hhmmDDMMYYYY.tgz como defina numeroCopias. Paraque un fichero o directorio sea añadido a la copia debe ser de su propiedad.
#El script borrará las copias más antiguas manteniendo en el sistema sólo las que se indiquen en el fichero de configuración copiaSeg.dat y, si no está definido numeroCopias, lo que marque el valor por defecto.
function error {
echo "¡¡Horror!! Uso "$0" [-u usuario]"
exit
}
#capturar parámetros en variables
parametro=$1
nusuario=$2
#variables por defecto
numcopiaspordefecto=3
directoriocopiasgeneral="/copiaSeg"
carpetausuarios="/home"
#si no introducimos parámetros, se hace la copia de seguridad completa
if [ "$parametro" = "" ]
then
echo "Entrando en copia de seguridad completa"
#comprobar si existe la carpeta
if [ -d $directoriocopiasgeneral ]
then
echo "El directorio general de copias existe. Se sigue el proceso."
else
echo "El directorio no existe. Se crea."
sudo mkdir $directoriocopiasgeneral
if [ $? -ne 0 ]
then
echo "Error al crear el directorio. Seguramente, no tienes permiso para copiar en él"
echo "Saliendo del programa"
exit
fi
fi
#calcula el número de copias realizadas
#lista solo los archivos que hay en el directorio raiz y cuenta el número de líneas
numcopiashechas=`ls -p $directoriocopiasgeneral | grep -v / | wc -l`
echo $numcopiashechas
#si se ha llegado al límite de número de copias
if [ "$numcopiashechas" -eq "$numcopiaspordefecto" ]
then
#busca la más antigua
ficheromasantiguo=`ls -ptr $directoriocopiasgeneral | grep -v / | head -1`
#y la borra
sudo rm $directoriocopiasgeneral/$ficheromasantiguo
else
#no se hace nada
echo -n
fi
#genera nombre del archivo
hora=`date +%H`
minutos=`date +%M`
dia=`date +%d`
mes=`date +%m`
ano=`date +%Y`
nombrecopia=`echo copiaSeg_$hora$minutos$dia$mes$ano.tgz`
echo $nombrecopia
#cambia nombre carpeta para pruebas
carpetausuarios="/home/jluserovilchez/Escritorio/scripts"
sudo tar -czf "$directoriocopiasgeneral/$nombrecopia" "$carpetausuarios"
#si el parámetro es -u
elif [ "$parametro" = "-u" ]
then
#y el usuario no es vacío
if [ "$nusuario" != "" ]
then
echo "Entrando en copia de seguridad de usuario"
echo $nusuario
#crear carpeta de usuario si no existe
if [ -d $directoriocopiasgeneral/$nusuario ]
then
#si existe, no se crea
echo -n
else
#si no existe, se crea
sudo mkdir $directoriocopiasgeneral/$nusuario
fi
#buscar archivo copiaSeg.dat en carpeta de usuario
#si existe carpeta de usuario
if [ -d /home/$nusuario ]
then
#buscar el archivo oculto de usuario
if [ -e "/home/$nusuario/.copiaSeg.dat" ]
then
echo "El fichero copiaSeg.dat existe"
existecontenidoCopia=`cat /home/$nusuario/.copiaSeg.dat | grep "contenidoCopia"`
#echo $existecontenidoCopia
if [ "$existecontenidoCopia" = "" ]
then
echo "No existe contenidoCopia"
echo "Defina la variable contenidoCopia en el archivo copiaSeg.dat para seleccionar archivos. Copiando todos los archivos del usuario."
numcopias=$numcopiaspordefecto
#comienzo de copia de archivos
numcopiashechas=`ls -p $directoriocopiasgeneral/$nusuario | grep -v / | wc -l`
echo $numcopiashechas
#si se ha llegado al límite de número de copias
if [ "$numcopiashechas" -eq "$numcopiaspordefecto" ]
then
#busca la más antigua
ficheromasantiguo=`ls -ptr $directoriocopiasgeneral/$nusuario | grep -v / | head -1`
#y la borra
sudo rm $directoriocopiasgeneral/$nusuario/$ficheromasantiguo
else
#no se hace nada
echo -n
fi
#genera nombre del archivo
hora=`date +%H`
minutos=`date +%M`
dia=`date +%d`
mes=`date +%m`
ano=`date +%Y`
nombrecopia=`echo copiaSeg_$hora$minutos$dia$mes$ano.tgz`
echo $nombrecopia
#cambia nombre carpeta para pruebas
carpetausuario="/home/jluserovilchez/Escritorio/scripts"
#descomentar siguiente línea para funcionamiento real
#carpetausuario="/home/$nusuario"
sudo tar -czf "$directoriocopiasgeneral/$nusuario/$nombrecopia" "$carpetausuario"
#fin copia todos los archivos del usuario
else
#comienzo copia de seguridad archivos elegidos por usuario
echo "Sí existe contenidoCopia"
echo "Obteniendo número de copias por defecto para usuario $nusuario"
existencopias=`cat /home/$nusuario/.copiaSeg.dat | grep "numeroCopias"`
echo "Existencopias:$existencopias"
if [ "$existencopias" = "" ]
then
echo "No existe número de copias. Valor por defecto $numcopiaspordefecto"
numcopias=$numcopiaspordefecto
else
echo "Sí existe número de copias"
numcopias=`cat /home/$nusuario/.copiaSeg.dat | head -1 | awk -F= '{print $2}'`
echo $numcopias
fi
numcopiashechas=`ls -p $directoriocopiasgeneral/$nusuario | grep -v / | wc -l`
echo $numcopiashechas
#si se ha llegado al límite de número de copias
if [ "$numcopiashechas" -eq "$numcopias" ]
then
#busca la más antigua
ficheromasantiguo=`ls -ptr $directoriocopiasgeneral/$nusuario | grep -v / | head -1`
#y la borra
sudo rm $directoriocopiasgeneral/$nusuario/$ficheromasantiguo
else
#no se hace nada
echo -n
fi
#genera nombre del archivo
hora=`date +%H`
minutos=`date +%M`
dia=`date +%d`
mes=`date +%m`
ano=`date +%Y`
nombrecopia=`echo copiaSeg_$hora$minutos$dia$mes$ano.tgz`
echo $nombrecopia
#cambia nombre carpeta para pruebas
#carpetausuario="/home/jluserovilchez/Escritorio/scripts"
#descomentar siguiente línea para funcionamiento real
carpetausuario="/home/$nusuario"
#sudo tar -czf "$directoriocopiasgeneral/$nusuario/$nombrecopia" "$carpetausuario"
#obtener lista de archivos
listaarchivos=`cat /home/$nusuario/.copiaSeg.dat | tail -1 | awk -F= '{print $2}'`
echo $listaarchivos
#separar carpetas y archivos
arr=$(echo $listaarchivos | tr ":" " " | tr "," "\n")
echo $arr
cd $carpetausuario
sudo tar -czvf "$directoriocopiasgeneral/$nusuario/$nombrecopia" $arr
#código interesante para el futuro
#for x in $arr
#do
# echo "Copiando $x"
#done
#fin copia de seguridad archivos elegidos por usuario
fi
else
echo "No existe el fichero copiaSeg.dat Creelo para definir los ficheros a copiar y el número de copias"
fi
else
#si no existe carpeta de usuario
echo "No existe carpeta de usuario. El usuario no existe"
fi
else
#error por no introducir el nombre de usuario
echo "No ha introducido nombre de usuario"
error
fi
else
#error por introducir parámetro distinto de -u
echo "El parámetro ha de ser -u. Parámetro incorrecto."
error
fi
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#Realizar un script llamado copiaSeg para gestionar el sistema centralizado de copias de seguridad de un servidor.
#El script sin parámetros hará una copia de segundad de todos los usuarios del sistema, y con el parámetro -u usuario hará una copia de seguridad de la información del usuario pasado como parámetro. Este script sólo podrá ser ejecutado por root. La sintaxis del script será:
#copiaSeg [-u usuario ]
#Los usuarios podrán utilizar el sistema de copias automatizado creando en su directorio de trabajo un fichero oculto, llamado copiaSeg.dat con el siguiente contenido:
#Copias que se desean mantener
#numeroCopias=2
#Contenido de la copia, único obligatorio
#contenidoCopia=dir1:dir2:fichero1:fichero2,,.
#En caso de que no exista alguno de los campos configurables anteriores, se usarán los valores por defecto, definidos en el propio script. El único campo obligatorio es el campo contenidoCopia,que contendrá todos los ficheros y directorios que se desean incluir en la copia.
#Si dicho campo no estuviese definido, no se copiaría nada para ese usuario.
#El sistema creará un directorio /copiaSeg y dentro un directorio por usuario, si no existiese, que sólo podrá ser accesible por su dueño. En el interior de este directorio se almacenarán tantas copias de seguridad copiaSeg_hhmmDDMMYYYY.tgz como defina numeroCopias. Paraque un fichero o directorio sea añadido a la copia debe ser de su propiedad.
#El script borrará las copias más antiguas manteniendo en el sistema sólo las que se indiquen en el fichero de configuración copiaSeg.dat y, si no está definido numeroCopias, lo que marque el valor por defecto.
function error {
echo "¡¡Horror!! Uso "$0" [-u usuario]"
exit
}
#capturar parámetros en variables
parametro=$1
nusuario=$2
#variables por defecto
numcopiaspordefecto=3
directoriocopiasgeneral="/copiaSeg"
carpetausuarios="/home"
#si no introducimos parámetros, se hace la copia de seguridad completa
if [ "$parametro" = "" ]
then
echo "Entrando en copia de seguridad completa"
#comprobar si existe la carpeta
if [ -d $directoriocopiasgeneral ]
then
echo "El directorio general de copias existe. Se sigue el proceso."
else
echo "El directorio no existe. Se crea."
sudo mkdir $directoriocopiasgeneral
if [ $? -ne 0 ]
then
echo "Error al crear el directorio. Seguramente, no tienes permiso para copiar en él"
echo "Saliendo del programa"
exit
fi
fi
#calcula el número de copias realizadas
#lista solo los archivos que hay en el directorio raiz y cuenta el número de líneas
numcopiashechas=`ls -p $directoriocopiasgeneral | grep -v / | wc -l`
echo $numcopiashechas
#si se ha llegado al límite de número de copias
if [ "$numcopiashechas" -eq "$numcopiaspordefecto" ]
then
#busca la más antigua
ficheromasantiguo=`ls -ptr $directoriocopiasgeneral | grep -v / | head -1`
#y la borra
sudo rm $directoriocopiasgeneral/$ficheromasantiguo
else
#no se hace nada
echo -n
fi
#genera nombre del archivo
hora=`date +%H`
minutos=`date +%M`
dia=`date +%d`
mes=`date +%m`
ano=`date +%Y`
nombrecopia=`echo copiaSeg_$hora$minutos$dia$mes$ano.tgz`
echo $nombrecopia
#cambia nombre carpeta para pruebas
carpetausuarios="/home/jluserovilchez/Escritorio/scripts"
sudo tar -czf "$directoriocopiasgeneral/$nombrecopia" "$carpetausuarios"
#si el parámetro es -u
elif [ "$parametro" = "-u" ]
then
#y el usuario no es vacío
if [ "$nusuario" != "" ]
then
echo "Entrando en copia de seguridad de usuario"
echo $nusuario
#crear carpeta de usuario si no existe
if [ -d $directoriocopiasgeneral/$nusuario ]
then
#si existe, no se crea
echo -n
else
#si no existe, se crea
sudo mkdir $directoriocopiasgeneral/$nusuario
fi
#buscar archivo copiaSeg.dat en carpeta de usuario
#si existe carpeta de usuario
if [ -d /home/$nusuario ]
then
#buscar el archivo oculto de usuario
if [ -e "/home/$nusuario/.copiaSeg.dat" ]
then
echo "El fichero copiaSeg.dat existe"
existecontenidoCopia=`cat /home/$nusuario/.copiaSeg.dat | grep "contenidoCopia"`
#echo $existecontenidoCopia
if [ "$existecontenidoCopia" = "" ]
then
echo "No existe contenidoCopia"
echo "Defina la variable contenidoCopia en el archivo copiaSeg.dat para seleccionar archivos. Copiando todos los archivos del usuario."
numcopias=$numcopiaspordefecto
#comienzo de copia de archivos
numcopiashechas=`ls -p $directoriocopiasgeneral/$nusuario | grep -v / | wc -l`
echo $numcopiashechas
#si se ha llegado al límite de número de copias
if [ "$numcopiashechas" -eq "$numcopiaspordefecto" ]
then
#busca la más antigua
ficheromasantiguo=`ls -ptr $directoriocopiasgeneral/$nusuario | grep -v / | head -1`
#y la borra
sudo rm $directoriocopiasgeneral/$nusuario/$ficheromasantiguo
else
#no se hace nada
echo -n
fi
#genera nombre del archivo
hora=`date +%H`
minutos=`date +%M`
dia=`date +%d`
mes=`date +%m`
ano=`date +%Y`
nombrecopia=`echo copiaSeg_$hora$minutos$dia$mes$ano.tgz`
echo $nombrecopia
#cambia nombre carpeta para pruebas
carpetausuario="/home/jluserovilchez/Escritorio/scripts"
#descomentar siguiente línea para funcionamiento real
#carpetausuario="/home/$nusuario"
sudo tar -czf "$directoriocopiasgeneral/$nusuario/$nombrecopia" "$carpetausuario"
#fin copia todos los archivos del usuario
else
#comienzo copia de seguridad archivos elegidos por usuario
echo "Sí existe contenidoCopia"
echo "Obteniendo número de copias por defecto para usuario $nusuario"
existencopias=`cat /home/$nusuario/.copiaSeg.dat | grep "numeroCopias"`
echo "Existencopias:$existencopias"
if [ "$existencopias" = "" ]
then
echo "No existe número de copias. Valor por defecto $numcopiaspordefecto"
numcopias=$numcopiaspordefecto
else
echo "Sí existe número de copias"
numcopias=`cat /home/$nusuario/.copiaSeg.dat | head -1 | awk -F= '{print $2}'`
echo $numcopias
fi
numcopiashechas=`ls -p $directoriocopiasgeneral/$nusuario | grep -v / | wc -l`
echo $numcopiashechas
#si se ha llegado al límite de número de copias
if [ "$numcopiashechas" -eq "$numcopias" ]
then
#busca la más antigua
ficheromasantiguo=`ls -ptr $directoriocopiasgeneral/$nusuario | grep -v / | head -1`
#y la borra
sudo rm $directoriocopiasgeneral/$nusuario/$ficheromasantiguo
else
#no se hace nada
echo -n
fi
#genera nombre del archivo
hora=`date +%H`
minutos=`date +%M`
dia=`date +%d`
mes=`date +%m`
ano=`date +%Y`
nombrecopia=`echo copiaSeg_$hora$minutos$dia$mes$ano.tgz`
echo $nombrecopia
#cambia nombre carpeta para pruebas
#carpetausuario="/home/jluserovilchez/Escritorio/scripts"
#descomentar siguiente línea para funcionamiento real
carpetausuario="/home/$nusuario"
#sudo tar -czf "$directoriocopiasgeneral/$nusuario/$nombrecopia" "$carpetausuario"
#obtener lista de archivos
listaarchivos=`cat /home/$nusuario/.copiaSeg.dat | tail -1 | awk -F= '{print $2}'`
echo $listaarchivos
#separar carpetas y archivos
arr=$(echo $listaarchivos | tr ":" " " | tr "," "\n")
echo $arr
cd $carpetausuario
sudo tar -czvf "$directoriocopiasgeneral/$nusuario/$nombrecopia" $arr
#código interesante para el futuro
#for x in $arr
#do
# echo "Copiando $x"
#done
#fin copia de seguridad archivos elegidos por usuario
fi
else
echo "No existe el fichero copiaSeg.dat Creelo para definir los ficheros a copiar y el número de copias"
fi
else
#si no existe carpeta de usuario
echo "No existe carpeta de usuario. El usuario no existe"
fi
else
#error por no introducir el nombre de usuario
echo "No ha introducido nombre de usuario"
error
fi
else
#error por introducir parámetro distinto de -u
echo "El parámetro ha de ser -u. Parámetro incorrecto."
error
fi
viernes, 10 de febrero de 2012
Shell Script Ejemplos de GREP
#!/bin/bash
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#1. Utilidad grep
#El fichero /etc/passwd es un fichero de texto que contiene información #acerca de las cuentas de usuario definidas en el sistema.
#Cada línea contiene siete datos, separados por el carácter ‘:’. Estos datos son: nombre de la cuenta, password encriptado (opcional), el código de usuario (user ID), el código del grupo (group ID), un comentario, el nombre del directorio ‘home’ y el nombre del intérprete de comandos que se ejecutará cuando el usuario se conecte.
#Vamos a utilizar este fichero en las cuestiones siguientes.
#1. Mostrad la línea correspondiente a la cuenta alu.
#2. Mostrad las cuentas que empiecen por a.
#3. Mostrad las cuentas que empiecen por a o r.
#4. Mostrad las cuentas que terminen por u.
#5. Mostrad las cuentas que usen bash como intérprete de comandos.
#6. Mostrad las cuentas que NO usen bash como intérprete de comandos.
#7. Mostrad las cuentas que no empiecen por vocal.
#8. Mostrad las cuentas que empiecen por mayúscula.
#9. Mostrad las líneas cuyo tercer campo tenga una sola cifra.
#10. Mostrad las líneas que tengan cifras de 3 a 5 dígitos.
#11. Mostrad las líneas que tengan cifras de 3 dígitos en el cuarto campo.
#12. Mostrad las cuentas root o de ftp.
#13. ¿Qué ficheros de cabecera usan la constante MAXDOUBLE?
#14. ¿En qué ficheros aparece la palabra bash? (En mayúscula o minúscula)
#1.como no existe alu, pongo man
echo "1.Cuenta MAN"
grep ^man /etc/passwd
#2.
echo "2.Cuentas que empiezan por a"
grep ^a /etc/passwd
echo "3. Cuentas que empiezan por a o r"
grep ^[ar] /etc/passwd
echo "4. Cuentas que terminan en z"
cat /etc/passwd | awk -F : '{print $1}' | grep z$
echo "5. Cuentas que usen bash como intérprete de comandos"
#cat /etc/passwd | awk -F : '{print $7}' | grep /bin/bash
cat /etc/passwd | grep /bin/bash$ | awk -F : '{print $1}'
echo "6. Mostrad las cuenta que no usen bash como intérprete de comandos."
cat /etc/passwd | grep -v /bin/bash$ | awk -F : '{print $1}'
echo "7. Mostrad las cuentas que no empiecen por vocal."
cat /etc/passwd | awk -F : '{print $1}' | grep ^[^aeiou]
echo "8. Mostrad las cuentas que empiecen por mayúscula."
cat /etc/passwd | awk -F : '{print $1}' | grep ^[A-Z]
echo "9. Mostrad las líneas cuyo tercer campo tenga una sola cifra."
cat /etc/passwd | awk -F : '{print $3}' | grep ^[0-9]$
echo "10. Mostrad las líneas que tengan cifras de 3 a 5 dígitos."
cat /etc/passwd | grep -E [0-9]\{3,5\}
echo "11. Mostrad las líneas que tengan cifras de 3 dígitos en el cuarto campo."
#cat /etc/passwd | awk -F : '{print $4}' | grep -E ^[0-9]{3}$
cat /etc/passwd | grep -E *:*:*:[0-9]{3}:
echo "12. Mostrar las cuentas root o de ftp."
cat /etc/passwd | grep -E '^(root|ftp)'
echo "13. ¿Qué ficheros de cabecera usan la constante MAXDOUBLE?"
#los ficheros de cabecera están en la carpeta /usr/include
grep -r MAXDOUBLE /usr/include 2>/dev/null
#14. ¿En qué ficheros aparece la palabra bash? (En mayúscula o minúscula)
echo "14. ¿En qué ficheros aparece la palabra bash? (En mayúscula o minúscula)"
grep -Er '(FILE|file)' /usr/include 2>/dev/null
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#1. Utilidad grep
#El fichero /etc/passwd es un fichero de texto que contiene información #acerca de las cuentas de usuario definidas en el sistema.
#Cada línea contiene siete datos, separados por el carácter ‘:’. Estos datos son: nombre de la cuenta, password encriptado (opcional), el código de usuario (user ID), el código del grupo (group ID), un comentario, el nombre del directorio ‘home’ y el nombre del intérprete de comandos que se ejecutará cuando el usuario se conecte.
#Vamos a utilizar este fichero en las cuestiones siguientes.
#1. Mostrad la línea correspondiente a la cuenta alu.
#2. Mostrad las cuentas que empiecen por a.
#3. Mostrad las cuentas que empiecen por a o r.
#4. Mostrad las cuentas que terminen por u.
#5. Mostrad las cuentas que usen bash como intérprete de comandos.
#6. Mostrad las cuentas que NO usen bash como intérprete de comandos.
#7. Mostrad las cuentas que no empiecen por vocal.
#8. Mostrad las cuentas que empiecen por mayúscula.
#9. Mostrad las líneas cuyo tercer campo tenga una sola cifra.
#10. Mostrad las líneas que tengan cifras de 3 a 5 dígitos.
#11. Mostrad las líneas que tengan cifras de 3 dígitos en el cuarto campo.
#12. Mostrad las cuentas root o de ftp.
#13. ¿Qué ficheros de cabecera usan la constante MAXDOUBLE?
#14. ¿En qué ficheros aparece la palabra bash? (En mayúscula o minúscula)
#1.como no existe alu, pongo man
echo "1.Cuenta MAN"
grep ^man /etc/passwd
#2.
echo "2.Cuentas que empiezan por a"
grep ^a /etc/passwd
echo "3. Cuentas que empiezan por a o r"
grep ^[ar] /etc/passwd
echo "4. Cuentas que terminan en z"
cat /etc/passwd | awk -F : '{print $1}' | grep z$
echo "5. Cuentas que usen bash como intérprete de comandos"
#cat /etc/passwd | awk -F : '{print $7}' | grep /bin/bash
cat /etc/passwd | grep /bin/bash$ | awk -F : '{print $1}'
echo "6. Mostrad las cuenta que no usen bash como intérprete de comandos."
cat /etc/passwd | grep -v /bin/bash$ | awk -F : '{print $1}'
echo "7. Mostrad las cuentas que no empiecen por vocal."
cat /etc/passwd | awk -F : '{print $1}' | grep ^[^aeiou]
echo "8. Mostrad las cuentas que empiecen por mayúscula."
cat /etc/passwd | awk -F : '{print $1}' | grep ^[A-Z]
echo "9. Mostrad las líneas cuyo tercer campo tenga una sola cifra."
cat /etc/passwd | awk -F : '{print $3}' | grep ^[0-9]$
echo "10. Mostrad las líneas que tengan cifras de 3 a 5 dígitos."
cat /etc/passwd | grep -E [0-9]\{3,5\}
echo "11. Mostrad las líneas que tengan cifras de 3 dígitos en el cuarto campo."
#cat /etc/passwd | awk -F : '{print $4}' | grep -E ^[0-9]{3}$
cat /etc/passwd | grep -E *:*:*:[0-9]{3}:
echo "12. Mostrar las cuentas root o de ftp."
cat /etc/passwd | grep -E '^(root|ftp)'
echo "13. ¿Qué ficheros de cabecera usan la constante MAXDOUBLE?"
#los ficheros de cabecera están en la carpeta /usr/include
grep -r MAXDOUBLE /usr/include 2>/dev/null
#14. ¿En qué ficheros aparece la palabra bash? (En mayúscula o minúscula)
echo "14. ¿En qué ficheros aparece la palabra bash? (En mayúscula o minúscula)"
grep -Er '(FILE|file)' /usr/include 2>/dev/null
Shell Script Ejemplos de sort
#!/bin/bash
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#1. Ordenad el fichero /etc/passwd por orden alfabético.
#2. Ordenadlo en sentido inverso.
#3. Ordenadlo ignorando mayúsculas.
#4. Ordenadlo según el tercer campo.
#5. Ordenadlo según el tercer campo en orden numérico.
#6. Ordenadlo según el cuarto campo en orden numérico y eliminando repeticiones.
echo "Introduce una opción(1-6)"
read opcion
case $opcion in
1)
echo "Ordenad el fichero /etc/passwd por orden alfabético."
sort /etc/passwd
;;
2)
echo "Ordenadlo en sentido inverso."
sort -r /etc/passwd
;;
3)
echo "Ordenadlo ignorando mayúsculas."
sort -f /etc/passwd
;;
4)
echo "Ordenadlo según el tercer campo."
sort -t: -k 3 /etc/passwd
;;
5)
echo "Ordenadlo según el tercer campo en orden numérico."
sort -g -t: -k 3 /etc/passwd
;;
6)
echo "Ordenadlo según el cuarto campo en orden numérico y eliminando repeticiones."
sort -u -g -t: -k 4 /etc/passwd
;;
esac
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#1. Ordenad el fichero /etc/passwd por orden alfabético.
#2. Ordenadlo en sentido inverso.
#3. Ordenadlo ignorando mayúsculas.
#4. Ordenadlo según el tercer campo.
#5. Ordenadlo según el tercer campo en orden numérico.
#6. Ordenadlo según el cuarto campo en orden numérico y eliminando repeticiones.
echo "Introduce una opción(1-6)"
read opcion
case $opcion in
1)
echo "Ordenad el fichero /etc/passwd por orden alfabético."
sort /etc/passwd
;;
2)
echo "Ordenadlo en sentido inverso."
sort -r /etc/passwd
;;
3)
echo "Ordenadlo ignorando mayúsculas."
sort -f /etc/passwd
;;
4)
echo "Ordenadlo según el tercer campo."
sort -t: -k 3 /etc/passwd
;;
5)
echo "Ordenadlo según el tercer campo en orden numérico."
sort -g -t: -k 3 /etc/passwd
;;
6)
echo "Ordenadlo según el cuarto campo en orden numérico y eliminando repeticiones."
sort -u -g -t: -k 4 /etc/passwd
;;
esac
sábado, 4 de febrero de 2012
Examen Oposiciones 2008 Shell Script
#!/bin/bash
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#OPOSICIONES CUERPOS DOCENTES 2008
#EJERCICIO PRÁCTICO - PLANTEAMIENTO
#El ejercicio práctico se realizará bajo sistema operativo LINUX. Se podrá hacer uso del comando man.
#Elabora un script para llamado informe.sh que muestre información sobre el uso del sistema que realiza un determinado usuario.mEl shell-script tendra la siguiente sintaxis:
#informe.sh opcion [usuario]
#Las opciones pueden ser –u y –a. Si la opción que recibe es –u, deberá recibir como segundo argumento un nombre de usuario.
#Si el script ser ejecuta de la primera forma (-u usuario), deberá presentar un informe del usuario que se ha pasado por parámetro. En el informe deberán aparecer los siguientes datos:
#· Nombre del usuario.
#· Número de procesos que ha lanzado.
#· Nombre del primer proceso que lanzó.
#· Listado de todos los procesos que ha lanzado.
#· Número de directorios que tiene.
#· Número de ficheros regulares que tiene.
#· Uso del espacio en disco que ocupa.
#· Tanto por ciento de espacio en disco usado por el usuario.
function error {
echo "¡¡Horror!! Uso "$0" -[u|a] [usuario]"
exit
}
function numprocesos() {
echo "Contando procesos, $1..."
usuario=$1
numproc=`ps -U $usuario | wc -l`
echo "Número de procesos del usuario $usuario:$numproc"
}
function numprocesostotal() {
echo "Contando procesos totales"
usuario=$1
numproc=`ps | wc -l`
echo "Número de procesos total:$numproc"
}
function procesomasantiguo() {
echo "Buscando proceso más antiguo, $1..."
usuario=$1
ps -F -U $usuario | head -2 | tail -1 | awk '{print $11}'
}
function procesomasantiguototal() {
echo "Buscando proceso más antiguo total"
ps -F | head -2 | tail -1 | awk '{print $11}'
}
function listadoprocesos() {
echo "Listando procesos de usuario, $1..."
usuario=$1
ps -F -U $usuario
}
function listadoprocesostotal() {
echo "Listando procesos total"
ps -F
}
function numdirectorios() {
echo "Contando número de directorios, $1..."
usuario=$1
carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
#ls -ldr $carpetausuario/*
find $carpetausuario -type d -ls | wc -l
}
function numdirectoriostotal() {
echo "Contando número de directorios total"
carpetausuario="/home"
#ls -ldr $carpetausuario/*
find $carpetausuario -type d -ls | wc -l
}
function fichregulares() {
echo "Número de ficheros regulares, $1..."
usuario=$1
carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
find $carpetausuario -type f -ls | wc -l
}
function fichregularestotal() {
echo "Número de ficheros regulares total"
carpetausuario="/home"
find $carpetausuario -type f -ls | wc -l
}
function espacioendisco() {
echo "Espacio en disco, $1..."
usuario=$1
carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
du -sh $carpetausuario | awk {'print $1'}
}
function espacioendiscototal() {
echo "Espacio en disco total"
carpetausuario="/home"
du -sh $carpetausuario | awk {'print $1'}
}
function tantoporcientoendisco() {
echo "Tanto por ciento en disco, $1..."
usuario=$1
carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
du -sh $carpetausuario | awk {'print $1'}
ocupadocarpeta=`du -sh $carpetausuario | awk {'print $1'}`
#le quita la letra del final
ocupadocarpeta=`echo $ocupadocarpeta|sed 's/.$//'`
tamanodisco=`df -h | head -2 | tail -1 | awk {'print $2'}`
#le quita la letra del final
tamanodisco=`echo $tamanodisco | sed 's/.$//'`
echo "Ocupado carpeta:$ocupadocarpeta"
echo "Tamaño disco:$tamanodisco"
#expr no da decimales
#porcentajecarpeta=`expr $ocupadocarpeta / $tamanodisco`
#bc sí da decimales
porcentajecarpeta=$( echo "scale=2;$ocupadocarpeta/$tamanodisco" | bc)
porcentajecarpeta=$( echo "scale=2;$porcentajecarpeta*100" | bc)
echo "El porcentaje de la carpeta $carpetausuario sobre el tamaño total del disco es $porcentajecarpeta%"
}
function tantoporcientoendiscototal() {
echo "Tanto por ciento en disco total"
carpetausuario="/home"
du -sh $carpetausuario | awk {'print $1'}
ocupadocarpeta=`du -sh $carpetausuario | awk {'print $1'}`
#le quita la letra del final
ocupadocarpeta=`echo $ocupadocarpeta|sed 's/.$//'`
tamanodisco=`df -h | head -2 | tail -1 | awk {'print $2'}`
#le quita la letra del final
tamanodisco=`echo $tamanodisco | sed 's/.$//'`
echo "Ocupado carpeta:$ocupadocarpeta"
echo "Tamaño disco:$tamanodisco"
#expr no da decimales
#porcentajecarpeta=`expr $ocupadocarpeta / $tamanodisco`
#bc sí da decimales
porcentajecarpeta=$( echo "scale=2;$ocupadocarpeta/$tamanodisco" | bc)
porcentajecarpeta=$( echo "scale=2;$porcentajecarpeta*100" | bc)
echo "El porcentaje de la carpeta $carpetausuario sobre el tamaño total del disco es $porcentajecarpeta%"
}
#echo $#
if [[ $# -eq 0 ]]
then
error
elif [[ $# -gt 0 ]]
then
#Decir buenos días, nombre del usuario
#nombreusuario=`id -un`
#si el primer parámetro es -u
if [[ $1 == "-u" ]]
then
echo "Entrando en -u"
if [[ $2 == "" ]]
then
echo "No has introducido nombre de usuario. Saliendo del programa"
error
else #usuario correcto
nombreusuario=$2
echo $nombreusuario
if id $nombreusuario > /dev/null 2>&1
then
echo "Usuario existe. Comenzando proceso"
echo $nombreusuario
numprocesos $nombreusuario
procesomasantiguo $nombreusuario
listadoprocesos $nombreusuario
numdirectorios $nombreusuario
fichregulares $nombreusuario
espacioendisco $nombreusuario
tantoporcientoendisco $nombreusuario
else
echo "El usuario no existe."
error
fi
fi
elif [[ $1 == "-a" ]]
then
echo "Entrando en -a"
numprocesostotal
procesomasantiguototal
listadoprocesostotal
numdirectoriostotal
fichregularestotal
espacioendiscototal
tantoporcientoendiscototal
else
error
fi
else
error
fi
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#OPOSICIONES CUERPOS DOCENTES 2008
#EJERCICIO PRÁCTICO - PLANTEAMIENTO
#El ejercicio práctico se realizará bajo sistema operativo LINUX. Se podrá hacer uso del comando man.
#Elabora un script para llamado informe.sh que muestre información sobre el uso del sistema que realiza un determinado usuario.mEl shell-script tendra la siguiente sintaxis:
#informe.sh opcion [usuario]
#Las opciones pueden ser –u y –a. Si la opción que recibe es –u, deberá recibir como segundo argumento un nombre de usuario.
#Si el script ser ejecuta de la primera forma (-u usuario), deberá presentar un informe del usuario que se ha pasado por parámetro. En el informe deberán aparecer los siguientes datos:
#· Nombre del usuario.
#· Número de procesos que ha lanzado.
#· Nombre del primer proceso que lanzó.
#· Listado de todos los procesos que ha lanzado.
#· Número de directorios que tiene.
#· Número de ficheros regulares que tiene.
#· Uso del espacio en disco que ocupa.
#· Tanto por ciento de espacio en disco usado por el usuario.
function error {
echo "¡¡Horror!! Uso "$0" -[u|a] [usuario]"
exit
}
function numprocesos() {
echo "Contando procesos, $1..."
usuario=$1
numproc=`ps -U $usuario | wc -l`
echo "Número de procesos del usuario $usuario:$numproc"
}
function numprocesostotal() {
echo "Contando procesos totales"
usuario=$1
numproc=`ps | wc -l`
echo "Número de procesos total:$numproc"
}
function procesomasantiguo() {
echo "Buscando proceso más antiguo, $1..."
usuario=$1
ps -F -U $usuario | head -2 | tail -1 | awk '{print $11}'
}
function procesomasantiguototal() {
echo "Buscando proceso más antiguo total"
ps -F | head -2 | tail -1 | awk '{print $11}'
}
function listadoprocesos() {
echo "Listando procesos de usuario, $1..."
usuario=$1
ps -F -U $usuario
}
function listadoprocesostotal() {
echo "Listando procesos total"
ps -F
}
function numdirectorios() {
echo "Contando número de directorios, $1..."
usuario=$1
carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
#ls -ldr $carpetausuario/*
find $carpetausuario -type d -ls | wc -l
}
function numdirectoriostotal() {
echo "Contando número de directorios total"
carpetausuario="/home"
#ls -ldr $carpetausuario/*
find $carpetausuario -type d -ls | wc -l
}
function fichregulares() {
echo "Número de ficheros regulares, $1..."
usuario=$1
carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
find $carpetausuario -type f -ls | wc -l
}
function fichregularestotal() {
echo "Número de ficheros regulares total"
carpetausuario="/home"
find $carpetausuario -type f -ls | wc -l
}
function espacioendisco() {
echo "Espacio en disco, $1..."
usuario=$1
carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
du -sh $carpetausuario | awk {'print $1'}
}
function espacioendiscototal() {
echo "Espacio en disco total"
carpetausuario="/home"
du -sh $carpetausuario | awk {'print $1'}
}
function tantoporcientoendisco() {
echo "Tanto por ciento en disco, $1..."
usuario=$1
carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
du -sh $carpetausuario | awk {'print $1'}
ocupadocarpeta=`du -sh $carpetausuario | awk {'print $1'}`
#le quita la letra del final
ocupadocarpeta=`echo $ocupadocarpeta|sed 's/.$//'`
tamanodisco=`df -h | head -2 | tail -1 | awk {'print $2'}`
#le quita la letra del final
tamanodisco=`echo $tamanodisco | sed 's/.$//'`
echo "Ocupado carpeta:$ocupadocarpeta"
echo "Tamaño disco:$tamanodisco"
#expr no da decimales
#porcentajecarpeta=`expr $ocupadocarpeta / $tamanodisco`
#bc sí da decimales
porcentajecarpeta=$( echo "scale=2;$ocupadocarpeta/$tamanodisco" | bc)
porcentajecarpeta=$( echo "scale=2;$porcentajecarpeta*100" | bc)
echo "El porcentaje de la carpeta $carpetausuario sobre el tamaño total del disco es $porcentajecarpeta%"
}
function tantoporcientoendiscototal() {
echo "Tanto por ciento en disco total"
carpetausuario="/home"
du -sh $carpetausuario | awk {'print $1'}
ocupadocarpeta=`du -sh $carpetausuario | awk {'print $1'}`
#le quita la letra del final
ocupadocarpeta=`echo $ocupadocarpeta|sed 's/.$//'`
tamanodisco=`df -h | head -2 | tail -1 | awk {'print $2'}`
#le quita la letra del final
tamanodisco=`echo $tamanodisco | sed 's/.$//'`
echo "Ocupado carpeta:$ocupadocarpeta"
echo "Tamaño disco:$tamanodisco"
#expr no da decimales
#porcentajecarpeta=`expr $ocupadocarpeta / $tamanodisco`
#bc sí da decimales
porcentajecarpeta=$( echo "scale=2;$ocupadocarpeta/$tamanodisco" | bc)
porcentajecarpeta=$( echo "scale=2;$porcentajecarpeta*100" | bc)
echo "El porcentaje de la carpeta $carpetausuario sobre el tamaño total del disco es $porcentajecarpeta%"
}
#echo $#
if [[ $# -eq 0 ]]
then
error
elif [[ $# -gt 0 ]]
then
#Decir buenos días, nombre del usuario
#nombreusuario=`id -un`
#si el primer parámetro es -u
if [[ $1 == "-u" ]]
then
echo "Entrando en -u"
if [[ $2 == "" ]]
then
echo "No has introducido nombre de usuario. Saliendo del programa"
error
else #usuario correcto
nombreusuario=$2
echo $nombreusuario
if id $nombreusuario > /dev/null 2>&1
then
echo "Usuario existe. Comenzando proceso"
echo $nombreusuario
numprocesos $nombreusuario
procesomasantiguo $nombreusuario
listadoprocesos $nombreusuario
numdirectorios $nombreusuario
fichregulares $nombreusuario
espacioendisco $nombreusuario
tantoporcientoendisco $nombreusuario
else
echo "El usuario no existe."
error
fi
fi
elif [[ $1 == "-a" ]]
then
echo "Entrando en -a"
numprocesostotal
procesomasantiguototal
listadoprocesostotal
numdirectoriostotal
fichregularestotal
espacioendiscototal
tantoporcientoendiscototal
else
error
fi
else
error
fi
Suscribirse a:
Entradas (Atom)