Vous êtes sur la page 1sur 33

Contenido

[ocultar]

1 Utilizando el Shell o 1.1 La herramienta definitiva y la ms poderosa o 1.2 Terminales, Xterms y Shells o 1.3 Terminales 1.3.1 Xterms 1.3.2 Shells o 1.4 Primeros pasos en el Shell o 1.5 Usando el Editor de linea de comando (shell) II: Los primeros comandos para experimentar con la shell 1.5.1 Saber "donde est" 1.5.2 Crear un archivo vaco 1.5.3 Agregar una linea al final de un archivo sin eliminar su contenido 1.5.4 Leer el contenido de un archivo 1.5.5 Reemplazar el contenido de un archivo existente con otro contenido o crear un archivo con un contenido especifico 1.5.6 Leyendo el contenido de un archivo con paginacin 1.5.7 Cambiar el nombre de un archivo o un directorio 1.5.8 Creando una nueva copia de un archivo 1.5.9 Viendo lo que est dentro de un directorio 1.5.10 Desplazarse 1.5.11 Limpiar 1.5.12 Crear o eliminar directorios 1.5.13 Colocar archivos en alguna parte 1.5.14 Buscar algn texto en un archivo 1.5.15 Para saber lo que est sucediendo en este momento 1.5.16 En cuanto a lo que has hecho 1.5.17 Para convertirse en administrador temporalmente o 1.6 Usando el Shell III 1.6.1 Auto-Completacin 1.6.2 Histrico de comandos 1.6.3 Edicin de comandos 1.6.4 Atajos disponibles de la Shell o 1.7 Usando la Shell IV 1.7.1 Cola de comandos 1.7.2 Command Jobbing 1.7.3 Command Substitution o 1.8 Using the Shell V 1.8.1 Filename Globbing or Expansion 1.8.2 Quoting Special Shell Characters 1.8.3 Redireccin de salida 1.8.4 Redireccionando entre dos o ms comandos 1.8.5 Redireccin desde o hacia archivos o 1.9 Using The Shell VI 1.9.1 Archivos de configuracin bash

1.9.2 The Prompt 1.9.3 Modificar $PATH 1.10 Usar la Shell VII 1.10.1 Command Aliases And Shell Functions 1.10.1.1 Command Aliases 1.10.2 Shell Functions 1.10.3 A dnde ir desde aqu 1.10.4 Preguntas frecuentes de Shell (FAQ) 1.10.4.1 Cmo apago ese &\*# pitido? 1.10.4.2 Por qu obtengo "bash: command: command not found"? 1.10.4.3 Por qu me aparece "bash: command: Permission denied"? 1.10.4.4 El bit de ejecucin est habilidato, tengo permisos de ejecucin pero el permiso es denegado, por qu? 1.10.4.5 Cmo cambio los colores de listado de archivos? 1.10.4.6 He puesto un script 'foo' en mi directorio ~/bin, pero cada vez que intento ejecutarlo, un comando distinto, tambin llamado 'foo', es iniciado. Por qu? 1.10.4.7 Qu significa "bash: command: bad interpreter"? 1.10.4.8 Mi terminal se congela cada vez que presiono "<CTRL s>" 1.10.5 Related Resources

1.10.6 Other resources

Utilizando el Shell
La herramienta definitiva y la ms poderosa
Alguna vez habr escuchado la letana 'la linea de comandos, esta fuera de moda', 'es arcaica' y cosas similares. Ademas que las personas y los sistemas operativos deberan de evitarla. La realidad es que usted: puede utilizar Linux sin tener que saber nada sobre el shell. Puede hacer que su sistema inicie directamente en el modo grfico(X) y apagarlo desde ah. Puede utilizar el Centro de Control Mandriva y Webmin para configurar cada uno de los aspectos de su sistema. Sin embargo, es nuestra conviccin, que utilizar Linux sin usar el shell es como manejar su carro solo en la primera velocidad. Por supuesto, es ms fcil y eventualmente llegar a donde usted quiere, pero es lento y le quita la diversin de conducir. Y desde luego: la linea de comandos es divertida. Es como la ms grande coleccin de bloques para construccin jamas vista. Y estos bloques pueden realizar las cosas ms asombrosas e incluso pueden cooperar entre ellos, pudiendo hacer las tareas ms complejas en unas cuantas lineas. Esto se debe a que el shell de Unix no es solo un interprete de comandos como el indicador de DOS en Windows, es un entorno de programacin bastante completo.

Eso no significa que el aprendizaje del shell sea fcil. Bien, pero hay que aprender que espera?. ;-) Cranos que es muy gratificante y usted sera reconocido como un mago de la computacin por los extraos, en un periodo relativamente corto. *grin* Para tener una idea de que es un shell, un poco de informacin previa podra serle til.

Terminales, Xterms y Shells


En los das cuando naci Unix, el ahora dominante de la raza ordenadores personales era totalmente desconocido. Las maquinas que en aquel entonces eran llamadas computadores eran robustas, con el tamao de una habitacin, utilizaban cintas y memorias magnticas --de ah el termino 'bsico' para la memoria del sistema--. Con la PDP-11 creada por DEC (ahora Compaq) e introducida en 1970, esta 'pequea' (en aquel entonces llamada 'mini') y el computador econmico apareci en el mercado, convirtindose instantneamente en un gran xito, en las universidades, ya que la mayora de ellas fue capaz de comprar por primera vez un computador --La PDP-11 era una verdadera ganga por solo $10,000)--. Los sistemas operativos de estas mquinas fueron escritos en Assembler, cdigo de maquina, muy eficiente, pero para nada portable. Cada proveedor vendi su propio sistema operativo, junto con sus mquinas. Pronto se hizo palpable la incomodidad de esta situacin y se hicieron intentos de crear un sistema operativo que pudiera funcionar en ms de una sola marca de computador. En 1969, un empleado de AT&T Bell Labs llamado Ken Thompson, escribi el primer cdigo de lo que se conoce como Unix --un juego de palabras en MULTICS, un proyecto anterior en el que Thompson habias estado trabajando--. Sin embargo, las cosas realmente comenzaron cuando Dennis Ritchie, lleg con un nuevo lenguaje de programacin llamado "C", para este nuevo sistema operativo. A pesar de que Unix era menos eficaz que el sistema operativo que suministraban los proveedores de computadores, tena tres ventajas decisivas: Que podra ser portado a cualquier maquina que se tuviera alrededor, que incluy el lenguaje "C" --el cual hizo de la programacin algo ms fcil en muchos aspectos-- y ademas gratis. Pronto, las universidades de todo Estados Unidos comenzaron a equipar sus mquinas con Unix.

Terminales
As Unix era y es un sistema operativo que funciona en una amplia variedad de maquinas. Que hay sobre las personas que usaban esas maquinas? Esas personas se conectaban a las maquinas por medio de terminales 'tontas', esto es maquinas que consisten de un teclado, un monitor y lo suficiente para mantener una conexin a la computadora central. Lo que hacan los usuarios en esta terminales bsicamente era Teclear Remotamente (TeleTYping), de ah surge 'tty' para los archivos de dispositivo de las terminales o el nombre del comando 'getty'.

