Você não está autenticado.
Arch Linux Brasil está precisando de sua colaboração para realizar o pagamento do domínio e do host, para colaborar, realizar doações via paypal.
Para mais informações: contato at archlinux-br.org.
Crio este tópico para compartilharmos os scripts que usamos no dia a dia para facilitar a nossa vida. Para começar, vou postar um script que criei logo quando comecei a usar o Arch. A necessidade era deixar o meu Arch limpo, sem dependências desnecessárias.
Segue o script:
EDIT: script atualizado para suportar sudo.
#!/bin/sh
# undeps - This script lists and removes UNneeded DEPendencieS on Arch Linux
# Options: -l <list> | -r <remove> | -ra <remove all - recursive>
# Estêvão Valadão - [email protected]
loopflag=0
case "$1" in
-l)
echo ""
echo "** UNNEEDED DEPENDENCIES **"
echo "-> checking dependencies..."
echo ""
/usr/bin/pacman -Qdtq
if [ "$?" = 1 ]; then
echo "-> Your system doesn't have unneeded dependencies."
fi
echo ""
;;
-r)
while [ "$loopflag" = 0 ]
do
echo ""
echo "** UNNEEDED DEPENDENCIES **"
echo "-> checking dependencies..."
echo ""
/usr/bin/pacman -Qdtq
if [ "$?" = 0 ]; then
echo ""
echo -n "Do you want to remove these packages? [Y/n] "
read option
if [ "$option" = "y" ] || [ "$option" = "" ]; then
if [ -f /usr/bin/sudo ]; then
/usr/bin/sudo /usr/bin/pacman -Rn $(pacman -Qdtq)
echo "-> Unneeded dependencie(s) sucessfully removed."
echo ""
else
/usr/bin/pacman -Rn $(pacman -Qdtq)
echo "-> Unneeded dependencie(s) sucessfully removed."
echo ""
fi
elif [ "$option" = "n" ]; then
exit 0
fi
else
loopflag=1
echo "-> Your system doesn't have unneeded dependencies."
echo ""
fi
done
;;
-ra)
/usr/bin/pacman -Qdtq > /dev/null
if [ "$?" = 1 ]; then
echo ""
echo "** UNNEEDED DEPENDENCIES **"
echo "-> checking dependencies..."
echo ""
echo "-> Your system doesn't have unneeded dependencies."
echo ""
else
echo ""
echo "** UNNEEDED DEPENDENCIES - RECURSIVE **"
echo -n "-> "
if [ -f /usr/bin/sudo ]; then
/usr/bin/sudo /usr/bin/pacman -Rsn $(pacman -Qdtq)
else
/usr/bin/pacman -Rsn $(pacman -Qdtq)
fi
fi
;;
*)
echo "Usage: $0 {-l <list> | -r <remove> | -ra <remove all - recursive>}"
echo ""
esac
exit 0
Utilização:
undeps -l lista as dependências desnecessárias do sistema
undeps -r remove as dependências desnecessárias por etapas
undeps -ra remove todas as dependências desnecessárias de uma só vez (recursivamente) - sou viciado neste comando :-)
PS. Uma outra alternativa é criar aliases para os comandos do pacman, a desvantagem é que você deixa de ter as mensagens fornecidas pelo script.
Por favor coloque [RESOLVIDO] no título do tópico quando o seu problema for solucionado.
Offline
Eu sou um apaixonado pelo vim.
https://github.com/robsonpeixoto/vimrc
Aí está o meu vimrc e todos os scripts que eu uso.
Twitter @rrspba
Blog http://blog.robsonpeixoto.com
7.1.2 – Ao sanar sua dúvida, edite o tópico e adicione a sintaxe '[RESOLVIDO]'.
Offline
@robsonpeixoto
Eu tb sou fã do vim... mas não tenho tempo (leia-se: preguiça) de aprender mais comandos dele, etc. e tal. Só sei o básico. Vou dar uma olhada nesses que vc postou
@estevao
Também sou viciado em remover todas as dependências desnecessárias recursivamente de uma só vez ... mas fazia isso do jeito complicado:
pacman -Qtd | cut -f1 -d " " | xargs sudo pacman -Rscvn --noconfirm
Não sabia que dava pra fazer do jeito que vc fez, com o $()...
Na minha vida de Linux só fiz dois scripts (uma vergonha ), ambos em Python. Um atualizava as pastas do svn do KDE na minha máquina e compilava (tinha uma porrada de bugs hehe); esse eu perdi. O outro fiz num breve momento que usei Debian; queria usar o axel pra baixar os pacotes do apt. Tinha achado o apt-fast, mas ele era chato pq n dava pra dar um Ctrl + C e continuar depois, e ele baixava direto sem perguntar. Aí fiz esse, baseado no apt-fast.sh mas com as mudanças que eu queria -> http://paste.archlinux-br.org/1594
Última edição por countercraft (18/11/2010 21:07:48)
Offline
@estevao
Seu script ficou muito bom, na verdade eu acho que deveria ser uma função já do próprio pacman fazer esse papel ...
Sei que não é uma super coisa, mas estou mandando ele traduzido em pt_BR, caso alguém queira usar seu script e tenha dificuldades com o inglês.
Link do undeps em pt_BR -> http://paste.archlinux-br.org/1595
Antonio Fernandes C. Neto
http://softwarelivre.org/fernandes
Offline
@estevao
Seu script ficou muito bom, na verdade eu acho que deveria ser uma função já do próprio pacman fazer esse papel ...
Sei que não é uma super coisa, mas estou mandando ele traduzido em pt_BR, caso alguém queira usar seu script e tenha dificuldades com o inglês.Link do undeps em pt_BR -> http://paste.archlinux-br.org/1595
Muito legal a tradução fernandes, valeu :-)
EDIT: fiz uma nova versão do script com suporte ao sudo, se vc quiser traduzir essa também....
Última edição por estevao (19/11/2010 15:12:59)
Por favor coloque [RESOLVIDO] no título do tópico quando o seu problema for solucionado.
Offline
Poiseh. Tava aqui tentando fazer um script para lidar com meus pacotes instalados via AUR, pois não queria instalar outro gerenciador de pacotes além do pacman para fazer isso. Segue abaixo o que fiz até agora. Não tenho muito conhecimento de programação em shell, então talvez vocês tenham algumas dicas para melhorar esse script.
Resumindo, ele checa se seus pacotes instalados a partir do AUR estão atualizados e também instala novos pacotes do AUR automaticamente. A parte de limpar o cache não tá pronta, só lista os arquivos .pkg.tar.xz da pasta ~/.aur/ e checa se existem arquivos repetidos. Detalhe: guardo todos os meus pacotes (.pkg.tar.xz) do AUR no diretorio ~/.aur/ , portanto você precisa criar esse diretório para ele funcionar...
PS: melhorei um pouco o código...
#!/bin/bash
#
# pacrae - Instala, atualiza e limpa cache de pacotes do AUR
#
# ATENÇÃO: altere a variável DIR_AUR para o diretório onde
# você guarda seus pacotes do AUR. O diretório deve existir!!!
#
# ----------------------------------------------------------
# Este programa utiliza o pacman do Arch Linux para gerenciar
# pacotes do AUR. Ele compila e instala pacotes, procura por
# atualizações de pacotes instalados e remove pacotes não
# instalados do cache. Ele é uma boa opção para quem instala
# pacotes do AUR mas não quer ter outro gerenciador de pacotes
# além do pacman.
#
# Exemplo de uso:
# $ pacrae -U <- Procura atualizações
# $ pacrae -S stockfish <- Instala pacote stockfish
# $ pacrae -C <- Limpa cache
# $ pacrae -h <- Mostra ajuda
#
#
# Autor: rae <[email protected]>
#
# Licença: WTFPL <http://sam.zoy.org/wtfpl/COPYING>
#
DIR_AUR="/home/rae/.aur/"
AJUDA="
Uso: $(basename "$0") [OPÇÕES]
OPÇÕES:
-S <pacote> Instala o pacote especificado a partir do AUR
-U Procura atualizações para pacotes instalados
-C Remove pacotes não instalados do cache
-h Mostra esta tela de ajuda e sai
"
instalar() {
echo -n "Você deseja instalar o pacote $OPTARG? [S/n] " ; read inst_opcao
if [ "$inst_opcao" = 'S' ]
then
wget -q http://aur.archlinux.org/packages/$OPTARG/$OPTARG.tar.gz
if [ $? -eq 0 ]
then
tar -zxf $OPTARG.tar.gz -C $DIR_AUR
rm $OPTARG.tar.gz
cd $DIR_AUR/$OPTARG
makepkg -s -i
mv *.pkg.tar.xz $DIR_AUR
rm -r $DIR_AUR/$OPTARG
else
echo "erro: não foi possível encontrar o pacote $OPTARG"
exit 1
fi
else
exit 1
fi
echo -e "\033[32;1mPacote instalado com sucesso\033[m"
exit 0
}
atualizar() {
local aux=0
local pkg_aur=`pacman -Qmq`
for i in $pkg_aur
do
wget -q http://aur.archlinux.org/packages/$i/$i/PKGBUILD
if [ $? -eq 0 ]
then
local pkgver=$(awk -F'=' /^pkgver/'{print $NF}' PKGBUILD)
local pkgrel=$(awk -F'=' /^pkgrel/'{print $NF}' PKGBUILD)
local pkg_atual=$(echo $i $pkgver-$pkgrel)
local pkg_inst=$(pacman -Q $i)
local ult_atual=$(pacman -Qi $i | awk -F' : ' /^"Data da Instalação"/'{print $NF}')
echo "Versão atual : $pkg_atual"
echo "Versão instalada : $pkg_inst"
echo -e "Última atualização : \033[33m$ult_atual\033[m"
if [ "$pkg_atual" != "$pkg_inst" ]
then
echo -e "Status : \033[31;1mDesatualizado\033[m"
aux=$((aux + 1))
local pkg_des="$pkg_des $i"
else
echo -e "Status : \033[32;1mAtualizado\033[m"
fi
rm PKGBUILD
else
echo "erro: falha ao acessar http://aur.archlinux.org/"
exit 1
fi
done
if [ $aux -gt 0 ]
then
echo -e "\n\033[31;1mAtenção: $aux pacotes estão desatualizados:\033[m"
echo "$pkg_des"
echo -e "\n\033[33mUse pacrae -S <pacote> para atualizá-los (atualize apenas um por vez)\033[m"
else
echo -e "\n\033[32;1mTodos os pacotes estão atualizados\033[m"
fi
exit 0
}
while getopts ":hS:UC" opcao
do
case "$opcao" in
S) instalar ;;
U) atualizar ;;
C) limpar_cache ;;
h) echo "$AJUDA"
exit 0
;;
\?) echo "Opção inválida: $OPTARG (use -h para obter ajuda)"
exit 1
;;
:) echo "Faltou o nome do pacote a ser instalado"
exit 1
;;
esac
done
echo "Nenhuma operação definida (use -h para obter ajuda)"
exit 0
Última edição por rae (23/11/2010 20:57:55)
Offline
Poiseh. Tava aqui tentando fazer um script para lidar com meus pacotes instalados via AUR, pois não queria instalar outro gerenciador de pacotes além do pacman para fazer isso. Segue abaixo o que fiz até agora. Não tenho muito conhecimento de programação em shell, então talvez vocês tenham algumas dicas para melhorar esse script.
Resumindo, ele checa se seus pacotes instalados a partir do AUR estão atualizados e também instala novos pacotes do AUR automaticamente. A parte de limpar o cache não tá pronta, só lista os arquivos .pkg.tar.xz da pasta ~/.aur/ e checa se existem arquivos repetidos. Detalhe: guardo todos os meus pacotes (.pkg.tar.xz) do AUR no diretorio ~/.aur/ , portanto você precisa criar esse diretório para ele funcionar...PS: melhorei um pouco o código...
#!/bin/bash # # pacrae - Instala, atualiza e limpa cache de pacotes do AUR # # ATENÇÃO: altere a variável DIR_AUR para o diretório onde # você guarda seus pacotes do AUR. O diretório deve existir!!! # # ---------------------------------------------------------- # Este programa utiliza o pacman do Arch Linux para gerenciar # pacotes do AUR. Ele compila e instala pacotes, procura por # atualizações de pacotes instalados e remove pacotes não # instalados do cache. Ele é uma boa opção para quem instala # pacotes do AUR mas não quer ter outro gerenciador de pacotes # além do pacman. # # Exemplo de uso: # $ pacrae -U <- Procura atualizações # $ pacrae -S stockfish <- Instala pacote stockfish # $ pacrae -C <- Limpa cache # $ pacrae -h <- Mostra ajuda # # # Autor: rae <[email protected]> # # Licença: WTFPL <http://sam.zoy.org/wtfpl/COPYING> # DIR_AUR="/home/rae/.aur/" AJUDA=" Uso: $(basename "$0") [OPÇÕES] OPÇÕES: -S <pacote> Instala o pacote especificado a partir do AUR -U Procura atualizações para pacotes instalados -C Remove pacotes não instalados do cache -h Mostra esta tela de ajuda e sai " instalar() { echo -n "Você deseja instalar o pacote $OPTARG? [S/n] " ; read inst_opcao if [ "$inst_opcao" = 'S' ] then wget -q http://aur.archlinux.org/packages/$OPTARG/$OPTARG.tar.gz if [ $? -eq 0 ] then tar -zxf $OPTARG.tar.gz -C $DIR_AUR rm $OPTARG.tar.gz cd $DIR_AUR/$OPTARG makepkg -s -i mv *.pkg.tar.xz $DIR_AUR rm -r $DIR_AUR/$OPTARG else echo "erro: não foi possível encontrar o pacote $OPTARG" exit 1 fi else exit 1 fi echo -e "\033[32;1mPacote instalado com sucesso\033[m" exit 0 } atualizar() { local aux=0 local pkg_aur=`pacman -Qmq` for i in $pkg_aur do wget -q http://aur.archlinux.org/packages/$i/$i/PKGBUILD if [ $? -eq 0 ] then local pkgver=$(awk -F'=' /^pkgver/'{print $NF}' PKGBUILD) local pkgrel=$(awk -F'=' /^pkgrel/'{print $NF}' PKGBUILD) local pkg_atual=$(echo $i $pkgver-$pkgrel) local pkg_inst=$(pacman -Q $i) local ult_atual=$(pacman -Qi $i | awk -F' : ' /^"Data da Instalação"/'{print $NF}') echo "Versão atual : $pkg_atual" echo "Versão instalada : $pkg_inst" echo -e "Última atualização : \033[33m$ult_atual\033[m" if [ "$pkg_atual" != "$pkg_inst" ] then echo -e "Status : \033[31;1mDesatualizado\033[m" aux=$((aux + 1)) local pkg_des="$pkg_des $i" else echo -e "Status : \033[32;1mAtualizado\033[m" fi rm PKGBUILD else echo "erro: falha ao acessar http://aur.archlinux.org/" exit 1 fi done if [ $aux -gt 0 ] then echo -e "\n\033[31;1mAtenção: $aux pacotes estão desatualizados:\033[m" echo "$pkg_des" echo -e "\n\033[33mUse pacrae -S <pacote> para atualizá-los (atualize apenas um por vez)\033[m" else echo -e "\n\033[32;1mTodos os pacotes estão atualizados\033[m" fi exit 0 } while getopts ":hS:UC" opcao do case "$opcao" in S) instalar ;; U) atualizar ;; C) limpar_cache ;; h) echo "$AJUDA" exit 0 ;; \?) echo "Opção inválida: $OPTARG (use -h para obter ajuda)" exit 1 ;; :) echo "Faltou o nome do pacote a ser instalado" exit 1 ;; esac done echo "Nenhuma operação definida (use -h para obter ajuda)" exit 0
Não analisei a fundo o seu script, mas eu gostei do código. Às vezes as pessoas criticam quando alguém "reinventa a roda", pois você poderia usar perfeitamente o yaourt ou outro helper, mas eu acho essas iniciativas legais, principalmente se você se sente mais confortável em usar o seu próprio código. :-)
Por favor coloque [RESOLVIDO] no título do tópico quando o seu problema for solucionado.
Offline
fernandes escreveu:@estevao
Seu script ficou muito bom, na verdade eu acho que deveria ser uma função já do próprio pacman fazer esse papel ...
Sei que não é uma super coisa, mas estou mandando ele traduzido em pt_BR, caso alguém queira usar seu script e tenha dificuldades com o inglês.Link do undeps em pt_BR -> http://paste.archlinux-br.org/1595
Muito legal a tradução fernandes, valeu :-)
EDIT: fiz uma nova versão do script com suporte ao sudo, se vc quiser traduzir essa também....
Manda o link do novo script que será um prazer traduzi-lo...
No aguardo!
Antonio Fernandes C. Neto
http://softwarelivre.org/fernandes
Offline
estevao escreveu:fernandes escreveu:@estevao
Seu script ficou muito bom, na verdade eu acho que deveria ser uma função já do próprio pacman fazer esse papel ...
Sei que não é uma super coisa, mas estou mandando ele traduzido em pt_BR, caso alguém queira usar seu script e tenha dificuldades com o inglês.Link do undeps em pt_BR -> http://paste.archlinux-br.org/1595
Muito legal a tradução fernandes, valeu :-)
EDIT: fiz uma nova versão do script com suporte ao sudo, se vc quiser traduzir essa também....
Manda o link do novo script que será um prazer traduzi-lo...
No aguardo!
Oi fernandes, eu coloquei a nova versão no primeiro post deste tópico: http://forum.archlinux-br.org/viewtopic … 984#p17984.
Abraço.
Por favor coloque [RESOLVIDO] no título do tópico quando o seu problema for solucionado.
Offline
Estevao, dei uma olhada no seu script e tá bem bacana.
Agora só pra ficar melhor, dei uma otimizada no seu código conforme segue abaixo.
Retirei o excesso de "echo", adicionei uma variável PACMAN que armazena o caminho do pacman para quando você precisar executar o pacman é só chamar a variável $PACMAN ao invés do comando /usr/bin/pacman. Acrescentei também uma opção mais viável de verificar se o script está sendo executado como root/sudo ou não.
Se não entender as modificações que fiz é só perguntar blz?!
#!/bin/sh
# undeps - This script lists and removes UNneeded DEPendencieS on Arch Linux
# Options: -l <list> | -r <remove> | -ra <remove all - recursive>
# Estêvão Valadão - [email protected]
loopflag=0
PACMAN=$(which pacman)
function VerficaPermissao() {
if [ $(whoami) != 'root' ]; then
echo -e "\r\n-> Erro! o script deve ser executado com privilégios administrativos. \n"
exit 0
fi
}
case "$1" in
-l)
echo -e "
\r** DEPENDÊNCIAS DESNECESSÁRIAS **
\r-> Verificando dependências...
"
$PACMAN -Qdtq
if [ "$?" = 1 ]; then
echo -e "\n-> Seu sistema não possui dependências desnecessárias. \n"
fi
;;
-r)
VerficaPermissao
while [ "$loopflag" = 0 ]
do
echo -e "
\r** DEPENDÊNCIAS DESNECESSÁRIAS **
\r-> Verificando dependências...
"
$PACMAN -Qdtq
if [ "$?" = 0 ]; then
echo ""
echo -n "Deseja remover esses pacotes? [Y/n] "
read option
if [ "$option" = "y" ] || [ "$option" = "" ]; then
$PACMAN -Rn $(pacman -Qdtq)
echo -e "-> Dependência(s) desnecessária(s) removida(s) com sucesso!. \n"
elif [ "$option" = "n" ]; then
exit 0
fi
else
loopflag=1
echo -e "-> Seu sistema não possui dependências desnecessárias. \n"
fi
done
;;
-ra)
VerficaPermissao
$PACMAN -Qdtq > /dev/null
if [ "$?" = 1 ]; then
echo -e "
\r** DEPENDÊNCIAS DESNECESSÁRIAS **
\r-> Verificando dependências...
\r-> Seu sistema não possui dependências desnecessárias.
"
else
echo -e "\n** DEPENDÊNCIAS DESNECESSÁRIAS - RECUSIVO **"
echo -n "-> "
$PACMAN -Rsn $(pacman -Qdtq)
fi
;;
*)
echo "Uso: $0 {-l <list> | -r <remove> | -ra <remove all - recursive>}"
echo ""
esac
exit 0
Última edição por phillipe (24/11/2010 10:42:52)
"NÃO HÁ NADA COMO A LIBERDADE." (Nelson Mandela)
Offline
Estevao, dei uma olhada no seu script e tá bem bacana.
Agora só pra ficar melhor, dei uma otimizada no seu código conforme segue abaixo.
Retirei o excesso de "echo", adicionei uma variável PACMAN que armazena o caminho do pacman para quando você precisar executar o pacman é só chamar a variável $PACMAN ao invés do comando /usr/bin/pacman. Acrescentei também uma opção mais viável de verificar se o script está sendo executado como root/sudo ou não.
Se não entender as modificações que fiz é só perguntar blz?!#!/bin/sh # undeps - This script lists and removes UNneeded DEPendencieS on Arch Linux # Options: -l <list> | -r <remove> | -ra <remove all - recursive> # Estêvão Valadão - [email protected] loopflag=0 PACMAN=$(which pacman) function VerficaPermissao() { if [ $(whoami) != 'root' ]; then echo -e "\r\n-> Erro! o script deve ser executado com privilégios administrativos. \n" exit 0 fi } case "$1" in -l) echo -e " \r** DEPENDÊNCIAS DESNECESSÁRIAS ** \r-> Verificando dependências... " $PACMAN -Qdtq if [ "$?" = 1 ]; then echo -e "\n-> Seu sistema não possui dependências desnecessárias. \n" fi ;; -r) VerficaPermissao while [ "$loopflag" = 0 ] do echo -e " \r** DEPENDÊNCIAS DESNECESSÁRIAS ** \r-> Verificando dependências... " $PACMAN -Qdtq if [ "$?" = 0 ]; then echo "" echo -n "Deseja remover esses pacotes? [Y/n] " read option if [ "$option" = "y" ] || [ "$option" = "" ]; then $PACMAN -Rn $(pacman -Qdtq) echo -e "-> Dependência(s) desnecessária(s) removida(s) com sucesso!. \n" elif [ "$option" = "n" ]; then exit 0 fi else loopflag=1 echo -e "-> Seu sistema não possui dependências desnecessárias. \n" fi done ;; -ra) VerficaPermissao $PACMAN -Qdtq > /dev/null if [ "$?" = 1 ]; then echo -e " \r** DEPENDÊNCIAS DESNECESSÁRIAS ** \r-> Verificando dependências... \r-> Seu sistema não possui dependências desnecessárias. " else echo -e "\n** DEPENDÊNCIAS DESNECESSÁRIAS - RECUSIVO **" echo -n "-> " $PACMAN -Rsn $(pacman -Qdtq) fi ;; *) echo "Uso: $0 {-l <list> | -r <remove> | -ra <remove all - recursive>}" echo "" esac exit 0
Oi phillipe, gostei das alterações, principalmente da remoção do excesso de echo. Mas tem um problema, a verificação de root apenas avisa que o usuário precisa rodar o script com privilégios administrativos, mas ela não chama o sudo automaticamente caso o usuário tenha o sudo instalado no sistema. No meu caso se o sudo existir no sistema, ele usará o sudo automaticamente, do contrário ele mandará a mensagem de erro de falta de privilégio do próprio pacman.
Acho que os ajustes da variável $PACMAN e os do /n foram bem legais, e acredito que vai ficar legal se combinarmos aquela function VerificaPermissao com o sudo. :-)
Vou dar uma futucada hoje à noite e posto aqui pra vocês. Valeu pelas modificações :-)
PS. Fernandes, segura a tradução aí porque a galera tem colaborado sempre, então quando o script estiver mais maduro você manda bala. Valeu.
Por favor coloque [RESOLVIDO] no título do tópico quando o seu problema for solucionado.
Offline
Oi phillipe, gostei das alterações, principalmente da remoção do excesso de echo. Mas tem um problema, a verificação de root apenas avisa que o usuário precisa rodar o script com privilégios administrativos, mas ela não chama o sudo automaticamente caso o usuário tenha o sudo instalado no sistema. No meu caso se o sudo existir no sistema, ele usará o sudo automaticamente, do contrário ele mandará a mensagem de erro de falta de privilégio do próprio pacman.
Acho que os ajustes da variável $PACMAN e os do /n foram bem legais, e acredito que vai ficar legal se combinarmos aquela function VerificaPermissao com o sudo. :-)
Vou dar uma futucada hoje à noite e posto aqui pra vocês. Valeu pelas modificações :-)
Pronto amigão... Agora tá funcionando conforme você falou.
#!/bin/sh
# undeps - This script lists and removes UNneeded DEPendencieS on Arch Linux
# Options: -l <list> | -r <remove> | -ra <remove all - recursive>
# Estêvão Valadão - [email protected]
loopflag=0
PACMAN=$(which pacman 2> /dev/null)
SUDO=$(which sudo 2> /dev/null)
function VerficaPermissao() {
if [ ! -z $SUDO ]; then
PACMAN="sudo $(which pacman)"
elif [ $(whoami) != 'root' ]; then
echo -e "\r\n-> Erro! o script deve ser executado com privilégios administrativos. \n"
exit 0
fi
}
case "$1" in
-l)
echo -e "
\r** DEPENDÊNCIAS DESNECESSÁRIAS **
\r-> Verificando dependências...
"
$PACMAN -Qdtq
if [ "$?" = 1 ]; then
echo -e "\n-> Seu sistema não possui dependências desnecessárias. \n"
fi
;;
-r)
VerficaPermissao
while [ "$loopflag" = 0 ]
do
echo -e "
\r** DEPENDÊNCIAS DESNECESSÁRIAS **
\r-> Verificando dependências...
"
$PACMAN -Qdtq
if [ "$?" = 0 ]; then
echo ""
echo -n "Deseja remover esses pacotes? [Y/n] "
read option
if [ "$option" = "y" ] || [ "$option" = "" ]; then
$PACMAN -Rn $(pacman -Qdtq)
echo -e "-> Dependência(s) desnecessária(s) removida(s) com sucesso!. \n"
elif [ "$option" = "n" ]; then
exit 0
fi
else
loopflag=1
echo -e "-> Seu sistema não possui dependências desnecessárias. \n"
fi
done
;;
-ra)
VerficaPermissao
$PACMAN -Qdtq > /dev/null
if [ "$?" = 1 ]; then
echo -e "
\r** DEPENDÊNCIAS DESNECESSÁRIAS **
\r-> Verificando dependências...
\r-> Seu sistema não possui dependências desnecessárias.
"
else
echo -e "\n** DEPENDÊNCIAS DESNECESSÁRIAS - RECUSIVO **"
echo -n "-> "
$PACMAN -Rsn $(pacman -Qdtq)
fi
;;
*)
echo "Uso: $0 {-l <list> | -r <remove> | -ra <remove all - recursive>}"
echo ""
esac
exit 0
Última edição por phillipe (24/11/2010 11:02:40)
"NÃO HÁ NADA COMO A LIBERDADE." (Nelson Mandela)
Offline
Oi phillipe, gostei das alterações, principalmente da remoção do excesso de echo. Mas tem um problema, a verificação de root apenas avisa que o usuário precisa rodar o script com privilégios administrativos, mas ela não chama o sudo automaticamente caso o usuário tenha o sudo instalado no sistema. No meu caso se o sudo existir no sistema, ele usará o sudo automaticamente, do contrário ele mandará a mensagem de erro de falta de privilégio do próprio pacman.
Acho que os ajustes da variável $PACMAN e os do /n foram bem legais, e acredito que vai ficar legal se combinarmos aquela function VerificaPermissao com o sudo. :-)
Vou dar uma futucada hoje à noite e posto aqui pra vocês. Valeu pelas modificações :-)
Pronto amigão... Agora tá funcionando conforme você falou.
#!/bin/sh # undeps - This script lists and removes UNneeded DEPendencieS on Arch Linux # Options: -l <list> | -r <remove> | -ra <remove all - recursive> # Estêvão Valadão - [email protected] loopflag=0 PACMAN=$(which pacman 2> /dev/null) SUDO=$(which sudo 2> /dev/null) function VerficaPermissao() { if [ ! -z $SUDO ]; then PACMAN="sudo $(which pacman)" elif [ $(whoami) != 'root' ]; then echo -e "\r\n-> Erro! o script deve ser executado com privilégios administrativos. \n" exit 0 fi } case "$1" in -l) echo -e " \r** DEPENDÊNCIAS DESNECESSÁRIAS ** \r-> Verificando dependências... " $PACMAN -Qdtq if [ "$?" = 1 ]; then echo -e "\n-> Seu sistema não possui dependências desnecessárias. \n" fi ;; -r) VerficaPermissao while [ "$loopflag" = 0 ] do echo -e " \r** DEPENDÊNCIAS DESNECESSÁRIAS ** \r-> Verificando dependências... " $PACMAN -Qdtq if [ "$?" = 0 ]; then echo "" echo -n "Deseja remover esses pacotes? [Y/n] " read option if [ "$option" = "y" ] || [ "$option" = "" ]; then $PACMAN -Rn $(pacman -Qdtq) echo -e "-> Dependência(s) desnecessária(s) removida(s) com sucesso!. \n" elif [ "$option" = "n" ]; then exit 0 fi else loopflag=1 echo -e "-> Seu sistema não possui dependências desnecessárias. \n" fi done ;; -ra) VerficaPermissao $PACMAN -Qdtq > /dev/null if [ "$?" = 1 ]; then echo -e " \r** DEPENDÊNCIAS DESNECESSÁRIAS ** \r-> Verificando dependências... \r-> Seu sistema não possui dependências desnecessárias. " else echo -e "\n** DEPENDÊNCIAS DESNECESSÁRIAS - RECUSIVO **" echo -n "-> " $PACMAN -Rsn $(pacman -Qdtq) fi ;; *) echo "Uso: $0 {-l <list> | -r <remove> | -ra <remove all - recursive>}" echo "" esac exit 0
Agora sim, parece ter ficado show, vou testá-lo depois ;-)
Está usando aí no seu arch?
Por favor coloque [RESOLVIDO] no título do tópico quando o seu problema for solucionado.
Offline
Agora sim, parece ter ficado show, vou testá-lo depois ;-)
Está usando aí no seu arch?
Estou sim! Muito bacana!
Parabéns pela iniciativa e precisando é só falar cum nóis!
"NÃO HÁ NADA COMO A LIBERDADE." (Nelson Mandela)
Offline
estevao escreveu:Agora sim, parece ter ficado show, vou testá-lo depois ;-)
Está usando aí no seu arch?
Estou sim! Muito bacana!
Parabéns pela iniciativa e precisando é só falar cum nóis!
Valeu
Por favor coloque [RESOLVIDO] no título do tópico quando o seu problema for solucionado.
Offline
@estevao
Segue o script atualizado para usar o SUDO em pt_BR.
Link: http://paste.archlinux-br.org/1597
Valeus!
Antonio Fernandes C. Neto
http://softwarelivre.org/fernandes
Offline
@estevao
Segue o script atualizado para usar o SUDO em pt_BR.
Link: http://paste.archlinux-br.org/1597
Valeus!
Valeu fernandes. Eu vou acabar fazendo mais algumas modificações mas vou disponibilizar também uma versão pt_BR baseada na sua. Abraço.
Por favor coloque [RESOLVIDO] no título do tópico quando o seu problema for solucionado.
Offline
#!/bin/bash
# Autor: J
DIR=/var/log/
FILES=$(ls $DIR | cut -d '' -f1)
echo ":: Iniciando limpeza"
for FILE in $FILES
do
if [ -f $DIR$FILE ]
then
if [ -s $DIR$FILE ]
then
cat /dev/null > $DIR$FILE
echo ":: $FILE foi limpo"
fi
fi
done
Fiz esse script para limpar os logs.
Porque, antes, eu utilizava varios "cat /dev/null > ..." em um arquivo.
Última edição por J~ (05/05/2011 20:07:25)
Offline
Boas!!!
Eu uso esse, não foi eu que fiz (o autor está no script), catei na wiki do Arch e funciona perfeitamente para mim. Depois vou testar o do Estevão.
#!/bin/bash
#-*- coding: utf-8 -*-
#### Limpador de cache, logs, pacotes desnecessários e arquivos de backup
## Autor: Renan Tomal Fernandes
## E-mail: renan arroba kauamanga ponto com ponto br
## Última alteração: 2009-11-06
## Depende de:
## coreutils
## pacman
. /etc/rc.conf
. /etc/rc.d/functions
function limpa_logs() {
_logs_dir=/var/log
log "Pasta de logs:" 1
log "Antes: $(du -sh "$_logs_dir")" 2
find "$_logs_dir" |
while read line; do
if [ -f "$line" ]; then
echo '' > "$line"
fi
done
log "Depois: $(du -sh "$_logs_dir")" 2
return 0
}
function limpa_pacotes_desnecessarios() {
log "Pacotes desnecessários:" 1
_packages=$(pacman -Qdtq)
if [ -n "$_packages" ]; then
(pacman -Rns $_packages && log "$(echo $_packages | wc -l) pacotes removidos($_packages)" 2) ||
(log "Falha ao rodar o seguinte comando: pacman -Rns $_packages" 2 && return 1)
else
log "Nenhum pacote desnecessário encontrado" 2
fi
return 0
}
function limpa_cache_pacman(){
log "Cache do pacman:" 1
log "Antes:" 2
log "Tamanho: $(du -sh /var/cache/pacman/pkg/)" 3
log "Número de arquivos: $(ls /var/cache/pacman/pkg | wc -l)" 3
pacman -Sc --noconfirm >/dev/null 2>&1
if [ $? != 0 ]; then
log "Houve um erro ao executar: pacman -Sc --noconfirm" 2
return 1
fi
log "Depois:" 2
log "Tamanho: $(du -sh /var/cache/pacman/pkg/)" 3
log "Número de arquivos: $(ls /var/cache/pacman/pkg | wc -l)" 3
return 0
}
function limpa_yaourtbuild() {
log "yaourt-build" 1
if [ -d /var/abs/local/yaourtbuild/* ]; then
log "Antes: $(du -sh /var/abs/local/yaourtbuild/)" 2
ls /var/abs/local/yaourtbuild/* |
while read line; do
if [ $INTERACTIVE == 1 ]; then
question "Apagar $line?"
if [ $question == 1 ]; then
rm -rf "$line"
fi
else
rm -rf "$line"
fi
done
log "Depois: $(du -sh /var/abs/local/yaourtbuild/)" 2
else
log "Nada encontrado" 2
fi
return 0
}
function limpa_yaourttmp(){
log "yaourt-tmp" 1
if [ -d /tmp/yaourt-tmp-* ]; then
log "Antes: $(du -sh /tmp)" 2
rm -rf /tmp/yaourt-tmp-*
log "Depois: $(du -sh /tmp)" 2
else
log "Nada encontrado" 2
fi
return 0
}
function limpa_backups(){
log "Backups:" 1
find / -iname "*~" -o -iname "*.bak" -o -iname "*.tmp" > /tmp/bkp_log
count=0
for i in $(seq 1 $(cat /tmp/bkp_log | wc -l )); do
line=$(cat /tmp/bkp_log | head -n $i | tail -n 1)
if [ $INTERACTIVE == 1 ]; then
if [ -f "$line" ]; then
question "Remover arquivo $line?"
else
question "Remover diretório $line?"
fi
if [ $question == 1 ]; then
rm -rf "$line"
count=$(expr $count + 1)
fi
else
rm -rf "$line"
count=$(expr $count + 1)
fi
done
rm /tmp/bkp_log
log "Arquivos removidos: $count" 2
return 0
}
function add_bkp_file(){
if [ ! -n "$arqs" ]; then
arqs="$arqs\n"
fi
arqs="$arqs$1"
}
function pega_opcoes(){
LIMPA_LOGS=1
LIMPA_PACOTES=1
LIMPA_CACHE=1
LIMPA_YAOURTBUILD=1
LIMPA_YAOURTTMP=1
LIMPA_BACKUPS=0
INTERACTIVE=0
HELP=0
VERSION=0.0.2
until [ -f "$1" -o "$1" = "--" -o -z "$1" ]
do
case "$1" in
--nologs | -l )
LIMPA_LOGS=0
;;
--nopackages | -p )
LIMPA_PACOTES=0
;;
--nocache | -c )
LIMPA_CACHE=0
;;
--noyaourtbuild | -b )
LIMPA_YAOURTBUILD=0
;;
--noyaourttmp | -t )
LIMPA_YAOURTTMP=0
;;
--clear-backups | -cb )
LIMPA_BACKUPS=1
;;
--interactive | -i )
INTERACTIVE=1
;;
--help | -h )
usage
exit 0
;;
--version | -v )
echo $VERSION
exit 0
;;
* )
usage
error "parâmetro desconhecido: $1" 1
;;
esac
shift
done
}
function error(){
echo -e "\e[1;31mERRO\e[0;31m: $1\e[m"
exit $2
}
function log(){
for((i=0;i<$2;i++)); do
log="$log "
done
log="$log $1\n"
}
function roda_comandos(){
roda_funcao limpa_logs $LIMPA_LOGS "Limpando logs" "Limpar logs?"
roda_funcao limpa_cache_pacman $LIMPA_CACHE "Limpando pacotes não instalados do cache do pacman" "Limpar pacotes não instalados do cache?"
roda_funcao limpa_yaourtbuild $LIMPA_YAOURTBUILD "Limpando yaourtbuild" "Limpar pasta de compilação do yaourt?"
roda_funcao limpa_yaourttmp $LIMPA_YAOURTTMP "Limpando yaourt-tmp" "Limpar pasta temporária do yaourt?"
roda_funcao limpa_pacotes_desnecessarios $LIMPA_PACOTES "Removendo pacotes desnecessários" "Remover pacotes desnecessários(dependências inúteis)?"
roda_funcao limpa_backups $LIMPA_BACKUPS "Limpando backups" "Remover arquivos de backups?"
}
function roda_funcao(){
if [ $2 == 1 ]; then
if [ $INTERACTIVE == 1 ]; then
question "$4"
if [ $question == 0 ]; then
return 1
fi
fi
stat_busy "$3"
$1
if [ $? == 0 ]; then
stat_done "$3"
else
stat_fail "$3"
fi
fi
}
function question(){
printf "\e[1;33m?? \e[1;37m$1 \e[1;30m[\e[1;32mS\e[1;30m/\e[1;31mN\e[1;30m]:\e[m "
read out
case "$out" in
's' | 'S' )
resp=1
;;
* )
resp=0
;;
esac
if [ "x$2" == "xecho" ]; then
echo $resp
else
question=$resp
fi
return 0
}
function usage(){
echo "cleaner versão: $VERSION"
echo " Opções:"
echo " -h | --help : Mostra essa mensagem de ajuda e sai"
echo " -v | --version : Mostra a versão do programa e sai"
echo " -l | --nologs : Não esvazia os arquivos de log"
echo " -c | --nocache : Não limpa o cache do pacman"
echo " -p | --nopackages : Não remove os pacotes desnecessários(dependências que não são mais necessárias)"
echo " -b | --noyaourtbuild : Não remove o conteudo de /var/abs/local/yaourtbuild"
echo " -t | --noyaourttmp : Não remove /tmp/yaourt-tmp-*"
echo " -cb | --clear-backups : Remove todos os *~ *.bak *.tmp de /"
echo " -i | --interactive : Modo interativo / não automático"
}
pega_opcoes [email protected]
if [ "$(whoami)" != "root" ]; then
_s=$(which sudo 2>/dev/null)
echo "É necessário rodar esse script como root. usando o seguinte comando:"
if [ -n "$_s" ]; then
echo "sudo '$0' [email protected]"
sudo "$0" [email protected]
else
echo "su -c '\"$0\" [email protected]'"
su -c "'$0' [email protected]"
fi
exit 0
fi
log "Informações" 0
roda_comandos
echo -e "$log"
## Sugestões:
## autor:
## data:
## conteúdo:
Não leve a vida tão a sério, afinal ninguém sairá vivo dela!!!
Offline
Crio este tópico para compartilharmos os scripts que usamos no dia a dia para facilitar a nossa vida. Para começar, vou postar um script que criei logo quando comecei a usar o Arch. A necessidade era deixar o meu Arch limpo, sem dependências desnecessárias.
Segue o script:
EDIT: script atualizado para suportar sudo.
#!/bin/sh # undeps - This script lists and removes UNneeded DEPendencieS on Arch Linux # Options: -l <list> | -r <remove> | -ra <remove all - recursive> # Estêvão Valadão - [email protected] loopflag=0 case "$1" in -l) echo "" echo "** UNNEEDED DEPENDENCIES **" echo "-> checking dependencies..." echo "" /usr/bin/pacman -Qdtq if [ "$?" = 1 ]; then echo "-> Your system doesn't have unneeded dependencies." fi echo "" ;; -r) while [ "$loopflag" = 0 ] do echo "" echo "** UNNEEDED DEPENDENCIES **" echo "-> checking dependencies..." echo "" /usr/bin/pacman -Qdtq if [ "$?" = 0 ]; then echo "" echo -n "Do you want to remove these packages? [Y/n] " read option if [ "$option" = "y" ] || [ "$option" = "" ]; then if [ -f /usr/bin/sudo ]; then /usr/bin/sudo /usr/bin/pacman -Rn $(pacman -Qdtq) echo "-> Unneeded dependencie(s) sucessfully removed." echo "" else /usr/bin/pacman -Rn $(pacman -Qdtq) echo "-> Unneeded dependencie(s) sucessfully removed." echo "" fi elif [ "$option" = "n" ]; then exit 0 fi else loopflag=1 echo "-> Your system doesn't have unneeded dependencies." echo "" fi done ;; -ra) /usr/bin/pacman -Qdtq > /dev/null if [ "$?" = 1 ]; then echo "" echo "** UNNEEDED DEPENDENCIES **" echo "-> checking dependencies..." echo "" echo "-> Your system doesn't have unneeded dependencies." echo "" else echo "" echo "** UNNEEDED DEPENDENCIES - RECURSIVE **" echo -n "-> " if [ -f /usr/bin/sudo ]; then /usr/bin/sudo /usr/bin/pacman -Rsn $(pacman -Qdtq) else /usr/bin/pacman -Rsn $(pacman -Qdtq) fi fi ;; *) echo "Usage: $0 {-l <list> | -r <remove> | -ra <remove all - recursive>}" echo "" esac exit 0
Utilização:
undeps -l lista as dependências desnecessárias do sistema
undeps -r remove as dependências desnecessárias por etapas
undeps -ra remove todas as dependências desnecessárias de uma só vez (recursivamente) - sou viciado neste comando :-)PS. Uma outra alternativa é criar aliases para os comandos do pacman, a desvantagem é que você deixa de ter as mensagens fornecidas pelo script.
Seu script eh uma mao na roda alex
Offline