Indirizzo IP del Gateway tramite shell di Mac OS X

Mi è capitato ultimamente di dover capire quale fosse il Gateway preso in DHCP associato alla mia scheda di rete su Mac OS X. Ovviamente da buon “smanettone” linux ho dato subito il comando

[sourcecode language=”bash”]
unicondor@iMac:~> route -n
usage: route [-dnqtv] command [[modifiers] args]
[/sourcecode]

 

La risposta della shell mi ha lasciato pietrificato, non ero abituato ad una situazione del genere… ma ovviamente Mac OS X deriva da Unix, per cui la sintassi è leggermente diversa rispetto ad una qualsiasi distribuzione Linux.

Dopo qualche breve ricerca, ho trovato i seguenti metodi per risalire all’indirizzo IP del Gateway

 

1° Metodo

Interroga la tabella di routing tramite il comando route . Il flag “-n” serve per non risolvere l’indirizzo IP e lasciarlo in formato numerico, mentre “get” è il comando vero e proprio per interrogare il DNS specificato e farci ritornare tutte le info per raggiungerlo ( compreso il Gateway).

[sourcecode language=”bash”]
unicondor@iMac:~> route -n get www.vitadastudente.it
route to: 217.64.195.223
destination: 217.64.195.223
gateway: 192.168.1.1
interface: en1
flags:
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
0 0 0 0 0 0 1500 0
[/sourcecode]

 

2° Metodo

Questo metodo usa il comando netstat per stampare a video le informazioni riguardanti la struttura dati relativo al traffico di rete. Il flag “-r” serve per interrogare la tabella di routing

[sourcecode language=”bash”]
unicondor@iMac:~> netstat -r
Routing tables

Internet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.1.2 UGSc 53 0 en1
127 localhost UCS 0 0 lo0
localhost localhost UH 0 225 lo0
169.254 link#5 UCS 0 0 en1
192.168.1 link#5 UCS 5 0 en1
192.168.1.1 0:19:e0:96:18:e6 UHLWI 58 1774 en1 975
192.168.1.2 f0:7d:68:8f:41:9a UHLWI 6 12 en1 990
server link#5 UHLWI 2 428312 en1
192.168.1.61 0:40:f4:ec:80:86 UHLWI 0 600 en1 796
192.168.1.131 localhost UHS 0 0 lo0
192.168.1.255 ff:ff:ff:ff:ff:ff UHLWbI 0 12 en1
[/sourcecode]

 

Purtroppo la formattazione del codice lascia ancora un pò a desiderare, ma datemi tempo ed imparerò ad usare anche quella 😛

Eseguire Script Avvio Mac OS X

Uno dei primi problemi riscontrati nel passaggio da Linux a Max e su cui ho dovuto documentarmi, è stato quello di poter eseguire in automatico uno script all’avvio di Max OS X ( dell’interfaccia grafica nel mio caso).
La cosa belle è che ci sono riuscito quasi da subito a sistemare il tutto, cosa che accade molto raramente 😀 per tal motivo è una cosa davvero banale e che si può fare in vari modi… il seguente metodo è uno dei tanti.

il mio script è molto banale, non fa altro che montare le partizioni esportate dal mio server ( 192.168.1.60 ) tramite il demone nfs. La stessa ed identica procedura piò essere utilizzata per qualsiasi altro script..

Per prima cosa editiamo il nostro file come se fosse un normalissimo script in Bash, ecco il mio di esempio…


#!/bin/sh

mount server:/win1 /Users/unicondor/Win_nfs
mount server:/share_donkey /Users/unicondor/Share_donkey

e settiamolo con estensione .command.

Per esempio il mio file si chiama : nfs_up.command

Una volta editato il file e rinominato con l’stensione .command apriamo Preferenze di Sistema–>Account ed andiamo in “Elementi login”

clicchiamo sul segno  “+” ed aggiungiamo il nostro file appena creato alla lista dei programmi da eseguire all’avvio.

 

Schermata Script Avvio Max OS X

.bash_profile vs .bashrc

Quando si lavora con un Sistema Operativo come Linux, Unix o Mac OS X, è molto comodo poter personalizzare la bash con i comandi o le impostazioni che siamo abituati ad usare. Mi sono imbattuto in un piccolo dilemma stasera, mentre settavo la mia variabile EDITOR ( in modo da usare nano al posto di vim ).
Quale file modificare: .bash_profile o .bashrc ? Quale è la differenza tra i due file? e perche’ vengono utilizzati entrambi se hanno lo stesso scopo?

Consultanto la man page di bash sono riuscito a risolvere questo piccolo dilemma.

 

Quando usare .bash_profile ?

Ogni volta che si avvia una intercative shell vengono eseguiti i comandi che si trovano all’interno dei seguenti file:

  • 1. /etc/profile
  • 2. ~/.bash.profile
  • 3. ~/.bash_login
  • 4. ~/.profile

Per cui ogni volta che eseguiamo il login ( username e password ) da console, utilizzando per esempio ssh, viene eseguito .bash_profile

 

Quando usare .bashrc ?

Se siamo gia’ loggati all’interno della shell ed apriamo un nuovo terminale di console ( Ex. xterm ) all’interno di Gnome o KDE, allora vengono eseguite le istruzioni presenti in .bashrc.
Lo stesso accade se da console digitiamo nel terminal


