Autoria de Alberto Federman Neto, albfneto
Atualizado em 29 de Junho de 2018.
1 . INTRODUÇÃO:
Quem usa Linux, mais cedo ou mais tarde, vai editar arquivos de configuração. Isso é muito clássico, mas eu resolvi fazer esta Dica simples, para facilitar para o Iniciante.
Até para o avançado, pois mesmo eu, não lembrava como se usava grep para isso.
Os casos normais são fáceis, basta acessar o arquivo apropriado e editá-lo (se necessário, como Root).
Mas, e nos casos onde eu não sei qual é o meu arquivo, ou não sei onde ele está?
2. EU SEI QUAL É, MAS ONDE ELE ESTÁ?
Os exemplos esclarecem. Ex, Suponha eu tenha que editar o arquivo client.conf do Entropy, no Sabayon. Mas não sei onde ele está…
É simples, tem dois jeitos.
2.a. Com Find:
Com comando Find. Use um comando cd para ir para a Raiz (assim todos os diretórios serão percorridos) e depois localize onde está o arquivo com Find.
Melhor usar Sudo ou logar como Root (com su), para evitar diretórios não acessados (permissão negada):
$ sudo find -name client.conf ./etc/cups/client.conf ./etc/pulse/client.conf ./etc/entropy/client.conf
Veja que ele achou o client.conf do Cups, do Pulseaudio e do Entropy (o que preciso editar).
Para você usar, substitua client.conf pelo nome do arquivo que procura.
2.b. Com Locate:
Se tiver muitos arquivos a procurar, ou se você procura arquivos toda hora, pode ser mais prático usar o utilitário locate.
Instale (pelo processo padrão da sua Distro) o pacote mlocate. Para ilustrar, em Sabayon Linux, instale usando Entropy, comando equo. Depois (em qualquer Distro) atualize o Banco de Dados do locate:
$ sudo equo i -av mlocate $ sudo updatedb -v
Agora fica fácil. Vá para o diretório Raiz e procure o arquivo (comando locate ARQUIVO). No nosso exemplo:
$ locate client.conf /etc/cups/client.conf /etc/dhcp/dhclient.conf /etc/entropy/client.conf /etc/ppp/radius/radiusclient.conf /etc/pulse/client.conf
Foram achados todos os arquivos com a “string” client no nome, inclusive o que precisa ser editado (/etc/entropy/client.conf).
A propósito, se você usa o locate no XFCE, existe uma interface gráfica para ele, é o CatFish.
Parabéns, você achou o arquivo.
3. SÓ SEI O QUE EDITAR, MAS NÃO SEI O NOME DO ARQUIVO E NEM ONDE ELE ESTÁ.
Parece mais complicada a situação, mas não é. O Comando grep acha o arquivo para você!
Em um exemplo, precisa editar a linha que tem a “String” sync-uri , da sincronização do Portage. Não sabe em qual arquivo, nem onde está. Vá na Raiz, e procure com estes comandos:
$ cd / $ sudo grep -rni "sync-uri" *
Para o seu caso. substitua a “String” sync-uri pela “palavra” que quer achar, para editar.
As opções do comando grep: -r é recursivo, vai varrer todos os diretórios. Se quiser ver nos links simbólicos, use -R.
-n localiza o número da linha.
-i, elimina o “Case Sensitive”, isto é retira a diferenciação entre minúsculas e maiúsculas (que é uma característica dos sistemas Unix e Linux).
Rodei o comando, e pude verificar que a “String” sync-uri está nas linhas 9,12-14, 17 e 20 do arquivo: opt/sabayon-build/conf/intel/portage/repos.conf/gentoo.conf e de fato, este, gentoo.conf , é o arquivo que preciso editar.
opt/sabayon-build/conf/intel/portage/repos.conf/gentoo.conf:9:# sync-uri = rsync://rsync.europe.gentoo.org/gentoo-portage opt/sabayon-build/conf/intel/portage/repos.conf/gentoo.conf:12:# sync-uri = rsync://gentoo.c3sl.ufpr.br/gentoo opt/sabayon-build/conf/intel/portage/repos.conf/gentoo.conf:13:# sync-uri = rsync://rsync.br.gentoo.org/gentoo-portage opt/sabayon-build/conf/intel/portage/repos.conf/gentoo.conf:14:# sync-uri = rsync://rsync1.br.gentoo.org/gentoo-portage opt/sabayon-build/conf/intel/portage/repos.conf/gentoo.conf:17:# sync-uri = rsync.samerica.gentoo.org/gentoo-portage opt/sabayon-build/conf/intel/portage/repos.conf/gentoo.conf:20:sync-uri = rsync://rsync.us.gentoo.org/gentoo-portage
Há várias outras maneiras, opções etc… para se usar os comandos find, locate e grep, para casos mais especiais. Se desejar se aprofundar, leia:
How do I Find All Files That Contains Specific Text.
Pesquisar Trechos Dentro de Arquivos.
Comandos Para Localização de Arquivos.
Busca por String, dentro de Arquivos.
Localizador de Palavras em Arquivos não Binários.
Shell Script to Find String in a Log File.
How To Find String Inside Files.
Tem muitos outros tutoriais sobre esses detalhes, em demasia para colocar aqui. Basta procurar na Internet.
4. EDITANDO:
Achou o Arquivo, agora editar….
Se o arquivo estiver na sua /home, ele é seu. Editar como usuário normal resolve. Se estiver na Raiz ou subdiretórios dela, “é do Root” e precisa ser editado como super-usuário.
Editores, cada Distro ou ambiente gráfico tem o seu, e cada Linuxer tem seu favorito.
Em linha de comando, eu gosto de Nano e Diakonos. Em ambiente gráfico, eu uso mais o Geany e o Kate.
Mas existem muitos outros: Emacs (desenvolvido por Richard Stallman, do projeto GNU, Também é dele o famoso compilador livre GCC), Mcedit, Gedit, Kwrite, Joe, Vi, Vim etc… etc…
Agora é simples. Edite, como Usuário ou como Root, o arquivo que achou nos Itens 2 e 3.
Para seu arquivo, substitua o caminho, Path, pelo caminho completo do seu arquivo (que achou):
COMO USUARIO. Arquivos em /home ou em ~/ (/home/usuario): $ SEU_EDITOR CAMINHO DO ARQUIVO/ARQUIVO.extensão COMO ROOT, EDITOR PARA LINHA DE COMANDO: $ sudo SEU_EDITOR CAMINHO DO ARQUIVO/ARQUIVO.extensão COM EDITOR GRÁFICO, SUDO GRÁFICO: $ gksu (ou kdesu) SEU_EDITOR CAMINHO DO ARQUIVO/ARQUIVO.extensão
Voltando ao meu exemplo, que esclarece. Editar /etc/entropy/client.conf e arquivos simples :
ARQUIVO SIMPLES DE USUARIO: $ kate ~/Desktop/DOCUMENTOS/meu_arquivo.txt ARQUIVO QUE PRECISA EDITAR COMO ROOT: $ sudo nano /etc/entropy/client.conf OU $ kdesu geany /etc/entropy/client.conf
Voltando ao seu caso, substitua o Arquivo /etc/entropy/client.conf, pelo seu (achado pelos procedimentos do Itens 2 ou 3), com o caminho completo, e substitua nano, kate ou geany pelo seu editor favorito.
Espero ter ajudado, até a próxima.
Dos três o que menos uso é o find, uso mais locate e grep.
No locate você poderia adicionar no artigo como especificar no /etc/updatedb.conf como pular alguns diretórios afim de tornar mais rápida a indexação, exemplo de diretórios que pulo aqui (porque mantenho todas as outras partições montadas):
PRUNEPATHS=”/dev /proc /sys /tmp /usr/tmp /var/tmp /var/cache/ccache /var/spool /afs /net /media /mnt/backup /mnt/slack32 /mnt/gentoo /mnt/voidlinux”
Já com o grep acho mais rápido quando sabemos o que procurar, exemplo:
$ grep menu-cache /var/lib/sbopkg/SBo/14.2/*/*/*.info
Ótima dica!
CurtirCurtir