En esta serie de articulos vamos a ver varios tips de configuración y de uso del famoso historial de comandos.
El shell del sistema mantiene un historial de los últimos comandos ejecutados, mediante el comando history podemos accesar dicho historial de comandos e incluso interactuar con él.
Usando el comando history nos muestra una lista de los últimos 500 comandos, por ejemplo:
$ history (...) 482 cd samba 483 ls 484 cd .. 485 ls 486 pwd 487 sudo mkdir -p /datos/p/proyecto001/share/apps/app001/libs/static/mas/rutas/hasta/el/destino 488 cd /datos/p/proyecto001/share/apps/app001/libs/static/mas/rutas/hasta/el/destino 489 cd 490 cat .bash_local 491 top 492 cd bin/ 493 ls 494 vim bash_colors.sh 495 sh bash_colors.sh 496 vim bash_colors.sh 497 sh bash_colors.sh 498 bash bash_colors.sh 499 history
500 son muchos comandos, quizas solo nos interesa obtener una lista de los últimos 10 comandos ejecutados, para obtener solo un número en especifico de entradas del historial pasamos como argumento al comando el número de lineas que desamos ver, por ejemplo:
$ history 10 493 ls 494 vim bash_colors.sh 495 sh bash_colors.sh 496 vim bash_colors.sh 497 sh bash_colors.sh 498 bash bash_colors.sh 499 history 500 history 40 501 history 20 502 history 10
Esto es bastante úitil cuando no queremos ver en la pantalla la lista de los 500 comandos.
En el shell bash el historial de comandos se guarda en el archivo ~/.bash_history, si desea cambiar el nombre del archivo defina la variable de entorno HISTFILE, por ejemplo:
$ export HISTFILE=~/.mihistorial
Si desea cambiar el valor predeterminado (500) de número de entradas almacenadas en el historial de comandos defina la variable de entorno HISTSIZE, por ejemplo:
$ export HISTSIZE=1000
Recuerde que si desea hacer estos cambios permantentes puede agregar los comandos anteriores a su archivo ~/.bashrc.
En el siguiente articulo de esta serie veremos como sacarle jugo al historial de comandos mediante accesos de teclado y comandos de edición del historial.
En la mayoría de distribuciones Linux que usan el shell bash, precargan en sistema con un prompt bastante generico, el clasico:
Aunque no siempre, es posible que nos toque trabajar en directorios con una ruta muy muy muy pero muy larga, en ese caso, con las configuraciones predeterminadas del prompt, el prompt quedaría muy grande y dejaría poco espacio en pantalla para escribir comandos, se vería algo así:
Como podemos ver, queda muy poco espacio para escribir nuestros comandos, además que si usamos comandos con varios argumentos y uno que otro pipe, entonces se vuelve algo poco ilegible.
Aquí les dejo una forma para configurar el prompt en dos líneas, una donde se mostrará el username, hostname y la ruta, la ruta puede tomar todo el espacio que requiera, el prompt quedará en una linea independiente, algo así:
comodo y legible :).
Ok para cambiar el prompt es necesario cambiar el valor de la variable de entorno PS1, con algo así:
$ export PS1='[\e[0;32m\u\e[m@\e[0;32m\h\e[m][\e[2;33m\w\e[m]\n\$ '
Si quieren hacerlo permantente, simplemente agregamos la misma linea a nuestro archivo ~/.bashrc.
Si desean cambiar los colores, o agregar más información a su prompt, les recomiendo el howto Bash Prompt HOWTO, ahí se muestra más info sobre los caracteres de control y los codigos de color.
El comando /sbin/blkid nos muestra una lista de particiones con información tal como: nombre de dispositivo de bloque, UUID (Universally Unique IDentifier), Etiqueta y tipo de sistema de archivos, esto es bastante útil en en nuevas distribuciones Linux que hacen referencía a un dispositivo de bloque por UUID o LABEL.
Bien aquí un ejemplo:
<code>$ blkid /dev/sda1: LABEL="PQSERVICE" UUID="EAEE-EB49" TYPE="vfat" /dev/sda2: UUID="9E224F27224F03AD" LABEL="Acer" TYPE="ntfs" /dev/sda5: UUID="1e448752-2099-4818-a848-e58b260d0c4c" TYPE="ext2" LABEL="/boot" /dev/sda6: TYPE="swap" LABEL="swap" UUID="a715f878-6090-47e5-a8ec-23e3c6650744" /dev/sda7: UUID="527bc37a-eee2-4359-92e7-364be1924fa5" TYPE="ext3" LABEL="/" /dev/sda8: UUID="63fb54dc-1733-463a-a876-67d0c6766dae" TYPE="ext3" LABEL="/vbox"</code>
List espero que les sirva, en un post futuro les mostrare como etiquetar un sistema de archivos, tanto VFAT, EXT2 o EXT3.
No recuerdo de donde me piratie este tip, pero le doy las gracias a quien lo haya hecho, pues aqui les dejo como poder verificar la dirección IP publica con la que salimos, esto es útil cuando estamos atras de un router que hace NAT.
Para realizar esta tarea usaremos el comando wget, así que hay que asegurarse de que lo tengamos instalado.
$ wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
Espero que les sirva este tip, esta es solo una forma de hacerlo, seguramente hasta con curl o un simple telnet o netcat podemos hacerlo.
NOTA: El amigo alvarezp comento otra forma, usando:
wget -qO - http://www.whatismyip.com/automation/n09230945.asp
Si usas sudo para ejecutar comandos conf privilegios de root, algo muy común en Ubuntu, es posible que obtengas un mensaje de permiso denegado, por ejemplo:
$ sudo echo "jmedina.tuxjm.net" > /etc/hostname bash: /etc/hostname: Permission denied
Esto es porque sudo solo ejecuta el primer comando, es decír, solo la parte de echo, la parte de la redirección es ejecutada como el usuario no privilegiado, esta es una medida de seguridad.
Para darle la vuelta a esta protección podemos usar:
$ sudo sh -c 'echo "jmedina.tuxjm.net" > /etc/hostname'
y listo, espero que les sirva este tip, porque he visto que conforme Ubuntu cana popularidad los usuarios tienen este problema, por ejemplo cuando quieren activar el port forwarding.
Cada vez que instalo un servidor con Ubuntu Hardy y hago las primeras configuraciones en la consola, me es muy molesto que este pite y pite la maldita bocina, pues aquí les dejo la receta.
En realidad lo que vamos a desactivar es el modulo de la bocinita de la tarjeta madre o el gabinete.
Para desactivarlo temporalmente o mientras este en ejecución el sistema usamos:
$ sudo rmmod pcspkr
Note que la siguiente vez que reinicie el sistema el modulo se cargará automáticamente, si desea desactivarlo permantentemente debemos de meter el modulo pcspkr a la lista negra.
$ sudo sh -c 'echo "blacklist pcspkr" >> /etc/modprobe.d/blacklist'
NOTA: En Ubuntu Jaunty el archivo es /etc/modproble.d/blacklist.conf.
Y listo, espero que les sirva, por lo menos no es tan molesto y más cuando se esta bajo presión, jeejeje.
La interfaz de administración predeterminada de las maquinas virtuales creadas en VirtualBox es desde su interfaz gráfica, la cual requiere un entorno gráfico en ejecución, el otro día tuve la necesidad de iniciar una maquina virtual de forma remota desde un shell (ssh), así que hice lo siguiente:
Primero hacemos un listado de las maquinas virtuales existentes:
$ VBoxManage list vms
VirtualBox Command Line Management Interface Version 3.0.4
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.
"WinXProES" {32a39637-8193-4aaa-9f8e-e2ecbb309541}
"LiveCD" {8848ba43-823e-4129-8d3e-685e6e45edd6}
"Win2k3-Enterprise-AD" {03ce96fb-2eac-49ae-b78c-63d0d7f3ccc7}
Ahora iniciamos la maquina en modo headless, con:
$ VBoxManage startvm --type headless "Win2k3-Enterprise-AD" VirtualBox Command Line Management Interface Version 3.0.4 (C) 2005-2009 Sun Microsystems, Inc. All rights reserved. Waiting for the remote session to open... Remote session has been successfully opened.
Y podemos ver un listado de las maquinas virtuales en ejecución:
$ VBoxManage list runningvms
VirtualBox Command Line Management Interface Version 3.0.4
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.
"Win2k3-Enterprise-AD" {03ce96fb-2eac-49ae-b78c-63d0d7f3ccc7}
Y listo :).
Para detener la maquina virtual desde la consola podemos usar:
$ VBoxManage controlvm "Win2k3-Enterprise-AD" poweroff VirtualBox Command Line Management Interface Version 3.0.4 (C) 2005-2009 Sun Microsystems, Inc. All rights reserved. 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Espero que a alguien más les sirva este tip.
Algunas veces se tiene la necesidad de ejecutar un comando pero con los privilegios de otro usuario, esto puede ser por algunas de las siguientes razones:
- El comando requerido debe de ser ejecutado con cierto usuario por razones de permisos tanto en ejecutables, archivos de configuración, archivos de logs, o en archivos de bases de datos.
- No quiere hace: su - otrousuario, ejecutar el comando, y regresarse a la sesión anterior.
Podemos usar el comando su para ejecutar un comando con los privilegios de otro usuario, por ejemplo:
- La sesión actual es del usuario root y su prompt es root@localhost:~#
- Se necesita ejecutar el comando: sa-learn –spam –showdots <spam-sample.msg,
- pero con el usuario amavis por razones de permisos, archivos de configuración, logs y bases de datos
Usamos el siguiente comando:
root@localhost:~# su vscan -c 'sa-learn --spam --showdots <spam-sample.msg'
NOTE: el comando deberá de ser escrito entre comillas.
Espero que este tip les sea útil como lo fue para mi.
El caracter Unix de fin-de-linea (EOL) es un caracter “line feed/newline (LF)” (\n), y para sistemas DOS/Windows es un “carriage return”, seguida de un “line feed/newline” (\r\n).
Por ejemplo tenemos Archivo_UNIX con el contenido:
$ cat Archivo_DOS Linea 1 CR/LF Linea 2 CR/LF
En esta salida no podemos ver los caracteres de EOL, pero odemos verlo con el comando od.
$ od -c Archivo_DOS0000000 L i n e a 1 C R / L F \r \n L 0000020 i n e a 2 C R / L F \r \n 0000036
Ahora vemos algunos ejemplos de como convertir archivos de un sistema a otro.
Convirtiendo archivos DOS a Unix
Usando Sed
$ sed 's/^M//' Archivo_Unix > Archivo_DOS</pre>
NOTA: Para generar el caracter ^M preciona Ctrl+V seguido de Ctrl+M
Usando TR
$ tr -d '\r' < Archivo_DOS > Archivo_UNIX</pre>
ó
$ tr -d "\015" < Archivo_DOS > Archivo_UNIX</pre>
Convirtiendo archivos Unix a DOS
Usando Sed
$ sed 's/$/\r/' Archivo_Unix > Archivo_DOS</pre>
También podemos usar la notación ASCII:
$ sed 's/\x0D$//' Archivo_Unix > Archivo_DOS</pre>
También puede utilizar los comandos dos2unix y unix2dos, en Ubuntu puede instalar el paquete tofrodos.
Mucha gente me pregunta que comando puede usar para ver el nivel de ejecución (runlevel) en el que se esta ejecutando su sistema GNU/Linux. Aquí les dejo la respuesta a su pregunta.
El comando runlevel nos muestra el número del nivel de ejecución en el que se encuentra un sistema GNU/Linux, por ejemplo en Kubuntu:
$ runlevel N 2
En sistemas basados en Debian, el nivel de ejecución predeterminado es 2 independientemente si se inicia un entorno gráfico o no.
En un servidor (no entorno gráfico) Redhat Enterprise Linux por defecto el runlevel es 3, lo podemos ver aquí:
# runlevel N 3
NOTA: En sistemas basados en redhat como RHEL, CentOS, Fedora el nivel de ejecución predeterminado en instalaciones con entorno gráfico es el 5.
TODO: En un post futuro explicar como cambiar el nivel de ejecución predeterminado en diferentes distribuciones GNU/Linux.
Espero que este tip les sea de ayuda.
Siguiente » 1 2

Add comment