De GUI a CLI: Tutorial básico en el manejo de la línea de comandos.

Bash. Diferencias entre la terminal y lo grafico. Sistema de ficheros.

La consola de comandos es una forma que tenemos de comunicarnos directamente con el ordenador. Nosotros le damos ordenes/comandos que el sistema interpreta y nos devuelve una respuesta.

Este tutorial se llama de GUI a CLI. GUI significa Graphical User Interface (Interfaz Grafico de Usuario). Como su nombre lo indica, son todas las aplicaciones graficas que vemos en nuestro escritorio. De hecho, nuestro propio escritorio es una interfaz grafica. Ejemplos de programas graficos son el Firefox, el Pidgin, el Totem, etc. Por otra parte tenemos a CLI, Command Line Interface (Interzas de Linea de Comandos). En este tipo de comunicacion con nuestro ordenador, todo es mas fluido y rapido, aunque como veremos, al principio cuesta mucho mas. Con este tutorial se intenta de explicar los conceptos basicos que giran en torno a ella, buscando la forma de independizarnos de nuestro interfaz Grafico.

En GNU/Linux se utiliza la consola que se le haya asignado a la sesion, por defecto esta suele ser Bash, aunque hay muchos tipos de consolas (shells), por ejemplo ash, bsh, ksh, zsh, csh. Para ver que shell tenemos asignada podemos verlo con echo $SHELL.

isaac@hamlab:~$ echo $SHELL
/bin/bash

Aunque haya diferentes tipos de aplicaciones de terminales (gnome-terminal para gnome, konsole para kde, xterm, etc) todas nos sirven, ya que en el fondo todas utilizan lo mismo: Bash. Bash fue creado tomando como base a Shell, la terminal de Unix. Bash significa Born Again SHell, otra vez la consola de Bourne; Stephen Bourne fue el que escribio sh y que es en la que se basa bash, son muy parecidas aunque no son compatibles totalmente, sh es la consola que se utilizó para UNIX.

 Todos las terminales van a Bash

Basicamente, una shell es un interprete de ordenes. Tiene muchos nombres distintos: Intérprete de órdenes, Intérprete de mandatos, Intérprete de línea de mandatos, Intérprete de comandos, Terminal, Consola, Shell ó CLI (Command line interface), este ultimo en contraposicion a GUI (Graphical User Interface). La principal diferencia entre la terminal y lo grafico es que la segunda se ve mejor, pero consume mas recursos y tiene menos opciones.

Mas informacion: Linea de Comandos, Bash, Stephen Bourne y Bourne Shell en Wikipedia.

¿Por que nos interesa aprender a utlizar la consola habiendo aplicaciones gráficas?

Una forma de acceder a la consola es seleccionando una aplicacion que tengamos en nuestro sistema que sirva para esto. Estas son gnome-terminal, o konsole, o xterm. Esta ultima viene en casi todos los sistemas asi que es muy recomendable. Consume pocos recursos y es bastante configurable. Se pueden encontrar en Aplicaciones > Accesorios > Terminal o bien haciendo ALT + F2 con lo que se abrira el dialogo de "Ejecutar una aplicacion", desde donde podremos lanzar "xterm" o "gnome-terminal".

Otra forma de acceder a la linea de comandos es con la combinacion CTRL + ALT + F1
Con esto accederemos a tty1, una pantalla donde podremos iniciar sesion. Una cosa importante con respecto a Linux es que muchas veces cuando nos pide contrasenias no nos muestra los caracteres que ingresamos, por una cuestion de seguridad (para que alguien que esta viendo la pantalla no sepa la cantidad de caracteres). Del F1 al F6 podremos encontrar mas consolas (tty1-tty6). El F7 esta reservado al servidor grafico. Esto es muy util porque en caso de que se cuelgue el servidor grafico podemos reiniciarlo, como veremos mas tarde.

Vamos a hablar del sistema de ficheros. En los sistemas basados en Unix hay un directorio principal del que dependen todos los otros. Es el inicio de todo, la raiz o root. Se encuentra en /
Por ejemplo, para ver una lista de los ficheros que hay en / vamos a utilizar el comando ls. ls /

isaac@hamlab:~$ ls /
bin debian home initrd.img.old media proc srv usr vmlinuz.old
boot dev initrd lib mnt root sys var
cdrom etc initrd.img lost+found opt sbin tmp vmlinuz

Podemos ver para que sirve cada directorio aqui. Los que nos interesan principalmente son los siguientes:

/home/ Las casas de los usuarios. Aqui cada usuario tiene una carpeta con su nombre donde puede modificar todo lo que quiera sin riesgo de daniar el sistema. En las otras carpetas fuera de nuestra home vamos a necesitar de permisos de administrador para modificar. Home/Usuario es la carpeta donde aparecemos cuando abrimos una terminal nueva.

