Supongo que a estas alturas, la mayoría saben que Mac OSX es un sistema operativo cuyo interface gráfico se ejecuta sobre una versión de UNIX.

Para que lo entiendan, es como las versiones antiguas de Windows, que se ejecutaban sobre MS-DOS. Es decir, tenemos una parte básica del sistema operativo que se encarga de las operaciones a bajo nivel y una capa gráfica basada en ventanas que es mucho más amigable para el usuario.

Esto es una herencia de cuando Apple compró NeXT (la empresa que creó Jobs al ser expulsado de Apple) y que propició el regreso de Steve a la marca de la manzana. En ese momento se decidió que NextStep, el sistema operativo de NeXT basado en el kernel Mach y BSD fuera a su vez la base sobre la que desarrollar el sistema operativo de nuestros Macs actuales.

Queda fuera del objetivo de este post (y de mis conocimientos ) explicar mucho más de sistemas operativos, pero creía necesaria la introducción para comprender lo que viene a continuación.

Muchos de nosotros empezamos manejando ordenadores a base de teclear distintos valores en determinadas direcciones de memoria (como el  Commodore 64), mientras que otros han “nacido” manejando un ordenador basado en ventanas.

Seguro que unos y otros han leído artículos que hablan de introducir tal o cual comando en la Terminal de Mac OSX. Los más valientes incluso habrán copiado la linea incomprensible de caracteres y pulsado Enter con un cierto miedo a ver qué pasaba…

Así que he pensado que no estaría mal escribir un pequeño artículo para explicar qué es la Terminal y algunos comandos básicos para que el menos puedan ver como funciona y que hay otra forma de manejar vuestros Macs. No sé yo si les será útil en algún momento, pero el saber no ocupa lugar

La Terminal

Antiguamente (vamos, hace más de 25 años) no había entornos gráficos en los ordenadores domésticos (Mac OS nació en 1984 y Windows 1.0 data de 1985), así que los ordenadores se manejaban a través del teclado y había que recordar multitud de comandos, cada uno con una función específica y un montón de modificadores que permitían especificar acciones determinadas de un comando. Así, para ver los ficheros que contenía un disco, en MS-DOS debíamos escribir DIR y pulsar Enter.

Prehistórico verdad, ¿verdad? 

Pues la Terminal de nuestros Macs no es más que eso: un vestigio del pasado. Una forma de ejecutar comandos en nuestro Mac a base de escribir instrucciones que el sistema operativo interpreta y ejecuta.

En el caso de Mac OSX, abrir la Terminal significa lidiar con UNIX y conocer sus comandos específicos, de los que veremos algunos más adelante.

Como somos unos valientes, ejecutemos Terminal. Está en Aplicaciones/Utilidades o lo puedes buscar en Spotlight.

Nos aparecerá una pequeña ventana como esta:

term11.jpg

El texto “MacBook-Pro-de-carlos-espino:~ carlosespino$” nos indica que estamos en un ordenador que se llama MacBook-Pro-de-carlos-espino y que nuestro nombre de usuario en dicho ordenador es carlosespino. El símbolo ‘$‘ es sólo el indicador de que está esperando que tecleemos un comando. Para los que vengan de MS-DOS, es lo mismo que el C:\>

Antes de explicar ningún comando, les diré cómo salir de la Terminal: teclea exit, pulsa Enter y cierra la ventana.

Ahora, veamos algunos comandos:

clear (limpiar ventana)

Aunque no es el más importante, he decidido que sea el primero porque cuando usemos otros comandos, la ventana se llenará de texto y lo hará más complicado. Basta teclear clear y pulsar Enter para que se borre todo.

ls (mostrar archivos)

El equivalente del DIR en MS-DOS. Nos muestra todos los archivos que hay en el directorio actual. Y cuando digo archivos, también incluyo directorios. Veamos un ejemplo:

term2.jpg

En la captura anterior, me está mostrando los archivos que tengo en mi Mac. Si se fijan, son los mismos que aparecen en el Finder. Lo malo es que así no diferenciamos cuáles son ficheros normales y cuáles directorios, así que mejor usar una opción del comando ls:

ls -l (mostrar archivos en formato largo)