Podr preguntarse que tiene que ver esto con el tema?. Bien, los proveedores de esas terminales no se ponan de acuerdo sobre un estandard . Esto es, cada marca de terminal tenia su propia distribucin de teclado, su propio mtodo de mostrar los caracteres en la pantalla, su propia idea de lo que caracteres o cdigos de control representaban las seales que enviaban y reciban, y cosas as. Para poder hacer frente a todo ese caos, se creo un archivo central que contena todas las diferentes y distintas capacidades de las terminales -- termcap. Abra /etc/termcap en un editor de texto y asmbrese (o asustese ;-)). En su mayora las terminales Linux utilizan 'vt100' o 'linux' como tipo de terminal. En un sistema Mandriva linux puede acceder ventanas que emulan esas terminales por medio de las combinaciones CTRL+ALT+F1 a CTRL+ALT+F6. ALT-F7 lo regresara a la actual sesin grfica (vea ms adelante). Existen 'archivos especiales' en /dev : /dev/tty1 al /dev/tty6 .

Xterms En los comienzos de 1980, se desarroll el sistema de ventanas X, un subsistema grfico para Unix. En lo aos 90, se desarroll el entonces incipiente XFree86, un fork de este sistema con el fin de escribir una versin ms estable para el procesador Intel, basado en los clones de Unix, tales como, FreeBSD, NetBSD o Linux. Ms tarde, se desarroll el fork de XFree86, llamado X.org. X.org es por ahora el sistema grfico por defecto de Mandriva. El primer y mas importante uso de X, es la posibilidad de ejecutar mltiples terminales 'virtuales'. De hecho, el sistema X viene con el aplicativo, xterm. Por lo tanto, usted encontrar que la palabra 'xterm' y la frase 'terminal virual', se utilizan a menudo como sinnimos. Al leer la frase 'abrir un xterm', esto no quiere decir que usted debe instalar y usar el programa llamado xterm, si no que tambin puede ser cualquier otro programa emulador de terminales, como por ejemplo rxvt, konsole, aterm, eterm, wterm, etc. Un emulador d terminales --este es otro nombre para 'terminal virtual'-- se conecta al sistema a travs de un archivo de dispositivo de un pseudo tty y utiliza su propio estndar de pantalla. Esto podra llevar a un comportamiento ligeramente distinto de algunas teclas o de aplicaciones en los distintos emuladores de terminal, esto depende de lo bien que los emuladores hagan lo propio en cuanto al estndar de la pantalla xterm. En Mandriva, se puede tener acceso a estos emuladores a travs de KDE men principal -> Sistema -> Terminales. Son archivos especiales ubicados en /dev/pts ('pts' = 'Pseudo-TerminaleS'): /dev/pts/1, /dev/pts2 etc. Shells

Con el fin de ejecutar programas en una terminal, un Shell es necesario. Ya que un Shell es la parte de un sistema operativo que se comunica con el usuario y permite su comunicacin por medio de los comandos. La primera Shell 'real' de Unix, sh, fue escrita alrededor de 1975 por Steve Bourne y es tambin llamado el "Bourne Shell". Pronto, surgieron otros desarrollos, algunos basados en el original "Bourne Shell" como (pd)ksh o zsh, que a menudo se utilizaban como estndar de la Shell de los Unix propietarios o las Shells que se implementaron con caractersticas del lenguaje de programacin 'C', como csh o tcsh. En Linux, el Shell estndar es 'bash', el GNU Bourne-Again Shell (bueno, es parte del humor UNIX ...). Es muy poderoso (demasiado diran algunos).

Primeros pasos en el Shell

Tngalo en cuenta! En primer lugar, usted no debe utilizar la consola como 'root' para las tareas diarias, sobre todo si se est empezando a usarla. No se puede daar el sistema accidentalmente (o intencionadamente) cuando se utiliza un shell con permisos de usuario normal, sin embargo, con permisos de root, un error simple puede tener consecuencias imprevistas y graves. Lo primero que aparece despus de acceder o abrir una ventana xterm es el smbolo del sistema. El estandar del prompt --Smbolo del sistema-- de Mandriva Linux consiste en el nombre del usuario, el nombre de la maquina en la que usted se ha autenticado --Si no se ha proporcionado ninguno, se utilizar "localhost"--, el directorio donde usted se encuentra --el "directorio de trabajo actual"-- y el smbolo del sistema:
[tom@belbo tom]$

En el ejemplo anterior, estoy registrado como el usuario "Tom", en una mquina que he llamado "Belbo" y estoy en mi directorio home, "/home/tom". El smbolo del sistema del 'root', se vera como este:
[root@belbo root]#

Notese que, aparte del nombre, el signo del sistema tambin ha cambiado de un '$' a un '#'. Es una tradicin en las Shells Bourne, que al final del smbolo del sistema de un usuario normal tenga un '$' y al final del smbolo del sistema de un usuario root's, tenga un '#'. Cada aspecto del sistema es personalizable. Ms adelante usted leer acerca de esto. Para ejecutar un comando, escriba el nombre del comando en el prompt y luego pulse la tecla <<ENTER>>. El shell busca dicho comando en su ruta de bsqueda o $PATH (hablaremos ms sobre esto, ms adelante), ejecuta el comando, imprime la salida del

comando en la terminal --si es que as debe proceder-- y presenta de nuevo el smbolo del sistema --prompt-- cuando el comando termina de hacer su trabajo:
[tom@belbo tom]$ whoami tom [tom@belbo tom]$

Por cierto, no importa donde est el cursor cuando se pulse la tecla <<ENTER>>, el shell siempre leer la lnea completa. Los comandos basicos son ls (lista los archivos y directorios de la actual ubicacin), cp (copia), {prog|mv}} (mueve / renombra), cd (cambia de directorio), cada uno viene con una gran cantidad de opciones que usted puede consultar en su respectiva pgina de manual, haciendo (man ls, man mv, etc). Cuando usted pulse <<TAB>>, a continuacin ver una lista de todos los comandos disponibles, cuando digite algunos caracteres, presione la tecla <<TAB>> seguidamente... entonces ver una lista de todos los comandos que comienzan con esos caracteres digitados. Antes de introducirse en la tierra de la shell, se le dar una breve introduccin a la terminologa. Los comandos capturan opciones y/o argumentos:

[usuario@computadora ~]$ mv -i file dir


La '-i' es una opcin del comando mv, y se considera a 'file' y 'dir' como argumentos. Las opciones disponibles, se explican detalladamente en la pagina del comando man (man mv, para dicho ejemplo), se considera que los argumentos son suministrados por usted. Las opciones modifican el comportamiento de los comandos, se considera que los argumentos determinan con cuales datos el comando debe llevar a cabo su tarea. Hasta ahora, esto se parece mucho a la shell de DOS, la cual casi todo el mundo odia y desprecia (y con toda la razn). Lleg el momento de introducir algunos mecanismos, que hacen de tu vida con la shell una experiencia mucho ms agradable.

Usando el Editor de linea de comando (shell) II: Los primeros comandos para experimentar con la shell
Si usted es un principiante, ahora va a poder divertirse con estos primeros comandos.