/bin/bash

 

Perche’ questa  distinzione?

Tale distinzione e’ nata dalla necessita’ di poter visionare parametri di diagnostica ogni volta che accediamo ad una macchina ( carico della CPU, uso della memoria ecc…), in questo caso viene utilizzato .bash_profile.

Invece .bashrc viene usato per le impostazioni che vogliamo caricare ogni volta che viene lanciato un nuovo terminale.

 

 

In Mac OS X come funziona?

Mac OS X ha una filosia tutta sua… come la maggior parte delle volte 😀

Di defualt il Sistema Operativo lancia una nuova schermata di login chiamando il file .bash_profile al posto di .bashrc. Per tale motivo nei Sistemi Apple bisognera’ sempre modificare .bash_profile per caricare correttamente le proprie impostazioni, anche nel caso in cui non esegiuamo una non-login shell.

 

Suggerimento

La maggior parte delle volte e’ scocciante avere gli stessi comandi su entrambi i file, per tale motivo vi posto la mia soluzione “elegante” per risolvere il dilemma 😀


if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi

In questo modo ad ogni login, in automatico la vostra macchina eseguira’ il codice presente anche in .bashrc

La Shell di Mac OS X

Una persona sana di mente può mai mettersi a scrivere un articolo sulla Shell di Mac OS X a mezzanotte in punto!!??

Ovviamente no… ma visto che il blog inizia ad avere 50-60 visitatori assoluti al giorno mi fa ben sperare di non essere solo e che ci siano altri “malati” come me 😀

Partiamo con un pò di nozioni di base dato che molti dei fortunati possessori di un Macintosh non hanno mai utilizzato una shell ( Terminale ). Mac OS X viene fornito con la shell di default Bourne Again SHell, comunemente detta bash, ma include anche altri tipi di shell come TENEX C shell (tcsh), Korn shell (ksh) ecc..

Spero abbiate già l’iconcina del Terminale sul vostro Dock, altrimenti spostate l’icona Terminale dalla subdirectory Utility di Applicazioni in modo da avere un veloce accesso alla command line.

Chiunque abbia mai usato un Sistema Operativo UNIX-like per scopi che non siano solo di gioco o per farsi bello con gli altri 😀 ha avuto modo di scoprire tale strumento fino a tal punto da non poterne più fare a meno. Non esagero quando dico che è indispensabile, soprattutto nel caso in cui il nostro Sistema Software deve compiere particolari task e/o automatismi che da interfaccia grafica sarebbero molto più complessi, se non addirittura impossibili..

Un altro mio articolo sui principali comandi shell può esservi di aiuto nel capire cosa è possibile fare, e spero vi renda così curiosi da iniziare a smanettare con la vostra shell 😀

In questo articolo volevo mostrarvi qualche piccolo esempio sull’uso della shell, ed in particolare in riferimento all’ambiente Mac OS X.

Esempio 1


#!/bin/sh
# Script nw opens a new Terminal window
osascript << EOF
tell app "System Events"
  keystroke "n" using command down
end tell
EOF

Questo piccolo esempio usa il comando osascript per invocare un AppleScript, il quale a sua volta interagisce con il System Events e serve per emulare l’effetto che si ha premendo ⌘-N , cioè aprendo un altra finestra Terminale

 

Esempio 2


#!/bin/sh
# Script opens a new Terminal Tab in existing window
osascript << EOF
tell app "System Events"
  keystroke "t" using command down
end tell
EOF

Quest’altro piccolo esempio invece emula ⌘-T, cioè apre una nuova tab sul Terminale già in uso.

 

Esempio 3


#!/bin/sh
# Script Run Vim
osascript << EOF
tell app "Terminal"
set number of rows of first window to 34
set number of columns of first window to 96
set custom title of first window to "Vim Editor :D"
EOF
vim $@

Quest’ultimo esempio vi mostra come aprire Vim utilizzando uno shell script.

Per poter eseguire questi script, dobbiamo renderli eseguibili. Supponiamo di aver chiamato quest’ultimo esempio RunVim, dobbiamo dare il seguente comando ( sempre da shell ):


chmod +x RunVim

L’ora tarda e la dolce visione del mio cuscino non mi permettono di andare oltre.. ma il prossimo articolo sarà sui parametri di personalizzazione della nostra Shell.

Lista Comandi Utili Shell Linux/Unix

Il seguente elenco e’ una lista disordinata di comandi shell utili (Unix-based Linux/Mac), tali comandi non sono spiegati nel dettaglio ma possono facilitare l’amministrazione quotidiana di un sistema basato su Unix. La combinazione dei tasti CTRL+f dal vostro browser puo’ essere molto utile nella ricerca di un determinato costrutto o comando. Qualche comando puo’ valere solo per le Shell Bash. 

  • Per trovare i dettagli hardware di una Linux box:
     lspci
  • Per trovare la versione del kernel e della distribuzione di linux:
     uname -a
  • Per trovare info su cpu:
     cat /proc/cpuinfo
  • Per decomprimere file gzip:
     gungzip something.tar.gz
  • Per scompattare il file tar:
     tar xvf something.tar
  • Per decomprimere ed estrarre in un solo passaggio:
     tar xvzf something.tar.gz
  • Per installare un software da rpm:
  • Leggi tutto “Lista Comandi Utili Shell Linux/Unix”