Teclea ls -l y pulsa Intro. Verás que aparece los siguiente:

term3.jpg

Eso de drwxr-xr-x nos debe sonar a ‘chino’, pero es fácil. La d al principio indica que es un directorio. Si es un fichero, en ese lugar aparecería un guión .

Los siguientes caracteres son los permisos de dicho archivo. Están en grupos de 3: rwx  r-x  r-x y son respectivamente, los permisos que tiene el dueño sobre ese archivo, los permisos del grupo y los del resto de usuarios. r significa que se puede leer (read), w que se puede escribir o modificar (write) y x que se puede executar (eXecute).

Así que cuando hablamos de “reparar permisos” con utilidad de disco, nos referimos a estos permisos, ya que por distintas causas (como al instalar un programa nuevo), se pueden modificar y provocar fallos.

El siguiente número indica el número de directorios contenidos en el directorio, luego nos indica quién es el dueño del archivo y a qué grupo pertenece ( staff) el número de bloques que ocupa el archivo, la fecha y por último, el nombre del fichero o directorio.

Aún así, con ls -l no podemos ver todos los ficheros que hay en el directorio, porque no muestra los ocultos. Para ello debemos usar:

ls -la (mostrar todos los ficheros en formato largo)

y nos aparecerá lo siguiente:

term4.jpg

Como pueden observar, los archivos que habitualmente están ocultos son los que empiezan con un punto.

Ahora veamos cómo movernos por los directorios.

cd nombrededirectorio (cambiar de directorio)

Elegi uno de los directorios, por ejemplo Library y escribe cd Library (ojo, que hay que respetar mayúsculas/minúculas). Verás que el prompt del sistema nos muestra en el directorio en el que estamos:

term5.jpg

Ahora puedes introducir ls -l para ver los archivos que hay en ese directorio. Para “subir” un nivel e ir al directorio anterior, basta con que teclees cd ..

Ahora que ya sabes moverte por los directorios y ver los archivos que contienen, veamos otros comandos:

cal (calendario)

Muestra el calendario del mes en curso

term6.jpg

 

Ping direcciónIP (hacer un ping a una IP)

Quizá alguna vez hayas tenido que hacer un ping a una IP para ver si un servidor estaba respondiendo. En UNIX es tan fácil como teclear ping, seguido de la dirección IP a comprobar:

Pulsa Ctrl-C para dejar de hacer ping y volver al prompt del sistema

term7.jpg

 

top

Muestra información sobre los procesos que se están ejecutando en nuestro Mac, así como información sobre la memoria, discos, red, etc. (pulsa q para salir)

term10.jpg

 

Hay cientos de comandos y no los podemos explicar todos aquí. Os dejo al final del artículo una serie de enlaces de referencia para que sigáis profundizando. Recordad que desde la línea de comandos se puede hacer de todo, incluido borrar ficheros y cargarte por completo tu disco duro, así que tened cuidad. Por si acaso, si tienes alguna duda con el formato o qué hace algún comando, siempre puedes usar:

man command (manual)

Que te mostrará el manual con la descripción y opciones que permite el comando que hayas especificado:

term9.jpg

 

Otros sitios donde encontrar más información de sobre la terminal y comandos UNIX:

Finalmente……

Les dejo la lista completa de comandos que pueden realizarse con los link donde se explica que hace cada uno de ellos

An A-Z Index of the Apple OS X command line