/dev/ es importante entender el siguiente concepto: en linux todo son ficheros: los archivos y carpetas, pero tambien los distintos dispositivos conectados al ordenador, desde el raton hasta el teclado incluyendo a los discos duros (con sus particiones) y cdrom. En /dev/ es donde estan todos estos dispositivos. Por ejemplo /dev/sda1 es la primera particion (1) del primer disco (a).

/media/ aqui es donde se van a montar todos los dispositivos de memoria externos, por ejemplo pendrives, discos usb, cdrom, tarjetas SD. Por defecto nos los intentara de montar automagicamente. Anteriormente se utilizada /mnt pero hoy en dia esta en desuso. Es comun encontrar en la carpeta /media/ la carpeta cdrom, este también se puede encontrar en /cdrom

/etc/ la mayoria de los ficheros de configuracion se encuentran en esta carpeta. Muy importante.

Como moverse. Login. Clear. Reset. History. Reverse-i-search. Man, help e info. Pipe. Autocompletar.

En un sistema Unix siempre estamos como un usuario. Esto lo podemos ver en la propia consola. Por ejemplo:

isaac@hamlab:~$

Nos dice que somos el usuario isaac en el ordenador hamlab. Si nos damos cuenta, es la misma sintaxis que se utiliza para los correos (usuario@servidor) esto es porque muchos servidores de correos son Unix.

Importante: siempre estamos en una carpeta. Por defecto estamos en /home/usuario. Esto lo vemos con pwd.

isaac@hamlab:~$ pwd
/home/isaac

Nos muestra en que carpeta nos encontramos en ese momento. Podemos tambien ver que nos lo dice luego del : la ~ es una abreviacion para /home/usuario. Por ejemplo si en cualquier carpeta hacemos

ls ~

nos muestra el contenido de nuestra carpeta personal.

Atajos del teclado:

CTRL + A: Ir al inicio de la linea

CTRL + E: Ir al final de la linea

CTRL + L: Hace un clear (limpia la pantalla)

CTRL + D: Salir.

CTRL + R: Busqueda en el historial (ver abajo)

CTRL + U: Borra toda la linea hasta el principio

CTRL + C: Cancela el comando en ejecucion

Con el comando reset reiniciamos la terminal. Esto es muy util en caso de errores o cuelgues.

Algo muy interesante es el historial. Se accede a el con el comando history. Con esto podemos ver los ultimos 500 comandos ingresados. Tambien podemos ver los ultimos comandos ingresados con las flechas de desplazamiento (arriba/abajo). Con la combinacion de teclas CTRL + R. podemos acceder a una busqueda dentro del historial. Esto es el modo Reverse-i-search.

 A que nos referimos cuando hablamos de RTFM


A que nos referimos cuando hablamos de RTFM

La regla principal es RTFM. Los manuales se instalan junto con las aplicaciones, normalmente se pueden encontrar en /usr/share/docs, pero para acceder a cualquiera solo hace falta poner
man comando

Por ejemplo, para ver el man de clear ponemos man clear. Otros comandos que tambien son utiles para buscar informacion son help e info. Su sintaxis es la misma:
help comando
info comando

Muchas veces tambien podemos encontrar ayuda (mas que nada las diferentes opciones para cada comando) con la opcion --help

comando --help

Para ir poner varios comandos a la vez se utiliza pipe (tuberia). Esta es | En los teclados de habla castellana (con enie) se encuentra en ALT GR + 1. Sirve para unir varios comandos en uno. Por ejemplo

lspci | grep VGA

Esto significa que la salida del comando lspci va a ser a su vez la entrada del grep VGA.

Normalmente las primeras veces que vemos escribir a alguien en una consola nos sorprendemos de lo rapido que escribe. Hay un truco detras de esto, la tecla mas importante del teclado, que es el TAB o tabulador (se encuentra arriba del BLOQ MAYUS). Esto sirve para que los ficheros y las aplicaciones se completen automagicamente. La magia detras de esto se encuentra en una aplicacion llamada bash-completion

Comandos: orden, opciones, argumentos.

La sintaxis basica de un comando es la siguiente:

orden opciones argumentos

La orden es el comando en si, el nombre de la aplicacion siendo llamada. Por ejemplo para abrir el firefox solo hay que poner firefox en la consola.

firefox

Cuando una aplicacion monopoliza el uso de la consola se puede cancelar el comando con CTRL+C. Para que no lo monopolice se tiene que poner el ampersand (&) al final de la orden. Por ejemplo


firefox &

Luego las opciones pueden ser por ejemplo --new-tab y un argumento una direccion web (www.patiomaravillas.net/hamlab)

firefox --new-tab www.patiomaravillas.net &