Para abrir una consola:

Presione simultneamente las teclas Alt+Ctrl+Fn (Fn puede ser una tecla entre F1 a F6): usted puede volver a su entorno grfico clsico presionando Alt-F7

O haciendo click en K Menu -> Herramientas -> Konsole.

Tenga cuidado de no iniciar la sesin como 'root', sino mas bien como un usuario normal.

Saber "donde est"

El comando pwd muestra el directorio de trabajo (llamado algunas veces el directorio actual).

Para recordar mas fcilmente: pwd es el acrnimo de "print working directory".

Crear un archivo vaco

Utilice el comando touch file_name.

Si file_name es un archivo existente, solo la fecha y la hora se cambiarn. El contenido no ser modificado.

Agregar una linea al final de un archivo sin eliminar su contenido

Con la combinacin entre el comando echo y el operador de redireccin(en:BasicsBshell4) ">>" (tenga cuidado de no confundir con '>', descrito mas adelante):

[usuario@computadora ~]$ echo "blah blah blah" >> file_name


Leer el contenido de un archivo

El comando cat file_name muestra el contenido de un archivo de texto.

Reemplazar el contenido de un archivo existente con otro contenido o crear un archivo con un contenido especifico

Similar al comando anterior, pero utilizando el [operador de redireccin| BasicsBshell4] '>' esta vez:

[usuario@computadora ~]$ echo "blah blah blah" > file_name


(si el archivo no existe, ser creado, sin utilizar el comando 'touch') Leyendo el contenido de un archivo con paginacin

El comando less file_name muestra el contenido de un archivo y permite desplazarse por l.

Cambiar el nombre de un archivo o un directorio

El comando mv name1 name2 renombra el archivo o el directorio de name1 a name2.

Creando una nueva copia de un archivo

El comando cp file1 file2 crea el archivo file2 copiando el contenido del archivo file1 dentro de l.

Viendo lo que est dentro de un directorio


El comando ls -l lista el contenido del directorio de trabajo. El comando ls -la lista el contenido del directorio de trabajo e incluye los archivos ocultos. El comando ls -l dir lista el contenido del directorio llamado "dir".

Desplazarse

El comando cd directory_name cambia el directorio de trabajo por el directorio llamado directory_name.

Limpiar

El comando rm file elimina el archivo llamado "file".

Crear o eliminar directorios


El comando mkdir directory crea el directorio "directory". El comando rmdir directory elimina el directorio vacio "directory".

Colocar archivos en alguna parte

El comando mv file directory mueve el archivo 'file' hacia el directorio 'directory'.

Buscar algn texto en un archivo


El comando grep texto_a_encontrar file_name busca el texto en el archivo file_name. El comando grep -i texto_a_encontrar file_name hace lo mismo, pero no distingue entre maysculas y minsculas.

Para saber lo que est sucediendo en este momento


El comando top muestra una lista de programas que estan siendo mas usados por la CPU (estar en pantalla). Utilice "q" para salir. El comando ps ux muestra una lista de todos los programas activos, pertenecientes al usuario actual. El comando ps aux muestra una lista de todas las actividades del sistema.

En cuanto a lo que has hecho

Es posible recuperar y ver los comandos que haya escrito anteriormente, utilizando las teclas de flecha del teclado arriba y abajo. El comando history muestra una lista de los ltimos comandos usados.

Para convertirse en administrador temporalmente

El comando su - es como un interruptor para el modo de administrador, es decir, con este comando usted se convertir en "root" (tenga cuidado: no se quede como root experimentando con todos estos comandos. Rpidamente podra ocurrir un trgico error!). El comando exit lo trae de vuelta a su identidad anterior.

Usando el Shell III


Unix (y su hermano menor Linux) nacieron en la linea de comandos. Debido a esto, la lnea de comandos en Unix tiene un montn de mecanismos para que no tenga que escribir todo "manualmente". Este capitulo presenta algunos de esos mecanismos.

Auto-Completacin Cul es el modo ms rpido desde tu directorio home, suponiendo que es tu directorio actual de trabajo, al directorio /usr/src/linux/Documentation/isdn/ usando el comando cd ('cambiar directorio')? Pues es

[usuario@computadora ~]$ cd /u\<TAB\>sr\<TAB\>l\<TAB\>/D\<TAB\>is\<TAB\>

A esto se le llama 'completacin automtica de lnea de comandos' y es indispensable. Repasemos ms detenidamente el ejemplo:

[usuario@computadora ~]$ cd /u\<TAB\>


expande a "cd /usr/". Fcil. Sigue

[usuario@computadora ~]$ cd /u\<TAB\>sr\<TAB\>


expande a "cd /usr/src/". Si teclea "cd /u\<TAB\>s\<TAB\>", se le mostrar un lista de tres subdirectorios de /usr para escoger que siguen el patrn ('cd /u\*/s\*'): /usr/sbin , /usr/share y /usr/src . As, la tecla "TAB" es una herramienta til para buscar subdirectorios o ficheros de los que conoce la primera letra. Por ejemplo,

[usuario@computadora ~]$ ls /usr/bin/zip\<TAB\>


Devuelve una lista con todos los ficheros y subdirectorios de /usr/bin que empiece con las letras 'zip'. Por supuesto, hay comandos mucho ms poderosos para esta tarea, pero este truco funciona cuando se tiene prisa. Adems, es realmente til cuando los nombres son muy lartos. Por ejemplo, si quiere instalar un RPM que se llama boomshakalakwhizbang-4.6.4.5-mdk586.rpm , simplemente teclea

[usuario@computadora ~]$ rpm -i boom\<TAB\>


Y si no hay ningn otro fichero en ese directorio que siga ese patrn, el shell mostrar el nombre completo.

[usuario@computadora ~]$ cd /u\<TAB\>sr\<TAB\>l\<TAB\>


Expande a "cd /usr/src/linux" y espera una decisin. Hay dos directorios en /usr/src que siguen el patrn: /usr/src/linux-... y /usr/src/linux . Cmo decir al shell que quieres el ltimo? Simplemente aade una barra ('/'), indicando as el final de est ltimo nombre.

Puede ser que no est seguro de si es /usr/src/linux/Documentation o /usr/src/linux/documentation . Como sabr, Linux distingue entre minsculas y maysculas. Si ha ledo con atencin hasta aqu, seguro que ya sabe la respuesta:

[usuario@computadora ~]$ cd /u\<TAB\>sr\<TAB\>l\<TAB\>/d\<TAB\>


expande a /usr/src/linux/drivers/ . Parece que era 'Documentation' (con 'D' en mayscula). Este tipo de completacin funciona tambin para comandos:

[usuario@computadora ~]$ gre<TAB> grecord grefer grep

[usuario@computadora ~]$ gre