alias     Create an
alloc     List used and free memory
apropos   Search the whatis database for strings
awk       Find and Replace text within file(s)
b
basename  Convert a full pathname to just a filename
bash      Bourne-Again SHell
bg        Send to background •
bind      Display readline key and function bindings •
bless     Set volume bootability and startup disk options.
break     Exit from a For, While, Until or Select loop •
builtin   Execute a shell builtin •
bzip2     Compress or decompress files
c
cal       Display a calendar
calendar  Reminder Service
caller    Return the context of a subroutine call •
case      Conditionally perform a command •
cat       Concatenate and print (display) the content of files
cd        Change Directory •
chflags   Change a file or folder’s flags
chgrp     Change group ownership
chmod     Change access permissions
chown     Change file owner and group
chroot    Run a command with a different root directory
cksum     Print CRC checksum and byte counts
clear     Clear terminal screen
cmp       Compare two files
comm      Compare two sorted files line by line
command   Run a command (not a function) •
complete  Edit a command completion [word/pattern/list] •
continue  Resume the next iteration of a loop •
cp        Copy one or more files to another location
cron      Daemon to execute scheduled commands
crontab   Schedule a command to run at a later date/time
csplit    Split a file into context-determined pieces
curl      Transfer data  from or to a server
cut       Divide a file into several parts
d
date      Display or change the date & time
dc        Desk Calculator
dd        Data Dump – Convert and copy a file
declare   Declare variable & set attributes •
defaults  Set preferences, show hidden files
df        Display free disk space
diff      Display the differences between two files
diff3     Show differences among three files
dig       DNS lookup
dirname   Convert a full pathname to just a path
dirs      Display list of remembered directories •
diskutil  Disk utilities – Format, Verify, Repair
disown    Unbind a job from the current login session •
ditto     Copy files and folders
dot_clean Remove dot-underscore files
drutil    Interact with CD/DVD burners
dscacheutil  Query or flush the Directory Service/DNS cache
dseditgroup  Edit, create, manipulate, or delete groups
dsenableroot Enable root access
dsmemberutil View user and groups rights
dscl      Directory Service command line utility
du        Estimate file space usage
e
echo      Display message on screen •
ed        A line-oriented text editor (edlin)
enable    Enable and disable builtin shell commands •
env       List or Set environment variables
eval      Evaluate several commands/arguments •
exec      Execute a command •
exit      Exit the shell •
expand    Convert tabs to spaces
expect    Programmed dialogue with interactive programs
Also see AppleScript
export    Set an environment variable •
expr      Evaluate expressions
f
false     Do nothing, unsuccessfully
fc        Fix command (history)
fdisk     Partition table manipulator for Darwin UFS/HFS/DOS
fg        Send job to foreground •
file      Determine file type
find      Search for files that meet a desired criteria
fmt       Reformat paragraph text
fold      Wrap text to fit a specified width
for       Loop command •
fsck      Filesystem consistency check and repair
fsaclctl  Filesystem enable/disable ACL support
fs_usage  Filesystem usage (process/pathname)
ftp       Internet file transfer program
g
GetFileInfo Get attributes of HFS+ files
getopt    Parse positional parameters
getopts   Parse positional parameters •
goto      Jump to label and continue execution
grep      Search file(s) for lines that match a given pattern
groups    Print group names a user is in
gzip      Compress or decompress files
h
halt      Stop and restart the operating system
hash      Refresh the cached/remembered location of commands •
head      Display the first lines of a file
hdiutil   Manipulate iso disk images
history   Command History •
hostname  Print or set system name
i
iconv     Convert the character set of a file
id        Print user and group names/id’s
if        Conditionally perform a command •

