Como posso verificar se um grupo não tem usuários e excluí-lo?

4

Como posso verificar se um grupo não tem usuários e excluí-lo?

Estou fazendo um script bash linux, e preciso excluir um grupo com o comando groupdel, mas tenho que validar que o grupo que vou remover está vazio, o que não tem usuários.

Isso é o que eu fiz:

  bajagroup () {
printf "\ nEnter the name of the group to delete: \ n"
read -r remove group
[ -n $ deletegroup ] && groupdel $ deletegroup
if [ $? -ne 0 ]; then
                 echo "The group was not deleted from the system. Please try again."
         else
                 echo "The group was deleted from the system."
fi
sleep 3
}

Algo semelhante ao comando delgroup com a opção --only-if-empty, mas com o comando groupdel.

Exemplo: delgroup --only-if-empty

    
por user240991 16.07.2017 / 18:25

1 resposta

1

Obter os membros de um grupo no Linux não é tão fácil quanto se pensa. Na minha opinião, a maneira mais fácil seria usar o comando lid . Instale-o usando

sudo apt-get update && sudo apt-get install libuser

então você deve tentar se funciona usando

lid -g root

Se ele disser que o comando não foi encontrado, tente

/usr/sbin/libuser-lid -g root

E para o seu script

bajagroup () {
printf "\n Enter the name of the group to delete: \n"
read -p groupname #the variable has to be one word(normally)
deletegroup=$(lid -g $groupname)
[ -z $deletegroup ] && groupdel $deletegroup #between $ and the name no space

Editar

Como você não pode instalar o pacote, escrevi um pequeno script que deve resolver seu problema

#!/bin/bash
read -p "Enter groupname here: " groupname #Takes the input and save it to the variable groupname
gid=$(cat /etc/group | grep ^"$groupname": | cut -d":" -f3) #get the content of /etc/group (list of every group with groupid) | search for the line that starts with $groupname: (That means if a group name is Test, Test1 or 1Test wouldn't be matched) | get the groupid
member=$(cat /etc/passwd | cut -d":" -f4 | grep -x "$gid") #get the content of /etc/passwd (list of all users with some extra information like the attached gid) | get the part with the gid | grep the line that is exactly $gid
[ -z $member ] && groupdel $groupname #if $member is empty then delete that group

Esta é a base de que você precisa. Você pode mudar o final e começar a atender às suas necessidades.

    
por 16.07.2017 / 18:58