Aqu el shell me lista todos los comandos que empiecen por la cadena 'gre'. Histrico de comandos Usando la tecla flecha hacia arriba, puede volver a ver todos los comandos que ha usado en esa consola recientemente. Usando la tecla flecha hacia abago, puede regresar a otros comandos. Junto con la techa maysculas (SHIFT), puede ver las salidas recientes de los comandos en la consola. De este modo se pueden editar comando 'antiguos' y ejecutarlos de nuevo. La combinacin de teclas CTRL + r pone a la shell en el modo "bsqueda incremental/reversa". Ahora teclee la primera letra del comando que est buscando: CTRL + r y ahora pulsando 'i' puede cambiar esta lnea a (reverse-i-search)`i': isdnctrl hangup ippp0 Si pulsa la tecla ENTER, este comando se volver a ejecutar. Mediante las teclas de cursor derecha o izquierda, puede desplazarse para luego editar el comando si hiciera falta. Edicin de comandos Puede navegar y editar comandos con las teclas de cursos y las teclas de funcin ('Home', 'End' etc), si as quiere, pero hay atajos de teclado para la mayora de las tareas de edicin:

CTRL + k: borra ('kill') desde la posicin del cursor hasta el final de lnea CTRL + u: borra desde la posicin del cursor hasta el inicio de lnea ALT + d: borra desde la posicin del cursor hasta el final de la 'palabra' actual CTRL + w: borra desde la posicin del cursor hasta el inicio de la 'palabra' actual CTRL + a: mueve el cursor hasta la primera letra de la lnea CTRL + e: mueve el cursor hasta el final de la lnea ALT + b: mueve el cursor hasta la primera letra de la 'palabra' actual ALT + f: mueve el cursor hasta la ltima letra de la 'palabra' actual CTRL + y: inserta la ltima 'palabra' borrada !$\: repite el ltimo argumenteo del comando previo.

Ejemplo: Creaste un directorio mediante el comando mkdir peter/pan/documents/tinkerbell. Ahora quieres entrar en dicho directorio usando cd. En vez de teclearlo todo, puede poner

[usuario@computadora ~]$ cd !$
y el shell aadir la ruta del directorio tomndola del comando mkdir previo y ponindola en el comando cd actual. Conforme se vaya adentrando en el mundo de Linux, ver que estos atajos de teclado se usan en otras aplicaciones a la hora de introducir texto, por ejemplo en los navegadores. Atajos disponibles de la Shell Mandriva Linux viene con una serie de atajos, algunos son parte de las caractersticas nativas del bash, otros son pre-configurados (mas adelante aprender ms, acerca de cmo configurar sus propios atajos). El directorio "home" es el punto focal para la actividad de cada usuario, muchos sistemas Unix ofrecen atajos especiales para llegar a l. Por ejemplo, "~" (virgulilla) es una manera abreviada, asignada al nombre de su directorio "home". Supongamos que usted esta en algn directorio lejano y necesita copiar un archivo llamado "alguntexto", a n directorio llamado "documentos", alojado a su vez dentro del directorio "home". En lugar de escribir "cp alguntexto /home/myusername/documentos", usted puede escribir "cp alguntexto ~/documentos" que es mucho ms corto, pero tiene exactamente el mismo efecto. En teora, esto tambin se aplica al comando cd. Pero realmente esto tambin se considera demasiado largo, de manera que si usted escribe solamente cd, esto le llevar a su directorio principal, sin importar donde est. Mandriva Linux provee una serie de atajos ya preconfiguras (llamados 'alias'):

cd.. ejecuta "cd .." (lo lleva al directorio padre). d ejecuta 'ls' (lista el directorio). l ejecuta 'ls' (lista el directorio). la ejecuta 'ls -a' (lista el directorio completamente, e.j. incluidos los archivos que comienzan con un punto) ll ejecuta 'ls -l -k' (lista el directorio con formato largo, e.j. con los atributos de archivos, muestra el tamao de los archivos en KB y no en bytes) ls ejecuta 'ls -F color=auto' (lista directorios, aade indicadores a los distintos tipos de archivos y utiliza los colores) lsd ejecuta 'ls -d \*/' (solo lista los subdirectorios, no los archivos) md ejecuta 'mkdir' (crea un directorio) p ejecuta 'cd -' (regresa al directorio anterior) rd ejecuta 'rmdir' (elimina un directorio (vaco)) s ejecuta 'cd ..' (para ir al directorio padre)

Ahora que usted est un poco ms familiarizado con la shell y algunos de los atajos que ofrece, es hora de echar un vistazo a lo que realmente puede hacer con ella, adems de la ejecucin de comandos simples.

Usando la Shell IV
Cola de comandos Llegar el momento en que use ciertas combinaciones de comandos a menudo. Querr incluir todos los comandos en una sola lnea para poder dedicarse a otra cosa. La shell lo permite, mediante el uso de ciertos caracteres entre comandos para hacer una cola de comandos. Esta seccin introduce dos de los ms importantes. Ntese que tendr que usar espacios en blancos por simplicidad y claridad, aunque en la vida real no hagan falta. Por ejemplo, no hay diferencia entre ls -a ; du -hs y ls -a;du -hs.

[usuario@computadora ~]$ comando1 ; comando2


Ejecuta comando1 primero y luego comando2, aun cuando comando1 devuelva un error. Ejemplo:

[usuario@computadora ~]$ ls -a ; du -hs


Primero mostrar la lista completa de ficheros de un directorio y despus el espacio total que ocupa un directorio junto con sus subdirectorios.

[usuario@computadora ~]$ comando1 && comando2


Ejecuta primero comando1 y solamente si se complet sin ningn error, entonces ejecuta comando2. Ejemplo:

[usuario@computadora ~]$ ls -a bogusdir && du -hs


mostrar ls: bogusdir: No such file or directory y du no se ejecutar en absoluto (si no tiene ningn directorio llamado 'bogusdir', claro est ;-)). Si hubiera usado ';' en vez de '&&', el comando 'du' s se habra ejecutado. El ejemplo clsico para demostrar la diferencia entre ';' y '&&', y la utilidad de las colas de comandos, es la compilacin del kernel de Linux. Para compilar e instalar el ncleo de Linux, necesita ejecutar un conjunto de comandos uno detrs de otro: make dep, make clean, make bzImage, make modules, make modules_install y make install. Tener que esperar a que termine cada comando para decirle al sheel que ejecute el siguiente puede ser bastante pesado. En vez de eso, cada comando de la lnea anterior ser ejecutado slo si todos los anteriores no devolvieron ningn error. Si usa ';' para hacer la cola de comandos, y uno de ellos falla, como los dems s se ejecutarn, al final obtendr un kernel inusable en el directorio /boot. En este caso, use '&&':

[usuario@computadora ~]$ make dep && make clean && make bzImage && make modules && make modules_install && make install
Esto compilar el kernel y sus mdulos, y los instalar sin que haga falta ninguna interaccin. Command Jobbing Cuando ejecuta comandos o inicia un programa desde terminal, la terminal se bloquea mientras el comando o programa este ejecutndose. En Unix, se dice que el comando o programa esta ejecutndose en 'primer plano' ('foreground'). Si necesita la terminal para ejecutar otro comando, deber abrir una nueva terminal. Pero existe una forma ms elegante de hacerlo, llamada 'jobbing' o 'ejecutar en segundo plano' ('backgrounding'). Cuando realiza esto un comando liberara la

terminalinmediatamente, y as la terminal puede ser usada nuevamente. Para hacerlo solo agregue un "&" (ampersand) despues del comando:

[usuario@computadora ~]$ gqview &


Le indica al shell que ejecute el visor grfico 'GQview' en 'segundo plano' (i.e. to run it as a 'job'). El comando jobs le indicara que comandos y programas estn ejecutandose en segundo plano en la actual ventana de terminal:

[usuario@computadora ~]$ jobs [1]+ Running gqview &


Esto es importante al querer cerrar una ventana de terminal, ya que al cerrar la terminal se finalizaran todos lo que se este ejecutando. Esto es, si cierra la terminal del ejemplo, el programa GQview se cerrara tambin. Pero y si ya esta ejecutando un programa en primer plano y desea ejecutarlo en segundo plano?, No hay problema:

[usuario@computadora ~]$ gqview (press "CTRL z") [1] Terminated gqview [2]+ Stopped gqview<
Luego

[usuario@computadora ~]$ bg kview [2]+ gqview &


La combinacin de teclas CTRL z suspende un programa en ejecucin en la terminal, as que puede usar el comando bg para enviarlo a segundo plano.

Tenga en cuenta que hay situaciones en la que iniciar una aplicacin grafica desde una terminal en primer plano es til. De esa forma los mensajes de error que la aplicacin genere son mostrados en la terminal, y aun si no son tiles para usted pueden proporcionar pistas de lo que esta mal a la persona a la que le pida ayuda. Algunos programas grafico, normalmente en su etapa de pruebas (o Beta), continuan enviando mensajes a la terminal que los controla incluso si estn en segundo plano. Si este comportamiento le molesta, puede evitarlo ejecutando:

[usuario@computadora ~]$ command &>/dev/null &


Esto no solo envia el programa a segundo plano, tambin enva toda la salida que se mostrara de command en la terminal al archivo /dev/null . Solo para que se entere, /dev/null es el asesino de datos del sistema, todo lo que envi se desvanecer inmediatamente sin dejar rastro. Command Substitution Command substitution is a very handy feature. Let's say you want to have a look at the README.mouse file from the XFree86 documentation, but you don't know where it is. Since you are a clever user, you've already heard of the 'locate' command and have the 'slocate' package installed. So you do a:

[usuario@computadora ~]$ locate README.mouse


and you find out it is located in /usr/X11R6/lib/X11/doc. Now you either use the terminal pager less or your file manager to display that file, providing that path. Command substitution makes that much easier for you:

[usuario@computadora ~]$ less $(locate README.mouse)


Accomplishes the same in one step. The output of the command locate README.mouse (= /usr/X11R6/lib/X11/doc/README.mouse) is used as the argument for the less pager, which now displays this file. The syntax for this mechanism is:

[usuario@computadora ~]$ command1 $(command2)

Instead of '$()', you can use single backquotes:

[usuario@computadora ~]$ command1 `command2`


That's less to type, but harder to read in scripts and more easily to confuse with 'normal' single quotes, which the shell won't accept as substitution indicators. I prefer the first method, but in the end it's up to you. Here's another example. Let's say you want to kill some stubborn program called rob. You can do this by finding out what its Process ID is with the pidof command and then issuing the kill command with this PID as its argument. Instead of typing

[usuario@computadora ~]$ pidof rob 567 kill 567


You type:

[usuario@computadora ~]$ kill `pidof rob`


It is more efficient, isn't it? Next, I'll introduce two more useful shell mechanisms, file name globbing and output redirection.

Using the Shell V


Filename Globbing or Expansion Filename globbing allows you to provide more than one filename to a command without having to write all filenames in full. You use special characters for this, called 'wildcards'. Say you want to delete all files in a directory that end with the string .bak using the rm command. Instead of typing each filename as an argument to rm, you use the '*' wildcard:

[usuario@computadora ~]$ rm *.bak

'*' matches zero or more characters. In this example, you tell the shell to expand the argument to the rm command to "all file names ending on or consisting of the string .bak", the shell does so and passes that expanded argument to the rm command. As you will see, it is important to note that the shell reads and interprets the command line before the command does it. This has the advantage that you can use wildcards with (almost) all shell commands which take strings (file names, directory names, search strings etc) for an argument. Let's play a bit more with the '*' wildcard. You have a directory which contains the files 124.bak, 346.bak and 583.bak. You want to keep 583.bak. What you do is this

[usuario@computadora ~]$ rm *4*.bak


The shell expands '*4*.bak' to "all file names which contain the number '4' and the end on the string .bak". Notice that rm 4*.bak would not have worked, since this would only have encompassed file names beginning with the number '4'. Since there are no such files in this directory, the shell expands this pattern to an empty string and rm issues an error message:

[usuario@computadora ~]$ rm: cannot remove `4*.bak': No such file or directory


