Autor Tópico: Criação e melhoria de Shell script  (Lida 4722 vezes)

Offline Joseph

  • Usuário Ubuntu
  • *
  • Mensagens: 793
    • Ver perfil
Criação e melhoria de Shell script
« Online: 19 de MAR?O de 2012, 13:59 »
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.

Offline bred81

  • Usuário Ubuntu
  • *
  • Mensagens: 971
  • HAN?!
    • Ver perfil
Re: Criação e melhoria de Shell script
« Resposta #1 Online: 19 de MAR?O de 2012, 16:35 »
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:
Código: [Selecionar]
sh scriptou
Código: [Selecionar]
./scriptnas pasta dele.
Código: [Selecionar]
scriptAssim 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.
« Última modificação: 19 de MAR?O de 2012, 16:37 por bred81 »
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

Offline Joseph

  • Usuário Ubuntu
  • *
  • Mensagens: 793
    • Ver perfil
Re: Criação e melhoria de Shell script
« Resposta #2 Online: 19 de MAR?O de 2012, 17:33 »
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.

Offline bred81

  • Usuário Ubuntu
  • *
  • Mensagens: 971
  • HAN?!
    • Ver perfil
Re: Criação e melhoria de Shell script
« Resposta #3 Online: 20 de MAR?O de 2012, 10:37 »
Código: [Selecionar]
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...

Offline Joseph

  • Usuário Ubuntu
  • *
  • Mensagens: 793
    • Ver perfil
Re: Criação e melhoria de Shell script
« Resposta #4 Online: 20 de MAR?O de 2012, 12:49 »
Código: [Selecionar]
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.

Offline bred81

  • Usuário Ubuntu
  • *
  • Mensagens: 971
  • HAN?!
    • Ver perfil
Re: Criação e melhoria de Shell script
« Resposta #5 Online: 20 de MAR?O de 2012, 12:52 »
/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...

Offline raidicar

  • Usuário Ubuntu
  • *
  • Mensagens: 576
  • Quad Shot of Ubuntu
    • Ver perfil
Re: Criação e melhoria de Shell script
« Resposta #6 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.
Código: [Selecionar]
#! /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.
Código: [Selecionar]
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!
« Última modificação: 20 de MAR?O de 2012, 18:36 por raidicar »
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.

Offline Joseph

  • Usuário Ubuntu
  • *
  • Mensagens: 793
    • Ver perfil
Re: Criação e melhoria de Shell script
« Resposta #7 Online: 20 de MAR?O de 2012, 20:49 »
Caramba raidicar, valeu pelo código mastigado, vou testar agora mesmo, obrigado.

Offline Joseph

  • Usuário Ubuntu
  • *
  • Mensagens: 793
    • Ver perfil
Re: Criação e melhoria de Shell script
« Resposta #8 Online: 20 de MAR?O de 2012, 22:01 »
------------------ 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.
Código: [Selecionar]
#! /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.
Código: [Selecionar]
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.
« Última modificação: 20 de MAR?O de 2012, 22:04 por Joseph »