| Trucos Web | Trucos Windows | Trucos Win XP | Trucos Grabadoras | Trucos Visual Basic | Trucos Google |

 

Dominando la Shell, comandos útiles en Linux, trucos shell.


Igual que en el ms-dos de Windows, la shell de Linux nos permite administrar el sistema sin entorno gráfico. El problema es que la línea de comandos de Windows permite hacer pocas cosas. Todas las distribuciones Linux incluyen muchos binarios (programas, comandos). Gracias a esta variedad de comandos podemos manejar el sistema con un gran ahorro de consumo de imágenes que consumen memoria y ocupan tamaño al ser enviadas por la red (administrar un sistema remotamente).


Todos estos programas se encuentran en estos directorios de ejecutables (en el PATH del usuario normalmente estan). Estos directorios suelen ser /bin, /sbin, /usr/bin y /usr/sbin.

Todos los comandos tienen su manual :

man comando

Esto nos mostrará la explicación del comando y todas sus opciones (argumentos) (para salir del manual apreta la letra q). El problema es que si no sbemos que existe un comando no sabemos que puede hacer eso. Entonces no sirve de nada el man, porque antes debemos saber que ese comando es lo que queremos saber. Por eso resultan muy útiles los listados de los comandos, ya que vemos los comandos más usados , más prácticos ,más útiles(ordenados por categorías: trabajar con archivos, direcctorios, con la red, información del sistema).

man –k palabra_clave

Antes de comenzar a ver los comandos básicos, descubriremos la tecla tabulador <tab> que sirve para autocompletar los comandos, ficheros, directorios.


ctrl + c (matar proceso actual)

- Info Sistema
echo $PATH
set
umask
ulimit
history
type
pwd
hostname
uname –a
date
time
whoami
who
id
last
uptime
top
free
df –h
du
cat /proc/cpuinfo
cat /proc/version
cat /proc/interrupts
cat/proc/filesystems
cat/proc/dma
cat /etc/princap
mount
lsmod
dmesg


- Básicos
ls
cd
cp
mcopy
mv
ln –s
rm -r
mkdir
rmdir
grep (ejemplo comando | grep filtro)
tail
sort
find
locate
halt
reboot
shutdown
diff

- Red
wget
lynx
dig
rndc
nslookup
hostname
host
ping
route
ifconfig
traceroute
netstat
finger
talk


- Editores y desarollo
pico
vi
sed
touch
emacs
gcc codigo.c
g++ codigo.C
perl
phyton
tcl
wish
guile
g77
f2c
fort77
basic
cvs


- Procesos
ps
fg pid
bd pid
kill pid
Variantes de kill
* kill -HUP <pid>: Señala al proceso con numero <pid>, que vuelva a leer sus archivos de configuración
* kill -INT <pid>: Señala al proceso con numero <pid>, que sera interrumpido
* kill -TERM <pid>: Señala al proceso con numero <pid>,que debe de terminar, a diferencia de -KILL , esta opción da la oportunidad al proceso de terminar.
* kill -STOP <pid>: Señala al proceso con numero <pid>, que pare momentaneamente
* kill -CONT <pid>: Señala al proceso con numero <pid>, que continué, este comando se utiliza para reanudar un proceso que le fue aplicado -STOP
* kill -KILL <pid>: Señala al proceso con numero <pid>,que termine de inmediato, el proceso es terminado abruptamente.
killall programa
lpc
lprm trabajo
nice programa
renice pid

- Admin
adduser
groupadd
passwd
chmod
chown
su
chattr
lsattr
chage
chgrp
fsck
e2fsck
insmod
modprobe
sysinfo


- Instalar y Comprimir
rpm
tar xvzf
tar cvzf
gunzip
gzip
unzip
zip
zcat