ifconfig  Configure network interface parameters
ipconfig  View and control IP configuration state
info      Help info
install   Copy files and set attributes
j
jobs      List active jobs •
join      Join lines on a common field
k
kextfind  List kernel extensions
kickstart Configure Apple Remote Desktop
kill      Stop a process from running
l
l         List files in long format (ls -l)
last      Indicate last logins of users and ttys
launchctl Load or unload daemons/agents
ll        List files in long format, showing invisible files (ls -la)
less      Display output one screen at a time
let       Evaluate expression •
lipo      Convert a universal binary
ln        Make links between files (hard links, symbolic links)
local     Set a local (function) variable •
locate    Find files
logname   Print current login name
login     log into the computer
logout    Exit a login shell (bye) •
look      Display lines beginning with a given string
lpr       Print files
lprm      Remove jobs from the print queue
lpstat    Printer status information
ls        List information about file(s)
lsregister Reset the Launch Services database
lsbom     List a bill of materials file
lsof      List open files
m
man       Help manual
mdfind    Spotlight search
mdutil    Manage Spotlight metadata store
mkdir     Create new folder(s)
mkfifo    Make FIFOs (named pipes)
more      Display output one screen at a time
mount     Mount a file system
mv        Move or rename files or directories
n
nano      Simple text editor
net       Manage network resources
netstat   Show network status
networksetup Network and System Preferences
nice      Set the priority of a command
nohup     Run a command immune to hangups
ntfs.util NTFS file system utility
o
onintr    Control the action of a shell interrupt
open      Open a file/folder/URL/Application
opensnoop Snoop file opens as they occur
osacompile Compile Applescript
osascript Execute AppleScript
p
passwd    Modify a user password
paste     Merge lines of files
pbcopy    Copy data to the clipboard
pbpaste   Paste data from the Clipboard
ping      Test a network connection
pkgutil   Query and manipulate installed packages
plutil    Property list utility
pmset     Power Management settings
popd      Restore the previous value of the current directory •
pr        Convert text files for printing
printenv  List environment variables
printf    Format and print data •
ps        Process status
pushd     Save and then change the current directory
pwd       Print Working Directory •
q
quota     Display disk usage and limits
r
rcp       Copy files between machines
read      Read one line from standard input •
readonly  Mark a variable or function as read-only •
reboot    Stop and restart the system
return    Exit a function •
rev       Reverse lines of a file
rm        Remove files
rmdir     Remove folder(s)
rpm       Remote Package Manager
rsync     Remote file copy – Sync file tree (also RsyncX)
s
say       Convert text to audible speech
screen    Multiplex terminal, run remote shells via ssh
screencapture Capture screen image to file or disk
sdiff     Merge two files interactively
security  Administer Keychains, keys, certificates and the Security framework
sed       Stream Editor
select    Generate a list of items •
set       Set a shell variable = value •
setfile   Set attributes of HFS+ files
shift     Shift positional parameters •
shopt     Set shell options •
shutdown  Shutdown or restart OS X
sips      Scriptable image processing system
sleep     Delay for a specified time
softwareupdate System software update tool
sort      Sort text files
source    Execute commands from a file •
split     Split a file into fixed-size pieces
stop      Stop a job or process
su        Substitute user identity
sudo      Execute a command as another user
sum       Print a checksum for a file
suspend   Suspend execution of this shell •
sw_vers   Print Mac OS X operating system version
system_profiler  Report system configuration
systemsetup Computer and display system settings
t
tail      Output the last part of files
tar       Tape ARchiver
tcpdump   Dump traffic on a network
tee       Redirect output to multiple files
test      Condition evaluation •
textutil  Manipulate text files in various formats (Doc,html,rtf)
time      Measure Program Resource Use
times     Print shell & shell process times •
top       Display process information
touch     Change file timestamps
tr        Translate, squeeze, and/or delete characters
trap      Execute a command when the shell receives a signal •
traceroute Trace Route to Host
true      Do nothing, successfully
tty       Print filename of terminal on stdin
type      Describe a command •
u

ufs.util  Mount/unmount UFS file system
ulimit    limit the use of system-wide resources •
umask     Users file creation mask
umount    Unmount a device
unalias   Remove an alias •
uname     Print system information
unexpand  Convert spaces to tabs
uniq      Uniquify files
units     Convert units from one scale to another
unset     Remove variable or function names •
until     Loop command •
uptime    Show how long system has been running
users     Print login names of users currently logged in
uuencode  Encode a binary file
uudecode  Decode a file created by uuencode
uuidgen   Generate a Unique ID (UUID/GUID)
uucp      Unix to Unix copy
v
vi        Text Editor
w
wait      Wait for a process to complete •
wc        Print byte, word, and line counts
whatis    Search the whatis database for complete words
where     Report all known instances of a command
which     Locate a program file in the user’s path
while     Loop command •
who       Print all usernames currently logged on
whoami    Print the current user id and name (`id -un’)
write     Send a message to another user
x
xargs     Execute utility – passing arguments
yes       Print a string until interrupted
!!        Run the last command again

Como les dije antes, el saber NO ocupa lugar y piensen que en realidad todo pasa por aquí, lo que vemos en nuestra Mac es la interfaz gráfica que se comunica con esto en nuestro Sistema Operativo.

Hay mucho trucos que se pueden hacer “como bloquear nuestras conexiones salientes” para que nuestro software “gratias” para probar  no se comunique con el desarrollador del mismo y algunos pueden hacer que nuestra Mac salga de un problema.
Mas adelante trataremos de ir posteando estos trucos.