Trucos y Comandos Shell Linux
| 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.
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.gzNo 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.
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 escritoEn 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.
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.
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 bashAllí 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 $TERMAsí, 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$ " fiO 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$ " fiAunque creo recordar que tuve problemas con esto también. ¿Alguna sugerencia?
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 .
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.
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.tarNó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
~
es importante en el mundo UNIX por cuatro
cosas:- 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
. - 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. - Porque se utiliza en las páginas web (en las direcciones), para referirnos a un usuario en particular.
- Porque en vi, por ejemplo, se utiliza para cambiar entre mayúsculas y minúsculas (muy útil en la programación en C)
~
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).
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 ordendate
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 ordenwhatis
, 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 escribirman -k
, ponerapropos
. - 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 delman
, así que es una buena idea utilizarlo. Creo que esto delinfo
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 elman
, 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.
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)+
).
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.
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>erroresPuedes 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.
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 - ordenSi tienes dudas, en las páginas del intérprete seguro que encuentras ayuda, y en las páginas del&
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
kill
y el ps
puedes encontrar información de referencia. Si tienes dudas, ¡pregunta!
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 redhatTambié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-enlacey los simbólicos con:
ln -s fichero-a-donde-apunta nombre-del-enlace
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-LFSi 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.
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).
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:~$ historyEn 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).
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 cdspellDonde
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
).
- Trucos Visual Basic
- Trucos Visual Basic II
- Manual Visual Basic .NET
- Manual C#
- Atajos de Teclado en Gmail
- Atajos de Teclado en Photoshop
- Atajos de Teclado en Windows
- Atajos de Teclado en Windows 7
- Atajos de Teclado en Windows 8
- Atajos de Teclado en Excel
- Atajos de Teclado en Word
- Atajos de Teclado en Access
- Atajos de Teclado en Power Point
Todo sobre Windows