- Trucos Shell
!! (repite el último comando)
!numero (repite el último comando x veces)
!v (repite el último comando que empieze por v)
more
less
|
cat (muestra) (ejemplo --> cat /dev/null >fichero (lo vacia)
echo (escribe)
> (escribe y sobreescribe)
>> (añade)
alias
comando & (ejecuta y desaparece)
comando1; comando2; comando3
comando1 & comando2

[hr]

* ^d (ctrl-d): Envía un EOF (final de fichero) a la shell que causa un logout.
* ^c (ctrl-c): Termina el proceso que esté en ejecución.
* ^z (ctrl-z): Pone el proceso en ejecución en sleep, pudiendo volver a el con, por ejemplo, fg.
* ^l (ctrl-l): Realiza un clear (borrado de la pantalla) pero manteniendo la linea en la que fue pulsada esta combinación de teclas.
* ^t (ctrl-t): Intercambia dos letras contiguas. Por ejemplo, supongamos que escribes apt-gte, pues te colocas en la 'e', le das a ^t y problema disléxico (más común de lo que pudiera parecer ;-) solucionado.
* ^r (ctrl-r): El bash entra en el modo 'reverse-i-search', que se utiliza para buscar comandos que fueron ejecutados anteriormente. En este modo el usuario puede ir escribiendo parte de la linea de comandos que esta buscando, y el bash va mostrando la línea de comandos que el cree la más adecuada. Una vez has encontrado la que buscabas, enter.
* ^s (ctrl-s): Bloquea la shell.
* ^q (ctrl-q): Desbloquea la shell.


Pero aquí no acaba la cosa, ahora unos cuantos que he encontrado probando y/o buscando por el google:

* ^a (ctrl-a): Desplaza el cursor al inicio de la línea de comandos.
* ^e (ctrl-e): Desplaza el cursor al final de la línea de comandos.
* ^u (ctrl-u): Corta la linea de comandos desde la posición del cursor hasta el inicio de la línea. El texto cortado se guarda en una especie de "portapapeles", pudiendo realizar un paste (ver más abajo)
* ^k (ctrl-a): Igual que ^u pero desde el cursor hasta el final de la línea.
* ^y (ctrl-y): Pega el texto que previamente había sido cortado con ^u o ^.
* ^b (ctrl-b): Desplaza el cursor una posición hacia la izquierda, como si usaramos la flecha hacia la izquierda de los cursores.
* ^f (ctrl-f): Desplaza el cursor una posición hacia la derecha, como si usaramos la flecha hacia la derecha de los cursores.
* ^p (ctrl-p): Se desplaza por el histórico de la línea de comandos hacia atrás, como si utilizaramos la flecha hacia arriba de los cursores.
* ^n (ctrl-n): Se desplaza por el histórico de la línea de comandos hacia delante, como si utilizaramos la flecha hacia abajo de los cursores.


Hay otras teclas rápidas que han sido aportadas por los comentarios a este artículo:

* ^w (ctrl-w): Corta desde la posición actual del cursor hasta el primer espacio que encuentra hacia la izquierda.


Finalmente he encontrado una combinación de teclas que me ha funcionado desde el las X (provado en konsole y xterm), pero que no me ha funcionado en la consola: ^_ (ctrl-_) que lo que hace es un undo o deshacer.

 

  • Empezamos con el truco clásico por excelencia, que es el truco del doble ESC.
    En los intérpretes más modernos de UNIX, por ejemplo el disponible en los ordenadores de SOPA, o el de Linux por excelencia (Bourne-Again Shell, o BASH), cuando escribimos un nombre de un fichero y queremos terminar de escribirlo automáticamente, y suponiendo que no haya ambigüedad (es decir, que no haya más de un fichero que empiece por la ristra que ya está escrita), al pulsar dos veces ESC, el intérprete se encargará de completar el nombre que falta. Esto es muy útil, sobre todo, cuando nos bajamos de INet un fichero que tenga como nombre algo así como:
    	text-utils.8.4.1.documentation.linux.tar.gz
    
    No tendremos más que escribir los primeros tres o cuatro caracteres, o menos, y pulsar ESC-ESC. Por supuesto, podremos movernos por directorios con este truco, y nos rellenará nombres de ficheros que no estén necesariamente en el directorio actual.
    En algunos intérpretes de órdenes este truco no se realiza con M-ESC (Alt-ESC, que es lo mismo que ESC-ESC), sino con el TAB. Mira la página del manual de tu intérprete preferido y haz pruebas para adivinar cuál de las dos es la correcta.
    Hay una variable de entorno que controla el comportamiento de esta característica: la variable es $FIGNORE. Esta variable debe contener una lista separada por ':' de "extensiones" a ignorar por el intérprete. Por ejemplo, normalmente nosotros no vamos a utilizar órdenes con los ficheros objetos (terminados por convenio en '.o'), así que podemos poner en nuestro .profile una línea como:
    	FIGNORE='.o'
    
    Y así, la próxima vez que tengamos los ficheros foo.c y foo.o en nuestro directorio actual, al escribir f[ESC][ESC] nos rellenará el nombre foo.c directamente.

     

  • Atajos de teclado para la edición en la línea de órdenes.
    En realidad estos atajos de teclado sólo sirven para cuando la edición está en modo EMACS. Creo que para forzarla, si no viene por defecto, hay que poner en el .profile (es decir, en cualquiera de los archivos de configuración. En linux --suponiendo que usas bash-- podría ser .bash_profile) la línea set -o emacs. Los atajos de teclado son los siguientes:
    	Ir al principio de la línea			- ^A
    	Ir al final de la línea				- ^E
    	Borrar hasta el principio de la línea		- ^U
    	Borrar hasta el final de la línea		- ^K
    	Borrar la palabra a la izquierda		- M-BS
    	Moverse una palabra adelante			- M-F
    	Moverse una palabra atrás			- M-B
    	Limpiar la pantalla				- ^L
    	Pegar la línea anterior				- ^Y
    	Repetir el último parámetro			- M-.
    
    Lo de M-x significa Meta, es decir, que o bien lo haces con la tecla Alt, o bien pulsas Esc y luego la tecla x. BS significa BackSpace.
    Hay otro truquillo, pero que merece una explicación un poco más detallada: Cuando estás en BASH, si pulsas Alt-número, va a reemplazar el prompt, temporalmente, por
    	(arg: número)$ Lo que tuviéramos escrito
    
    
    En este momento, podremos seguir pulsando números, o ESC si nos hemos equivocado o nos arrepentimos. Estos números se irán escribiendo en arg. Este número serán las veces que se va a repetir el caracter que pulsemos a continuación. Es un truco un poco macarrónico, ya lo sé, pero igual te sirve para algo.

  • Programando en el intérprete.
    A poca gente se le ocurre aprender a programar en el intérprete de órdenes: Es como crear fichero .bat de MS-DOS, pero la diferencia de potencia y flexibilidad entre unos y otros es más o menos la misma que existe entre MS-DOS y los sistemas UNIX (o sea, insultante a favor de UNIX).
    Aunque no estés interesado en programar guiones (que pueden hacer algunas cosas interesantes: Yo mismo he hecho un interfaz para los ficheros .tar.gz con un guión, y no soy ni de lejos un experto en el tema), muchas veces te pueden sacar de apuros.
    Por ejemplo, es muy útil la orden for, que se puede utilizar para procesar varios ficheros con una orden que sólo acepta uno. Incluso podrías utilizarlos para convertir todos los nombres de los ficheros del directorio actual en minúsculas, y virguerías varias.

  • Cambiando el aspecto del prompt.
    Cambiar el aspecto del prompt es muy fácil en UNIX. Solamente tienes que cambiar de valor una variable de entorno llamada PS1 para el prompt primario (el que ves siempre), o PS2 para el secundario (el que sale cuando tienes que terminar la instrucción en las siguientes líneas). Para que te acuerdes, lo de PS viene por Prompt string. Este año, en los PCs, que corren Linux, el prompt, para mi gusto, es bastante feo, y consiste en una admiración seguida del típico signo de dólar.
    Hay algunos caracteres que, escapados con un backslash (\), producen diferentes resultados. Los que conozco son:
    	Nombre del usuario			- \u
    	Directorio de trabajo			- \W
    	Ruta completa de trabajo		- \w
    	La hora actual				- \t
    	La fecha actual				- \d
    	El nombre del intéprete			- \s
    	El nombre de la máquina actual		- \h
    	El número de la orden			- \#
    	La posición en el history		- \!
    	Caracter de prompt según derechos	- \$ [*]
    	Caracter nnn (en octal)			- \nnn
    
    [*] - Significa que si el UID efectivo (la identificación de usuario efectiva) es 0, o sea, el root, saldrá un "#". Si no, un "$"
    Si quieres una lista completa de esto, consulta la página del manual en línea del bash, escribiendo
    	info bash
    
    Allí tendrás que buscar las características propias del Bourne Again SHell (están las características heredadas del Bourne Shell, del C Shell, del Korn Shell, y las propias, originales del Bourne Again Shell), y una vez dentro de eso, un tema parecido a Printing a Prompt.
    Por supuesto, que el sitio perfecto para ejecutar la asignación es algún fichero de configuración, como el .profile o el .bash_profile, para asegurarse de que se ejecuta siempre que entramos en la cuenta. El mío, para que te hagas una idea, tiene el siguiente valor:
    	PS1="zoso:\w$ "
    
    No olvides poner al final un espacio, porque si no, las instrucciones quedarán pegadas al prompt, lo que es un tanto antiestético.
    Estos caracteres (al menos el que utilizo yo, el '\w') no funcionan en el intérprete de los ordenadores de sopa (sólo en los PCs). La solución que puedo dar es detectar cuándo se está entrando a la cuenta desde Linux y cuando desde otro. La única solución que se me ha ocurrido es mirar la variable de entorno $TERM, que indica el tipo de terminal que se está usando. Cuando no sea Linux, probablemente utilice vt100. Cuando sea Linux, utilizará console, como en sopa, o linux, como en mi casa. Quizás dependa de la versión o de la configuración de cada instalación o distribución de Linux. Puedes probarlo fácilmente, poniendo
    	echo $TERM
    
    Así, dependiendo de la respuesta que obtengas, pondrás en el fichero .profile (o el que sea) algo como esto.
    	if [ "$TERM" = "console" ]; then
    		PS1="linux:\w$ "
    
    	fi
    
    O algo parecido. Lo de poner tu nombre o la máquina en la que se está ejecutando, seguido de dos puntos, suele quedar bien como prompt.
    Como habrás podido comprobar si lo has leido hace poco, ya no sirve en truco, porque ahora siempre pregunta el tipo de terminal, que por defecto es vt100... Pero cuando me encontré con ese problema se me ocurrió otra solución, que consistió en preguntar por la variable $SYSTEM. Ésta contiene el nombre de la máquina, que es o bien "so.dis.ulpgc.es" o bien "so##.dis.ulpgc.es" para los PCs. Si te aprovechas de eso, puedes escribir en el .profile algo como:
    	if [ "$SYSTEM" != "so.dis.ulpgc.es" ]; then
    		PS1="linux:\w$ "
    
    	fi
    
    Aunque creo recordar que tuve problemas con esto también. ¿Alguna sugerencia?

  • Moviéndose entre directorios.
    Hay dos órdenes bastante útiles en los intérpretes de UNIX, aunque no estoy seguro de cuales lo traen incorporado. Puede que el sh normal no, pero algunos más modernos sí (creo que el Korn Shell), y desde luego el bash lo trae.
    Las órdenes de las que hablo son pushd y popd. Funcionan como si fueran una pila: pushd necesita un parámetro, y se mueve al directorio que se de como parámetro, dejando en la pila de directorios el directorio actual. popd no necesita parámetros, y se mueve al directorio que esté en la cima de la pila de directorios.
    Esto es útil cuando estamos moviéndonos entre dos directorios que están alejados entre sí, y nos ahorrará bastantes teclas.
    También es interesante la orden cd -, que nos mueve al directorio anterior en que estuviéramos. Así, si estamos en ~/prog/c, y nos pasamos por un momento a /usr/doc/HOWTO/translations/es/other-formats/html (haciendo un uso inteligente del truco del doble ESC, claro :), podemos volver a ~/prog/c con sólo escribir cd -.
    Otra cosa interesante, relacionada con esto, es que ~- representa el directorio anterior. Así, podemos estar en un directorio donde hay un fichero que queremos copiar. Luego, movernos al directorio destino, y copiar el fichero con sólo escribir:
    	cp ~-/fichero_a_copiar .
    

  • Uso del vi.
    El vi es un editor.... bueno, un poco polémico, digamos, entre los estudiantes que lo ven por primera vez. Pero, una vez que te acostumbras a él, es mucho mejor que los editores tipo MS-DOS, sobre todo para editar código fuente. Pero con cuatro órdenes no vas a ir a ningún sitio, así que intenta buscar por ahí alguna lista de órdenes del vi, ya verás que vale la pena, sobre todo si tienes Linux en tu casa y te gusta programar.
    Si no sabes donde buscar, o simplemente no tienes ganas, dímelo y te mandaré por correo alguna de las listas que tengo por ahí. También, por si te interesa, tengo un guión para el intérprete que cogí de INet, que es un tutorial completo del vi.

  • Compresión.
    Hay dos órdenes para comprimir bajo UNIX (sirven en las versiones normales de Linux y en el HP-UX de sopa) que es un poco difícil dominar: Son el tar y el gzip.
    El primero es estándar de UNIX, y simplemente empaqueta en un archivo (sin comprimir). El segundo comprime un solo fichero. Por ello, muchas veces se utilizan los dos juntos. Para comprimir un conjunto de archivos, empaquetados con tar, hay que escribir:
    	tar cvf fichero.tar conjunto de archivos a empaquetar
    	gzip -v9 fichero.tar
    
    
    Nótese que las v's en ambas líneas son para activar el modo verboso. Si no te gusta o no quieres que te saque mensajes por la pantalla diciéndote qué va haciendo, no pongas las v's. Nótese que la orden gzip no necesita un segundo parámetro, ya que como sólo comprime un fichero, simplemente le añade al final la extensión '.gz'.

    El '9' en el gzip es para máxima compresión. Si tienes prisa y no te importa que comprima menos, puedes quitárselo. Ambas instrucciones permiten el manejo de los flujos estándar de datos, y eso puede resultar útil algunas veces. Eso es mejor que lo mires en las páginas del man, o con info, pero te diré que en el gzip es con la opción -c, y en el tar es indicando como fichero de entrada o salida '-'.
    Para los que tengan versiones nuevas del tar, por ejemplo por utilizar Linux, pueden generar un archivo .tar.gz directamente poniendo como opciones cvfz, y descomprimirlo usando xvfz.

  • El caracter ~.
    El caracter ~ es importante en el mundo UNIX por cuatro cosas:
    1. Denota directorio actual, por lo que si queremos acceder desde cualquier otro sitio al directorio bin a partir de nuestro directorio raíz, sólo tenemos que escribir ~/bin.
    2. Porque con él podemos referirnos al directorio raíz de cualquier usuario escribiendo ~nombreusuario. Aunque claro, esto no es muy útil para los usuarios normales, excepto cuando tienen que acceder, por ejemplo, al directorio de su compañero de prácticas.
    3. Porque se utiliza en las páginas web (en las direcciones), para referirnos a un usuario en particular.
    4. Porque en vi, por ejemplo, se utiliza para cambiar entre mayúsculas y minúsculas (muy útil en la programación en C)
    Pues bien, por si alguien no lo sabía, este caracter se consigue pulsando la tecla Alt y escribiendo 126, y luego soltando la tecla Alt (es decir, que el código ASCII del caracter ~ es 126).
    Lo que quizás no sabías es que en UNIX (en MS-DOS lo he intentado y no me ha funcionado) se puede conseguir más rápidamente con la combinación Alt Gr+4 (jejeje, qué pillo, y vuelve a por más atajos de teclado --que diría Homer).
    Pero no se vayan todavía, aún hay más: Porque en el caso de las páginas web, cuando no se puede escribir el caracter ~, éste se puede reemplazar por %7E (quizás lo hayas visto en alguna dirección).

  • Pidiendo ayuda.
    Más te vale que sepas que la ayuda se pide con la orden man, porque si no, Gabino se va a enfadar contigo :).
    Bueno, eso no es ningún secreto (lo del man, no lo de Gabino), pero hay algunas cosas sobre la ayuda que a lo mejor no sabes:
    • La orden man acepta un número antes del tema de ayuda a buscar, para especificar en qué parte del manual debe buscar. Esto es útil a veces, porque no es lo mismo, por ejemplo, la orden date del sistema que la función date de C. En algún sitio debe haber una lista de qué significa cada número en el manual de UNIX. Al escribir esto no estoy en Linux (y no tengo ganas de reiniciar), así que, mientras no me acuerde de mirarlo (tengo muy mala memoria, yo que tú no me fiaría), puedes intentar localizar tú la lista poniendo:
      	man man
      
      
    • Si ejecutamos el man con la opción -k, podremos darle una palabra, para que busque en las páginas del manual un tema que nos pueda interesar. En algunas distribuciones de linux, como la RedHat que vino en la Programación Actual (4.2) nunca saca resultados por pantalla cuando haces eso. Es porque tienes que crear (y actualizar de vez en cuando) una base de datos (de la orden whatis, me parece). La orden para crear/actualizar la base de datos varía, pero en la distribución RedHat se hace poniendo /usr/sbin/makewhatis -w. Es importante la ruta, porque el directorio /usr/sbin no está en el $PATH del root. Así, en realidad no es absolutamente necesario que nos sepamos el nombre de la orden sobre la que buscamos ayuda, aunque sirve de mucha ayuda (valga la rebuznancia). También podemos, en vez de escribir man -k, poner apropos.
    • En Linux (y puede que en otras versiones modernas de UNIX), está disponible una ayuda alternativa, con la orden info. Esta ayuda, en realidad, suele estar más actualizada que las propias páginas del man, así que es una buena idea utilizarlo. Creo que esto del info es un invento de GNU, aunque no estoy seguro.
      Por cierto, que te advierto desde ya que no es tan fácil de manejar como el man, así que mírate el tutorial que viene en la página principal, cuando lo llamas sin parámetros, que tampoco tardas tanto y sirve de mucha ayuda.

  • Expresiones regulares.
    Las expresiones regulares son expresiones que permiten, mediante caracteres especiales, expresar filtros, en los que encajan otras expresiones. Si aprobaste Álgebra, los autómatas sirven para procesar expresiones regulares. ¿Recuerdas aquello de que a+ significaba Uno o más caracteres 'a'? Pues eso es una expresión regular (lo de 'a+'), y se utiliza con bastante frecuencia en UNIX, para varias herramientas. Por ello, conviene saberse lo que significan los símbolos de expresiones regulares, para así poder sacar mayor provecho de las herramientas de proceso y filtrado de textos, de las capacidades de sustitución del vi, etc.
    La lista de caracteres que yo me sé es la siguiente:
    	Cero o más ocurrencias de a		- a*
    	Una o más ocurrencias de a		- a+
    	Una o ninguna ocurrencia de a		- a?
    	a ó z					- [az]
    	Cualquier caracter entre a y z		- [a-z]
    	Cualquier cosa menos a ó z		- [^az]
    	Cualquier caracter excepto new-line	- .
    	Ristra al principio de la línea		- ^Ristra
    
    	Ristra al final de la línea		- Ristra$
    	Principio de una palabra		- \<
    	Final de una palabra			- \>
    	Salvar lo que cace expreg		- \( expreg \)
    	Restaurar el texto cazado [*]		- \número
    
    
    [*] Sólo se puede utilizar en la segunda parte de las sustituciones, y el número es el número del paréntesis que se quiere recuperar (es decir, \1 recupera el texto cazado por la primera pareja de paréntesis en aparecer, etc.)
    Recuerda que si quieres utilizar alguno de estos caracteres especiales literalmente, debes escaparlo con el \ (barra invertida), y que si quieres reunir más de un caracter, por ejemplo para repetir una o más veces la ristra ab, en vez de sólo la b, puedes utilizar los paréntesis (o sea, que la expresión de una o más ab's seguidas sería (ab)+).

  • Multitarea en las terminales. El tsm.
    No me preguntes por qué se llama tsm el programa de multitarea, pero el caso es que se llama así. En Linux no es necesario, porque como supongo que sabes puedes cambiar las sesiones activas con Alt+F1, Alt+F2, Alt+F3... Son sesiones independientes, que tienes que abrir y sobre todo cerrar por separado.
    Lo único que tienes que hacer para entrar en "modo multitarea" es escribir tsm. Una vez hecho esto, saldrá un mensajito de información, diciéndote las teclas que necesitas y todo eso (¿Dios mío, verbosidad en UNIX? ¿Sin pedirla? Imposible). Las únicas que necesitas (y tampoco creo que esa ayuda te dé más información) son Control-W para cambiar de ventana (te dice en qué sesión estás, y si pulsas un número cambias de sesión), y Ctrl-T para ir al menú. Desde allí puedes configurar el tsm, y salir. De todas formas, si intentas hacer un exit, creo que a veces te saca el menú, desde donde puedes salir o configurar el programa.
    Por defecto sólo abre tres sesiones, aunque normalmente con eso tienes de sobra.

  • La orden alias.
    A veces utilizamos ciertas órdenes con los mismos parámetros. Por ejemplo, la mayoría de la gente no utiliza (al menos cuando se ha enterado de que existe) el ls sin parámetros, sino que por lo general usa ls -l, que lista los detalles de los ficheros.
    Quizás te lo haya dicho alguien, pero si escribes ll (suponiendo que lo haces desde sopa) consigues el mismo resultado. ¿una nueva orden? No. Un alias. Un alias no es más que una sustitución de las órdenes que escribimos en la línea de órdenes. Así, el intérprete sustituye ll por ls -l cuando lo ve al principio de la orden. La sintaxis del alias es:
    	alias ristra1='ristra2'
    
    Donde ristra1 es la ristra a utilizar, y ristra2 es la ristra que se va a sustituir. Así, en /etc/profile, o algún sitio parecido, debe haber una línea que ponga esto:
    	alias ll='ls -l'
    
    Algunos alias útiles son poner que por defecto, el rm, cp y mv pregunten antes de borrar/sobreescribir ficheros (El linux RedHat lo hace con el root por defecto), con las siguientes líneas:
    	alias cp='cp -i'
    	alias mv='mv -i'
    	alias rm='rm -i'
    
    En cualquier momento, si queremos cambiar este comportamiento, podemos utilizar la opción -f, que ignora la posible opción -i. Por ejemplo, si deseamos borrar un directorio recursivamente, y estamos seguros, podemos utilizar rm -rf directorio, ya que de otra manera, si tuviéramos el alias puesto, nos preguntaría fichero por fichero, lo que sería doloroso de contestar si hubiera muchos.
    Otro ejemplo de alias útil es el alias ls='ls --color'. Esto, en Linux, permite que el ls salga siempre en color. También es muy útil (yo lo utilizo mucho de esa forma) para escribir rápidamente una secuencia de instrucciones que tienes que repetir. Por ejemplo, si tienes que escribir varias veces seguidas:
    	make foo
    	cd ../bin
    	foo >salida 2>errores
    
    
    Puedes simplificarlo poniendo:
    	alias foobar='make foo; cd ../bin; foo >salida 2>errores'
    
    En la línea de órdenes. Este alias se recordará hasta que salgas de la cuenta. Si alguna vez te molesta alguno que tienes definido, sólo tienes que escribir unalias ristra-aliaseada para deshacerte de él.

  • Control de procesos en línea de órdenes.
    Una de las grandes ventajas que tienen los intérpretes más o menos modernos de UNIX es poder controlar los procesos fácilmente. Así, podemos mandarlos a segundo plano, traerlos de nuevo, dejarlos ejecutándose en segundo plano, etc.
    Aunque hay más combinaciones de teclado y órdenes de las que yo voy a dar ahora (lo sé porque las he visto, pero no las recuerdo porque nunca las utilizo), pero esta es una buena lista para empezar:
    	Mandar un proceso a segundo plano (lo para)		- ^Z
    	Ejecutar la orden orden en segundo plano		- orden &
    	Seguir ejecutando en segundo plano un proceso parado	- bg
    
    	Traer un proceso al primer plano			- fg
    	Mandar señal a un proceso (matar, por defecto)		- kill PID
    	Lista actual de tareas					- job
    	Lista actual de procesos				- ps
    
    
    Si tienes dudas, en las páginas del intérprete seguro que encuentras ayuda, y en las páginas del kill y el ps puedes encontrar información de referencia. Si tienes dudas, ¡pregunta!

  • Enlaces duros y simbólicos.
    No, duros y simbólicos no son dos adjetivos que describen a los enlaces :-), son las formas de llamar a los dos tipos de enlaces que existen en UNIX. Un enlace es un tipo de archivo especial que "apunta" a otro. Esto tiene muchas ventajas, y existen debido a la estructura interna de los sistemas de ficheros típicos de UNIX. Los simbólicos son parecidos a los accesos directos de Win '95, pero son mejores y más útiles que estos.
    Los enlaces simbólicos son un fichero especial que apunta a una ruta determinada, es decir, apunta a una ristra, que es la ruta de un archivo o directorio. Esto tiene una cosa buena y una mala: La buena es que, al apuntar a una ruta, puede apuntar a ficheros/directorios de otras particiones (el caso que planteo abajo, donde se apunta a una partición que no sólo es distinta, sino que además tiene incluso un sistema de ficheros diferente). Lo malo es que, si cambiamos al fichero al que se apunta de directorio, o si simplemente le cambiamos el nombre, el enlace ya no servirá. Estos son equivalentes, o casi, a los de Win 95
    El aspecto malo, por otra parte, tiene una ventajilla, y es que podemos tener un enlace simbólico a un programa, o algo parecido, que se llame de una manera (por ejemplo igual que el programa), que apunte siempre a la versión actual del programa. Así, por ejemplo, el código fuente del kernel de Linux siempre está en /usr/src/linux, aunque, si entras en el directorio /usr/src y haces un ls -l, verás que aparece algo parecido a:
    total 2
    drwxr-xr-x  15 root     root         1024 Mar 22 17:17 kernel-source-2.0.30
    lrwxrwxrwx   1 root     src            20 Mar 22 17:33 linux -> kernel-source-2.0.30
    drwxr-xr-x   2 root     root         1024 Mar 21  1997 redhat
    
    También es muy útil para mover un directorio o ejecutable de sitio, pero que se siga pudiendo llamar de la manera antigua, o para poder llamar a un programa de maneras diferentes (por ejemplo, en las distribuciones de Linux, el vi es un enlace simbólico al vim o al elvis).
    Por supuesto, cuando ese enlace apunta a un directorio, se trata al enlace como si realmente fuera un directorio, así que al volver al directorio anterior, con cd .., volveremos a donde estábamos antes. Esta es la diferencia más importante que existe entre los enlaces de UNIX y los accesos "directos" de Micro$oft. Cuando en Windows NT/'95, por ejemplo, tienes un acceso directo en /winnt/profiles/zoso/prog (sí, pongo barras de directorios de UNIX porque me da la gana) que apunta a /utilidad/prog/, al pulsar la tecla BackSpace en la ventana de /utilidad/prog, volveremos a /utilidad, no a /winnt/profiles/zoso, que es a donde tendríamos que volver. Esto se puede emular en UNIX, inicializando una variable (que depende del intérprete que estés utilizando) al valor adecuado (consulta el manual).
    Los enlaces duros son enlaces que apuntan directamente a los bloques de datos de un fichero. Así, cuando se hace un enlace de este tipo, no se puede distinguir uno de otro. La ventaja que tiene esto es que podemos renombrar el destino, y borrarlo si queremos, que los datos seguirán estando ahí. A lo mejor te estás preguntando, si esto que te acabo de contar es verdad, cómo sabe UNIX cuando tiene que borrar los bloques de datos. La respuesta es que cada bloque de datos tiene asociado un número donde se indica el número de ficheros que apunta a él. Cuando se borra un fichero, se borra la entrada en el directorio, se decrementa este número de ficheros que apuntan a su bloque de datos, y, si este número queda a cero después de decrementar, entonces se borran los bloques de datos.
    Es imposible distinguir entre enlaces duros y ficheros "normales", porque en realidad no hay ninguna diferencia entre ellos. Un fichero acabado de crear es como el único enlace duro a un bloque de datos. La desventaja que hay, por tanto, es que, obviamente, como apunta a un bloque de datos, tienen que apuntar a un bloque de datos del mismo disco, así que, aunque tengamos montadas otras particiones, no podremos hacer un enlace duro de una a otra.
    Ejemplo de enlace simbólico útil: yo, que tengo muy mala memoria, siempre tengo un archivo de texto donde apunto las cosas que tengo que hacer. Es importante que este fichero pueda verlo tanto desde Linux como desde DOS, así que, como tengo montada la partición FAT en Linux, lo pongo en la partición FAT. Pero yo no recordaría tener que mirar el fichero si no lo tuviera delante de las narices, así que en el directorio raíz de mi cuenta tengo un enlace simbólico "aviso.txt" que apunta a "/dos/windows/aviso.txt" ("/dos" en el directorio a partir del cual monto la partición FAT de MS-DOS).
    Por cierto, que los enlaces duros se crean con:
    	ln fichero-a-donde-apunta nombre-del-enlace
    
    
    y los simbólicos con:
    	ln -s fichero-a-donde-apunta nombre-del-enlace
    

  • Los dichosos ^M!.
    Con demasiada frecuencia ocurre que importamos un texto de MS-DOS a UNIX, y al editarlo con el vi (por ejemplo), sale lleno de "^M" al final de todas las líneas. Lo primero, decir que no hay problema en el vim, porque si pones la opción "autotext" (:set autotext), el vim automáticamente detecta el tipo de fichero que es (DOS o UNIX), y si es DOS, quita los ^M de la pantalla. Esto de los ^M ocurre porque el delimitador de línea de los ficheros de texto en DOS es CR-LF (carriage return-linefeed, o sea, retorno de carro y salto de línea), y en UNIX son simplemente LF. Así, muchas herramientas de UNIX (al menos por defecto), buscan como delimitador de línea el LF, así que al final de cada línea hay un caracter extraño (el CR).
    Esto, en vi, se puede arreglar fácilmente con la orden
    	:%s/<Ctrl-V><Ctrl-M>//
    
    Te comento por encima qué significa este chorizo: El "%" sirve para que se sustituya en todas las líneas, y no sólo en la actual, la "s" para que se realice una sustitución, el Ctrl-V Ctrl-M es necesario para que el vi no se crea que estamos pulsando un ENTER (Ctrl-V sirve para insertar literales), y, por supuesto, se sustituye por nada, así que entre la segunda y la tercera barras no ponemos nada.
    Por si no te gusta el vi, puedes cambiar el formato de los ficheros de texto desde la línea de órdenes, escribiendo:
    	sed 's/<Ctrl-V><Ctrl-M>//' fichero-CRLF >fichero-LF
    
    Si no conocías el sed (lo más probable, porque si lo conocieras ya se te habría ocurrido a ti el truco), es una herramienta bastante versátil de proceso de texto (no tanto como el perl, claro :), y no muy complicada de utilizar.

  • Acceso a discos de MS-DOS
    Es bastante común la necesidad de acceder a discos con formato de MS-DOS desde Linux. Esto, en parte, es porque en demasiados sitios se utilizan sistemas de Micro$oft, y en parte porque, que yo sepa, ext2 (el sistema de ficheros por defecto de los Linux modernos) no sirve bien para discos. Pero el caso es que es necesario tener acceso a discos con sistemas de ficheros FAT o VFAT. En un principio, podrías pensar que la forma de accerlo es montando el disco en algún subdirectorio, pero eso es bastante doloroso si tienes que estar cambiando de discos con frecuencia (además, te mueve del directorio actual --aunque claro, siempre puedes utilizar el pushd y el popd).
    Por ello, en Linux existen desde hace tiempo las llamadas mtools. Estas herramientas son programas que permiten interactuar con discos con formato MS-DOS (que yo sepa, también puedes leer discos duros, pero eso es más cómodo tenerlo montado). La sintaxis de estas órdenes es la misma que para las operaciones normales de MS-DOS, sólo que hay que añadir m al principio de las órdenes (con frecuencia es necesario para no confundirlas con las órdenes propias de Linux). Así, puedes hacer un mdir, que por defecto hará un ls del disco flexible, cambiar de directorio con mcd, copiar desde Linux al disco y viceversa con mcopy, etc. Estas órdenes, aunque pueda sonar extraño, van mucho más rápido que en MS-DOS (no son imaginaciones mías: haz la prueba y verás).

  • Repitiendo órdenes
    Con frecuencia nos encontramos repitiendo órdenes o queriendo completar una orden anterior con algo (por ejemplo, llamamos a un programa sin parámetros, nos da un error, y volvemos a llamarlo, pero con alguno).
    Para ahorrarnos muchas pulsaciones de teclas, los intérpretes de órdenes guardan una lista (una "historia") de las órdenes que hemos ido escribiendo. Estas órdenes se guardan numeradas, así que podríamos referirnos a ellas con un número que las identificaría inequivocamente. Una forma de ver la lista de órdenes es introduciendo:
    	zoso:~$ history
    
    En cualquier momento. Esto mandará a la salida estándar la lista actual de órdenes, numeradas debidamente. También podemos insertar la posición de la orden dentro de la lista en el propio "apuntador" (prompt). Para repetir una orden que ya esté en la "historia", tenemos varias posibilidades:
    • Repetir la última orden. Lo podemos hacer escribiendo !!
    • Dar un número de orden, para que se ejecute. Esto lo hacemos escribiendo:
      		zoso:~$ !número
      
    • Repetir la última orden escrita que empezara por una ristra especificada. Esta ristra no puede contener espacios. Si se teclea algún espacio, el resto se supondrá que son parámetros extra a poner después de sustituir la orden. Por ejemplo:
      		zoso:~$ cat
      		Hola, mundo
      		Hola, mundo
      		^D
      		zoso:~$ !c foo
      		cat foo
      		cat: foo: No such file or directory
      
      En el ejemplo anterior podemos ver que al repetirse una orden, se manda a la terminal la orden completa a ejecutar (no se manda a la salida estándar, así que no interfiere en los resultados si redireccionamos o cosas por el estilo. Se imprime solamente para información del humano que maneja la terminal).
  • Deja que el bash te corrija
    El intérprete bash tiene una opción muy interesante llamada cdspell, que te corrige cuando te equivocas al escribir el nombre de un directorio, al intentar cambiar a éll con la orden cd.
    Para habilitarla, sólo tienes que escribir:
    	shopt -s cdspell
    
    Donde shopt viene de shell option. Si buscas shopt en el manual en línea, saldrá la página de las funciones internas (built-ins), donde puedes encontrar otras cosas interesantes (otras funciones internas y otras opciones a poner o quitar con la orden shopt).
  •  

     

     

    Todo sobre Windows

    Procesos del Administrador de Tareas del XP El proceso SVCHOST.EXE
    La consola de Recuperación del XP Para que sirve el archivo Pagefile.sys
    Reparar el Registro del XP Explicación de un archivo DLL
    Diferencias entre Windows XP Home y Professional Faq Errores Windows
    Conectividad limitada o nula Tabla Errores Windows
    Límite de 10 conexiones en Windows XP + SP2 Recuperar Sistema XP
    Menús Ocultos del Windows XP Reparar "Restaurar Sistema" XP
    Servicios del Windows XP Desactivar "Restaurar Sistema" XP
    Cómo leer pantallazos azules Características Windows XP-Vista Starter
    Archivo-Fichero HOSTS (restaurar-editar) Atajos de Teclado Windows
    Compartir Conexión a Internet en Windows Comandos de la consola en Windows XP
    Comandos protocolo TCP/IP en Windows  

     

    Trucos Webmaster Trucos Internet
    Trucos Mozilla Firefox Trucos para el Messenger
    Trucos para MSN Spaces Trucos Visual Basic
    Huevos de Pascua Tutoriales Multimedia; SVCD, KVCD, CVCD
    Trucos Windows Trucos Windows XP 
    Trucos Windows Vista Trucos Windows 2003
    Trucos Windows 7 Trucos Unir y cortar AVI
    Trucos Linux Trucos Grabadoras
    Trucos Google Trucos GMail
    Trucos Google Talk Trucos para móviles Nokia
    Trucos para recuperar disco duro dañado Trucos para alargar la vida de las baterías
      Conexiones GSM, GPRS, 3G+, UMTS, HSDPA