Si tenemos un fichero de texto que queremos abrir con el editor de textos (gedit) se puede hacer con gedit fichero. Esto funciona con todas las aplicaciones, por ejemplo para abrir imagenes con el gimp es gimp fichero, para abrir un video con el vlc es vlc fichero, para escuchar musica con el amarok es amarok fichero.

Vamos a ver ahora ciertos comandos basicos:

ls. Este sirve para listar ficheros. Con ls solo listamos los que estan en la carpeta donde nos encontremos, pero tambien podemos poner y el nombre de una carpeta. Para ver todos los ficheros (incluso los ocultos) se puede con la opcion -a y para ver informacion del fichero (permisos, propietario, fecha de modificacion) con la opción -l

ls nombredecarpeta

ls -la

cd: change directory. Sirve para cambiar de directorios. Con cd solo vamos a nuestra home. Con cd .. vamos a la carpeta superior. Para ir a raiz se puede con cd / . Con cd - volvemos a la carpeta donde nos encontrabamos antes.

cat: imprime en pantalla el texto de un fichero. Ejemplo para ver informacion de nuestro procesador

cat /proc/cpuinfo

Otros comandos similares con more y less. Tienen la misma sintaxis y sirven para lo mismo, solo que less es un poco mas completo, permitiendonos ir linea a linea y retroceder. El more solo va por pantallas.

touch: simplemente crea un fichero. Muy util para comprobar que tenemos permisos de escritura.

touch fichero

free: muestra nuestra memoria ram y swap ocupada y tambien la disponible. Con la opcion -m lo vemos en megas. Ejemplo:

free
total used free shared buffers cached
Mem: 1019200 1003256 15944 0 79716 681208
-/+ buffers/cache: 242332 776868
Swap: 2441840 96936 2344904

top: muestra informacion de lo que se este corriendo en el sistema. Muy util. htop es una modificacion del top que nos muestra la informacion en colores y nos permite matar procesos desde su misma interfaz.


 

 

 

 

 

 

 

 

ps: da una lista con todos los procesos ejecutandose. Para ver todos hace falta poner las opciones aux. Sintaxis:

ps auxf

lspci: da una lista de los diferentes dispositivos PCI. Desde VGA y Audio hasta Ethernet y SD. Es muy util para saber el nombre de los componentes que utilizamos.

head: muestra las 10 primeras lineas. Con la opción -n elegimos la cantidad de lineas que queremos ver. Ejemplo:

head /proc/cpuinfo

tail: muestra las 10 ultimas lineas. Ejemplo:

tail /proc/cpuinfo

dmesg: muestra un log del kernel con informacion que hace nuestro sistema

cp: para copiar ficheros. Sintaxis:

cp origen destino

Por ejemplo para hacer un backup de nuestro sources.list

sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup

mv: para mover o renombrar ficheros. Sintaxis:

mv origen destino

rm: para eliminar ficheros. Hay que tener mucho cuidado porque no lo lleva a la papelera, sino que lo elimina del sistema. Sintaxis:

rm fichero

Con las opciones -rf forza recursivamente (borra un directorio sin preguntar). Para que nos pregunte podemos hacerlo con la opcion -i. Un viejo chiste con el rm es rm -rf / . No es NADA recomendable ejecutar ese comando.

cal:
Si lo ponemos solo nos muestra un calendario del mes en el que estamos. Podemos pedirle el que queramos.

cal 1 1

El primero de enero del anio 1 fue Sabado :D

date:
Nos muestra la hora y el dia en el que estamos. Con la opción --set cambia la hora.

uptime:
Nos dice hace cuanto esta encendido el ordenador. Muy util para servidores.

wget: para descargar de Internet. Sintaxis:

wget direccion

Por ejemplo:

wget http://patiomaravillas.net/sites/sindominio.net.patiomaravillas/files/images/stallhack.jpg

Con la opcion -r descarga todos los contenidos de un sitio web.

shutdown: apaga el sistema. Requiere permisos de administrador. Es necesario decirle la hora a la que lo queremos apagar. Para reiniciar se usa la opción -r (reboot), pero si solo queremos apagarlo es la opción -h (halt). Ejemplo:

sudo shutdown -h now

reboot: reinicia el sistema. Requiere permisos de administrador. Sintaxis:

sudo reboot

su: cambia de usuario. Sintaxis:

su usuario

Si no le damos ninguna opcion nos permite acceder como root (administrador) y poder realizar todos los cambios que querramos en el sistema. Por una cuestion de seguridad Ubuntu no lo recomienda, prefiriendo el uso del sudo, que le da permisos de administrador solo al comando donde lo pongamos. Por ejemplo, si queremos ver lo que dice el log del sistema,

cat /var/log/syslog

Nos dice que no tenemos los permisos necesarios ( cat: /var/log/syslog: Permiso denegado )
Pero en cambio nos lo permite con

sudo cat /var/log/syslog

sudo: significa que la siguiente linea va a tener permisos de administrador. Un ejemplo grafico:

 

 


