Como gerenciar o seu Mac OS X por linha de comando
é possível gerenciar o OSX por linha de comando? Claro! Muita gente me pergunta isso e se assusta com a resposta. Vale lembrar que o OSX é uma fusão do antigo System 9 da Apple com o NextOS do Steve Jobs, que teve variações do BSD UNIX. Até a versão do OSX Leopard, 10.5, o sistema passou por uma grande mudança com o Snow Leopard. Eu particularmente, prefiro o Linux no hardware da Apple do que o próprio OSX, eu tenho 2 máquinas da Apple, sendo um MacBook com OSX e Linux e um MacMini apenas com Linux (distribuição Ubuntu), sendo o meu desktop. Antes o meu macbook apenas com Linux, mas por uma única necessidade, e como eu nem morto vou usar o sistema do mal, o Windows, eu preferi manter o OSX em uma das máquinas, o que em breve vai morrer. Mas não ache que o meu OSX esta somente com softwares da Apple e sim com muitos softwares GNU, é claro. Mas, o que eu vou mostrar abaixo é configuração Apple, e apenas do OSX. Porque hardware da Apple? As máquinas não possuem BIOS (maldita BIOS), que corrompe muitos PCs de hoje em dia. Os Apples, são equipados de EFI que permitem usar do flag GPT para criar partições com grandes extenções. Ao contrário do padrão MBR, e partições msdos do PC.
Por isso que o OSX vinha com o BootCamp instalado, para criar e redimencionar na área extendida da EFI GPT, partições msdos para a instalação de sistemas como do Windows (heresias, mas tudo bem). Sendo que o Linux não precisa nada disso, com um boot direto do CD, vc pode instalar no hardware da Apple, apenas respeitando a partição EFI GPT para até 2GB. Caso vc venha manter um dual boot com o OSX, vc pode usar o rEFIt, para dualboot.
Todo o sistema é gerenciado não por init e sim pelo launchd, o principal processo que é responsável por todo o sistema de gerenciamento de boot do OSX e a carga de todos os scripts launchd por LaunchAgents, que são inicializados por configurações específicas do seu formato xml dos arquivos \354preference files\356, ou plist. Vc ja deve ter inicializado o MacOS X em single user sem a interface gráfica com a função COMMAND + S, no boot da EFI, não? Se não! Faça isso agora! é muito interessante vc instalar o xcode e o X11 que se encontra no CD de instalação do OSX ou baixar no site da própria Apple. pois o xcode contem todos os comandos GNU e o X11 permite vc abrir aplicações Linux ou UNIX exportadas por DISPLAY. Outro fator é utilizar o seu sistema de gerenciamento de pacotes por linha de comando pelo macports, o que coloquei na matéria http://www.aprigiosimoes.com.br/2009/10/15/macports-para-mac-os-x/, de como utilizar o ports no OSX. Ao ficar pagando para a Apple no store ou colocando softwares crackeados, que feio.
Para comecarmos vamos entender que a Apple tem por grande contribuição com o mundo opensource, como o CUPS (exemplo), cujo comprou da EASY Software a anos e passou a ser a mantedora. Sim o mesmo sistema de impressão que acompanha o Linux, antes LPR/NG.
Quando vc digita o comando uname -a no terminal, vc pode reparar o nome do verdadeiro sistema UNIX da Apple, o Darwin OS, e a sua versão, sendo que o kernel do MACOS X é o XNU.No meu caso, na versão 1504.15.3~1/RELEASE_I386. (Ei, MacOS roda em 64 bits).
osx:~ aprigio$ uname -a
Darwin osx.local 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386
Todo o gerenciamento de daemons (serviços), do sistema geral, são armazenados em /System/Library/LaunchDaemons/. Toda a estrutura de serviços de apliçações que são automaticamente carregados no perfil do sistema, ficam armazenados em /System/Library/LaunchAgents/ (digo os arquivos xml). Um deles é o org.x.startx.plist que é responsável por carregar todo o servidor X11 pelo /usr/X11/bin/startx, dentro do OSX. Os scripts preference list, no formato xml para o perfil de aplicações, e não daemons, estão armazenados em /System/Library/LaunchAgents, e no perfil de usuário em $HOME/Library/LaunchAgents.
Por exemplo, no meu perfil eu coloquei em LaunchAgents para sempre inicializar o vboxwebsrv com o script org.virtualbox.vboxwebsrv.plist. Lembre-se que isso não é o mesmo encontrado em perfil de conta pela interface gráfica que automaticamente se inicia uma aplicação.
Vale lembrar que todo o gerenciamento de carga e descarga de scripts launchd no OSX é realizado não mais pelo service e somente pelo launchctl, assim como no Linux acontecerá com o poderoso systemd e pelo systemctl. Poder não?
Então vamos la,
e abrirá o terminal em /dev/ttys000. O terminal que vc esta é encontrado com o comando tty e o seu hostname com o comando hostname.
Quando vc instala o OSX ele cria o grupo admin (GID 80), e coloca o primeiro usuário nele e da previlégios de sudo, assim como no Ubuntu, e adiciona geralmente o usuário nos grupos staff (sendo o seu grupo primário), e outros grupos adicionais que gerenciam alguns daemons e permitem privilégios. Voce pode executar o comando sudo para executar qualquer comando de root ou virar root da mesma forma. Voce pode até editar o seu /etc/sudoers com o visudo.
Como é o launchd gerenciado pelo launchctl que controla todo o sistema de daemons e serviços, vc pode executar o comando launchctl list, ou apenas list no terminal do launchctl para verificar todos os serviços que estão executando e seu respectivo PID e status.
PID Status Label 771 - com.apple.launchd.peruser.0 258 - 0x100402bb0.anonymous.Terminal 284 - 0\u25ca100402520.anonymous.login 285 - 0x1004077d0.anonymous.bash 770 - 0\u25ca100401230.anonymous.su 208 - 0\u25ca100407510.anonymous.SR_Watchdog
Existem outras opções para o launchctl que é um mundo de gerenciamento no OSX, mas as opções que se destacam sem dúvida é load para carregar daemons em background e unload para descarregar, toda as 2 opções é necessário do -w, que permite reescrever a configuração para o próximo boot. -F que força a inicialização de um plist. Antes existia o arquivo /etc/launchd.conf que pode ser que vc nao encontre mais. Dentro da gerencia do launchctl, caso vc digite sem opção, existem as opções para remover jobs, reverter umask para launchd, exportar variaveis de ambiente para launchd, iniciar ou interromper um job do launchd. Vale lembrar que cada serviço em execução no OSX pelo launchd é constituído um job. Voce pode verificar todos os serviços com o comando sudo launchctl list e filtar com o grep apenas o serviço ssh, por exemplo.
Para iniciar algum serviço, voce pode usar o launchctl para iniciar algum serviço, como exemplo o ssh, carregando ou descarregando o seu plist direto do diretório de daemons.
O MacOSX, possui o seu grenciamento de redes pelo networksetup, sendo que ele mesmo escreve nas configurações do network-admin da interface gráfica e airport. é necessário ser root ou por usuário digitar o comando sudo antes.
Pelo comando
é possível verificar todos os serviços de rede que estão ativos e configurados para uso, ja o comando
permite verificar em escala as configurações de rede e em que device se encontra cada uma. O comando
pode verificar o seu status de rede, o que facilmente voce também pode pegar com o comando
Sendo, geralmente (não nos casos de macbook air),dispositivo en0 para rede ethernet, ou seja por cabo e en1 geralmente para airport, ou o wireless. Então digite:
e
Com o comando
é possível até escrever as configurações de rede, o que facilmente voce também poderia fazer com o comando
e
sendo que o networksetup escreve a configuração do
é possível até verificar e escrever configurações de DNS e qualquer objeto de rede de System Preferences, com o comando
para airport ou ethernet, para exibir algum DNS adicional ou definir um novo com o comando:
no caso de adicionar na configuração de airport (wireless), O IP público do Google.
Até mesmo vc pode entrar em uma rede sem fio por linha de comando no OSX com o comando:
como desabilitar o seu suporte a airpot (wireless), com o comando:
ou
Voce pode verificar os processos com o comando top ou ps normalmente.
Existem muitos outros comandos UNIX e do proprio gerenciamento do OSX que eu poderia colocar aqui, mas daria para escrever um livro. Prometo escrever mais, como o samba, NFS e até mesmo o X11 para OSX.
Objetivo do comando: listar o conte\u02d9do de um diretório.
SYNOPSIS
ou
Um utilit\267rio ls apareceu na vers\u201eo original do
DESCRIPTION
If no operands are given, the contents of the current
directory are displayed. If more than one oper-
and is given, non-directory operands are displayed first;
directory and non-directory operands are
sorted separately and in lexicographical order.
Listagem limpa (somente o nome do conte\u02d9do)
The following options are available:
exibe todos os arquivos incluindo os arquivos ocultos. Mas n\u201eo exibe
o diretório de trabalho/atual (.) ou o
diretório pai (..).
Mostra todos os arquivos, at\310 mesmo arquivos que est\u201eo
escondidos (estes arquivos come\301am com um ponto.)
For\301ar impress\u201eo de caracteres n\u201eo-imprim\314veis para a nota\301\u201eo octal ddd \\.
-b
Multi-coluna de sa\314da com as entradas ordenadas as colunas. Geralmente esta \310 a op\301\u201eo padr\u201eo.
Se um argumento for um diret\333rio que lista apenas
o seu nome n\u201eo seu conte\u02d9do.
For\301ar cada argumento deve ser interpretado
como um diret\333rio e listar o nome encontrado
em cada slot. Esta op\301\u201eo desativa-l,-t,-s,-r, e liga-a,
a ordem \310 a ordem em que as entradas aparecem no diret\333rio.
Marcar diret\333rios com uma barra (/), portas com uma fuga
sinal de maior que (>), arquivos execut\267veis ??com um
asterisco (*), FIFOs com uma barra de fuga vertical (|),
links simb\333licos com uma fuga arroba (@), e da fam\314lia
de endere\301o AF_UNIX soquetes com uma fuga sinal de igual (=).
Mesmo que -l, excepto o propriet\267rio n\u201eo \310 impresso.
For each file, print the file's file serial number (inode number).
Se um argumento for uma liga\301\u201eo simb\333lica,
lista o arquivo ou diret\333rio as refer\315ncias
link em vez de o pr\333prio link.
Mostra grandes quantidades de informa\301\u201eo (permiss\u0131es,
propriet\267rios, tamanho e quando modificada pela \u02d9ltima vez.)
Formato de sa\314da de fluxo; arquivos est\u201eo listados
na p\267gina, separados por v\314rgulas.
O mesmo que -l, excepto que UID do dono e n\u02d9meros
GID grupo s\u201eo impressos, em vez de as cadeias de caracteres associados.
O mesmo que -l, excepto que o grupo n\u201eo \310 impresso.
Exibe uma barra (/) depois do nome do diret\333rio.
For\301a impress\u201eo de caracteres n\u201eo-imprim\314veis
em nomes de arquivos como o ponto de interroga\301\u201eo personagem (?).
Inclui o conte\u02d9do de subpastas.
Inverte a ordem de como os arquivos s\u201eo exibidos.
D\267 o tamanho em blocos, incluindo os blocos indiretos, para cada entrada.
Mostra os arquivos por data de modifica\301\u201eo.
Use o tempo do \u02d9ltimo acesso em vez da \u02d9ltima
modifica\301\u201eo para ordenar (com a op\301\u201eo-t)
ou impress\u201eo (com a op\301\u201eo-l).
Exibe os arquivos em colunas.
Nos exemplos a seguir:
Listar do diretõrio atual:
For each operand that names a file of a type other than directory,
ls displays its name as well as any
requested, associated information. For each operand
that names a file of type directory, ls displays
the names of files contained within that directory,
as well as any requested, associated information.
-@
Display extended attribute keys and sizes in long (-l) output.
-1 (número 1)
Force output to be one entry per line. This is the default when
output is not to a terminal.
-A
List all entries except for . and ... Always set for the super-user.
-a
Include directory entries whose names begin with a dot (.).
-B
List all entries except for . and ...
Always set for the super-user.
As -B, but use C escape codes whenever possible.
-C
Force multi-column output; this is the default when output is to a terminal.
-c
Use time when file status was last changed for sorting (-t)
or long printing (-l).
-d
Directories are listed as plain files (not searched recursively).
-e
Print the Access Control List (ACL) associated
with the file, if present, in long (-l) output.
-F
Display a slash ('/') immediately after each pathname that
is a directory, an asterisk ('*')
after each that is executable, an at sign ('@') after
each symbolic link, an equals sign ('=')
after each socket, a percent sign ('%') after
each whiteout, and a vertical bar ('|') after
each that is a FIFO.
-f
Output is not sorted. This option turns on the -a option.
-G
Enable colorized output. This option is equivalent to defining
CLICOLOR in the environment.
(See below.)
-g
This option is only available for compatibility
with POSIX; it is used to display the group
name in the long (-l) format output (the owner name is suppressed).
-H
Symbolic links on the command line are followed.
This option is assumed if none of the -F, -d,
or -l options are specified.
-h
When used with the -l option, use unit suffixes:
Byte, Kilobyte, Megabyte, Gigabyte, Terabyte
and Petabyte in order to reduce the number of
digits to three or less using base 2 for sizes.
-i
Para cada arquivo, imprimir o n\u02d9mero i-node na primeira coluna do relat\333rio.
-k
If the -s option is specified, print the file size
allocation in kilobytes, not blocks. This
option overrides the environment variable BLOCKSIZE.
-L
Follow all symbolic links to final target and
list the file or directory the link references
rather than the link itself. This option cancels the -P option.
-l
(The lowercase letter ``ell''.) List in long format.
(See below.) If the output is to a terminal,
a total sum for all the file sizes is output on a line before the long listing.
-m
Stream output format; list files across the page,
separated by commas.
-n
Display user and group IDs numerically, rather than
converting to a user or group name in a
long (-l) output. This option turns on the -l option.
-O
Include the file flags in a long (-l) output.
-o
List in long format, but omit the group id.
-P
If argument is a symbolic link, list the link
itself rather than the object the link references.
This option cancels the -H and -L options.
-p
Write a slash (`/') after each filename
if that file is a directory.
-q
Force printing of non-graphic characters in file
names as the character `?'; this is the
default when output is to a terminal.
-R
Recursively list subdirectories encountered.
-r
Reverse the order of the sort to get reverse
lexicographical order or the oldest entries first
(or largest files last, if combined with sort by size
-S
Sort files by size
-s
Display the number of file system blocks actually used by each file, in units of 512 bytes,
where partial units are rounded up to the next integer value. If the output is to a terminal,
a total sum for all the file sizes is output on a line before the listing. The environment
variable BLOCKSIZE overrides the unit size of 512 bytes.
-T
When used with the -l (lowercase letter ``ell'') option, display complete time information for
the file, including month, day, hour, minute, second, and year.
-t
Sort by time modified (most recently modified first) before sorting the operands by lexico-
graphical order.
-U
Use time of file creation, instead of last modification for sorting (-t) or long output (-l).
-u
Use time of last access, instead of last modification
of the file for sorting (-t) or long
printing (-l).
-v
Force unedited printing of non-graphic characters;
this is the default when output is not to a
terminal.
-W
Display whiteouts when scanning directories. (-S) flag).
-w
Force raw printing of non-printable characters. This is the default when output is not to a
terminal.
-x
The same as -C, except that the multi-column
output is produced with entries sorted across,
rather than down, the columns.
Exemplo de comandos ls
Índice
Permiss\u0131es
Qt. de Diret\333rios
???
Grupo
Tamanho
Data Modif.
Diret\333rio ou arquivo
dr-xr-xr-x
2
root
wheel
1
14 Out 09:45
net
comando: ls -lrS
COMANDO ls FAVORITO
If you want to count only files and NOT include symbolic links (just an example of what else you could do), you could use ls -l | grep -v ^l | wc -l (that's an "L" not a "1" this time, we want a "long" listing here). grep checks for any line beginning with "l" (indicating a link), and discards that line (-v).
Relative speed: "ls -1 /usr/bin/ | wc -l" takes about 1.03 seconds on an unloaded 486SX25 (/usr/bin/ on this machine has 355 files). "ls -l /usr/bin/ | grep -v ^l | wc -l" takes about 1.19 seconds.
altera diretórios.
Para alterar diretõrios em um ambiente * nix, use o comando cd.
logar em determinado usuario
Acessar maq. unix a partir do windows
para copiar arq de linux para win
adduser | Cria um novo usuario | |
cal | Mostra calendário | |
cat | Mostra o conteúdo de um arquivo | |
cd | Muda de diretório | |
chgrp | Altera o grupo de um arquivo ou diretório | |
chmod | Altera as permissões de um arquivo ou diretório | |
chown | Altera o proprietário de um arquivo ou diretorio | |
cmp | Compara dois arquivos e informa as diferencas | |
cp | Copia um arquivo | |
cpio | Utilitário de backup | |
cut | Copia uma coluna especí fica de um arquivo | |
date | Mostra a data e a hora do sistema | |
dd | Copia discos | |
df | Mostra informações sobre as particoes montadas no sistema | |
du | Informa o uso (em bytes) do disco/sistema | |
dump | Utilitario de backup | |
ee | Editor de textos | |
fdisk | Editor de particoes | |
fdformat | Formata um disco | |
find | Procura por nome, um arquivo ou diretorio | |
fsck | Procura/Corrige erros em um sistema de arquivos | |
gdb | Debug | |
grep | Procura por um string ou palavra | |
hostname | Mostra o nome do sistema | |
kill | Termina/Restarta um processo | |
ln | Cria link entre um arquivo e outro | |
lpq | Informa o status dos jobs enviados para impressao | |
lpr | Envia um arquivo para ser impresso | |
lprm | Remove um arquivo da fila de impressao | |
ls | Lista arquivos e diretorios | |
Envia ou recebe um e-mail | ||
man | Mostra o manual online de um comando | |
mkdir | Cria um diretorio | |
more | Faz uma pausa entre a exibicao de uma tela e outra | |
mount | Monta o conteudo de uma particao em um diretorio | |
mv | Move/Renomeia um arquivo | |
newfs | Formata um disco | |
nohup | Informa o sistema para nao interromper a execucao do comando apos seu logout | |
passwd | Altera seu password no sistema | |
pkg_add | Instala um aplicativo do packages (pkg_add) | |
pkg_delete | Remove um aplicativo (pkg_delete) | |
ps | Mostra informacoes sobre o status dos processos em execucao | |
pwd | Mostra o diretorio atual | |
rm | Remove um arquivo | |
rmdir | Remove um diretorio | |
rmuser | Remove um usuario | |
split | Divide um arquivo | |
su | Assume o Login de outro usuario | |
tar | Utilitario de Backup | |
a href="#vi">vi | Editor de textos | |
who | Mostra os usuarios logados no sistema |
Comandos b\341sicos no Vi (editor de texto no linux)
Um guia para os iniciantes no mundo Linux
Comandos basicos do editor vi.
O editor de texto preferido de 9 entre cada 10 usuarios UNIX \351 o vi. A sintaxe para executar o vi \351 a seguinte:
$ vi nome_do_arquivo
Uma vez carregado o vi, veja abaixo uma lista dos principais comandos:
Observacao:
Comandos basicos de insercao de texto:
Shift+g | coloca o cursor no final do arquivo |
i | Insere texto antes do cursor |
a | Insere texto depois do cursor |
r | Insere texto no in\355cio da linha onde se encontra o cursor |
A | Insere texto no final da linha onde se encontra o cursor |
o | Adiciona linha abaixo da linha atual |
O | Adiciona linha acima da linha atual |
Ctrl + h | Apaga o ultimo caracter |
Comandos basicos de movimentacao:
Ctrl+f | Move o cursor para a proxima tela |
Ctrl+b | Move o cursor para a tela anterior |
H | Move o cursor para a primeira linha da tela |
M | Move o cursor para o meio da tela|
L | Move o cursor para a ultima linha da tela |
h | Move o cursor um caracter a esquerda |
j | Move o cursor para a proxima linha |
k | Move o cursor para linha anterior |
l | Move o cursor um caracter a direita |
w | Move o cursor para o inicio da proxima palavra (Ignora a pontuacao) |
W | Move o cursor para o inicio da proxima palavra (Nao ignora a pontuacao) |
b | Move o cursor para o inicio da palavra anterior (Ignora a pontuacao) |
B | Move o cursor para o inicio da palavra anterior (Nao ignora a pontuacao |
0 | Move o cursor para o inicio da linha atual |
^ | Move o cursor para o primeiro caracter nao branco da linha atual |
$ | Move o cursor para o final da linha atual |
nG | Move o cursor para a linha n |
G | Move o cursor para a ultima linha do arquivo |
Comandos basicos para localizar texto:
/palavra | Busca pela palavra ou caracter em todo o texto |
?palavra | Move o cursor para a ocorrencia anterior da palavra |
n | Repete o ultimo comando / ou ? |
N | Repete o ultimo comando / ou ? , na direcao reversa |
Ctrl+g | Mostra o nome do arquivo, o numero da linha corrente e o total de linhas |
Comandos basicos para alteracao de texto:
x | Deleta o caracter que esta sob o cursor |
dw | Deleta a palavra, da posicao atual do cursor ate o final |
dd | Deleta a linha atual |
D | Deleta a linha a partir da posicao atual do cursor ate o final |
rx | Substitui o caracter sob o cursor pelo especificado em x(\351 opcional indicar o caracter) |
Rx | Substitui a palavra sob o cursor pela palavra indicada em x |
u | Desfaz a ultima modificacao |
U | Desfaz todas as modificacoes feitas na linha atual |
J | Une a linha corrente a proxima |
s:/palavra1/palavra2 | Substitui a primeira ocorrencia de "palavra1" por "palavra2" |
Comandos para salvar o texto:
:wq | Salva o arquivo e sai do editor |
:w nome_do_arquivo | Salva o arquivo corrente com o nome especificado |
:w! nome_do_arquivo | Salva o arquivo corrente no arquivo especificado |
:q | Sai do editor |
:q! | Sai do editor sem salvar as alteracoes realizadas |
Caso voce nao goste do vi, experimente o ee (easy editor) que tambem eh muito bom. Boa Sorte !!!
FONTE: http://www.primeirospassos.org/sessao3_4.html
Postado por felipe \u0950 \340s 09:25
Enviar por e-mail
BlogThis!
Mac OS X: o comando sudo requer uma senha de administrador que n\343o esteja vazia
link Resumo O comando sudo do Terminal pode ser usado pelos administradores para executar comandos como outro usu\341rio (por exemplo, como raiz). Quando for executar esse comando, o sistema solicitar\341 que voc\352 digite a senha da conta de administrador na qual iniciou sess\343o. ...mais Produtos Afetados Mac OS X 10.5, Mac OS X 10.6, OS X Lion, Terminal O comando sudo do Terminal pode ser usado pelos administradores para executar comandos como outro usu\341rio (por exemplo, como root). Quando for executar esse comando, o sistema solicitar\341 que voc\352 digite a senha da conta de administrador na qual iniciou sess\343o. No Mac OS X v10.5 at\351 10.5.8, se voc\352 pressionar a tecla Return na janela de solicita\347\343o de senha sem ter digitado uma senha (mesmo que o usu\341rio n\343o tenha senha, o que n\343o \351 recomendado), o comando digitado n\343o ser\341 executado e a janela voltar\341 para o prompt de comando. No Mac OS X v10.6 ou posterior, se voc\352 pressionar a tecla Return na solicita\347\343o de senha sem inserir uma senha, a mensagem "Desculpe, tente novamente." ser\341 exibida e o sistema solicitar\341 uma senha novamente. Se sua conta de administrador n\343o tiver senha (uma senha vazia), voc\352 ter\341 que atribuir uma senha a esse usu\341rio para poder usar o comando sudo. Depois que terminar de usar o comando sudo, voc\352 pode alterar a senha da conta novamente, embora seja recomend\341vel que sua conta de administrador tenha uma senha n\343o vazia. Informa\347\365es Adicionais Notas: Muitos comandos no Terminal levar\343o voc\352 de volta a um prompt de comandos sem exibir nenhuma mensagem depois que o comando for executado com sucesso. \311 garantido que o comando usado com sudo est\341 sendo executado sempre que voc\352 digita uma senha n\343o vazia no prompt, e voc\352 \351 redirecionado para um prompt de comandos sem que outras mensagens sejam exibidas. Quando voc\352 digita a senha do usu\341rio depois que o prompt "Senha:" aparece, n\343o \351 poss\355vel ver nada na janela Terminal. Basta digitar a senha e pressionar Return. Se a senha for inserida incorretamente, voc\352 ver\341 a mensagem "Tente novamente" e ter\341 outra chance para inserir a senha corretamente. D\352 uma nota a esse artigo: N\343o ajudou Ajudou um pouco Ajudou Ajudou muito Resolveu meu problemae