num mundo repleto de novas ferramentas e ambientes de desenvolvimento diversificados, é praticamente uma necessidade para qualquer desenvolvedor ou engenheiro aprender alguns comandos básicos do sysadmin. Comandos e pacotes específicos podem ajudar os desenvolvedores a organizar, solucionar problemas e otimizar suas aplicações e—quando as coisas correm mal—fornecer informações valiosas de triagem para operadores e administradores do Sys.
quer seja um novo desenvolvedor ou queira gerir a sua própria aplicação, os seguintes 20 comandos básicos do sysadmin podem ajudá-lo a compreender melhor as suas aplicações. Eles também podem ajudá-lo a descrever problemas para sys admins solução de problemas por que uma aplicação pode funcionar localmente, mas não em uma máquina remota. Estes comandos se aplicam a ambientes de desenvolvimento Linux, containers, máquinas virtuais (VMs) e bare metal.
curl
curl transfere um URL. Utilize este comando para testar o objectivo ou a conectividade de uma aplicação a um objectivo de serviço a montante. o curl pode ser útil para determinar se a sua aplicação pode chegar a outro serviço, como um banco de dados, ou verificar se o seu serviço é saudável.Como exemplo, imagine que a sua aplicação lança um erro HTTP 500 indicando que não consegue chegar a uma base de dados MongoDB:
$ curl -I -s myapplication:5000
HTTP/1.0 500 INTERNAL SERVER ERROR
a opção-I Mostra a informação do cabeçalho e a opção-s silencia o corpo de resposta. A verificar o ponto final da sua base de dados a partir do seu ambiente de trabalho local:
$ curl -I -s database:27017
HTTP/1.0 200 OK
Então, qual pode ser o problema? Verifique se a sua aplicação pode chegar a outros lugares além da base de dados a partir da máquina de Aplicação:Parece estar tudo bem. Agora tente chegar à base de dados a partir da máquina de Aplicação. A sua aplicação está a usar o nome da máquina da base de dados, por isso tente primeiro:
$ curl database:27017
curl: (6) Couldn't resolve host 'database'
isto indica que a sua aplicação não consegue resolver a base de dados porque o URL da base de dados está indisponível ou a máquina (contentor ou VM) não tem um servidor de nomes que possa usar para resolver o nome da máquina.
python-m json.tool / jq
depois de emitir curl, a saída da chamada da API pode ser difícil de ler. Às vezes, você quer imprimir a saída JSON para encontrar uma entrada específica. Python tem uma biblioteca JSON incorporada que pode ajudar com isso. Usa JSON python-M.ferramenta para indentar e organizar o JSON. Para usar o módulo JSON do Python, pipe a saída de um arquivo JSON para o JSON python-M.comando de ferramentas.
$ cat test.json
{"title":"Person","type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"age":{"description":"Age in years","type":"integer","minimum":0}},"required":}
para usar a biblioteca Python, canalize a saída para Python com a opção-m (módulo).
$ cat test.json | python -m json.tool
{
"properties": {
"age": {
"description": "Age in years",
"minimum": 0,
"type": "integer"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
}
},
"required": ,
"title": "Person",
"type": "object"
}
para o mais avançado JSON parsing, você pode instalar jq. o jq fornece algumas opções que extraem valores específicos da entrada do JSON. Para imprimir como o módulo Python acima, basta aplicar o jq ao resultado.
$ cat test.json | jq
{
"title": "Person",
"type": "object",
"properties": {
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"age": {
"description": "Age in years",
"type": "integer",
"minimum": 0
}
},
"required":
}
ls
ls lists files in a directory. O sys admins e os programadores emitem este comando com bastante frequência. No espaço do container, este comando pode ajudar a determinar o diretório e arquivos da imagem do container. Além de procurar seus arquivos, ls pode ajudá-lo a examinar suas permissões. No exemplo abaixo, você não pode executar myapp por causa de uma questão de permissões. Quando você verifica as permissões usando ls-l, Você percebe que as permissões não têm um “x” in-rw-r–r–, que são lidas e escritas apenas.
$ ./myapp
bash: ./myapp: Permission denied
$ ls -l myapp
-rw-r--r--. 1 root root 33 Jul 21 18:36 myapp
tail
tail exibe a última parte de um arquivo. Normalmente não precisas de todas as linhas de registo para resolver problemas. Em vez disso, você quer verificar o que seus registros dizem sobre o pedido mais recente para a sua aplicação. Por exemplo, você pode usar o tail para verificar o que acontece nos logs quando você faz um pedido ao seu Servidor HTTP Apache.
rabo-de-cavalo.png
Use o tail-f para seguir os logs HTTP do Apache e ver os pedidos como eles acontecem.
a opção-f indica a opção “seguir”, que emite as linhas de log como elas são escritas no arquivo. O exemplo tem um script de fundo que acessa o endpoint a cada poucos segundos e o log registra o pedido. Em vez de seguir o log em tempo real, você também pode usar o tail para ver as últimas 100 linhas do arquivo com a opção-n.
$ tail -n 100 /var/log/httpd/access_log
cat
cat concatenates and prints files. Você pode emitir cat para verificar o conteúdo de seu arquivo de dependências ou para confirmar a versão da aplicação que você já construiu localmente.
$ cat requirements.txt
flask
flask_pymongo
o exemplo acima verifica se a aplicação do frasco em Python tem um frasco listado como uma dependência.
grep
grep procura padrões de ficheiros. Se você está procurando um padrão específico na saída de outro comando, grep destaca as linhas relevantes. Use este comando para pesquisar arquivos de log, processos específicos, e muito mais. Se você quiser ver se Apache Tomcat começa, você pode ficar sobrecarregado pelo número de linhas. Ao encaminhar essa saída para o comando grep, você isola as linhas que indicam a inicialização do servidor.
$ cat tomcat.log | grep org.apache.catalina.startup.Catalina.start
01-Jul-2017 18:03:47.542 INFO org.apache.catalina.startup.Catalina.start Server startup in 681 ms
ps
o comando ps, parte do pacote procps-ng que fornece comandos úteis para investigar IDs do processo, mostra o estado de um processo em execução. Use este comando para determinar uma aplicação em execução ou confirmar um processo esperado. Por exemplo, se você quiser verificar se existe um servidor web Tomcat em execução, você usa ps com suas opções para obter o ID do processo do Tomcat.
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 2 18:55 ? 00:00:02 /docker-java-home/jre/bi
root 59 0 0 18:55 pts/0 00:00:00 /bin/sh
root 75 59 0 18:57 pts/0 00:00:00 ps -ef
para uma legibilidade ainda maior, utilizar ps e canalizá-lo para grep.
$ ps -ef | grep tomcat
root 1 0 1 18:55 ? 00:00:02 /docker-java-home/jre/bi
env
env permite-lhe definir ou imprimir as variáveis de ambiente. Durante a resolução de problemas, poderá achar útil verificar se a variável de ambiente errada impede o início da sua aplicação. No exemplo abaixo, este comando é usado para verificar as variáveis de ambiente definidas na máquina da sua aplicação.
$ env
PYTHON_PIP_VERSION=9.0.1
HOME=/root
DB_NAME=test
PATH=/usr/local/bin:/usr/local/sbin
LANG=C.UTF-8
PYTHON_VERSION=3.4.6
PWD=/
DB_URI=mongodb://database:27017/test
Notice that the application is using Python and has environment variables to connect to a MongoDB database.
top
top displays and updates classified process information. Use esta ferramenta de monitoramento para determinar quais processos estão rodando e quanta memória e CPU eles consomem. Um caso comum ocorre quando você executa uma aplicação e ela morre um minuto depois. Primeiro, você verifica o erro de retorno da aplicação, que é um erro de memória.
$ tail myapp.log
Traceback (most recent call last):
MemoryError
a sua aplicação está realmente fora de memória? Para confirmar, use top para determinar a quantidade de CPU e memória que sua aplicação consome. Ao emitir o top, você notará uma aplicação Python usando a maioria da CPU, com sua utilização de memória subindo, e suspeitará que é sua aplicação. Enquanto corre, você carrega na tecla ” C ” para ver o comando completo e o engenheiro reverso se o processo for a sua aplicação. Acontece que é a sua aplicação intensiva em memória (memeater.py). quando a sua aplicação ficou sem memória, o sistema a mata com um erro de memória (OOM).
óptimo.png
o uso de memória e CPU da aplicação aumenta, eventualmente sendo OOM-killed.
example_topwithc.png
pressionando a tecla “C”, você pode ver o comando completo que iniciou a aplicação.
além de verificar sua própria aplicação, você pode usar top para depurar outros processos que utilizam CPU ou memória.
netstat
netstat mostra o estado da rede. Este comando mostra os portos de rede em uso e as suas ligações de entrada. No entanto, o netstat não sai da caixa no Linux. Se você precisar instalá-lo, você pode encontrá-lo no pacote net-tools. Como um desenvolvedor que experimenta localmente ou empurra uma aplicação para um host, você pode receber um erro de que uma porta já está alocada ou um endereço já está em uso. Usando o netstat com opções de Protocolo, processo e porta demonstra que o Servidor HTTP Apache já usa o porto 80 na máquina abaixo.
example_netstat.png
usando netstat-tulpn mostra que o Apache já usa a porta 80 nesta máquina.
ip
se o endereço ip não funcionar na sua máquina, deve ser instalado com o pacote iproute2. O endereço subcomand (ou apenas ip a para abreviar) mostra as interfaces e endereços IP da máquina da sua aplicação. Você usa o endereço ip para verificar o seu contêiner ou endereço IP do host. Por exemplo, quando o seu container está ligado a duas redes, o endereço ip pode mostrar qual interface se conecta a qual rede. Para uma simples verificação, você pode sempre usar o comando endereço ip para obter o endereço IP da máquina. O exemplo abaixo mostra que o container web tem um endereço IP de 172.17.0.2 na interface eth0.
$ ip address show eth0
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether d4:3b:04:9e:b2:c2 brd ff:ff:ff:ff:ff:ff
inet 10.1.1.3/27 brd 10.1.1.31 scope global dynamic noprefixroute eth0
valid_lft 52072sec preferred_lft 52072sec
lsof
lsof lista os ficheiros abertos associados ao seu pedido. Em algumas imagens de máquinas Linux, você precisa instalar lsof com o pacote lsof. No Linux, quase qualquer interação com o sistema é tratada como um arquivo. Como resultado, se a sua aplicação escrever para um ficheiro ou abrir uma ligação de rede, a lsof irá reflectir essa interacção como um ficheiro. Semelhante ao netstat, você pode usar lsof para verificar portas de escuta. Por exemplo, se você quiser verificar se o porto 80 está em uso, você usa lsof para verificar qual processo está usando. Abaixo, você pode ver que o httpd (Apache) escuta no porto 80. Você também pode usar lsof para verificar o ID do processo do httpd, examinando onde reside o binário do servidor web (/usr/sbin/httpd).
por exemplo.png
o Lsof mostra que o httpd ouve no porto 80. Examinando o ID do processo do httpd também mostra todos os arquivos que o httpd precisa para executar.
O nome do arquivo aberto na lista de arquivos abertos ajuda a identificar a origem do processo, especificamente Apache.
df
pode utilizar df (display free disk space) para resolver problemas de espaço em disco. Quando você executar o seu aplicativo em um orquestrador de contêineres, você pode receber uma mensagem de erro sinalizando a falta de espaço livre no host do contêineres. Enquanto o espaço em disco deve ser gerenciado e otimizado por um sysadmin, você pode usar o df para descobrir o espaço existente em um diretório e confirmar se você está realmente fora do espaço.
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 7.7G 0 7.7G 0% /dev
/dev/mapper/RHEL-Root 50G 16G 35G 31% /
/dev/nvme0n1p2 3.0G 246M 2.8G 9% /boot
/dev/mapper/RHEL-Home 100G 88G 13G 88% /home
/dev/nvme0n1p1 200M 9.4M 191M 5% /boot/efi
/dev/sdb1 114G 55G 54G 51% /run/media/tux/red
a opção-h imprime a informação em formato legível pelo homem. Por padrão, como no exemplo, df fornece resultados para tudo sob o diretório raiz, mas você também pode limitar os resultados, fornecendo um diretório como parte de seu comando (como df -h /home).
du
para obter informações mais detalhadas sobre quais arquivos usam o espaço em disco em um diretório, você pode usar o comando du. Se quiser saber qual o registo que ocupa mais espaço no directório /var/log, por exemplo, pode usar o du com a opção-h (legível por humanos) e a opção-s para o tamanho total.
$ du -sh /var/log/*
1.8M /var/log/anaconda
384K /var/log/audit
4.0K /var/log/boot.log
0 /var/log/chrony
4.0K /var/log/cron
4.0K /var/log/maillog
64K /var/log/messages
o exemplo acima revela que o maior directório em /var /log é/var/log / audit. Você pode usar du em conjunto com df para determinar o que utiliza o espaço em disco no host da sua aplicação.
id
para verificar o utilizador que executa a aplicação, use o comando id para devolver a identidade do utilizador. O exemplo abaixo usa Vagrant para testar a aplicação e isolar seu ambiente de desenvolvimento. Depois de entrar na caixa Vagrant, se você tentar instalar o Servidor HTTP Apache (uma dependência), o sistema afirma que você não pode executar o comando como root. Para verificar seu usuário e grupo, emitir o comando id e notar que você está executando como o usuário “vagrant” no grupo “vagrant”.
$ dnf -y install httpd
Loaded plugins: fastestmirror
You need to be root to perform this command.
$ id
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
para corrigir isso, você deve executar o comando como um superusuário, que fornece privilégios elevados.
chmod
quando executar o seu binário de aplicação pela primeira vez no seu hospedeiro, poderá receber a mensagem de erro “permissão negada.”Como visto no exemplo para ls, você pode verificar as permissões de sua aplicação binária.
$ ls -l
total 4
-rw-rw-r--. 1 vagrant vagrant 34 Jul 11 02:17 test.sh
isto mostra que você não tem direitos de execução (nenhum “x”) para executar o binário. o chmod pode corrigir as permissões para permitir ao seu utilizador executar o binário.
$ chmod +x test.sh
$ ls -l
total 4
-rwxrwxr-x. 1 vagrant vagrant 34 Jul 11 02:17 test.sh
como demonstrado no exemplo, isto atualiza as permissões com direitos de execução. Agora, quando você tenta executar o seu binário, a aplicação não lança um erro negado por Permissão. Chmod pode ser útil quando você carregar um binário em um recipiente também. Garante que o seu contentor tem as permissões correctas para executar o seu binário.
dig / nslookup
um servidor de nomes de domínio (DNS) ajuda a resolver um URL para um conjunto de servidores de aplicações. No entanto, você pode achar que uma URL não resolve, o que causa um problema de conectividade para sua aplicação. Por exemplo, digamos que você tenta acessar seu banco de dados no URL mydatabase do host da sua aplicação. Em vez disso, você recebe um erro “não pode resolver”. Para resolver problemas, você tenta usar o dig (utilitário de pesquisa DNS) ou o nslookup (servidores de nomes de internet de pesquisa) para descobrir por que a aplicação não consegue resolver a base de dados.
$ nslookup mydatabase
Server: 10.0.2.3
Address: 10.0.2.3#53
** server can't find mydatabase: NXDOMAIN
usando nslookup mostra que a mydatabase não pode ser resolvida. Tentar resolver com o dig produz o mesmo resultado.
$ dig mydatabase
; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7_3.1 <<>> mydatabase
;; global options: +cmd
;; connection timed out; no servers could be reached
estes erros podem ser causados por muitas questões diferentes. Se não conseguir depurar a causa raiz, contacte o seu sysadmin para mais investigação. Para testes locais, este problema pode indicar que os nameservers do seu host não estão configurados adequadamente. Para usar estes comandos, terá de instalar o pacote de utilitários BIND.
firewall-cmd
tradicionalmente, firewalls foram configurados no Linux com o comando iptables, e apesar de manter a sua ubiquidade, ele realmente foi amplamente substituído por nftables. Um front-end amigável para nftables, e aquele que navega com muitas distribuições por padrão, é firewall-cmd. Este comando ajuda-o a definir regras que regem o tráfego de rede, tanto de saída como de entrada, que o seu computador permite. Estas regras podem ser agrupadas em zonas, para que possa mover-se rápida e facilmente de um conjunto de regras para outro, dependendo das suas necessidades.
a sintaxe do comando é simples. Você usa o comando e algumas opções, todas com nomes que quase o ajudam a construir uma frase legível pelo ser humano. Por exemplo, para ver em que zona Você está atualmente:
$ sudo firewall-cmd --get-active-zones``
corp
interfaces: ens0
dmz
interfaces: ens1
neste exemplo, o seu computador tem dois dispositivos de rede, e um é atribuído à zona corp
, enquanto o outro é atribuído à zona dmz
.
Para ver o que cada zona permitir, você pode usar o --list-all
opção:
$ sudo firewall-cmd --zone corp --list-all
corp
target: default
interfaces: ens0
services: cockpit dhcpv6-client ssh
ports:
protocols:
a Adição de serviços é tão fácil:
$ sudo firewall-cmd --add-service http --permanent
$ sudo firewall-cmd --reload
Interagindo com o firewall-cmd é projetado para ser intuitivo, e ele tem uma extensa colecção de predifined serviços, além da capacidade de escrever nft regras diretamente. Uma vez que você começar a usar firewall-cmd, você pode baixar a nossa folha de batota firewall-cmd para ajudá-lo a se lembrar de suas opções mais importantes.
sestatus
você geralmente encontra SELinux (um módulo de segurança Linux) forçado em uma máquina de Aplicação gerenciada por uma empresa. O SELinux fornece acesso menos privilegiado aos processos em execução na máquina, impedindo que os processos potencialmente maliciosos acessem arquivos importantes no sistema. Em algumas situações, uma aplicação precisa acessar um arquivo específico, mas pode lançar um erro. Para verificar se o SELinux bloqueia a aplicação, use o tail e o grep para procurar uma mensagem “negada” no registo /var/log/auditoria. Caso contrário, você pode verificar para ver se a caixa tem SELinux habilitado usando o sestatus.
$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28
a saída acima indica que a máquina da aplicação tem o SELinux habilitado. No seu ambiente de desenvolvimento local, você pode atualizar o SELinux para ser mais permissivo. Se precisar de ajuda com uma máquina remota, o seu sysadmin pode ajudá-lo a determinar as melhores práticas para permitir que a sua aplicação acesse o ficheiro de que necessita. Se você está interagindo com o SELinux com freqüência, baixe nossa folha de batota SELinux para uma referência rápida.
história
quando você emite tantos comandos para testes e depuração, você pode esquecer os úteis! Cada shell tem uma variante do comando histórico. Ele mostra o histórico dos comandos que você emitiu desde o início da sessão. Você pode usar o histórico para logar quais comandos você usou para solucionar o problema de sua aplicação. Por exemplo, quando você emite o histórico ao longo deste artigo, ele mostra os vários comandos que você experimentou e aprendeu.
$ history
1 clear
2 df -h
3 du
e se você quiser executar um comando no seu histórico anterior, mas você não quer reprogramá-lo? Use ! antes do número de comando a executar novamente.
por exemplo, história.png
somando ! antes do número de comando que você deseja executar problemas o comando novamente.
comandos básicos podem melhorar sua experiência de solução de problemas ao determinar por que sua aplicação funciona em um ambiente de desenvolvimento, mas talvez não em outro. Muitos sys admins alavancam esses comandos para depurar problemas com sistemas. Compreender alguns destes comandos úteis de solução de problemas pode ajudá-lo a comunicar com o sys admins e resolver problemas com a sua aplicação.Este artigo foi originalmente publicado em julho de 2017 e foi atualizado pelo editor.