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 “preference files”, 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, abre o seu Terminal utilizando o bash (/bin/bash), no Mac em Applications -> Utility -> Terminal, 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.

$sudo su –

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.
osx:~ root# launchctl list
PID    Status    Label

771    –    com.apple.launchd.peruser.0
258    –    0x100402bb0.anonymous.Terminal
284    –    0×100402520.anonymous.login
285    –    0x1004077d0.anonymous.bash
770    –    0×100401230.anonymous.su
208    –    0×100407510.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.
$sudo launchctl list | grep ssh

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.

$sudo launchctl load /System/Library/LaunchDaemons/ssh.plist

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 networksetup -listallnetworkservices é possível verificar todos os serviços de rede que estão ativos e configurados para uso, ja o comando networksetup listnetworkserviceorder, permite verificar em escala as configurações de rede e em que device se encontra cada uma. O comando networksetup -getinfo <serviço>, pode verificar o seu status de rede, o que facilmente voce também pode pegar com o comando ifconfig. 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:

$networksetup -getinfo ethernet address (para cabo)
#networksetup -getinfo airport address (para sem fio).

Com o comando networksetup -setmanual <networkservice> <ip> <subnet> <router> é possível até escrever as configurações de rede, o que facilmente voce também poderia fazer com o comando ifconfig e route, sendo que o networksetup escreve a configuração do System Preferences/Network.  É possível até verificar e escrever configurações de DNS e qualquer objeto de rede de System Preferences, com o comandonetworksetup -getdnsservers, para airport ou ethernet, para exibir algum DNS adicional ou definir um novo com o comando: sudo networksetup -setdnsservers “AirPort” 8.8.8.8  8.8.4.4, 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: sudo networksetup -setairportnetwork en1 SSID PASSWORD, como desabilitar o seu suporte a airpot (wireless), com o comando: networksetup -setairportpower airport off ou on para habilitar.

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.

Fonte: aprigiosimoes

Anúncios