Bash – comandos úteis

Publicado: 15/10/2012 em Linux, Programação, Serviços IP
Tags:, ,

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.

Deixe um comentário, pois isto é muito motivante para continuarmos este trabalho

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s