Skip to content

Commit

Permalink
New translations 04-advanced-commands.md (Portuguese, Brazilian)
Browse files Browse the repository at this point in the history
  • Loading branch information
rockylinux-auto committed Apr 28, 2023
1 parent b46fdeb commit 7b79014
Showing 1 changed file with 364 additions and 0 deletions.
364 changes: 364 additions & 0 deletions docs/books/admin_guide/04-advanced-commands.pt-BR.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,364 @@
---
title: Comandos Avançados Linux
---

# Comandos Avançados para Usuários Linux

Comandos avançados permitem grande customização e controle em situações específicas uma vez que você já esteja familiarizado com os comandos básicos.

****

**Objetivos**: Neste capítulo, os futuros administradores do Linux vão aprender:

:heavy_check_mark: alguns comandos úteis não cobertos no capítulo anterior.
:heavy_check_mark: alguns comandos avançados.

:checkered_flag: **comando de usuário**, **Linux**

**Conhecimento**: :star:
**Complexidade**: :star: :star: :star:

**Tempo de leitura**: 20 minutos

****

## Comando `uniq`

O comando `uniq` é um comando muito poderoso, usado com o comando `sort`, especialmente para análise de arquivo de log. Ele permite classificar e exibir as entradas removendo duplicidades.

Para ilustrar como o comando `uniq` funciona, vamos usar um arquivo `firstnames.txt` contendo uma lista dos primeiros nomes:

```
antoine
xavier
steven
patrick
xavier
antoine
antoine
steven
```

!!! Nota

`uniq` requer que o arquivo de entrada seja ordenado antes da execução, porque compara apenas linhas consecutivas.

Se nenhum argumento for passado, o comando `uniq` não irá exibir linhas idênticas consecutivas no arquivo `firstnames.txt`:

```
$ sort firstnames.txt | uniq
antoine
patrick
steven
xavier
```

Para exibir somente as linhas que aparecem apenas uma vez, use a opção `-u`:

```
$ sort firstnames.txt | uniq -u
patrick
```

Por outro lado, para exibir apenas as linhas que aparecem pelo menos duas vezes no arquivo, você deve usar a opção `-d`:

```
$ sort firstnames.txt | uniq -d
antoine
steven
xavier
```

Para simplesmente excluir linhas que aparecem apenas uma vez, use a opção `-D`:

```
$ sort firstnames.txt | uniq -D
antoine
antoine
antoine
steven
steven
xavier
```

Por fim, para contar o número de ocorrências de cada linha, use a opção `-c`:

```
$ sort firstnames.txt | uniq -c
3 antoine
1 patrick
2 steven
2 xavier
```

```
$ sort firstnames.txt | uniq -cd
3 antoine
2 steven
2 xavier
```

## Comandos do `xargs`

O comando `xargs` permite a construção e execução de linhas de comando da entrada padrão.

O comando `xargs` lê espaços em branco ou argumentos diretos delimitados da entrada padrão e executa o comando (`/bin/echo` por padrão) uma ou mais vezes usando os argumentos iniciais seguidos pelos argumentos lidos da entrada padrão.

Um primeiro e simples exemplo seria o seguinte:

```
$ xargs
uso
do
xargs
<CTRL+D>
uso do xargs
```

O comando `xargs` espera pelo dado da entrada padrão **stdin**. Três linhas são inseridas. O fim da entrada do usuário é especificado para o `xargs` pela sequência de teclas <kbd>CTRL</kbd>+<kbd>D</kbd>. O `xargs` então executa o comando padrão `echo` seguido pelos três argumentos correspondentes à entrada do usuário, ou seja:

```
$ echo "uso" "do" "xargs"
uso do xargs
```

É possível especificar o comando a ser executado pelo `xargs`.

No exemplo a seguir, o `xargs` executará o comando `ls -ld` no conjunto de pastas especificadas na entrada padrão:

```
$ xargs ls -ld
/home
/tmp
/root
<CTRL+D>
drwxr-xr-x. 9 root root 4096 5 avril 11:10 /home
dr-xr-x---. 2 root root 4096 5 avril 15:52 /root
drwxrwxrwt. 3 root root 4096 6 avril 10:25 /tmp
```

Na prática, o comando `xargs` executou o comando `ls -ld /home /tmp /root`.

O que acontece se o comando a ser executado não aceitar vários argumentos, como é o caso com o comando `find`?

```
$ xargs find /var/log -name
*.old
*.log
find: paths must precede expression: *.log
```

O comando `xargs` tentou executar o comando `find` com vários argumentos depois da opção `-name`, o que fez com que `find` gerasse um erro:

```
$ find /var/log -name "*.old" "*.log"
find: paths must precede expression: *.log
```

Neste caso, o comando `xargs` deve ser forçado a executar o comando `find` várias vezes (uma vez por linha digitada como entrada padrão). A opção `-L` seguida de um valor **inteiro** permite que você especifique o número máximo de entradas a serem processadas com o comando de uma só vez:

```
$ xargs -L 1 find /var/log -name
*.old
/var/log/dmesg.old
*.log
/var/log/boot.log
/var/log/anaconda.yum.log
/var/log/anaconda.storage.log
/var/log/anaconda.log
/var/log/yum.log
/var/log/audit/audit.log
/var/log/anaconda.ifcfg.log
/var/log/dracut.log
/var/log/anaconda.program.log
<CTRL+D>
```

Para especificar ambos os argumentos na mesma linha, use a opção `-n 1`:

```
$ xargs -n 1 find /var/log -name
*.old *.log
/var/log/dmesg.old
/var/log/boot.log
/var/log/anaconda.yum.log
/var/log/anaconda.storage.log
/var/log/anaconda.log
/var/log/yum.log
/var/log/audit/audit.log
/var/log/anaconda.ifcfg.log
/var/log/dracut.log
/var/log/anaconda.program.log
<CTRL+D>
```

