Algumas vezes precisamos criar usuários e/ou grupos de sistema, os quais geralmente são IDs abaixo de 1000 para serem usuários de serviços. Abaixo vai o código fonte e exemplos de uso.
#!/bin/bash
# nextsysid.sh
# Script para gerar o próximo ID de sistema vago
# Elaborado por Juliano Atanazio
# 17/04/2011
if [ -f /etc/adduser.conf ]; then
source /etc/adduser.conf
# Faz a leitura do arquivo onde contém variáveis sobre
# quais devem ser os últimos IDs de usuários e grupos
# Obs.: Debian e derivados
else
# Para Red Hat e derivados
FIRST_SYSTEM_UID='1'
LAST_SYSTEM_UID='499'
FIRST_SYSTEM_GID='1'
LAST_SYSTEM_GID='499'
fi
case $1 in
# Opção para o próximo ID de usuário de sistema
'user')
# Primeiro ID de usuário de sistema
ID_MIN=$FIRST_SYSTEM_UID
# Último ID de usuário de sistema
ID_MAX=$LAST_SYSTEM_UID;
# Arquivo de IDs para usuários
FILE='/etc/passwd';
;;
# Opção para o próximo ID de grupo de sistema
'group')
# Primeiro ID de grupo de sistema
ID_MIN=$FIRST_SYSTEM_GID
# Último ID de grupo de sistema
ID_MAX=$LAST_SYSTEM_GID;
# Arquivo de IDs para grupos
FILE='/etc/group';
;;
*)
# Exibe mensagem sobre parâmetros corretos
echo -e "$0 {user|group}";
exit 1;
;;
esac
# ----- Extrai todos IDs de sistema do arquivo -----
IDs=$(cat $FILE | cut -f3 -d: | sort -n )
SYS_IDs=""
for ID in $IDs; do
if [ $ID -ge $ID_MIN ] && [ $ID -le $ID_MAX ]; then
SYS_IDs="$SYS_IDs $ID"
fi
done
# ----- Extrai o próximo ID vago de sistema -----
i=$ID_MIN
NEXT_ID=$(($ID_MIN+1))
for SYS_ID in $SYS_IDs; do
if [ $SYS_ID -ne $i ]; then
break;
fi
let i++;
NEXT_ID=$i
done
# Imprime na tela o próximo ID
echo $NEXT_ID
Salve o arquivo com o nome nextsysid.sh e dê a permissão de
execução:
chmod +x nextsysid.sh
Exemplos de Uso Próximo ID disponível para usuário de sistema
./nextsysid.sh user
114
Próximo ID disponível para grupo de sistema
./nextsysid.sh group 126 Até a próxima dica!!!
Gostar disso:
Seja o primeiro a gostar disso post.
This entry was posted on abril 17, 2011 at 4:26 pm and is filed under Shell Script. Você pode acompanhar qualquer resposta para esta entrada através do feed RSS 2.0.
Você pode deixar uma resposta, ou trackback do seu próprio site.