Criação e melhoria de Shell script

Iniciado por Joseph, 19 de Março de 2012, 13:59

tópico anterior - próximo tópico

Joseph

PessoALL, recentemente criei o Shell script abaixo com a finalidade de remover arquivos "temporários" do meu sistema, estou usando o Ubuntu Precise, e o script já está totalmente funcional, mas sei que ele precisa de melhorias, e preciso da colaboração de vocês para melhorá-lo, dei ao mesmo o nome de "limpeza.sh". O que ele faz? Basicamente remove todo o conteúdo das pastas "/tmp" - Arquivos temporários, "/var/cache/apt/archives" - Arquivos baixados pelo Apt-Get ou Synaptic, "/var/lib/apt/lists" - Listas de atualização do Apt-Get ou Synaptic e finalmente do diretório "/var/log" - Logs do sistema. Necessariamente ele tem que ter a extensão ".sh", mesmo estando como executável? Em que pasta devo colocar o mesmo para que ao abrir o terminal de texto, como qualquer usuário, baste dar o comando "sudo limpeza", ao invés de "sudo sh limpeza.sh" onde estiver localizado o script?

Citar
#!/bin/bash
rm -rf -- /tmp/*
rm -rf -- /var/cache/apt/archives/*
rm -rf -- /var/lib/apt/lists/*
rm -rf -- /var/log/*

E finalmente, como faço para criar uma interface gráfica para ele, com caixa de seleção para cada item?

Abraço a todos.

bred81

#1
São perguntas bem simples. Não vou entrar no mérito de ser preciso ou não limpar os arquivos temporários (não o é) mas aqui vai:
Você pode chamar um script de duas maneiras:
sh script
ou
./script
nas pasta dele.
script
Assim são os scripts que são chamados globalmente.

Para chamar um script de forma global (como chamamos um "ls" ou "cp") você pode colocar em alguns lugares, mas vou te dizer 3, pra ficar bem organizado:
Citar/home/$USER/bin
Esse primeiro diretório é aonde você deve guardar os seus scripts pessoais. A pasta não existe, então você cria a pasta, faz o login novamente e todo script lá será chamado globalmente pelo seu usuário.
Citar/usr/bin
Nessa pasta estão todos os scripts que não precisam de permissão de root para serem executados (não esquece de ver como estão as persmissões dos arquivos lá, para não dar nada errado).
Citar/usr/sbin
Nessa pasta estão todos os scripts que precisam de permissão de root para funcioanr (no caso, o seu script).

Ah. não só scripts, programas também estão nessas pastas.

Espero ter ajudado.
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

Joseph

Obrigado bred81, removí a extensão, não é necessária, a pasta ideal é /usr/sbin, quanto aos arquivos temporários, para mim é necessário removê-los vez por outra, porque estou usando a versão de testes do Ubuntu, e estou fazendo uma remasterização customizada com meus programas, jogos, plugins e configurações pessoais, e o conteúdo dessas pastas aumenta muito o tamanho da distro, agora vou tentar fazer uma interface gráfica para o script, abraço.

bred81

sudo apt-get autoremove
sudo apt-get autoclean


Esses comandos não resolvem?
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

Joseph

Citação de: bred81 online 20 de Março de 2012, 10:37
sudo apt-get autoremove
sudo apt-get autoclean


Esses comandos não resolvem?

Uso "sudo apt-get clean", mas ele só remove os pacotes baixados e instalados, a pasta tmp, lists e log não são limpas.

bred81

/tmp é limpa a cada logout

As outras duas não sei qual a procedência!
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

raidicar

#6
------------------ Utilizando o Dialog no Terminal ----------------------------------

Passo 1 - Instale o dialog (apt-get install dialog)
Passo 2 - Abra um arquivo, copie e cole o conteúdo abaixo.

#! /bin/bash
remove=$(dialog --stdout                        \
  --title ' LIMPEZA DE TEMPORARIOS'            \
  --checklist 'O que você deseja apagar?'      \
  0 0 0                                        \
  tmp  '/tmp/*'      on                        \
  archives   '/var/cache/apt/archives/*' off   \
  list   '/var/lib/apt/lists/*'          off   \
  log    '/var/log/*'   off)


tmp1=$(echo $remove | grep tmp);
log1=$(echo $remove | grep log);
list1=$(echo $remove | grep list);
archives1=$(echo $remove | grep archives);

if [ ${#tmp1} -gt 1 ]; then
rm -f /tmp/*;
fi

if [ ${#log1} -gt 1 ]; then
 rm -f /var/log/*;
fi

if [ ${#list1} -gt 1 ]; then
 rm -f /var/lib/apt/lists/*;
fi

if [ ${#archives1} -gt 1 ]; then
 rm -f /var/cache/apt/archives/*;
fi

dialog --msgbox 'REMOCAO EFETUADA' 5 40
clear;

Passo 3 - Salve o arquivo na sua pasta /home/joseph/meuscript.sh
Passo 4 - digite no terminal o comando chmod +x /home/joseph/meuscript.sh
Passo 5 - Execute-o no terminal digitando /home/joseph/meuscript.sh

Obs1: O passo 4 pode ser substituido por sudo cp /home/nome-de-usuario/meuscript.sh /usr/bin/
Obs2: Se o passo 4 for substituído, muda o passo 5 e para executar o script agora basta digitar meuscript.sh no terminal.
Obs3: Se o script for executado como usuário normal, terá dificuldade de remover arquivos que apenas o root pode remover.
--------------------------------------------------------------------------------------------------------------------------------------------------------



------------------ Utilizando o Janelas Graficas com o Zenity ----------------------------------

Passo 1 - Instale o dialog (apt-get install zenity)
Passo 2 - Abra um arquivo, copie e cole o conteudo abaixo.
remove=$(zenity --list --checklist --title "REMOCAO DE ARQUIVOS." --text "Checkbox test." --column "" --column "DIRETORIOS" --width=300 --height=230 False "/tmp/*" False "/var/log/*" False "/var/lib/apt/lists/*" false "/var/cache/apt/archives/*")

tmp1=$(echo $remove | grep "/tmp/");
log1=$(echo $remove | grep "/log/");
list1=$(echo $remove | grep "/lists/");
archives1=$(echo $remove | grep "/archives/");

if [ ${#tmp1} -gt 1 ]; then
 rm -f /tmp/*;
fi

if [ ${#log1} -gt 1 ]; then
 rm -f /var/log/*;
fi

if [ ${#list1} -gt 1 ]; then
 rm -f /var/lib/apt/lists/*;
fi

if [ ${#archives1} -gt 1 ]; then
 rm -f /var/cache/apt/archives/*;
fi

zenity --info --text "AQUIVOS REMOVIDOS!"


Passo 3 - Salve o arquivo na sua pasta /home/joseph/meuscript2.sh
Passo 4 - digite no terminal o comando chmod +x /home/joseph/meuscript2.sh
Passo 5 - Va agora na sua pasta e execute meuscript2.sh dando um duplo clique nele.

Obs1: Se o programa for executado com usuário normal, terá dificuldade de remover arquivos que apenas o root pode remover.

Obs2:
Ambos os scripts vão remover apenas os arquivos:
 rm -f /tmp/*;
 rm -f /var/log/*;
 rm -f /var/lib/apt/lists/*;
 rm -f /var/cache/apt/archives/*

Para remover os subdiretórios dentro dos diretórios informado, caso deseje, tem de acrescentar o r antes do f.
 rm -rf /tmp/*;
 rm -rf /var/log/*;
 rm -rf /var/lib/apt/lists/*;
 rm -rf /var/cache/apt/archives/*

Para garantir a remoção mesmo, caso seja sua intenção, execute ambos os scripts como root.
Somente o root vai limpar esses diretórios.
Você pode inserir o sudo antes do rm -f para resolver essa questão, porém, o sudo pede a senha.
Na interface texto iria encher a paciência e na interface gráfica daria erro.
Para resolver isso:
como root, abra o arquivo /etc/sudoers
insira no final as linhas:
%sudo   ALL=NOPASSWD: ALL
joseph ALL=NOPASSWD: ALL

Pronto, não vai ser mais solicitada a senha para os comando:
sudo rm -rf /tmp/*;
sudo rm -rf /var/log/*;
sudo rm -rf /var/lib/apt/lists/*;
sudo rm -rf /var/cache/apt/archives/*

Ta ai, mastigadinho. Verifique o código, veja se é o que quer. Tá por sua conta agora.

Boa sorte!
Quem ama extremamente, deixa de viver em si e vive no que ama. Na vida três coisas são certas, o amor, a morte e o Linux !
Se Platão disse, então realmente sofremos de uma perigosa doença mental.

Joseph

Caramba raidicar, valeu pelo código mastigado, vou testar agora mesmo, obrigado.

Joseph

#8
Citação de: raidicar online 20 de Março de 2012, 18:11
------------------ Utilizando o Dialog no Terminal ----------------------------------

Passo 1 - Instale o dialog (apt-get install dialog)
Passo 2 - Abra um arquivo, copie e cole o conteúdo abaixo.

#! /bin/bash
remove=$(dialog --stdout                        \
  --title ' LIMPEZA DE TEMPORARIOS'            \
  --checklist 'O que você deseja apagar?'      \
  0 0 0                                        \
  tmp  '/tmp/*'      on                        \
  archives   '/var/cache/apt/archives/*' off   \
  list   '/var/lib/apt/lists/*'          off   \
  log    '/var/log/*'   off)


tmp1=$(echo $remove | grep tmp);
log1=$(echo $remove | grep log);
list1=$(echo $remove | grep list);
archives1=$(echo $remove | grep archives);

if [ ${#tmp1} -gt 1 ]; then
rm -f /tmp/*;
fi

if [ ${#log1} -gt 1 ]; then
 rm -f /var/log/*;
fi

if [ ${#list1} -gt 1 ]; then
 rm -f /var/lib/apt/lists/*;
fi

if [ ${#archives1} -gt 1 ]; then
 rm -f /var/cache/apt/archives/*;
fi

dialog --msgbox 'REMOCAO EFETUADA' 5 40
clear;

Passo 3 - Salve o arquivo na sua pasta /home/joseph/meuscript.sh
Passo 4 - digite no terminal o comando chmod +x /home/joseph/meuscript.sh
Passo 5 - Execute-o no terminal digitando /home/joseph/meuscript.sh

Obs1: O passo 4 pode ser substituido por sudo cp /home/nome-de-usuario/meuscript.sh /usr/bin/
Obs2: Se o passo 4 for substituído, muda o passo 5 e para executar o script agora basta digitar meuscript.sh no terminal.
Obs3: Se o script for executado como usuário normal, terá dificuldade de remover arquivos que apenas o root pode remover.
--------------------------------------------------------------------------------------------------------------------------------------------------------



------------------ Utilizando o Janelas Graficas com o Zenity ----------------------------------

Passo 1 - Instale o dialog (apt-get install zenity)
Passo 2 - Abra um arquivo, copie e cole o conteudo abaixo.
remove=$(zenity --list --checklist --title "REMOCAO DE ARQUIVOS." --text "Checkbox test." --column "" --column "DIRETORIOS" --width=300 --height=230 False "/tmp/*" False "/var/log/*" False "/var/lib/apt/lists/*" false "/var/cache/apt/archives/*")

tmp1=$(echo $remove | grep "/tmp/");
log1=$(echo $remove | grep "/log/");
list1=$(echo $remove | grep "/lists/");
archives1=$(echo $remove | grep "/archives/");

if [ ${#tmp1} -gt 1 ]; then
 rm -f /tmp/*;
fi

if [ ${#log1} -gt 1 ]; then
 rm -f /var/log/*;
fi

if [ ${#list1} -gt 1 ]; then
 rm -f /var/lib/apt/lists/*;
fi

if [ ${#archives1} -gt 1 ]; then
 rm -f /var/cache/apt/archives/*;
fi

zenity --info --text "AQUIVOS REMOVIDOS!"


Passo 3 - Salve o arquivo na sua pasta /home/joseph/meuscript2.sh
Passo 4 - digite no terminal o comando chmod +x /home/joseph/meuscript2.sh
Passo 5 - Va agora na sua pasta e execute meuscript2.sh dando um duplo clique nele.

Obs1: Se o programa for executado com usuário normal, terá dificuldade de remover arquivos que apenas o root pode remover.

Obs2:
Ambos os scripts vão remover apenas os arquivos:
 rm -f /tmp/*;
 rm -f /var/log/*;
 rm -f /var/lib/apt/lists/*;
 rm -f /var/cache/apt/archives/*

Para remover os subdiretórios dentro dos diretórios informado, caso deseje, tem de acrescentar o r antes do f.
 rm -rf /tmp/*;
 rm -rf /var/log/*;
 rm -rf /var/lib/apt/lists/*;
 rm -rf /var/cache/apt/archives/*

Para garantir a remoção mesmo, caso seja sua intenção, execute ambos os scripts como root.
Somente o root vai limpar esses diretórios.
Você pode inserir o sudo antes do rm -f para resolver essa questão, porém, o sudo pede a senha.
Na interface texto iria encher a paciência e na interface gráfica daria erro.
Para resolver isso:
como root, abra o arquivo /etc/sudoers
insira no final as linhas:
%sudo   ALL=NOPASSWD: ALL
joseph ALL=NOPASSWD: ALL

Pronto, não vai ser mais solicitada a senha para os comando:
sudo rm -rf /tmp/*;
sudo rm -rf /var/log/*;
sudo rm -rf /var/lib/apt/lists/*;
sudo rm -rf /var/cache/apt/archives/*

Ta ai, mastigadinho. Verifique o código, veja se é o que quer. Tá por sua conta agora.

Boa sorte!

Obrigado raidicar, efetuei apenas algumas alterações, veja como ficou:

Dialog:





Zenity:





Abraço.