-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Jaboatão dos Guararapes, PE, 10 de dezembro de 2015. ==================== ==================== Assunto: navegador Mozilla Firefox ==================== ==================== Problema: ao executar o aplicativo, surgiu a seguinte mensagem: Falhou ao executar o comando "/usr/bin/firefox-bin". Falha ao executar processo filho "/usr/bin/firefox-bin" (Arquivo ou diretório não encontrado) ==================== ==================== Executando o aplicativo via terminal de comandos: Saída do comando </usr/local/firefox/firefox 2> log.txt>: bash: /usr/local/firefox/firefox: Arquivo ou diretório não encontrado ==================== ==================== Saída do comando <stat /usr/local/firefox/firefox>: File: “/usr/local/firefox/firefox” Size: 164264 Blocks: 328 IO Block: 4096 arquivo comum Device: 803h/2051d Inode: 133456 Links: 1 Access: (0755/-rwxr-xr-x) Uid: ( 1000/jamenson) Gid: ( 1000/jamenson) Access: 2015-12-10 23:37:31.555764913 -0300 Modify: 2015-10-29 20:34:00.000000000 -0300 Change: 2015-12-10 23:36:36.377659502 -0300 Birth: - ==================== ==================== O diretório de perfil padrão (aquele dentro do diretório de trabalho do usuário) não existe; foi deletado. Como criar manualmente tal diretório? Existe um gerenciador para criar automaticamente perfis. Seria essa a causa da falha? Em pesquisa na rede mundial de computadores, constatou-se que o perfil é automaticamente criado quando da primeira execução do aplicativo. ==================== ==================== A solução do problema: baixar a versão 64 bits do aplicativo. O problema é que estava-se executando a versão 32 bits em um sistema operacional de 64 bits. Lamentavelmente a mensagem de erro emitida pelo aplicativo não dá qualquer pista no sentido da solução do problema. Deveria o aplicativo conter uma mensagem mais explicativa! ==================== ==================== Jamenson Ferreira Espindula de Almeida Melo Usuário GNU/Linux nº 166197 https://linuxcounter.net/cert/166197.png Impressão digital da chave: 234D 1914 4224 7C53 BD13 6855 2AE0 25C0 08A8 6180 -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.26 (GNU/Linux) iQEcBAEBCAAGBQJWalfeAAoJECrgJcAIqGGAiAoIAKhqLkg2D5qK66pOsjc8ZyEs y+tJxTtSZYLe50zoYYFN01aXyIwc24H7vILShZErdTYv6Bh2NuTY9qtMTzT/EcBQ nZJOwmJzDFxiGHo5HHJeCPNgn8egC6FGy+FoH/Nzgc1gLHQe820NsjVMS8KlZYW5 VPlFtD44om1r8XDow2dqBgOGeb8NwpmNzunanxRZKia7ePeZgjsssp3Oy2LEyzkI mYadGM7QsuuGxcUSS/KM4AJeJc8YmTZGodrn8l5bwh6uDbpcg3445AYIhSt+K3db Uka1lLm2yW3J37DYGvq47qUnvJdgk01UQ4i9+k1NVB5O8h1fPkvYQfnBRLLqucs= =HJJj -----END PGP SIGNATURE-----
sexta-feira, 11 de dezembro de 2015
Navegador Mozilla Firefox
segunda-feira, 25 de maio de 2015
35 Exemplos Práticos do Comando Find do Linux
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Jaboatão dos Guararapes, PE, Brasil, 25 de maio de 2015.
Assunto: tradução livre de artigo acerca do comando "find"
Abaixo está uma livre tradução da postagem de autoria de Ravi Saive
acerca do comando "find" do GNU/Linux.
- --------------- Início da Tradução ---------------
35 Exemplos Práticos do Comando Find do Linux
por Ravi Saive - Atualização mais recente: 03 de janeiro de 2015.
Disponível em:
<http://www.tecmint.com/35-practical-examples-of-linux-find-command/>.
Acesso em: 24 maio 2015. 20:04:20 UTC.
O comando "find" do GNU/Linux é um dos mais importantes e mais
utilizados comandos em sistemas GNU/Linux. O comando "find" é
utilizado para procurar e localizar lista de arquivos e diretórios
baseados em condições que você especifica para arquivos que conferem
com os argumentos. O comando "find" pode ser utilizado em uma
variedade de condições como encontrar arquivos por permissões,
usuários, grupos, tipo do arquivo, data, tamanho e outros critérios
possíveis.
Ao longo deste artigo se estará compartilhando experiências de
dia-a-dia com o comando "find" do GNU/Linux e a utilização dele na
forma de exemplos. Neste artigo se mostrará os 35 exemplos de
comandos "find" mais utilizados no GNU/Linux. O artigo foi divido em
cinco partes, iniciando do básico até a utilização avançada do
comando "find".
1. Parte I: Comandos "find" básicos para encontrar arquivos por nomes
2. Parte II: Encontre arquivos baseados nas permissões deles
3. Parte III: Procure por arquivos baseado em proprietários e grupos
4. Parte IV: Encontre arquivos e diretórios baseados em data e horário
5. Parte V: Encontre arquivos e diretórios baseados em tamanho
Parte I: Comandos "find" básicos para encontrar arquivos por nomes
1. Encontre arquivos utilizando nome no diretório atual
Encontre todos os arquivos cujos nomes são "tecmint.txt" no diretório
de trabalho atual.
# find . -name tecmint.txt
./tecmint.txt
- ------------------------------
- ------------------------------
2. Encontre arquivos sob o diretório "home"
Encontre todos os arquivos sob o diretório /home com nome
"tecmint.txt".
# find /home -name tecmint.txt
/home/tecmint.txt
- ------------------------------
- ------------------------------
3. Encontre arquivos utilizando nome e ignorando a diferença entre
letras maiúsculas e minúsculas
Encontre todos os arquivos cujos nomes sejam "tecmint.txt" e que
contenham tanto letras maiúsculas quanto letras minúsculas no
diretório /home.
# find /home -iname tecmint.txt
./tecmint.txt ./Tecmint.txt
- ------------------------------
- ------------------------------
4. Encontre diretórios utilizando nome
Encontre todos os diretórios cujos nomes sejam "Tecmint" no diretório
/ (raiz).
# find / -type d -name Tecmint
/Tecmint
- ------------------------------
- ------------------------------
5. Encontre arquivos PHP utilizando nome
Encontre todos os arquivos php cujos nomes sejam exatamente
"tecmint.php"
# find . -type f -name tecmint.php
./tecmint.php
- ------------------------------
- ------------------------------
6. Encontre todos os arquivos PHP em um diretório
Encontre todos os arquivos cujos nomes terminam com ".php" dentro do
diretório de trabalho atual.
# find . -type f -name "*.php"
./tecmint.php ./login.php ./index.php
- ------------------------------
- ------------------------------
Parte II: Encontre arquivos baseados nas permissões deles
7. Encontre arquivos com permissões 777
Encontre todos os arquivos cujas permissões sejam 777 no diretório de
trabalho atual.
# find . -type f -perm 0777 -print
- ------------------------------
- ------------------------------
8. Encontre arquivos sem as permissões 777
Encontre todos os arquivos cujas permissões não sejam 777 no
diretório / (raiz).
# find / -type f ! -perm 777
- ------------------------------
- ------------------------------
9. Encontre arquivos SGID com permissões 644
Encontre todos os arquivos com o bit SGID configurado e cujas
permissões sejam 644.
# find / -perm 2644
- ------------------------------
- ------------------------------
10. Encontre arquivos com o bit Sticky ativo e com permissões 551
Encontre todos os arquivos contendo o bit Sticky ativo e cujas
permissões sejam 551.
# find / -perm 1551
- ------------------------------
- ------------------------------
11. Encontre arquivos SUID
Encontre todos os arquivos cujos bits SUID estejam ativos.
# find / -perm /u=s
- ------------------------------
- ------------------------------
12. Encontre arquivos SGID
Encontre todos os arquivos cujos bits SGID estejam ativos.
# find / -perm /g+s
- ------------------------------
- ------------------------------
13. Encontre arquivos somente leitura
Encontre todos os arquivos com permissão de somente leitura.
# find / -perm /u=r
- ------------------------------
- ------------------------------
14. Encontre arquivos executáveis
Encontre todos os arquivos com permissão de execução
# find / -perm /a=x
- ------------------------------
- ------------------------------
15. Encontre arquivos com permissão 777 e modifique para 644
Encontre todos os arquivos cuja permissão seja 777 e utilize o
comando "chmod" para reconfigurar a permissão para 644.
# find / -type f -perm 0777 -print -exec chmod 644 {} \;
- ------------------------------
- ------------------------------
16. Encontre diretórios com permissões 777 e modifique para 755
Encontre todos os diretórios cuja permissão de acesso seja 777 e
utilize o comando "chmod" para reconfigurar tal permissão para 755.
# find / -type d -perm 777 -print -exec chmod 755 {} \;
- ------------------------------
- ------------------------------
17. Encontre e remova um único arquivo
Para encontrar um único arquivo chamado "tecmint.txt" e removê-lo.
# find . -type f -name "tecmint.txt" -exec rm -f {} \;
- ------------------------------
- ------------------------------
18. Encontre e remova múltiplos arquivos
Para encontrar e remover múltiplos arquivos tais como ".txt" ou
".mp3", utilize:
# find . -type f -name "*.txt" -exec rm -f {} \;
OU
# find . -type f -name "*.mp3" -exec rm -f {} \;
- ------------------------------
- ------------------------------
19. Encontre todos os arquivos vazios
Para encontrar todos os arquivos vazios sob certo caminho.
# find /tmp -type f -empty
- ------------------------------
- ------------------------------
20. Encontre todos os diretórios vazios
Para encontrar todos os diretórios vazios sob certo caminho.
# find /tmp -type d -empty
- ------------------------------
- ------------------------------
21. Encontre todos os arquivos ocultos
Para encontrar todos os arquivos ocultos, utilize o comando abaixo.
# find /tmp -type f -name ".*"
- ------------------------------
- ------------------------------
Parte III: Procure por arquivos baseado em proprietários e grupos
22. Encontre um único arquivo com base no proprietário desse arquivo
Para encontrar todos ou um único arquivo chamado "tecmint.txt" sob o
diretório / (raiz) e cujo proprietário desse arquivo seja o usuário
"root".
# find / -user root -name tecmint.txt
- ------------------------------
- ------------------------------
23. Encontre todos os arquivos baseados no proprietário desses arquivos
Para encontrar todos os arquivos pertencentes ao usuário "Tecmint"
sob o diretório /home.
# find /home -user tecmint
- ------------------------------
- ------------------------------
24. Encontre todos os arquivos baseados no grupo desses arquivos
Para encontrar todos os arquivos pertencentes ao grupo "Developer"
sob o diretório /home.
# find /home -group developer
- ------------------------------
- ------------------------------
25. Encontre arquivos particulares de um usuário qualquer
Para encontrar todos os arquivos do tipo ".txt" pertencentes ao
usuário "Tecmint" sob o diretório /home.
# find /home -user tecmint -iname "*.txt"
- ------------------------------
- ------------------------------
Parte IV: Encontre arquivos e diretórios baseados em data e horário
26. Encontre todos os arquivos modificados nos últimos 50 dias
Para encontrar todos os arquivos os quais foram modificados nos
últimos 50 dias.
# find / -mtime 50
- ------------------------------
- ------------------------------
27. Encontre todos os arquivos acessados nos últimos 50 dias
Para encontrar todos os arquivos os quais foram acessados nos últimos
50 dias.
# find / -atime 50
- ------------------------------
- ------------------------------
28. Encontre todos os arquivos modificados nos últimos 50 até 100 dias
Para encontrar todos os arquivos os quais foram modificados
anteriormente aos últimos 50 dias, porém após os últimos 100 dias.
# find / -mtime +50 –mtime -100
- ------------------------------
- ------------------------------
29. Encontre arquivos modificados na última 1 hora
Para encontrar todos os arquivos os quais foram modificados na última
1 hora.
# find / -cmin -60
- ------------------------------
- ------------------------------
30. Encontre arquivos modificados na última 1 hora
Para encontrar todos os arquivos os quais foram modificados na última
1 hora.
# find / -mmin -60
- ------------------------------
- ------------------------------
31. Encontre arquivos acessados na última 1 hora
Para encontrar todos os arquivos os quais foram acessados na última 1
hora.
# find / -amin -60
- ------------------------------
- ------------------------------
Parte V: Encontre arquivos e diretórios baseados em tamanho
32. Encontre arquivos de tamanho de 50MB
Para encontrar todos os arquivos cujo tamanho seja de 50MB, utilize:
# find / -size 50M
- ------------------------------
- ------------------------------
33. Encontre arquivos com tamanhos variando entre 50MB e 100MB
Para encontrar todos os arquivos cujos tamanhos são maiores do que
50MB e menores do que 100MB.
# find / -size +50M -size -100M
- ------------------------------
- ------------------------------
34. Encontre e delete arquivos com tamanho de 100MB
Para encontrar todos os arquivos de tamanho de 100MB e deletar todos
eles utilizando para isso um único comando.
# find / -size +100M -exec rm -rf {} \;
- ------------------------------
- ------------------------------
35. Encontre arquivos específicos e delete eles
Para encontrar todos os arquivos cujos nomes terminam com ".mp3", com
mais do que 10MB de tamanho e ainda deletá-los com um único comando.
# find / -type f -name *.mp3 -size +10M -exec rm {} \;
- ------------------------------
- ------------------------------
É isso. Este post termina aqui. Em um próximo artigo serão
discutidos mais aspectos sobre outros comandos do GNU/Linux em
profundidade, com exemplos práticos. Envie a sua opinião sobre este
artigo utilizando a seção de comentários.
Ravi Saive
Comentários:
1. Ernesto diz:
21 de dezembro de 2012 as 12:03 am
O número 34 precisa ter um outro 0 no comando. O comando está
atualmente configurado para encontrar arquivos maiores do que
10MB e não 100MB conforme a descrição declara.
Resposta:
+ Ravi Saive diz:
December 21, 2012 at 11:30 am @Ernesto,
Obrigado, corrigido agora.
Resposta:
o Melvin diz:
March 23, 2013 at 8:06 pm
Ao tempo em que este post é bastante antigo. Posso
fazer duas sugestões?
34) ao invés de executar "-exec rm -rf", a opção que
menos sobrecarrega a CPU seria adicionar "-delete" ao
comando "find". Seria bom anotar e utilizar "-print"
primeiro para confirmar o que está sendo deletado ou
simplesmente o comando "find" entubado para o comando
"head" para confirmar alguns dos arquivos é um bom
passo antes de utilizar quaisquer comandos/opções
adicionais que poderiam deletar.
35) Bem parecido com o 34, uma vez que no comando está
faltando a opção de deleção.
2. robert h. williams diz:
24 de dezembro de 2012 as 11:41 am
Olá! estou contente por ter encontrado o seu site e os artigos
informativos. Pergunta: na linha de nº 3 "find /home -iname
tecmint.txt", qual é a maneira adequada de filtrar os resultados
desse comando de forma que os resultados em letras maiúsculas
sejam organizados separados dos resultados de letras minúsculas?
ex.: ……. Techmint.com Techmint.com1 Techmint.com2 …….
techmint.com techmint.com1 techmint.com2, etc., etc., etc.
Obrigado outra vez por toda a boa informação. Tenha um
Excelente, Prospero Dia! —rob
3. Mac diz:
29 de janeiro de 2013 as 9:27 pm
Você poderia explicar esta opção para mim? Eu sou novato em
linha de comando - ainda estou aprendendo.
#15 # find / -type f -perm 0777 -print -exec chmod 644 {} \;
os símbolos {} e o \
Eu estou um bocado confuso. Qualquer ajuda/conselho seria ótima.
Resposta:
+ Ravi Saive diz:
30 de janeiro de 2013 as 10:56 am
@Mac, Por favor, junte a nós no Facebook em Linux Inside
<https://www.facebook.com/pages/Linux-Inside/273296659355468>,
e você receberá a resposta para isso.
+ Melvin diz:
23 de março de 2013 as 8:13 pm
As chaves são marcadores de lugar para o arquivo que o
comando "find" encontra, e a barra invertida (\) é para que
o shell não interprete o ponto e vírgula (;), o qual
normalmente finaliza o comando.
4. vijaya diz:
02 de julho de 2013 as 1:50 pm
Isso é realmente de muita ajuda para iniciantes obrigado ...
5. Luis diz:
14 de julho de 2013 as 12:03 am
Como recuperar os arquivos eliminados com o comando:
# find / -type f -name *.mp3 -size +10M -exec ls -l {} \;
6. Joe diz:
16 de setembro de 2013 as 8:10 pm
No exemplo 22, a descrição deveria ser "sob o diretório raiz /"
ao invés de "sob o diretório /root".
Resposta:
+ Ravi Saive diz:
17 de setembro de 2013 as 1:07 pm Obrigado, corrigido no
artigo.
7. PDFformat diz:
09 de outubro de 2013 as 9:51 pm
Vocês poderiam por favor publicar as postagens no formato PDF?
Obrigado pelo post :)
8. Siddharth diz:
22 de outubro de 2013 as 2:45 am
35. Encontrar todos os arquivos do tipo ".mp3" com mais do que
10MB e deletá-los utilizando um único comando.
# find / -type f -name *.mp3 -size +10M -exec ls -l {} \;
— mas, não existe um comando para deletar os arquivos.
1) Como listar arquivos no intervalo (A001 to A090)? Suponha que
exista arquivos de logs cujos nomes iniciam com log.A001 até
log.A00nésimo ou pode ter mais.
2) Listar os arquivos criados em uma certa data.
3) Pesquisar o padrão de string "xyz" em todos os arquivos e
contar quantas vezes a string está presente em todas as
localizações.
Por favor, socorro.
9. karna diz:
13 de novembro de 2013 as 3:01 pm
No exemplo 35 penso que deveria constar "rm" ao invés de "ls -l"
Resposta:
+ Ravi Saive diz:
13 de novembro de 2013 as 5:31 pm Sim! deveria ser o comando
"rm". Obrigado, corrigido agora.
10. ram diz:
06 de dezembro de 2013 as 3:42 pm
Localizar arquivos regulares do usuário “username” e savar como
/tmp/backup
find / -user username -type f -exec cp -a ……………….
por favor complete isso ... necessário antes
11. Anudeep S P diz:
27 de janeiro de 2014 as 3:29 pm
Como nós podemos encontrar os arquivos dentro de um diretório com
respeito ao intervalo de datas e removê-los? Exemplo: eu quero
remover os arquivos criados entre “1º Jan 2012 8AM” e “5 Jan 2014
10PM”
+ Ravi Saive diz:
27 de janeiro de 2014 as 5:00 pm
Anu, por favor poste as suas questões na nossa recém
inaugurada seção "TecMint Ask" para respostas instantâneas
pelos nossos especialistas.
12. ngapakerz diz:
24 de fevereiro de 2014 as 2:53 pm
como eu utilizo estes dois como um único comando?
find -name ‘*.jpg’ -mtime +7 -exec jpegoptim {} \;
find -name ‘*.jpg’ -mtime +7 -exec chown www-data:www-data {} \;
obrigado :)
13. Rondinelli diz:
09 de março de 2014 as 7:44 pm
Incrível! muito útil!
14. Dinkar diz:
22 de abril de 2014 as 10:19 am
Como deletar um arquivo em um diretório o qual foi criado há 13
meses?
15. sameer diz:
04 de maio de 2014 as 7:00 am
esta é uma página muito útil e eu utilizei muitos destes comandos
após ver a sua página. muito obrigado por tal maravilhosa coleção
de comandos com exemplos. Tudo de bom para você
16. anonymous diz:
09 de maio de 2014 as 7:07 am
Este é um incrivelmente útil bloco de construção, obrigado!!
17. snarker diz:
03 de junho de 2014 as 7:19 pm
Você sabe, com HTML você pode converter uma tabela de conteúdos
em vínculos que levam o leitor direto a cada seção ...
simplesmente dizendo.
18. Sanjay diz:
13 de junho de 2014 as 12:31 pm
isto é muito útil para mim dado que eu sou novo em comandos de
shell. obrigado por postar artigos ...
19. Pravin shegokar diz:
08 de julho de 2014 as 8:29 pm
Alô, senhor. Eu estou trabalhando em projeto de migração. Eu
tenho uma breve questão senhor: como migrar todos os dados do
diretório "home" dos usuários para um novo sistema linux
utilizando shell script? Você vai me fornecer qualquer script ou
ideia para isso? Obrigado em antecipação.
+ Ravi Saive diz:
10 de julho de 2014 as 4:00 pm
Caro Pravin, Nós certamente fornecemos para você instruções
passo-a-passo sobre como migrar todos os usuários do Linux
de um servidor para um outro servidor utilizando alguns
truques de linha de comando. Até lá fique ligado nas
atualizações.
20. Andre diz:
02 de agosto de 2014 as 12:49 pm
Encontrar todos os arquivos maiores do que 20M no diretório
"home" e exibi-los ordenados:
find /home -type f -size +20M -exec du -h {} \; | sort -h
21. Bharath diz:
20 de agosto de 2014 as 5:16 pm
Eu quero deletar os arquivos e imprimir para o arquivo de saída
com data, hora e tamanho.
Resposta
+ Ravi Saive diz:
28 de agosto de 2014 as 3:16 pm
Bharath, eu entendo que você deveria tentar este comando:
# find /your-path -maxdepth 1 -type f -name "*.txt" >
# filestobedeleted.txt
22. Jec diz:
21 de outubro de 2014 as 6:43 pm
Olá senhor, Existe uma maneira de utilizar "find"/"locate" em uma
lista? Exemplo:
while read line do if locate “$line” then echo “Y: $line” else
echo “N: $line” fi done < $1
no meu caso, isso sempre retorna N: (line). Eu entendo que o
comando "locate" lê a minha variável como $line literalmente.
Também tentei utilizar o comando "find" aqui, mas com o mesmo
resultado. Algum ensinamento? Obrigado em antecipação. :)
Resposta
+ munaf diz:
30 de novembro de 2014 as 1:25 pm
Como descobrir o tamanho de um arquivo qualquer utilizando o
comando "find"
23. Farid Afshar diz:
02 de dezembro de 2014 as 6:22 am
Alô senhor, Eu estou tentando encontrar arquivos no GNU/Linux
utilizando o comando "find". Eu preciso procurar em um sistema
de arquivos montado nfs para listar todos os arquivos
pertencentes a um certo usuário. Exemplo:
drwxrwxr-x 2 afsharf staff 126976 Oct 9 14:20 trevor/ -rw-rw-r– 1
afsharf staff 22947599 Oct 9 08:52 troj.out -rwxr-xr-x 1 camachoe
staff 11752 Jun 25 2013 runtnav_beta_h* -rwxr-xr-x 1 camachoe
staff 11648 Jun 25 2013 runtnav_h*
Eu gostaria de encontrar arquivos pertencentes a “camachoe” no
diretório atual e sub-diretórios. Qualquer ideia de como fazer
isso utilizando o comando "find"? Esse é um sistema de arquivos
montado nfs. Obrigado em antecipação.
Resposta
+ Ravi Saive diz:
02 de dezembro de 2014 as 4:30 pm @Farid,
find . -user camachoe -ls
24. Rajkumar Yadav diz:
11 de dezembro de 2014 as 1:49 pm
Grandes artigos Obrigado!
25. Sunny diz:
22 de janeiro de 2015 as 6:07 pm
Oi, Como ver os arquivos em uma data particular? Suponha que eu
queira ver arquivos de 18 de janeiro de 2015 entre todos os
arquivos. Eu tentei +mtime, mas não está funcionando
find . -newermt 2015-01-18 -ls lrt
o comando acima não está funcionando para mim. Por favor, sugira
algo.
Resposta
+ Ravi Saive diz:
23 de janeiro de 2015 as 5:55 pm @Sunny,
Tente isto:
# find . -type f -newerat 2015-01-18 ! -newerat 2015-01-18
26. Anup diz:
11 de fevereiro de 2015 as 5:49 pm
Boa informação Tudo em um só lugar obrigado
27. Iv diz:
18 de fevereiro de 2015 as 2:35 pm
Oi. Grande artigo. Como encontrar arquivos executáveis no RHEL4 e
Solaris 9 e 10? Eu tentei com:
find / -executable -type f and find / -perm /u=x,g=x,o=x -type f
mas isso funcionou apenas no RHEL6. Obrigado!
28. md shamim diz:
27 de fevereiro de 2015 as 12:30 pm
Eu tenho de mover um diretório dentro do qual existem logs. Cada
diretório criado como 26022015 e eu quero mover o diretório,
exceto os 3 dias mais recentes.
29. Sandip Kasar diz:
07 de março de 2015 as 12:18 pm
Eu estou muito contente por você ter descrito o comando "find"
com exemplos. Obrigado mais uma vez e Mantenha postados os
assuntos relacionados com GNU/Linux.
30. Nagarjuna Reddy diz:
13 de março de 2015 as 12:01 pm
Muito Muito boa informação Comandos Find.
31. sunny desouza diz:
24 de abril de 2015 as 1:21 am
Caros Tecmints, Eu entendo que isso funciona para encontrar um
dos arquivos e para aplicar a ação executar sobre tais arquivos:
$ find / -name “error_*.txt” -exec ls -lrathi ‘{}’ “;”
porém, vocês podem fornecer exemplos acerca de múltiplos
arquivos? Como nós fazemos?
Exemplos: – se existem “find_*.txt” “list_*.csv” e mais
32. sunny desouza diz:
25 de abril de 2015 as 8:48 am
questão rápida :- Como nós encontramos um arquivo e então nós o
renomeamos (mv) esse mesmo arquivo com um único comando? A opção
-exec funciona com o mv? Algum exemplo?
Resposta:
+ Ravi Saive diz:
25 de abril de 2015 as 10:44 am @Sunny, Sim, você pode
utilizar ambos os comandos em um único, assim:
# find / -name file; mv file path or newfilename
- --------------- Fim da Tradução ---------------
Jamenson Ferreira Espindula de Almeida Melo
Usuário GNU/Linux nº 166197
https://linuxcounter.net/cert/166197.png
Impressão digital da chave:
234D 1914 4224 7C53 BD13 6855 2AE0 25C0 08A8 6180
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.26 (GNU/Linux)
iQEcBAEBCAAGBQJVYwARAAoJECrgJcAIqGGAP5YH/j0Rtz9AB8CW2USrXD5WJvUl
I15xq+PaJPLuucgtJEVMlyKP/yp6tQMB3BvO0IeZEw4Ibcv/TIvS4wp6s1bSI5CB
4h4SAgmKnNXBimwiPvggzbcS77b1Tc42zxkfWahc5lgBUzxqQ+WTnxXULl7DAxT3
TmDVl4yxtoUCJdG6muRMfWdBrbpj96w7uJjcFFmBjF5YH2Lq+9+r4hAT4/K8VkcI
OiYAn8Xlguz7XBlY4NMOhWwXVD1331TcCeHkLm73lqljvE0+OxOIffdjI3/P+nVM
6DtGU4ajASlAIRBp3bE3VztU1/5qynkEiJde5inBqaxm5JXpzb5khFbu/yLjbxw=
=0OB6
-----END PGP SIGNATURE-----
Hash: SHA256
Jaboatão dos Guararapes, PE, Brasil, 25 de maio de 2015.
Assunto: tradução livre de artigo acerca do comando "find"
Abaixo está uma livre tradução da postagem de autoria de Ravi Saive
acerca do comando "find" do GNU/Linux.
- --------------- Início da Tradução ---------------
35 Exemplos Práticos do Comando Find do Linux
por Ravi Saive - Atualização mais recente: 03 de janeiro de 2015.
Disponível em:
<http://www.tecmint.com/35-practical-examples-of-linux-find-command/>.
Acesso em: 24 maio 2015. 20:04:20 UTC.
O comando "find" do GNU/Linux é um dos mais importantes e mais
utilizados comandos em sistemas GNU/Linux. O comando "find" é
utilizado para procurar e localizar lista de arquivos e diretórios
baseados em condições que você especifica para arquivos que conferem
com os argumentos. O comando "find" pode ser utilizado em uma
variedade de condições como encontrar arquivos por permissões,
usuários, grupos, tipo do arquivo, data, tamanho e outros critérios
possíveis.
Ao longo deste artigo se estará compartilhando experiências de
dia-a-dia com o comando "find" do GNU/Linux e a utilização dele na
forma de exemplos. Neste artigo se mostrará os 35 exemplos de
comandos "find" mais utilizados no GNU/Linux. O artigo foi divido em
cinco partes, iniciando do básico até a utilização avançada do
comando "find".
1. Parte I: Comandos "find" básicos para encontrar arquivos por nomes
2. Parte II: Encontre arquivos baseados nas permissões deles
3. Parte III: Procure por arquivos baseado em proprietários e grupos
4. Parte IV: Encontre arquivos e diretórios baseados em data e horário
5. Parte V: Encontre arquivos e diretórios baseados em tamanho
Parte I: Comandos "find" básicos para encontrar arquivos por nomes
1. Encontre arquivos utilizando nome no diretório atual
Encontre todos os arquivos cujos nomes são "tecmint.txt" no diretório
de trabalho atual.
# find . -name tecmint.txt
./tecmint.txt
- ------------------------------
- ------------------------------
2. Encontre arquivos sob o diretório "home"
Encontre todos os arquivos sob o diretório /home com nome
"tecmint.txt".
# find /home -name tecmint.txt
/home/tecmint.txt
- ------------------------------
- ------------------------------
3. Encontre arquivos utilizando nome e ignorando a diferença entre
letras maiúsculas e minúsculas
Encontre todos os arquivos cujos nomes sejam "tecmint.txt" e que
contenham tanto letras maiúsculas quanto letras minúsculas no
diretório /home.
# find /home -iname tecmint.txt
./tecmint.txt ./Tecmint.txt
- ------------------------------
- ------------------------------
4. Encontre diretórios utilizando nome
Encontre todos os diretórios cujos nomes sejam "Tecmint" no diretório
/ (raiz).
# find / -type d -name Tecmint
/Tecmint
- ------------------------------
- ------------------------------
5. Encontre arquivos PHP utilizando nome
Encontre todos os arquivos php cujos nomes sejam exatamente
"tecmint.php"
# find . -type f -name tecmint.php
./tecmint.php
- ------------------------------
- ------------------------------
6. Encontre todos os arquivos PHP em um diretório
Encontre todos os arquivos cujos nomes terminam com ".php" dentro do
diretório de trabalho atual.
# find . -type f -name "*.php"
./tecmint.php ./login.php ./index.php
- ------------------------------
- ------------------------------
Parte II: Encontre arquivos baseados nas permissões deles
7. Encontre arquivos com permissões 777
Encontre todos os arquivos cujas permissões sejam 777 no diretório de
trabalho atual.
# find . -type f -perm 0777 -print
- ------------------------------
- ------------------------------
8. Encontre arquivos sem as permissões 777
Encontre todos os arquivos cujas permissões não sejam 777 no
diretório / (raiz).
# find / -type f ! -perm 777
- ------------------------------
- ------------------------------
9. Encontre arquivos SGID com permissões 644
Encontre todos os arquivos com o bit SGID configurado e cujas
permissões sejam 644.
# find / -perm 2644
- ------------------------------
- ------------------------------
10. Encontre arquivos com o bit Sticky ativo e com permissões 551
Encontre todos os arquivos contendo o bit Sticky ativo e cujas
permissões sejam 551.
# find / -perm 1551
- ------------------------------
- ------------------------------
11. Encontre arquivos SUID
Encontre todos os arquivos cujos bits SUID estejam ativos.
# find / -perm /u=s
- ------------------------------
- ------------------------------
12. Encontre arquivos SGID
Encontre todos os arquivos cujos bits SGID estejam ativos.
# find / -perm /g+s
- ------------------------------
- ------------------------------
13. Encontre arquivos somente leitura
Encontre todos os arquivos com permissão de somente leitura.
# find / -perm /u=r
- ------------------------------
- ------------------------------
14. Encontre arquivos executáveis
Encontre todos os arquivos com permissão de execução
# find / -perm /a=x
- ------------------------------
- ------------------------------
15. Encontre arquivos com permissão 777 e modifique para 644
Encontre todos os arquivos cuja permissão seja 777 e utilize o
comando "chmod" para reconfigurar a permissão para 644.
# find / -type f -perm 0777 -print -exec chmod 644 {} \;
- ------------------------------
- ------------------------------
16. Encontre diretórios com permissões 777 e modifique para 755
Encontre todos os diretórios cuja permissão de acesso seja 777 e
utilize o comando "chmod" para reconfigurar tal permissão para 755.
# find / -type d -perm 777 -print -exec chmod 755 {} \;
- ------------------------------
- ------------------------------
17. Encontre e remova um único arquivo
Para encontrar um único arquivo chamado "tecmint.txt" e removê-lo.
# find . -type f -name "tecmint.txt" -exec rm -f {} \;
- ------------------------------
- ------------------------------
18. Encontre e remova múltiplos arquivos
Para encontrar e remover múltiplos arquivos tais como ".txt" ou
".mp3", utilize:
# find . -type f -name "*.txt" -exec rm -f {} \;
OU
# find . -type f -name "*.mp3" -exec rm -f {} \;
- ------------------------------
- ------------------------------
19. Encontre todos os arquivos vazios
Para encontrar todos os arquivos vazios sob certo caminho.
# find /tmp -type f -empty
- ------------------------------
- ------------------------------
20. Encontre todos os diretórios vazios
Para encontrar todos os diretórios vazios sob certo caminho.
# find /tmp -type d -empty
- ------------------------------
- ------------------------------
21. Encontre todos os arquivos ocultos
Para encontrar todos os arquivos ocultos, utilize o comando abaixo.
# find /tmp -type f -name ".*"
- ------------------------------
- ------------------------------
Parte III: Procure por arquivos baseado em proprietários e grupos
22. Encontre um único arquivo com base no proprietário desse arquivo
Para encontrar todos ou um único arquivo chamado "tecmint.txt" sob o
diretório / (raiz) e cujo proprietário desse arquivo seja o usuário
"root".
# find / -user root -name tecmint.txt
- ------------------------------
- ------------------------------
23. Encontre todos os arquivos baseados no proprietário desses arquivos
Para encontrar todos os arquivos pertencentes ao usuário "Tecmint"
sob o diretório /home.
# find /home -user tecmint
- ------------------------------
- ------------------------------
24. Encontre todos os arquivos baseados no grupo desses arquivos
Para encontrar todos os arquivos pertencentes ao grupo "Developer"
sob o diretório /home.
# find /home -group developer
- ------------------------------
- ------------------------------
25. Encontre arquivos particulares de um usuário qualquer
Para encontrar todos os arquivos do tipo ".txt" pertencentes ao
usuário "Tecmint" sob o diretório /home.
# find /home -user tecmint -iname "*.txt"
- ------------------------------
- ------------------------------
Parte IV: Encontre arquivos e diretórios baseados em data e horário
26. Encontre todos os arquivos modificados nos últimos 50 dias
Para encontrar todos os arquivos os quais foram modificados nos
últimos 50 dias.
# find / -mtime 50
- ------------------------------
- ------------------------------
27. Encontre todos os arquivos acessados nos últimos 50 dias
Para encontrar todos os arquivos os quais foram acessados nos últimos
50 dias.
# find / -atime 50
- ------------------------------
- ------------------------------
28. Encontre todos os arquivos modificados nos últimos 50 até 100 dias
Para encontrar todos os arquivos os quais foram modificados
anteriormente aos últimos 50 dias, porém após os últimos 100 dias.
# find / -mtime +50 –mtime -100
- ------------------------------
- ------------------------------
29. Encontre arquivos modificados na última 1 hora
Para encontrar todos os arquivos os quais foram modificados na última
1 hora.
# find / -cmin -60
- ------------------------------
- ------------------------------
30. Encontre arquivos modificados na última 1 hora
Para encontrar todos os arquivos os quais foram modificados na última
1 hora.
# find / -mmin -60
- ------------------------------
- ------------------------------
31. Encontre arquivos acessados na última 1 hora
Para encontrar todos os arquivos os quais foram acessados na última 1
hora.
# find / -amin -60
- ------------------------------
- ------------------------------
Parte V: Encontre arquivos e diretórios baseados em tamanho
32. Encontre arquivos de tamanho de 50MB
Para encontrar todos os arquivos cujo tamanho seja de 50MB, utilize:
# find / -size 50M
- ------------------------------
- ------------------------------
33. Encontre arquivos com tamanhos variando entre 50MB e 100MB
Para encontrar todos os arquivos cujos tamanhos são maiores do que
50MB e menores do que 100MB.
# find / -size +50M -size -100M
- ------------------------------
- ------------------------------
34. Encontre e delete arquivos com tamanho de 100MB
Para encontrar todos os arquivos de tamanho de 100MB e deletar todos
eles utilizando para isso um único comando.
# find / -size +100M -exec rm -rf {} \;
- ------------------------------
- ------------------------------
35. Encontre arquivos específicos e delete eles
Para encontrar todos os arquivos cujos nomes terminam com ".mp3", com
mais do que 10MB de tamanho e ainda deletá-los com um único comando.
# find / -type f -name *.mp3 -size +10M -exec rm {} \;
- ------------------------------
- ------------------------------
É isso. Este post termina aqui. Em um próximo artigo serão
discutidos mais aspectos sobre outros comandos do GNU/Linux em
profundidade, com exemplos práticos. Envie a sua opinião sobre este
artigo utilizando a seção de comentários.
Ravi Saive
Comentários:
1. Ernesto diz:
21 de dezembro de 2012 as 12:03 am
O número 34 precisa ter um outro 0 no comando. O comando está
atualmente configurado para encontrar arquivos maiores do que
10MB e não 100MB conforme a descrição declara.
Resposta:
+ Ravi Saive diz:
December 21, 2012 at 11:30 am @Ernesto,
Obrigado, corrigido agora.
Resposta:
o Melvin diz:
March 23, 2013 at 8:06 pm
Ao tempo em que este post é bastante antigo. Posso
fazer duas sugestões?
34) ao invés de executar "-exec rm -rf", a opção que
menos sobrecarrega a CPU seria adicionar "-delete" ao
comando "find". Seria bom anotar e utilizar "-print"
primeiro para confirmar o que está sendo deletado ou
simplesmente o comando "find" entubado para o comando
"head" para confirmar alguns dos arquivos é um bom
passo antes de utilizar quaisquer comandos/opções
adicionais que poderiam deletar.
35) Bem parecido com o 34, uma vez que no comando está
faltando a opção de deleção.
2. robert h. williams diz:
24 de dezembro de 2012 as 11:41 am
Olá! estou contente por ter encontrado o seu site e os artigos
informativos. Pergunta: na linha de nº 3 "find /home -iname
tecmint.txt", qual é a maneira adequada de filtrar os resultados
desse comando de forma que os resultados em letras maiúsculas
sejam organizados separados dos resultados de letras minúsculas?
ex.: ……. Techmint.com Techmint.com1 Techmint.com2 …….
techmint.com techmint.com1 techmint.com2, etc., etc., etc.
Obrigado outra vez por toda a boa informação. Tenha um
Excelente, Prospero Dia! —rob
3. Mac diz:
29 de janeiro de 2013 as 9:27 pm
Você poderia explicar esta opção para mim? Eu sou novato em
linha de comando - ainda estou aprendendo.
#15 # find / -type f -perm 0777 -print -exec chmod 644 {} \;
os símbolos {} e o \
Eu estou um bocado confuso. Qualquer ajuda/conselho seria ótima.
Resposta:
+ Ravi Saive diz:
30 de janeiro de 2013 as 10:56 am
@Mac, Por favor, junte a nós no Facebook em Linux Inside
<https://www.facebook.com/pages/Linux-Inside/273296659355468>,
e você receberá a resposta para isso.
+ Melvin diz:
23 de março de 2013 as 8:13 pm
As chaves são marcadores de lugar para o arquivo que o
comando "find" encontra, e a barra invertida (\) é para que
o shell não interprete o ponto e vírgula (;), o qual
normalmente finaliza o comando.
4. vijaya diz:
02 de julho de 2013 as 1:50 pm
Isso é realmente de muita ajuda para iniciantes obrigado ...
5. Luis diz:
14 de julho de 2013 as 12:03 am
Como recuperar os arquivos eliminados com o comando:
# find / -type f -name *.mp3 -size +10M -exec ls -l {} \;
6. Joe diz:
16 de setembro de 2013 as 8:10 pm
No exemplo 22, a descrição deveria ser "sob o diretório raiz /"
ao invés de "sob o diretório /root".
Resposta:
+ Ravi Saive diz:
17 de setembro de 2013 as 1:07 pm Obrigado, corrigido no
artigo.
7. PDFformat diz:
09 de outubro de 2013 as 9:51 pm
Vocês poderiam por favor publicar as postagens no formato PDF?
Obrigado pelo post :)
8. Siddharth diz:
22 de outubro de 2013 as 2:45 am
35. Encontrar todos os arquivos do tipo ".mp3" com mais do que
10MB e deletá-los utilizando um único comando.
# find / -type f -name *.mp3 -size +10M -exec ls -l {} \;
— mas, não existe um comando para deletar os arquivos.
1) Como listar arquivos no intervalo (A001 to A090)? Suponha que
exista arquivos de logs cujos nomes iniciam com log.A001 até
log.A00nésimo ou pode ter mais.
2) Listar os arquivos criados em uma certa data.
3) Pesquisar o padrão de string "xyz" em todos os arquivos e
contar quantas vezes a string está presente em todas as
localizações.
Por favor, socorro.
9. karna diz:
13 de novembro de 2013 as 3:01 pm
No exemplo 35 penso que deveria constar "rm" ao invés de "ls -l"
Resposta:
+ Ravi Saive diz:
13 de novembro de 2013 as 5:31 pm Sim! deveria ser o comando
"rm". Obrigado, corrigido agora.
10. ram diz:
06 de dezembro de 2013 as 3:42 pm
Localizar arquivos regulares do usuário “username” e savar como
/tmp/backup
find / -user username -type f -exec cp -a ……………….
por favor complete isso ... necessário antes
11. Anudeep S P diz:
27 de janeiro de 2014 as 3:29 pm
Como nós podemos encontrar os arquivos dentro de um diretório com
respeito ao intervalo de datas e removê-los? Exemplo: eu quero
remover os arquivos criados entre “1º Jan 2012 8AM” e “5 Jan 2014
10PM”
+ Ravi Saive diz:
27 de janeiro de 2014 as 5:00 pm
Anu, por favor poste as suas questões na nossa recém
inaugurada seção "TecMint Ask" para respostas instantâneas
pelos nossos especialistas.
12. ngapakerz diz:
24 de fevereiro de 2014 as 2:53 pm
como eu utilizo estes dois como um único comando?
find -name ‘*.jpg’ -mtime +7 -exec jpegoptim {} \;
find -name ‘*.jpg’ -mtime +7 -exec chown www-data:www-data {} \;
obrigado :)
13. Rondinelli diz:
09 de março de 2014 as 7:44 pm
Incrível! muito útil!
14. Dinkar diz:
22 de abril de 2014 as 10:19 am
Como deletar um arquivo em um diretório o qual foi criado há 13
meses?
15. sameer diz:
04 de maio de 2014 as 7:00 am
esta é uma página muito útil e eu utilizei muitos destes comandos
após ver a sua página. muito obrigado por tal maravilhosa coleção
de comandos com exemplos. Tudo de bom para você
16. anonymous diz:
09 de maio de 2014 as 7:07 am
Este é um incrivelmente útil bloco de construção, obrigado!!
17. snarker diz:
03 de junho de 2014 as 7:19 pm
Você sabe, com HTML você pode converter uma tabela de conteúdos
em vínculos que levam o leitor direto a cada seção ...
simplesmente dizendo.
18. Sanjay diz:
13 de junho de 2014 as 12:31 pm
isto é muito útil para mim dado que eu sou novo em comandos de
shell. obrigado por postar artigos ...
19. Pravin shegokar diz:
08 de julho de 2014 as 8:29 pm
Alô, senhor. Eu estou trabalhando em projeto de migração. Eu
tenho uma breve questão senhor: como migrar todos os dados do
diretório "home" dos usuários para um novo sistema linux
utilizando shell script? Você vai me fornecer qualquer script ou
ideia para isso? Obrigado em antecipação.
+ Ravi Saive diz:
10 de julho de 2014 as 4:00 pm
Caro Pravin, Nós certamente fornecemos para você instruções
passo-a-passo sobre como migrar todos os usuários do Linux
de um servidor para um outro servidor utilizando alguns
truques de linha de comando. Até lá fique ligado nas
atualizações.
20. Andre diz:
02 de agosto de 2014 as 12:49 pm
Encontrar todos os arquivos maiores do que 20M no diretório
"home" e exibi-los ordenados:
find /home -type f -size +20M -exec du -h {} \; | sort -h
21. Bharath diz:
20 de agosto de 2014 as 5:16 pm
Eu quero deletar os arquivos e imprimir para o arquivo de saída
com data, hora e tamanho.
Resposta
+ Ravi Saive diz:
28 de agosto de 2014 as 3:16 pm
Bharath, eu entendo que você deveria tentar este comando:
# find /your-path -maxdepth 1 -type f -name "*.txt" >
# filestobedeleted.txt
22. Jec diz:
21 de outubro de 2014 as 6:43 pm
Olá senhor, Existe uma maneira de utilizar "find"/"locate" em uma
lista? Exemplo:
while read line do if locate “$line” then echo “Y: $line” else
echo “N: $line” fi done < $1
no meu caso, isso sempre retorna N: (line). Eu entendo que o
comando "locate" lê a minha variável como $line literalmente.
Também tentei utilizar o comando "find" aqui, mas com o mesmo
resultado. Algum ensinamento? Obrigado em antecipação. :)
Resposta
+ munaf diz:
30 de novembro de 2014 as 1:25 pm
Como descobrir o tamanho de um arquivo qualquer utilizando o
comando "find"
23. Farid Afshar diz:
02 de dezembro de 2014 as 6:22 am
Alô senhor, Eu estou tentando encontrar arquivos no GNU/Linux
utilizando o comando "find". Eu preciso procurar em um sistema
de arquivos montado nfs para listar todos os arquivos
pertencentes a um certo usuário. Exemplo:
drwxrwxr-x 2 afsharf staff 126976 Oct 9 14:20 trevor/ -rw-rw-r– 1
afsharf staff 22947599 Oct 9 08:52 troj.out -rwxr-xr-x 1 camachoe
staff 11752 Jun 25 2013 runtnav_beta_h* -rwxr-xr-x 1 camachoe
staff 11648 Jun 25 2013 runtnav_h*
Eu gostaria de encontrar arquivos pertencentes a “camachoe” no
diretório atual e sub-diretórios. Qualquer ideia de como fazer
isso utilizando o comando "find"? Esse é um sistema de arquivos
montado nfs. Obrigado em antecipação.
Resposta
+ Ravi Saive diz:
02 de dezembro de 2014 as 4:30 pm @Farid,
find . -user camachoe -ls
24. Rajkumar Yadav diz:
11 de dezembro de 2014 as 1:49 pm
Grandes artigos Obrigado!
25. Sunny diz:
22 de janeiro de 2015 as 6:07 pm
Oi, Como ver os arquivos em uma data particular? Suponha que eu
queira ver arquivos de 18 de janeiro de 2015 entre todos os
arquivos. Eu tentei +mtime, mas não está funcionando
find . -newermt 2015-01-18 -ls lrt
o comando acima não está funcionando para mim. Por favor, sugira
algo.
Resposta
+ Ravi Saive diz:
23 de janeiro de 2015 as 5:55 pm @Sunny,
Tente isto:
# find . -type f -newerat 2015-01-18 ! -newerat 2015-01-18
26. Anup diz:
11 de fevereiro de 2015 as 5:49 pm
Boa informação Tudo em um só lugar obrigado
27. Iv diz:
18 de fevereiro de 2015 as 2:35 pm
Oi. Grande artigo. Como encontrar arquivos executáveis no RHEL4 e
Solaris 9 e 10? Eu tentei com:
find / -executable -type f and find / -perm /u=x,g=x,o=x -type f
mas isso funcionou apenas no RHEL6. Obrigado!
28. md shamim diz:
27 de fevereiro de 2015 as 12:30 pm
Eu tenho de mover um diretório dentro do qual existem logs. Cada
diretório criado como 26022015 e eu quero mover o diretório,
exceto os 3 dias mais recentes.
29. Sandip Kasar diz:
07 de março de 2015 as 12:18 pm
Eu estou muito contente por você ter descrito o comando "find"
com exemplos. Obrigado mais uma vez e Mantenha postados os
assuntos relacionados com GNU/Linux.
30. Nagarjuna Reddy diz:
13 de março de 2015 as 12:01 pm
Muito Muito boa informação Comandos Find.
31. sunny desouza diz:
24 de abril de 2015 as 1:21 am
Caros Tecmints, Eu entendo que isso funciona para encontrar um
dos arquivos e para aplicar a ação executar sobre tais arquivos:
$ find / -name “error_*.txt” -exec ls -lrathi ‘{}’ “;”
porém, vocês podem fornecer exemplos acerca de múltiplos
arquivos? Como nós fazemos?
Exemplos: – se existem “find_*.txt” “list_*.csv” e mais
32. sunny desouza diz:
25 de abril de 2015 as 8:48 am
questão rápida :- Como nós encontramos um arquivo e então nós o
renomeamos (mv) esse mesmo arquivo com um único comando? A opção
-exec funciona com o mv? Algum exemplo?
Resposta:
+ Ravi Saive diz:
25 de abril de 2015 as 10:44 am @Sunny, Sim, você pode
utilizar ambos os comandos em um único, assim:
# find / -name file; mv file path or newfilename
- --------------- Fim da Tradução ---------------
Jamenson Ferreira Espindula de Almeida Melo
Usuário GNU/Linux nº 166197
https://linuxcounter.net/cert/166197.png
Impressão digital da chave:
234D 1914 4224 7C53 BD13 6855 2AE0 25C0 08A8 6180
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.26 (GNU/Linux)
iQEcBAEBCAAGBQJVYwARAAoJECrgJcAIqGGAP5YH/j0Rtz9AB8CW2USrXD5WJvUl
I15xq+PaJPLuucgtJEVMlyKP/yp6tQMB3BvO0IeZEw4Ibcv/TIvS4wp6s1bSI5CB
4h4SAgmKnNXBimwiPvggzbcS77b1Tc42zxkfWahc5lgBUzxqQ+WTnxXULl7DAxT3
TmDVl4yxtoUCJdG6muRMfWdBrbpj96w7uJjcFFmBjF5YH2Lq+9+r4hAT4/K8VkcI
OiYAn8Xlguz7XBlY4NMOhWwXVD1331TcCeHkLm73lqljvE0+OxOIffdjI3/P+nVM
6DtGU4ajASlAIRBp3bE3VztU1/5qynkEiJde5inBqaxm5JXpzb5khFbu/yLjbxw=
=0OB6
-----END PGP SIGNATURE-----
quinta-feira, 21 de maio de 2015
10 Incríveis e Misteriosos Usos do Símbolo ou Operador (!) nos Comandos Linux
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Jaboatão dos Guararapes, PE, Brasil, 21 de maio de 2015.
Eis uma tradução livre do artigo divulgado por Avishek Kumar.
Disponível em:
<http://www.tecmint.com/mysterious-uses-of-symbol-or-operator-in-linux-commands/>.
Acesso em: 21 maio 2015.
10 Incríveis e Misteriosos Usos do Símbolo ou Operador (!) nos Comandos
Linux
por Avishek Kumar
Atualização mais recente: 18 maio 2015
O símbolo ou operador "!" no Linux pode ser utilizado como operador
Lógico de Negação bem como para recuperar comandos do histórico com
truques ou para executar comandos previamente executados com
modificação. Todos os comandos abaixo foram verificados
explicitamente no Shell bash. Apesar de eu não ter verificado, mas
a maior parte deles não funcionará em outro shell. Aqui vamos nós
para os incríveis e misteriosos usos do símbolo ou operador "!" nos
comandos Linux.
1. Execute um comando a partir do histórico pelo número do comando.
Você pode não estar consciente do fato de que você pode executar um
comando a partir do seu histórico de comandos (comandos já/antes
executados). Para começar, primeiro encontre o número do comando
executando o comando "history".
$ history
Agora execute um comando a partir do histórico simplesmente pelo
número pelo qual o comando é listado, na saída do comando "history".
Digamos execute um comando que aparece no número 1551 na saída do
comando "history".
$ !1551
E, o comando é executado (o comando "top" no caso), o qual foi
listado no número 1551. Essa forma de recuperar um comando já
executado é muito útil especialmente no caso daqueles comandos que
são longos. Você simplesmente precisa chamá-lo utilizando ![Número
no qual o comando aparece na saída do comando "history"].
- ------------------------------
- ------------------------------
2. Execute um comando previamente executado como o 2º comando mais
recente, 7º comando mais recente, etc.
Você pode executar aqueles comandos que você executou previamente
pela sequência de execução deles, sendo que o comando executado mais
recentemente será representado como -1; o segundo mais recente como
-2; o sétimo mais recente como -7.
Primeiro execute o comando "history" para obter uma lista dos
comandos executados mais recentemente. É obrigatório executar o
comando "history", de forma que você pode ter certeza de que não
existe um comando como o comando "rm arquivo" e outros simplesmente
para ter certeza de que você não está executando qualquer comando
perigoso acidentalmente. E então verifique o Sexto comando mais
recente, o Oitavo comando mais recente e o Décimo comando mais
recente.
$ history
$ !-6
$ !-8
$ !-10
- ------------------------------
- ------------------------------
3. Passe argumentos do comando mais recente que nós executamos para o
novo comando sem redigitar
Eu preciso listar o conteúdo do diretório
"/home/$USER/Binary/firefox", então eu disparo.
$ ls /home/$USER/Binary/firefox
Então eu percebo que eu deveria ter disparado "ls -l" para ver qual
arquivo é executável? Então eu deveria digitar o comando inteiro
outra vez! Não, eu não preciso. Eu preciso simplesmente carregar
o último argumento para este novo comando assim:
$ ls -l !$
Aqui "!$" carregará argumentos passados no último comando para esse
novo comando.
- ------------------------------
- ------------------------------
4. Como manipular dois ou mais argumentos utilizando (!)
Digamos que eu criei um arquivo de texto chamado "1.txt" na Área de
Trabalho.
$ touch /home/avi/Desktop/1.txt
e então eu copio ele para "/home/avi/Downloads" utilizando o caminho
completo em ambos os lados com o comando "cp".
$ cp /home/avi/Desktop/1.txt /home/avi/downloads
Agora nós passamos dois argumentos com o comando "cp". O primeiro
argumento é "/home/avi/Desktop/1.txt" e o segundo é
"/home/avi/downloads". Vamos manipulá-los diferentemente,
simplesmente execute "echo [argumentos]" para imprimir ambos os
argumentos diferentemente.
$ echo “1st Argument is : !^”
$ echo “2nd Argument is : !cp:2”
Perceba que o 1º argumento pode ser impresso como “!^” e o restante
os argumentos podem ser impressos executando
“![Name_of_Command]:[Number_of_argument]”.
No exemplo acima, o primeiro comando foi "cp" e o 2º argumento foi
necessário para se imprimir. Dado “!cp:2”, se qualquer comando,
digamos "xyz", for executado com 5 argumentos e você precisa do 4º
argumento, você pode utilizar “!xyz:4”, e utilizá-lo como quiser.
Todos os argumentos podem ser acessados via “!*”.
- ------------------------------
- ------------------------------
5. Execute o comando mais recente na base de palavras-chave
Nós podemos executar o comando mais recentemente executado na base de
palavras-chave. Podemos entender as palavras-chave conforme a
seguir:
$ ls /home > /dev/null [Command 1]
$ ls -l /home/avi/Desktop > /dev/null [Command 2]
$ ls -la /home/avi/Downloads > /dev/null [Command 3]
$ ls -lA /usr/bin > /dev/null [Command 4]
Aqui nós utilizamos o mesmo comando (ls), mas com diferentes
modificadores e para diferentes diretórios. Além disso, nós
enviamos a saída de cada comando para "/dev/null", uma vez que não
vamos lidar com a saída do comando, o que também mantém o console
limpo.
Agora, execute o comando mais recentemente executado na base de
palavras-chave.
$ ! ls [Command 1]
$ ! ls -l [Command 2]
$ ! ls -la [Command 3]
$ ! ls -lA [Command 4]
Verifique a saída e você ficará atônito, pois você está executando
comandos já executados simplesmente por palavras-chave do "ls".
- ------------------------------
- ------------------------------
6. O poder do Operador !!
Você pode executar/alterar o seu comando mais recentemente executado
utilizando (!!). Isso chamará o comando mais recentemente executado
com alterações/modificações no comando atual. Vamos te mostrar o
cenário.
Ontem eu executei um script de uma linha para obter o meu número IP
privado, então eu executei:
$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/
Então, repentinamente, eu percebi que eu preciso redirecionar a saída
do scrip acima para um arquivo ip.txt, então o que eu deveria fazer?
Eu deveria redigitar o comando inteiro novamente e redirecionar a
saída para um arquivo? Bem, uma solução simples é utilizar a tecla
de navegação UP e adicionar "> ip.txt" para redirecionar a saída para
um arquivo, como:
$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/ > ip.txt
Agradeça à tecla de navegação UP salvadora de vida aqui. Agora,
considere a condição abaixo, a próxima vez que eu executar o scrip de
uma linha abaixo.
$ ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d:
Tão logo eu execute o script, o prompt do bash retornou um erro com a
mensagem:
“bash: ifconfig: comando não encontrado”
Não foi difícil para mim perceber que eu executei esse comando como
um usuário comum, onde ele deveria ter sido executado como usuário
root.
Então, qual é a solução? É difícil se logar como usuário "root" e
então digitar o comando inteiro novamente! Também (a Tecla de
Navegação UP) no exemplo mais recente não veio salvar aqui. Então?
Nós precisamos chamar “!!” sem as aspas, o qual chamará o comando
mais recente para aquele usuário.
$ su -c “!!” root
Aqui "su" é "switch user" - "permuta usuário" - o qual usuário é
"root", "-c" é para executar o comando específico como o usuário e a
parte mais importante "!!" será substituída por "comando" e o comando
mais recentemente executado será substituído aqui. Isso! Você
precisa fornecer a senha do usuário "root".
Eu faço uso do "!!" a maioria nos cenários seguintes:
1. Quando eu executo o comando "apt-get" como usuário normal, eu
normalmente recebo um erro dizendo que você não tem permissão para
executar.
$ apt-get upgrade && apt-get dist-upgrade
Opa! não se preocupe! execute o comando abaixo para fazê-lo com
sucesso:
$ su -c !!
Da mesma maneira eu faço para:
$ service apache2 start
ou
$ /etc/init.d/apache2 start
ou
$ systemctl start apache2
Oops! Usuário não autorizado a carregar tal tarefa, então eu executo:
$ su -c 'service apache2 start'
ou
$ su -c '/etc/init.d/apache2 start'
ou
$ su -c 'systemctl start apache2'
- ------------------------------
- ------------------------------
7. Execute um comando que afeta todos os arquivos, exceto
![NOME_ARQUIVO]
O "!" (NÃO Lógico) pode ser utilizado para executar o comando sobre
todos os arquivos/extensões, exceto aqueles atrás de "!".
A. Remova todos os arquivos de um diretório, exceto aquele cujo nome
é "2.txt".
$ rm !(2.txt)
B. Remova todos os arquivos do tipo de um diretório, exceto aquele
cuja extensão é "pdf".
$ $ rm !(*.pdf)
- ------------------------------
- ------------------------------
8. Verificar se um diretório (digamos "/home/avi/Tecmint") existe ou
não? Se o dito diretório existe ou não, imprima uma mensagem com o
comando "printf"
Aqui nós utilizaremos "! -d" para validar se o diretório existe ou
não, seguido pelo Operador Lógico AND (&&) para imprimir caso aquele
diretório não exista; e o Operador Lógico OR (||) para imprimir caso
o diretório esteja presente.
A lógica é: quando a saída de [ ! -d /home/avi/Tecmint ] for 0
(zero), será executado aquilo que pertence ao Operador Lógico AND; do
contrário, a execução irá para o Operador Lógico OR (||) e executa
aquilo que pertencer ao Operador Lógico OR.
$ [ ! -d /home/avi/Tecmint ] && printf '\nnão existe o tal diretório /home/avi/Tecmint\n' || printf '\nexiste o diretório /home/avi/Tecmint\n'
- ------------------------------
- ------------------------------
9. Verificar se um diretório existe ou não? Se não, sair do comando.
Semelhante à condição acima, mas aqui se o diretório desejado não
existir, a execução saíra do comando.
$ [ ! -d /home/avi/Tecmint ] && exit
- ------------------------------
- ------------------------------
10. Criar um diretório (digamos "teste") no seu diretório "home", caso
ele já não exista.
Uma implementação geral em Linguagem de Script onde se o diretório
desejado não existir, a execução criará um.
[ ! -d /home/avi/Tecmint ] && mkdir /home/avi/Tecmint
- ------------------------------
- ------------------------------
Por enquanto é isso. Se você souber ou descobrir qualquer outro
uso de "!" o qual valha a pena saber, você pode desejar nos fornecer
a sua sugestão em feedback. Mantenha-se conectado!
1. Edgar Allen says:
May 19, 2015 at 10:30 pm
Você também pode mencionar "!?"
Isso encontra o comando mais recente com o argumento string dele.
Por exemplo, se ...
1013 grep tornado /usr/share/dict/words
1014 grep hurricane /usr/share/dict/words
1015 wc -l /usr/share/dict/words
estão todos no histórico, então "!?torn" pesquisará por tornado
novamente, onde "!torn" procuraria em vão por um comando iniciando
com "torn".
E "wc !?torn?:2" funciona para selecionar o argumento dois do
comando contendo "tornado" e executar um "wc" sobre ele.
Resposta:
+ Avishek Kumar says:
May 20, 2015 at 11:25 am
Caro Edgar,
Sua sugestão foi levada em conta.
Obrigado pelo seu feedback.
2. Stephen says:
May 19, 2015 at 6:07 pm
Eu não vi uma menção do contexto histórico no artigo, então eu
darei algum aqui nos comentários. Essa forma de substituição
de histórico de comando originou-se com o Shell C (csh), criado
por Bill Joy para o sabor BSD de UNIX, lá no começo dos anos 70.
Mais tarde foi incorporado no tcsh, e bash (Bourne-Again SHell).
Pessoalmente, eu sempre tenho preferido o mecanismo de
substituição de histórico do C-shell, e nunca realmente olhei
para o comando "fc" (o qual eu encontrei primeiramente no Korne
shell).
Resposta:
+ Avishek Kumar says:
May 20, 2015 at 11:27 am
Caro Stephen,
Obrigado pelo pedaço maravilhoso de informação. Mantenha-se
conectado e nos mantenha ciente de tal contexto.
3. suzy says:
May 16, 2015 at 11:45 am
4º comando. Você pode acessá-lo muito mais simplesmente. Existem
atualmente expressões regulares:
^ está no começo da expressão
$ está no fim da expressão
:number qualquer parâmetro de número
Exemplo:
touch a.txt b.txt c.txt
echo !^ –> exibe o primeiro parâmetro
echo !:1 –> também exibe o primeiro parâmetro
echo !:2 –> exibe o segundo parâmetro
echo !:3 –> exibe o terceiro parâmetro
echo !$ –> exibe o último (no nosso caso, o 3º) parâmetro
echo !* –> exibe todos os parâmetros
Resposta:
+ Avishek Kumar says:
May 18, 2015 at 11:30 pm
E nós dissemos o mesmo:
echo “1st Argument is : !^”
$ echo “2nd Argument is : !cp:2”
echo seguido do 1º argumento e 2º argumento é simplesmente tornar
o tutorial e comando ininteligível. Eu tenho utilizado "!^".
"!command:number" como você está sugerindo.
Eu gostaria de saber se você quer dizer algo diferente?
4. Tomasz Wiszkowski says:
May 16, 2015 at 10:50 am
Eu penso (5) funciona diferentemente do que você anotou, e o
redirecionamento para /dev/null escondeu, porém ZSh ainda
imprime o comando. Quando você invoca “! ls…”, sempre pega o
comando "ls" mais recente que você executou, simplesmente acrescenta
seus modificadores ao final (depois /dev/null). Uma coisa extra legal
é o operador "!#", o qual pega argumentos da linha atual. Particularmente
bom se você precisa redigitar nomes de caminho longos que você já digitou
na linha atual. Simplesmente digamos, por exemplo
cp /some/long/path/to/file.abc !#:1
E pressione "tab". Isso vai substituir o último argumento com o nome do
arquivo e caminho inteiro.
Resposta:
+ Avishek Kumar says:
May 18, 2015 at 11:37 pm
Tomasz,
Para a sua primeira parte do feedback: não pega o comando executado
mais recentemente e simplesmente para provar isso nós utilizamos 4
modificadores diferentes para o mesmo comando.
($ ! ls $ ! ls -l $ ! ls -la $ ! ls -lA ). Agora você pode verificar
isso fornecendo as palavras-chave em qualquer ordem e em qualquer caso
será exibido o mesmo resultado. Mesmo que isso não esteja funcionando
no ZSH como esperado, eu já mencionei que eu testei no BASH e a maioria
deles pode não funcionar em outro shell.
Para a segunda parte, o que você mencionou é uma HASH TAG na Linha de
Comando do Linux e nós incluímos em um dos nossos artigos. Você pode
desejar lê-lo aqui: http://www.tecmint.com/linux-commandline-chat-server-and-remove-unwanted-packages/
5. Manu says:
May 16, 2015 at 8:55 am
Artigo legal.
Resposta:
+ Avishek Kumar says:
May 18, 2015 at 11:30 pm
Seja bem vindo Manu, Mantenha-se conectado!
6. Tachyon says:
May 16, 2015 at 4:40 am
Grande post. Obrigado, eu recompartilhei para G+
Uma nota, "su" significa "switch user" e não "Suitable User".
Nota menor. Pelo menos isso ainda é representativo do que
atualmente faz, diferente do que a maior parte das pessoas
refere-se como "Super User", pensando que o comando concede
apenas status de usuário "root", o que é absolutamente
incorreto.
Resposta:
+ Ravi Saive says:
May 18, 2015 at 11:08 am
@Tachyon,
obrigado corrigido no texto acima..
Jamenson Ferreira Espindula de Almeida Melo
Usuário GNU/Linux nº 166197
https://linuxcounter.net/cert/166197.png
Impressão digital da chave:
234D 1914 4224 7C53 BD13 6855 2AE0 25C0 08A8 6180
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.26 (GNU/Linux)
iQEcBAEBCAAGBQJVXmQhAAoJECrgJcAIqGGA5xIIAKfXnn8D75spCHUhuESdz/6w
GiPFOOb9YQu7Ha22giyVozw8oTTLf99s5ObM6cg1omj6g5ogjbwW7LUgMFe88taH
O0EnWwCfiFtHx2zoEY8/wI56twILSCgr+9oMl3BQMzlgyTuSXnrMRzUbtR5SVLZy
z204ignWQfuUfVA7OqEq3CZRvpX+sKas2t88LuW/2kYWE4Nc3w6VVE/uACn5Q/Pg
75DcppcDTavB2jjGmwahg0jKtagcN+bYCUFSu0YBHDbkniXKkDDqbevD0RsheNoT
+Jp5E2oybTFce/eFz4Gqr6f0Z6Uje7+4iXSGd68fJbgUUTv//06ShxGF2TjKCY0=
=CbfT
-----END PGP SIGNATURE-----
Hash: SHA256
Jaboatão dos Guararapes, PE, Brasil, 21 de maio de 2015.
Eis uma tradução livre do artigo divulgado por Avishek Kumar.
Disponível em:
<http://www.tecmint.com/mysterious-uses-of-symbol-or-operator-in-linux-commands/>.
Acesso em: 21 maio 2015.
10 Incríveis e Misteriosos Usos do Símbolo ou Operador (!) nos Comandos
Linux
por Avishek Kumar
Atualização mais recente: 18 maio 2015
O símbolo ou operador "!" no Linux pode ser utilizado como operador
Lógico de Negação bem como para recuperar comandos do histórico com
truques ou para executar comandos previamente executados com
modificação. Todos os comandos abaixo foram verificados
explicitamente no Shell bash. Apesar de eu não ter verificado, mas
a maior parte deles não funcionará em outro shell. Aqui vamos nós
para os incríveis e misteriosos usos do símbolo ou operador "!" nos
comandos Linux.
1. Execute um comando a partir do histórico pelo número do comando.
Você pode não estar consciente do fato de que você pode executar um
comando a partir do seu histórico de comandos (comandos já/antes
executados). Para começar, primeiro encontre o número do comando
executando o comando "history".
$ history
Agora execute um comando a partir do histórico simplesmente pelo
número pelo qual o comando é listado, na saída do comando "history".
Digamos execute um comando que aparece no número 1551 na saída do
comando "history".
$ !1551
E, o comando é executado (o comando "top" no caso), o qual foi
listado no número 1551. Essa forma de recuperar um comando já
executado é muito útil especialmente no caso daqueles comandos que
são longos. Você simplesmente precisa chamá-lo utilizando ![Número
no qual o comando aparece na saída do comando "history"].
- ------------------------------
- ------------------------------
2. Execute um comando previamente executado como o 2º comando mais
recente, 7º comando mais recente, etc.
Você pode executar aqueles comandos que você executou previamente
pela sequência de execução deles, sendo que o comando executado mais
recentemente será representado como -1; o segundo mais recente como
-2; o sétimo mais recente como -7.
Primeiro execute o comando "history" para obter uma lista dos
comandos executados mais recentemente. É obrigatório executar o
comando "history", de forma que você pode ter certeza de que não
existe um comando como o comando "rm arquivo" e outros simplesmente
para ter certeza de que você não está executando qualquer comando
perigoso acidentalmente. E então verifique o Sexto comando mais
recente, o Oitavo comando mais recente e o Décimo comando mais
recente.
$ history
$ !-6
$ !-8
$ !-10
- ------------------------------
- ------------------------------
3. Passe argumentos do comando mais recente que nós executamos para o
novo comando sem redigitar
Eu preciso listar o conteúdo do diretório
"/home/$USER/Binary/firefox", então eu disparo.
$ ls /home/$USER/Binary/firefox
Então eu percebo que eu deveria ter disparado "ls -l" para ver qual
arquivo é executável? Então eu deveria digitar o comando inteiro
outra vez! Não, eu não preciso. Eu preciso simplesmente carregar
o último argumento para este novo comando assim:
$ ls -l !$
Aqui "!$" carregará argumentos passados no último comando para esse
novo comando.
- ------------------------------
- ------------------------------
4. Como manipular dois ou mais argumentos utilizando (!)
Digamos que eu criei um arquivo de texto chamado "1.txt" na Área de
Trabalho.
$ touch /home/avi/Desktop/1.txt
e então eu copio ele para "/home/avi/Downloads" utilizando o caminho
completo em ambos os lados com o comando "cp".
$ cp /home/avi/Desktop/1.txt /home/avi/downloads
Agora nós passamos dois argumentos com o comando "cp". O primeiro
argumento é "/home/avi/Desktop/1.txt" e o segundo é
"/home/avi/downloads". Vamos manipulá-los diferentemente,
simplesmente execute "echo [argumentos]" para imprimir ambos os
argumentos diferentemente.
$ echo “1st Argument is : !^”
$ echo “2nd Argument is : !cp:2”
Perceba que o 1º argumento pode ser impresso como “!^” e o restante
os argumentos podem ser impressos executando
“![Name_of_Command]:[Number_of_argument]”.
No exemplo acima, o primeiro comando foi "cp" e o 2º argumento foi
necessário para se imprimir. Dado “!cp:2”, se qualquer comando,
digamos "xyz", for executado com 5 argumentos e você precisa do 4º
argumento, você pode utilizar “!xyz:4”, e utilizá-lo como quiser.
Todos os argumentos podem ser acessados via “!*”.
- ------------------------------
- ------------------------------
5. Execute o comando mais recente na base de palavras-chave
Nós podemos executar o comando mais recentemente executado na base de
palavras-chave. Podemos entender as palavras-chave conforme a
seguir:
$ ls /home > /dev/null [Command 1]
$ ls -l /home/avi/Desktop > /dev/null [Command 2]
$ ls -la /home/avi/Downloads > /dev/null [Command 3]
$ ls -lA /usr/bin > /dev/null [Command 4]
Aqui nós utilizamos o mesmo comando (ls), mas com diferentes
modificadores e para diferentes diretórios. Além disso, nós
enviamos a saída de cada comando para "/dev/null", uma vez que não
vamos lidar com a saída do comando, o que também mantém o console
limpo.
Agora, execute o comando mais recentemente executado na base de
palavras-chave.
$ ! ls [Command 1]
$ ! ls -l [Command 2]
$ ! ls -la [Command 3]
$ ! ls -lA [Command 4]
Verifique a saída e você ficará atônito, pois você está executando
comandos já executados simplesmente por palavras-chave do "ls".
- ------------------------------
- ------------------------------
6. O poder do Operador !!
Você pode executar/alterar o seu comando mais recentemente executado
utilizando (!!). Isso chamará o comando mais recentemente executado
com alterações/modificações no comando atual. Vamos te mostrar o
cenário.
Ontem eu executei um script de uma linha para obter o meu número IP
privado, então eu executei:
$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/
Então, repentinamente, eu percebi que eu preciso redirecionar a saída
do scrip acima para um arquivo ip.txt, então o que eu deveria fazer?
Eu deveria redigitar o comando inteiro novamente e redirecionar a
saída para um arquivo? Bem, uma solução simples é utilizar a tecla
de navegação UP e adicionar "> ip.txt" para redirecionar a saída para
um arquivo, como:
$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/ > ip.txt
Agradeça à tecla de navegação UP salvadora de vida aqui. Agora,
considere a condição abaixo, a próxima vez que eu executar o scrip de
uma linha abaixo.
$ ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d:
Tão logo eu execute o script, o prompt do bash retornou um erro com a
mensagem:
“bash: ifconfig: comando não encontrado”
Não foi difícil para mim perceber que eu executei esse comando como
um usuário comum, onde ele deveria ter sido executado como usuário
root.
Então, qual é a solução? É difícil se logar como usuário "root" e
então digitar o comando inteiro novamente! Também (a Tecla de
Navegação UP) no exemplo mais recente não veio salvar aqui. Então?
Nós precisamos chamar “!!” sem as aspas, o qual chamará o comando
mais recente para aquele usuário.
$ su -c “!!” root
Aqui "su" é "switch user" - "permuta usuário" - o qual usuário é
"root", "-c" é para executar o comando específico como o usuário e a
parte mais importante "!!" será substituída por "comando" e o comando
mais recentemente executado será substituído aqui. Isso! Você
precisa fornecer a senha do usuário "root".
Eu faço uso do "!!" a maioria nos cenários seguintes:
1. Quando eu executo o comando "apt-get" como usuário normal, eu
normalmente recebo um erro dizendo que você não tem permissão para
executar.
$ apt-get upgrade && apt-get dist-upgrade
Opa! não se preocupe! execute o comando abaixo para fazê-lo com
sucesso:
$ su -c !!
Da mesma maneira eu faço para:
$ service apache2 start
ou
$ /etc/init.d/apache2 start
ou
$ systemctl start apache2
Oops! Usuário não autorizado a carregar tal tarefa, então eu executo:
$ su -c 'service apache2 start'
ou
$ su -c '/etc/init.d/apache2 start'
ou
$ su -c 'systemctl start apache2'
- ------------------------------
- ------------------------------
7. Execute um comando que afeta todos os arquivos, exceto
![NOME_ARQUIVO]
O "!" (NÃO Lógico) pode ser utilizado para executar o comando sobre
todos os arquivos/extensões, exceto aqueles atrás de "!".
A. Remova todos os arquivos de um diretório, exceto aquele cujo nome
é "2.txt".
$ rm !(2.txt)
B. Remova todos os arquivos do tipo de um diretório, exceto aquele
cuja extensão é "pdf".
$ $ rm !(*.pdf)
- ------------------------------
- ------------------------------
8. Verificar se um diretório (digamos "/home/avi/Tecmint") existe ou
não? Se o dito diretório existe ou não, imprima uma mensagem com o
comando "printf"
Aqui nós utilizaremos "! -d" para validar se o diretório existe ou
não, seguido pelo Operador Lógico AND (&&) para imprimir caso aquele
diretório não exista; e o Operador Lógico OR (||) para imprimir caso
o diretório esteja presente.
A lógica é: quando a saída de [ ! -d /home/avi/Tecmint ] for 0
(zero), será executado aquilo que pertence ao Operador Lógico AND; do
contrário, a execução irá para o Operador Lógico OR (||) e executa
aquilo que pertencer ao Operador Lógico OR.
$ [ ! -d /home/avi/Tecmint ] && printf '\nnão existe o tal diretório /home/avi/Tecmint\n' || printf '\nexiste o diretório /home/avi/Tecmint\n'
- ------------------------------
- ------------------------------
9. Verificar se um diretório existe ou não? Se não, sair do comando.
Semelhante à condição acima, mas aqui se o diretório desejado não
existir, a execução saíra do comando.
$ [ ! -d /home/avi/Tecmint ] && exit
- ------------------------------
- ------------------------------
10. Criar um diretório (digamos "teste") no seu diretório "home", caso
ele já não exista.
Uma implementação geral em Linguagem de Script onde se o diretório
desejado não existir, a execução criará um.
[ ! -d /home/avi/Tecmint ] && mkdir /home/avi/Tecmint
- ------------------------------
- ------------------------------
Por enquanto é isso. Se você souber ou descobrir qualquer outro
uso de "!" o qual valha a pena saber, você pode desejar nos fornecer
a sua sugestão em feedback. Mantenha-se conectado!
1. Edgar Allen says:
May 19, 2015 at 10:30 pm
Você também pode mencionar "!?"
Isso encontra o comando mais recente com o argumento string dele.
Por exemplo, se ...
1013 grep tornado /usr/share/dict/words
1014 grep hurricane /usr/share/dict/words
1015 wc -l /usr/share/dict/words
estão todos no histórico, então "!?torn" pesquisará por tornado
novamente, onde "!torn" procuraria em vão por um comando iniciando
com "torn".
E "wc !?torn?:2" funciona para selecionar o argumento dois do
comando contendo "tornado" e executar um "wc" sobre ele.
Resposta:
+ Avishek Kumar says:
May 20, 2015 at 11:25 am
Caro Edgar,
Sua sugestão foi levada em conta.
Obrigado pelo seu feedback.
2. Stephen says:
May 19, 2015 at 6:07 pm
Eu não vi uma menção do contexto histórico no artigo, então eu
darei algum aqui nos comentários. Essa forma de substituição
de histórico de comando originou-se com o Shell C (csh), criado
por Bill Joy para o sabor BSD de UNIX, lá no começo dos anos 70.
Mais tarde foi incorporado no tcsh, e bash (Bourne-Again SHell).
Pessoalmente, eu sempre tenho preferido o mecanismo de
substituição de histórico do C-shell, e nunca realmente olhei
para o comando "fc" (o qual eu encontrei primeiramente no Korne
shell).
Resposta:
+ Avishek Kumar says:
May 20, 2015 at 11:27 am
Caro Stephen,
Obrigado pelo pedaço maravilhoso de informação. Mantenha-se
conectado e nos mantenha ciente de tal contexto.
3. suzy says:
May 16, 2015 at 11:45 am
4º comando. Você pode acessá-lo muito mais simplesmente. Existem
atualmente expressões regulares:
^ está no começo da expressão
$ está no fim da expressão
:number qualquer parâmetro de número
Exemplo:
touch a.txt b.txt c.txt
echo !^ –> exibe o primeiro parâmetro
echo !:1 –> também exibe o primeiro parâmetro
echo !:2 –> exibe o segundo parâmetro
echo !:3 –> exibe o terceiro parâmetro
echo !$ –> exibe o último (no nosso caso, o 3º) parâmetro
echo !* –> exibe todos os parâmetros
Resposta:
+ Avishek Kumar says:
May 18, 2015 at 11:30 pm
E nós dissemos o mesmo:
echo “1st Argument is : !^”
$ echo “2nd Argument is : !cp:2”
echo seguido do 1º argumento e 2º argumento é simplesmente tornar
o tutorial e comando ininteligível. Eu tenho utilizado "!^".
"!command:number" como você está sugerindo.
Eu gostaria de saber se você quer dizer algo diferente?
4. Tomasz Wiszkowski says:
May 16, 2015 at 10:50 am
Eu penso (5) funciona diferentemente do que você anotou, e o
redirecionamento para /dev/null escondeu, porém ZSh ainda
imprime o comando. Quando você invoca “! ls…”, sempre pega o
comando "ls" mais recente que você executou, simplesmente acrescenta
seus modificadores ao final (depois /dev/null). Uma coisa extra legal
é o operador "!#", o qual pega argumentos da linha atual. Particularmente
bom se você precisa redigitar nomes de caminho longos que você já digitou
na linha atual. Simplesmente digamos, por exemplo
cp /some/long/path/to/file.abc !#:1
E pressione "tab". Isso vai substituir o último argumento com o nome do
arquivo e caminho inteiro.
Resposta:
+ Avishek Kumar says:
May 18, 2015 at 11:37 pm
Tomasz,
Para a sua primeira parte do feedback: não pega o comando executado
mais recentemente e simplesmente para provar isso nós utilizamos 4
modificadores diferentes para o mesmo comando.
($ ! ls $ ! ls -l $ ! ls -la $ ! ls -lA ). Agora você pode verificar
isso fornecendo as palavras-chave em qualquer ordem e em qualquer caso
será exibido o mesmo resultado. Mesmo que isso não esteja funcionando
no ZSH como esperado, eu já mencionei que eu testei no BASH e a maioria
deles pode não funcionar em outro shell.
Para a segunda parte, o que você mencionou é uma HASH TAG na Linha de
Comando do Linux e nós incluímos em um dos nossos artigos. Você pode
desejar lê-lo aqui: http://www.tecmint.com/linux-commandline-chat-server-and-remove-unwanted-packages/
5. Manu says:
May 16, 2015 at 8:55 am
Artigo legal.
Resposta:
+ Avishek Kumar says:
May 18, 2015 at 11:30 pm
Seja bem vindo Manu, Mantenha-se conectado!
6. Tachyon says:
May 16, 2015 at 4:40 am
Grande post. Obrigado, eu recompartilhei para G+
Uma nota, "su" significa "switch user" e não "Suitable User".
Nota menor. Pelo menos isso ainda é representativo do que
atualmente faz, diferente do que a maior parte das pessoas
refere-se como "Super User", pensando que o comando concede
apenas status de usuário "root", o que é absolutamente
incorreto.
Resposta:
+ Ravi Saive says:
May 18, 2015 at 11:08 am
@Tachyon,
obrigado corrigido no texto acima..
Jamenson Ferreira Espindula de Almeida Melo
Usuário GNU/Linux nº 166197
https://linuxcounter.net/cert/166197.png
Impressão digital da chave:
234D 1914 4224 7C53 BD13 6855 2AE0 25C0 08A8 6180
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.26 (GNU/Linux)
iQEcBAEBCAAGBQJVXmQhAAoJECrgJcAIqGGA5xIIAKfXnn8D75spCHUhuESdz/6w
GiPFOOb9YQu7Ha22giyVozw8oTTLf99s5ObM6cg1omj6g5ogjbwW7LUgMFe88taH
O0EnWwCfiFtHx2zoEY8/wI56twILSCgr+9oMl3BQMzlgyTuSXnrMRzUbtR5SVLZy
z204ignWQfuUfVA7OqEq3CZRvpX+sKas2t88LuW/2kYWE4Nc3w6VVE/uACn5Q/Pg
75DcppcDTavB2jjGmwahg0jKtagcN+bYCUFSu0YBHDbkniXKkDDqbevD0RsheNoT
+Jp5E2oybTFce/eFz4Gqr6f0Z6Uje7+4iXSGd68fJbgUUTv//06ShxGF2TjKCY0=
=CbfT
-----END PGP SIGNATURE-----
Assinar:
Comentários (Atom)