Now you want to keep the file 346.bak but delete 124.bak and 583.bak. That's trickier since the files which are to be deleted have nothing in common except the ending. But lucky as you are, you can also define files by what they not have:

[usuario@computadora ~]$ rm *[!6].bak


This reads: "delete all files which end on the string .bak except for those which end on the string 6.bak". You have to put the negation sign '1.1 ' and the character to be negated (here '6') into brackets, because otherwise the shell interprets the exclamation mark as the beginning of a history substitution. Negation works with all globbing patterns introduced in this article. Notice that it is very easy to shoot yourself in the foot with the '*' wildcard and negation. Guess what

[usuario@computadora ~]$ rm *[!6]*.bak


does? It deletes all the files, even the one which does contain a '6' in its filename. If you put '*' wildcards before and after a negation, it renders the negation practically useless, because the shell expands this to "all file names which do not have that character at any given position". In our example, the only file name on which that pattern would not have matched, would have been 666.bak. The second wildcard is the question mark, '?'. In a globbing pattern, a question mark represents exactly one character. To demonstrate its use, let's add two new files to the three example files, 311.bak~ and 'some.text'. Now list all files, which have exactly four characters after the dot:

[usuario@computadora ~]$ ls *.????


does this. The question mark wildcard is also a useful means to avoid the 'negation trap' mentioned above:

[usuario@computadora ~]$ rm *[!4]?.*


This expands to "all files except for those with a '4' in the second to last position before the dot" and deletes all files except for 346.bak. Is there more? You bet. So far, you've only seen globbing patterns which match one character at a certain position. But nothing keeps you from matching more than one:

[usuario@computadora ~]$ ls [13]*


lists all files which either begin with the character '1' or the character '3'; in our test case the file 124.bak, 311.bak~ and 346.bak match. Notice that you have to enclose the pattern in brackets, otherwise the pattern would match only files which begin with the string '13'. Now all that's left for ultimate happiness to ensue is the possibility to define ranges of matches:

[usuario@computadora ~]$ ls *[3-8]?.*

lists all files whose second to last character before the dot is a number between '3' and '8'. In our example, this matches the files 346.bak and 583.bak. Quoting Special Shell Characters These powerful mechanisms have one drawback, though: the shell will always try to expand them, and it will do so before the command. There are several cases in which this can get in your way:

File names with special characters. Assume you have another file in that directory with the name 1.1 56.bak. Try to match it with a globbing pattern:

[usuario@computadora ~]$ rm !* rm rm: too few arguments


The shell interprets '1.1*' as a history substitution ('insert all arguments from previous command'), not as a globbing pattern.

Commands which take special characters as arguments themselves. A row of Linux command line tools like (e)grep, sed, awk, find and locate for example use their own set of what is then called 'regular expressions'. These expressions may look strikingly similar to globbing patterns but are in some cases interpreted differently. But in order to enable the command to interpret them in the first place, the shell must be prevented from interpreting them as globbing patterns first:

[usuario@computadora ~]$ find . -name [1-9]* -print find: paths must precede expression
Properly:

[usuario@computadora ~]$ find . -name '[1-9]*' -print ./346.bak ./124.bak ./583.bak ./311.bak~

You can quote such special characters like 1.1 , $, ? or the empty space either with a back slash:

[usuario@computadora ~]$ ls \!* !56.bak


or with (single) quotes

[usuario@computadora ~]$ ls '!'* !56.bak


Notice that using quotes may need some deliberation on where to put them.

[usuario@computadora ~]$ ls '1.1 *'


would look for file called 1.1 \* since the second wildcard is now quoted, too, and thus interpreted literally. Redireccin de salida La filosofa de Unix es tener muchos programas pequeos, cada uno brillando en una tarea. Las tareas complejas no son realizadas por programas complejos sino mediante la unin de muchos programas con un puado de mecanismos shell. Uno de ellos es la redireccin de salida. Redireccionando entre dos o ms comandos sto se hace mediante 'tuberas', denotadas mediante el smbolo de caera | ('pipe' en ingls). La syntaxis es:
[usuario@computador ~]$ comando1 | comando2 | comando3

Etc. Seguramente ya las ha visto. Son usualmente utilizadas para redireccionar la salida de un programa a un paginador como 'more' o 'less'.

[usuario@computadora ~]$ ls -l

El primer comando provee el listado del directorio y el segundo lo despliega de una manera navegable en pantalla. Un ejmplo mas complejo:

[usuario@computadora ~]$ rpm -qa


El primer comando lista todos los paquetes RPM instalados, el segundo filtra (grep) aquellos que comienzan ('^') con una 'x' y el tercero muestra los resultados paginados en una lista navegable. Redireccin desde o hacia archivos A veces se quiere guardar la salida de un comando en un archivo o alimentar ese comando desde una archivo. Esto se hace por medio de los operadores '>' y '<'.

[usuario@computadora ~]$ comando > archivo


guarda la salida del comando en el archivo, sobreescribiendo todo el contenido previo del archivo:

[usuario@computadora ~]$ ls > listadodir


guarda el listado de el directorio actual a un archivo llamado listadodir.

[usuario@computadora ~]$ comando < archivo


utiliza el archivo como entrada para el comando:

[usuario@computadora ~]$ sort < listadodir > slistadodir


pasa el contenido de listadodir al comando sort, el cual lo ordena y lo entrega el contenido ordenado en el archivo slistadodir. Por supuesto, si usted es inteligente, har lo mismo con un paso:

[usuario@computadora ~]$ ls

Un caso especial es command 2> archivo. Esto pune slo los mensajes de error en el archivo. Puede ser necesario de cuando en cuando... Otro operador es '>>'. ste agrega la salida a un archivo existente, es decir, no borra el contenido previamente existente.

[usuario@computadora ~]$ echo "texto" >> archivo


Esto agregara texto al contenido del archivo archivo. Una manera rpida de editar un archivo sin abrir un editor antes. Existe una restriccin importante a los operadores '>' y '<': Algo como

[usuario@computadora ~]$ comando < archivo1 > archivo2


borar el contenido de archivo1. Sin embargo,

[usuario@computadora ~]$ comando < archivo1 >> archivo2


funcionar bien y agregar el contenido procesado de archivo1 al mismo archivo. Esto es mucho, no es cierto?. No hay que entrar en pnico. Se puede aprender todo paso a paso a tu propio paso. La prctica hace al maestro. Una vez que est familiarizado con los mecanismos shell ms comunes, sentir el deseo de personalizar su ambiente. Encontrar algunas ideas en las siguientes secciones. En la ltima parte de este artculo tambin encontrar un pequeo listado de preguntas frecuentes que tratan sobre los mensajes de error ms comunes de la consola y algunas configuraciones menores.

Using The Shell VI


Archivos de configuracin bash Cuando se hace un

[usuario@computadora ~]$ ls .bash*


en el directorio home, se ver una lista de archivos:

.bash_history contiene un listado de los comandos que se han ingresado. .bash_logout contiene un listado de los comandos a ser ejecutados al abandonar una shell. .bash_profile contiene una lista de comandos a ser ejecutados cuando se ingresa al sistema. .bashrc contiene el listado de comandos a ser ejecutados cada vez que se abre una nueva shell.

Ntese que existe una diferencia entra las dos ltimas: .bash_profile es ledo una vez al comienzo de una sesin, mientras que .bashrc es ledo cada vez que se abre un nuevo terminal (por ejemplo, una nueva ventana de xterm). En una configuracin tradicional se definiran variables como PATH en .bash_profile, y cosas como aliases y funciones en .bashrc. Pero ya que .bash_profile es usualmente preconfigurado para leer el contenido de .bashrc de todas maneras, se podra tambin ahorrar un poco de esfuerzo y poner toda la informacin de configuracin en .bashrc. Estos archivos definen las configuraciones por usuario. Las configuraciones de sistema se almacenan en /etc/profile, /etc/bashrc y en los archivos ubicados en /etc/profile.d. Usted debera preferir el uso de los archivos de configuracin por usuario, ya que su edicin no requiere permisos de 'root', y tambin permiten hacer configuraciones diferentes para 'root' y para cada cuenta de usuario, lo cual puede ser algo bueno. En caso de conflictos entre configuraciones de usuario y de sistema, las configuraciones de usuario prevalecen. The Prompt The prompt is the first thing you see every time you open a console or an xterm. It looks like this:

[usuario@computadora ~]$
In its default setting it shows your user name, the hostname of your machine (or 'localhost' is you haven't assigned one) and the current working directory ('~' is the Unix shortcut for your home directory). Traditionally, the last character is set up to indicate whether you are a user ($) or 'root', in which case it changes to a hash (#). You can set or change your prompt via changing the content of the $PS1 variable. The command

[usuario@computadora ~]$ echo $PS1

displays the current setting. Available special characters and their meaning are listed in man bash, section PROMPTING. Need some ideas on what might be a better prompt? Well, for starters the default setting isn't very friendly to forgetful people, since it only shows the last part of your current path. If you see a prompt like
[tom@localhost bin] $

your current working directory could be /bin, /usr/bin, /usr/local/bin or /usr/X11R6/bin. Sure, you can type

[usuario@computadora ~]$ pwd


to find out where you are, but shouldn't there be a way to tell the shell to do that on its own accord? There is. The appearance of the prompt - and for most of the other settings discussed here - is set in /etc/bashrc. You may also change it on a per user basis by editing .bash_profile and .bashrc in your home directory. Parameters are described in man bash, chapter 'PROMPTING'. You can add nifty things like the current time in different formats or the history number of the command, even different colors are possible. My currently favored setting in my user ~/.bashrc is:
PS1="PS1="\[\033[1m\][\w]\[\033[0m\] "

'root's ~/.bashrc has:


PS1="\[\033[0;31m\][\w]\[\033[0m\] "

And the prompt I get, is this:


[/usr/bin]

And this when I'm 'root':


[/usr/bin]

I've chopped the host- and user name part, since I have no need for it. But I want to see at first glance if I am logged in as a user or as 'root' on this console. Note that the user prompt will be white on dark backgrounds and black on light ones. A more moderate setting might be
PS1="\u: \w\\$ "

which will result in prompts like these:


user_name: /usr/bin$

but who cares about being moderate? :-) You can test various settings on the fly by using the export command e.g.: export PS1="\u: \w\\$ ". If you've found a prompt command which suits you, put it into your .bashrc. That way it will be applied automatically to every console or terminal window you open. You may even 'theme' your prompt, i.e. use different colors or make it look like an good ol' C64 prompt. If you are interested in this, have a look at Bashish. Modificar $PATH '$PATH', como '$PS1', pertenece al grupo de variables de entorno. Escriba

[usuario@computadora ~]$ set


para obtener un listado completo de todas las variables de entorno actualmente definidas. Las variables de entorno que se ven aqu estn definidas en los archivos de configuracin de la shell, ya sea por el conjunto de archivos de configuracin de shell de los usuarios, o por los archivos de configuracin de shell de root a nivel de sistema, localizados en /etc. Si est en X, mas variables son configuradas por los archivos de inicio de X de su administrador de ventanas o ambiente de escritorio. Usted no debera complicarse con las configuraciones de la mayora de estas variables a menos que sepa lo que est haciendo y por qu. Sin embargo, saber cmo cambiar la variable $PATH puede ser de utilidad ya que determina los nombres de directorios donde la shell busca por comandos o programas, es decir, por archivos ejecutables. Si el comando que quiere ejecutar est dentro de un directorio que es listado en $PATH, no necesita entregar la ruta completa al comando, slo el nombre de l. Algunas aplicaciones de terceros no instalan sus archivos ejecutables en los directorios estndares de comandos y programas de Linux. Agregar sus ubicaciones de instalacin no estndares a $PATH es una alternativa posible. Mas an, esto tambin te ensear a trabajar con variables de ambiente en general. Primero que todo habr notado que los nombres de las variables de entorno estn escritas en letras maysculas. Esto es slo una convencin, pero es importante tenerlo en mentet ya que Linux hace la diferencia entre letras maysculas y minsculas. Usted puede definir variables como '$path' o '$pAth', pero la shell no las utilizar. Lo segundo es que los nombres de variables son precedidos por un signo '$' algunas veces, aunque otras no. Para setear una variable, se usa el nombre sin el signo '$' precedindola:

PATH=/usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin

para accesar la variable y su valor, necesita poner el signo '$' en frente de ella:

[usuario@computadora ~]$ echo $PATH /usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin


porque, de otra manera, el nombre de la variable es tratado como una simple cadena de texto:

[usuario@computadora ~]$ echo PATH PATH


El tercer punto es especialmente importante para trabajar con la variable $PATH. No slo se pueden reemplazar variables, sino tambin agregar nuevas cadenas de texto a sus valores. La mayor parte del tiempo, no querr hacer algo como 'PATH=/some/directory' porque ello borrara los otros directorios de su $PATH y lo forzara a proveer la ruta completa a cada comando que quiera ejecutar en esa terminal. En vez de eso, slo agregue:
PATH=$PATH:/un/directorio

Aqu PATH es seteado a su valor actual, representado por $PATH, ms un directorio adicional. Hasta ahora slo se ha intentado setear la variable $PATH para el terminal en el cual se ha escrito el comando. Si abre un nuevo terminal y se ejecuta echo $PATH, ver la $PATH antigua, sin el directorio que se agreg. Se ha definido una variable de entorno local, restringida al terminal en el que defini esa variable. Para definir una variable global que sea reconocida por todos los terminales que abrir en esta sesin, se debe exportar la variable local con el comando 'export':
export PATH=$PATH:/un/directorio

Si ahora abre un nuevo terminal y escribe echo $PATH, ver el nuevo valor de $PATH en este terminal. Note, sin embargo, que el comando 'export' slo setea o cambia las variables para el terminar que est corriendo y en terminales que se inicien despus de que ha sido ejecutado. Los terminales que estn ya abiertos an tendrn el viejo $PATH. Para agregar un directorio de manera permanente a su $PATH, solo agregue el comando 'export' anterior a su {file|.bash_profile}}. No utilice .bashrc para configuraciones de PATH que involucren la adicin de directorios al PATH existente. .bashrc es ejecutado cada vez que abre una nueva shell,

as que si agrega un directorio al PATH en l, ser agregado nuevamente y cada vez que abra un terminal. Esto causa que la variable PATH contenga un nmero siempre creciente de entradas de directorio duplicadas. La ltima parte de este artculo introducir dos mtodos de configuracin, ms avanzados, y un FAQ que trata sobre problemas menores de mensajes de errores de configuracin.

Usar la Shell VII


Recordar todos los tipos de comandos y sus opciones y escribirlos todo el tiempo es un trabajo tedioso. Afortunadamente usted no tiene que hacerlo. Puede definir atajos para comandos de uso frecuente. stos atajos pueden ser definidos de forma relativamente simple por medio de aliases de comandos o de forma un poco mas compleja con funciones shell.

Command Aliases And Shell Functions


Command Aliases

For example, I use this command to upload my stuff to MUO:

[usuario@computadora ~]$ rsync -e ssh -z -t -r -vv progress /home/tom/web/muo/rsmuo/docs muo:/www/mandrakeuser/docs


Obviously I'd go nuts if I had to type this command line each time. So I have defined what is called an 'alias' in ~/.b/fre/ashrc:
alias upmuo='rsync -e ssh -z -t -r -vv --progress /home/tom/web/muo/rsmuo/docs muo:/www/mandrakeuser/docs'

Now all I have to do to upload my stuff is to type upmuo. The syntax for defining an alias is:
alias shortcut='command'

The quotes are necessary when the command contains empty spaces (e.g. between command and option). Notice that you either quote using single quotes or using double quotes. If you've got a hitch that there's a difference between those two, then you are right ;-). Single quotes strip the special meaning from all characters included, double quotes from all characters except for '$' (parameter substitution) and '`' (command substitution). Which means in order to use variables or command substitution in aliases, you have to use

double quotes. If you look at the example above, I could define a variable called MUOHOME in .bashrc:
export MUOHOME=$HOME/web/muo/rsmuo/docs

To use that variable in the alias above, I would have to use double quotes:
alias upmuo="rsync -e ssh -z -t -r -vv progress $MUOHOME muo:/www/mandrakeuser/docs"

