Posts com Tag ‘shell’

1. Baixar arquivos da internet
Fazer download para a pasta atual todos os arquivos “html” em “pasta_ftp/arquivos_importantes/” de um determinado sitio:
wget -rnd -A *.html http://sitioabc.com.br/pasta_ftp/arquivos_importantes/

2. Copiar/mover arquivos e diretórios dentro de um mesmo servidor
a) Copiar
No comando a seguir, copiar todos os arquivos e subdiretórios da pasta origem, fazendo a criação automática dos subdiretórios necessários no destino. Neste exemplo, é preservado o máximo possível a estrutura e atributos dos arquivos originais no processo de cópia. As ligações simbólicas são mantidas, não copiando os arquivos apontados.

$ cp -a pasta_origem/* pasta_destino/

b) Mover
Agora para mover todos os arquivos e subditórios, fazendo a criação automática dos subdiretórios necessários no destino e apagando a pasta da origem, observar o comando abaixo:

$ mv pasta_origem/ pasta_destino/.

Neste caso, a pasta origem (e todos os seus arquivos e subdiretórios) serão movidos para uma pasta do mesmo nome que será criada automaticamente dentro da pasta destino indicada.

3. Copiar arquivos e diretórios entre diferentes servidores
a) Cria na pasta corrente uma nova pasta com o mesmo nome da pasta inficada do servidor remoto, e copia para esta todo o conteúdo da pasta do servidor remoto, incluindo seus subdiretórios e arquivos.
$ scp -r usuario@IP-server:/caminho-para-pasta/ .

b) Copia para a pasta corrente do servidor local todos os arquivos encontrados na pasta indicada do servidor remoto, criando os subdiretórios existentes no servidor remoto e transferindo seus arquivos.
scp -r usuario@IP-server:/caminho-para-pasta/* .

4. Criar link simbólico
Para criar um link simbólico na pasta atual “minha_pasta” chamado “nome-s” apontando para o diretorio destino “/caminho-completo/diretorio_destino” , fazer:
minha_pasta$ ln -s /caminho-completo/diretorio_destino nome-s

5. Propriedades de arquivos e diretórios:
a) Fazer todos os diretórios terem modo 755
find . -type d -exec chmod 755 {} \;

b) Fazer todos os arquivos terem modo 644
find . -type f -exec chmod 644 {} \;

c) Copiar arquivos recursivamente, mantendo a sua propriedade
cp -Rpd endereco-pasta/arquivo .
// R: copia os directorios recursivamente
// p: preserva “mode”,”ownership” e “timestamps”
// d: não segue os links simbólicos

d) Mudar a propriedade dos arquivos e pastas recursivamente (incluindo as pastas internas)
chown -R jose:jose *

6. Compactar/Desempacotar arquivos
Instale os descompactadores e os utilize segundo o algoritmo que fora compactado o arquivo:
# apt-get install tar rar unrar unzip

Compactar:
a) tar -zcpf bind.tar bind/ --totals
// compacta todo diretorio e subdiretorios a partir da pasta bind/
// z: –gzip, –gunzip –ungzip
// c: criar um novo arquivo
// f: use archive file or device ARCHIVE
// p: preserve-permissions, extrair informação sobre as permissões dos arquivos (default para o superusuário)
// –totals: imprimir no console o total de bytes processados para o arquivo;
// (obs: por default, tar é recursivo)

Descompactar:
a) arquivos .tar:                       $ tar -xvpf nomedoarquivo.tar
// x: extract files from an archive
// v: verbose (detalhar)
b) arquivos .tar.gz:                   $ tar -vzxf nomedoarquivo.tar.gz
c) arquivos .bz2:                      $ bunzip nomedoarquivo.bz2
d) arquivos tar.bz2:                 $ tar -jxvf nomedoarquivo.tar.bz2
e) arquivos rar:                        $ unrar x nomedoarquivo.rar
f) arquivos gz:                          $ gunzip -d nomedoarquivo.gz

7. Comando find
O comando FIND é utilizado para procurar por arquivos na árvore de diretórios. Isto é, ele tenta localizar o que solicitamos dentro do local que indicamos e seus subdiretórios.
a) Comandos para informar
$ find /var/www/ -name php.ini -print       Procura os arquivos chamados php.ini a partir de /var/www/
$ find /var/ -user web1 -print          Procura por todos os arquivos pertencentes ao usuário web1 a partir da pasta /var
$ find /var/www/clients/client1/web1/ -iname “*.php” | wc -l            Quantidade de arquivos PHP existentes a partir da pasta web1
$ find . -iname “*.php” | wc -l          Quantidade de arquivos PHP existentes a partir da pasta atual
$ find / -group client1 -print              Procura os arquivos que pertençam ao grupo client1 em todo o sistema
$ find . -size +2048k -print                Procura arquivos maiores que 2MB (2048kb) a partir da pasta atual
$ find / -name ‘*.zip’ -print                Procura arquivos com a extensão .zip em todo o sistema
$ find . -maxdepth 4 -name standard             Procura arquivos (ou pastas) chamado standard até quatro níveis abaixo contados da pasta atual
$ find -help                                       Para help do comando

OBS: para buscar nome independentemente de letras maiúsculas ou minúsculas, substituir o comando -name por -iname.

b) Comandos para modificar nomes de arquivos e pastas
$ find . -maxdepth 1 -name "* *" | while read i; do novo=`echo $i | tr ' ' '_'`; mv "$i" $novo; done
Este comando renomeia todos os nomes de arquivos e diretorios que estejam na pasta atual, substituindo o “espaço” existente no seu por “_”.

8. Comando locate
O comando LOCATE pesquisa em uma base de dados de nomes de arquivos por nomes que satisfaçam um determinado padrão. Ou seja, é executado a busca a partir de uma base.
Primeiro instale o aplicativo:
# apt-get install locate

A partir de agora utilize livremente os seus comandos, procurando de tempos em tempos fazer a atualização da sua base dados (com o comando updatedb):
# updatedb                          Atualizar a base de dados
$ locate config.php               Procurar por arquivos chamados config.php na base de dados.

9. Grep Recursivo
Utilize uma das formas abaixo:

$ grep -rn --color departamento *
$ grep -rn --color -e departamento *
$ grep -rn --color --include="*.php" departamento .
$ grep -rn --color --include="*.php" departamento include/staff/
$ grep --color -E "palavra1|palavra2|palavra3" nome_arquivo

onde, respectivamente, temos:
a) procura a palavra “departamento” em todos os arquivos que estão no diretório atual e subdiretórios.
b) idem anterior.
c) procura a palavra “departamento” em todos os arquivos com extensão PHP que estão no diretório atual e subdiretórios.
d) procura a palavra “departamento” em todos os arquivos com extensão PHP que estão no subdiretório include/staff e em seus subdiretórios.
e) grep que procura várias palavras simultaneamente. No caso, procura palavra1, palavra2 e palavra3 no arquivo nome_arquivo

10. Limpar as memórias cache e de swap de disco
O uso destes recursos de memória podem ser facilmente visualizados através do comando “top”. Veja o exemplo abaixo de um recorte da resposta do servidor a este comando:

#top
Swap: 2987000k total, 16420k used, 2970580k free, 387640k cached

10.1 Limpar a memória cache
Algumas vezes acontece de um servidor que roda várias aplicações acumular muito espaço em memória cache, sem necessidades reais. Na verdade, estes aplicativos “esqueceram” de desalocar estes espaços de memória após o encerramento de seu processo. Essa alocação de memória de forma exagerada deve ser liberada manualmente. Para limpar a memória cache, utilize, por exemplo, o seguinte comando:
# echo 5 > /proc/sys/vm/drop_caches

Ao se utilizar novamente do comando “top” vemos abaixo o seguinte recorte da resposta a este comando:
Swap: 2987000k total, 16420k used, 2987000k free, 69732k cached

Ou seja, o uso da memória cache caiu para cerca de 18% do que vinha sendo utilizado. Ou seja, de 387640k para 69732k.

10.2 Limpar o swap de disco
a) Identifique a partição swap de seu disco:

# fdisk -l
/dev/sda5 30030 30402 2987008 82 Linux swap / Solaris

A partição swap está indicada com a palavra “swap”.

b) Desmonte e monte novamente a partição swap
# swapoff /dev/sda5
# swapon /dev/sda5

Novamente com o comando “top” vemos abaixo um novo recorte da resposta do servidor:
Swap: 2987000k total, 0k used, 2987000k free, 69732k cached

Agora vemos que temos 0k de memória de swap de disco utilizado.

11. Comandos para visualização das tarefas em execução pelo Linux
Muito úteis para identificar, por exemplo, qual o aplicativo que está consumindo todo o processador/memória:
$ top
$ htop

12. Verificar a versão do Debian instalado
$ cat /etc/debian_version
6.0.6

13. Verificar pacotes instalados
Para o caso do Postgis:
a) Forma 1:
$ apt-cache policy postgis

postgis:
Instalado: 1.5.1-5
Candidato: 1.5.1-5
Tabela de versão:
*** 1.5.1-5 0
500 http://ftp.br.debian.org/debian/ squeeze/main i386 Packages
100 /var/lib/dpkg/status

b) Forma 2:
$ dpkg -l | grep postgis


ii postgis 1.5.1-5 geographic objects support for PostgreSQL -- common files
ii postgresql-8.4-postgis 1.5.1-5 geographic objects support for PostgreSQL 8.4

OBS: a presença do “ii” no início da linha é a indicação de que o pacote está instalado.

14. Comandos ls
a) Comando ls colorido
Usando o console, normalmente tem-se na área dos usuários comuns o resultado do comando “ls” de forma colorida. Dessa forma fica mais fácil identificar visualmente os diversos tipos de arquivos, por exemplo, aqueles que são arquivos textos, arquivos executáveis, links simbólicos, etc.

No entanto, quando se faz a autenticação como administrador (diga-se, como superusuário) o resultado do comando “ls” é mostrado sem a diferenciação de cores citada.

Para deixar também o superusuário com esta facilidade, basta descomentar as seguintes linhas dentro do arquivo /root/.bashrc:


export LS_OPTIONS='--color=auto'
alias ls='ls $LS_OPTIONS'

Pronto, da próxima vez que o superusuário se autenticar ele já terá disponível a facilidade de cores para o comando “ls”.

b) Quantidade de entradas em um diretório


$ ls | wc -l
$ ls pasta/ | wc -l

Obs: apresentará a quantidade de entradas (pastas + arquivos)

15. Alterando o editor de textos padrão

# update-alternatives --config editor

Existem 3 escolhas para a alternativa editor (disponibiliza /usr/bin/editor).
  Selecção   Caminho             Prioridade Estado
------------------------------------------------------------
* 0            /usr/bin/vim.basic   30        modo automático
  1            /bin/ed             -100       modo manual
  2            /usr/bin/mcedit      25        modo manual
  3            /usr/bin/vim.basic   30        modo manual
Pressione enter para manter a escolha actual[*], ou digite o número da selecção:

Este comando “update-alternatives” cria, remove, mantém e exibe informações sobre os links simbólicos que compõem o sistema de alternativas do Debian. Isto possibilita que vários programas que se destinam a realizar as mesmas funções ou funções semelhantes possam ser instalados em uma mesma máquina ao mesmo tempo. Por exemplo, pode existir vários editores de texto instalado ao mesmo tempo em um sistema, possibilitando a cada usuário utilizar um editor diferente.

O comando altera a entrada “editor” em /etc/alternatives/, que, para o caso de se escolher a opção “mcedit”, ficará da seguinte forma:
lrwxrwxrwx 1 root root 15 Fev 3 15:26 editor -> /usr/bin/mcedit

Este processo de mudança ficará registrada em log no arquivo /var/log/alternatives.log da seguinte forma:
2013-02-03 15:03:07 update-alternatives: link group editor updated to point to /usr/bin/mcedit

16. Localização de um comando ou arquivo executável
a) Método 1: através de “which”
“which”retorna os caminhos dos arquivos (ou links) que seriam executadas no ambiente atual. Ele faz isso através de pesquisa o caminho para arquivos executáveis ​​correspondentes aos nomes dos argumentos. “which” não segue links simbólicos.

Exemplos:
$ which ifconfig

/sbin/ifconfig

$ which php5 ifconfig

/usr/bin/php5

Método 2: através do comando interno “type”
No bash, os comandos podem ser: internos (built-in) ou externos.
i) Comandos internos:
São aqueles que estão localizados dentro do interpretador de comandos (normalmente o Bash), sendo carregados na memória RAM do computador junto com o interpretador de comandos quando o sistema operacional é iniciado. Quando executa um comando, o interpretador de comandos verifica primeiro se ele é um comando interno, e, caso não seja, é verificado se é um comando externo. Exemplos de comandos internos: cd, type, exit, echo, kill, fg, source, help.

ii) Comandos externos:
São aqueles que estão localizados no disco. Os comandos são procurados no disco usando a definição do PATH (PATH é o caminho de procura dos arquivos/comandos executaveis. Exemplos: /bin e /sbin) e executados assim que encontrados. São exemplos de comandos extermos: rm, mkdir, rmdir e cp.

type : sem opção, informa como cada nome seria interpretado se usado através de um comando.
type -a : com opção “-a”, informa todos os locais que contém o executável citado, incluindo aliases e funções.
exemplos:
$ type ab php5 ls locate which id

ab is /usr/bin/ab
php5 is /usr/bin/php5
ls is aliased to `ls –color=auto’
locate is /usr/bin/locate
which is /usr/bin/which
id is hashed (/usr/bin/id)

$ type -a ab php5 ls locate which id

ab is /usr/bin/ab
php5 is /usr/bin/php5
ls is aliased to `ls –color=auto’
ls is /bin/ls
locate is /usr/bin/locate
which is /usr/bin/which
id is /usr/bin/id

17. Imprimir as últimas linhas de um arquivo
$ tail
$ tail -f
$ tail -n 15
Que significa, na ordem mostrada acima:
1- mostrar as últimas 10 linhas;
2- mostrar as últimas linhas a medida que são “apendadas” ao arquivo.
3- mostrar as últimas 15 linhas.

OBS: veja também multitail (http://www.vanheusden.com/multitail/examples.php) – apt-get install multitail

18.Gerenciadores de Arquivos para Gnome e Xfce

18.1 Se desejar ter um painel extra na mesma janela
A maneira mais prática é com o gerenciador de arquivos “Nautilus”. Claro, há necessidade do gerenciador gráfico Gnome ou Xfce instalado.

18.2 Se desejar renomear arquivos em lote
A maneira mais prática é com o gerenciador de arquivos “Thunar”. Novamente, há necessidade do gerenciador gráfico Gnome ou Xfce instalado.
As etapas são as seguintes:
i. Marcar os arquivos a serem renomeados;
ii. Usar o menu Editar -> Renomear
Agora é só montar a regra necessária. Ao usar o botão “Renomear Arquivos” todos os arquivos serão renomeados segundo a regra estipulada.

19. Limpar a histórico de comandos
$ history -c && history -w
O primeiro comando limpa o histórico, e o segundo esvazia imediatamente o arquivo de histórico. Isto vale unicamente para o usuário em que se fez o login.
OBS: o arquivo de histórico é guardado no arquivo “.bash_history”.

20. Múltiplas conexões com SSH
Vide o post na lista Dicas-L Múltiplas conexões com SSH.

Ícone do MuttO Mutt é um aplicativo baseado em texto (para terminais) que interage com os usuários através de menus diferentes, que são na sua maioria line-/entry-based ou baseado em página. Um menu baseado em linha é o conhecido menú de “índice” (listando todas as mensagens da pasta atualmente aberta) ou o “alias” menu (permitindo-lhe selecionar os destinatários a partir de uma lista). É um aplicativo poderoso para leitura e envio de emails em sistemas operacionais UNIX/Linux.

O mutt é tão somente um MUA (“Mail User Agent”, que é a parte que o usuário enxerga para enviar e receber emails.), ou seja, ele NÃO é um MTA (“Mail Transfer Agent”, que é a parte que faz o roteamento e a transferência do mail entre hosts, ISPs, e assim por diante).

1. Instalar o Mutt
O mutt possui os pacotes mutt e mutt-patched o qual inclui alguns patches extras, como por exemplo a lista das caixas de e-mail de um dos lados da tela (direito ou esquerdo dependendo da configuração do .muttrc);

# apt-get install mutt mutt-patched

Após a instalação o mutt ainda não tem seu arquivo de configuração. Caso o mutt seja chamado pela linha de comando, este tentará ler e-mail’s da máquina local. Não há problema nisso, mas certamente não haverá e-mail a ser mostrado.

2. Os arquivos de configuração do Mutt
As configurações básicas do Mutt estão na pasta /etc/Muttrc.d/. Nesta pasta existem alguns arquivos com a extensão “.rc”. São arquivos de diretivas de configurações gerais que neste primeiro momento não necessitarão de alterações. Já na pasta /usr/share/doc/mutt existem arquivos de documentação e de exemplos. Em especial, veja os arquivos manual.txt.gz (manual completo) e o arquivo README.Debian (aqui algumas dicas de como configurar o .muttrc). Se o usuário dispor de um navegador, o manual também está disponível na forma de hipertexto em file:///usr/share/doc/mutt/html/index.html. Na subpasta /exemplos, tem, entre outros, o arquivo Muttrc.gz que deve ser olhado.

3. Configurar as diretivas gerais do Mutt
O arquivo principal de configuração do mutt é o .muttrc. Este arquivo fica na pasta raiz do usuário. O Mutt é muito configurável e muito funcional. Pode-se configurar o básico do Mutt e explorar opções mais avançadas em um outro momento.

Para ter o .muttrc funcional rapidamente, sugere-se que utilize as configurações padrões que ficam em /etc/Muttrc.d/ e se personalize para ter acesso ao servidor de email MTA do usuário. Faça isso através de um laço for da seguinte forma:

$ for i in /etc/Muttrc.d/*.rc; do cat $i >> ~/.muttrc;done

Deve ser verificado se foi gerado o arquivo .muttrc na pasta raiz do usuário, contendo as diretivas de configurações mais comuns. O próximo passo é ajustar as diretivas em .muttrc para o Mutt poder ler a caixa de e-mail do usuário, por exemplo imap do gmail.

4. Configurar as diretivas de configuração do Mutt para acesso ao Gmail

Adicione as seguintes linhas ao arquivo ~/.muttrc:

set realname="José Osório dos Reis" # Nome real para aparecer no email
set imap_user = 'usuario_gmail@gmail.com'
set imap_pass=""
set folder = "imaps://imap.gmail.com:993/"
set spoolfile = +INBOX
set imap_check_subscribed
set smtp_url = "smtp://usuario_gmail@smtp.gmail.com:587/"
set smtp_pass= ""
set sort = threads
set sort_aux = reverse-date

Note que o Mutt irá solicitar senhas para imap e smtp. As senhas também podem ser colocadas diretamente nos campos em aspas. Mas cuidado, pois fragiliza a SEGURANÇA.

As linhas seguintes completam as funcionalidades básicas do Mutt com gmail, ajustando as questões de pastas laterais, mover para lixeira, gravar e-mail enviados em sentmail, entre outras coisas:

set trash=+[Gmail]/Trash
set record="+[Gmail]/Sent Mail"
set postponed="+[Gmail]/Drafts"
set header_cache="~/.mutt/cache/headers"
set message_cachedir="~/.mutt/cache/bodies"
set certificate_file=~/.mutt/certificates
set sidebar_width=25
set sidebar_visible=yes #no
set sidebar_delim='|'
color sidebar_new yellow default
bind index \CP sidebar-prev
bind index \CN sidebar-next
bind index \CO sidebar-open

Observe que para nagegar no menu da esquerda (para selecionar a pasta de mensagens do Gmail) no Mutt, deve-se usar e . Para abrir as mensagens da pasta selecionada, deve-se usar .

5. Configurar diretivas de cores do Mutt

# colors
color normal     white black
color attachment brightyellow black
color hdrdefault cyan black
color indicator  black cyan
color markers    brightred black
color quoted     green black
color signature  cyan black
color status     brightgreen blue
color tilde      blue black
color tree       red black
color sidebar_new yellow default
color index     yellow         default  ~N      # New
color index     yellow         default  ~O      # Old
color header    yellow         default  "^from"
color header    brightgreen    default  "^from:"
color header    green      default  "^to:"
color header    green      default  "^cc:"
color header    green      default  "^date:"
color header    yellow     default  "^newsgroups:"
color header    yellow     default  "^reply-to:"
color header    brightcyan default  "^subject:"
color header    red        default  "^x-spam-rule:"
color header    yellow     default  "^x-mailer:"
color header    yellow     default  "^message-id:"
color header    yellow     default  "^Organization:"
color header    yellow     default  "^Organisation:"
color header    yellow     default  "^User-Agent:"
color header    yellow     default  "^message-id: .*pine"
color header    yellow     default  "^X-Fnord:"
color header    yellow     default  "^X-WebTV-Stationery:"
color header    yellow     default  "^X-Message-Flag:"
color header    yellow     default  "^X-Spam-Status:"
color header    yellow     default  "^X-SpamProbe:"
color header    red        default  "^X-SpamProbe: SPAM"
color body      yellow     default  "[;:]-[)/(|]"  # colorise smileys

 

6. Configurar outras diretivas do Mutt

set date_format="!%a %b %d, %Y at %I:%M:%S%p %Z"
# ordering of headers in the pager
unhdr_order *
hdr_order Date: From: To: Cc: X-Newsreader: X-Mailer: Organization: Organisation: User-Agent: X-Fnord: X-WebTV-Stationery: X-Message-Flag: Newsgroups: Reply-To: Subject:

7. Hot keys e flags
Mais comuns message index keys
Key      Description
c        change to a different mailbox
Esc c    change to a folder in read-only mode
C        copy the current message to another mailbox
Esc C    decode a message and copy it to a folder
Esc s    decode a message and save it to a folder
D        delete messages matching a pattern
d        delete the current message
F        mark as important
l        show messages matching a pattern
N        mark message as new
o        change the current sort method
O        reverse sort the mailbox
q        save changes and exit
s        save-message
T        tag messages matching a pattern
t        toggle the tag on a message
Esc t    toggle tag on entire message thread
U        undelete messages matching a pattern
u        undelete-message
v        view-attachments
x        abort changes and exit
<Return>    display-message
<Tab>    jump to the next new or unread message
@        show the author's full e-mail address
$        save changes to mailbox
/        search
Esc /    search-reverse
^L       clear and redraw the screen
^T       untag messages matching a pattern

Flat do status da mensagem:
Flag Description
D        message is deleted (is marked for deletion)
d        message has attachments marked for deletion
K        contains a PGP public key
N        message is new
O        message is old
P        message is PGP encrypted
r        message has been replied to
S        message is signed, and the signature is successfully verified
s        message is signed
!        message is flagged
*        message is tagged
n        thread contains new messages (only if collapsed)
o        thread contains old messages (only if collapsed)

8. Alguns comandos úteis via linha de comando
O comando utilizado será o mutt. Segue abaixo o exemplo:

$ cat /caminho/arquivo.txt | mutt -s "Assunto" -a /caminho/arquivoanexo fulano@dominio

Explicando:
arquivo.txt = mensagem que será inserida no corpo do e-mail
arquivoanexo = arquivo que será enviado como anexo, se necessário

Referências:
1- Arquivo de configuração do Mutt
2- Gmail: configurar clientes de email

O shell é executado no sistema controlado por variáveis de ambiente. As variáveis de ambiente ‘guardam’ informações tais como endereços de arquivos e diretórios, arquivos de configuração, etc. Estas variáveis podem ser locais ou globais. As locais são aquelas variáveis disponíveis somente pelo shell corrente e que não está sendo acessado por subprocessos do sistema; as variáveis globais são as que estão disponíveis tanto para o shell corrente como para os subprocessos que fazem uso delas. Exemplo de variáveis:

HOME – Esta variável identifica o diretório do usuário doméstico. Para saber qual é o seu diretório HOME use o comando “echo $HOME”;
PATH – Esta é a variável de ambiente que define quais diretórios a pesquisar e a ordem na qual eles são pesquisados para encontrar um determinado comando. Para saber seu valor use o comando “echo $PATH”.

Comandos úteis:

$ echo $HOME ; mostra qual é o diretório HOME do usuário corrente
$ echo $PATH : mostra como o sistema faz uma pesquisa para encontrar um determinado comando
$ printenv ; mostra as variáveis globais e seus valores
# http_proxy=”” ; atribui o valor vazio a variável http_proxy
# export http_proxy=http://10.0.0.15:3128 ; atribui o valor http://10.0.0.15:3128 a variável http_proxy e torna ela global
# unset http_proxy ; para deletar uma variável de ambiente

Para ver mais:
1- Trabalhando com shell e variáveis de ambiente
2- Usando variáveis de ambiente
3- Guia Foca – variáveis de ambiente