Un ejemplo de los poderes de magia oscura que nos da el sudo. Hecho por xkcd (http://xkcd.com/149/)

La primera vez que iniciamos el sudo nos aparece el siguiente mensaje:

We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

En castellano:

Esperamos que haya recibido el sermón usual del Administrador de Sistema. Normalmente se reduce a estas tres cosas:


#1) Respete la privacidad de los otros.
#2) Piense antes de escribir.
#3) Un gran poder conlleva una gran responsabilidad.

Se pueden agregar mas usuarios a sudo modificando el /etc/sudoers . Hay un comando que viene con Ubuntu que sirve para modificarlo con el nano entrando directamente, el visudo. Hay que agregar usuario ALL=(ALL) ALL al final del fichero.

sudo visudo

Tambien se pueden agregar usuarios al sudo añadiendolos al grupo admin

ps: sirve para listarnos todos los procesos y aplicaciones que esten ejecutandose en ese momento. Suele utilizarse con las opciones aux. Sintaxis:

ps auxf

grep: nos muestra solo la linea que nos interesa. Suele utilizarse con | (pipe). Por ejemplo para saber que tarjeta de video (VGA) utilizamos:

lspci | grep VGA

Descomprimiendo

tar: varios archivos combinados en uno, sin comprimir. Para extraer se necesitan las opcion xfv, que seria "extraer desde un archivo mostrando informacion", la x es extract, la f es file, la v es verbose. Esta opcion (v) esta en muchos comandos, sirviendonos para mostrarnos mas informacion de algo en particular. Para comprimir un directorio o fichero se puede hacer cambiandole la x (extract) por c (create)

tar xvf archivo.tar

tar cvf archivo.tar carpeta

gz: archivo comprimido con gzip. Para descomprimir se puede usar el gunzip.

gunzip archivo.gz

bz2: archivo comprimido con bzip2. Para descomprimir se puede con el bunzip2

bunzip2 archivo.bz2

tar.gz, tar.bz2: podemos encontrarnos con un archivo combinado (tar) y comprimido en gz o en bz2. En vez de hacerlo en dos pasos separados, que se puede, lo mejor es utilizando tar agregarle la opcion z para gz y j para bz2.

tar xvzf archivo.tar.gz

tar xvjf archivo.tar.bz2


zip: archivo comprimido con zip. Para descomprimir se utiliza unzip:

unzip archivo.zip

rar: archivo comprimido en rar. Al ser un formato propietario no puede venir con el Sistema Operativo. Para instalarlo se hace con sudo aptitude install unrar . Luego, para descomprimir

unrar archivo.rar


Editores de textos: nano y vim.

Una cosa importantisima son los editores de textos. Existen varias aplicaciones para esto: emacs, joe, nano, vim. Nos interesa esto porque, como veremos, en GNU/Linux la mayoria de los ficheros de configuracion vienen en texto.

La mas sencilla para utilizar es nano. Para abrir un archivo nuevo o ya existente se puede hacer con:

nano nombredelarchivo

Es bastante grafico, teniendo las opciones para guardar, salir o buscar entre otras cosas. Para acceder se tiene que hacer CTRL + Tecla. Por ejemplo para guardar, CTRL + o. Nos pedira confirmacion. Para salir, CTRL + x. Por defecto en Ubuntu no viene instalado. Para instalarlo:

sudo aptitude install nano

Uno de los editores que viene por defecto en casi todas las distribuciones es el vi o el vim (la unica diferencia entre estas dos es que la segunda tiene mas opciones, es el Vi iMproved). La forma de abrirlo es la misma para todas las aplicaciones:

vim nombredelarchivo

Por defecto nos lo abre en modo vista. Para modificar algo tenemos que poner ESC, luego i de insertar y ahi estaremos en el modo de edicion. Una vez que hayamos terminado de modificar lo que queramos tendremos que darle a ESC para volver al modo vista. Desde ahi para guardar hay que poner w (de write) y para salir q (quit). Para aprender mas sobre la potencialidad del vim, podemos acceder a vimtutor, un tutorial donde nos explica como trabajar con vim, como buscar, copiar y pegar, etc.

vimtutor

COMO matar procesos rebeldes: kill, killall, xkill.

Algo muy util en Linux es que en caso de que algun proceso se quede colgado o querramos parar algo que este ejecutandose, es muy sencillo hacerlo. Para eso utilizaremos el comando kill. La sintaxis es

kill -9 ID-del-proceso

Para saber la ID del proceso tendremos que verlo en

ps aux

Podremos ver solo el proceso que estamos buscando si hacemos

ps aux | grep proceso

Por ejemplo

isaac@hamlab:~$ ps aux | grep firefox
isaac 5668 5.9 8.4 227208 86568 ? Sl 00:39 0:45 /usr/lib/firefox-3.0/firefox
isaac 6507 0.0 0.0 3836 784 pts/0 R+ 00:52 0:00 grep firefox

El ID del proceso se encuentra en la segunda columna (5668) que nos dice que corresponde con el Firefox. Para matarlo entonces tendriamos que poner

kill -9 5668

Otra solucion para saber el ID mas rapido es con el comando pgrep. Automaticamente nos lo da. Ejemplo:

pgrep firefox

5668

Una forma bastante mas rapida de hacer esto es con el comando killall. La sintaxis es

killall proceso

Por ejemplo, para matar el proceso del firefox podremos poner

killall firefox

Otra forma sencilla de parar un proceso es xkill. Como su nombre nos indica, esto sirve para matar solamente lo grafico. Nos muestra una cruz y podremos seleccionar la ventana que querramos matar. Podemos cancelarlo con ESC.

Archivos de configuracion mas utilizados: /etc/apt/sources.list, /etc/X11/xorg.conf, /etc/network/interfaces

/etc/apt/sources.list: aqui estan todos los repositorios de paquetes del sistema. Por defecto en Ubuntu hay ciertos repositorios con software restringido (restricted, universe, multiverse) que nos aparecen comentados (con # al principio de la linea). Ejemplo de una linea:

deb http://es.archive.ubuntu.com/ubuntu/ hardy-updates main restricted

/etc/X11/xorg.conf: el archivo de configuracion del servidor grafico (X11). Podemos por ejemplo modificar ciertos aspectos del video (driver de la tarjeta, frecuencia del monitor). En la ultima version de Ubuntu si cometemos algun error con la configuracion de nuestra tarjeta grafica nos aparecera un tutorial que nos los configurara automagicamente. Tambien se puede modificar con sudo dpkg-reconfigure xserver-xorg -phigh

/etc/network/interfaces: en este fichero esta la configuracion de la red. Aqui esta si va a tomar una IP estatica o dinamica.

/etc/fstab: en este fichero esta la configuración de los puntos de montaje que tengamos configurados.

/etc/resolv.conf: aqui configuramos nuestro DNS (Domain Name Server).

/etc/passwd: nos muestra los usuarios que hay en el sistema, sus IDs, la de su grupo, donde queda su home, y la shell que utiliza.

/etc/shadow: aquí estan las contraseñas encriptadas.

Reiniciar servidor grafico (gdm, kdm)

Como ya dijimos, en /etc/init.d/ hay muchos servicios que nos pueden resultar interesantes. Entre estos esta el servidor grafico (gdm en caso de gnome y kdm en caso de kde). Primero habria que irse a tty1 por ejemplo (CTRL+ALT+F1), loguearse y parar el servicio

sudo /etc/init.d/gdm stop

Para inciarlo de nuevo:

sudo /etc/init.d/gdm start

Para reiniciarlo directamente:

sudo /etc/init.d/gdm restart

Ya sabemos parar, arrancar y reiniciar servicios en Linux!! Esto es igual en casi todos, por ejemplo, para reiniciar el Apache (servidor web) o el Samba (servidor de ficheros, como el CEB!)

sudo /etc/init.d/apache2 restart

sudo /etc/init.d/samba restart

En caso de que el servidor grafico se haya quedado colgado hay una combinacion de teclas muy util que lo reinicia: CTRL + ALT + BACKSPACE (tecla para borrar que se encuentra arriba del ENTER)

En caso de que el sistema no nos responda con esto, hay una combinacion de teclas que le dice al sistema que debe reiniciarse por completo. No es muy recomendable utilizarlo pero es una forma de cerrarlo limpiamente sin darle al boton de apagar en caso de cuelgue. La combinacion es bastante complicada: ALT + PRT SCR y RSEIUB
Cada una de estas letras tiene un significado [http://asiermarques.com/2007/09/13/rseiub-reinicio-de-emergencia-en-sistemas-linux/ link]. Hay una regla nemotecnica para recordarlo: Raising Skinny Elephants Is Utterly Boring (significa criar elefantes flacos es verdaderamente aburrido).

Instalar, desinstalar y actualizar aplicaciones y el sistema (apt-get y aptitude). Instalar .deb. Compilar.

Una de las razones del exito de Ubuntu es su forma de instalar paquetes, la misma que la de Debian, su distribucion madre. Los paquetes .deb son muy sencillos de instalar:

sudo dpkg -i nombredelpaquete.deb

Para eliminarlos es

sudo dpkg -r nombredelpaquete

Podemos ver que paquetes tenemos instalados con

sudo dpkg --list

Para instalarlos graficamente hay que darles doble click, aceptar e ingresar la contrasenia. Podemos descargarlos en el sitio web de GetDeb: www.getdeb.net

El problema con este sistema es que para muchas aplicaciones necesitaremos primero instalar otros paquetes antes, por lo que tendremos que hacerlo a mano, uno a uno.

[NOTA: En otros sistemas Linux (RedHat, Opensuse, Mandriva) se utiliza otro tipo de paqueteria, los rpm.]

Esta no es la unica forma de instalarlos, sino tambien a traves de los repositorios. Los repositorios son directorios llenos de software. Ubuntu tiene mas de 30000 paquetes en los repositorios, pero nosotros le podemos agregar mas repositorios. La lista de todos los repositorios se puede ver en /etc/apt/sources.list, por ejemplo con nano:

nano /etc/apt/sources.list

Lo bueno de este sistema es que si necesita otros paquetes (aplicaciones o librerias) los busca e instala el propio sistema automaticamente. Esta es la forma mas rapida, sencilla y directa de instalar software.

Hay dos aplicaciones que sirven para esto: apt-get y aptitude. (La diferencia es que el segundo tiene mas opciones). La sintaxis:

sudo aptitude install nombredelpaquete

Por ejemplo para instalar el Firefox

sudo aptitude install firefox

Otra opcion que utilizaremos mucho es remove (para eliminar), show (ver mas informacion del paquete) y search (para buscar).

sudo aptitude remove firefox

sudo aptitude show firefox

sudo aptitude search firefox

Ubuntu, en su intento de facilitarnos la vida, si ve que ponemos algun comando que no tenemos, nos lo dira. Por ejemplo:

isaac@hamlab:~$ sl
El programa «sl» no está instalado actualmente.  Puede instalarlo escribiendo:
sudo apt-get install sl
-su: sl: orden no encontrada

Para que nos aparezca esto primero tiene que estar instalado el paquete command-not-found (sudo aptitude install command-not-found). Por defecto ya lo tendremos instalado en el sistema base de Ubuntu. Si no lo tenemos instalado entonces aparecera el clasico:

 bash: sl: orden no encontrada

En caso de que no encontremos el software en los repositorios o en paquetes deb siempre queda la opcion de compilar. Que es compilar? En pocas palabras, es pasar el codigo fuente a un lenguaje en que el ordenador pueda entenderlo. Es una de las bases del software libre y del opensource, ya que permite al usuario ver que tiene el software que esta instalando, y al desarrollador permite modificarlo a su gusto. Muchos de los proyectos de software libre estan alojados en sourceforge: http://sourceforge.net

Para compilar primero debemos descomprimir el fichero donde esta la aplicacion, luego configurarlo, luego decirle que lo prepare y por ultimo que lo instale. Esto se hace con los comandos

./configure

make

sudo make install

Por supuesto siempre primero es recomendable leer los fichero README e INSTALL que aparecen junto con las fuentes.

Para compilar en Ubuntu y Debian primero es necesario instalar el paquete build-essential con

sudo aptitude install build-essential

Vamos a ver un ejemplo de una compilacion con el programa hello. Este se puede descargar desde http://www.gnu.org/software/hello/ Para empezar lo descargaremos desde la terminal en el directorio /usr/local/src. En este directorio es donde pondremos todos los programas que vamos a compilar. Entonces

cd /usr/local/src

Para descargarlo vamos a usar la herramienta wget.

wget ftp://ftp.gnu.org/gnu/hello/hello-2.3.tar.bz2

Como vemos, esta comprimido en .tar.bz2, por lo que descomprimimos

tar xvjf hello-2.3.tar.bz2

Automaticamente nos crea una carpeta llamada hello-2.3. Entramos a la carpeta

cd hello-2.3/

Vemos que archivos hay dentro con ls

ABOUT-NLS ChangeLog configure.ac gnulib man src
aclocal.m4 ChangeLog.O contrib INSTALL NEWS tests
AUTHORS config.in COPYING Makefile.am po THANKS
build-aux configure doc Makefile.in README TODO

Vemos que nos dice INSTALL con

less INSTALL

Nos dice como se hace la compilacion, por lo que seguimos los pasos:

./configure

Hace una comprobacion de que tengamos todas las dependencias necesarias para ejecutar la aplicacion. Si nos faltara algo tendriamos que instalarlo (con apt-get, dpkg o compilando) y volver a lanzar el configure. Se utiliza el ./ porque queremos ejecutarlo. Una vez que termina el configure le damos a

make

Este ya prepara el fichero para la posterior instalacion, diciendole donde, que y en que orden tiene que compilar. Por ultimo necesitariamos instalarlo, para lo que necesitamos permisos de superusuario:

sudo make install

Esto ya termina de instalar la aplicacacion. Podemos comprobar que funciona con

hello

¡Hola mundo!

Para más informacion de como compilar:

http://es.wikipedia.org/wiki/Compilador

http://www.eloihr.net/linux/index.php?page=compilar 

Administracion de Usuarios

Podemos crear usuarios con el comando adduser:

adduser usuario


Nos pedira la contraseña (que ingresaremos dos veces) asi como otra informacion (nombre completo, numero de telefono, etc)

isaac@hamlab:~$ sudo adduser prueba
Password:
Adding user `prueba' ...
Adding new group `prueba' (1002) ...
Adding new user `prueba' (1139) with group `prueba' ...
Creating home directory `/home/prueba' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for prueba
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [y/N] y


Para eliminar un usuario se puede hacer con userdel

userdel usuario


Nos dejara su home sin tocar por si queremos mantener los datos que tenia. Podremos eliminarla haciendo sudo rm -rf /home/usuario

Para la administracion del sistema tambien se utilizan los grupos. Esto
entra en juego con el tema de los permisos de fichero, que explicaremos
mas adelante. Para crear un grupo, se hace con el comando addgroup y
para elminarlo con delgroup. Y para añadir un usuario a un grupo, nos
sirve tambien con el addgroup:

addgroup usuario grupo


A todos los usuarios les crea automaticamente una linea en el
/etc/passwd, donde indica varios datos: nombre del usuario, ID del
usuario, ID del grupo al que pertenece, donde esta su home y que tipo
de interprete de linea de comandos utiliza: 

prueba:x:1002:1002:,,,:/home/prueba:/bin/bash


Como podemos apreciar, no nos dice su contraseña, aunque en
realidad si lo hace: es el segundo parametro, la x. Esto es porque
verdaderamente las guarda en otro fichero, el /etc/shadow, donde esta
su contraseña encriptada:

prueba:$6$QaJ6VQdc$/eTOBEPYgB/6z/0HluxqWiIuR2spMMT2B52WXA1XBJhVwcrSsrP/sqtA/MuMveE1mmfc8.zsrJV86OwuTGNdp/:14204:0:99999:7:::


Para cambiar la contraseña de un usuario podemos hacerlo con el comando passwd.

sudo passwd usuario

Mas informacion de la Administracion de Usuarios en Linux:

http://www.linuxtotal.com.mx/index.php?cont=info_admon_008

COMO montar dispositivos 

Aunque ultimamente la funcion de automontado de Linux funciona cada vez
mejor, puede dar algun problema. Para esto, vamos a ver unas nociones
basicas de montaje para salir del apuro. Primero, ¿que es montar? Segun
la Wikipedia, es "la acción de integrar un sistema de archivos alojado en un determinado dispositivo dentro del árbol de directorios de un sistema operativo". Entonces, para ver que es lo que podemos montar, podemos verlo haciendo 

dmesg

Y nos aparece que dispositivo es el que se añadio
recientemente, dandonos su identificacion en el sistema (sdx).
Entonces, como vimos anteriormente, todos los dispositivos en linux
estan en la carpeta /dev, tendremos que buscarlo en /dev/sdx, o bien podemos ir buscandolo en /dev/disk/by-label o alguna de las otras carpetas de /dev/disk/

Luego tenemos dos formas de montarlo: 

sudo mkdir /media/disco

Luego debemos utilizar el comando mount. La sintaxis de este es la siguiente:

sudo mount -t tipo /dev/origen /media/disco

Por
ejemplo, si el disco USB que pusimos tiene la etiqueta "peliculas" y
tiene el sistema de ficheros estandar de Linux, podremos hacerlo con

sudo mount -t ext3 /dev/disk/by-label/peliculas /media/disco

Otros
tipos de sistema de ficheros son vfat, para fat32, y ntfs-3g, para
ntfs, el sistema de ficheros estandar en Windows desde NT. Este ultimo
driver puede que no lo tengamos instalado en el sistema, por lo que
podemos hacerlo como siempre con sudo aptitude install ntfs-3g

Para desmontar dispositivos podemos hacerlo con

sudo umount /media/disco 

/dev/disk/by-label/peliculas        /media/disco       ext3        default  0 0

Como vemos es bastante simple la estructura, siendo

/dev/origen                              /media/disco       tipo        opciones  0 0

Para ntfs-3g debemos tambien agregar la opcion force, un ejemplo:

 /dev/disk/by-label/peliculas        /media/disco       ntfs-3g        default,force  0 0

Luego para habilitar los cambios podremos hacerlo diciendole al
comando mount que nos monte todo lo que encuentre en el fstab; por
supuesto no nos desmontara el sistema de ficheros donde tenemos el
sistema operativo porque o sino no podria trabajar. La sintaxis es:

sudo mount -a

Luego, para desmontar podemos hacerlo simplemente con 

sudo umount /media/disco

Redes: ifconfig, iwconfig, iwlist, dhclient. nm-tool, ping.

El comando ifconfig nos da una lista con todos los dispositivos de red que tenemos en el sistema. Normalmente aparece eth0 que es el Ethernet (cable de red) y el eth1, ath0 o wlan0 que es el Wireless (wifi), aunque esto puede cambiar segun el sistema. La opcion -a puede servirnos para ver todas.

sudo ifconfig -a

Otra forma de ver nuestro estado de conexion junto con otra informacion es nm-tool. Sintaxis:

nm-tool

Tambien nos da otras informaciones importantes como la IP que tenemos, y entre otras cosas este comando sirve para cambiar esta. Sintaxis:

sudo ifconfig dispositivo IP

Ejemplo:

sudo ifconfig eth1 192.168.1.9

Otro comando interesante es el iwconfig. Este es muy similar al anterior pero se especializa en los dispositivos wireless. Entre otras cosas nos dice si estamos conectados a una wifi, que nombre tiene esta si lo estamos, el modo, la frecuencia, la velocidad, etc. Sirve tambien para conectarnos a estas. Si ponemos solo iwconfig nos mostrara que tarjetas de red inalambrica tenemos disponibles. Ejemplo:

sudo iwconfig eth1 essid PatioMaravillas

Para entrar en una que nos pide contrasenia:

sudo iwconfig eth1 essid PatioMaravillas key s:XXXXXX
Una opcion muy util es essid any, que nos conecta a la que este desencriptada y con mejor senial.

sudo iwconfig eth1 essid any

Si queremos saber que redes tenemos disponibles lo podemos ver con iwlist y la opcion scanning. Ejemplo:

sudo iwlist eth1 scanning

Otro comando util para las redes es dhclient. Este nos encuentra automagicamente una IP dinamica (pide DHCP), por lo que no tendremos que preocuparnos en poner una nosotros. Necesita permisos de superusuario

sudo dhclient

Como dijimos anteriormente un fichero que puede interesarnos es el /etc/network/interfaces. Aqui es donde ponemos si la IP para algun dispositivo es estatica o dinamica. Podemos entonces configurar una IP dinamica poniendo esto en el fichero:

auto eth0

iface eth0 inet dhcp

Una IP estatica se configura de la siguiente forma:

auto eth0

iface eth0 inet static

address 192.168.1.2

netmask 255.255.255.0

gateway 192.168.1.1

El comando nm-tool nos da mucha informacion sobre la red.

El ping envia paquetes constantemente contra el destino que querramos. Puede ser de la red local (por ejemplo 192.168.1.1) o de Internet (patiomaravillas.net). Su sintaxis es

ping destino

Por ejemplo:

ping patiomaravillas.net

Otro comando interesante es el mtr (my trace route). Comandos parecidos son el tracepath o el traceroute. Nos muestran la ruta que toma una peticion a alguna direccion de Internet.

Una de las razones del exito de Linux es sin dudas el ssh. Significa secure shell (consola segura) y surge como oposicion a rlogin, telnet y otras formas de conexion remotas que quedaron en desuso y son inseguras. Como su nombre lo indica, el ssh es seguro. La seguridad se basa en la encriptacion en GPG. El ssh permite conectarnos a un ordenador remoto, siendo el mejor aliado de un administrador de sistema. Tenemos que decirle a donde queremos conectarnos (una IP o direccion) y un nombre de usuario, o intenara loguearse con el mismo con el que estamos en la maquina local.

ssh usuario@IP

Para conectarnos por ssh a cualquier ordenador primero tendremos que haber instalado el paquete openssh-server (sudo aptitude install openssh-server)

Otro comando muy interesante es el scp. Su sintaxis es muy parecida al ssh, y sirve para enviar o tomar ficheros de un ordenador remoto con el servidor ssh instalado. Son muy importantes los dos puntos del final. Ahi le indicamos la ruta donde queremos que nos ponga el fichero que enviemos. Por defecto lo pondra en la home del usuario que lo haya enviado.

scp fichero usuario@IP:

Bonus: hacia el infinito y mas alla. MC, mp3, navegador, torrents, mensajeria, videos.

Hay navegadores de ficheros para la terminal. Uno de los mas conocidos es el Midnight Commander (mc). En Ubuntu por defecto no viene instalado, pero lo podemos conseguir con

sudo aptitude install mc

Para escuchar mp3 se puede con mpg123. Sintaxis:

mpg123 fichero

Tambien es posible escucharlos con un reproductor bastante mas completo: el mocp.

Para navegar por la terminal se puede utilizar lynx o links2. Ejemplo:

lynx www.patiomaravillas.net

links2 tiene una opcion para ver imagenes, con la opcion g

links -g www.patiomaravillas.net

Para descargar ficheros torrents:

btdownloadcurses fichero.torrent

Para ver peliculas en ASCII:

mplayer -vo aa fichero

Para ver imagenes (con ImageMagick):

display imagen

Y por supuesto, una curiosidad bien friki:

telnet towel.blinkenlights.nl

Bash scripting y más enlaces.