because otherwise the alias would search for an directory or file called $MUOHOME. You can create aliases 'on the fly' with the alias command on the command line, or list them in ~/.bashrc (per user), or in /etc/profile.d/alias.sh (for every user and 'root'), in pre-8 Mandrake Linux releases, /etc/bashrc fulfills that function. To delete an alias, simply type: unalias alias. Just running alias will list all the defined aliases on your system. If you have a look at ~/.bashrc and /etc/profile.d/alias.sh, you'll see that there are already some aliases defined. You can define more than one alias for the same command. Of course, you must make sure that your alias isn't the name of some other program, something like alias rm='ls -l' won't work. You can try this by typing the shortcut you want to use on the command line. If the shell can't find a command with this name, you can use it as an alias. Some aliases that might be useful (don't forget the quotes1.1 ):

alias rpmq='rpm -qa | grep': Now rpmq string will list all installed RPMs which contain string in their name. alias ls='ls -ho color | more': ls will now print a colored and paged listing with file sizes in KB. alias use='du max-depth=1 | sort -n | more': use gives you a paged list of subdirectory sizes ordered by size. alias dkd='cd /usr/src/linux/Documentation': Frequently used directories can be aliased as well. Other prospective candidates are for example the subdirectories of '/mnt'.

Aliased directories may also be on removable media: alias dlm='/mnt/cdrom/Mandrake/RPMS/'. One mnemonic hint: try to start aliases with a similar function always with the same letter. For instance, begin all your directory aliases with a 'd'. I am sure you will find lots of possibilities for using this feature. Shell Functions Writing shell functions already boarders on the topic of shell scripting, which is beyond the scope of this article (and mine ;-)). In fact, shell functions are shell scripts, but they

have the advantage of being preloaded and being executed in the same shell (whereas a shell script opens at least one sub-shell). With shell functions, you can do a lot of things you can't do with aliases. One example:

function apros() { apropos $1 | egrep -v '(3|\(n\)'; }

This defines a new command, called 'apros'. apros name will execute 'apropos name' (i.e. a search command for man pages) and pipe (|) the output of that command through 'egrep' which filters out all man pages from sections '3' and 'n', which usually are not of interest, but tend to mess up the output of the apropos command. Functions allow you to use arguments given to the function name at any place of the function command. With aliases, only one argument is allowed and that argument has to be at the end of the command line (like in the 'rpmq' alias above). '$1' is a so-called 'positional parameter', it's a placeholder for the first argument given to the function. Of course there are more.
function apros() { apropos $1 | egrep -v "\($2"; }

If you now run the apros command like this:


apros name man_section_number

it searches for name, but excludes all man pages from man_section_number:
apros menu 3

returns all man page titles which contain 'menu', except those from section 3 (programming). Notice that you have to quote twice and that you have to use double quotes:

You must quote the 'egrep' search pattern in order to protect it from the shell. You must use double quotes to get the second positional parameter interpreted correctly. You must quote the round bracket again in order to tell 'egrep' to take it literally and not as a special control character .

Tricky, ain't it? ;-). Shell functions are handled just like aliases: put them into your .bashrc to have them around permanently. A dnde ir desde aqu

Este artculo es slo el comienzo. La programacin de scripts en Shell le puede ayudar a automatizar muchas tareas, a corregir usted mismo errores en scripts de otros y a personalizar su sistema Mandriva Linux a gusto en (casi) todo aspecto. Si planea aprender alguno de los lenguajes de programacin ms complejos que existen, la programacin en shell es un buen lugar para comenzar debido a que los conceptos bsicos son similares. El cmo en ingls BASH Programming - Introduction HOW-TO explicar en mayor profundidad los tpicos abordados en este artculo y lo introducir en el mundo de la programacin shell. Puede continuar con la muy recomendable, y tambin libre, Gua avanzada de programacin en Bash (en ingls). Si prefiere libros, le podemos recomendar Teach Yourself Shell Programming de S. Veeraraghavan, de Publicaciones Sams. Tambin est Learning the Bash Shell de Newham/Rosenblatt, de la editorial O'Reilly. Adems de todo esto, practique, practique y practique. Lea programas de shell de otros e intente comprender lo que hacen, cmo y porqu. Un consejo importante: no ejecute sus programas bash como 'root' :D. Preguntas frecuentes de Shell (FAQ)
Cmo apago ese &\*# pitido?

Con este comando:

[usuario@computadora ~]$ setterm -blength 0


Por qu obtengo "bash: command: command not found"?

Si no es un error de tipeo, lo mas probable es que el comando que est intentando ejecutar se encuentre en un directorio que no es parte de su $PATH. Entregue la ruta completa al comando. Si est en el mismo directorio que el comando, escriba ./command.
Por qu me aparece "bash: command: Permission denied"?

Para que un archivo sea ejecutable, los [permisos | BasicsBpermis] de ejecucin deben estar configurados para el usuario que quiera ejecutar el archivo. Escriba:

[usuario@computadora ~]$ chmod 755 archivo


Si eso no funciona, lea el artculo sobre permisos.
El bit de ejecucin est habilidato, tengo permisos de ejecucin pero el permiso es denegado, por qu?

Chequea en '/etc/fstab' la entrada de la particin donde est el archivo. Asegrate de que no contienen la opcin 'noexec'. Si contiene la opcin 'user', la opcin 'exec' debe ser habilitada tambin.
Cmo cambio los colores de listado de archivos?

Copie '/etc/DIR_COLORS' a su directorio home y renmbrelo a '.dir_colors'. Todo lo que necesita est en ese archivo.
He puesto un script 'foo' en mi directorio ~/bin, pero cada vez que intento ejecutarlo, un comando distinto, tambin llamado 'foo', es iniciado. Por qu?

Eche una mirada a su $PATH y ver que su directorio personal ~/bin es el ltimo o al menos muy cerca del final de $PATH. La shell buscar los directorios listados en $PATH uno tras otro. Tan pronto como encuentre el primer comando que calce, ejecutar ese comando. Si hay un comando en su sistema con el mismo nombre que el script, ese comando ser ejecutado, no su script. Renombre su script.
Qu significa "bash: command: bad interpreter"?

Esto sucede usualmente con binarios de instalacin de terceros o aplicaciones Java. Estas aplicaciones necesitan una shell propia, as que en vez de

[usuario@computadora ~]$ command


usted tiene que ejecutar

[usuario@computadora ~]$ sh command


Mi terminal se congela cada vez que presiono "<CTRL s>"

Entonces no lo hagas! ;9. CTRL s enva un comando de bloqueo de desplazamiento al terminal. Para desbloquearlo, slo presione CTRL q. Related Resources Jerry Peek: 'Why Use a Command Line Instead of Windows?' Eric S. Raymond: 'A Brief History of Hackerdom' Text-Terminal-HOWTO ~MdkRef. 3,3 ~MdkRef. 3,4 Filename Expansion ~MdkRef, 3.5

Revision / Modified: Mark_1830 08:00, 13 July 2009 (UTC) Revision / Modified: Feb. 28, 2002 Author: Tom Berger

Other resources

How to copy files and folders with the 'cp' command How to move files and folders with the 'mv' command Searching Text Files With 'grep' Some tips for the shell history How to customize 'ls' output

Vous aimerez peut-être aussi