Estudo de caso de um backup com `tar` baseado em uma pesquisa:

```
$ find /var/log/ -name "*.log" -mtime -1 | xargs tar cvfP /root/log.tar
$ tar tvfP /root/log.tar
-rw-r--r-- root/root 1720 2017-04-05 15:43 /var/log/boot.log
-rw-r--r-- root/root 499270 2017-04-06 11:01 /var/log/audit/audit.log
```

O recurso especial do comando `xargs` é que ele coloca o argumento de entrada no final do comando chamado. Isso funciona muito bem com o exemplo acima, uma vez que os arquivos passados formarão a lista de arquivos a serem adicionados ao arquivo.

Usando o comando `cp` como exemplo, para copiar uma lista de arquivos em um diretório, esta lista de arquivos será adicionada no final do comando... mas o que o comando `cp` espera no final do comando é o destino. Para fazer isso, utilize a opção `-I` para colocar os argumentos de entrada em outro lugar que não no final da linha.

```
$ find /var/log -type f -name "*.log" | xargs -I % cp % /root/backup
```

A opção `-I` permite que você especifique um caractere (no nosso exemplo o caractere `%` ) onde os arquivos de entrada para `xargs` serão colocados.

## Pacote `yum-utils`

O pacote `yum-utils` é uma coleção de utilitários feitos para `yum` por vários autores, que o tornam mais poderoso e mais fácil de usar.

!!! Nota

Apesar de o `yum` ter sido substituído por `dnf` no Rocky Linux 8, o nome do pacote permaneceu `yum-utils`, embora ele também possa ser instalado como `dnf-utils`. Tratam-se de utilitários clássicos do YUM implementados como apoio em CLI sobre o DNF para mater a compatibilidade com `yum-3`.

Aqui estão alguns exemplos de uso desses utilitários:

* comando `repoquery`

O comando `repoquery` é usado para consultar os pacotes no repositório.

Exemplos de uso:

* Exibe as dependências de um pacote (pode ser um pacote de software instalado ou não instalado), equivalente a `dnf deplist <package-name>`
```
repoquery --requires <nome-do-pacote>
```
* Exibe os arquivos fornecidos por um pacote instalado (não funciona para pacotes não instalados), equivalente a `rpm -ql <package-name>`
```
$ repoquery -l yum-utils
/etc/bash_completion.d
/etc/bash_completion.d/yum-utils.bash
/usr/bin/debuginfo-install
/usr/bin/find-repos-of-install
/usr/bin/needs-restarting
/usr/bin/package-cleanup
/usr/bin/repo-graph
/usr/bin/repo-rss
/usr/bin/repoclosure
/usr/bin/repodiff
/usr/bin/repomanage
/usr/bin/repoquery
/usr/bin/reposync
/usr/bin/repotrack
/usr/bin/show-changed-rco
/usr/bin/show-installed
/usr/bin/verifytree
/usr/bin/yum-builddep
/usr/bin/yum-config-manager
/usr/bin/yum-debug-dump
/usr/bin/yum-debug-restore
/usr/bin/yum-groups-manager
/usr/bin/yumdownloader
```
* comando `yumdownloader`:
O comando `yumdownloader` baixa os pacotes RPM dos repositórios. Equivalente ao `dnf download --downloaddir ./ nome-do-pacote`
!!! Nota
Este comando é muito útil para criar rapidamente um repositório local de alguns rpms!
Exemplo: `yumdownloader` irá baixar o pacote rpm _samba_ e todas suas dependências:
```
$ yumdownloader --destdir /var/tmp --resolve samba
ou
$ dnf download --downloadonly --downloaddir /var/tmp --resolve samba
```
| Opções | Comentários |
| ----------- | ------------------------------------------------------------ |
| `--destdir` | Os pacotes baixados serão armazenados na pasta especificada. |
| `--resolve` | Também baixa as dependências do pacote. |
## Pacotes `psmisc`
O pacote `psmisc` contém utilitários para gerenciar os processos do sistema:
* `pstree`: o comando `pstree` exibe os processos atuais no sistema em uma estrutura estilo árvore.
* `killall`: o comando `killall` envia um sinal de kill para todos os processos identificados pelo nome.
* `fuser`: o comando `fuser` identifica o `PID` dos processos que usam os arquivos ou sistemas de arquivos especificados.
Exemplos:
```
$ pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
└─tuned───4*[{tuned}]
```
```
# killall httpd
```
Mata os processos (opção `-k`) que acessam o arquivo `/etc/httpd/conf/httpd.conf`:
```
# fuser -k /etc/httpd/conf/httpd.conf
```
## Comando `watch`
O comando `watch` executa um comando regularmente e exibe o resultado no terminal em tela cheia.
A opção `-n` permite especificar o número de segundos entre cada execução do comando.
!!! Nota
Para sair do comando `watch`, você deve digitar as teclas: <kbd>CTRL</kbd>+<kbd>C</kbd> para matar o processo.
Exemplos:
* Exibir o final do arquivo `/etc/passwd` a cada 5 segundos:
```
$ watch -n 5 tail -n 3 /etc/passwd
```
Resultado:
```
A cada 5.0s: tail -n 3 /etc/passwd rockstar.rockylinux.lan: Thu Jul 1 15:43:59 2021

sssd:x:996:993:User for sssd:/:/sbin/nologin
chrony:x:995:992::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
```
* Monitorando o número de arquivos em uma pasta:
```
$ watch -n 1 'ls -l ł wc -l'
```
* Mostrar um relógio:
```
$ watch -t -n 1 date
```

0 comments on commit 7b79014

Please sign in to comment.