Vous êtes sur la page 1sur 31

LINUX Bsico

TAKASHI SUGASAWA

LINUX Bsico (6. Shells(1))

Programa del curso


1. 2. 3. 4. 5. 6. 7. 8. 9.
Introduccin a LINUX Operacin bsica de LINUX Operacin de archivos y directorios Editor vi Comprensin del sistema de ficheros Shells(1) Shells(2) Shells(3) Otros comandos
LINUX Bsico (6. Shells(1)) 2

LINUX Bsico
6. Shells(1) ndice
6.1 Comprensin de shells 6.2 Caracteres para completar nombres del ficheros 6.3 Tuberas y redireccionamientos de entrada y salida 6.4 Sustituciones 6.5 Comillas y apstrofos 6.6 Grupos de comandos
LINUX Bsico (6. Shells(1)) 3

6.1 Comprensin de shells


(1) Qu es shell? Shell es una aplicacin como "Smbolo del sistema" en
el Windows. Shell empieza automticamente cuando un usuario se registra. Shell funciona como interfaz principal entre el sistema operativo y el usuario. Shell interpreta sus comandos u rdenes. Shell no es un parte del ncleo del sistema operativo. Hay mltiples shells instalados (Shell Bourne, BASH, Shell C, tcsh, zsh,...). El shell por omisin de LINUX es bash.

LINUX Bsico (6. Shells(1))

6.1(2) Variedad de shells


Shell Bourne (/bin/sh) Shell C (/bin/csh)

El shell ms antiguo. El shell original de UNIX. Est disponible en todos los sistemas de UNIX. El shell antiguo y muy comn tambin. Est disponible en casi todos los sistemas de UNIX. La sintaxis del shell C es muy parecida al lenguaje de programacin C. El shell derivado de Shell Bourne. Proporciona varias caractersticas mejoradas. El shell por omisin de LINUX El shell derivado de Shell C. Proporciona varias caractersticas mejoradas.

BASH (/bin/bash) tcsh (/bin/tcsh)

Hay otros, Shell Z, Shell Korn, ...


LINUX Bsico (6. Shells(1)) 5

6.1(3) Shells disponibles en el sistema


Para saber los shells disponibles en el sistema, se referimos el archivo "/etc/shells".
[usr001@linuxpc usr001]$ cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/bash2 /bin/ash /bin/bsh /bin/tcsh /bin/csh

LINUX Bsico (6. Shells(1))

6.1(4) Cambio el login shell


Para cambiar el login shell, usamos el comando "chsh". (28) chsh cambiar el login shell.

[usr001@linuxpc usr001]$ chsh Cambiando intrprete de rdenes para usr001. Password: Nuevo intrprete de rdenes [/bin/bash]: /bin/csh Se ha cambiado el intrprete de rdenes. [usr001@linuxpc usr001]$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash (omisin) usr000:x:500:500::/home/usr000:/bin/bash usr001:x:501:501::/home/usr001:/bin/csh usr002:x:502:502::/home/usr002:/bin/bash

(omisin)

Si no hay una razn especial, vamos a usar BASH.


LINUX Bsico (6. Shells(1)) 7

6.2 Caracteres para completar nombres del ficheros (1) El carcter comodn * El asterisco * es el carcter comodn, significa

cualquiera y todos los caracteres. Por ejemplo, a* significa todos los ficheros que comiencen con una a.
[usr001@linuxpc usr001]$ ls abxx.txt abyy xx.txt xxyyzz [usr001@linuxpc usr001]$ ls a* abxx.txt abyy [usr001@linuxpc usr001]$ ls *.txt abxx.txt xx.txt [usr001@linuxpc usr001]$ ls *yy* abyy xxyyzz [usr001@linuxpc usr001]$ ls * abxx.txt abyy xx.txt xxyyzz [usr001@linuxpc usr001]$ ls b* ls: b*: No existe el fichero o el directorio [usr001@linuxpc usr001]$ rm * [usr001@linuxpc usr001]$ ls
LINUX Bsico (6. Shells(1)) 8

6.2(2) El carcter comodn ?

El signo interrogacin ? es el carcter comodn,


significa un solo carcter cualquier.
[usr001@linuxpc a1 a2 a3 b1 [usr001@linuxpc a1 a2 a3 [usr001@linuxpc a1 b1 c1 [usr001@linuxpc a1 a2 a3 b1 [usr001@linuxpc d usr001]$ ls b2 c1 d usr001]$ ls a? usr001]$ ls ?1 usr001]$ ls ?? b2 c1 usr001]$ ls ?

LINUX Bsico (6. Shells(1))

6.2(3) La expresin [ ]

La expresin [ ] (corchetes) significa un carcter


simple si encierra entre corchetes una serie de caracteres.
[usr001@linuxpc a1 a2 a3 a4 [usr001@linuxpc a2 a3 a4 [usr001@linuxpc a1 b1 c1 d1 [usr001@linuxpc a1 a3 a5 c1 [usr001@linuxpc a1 a2 a3 a4 usr001]$ ls a5 b1 c1 d1 e1 usr001]$ ls a[2-4] usr001]$ ls e1 x1 y1 usr001]$ ls e1 usr001]$ ls a5 b1 c1 x1 y1

z1

[a-z]1 z1 [ace][135] [a-c,xz]? x1 z1

LINUX Bsico (6. Shells(1))

10

6.3 Tuberas y redireccionamientos de entrada y salida (1) stdin, stdout, stderr


Salida estndar (stdout)

Algunos comandos envan su salida hacia la pantalla.

A la verdad, estos comandos envan su salida hacia un archivo especial llamado "stdout", y el sistema de LINUX asocia "stdout" con la pantalla.
cat /etc/passwd salida std std out out pantalla

LINUX Bsico (6. Shells(1))

11

Entrada estndar (stdin)

Algunos comandos esperan una entrada desde la

terminal o el teclado. A la verdad, estos comandos esperan la entrada desde un archivo especial llamado stdin, y el sistema de LINUX asocia "stdin" con el teclado.
std std in in entrada cat salida std std out out pantalla

teclado

[usr001@linuxpc usr001]$ cat abc abc 123 123 xyz xyz Teclear "Cntl-d" para escapar.
LINUX Bsico (6. Shells(1)) 12

Salida de error estndar (stderr)

Algunos comandos envan un mensaje de error hacia un


pantalla. A la verdad, estos comandos envan un mensaje de error hacia un archivo especial llamado "stderr", y el sistema de LINUX asocia "stderr" con la pantalla.
comando error std std err err pantalla No existe [usr001@linuxpc usr001]$ ls [usr001@linuxpc usr001]$ cat a > b cat: a: No existe el fichero o el directorio [usr001@linuxpc usr001]$ ls b vaco [usr001@linuxpc usr001]$ cat b [usr001@linuxpc usr001]$ error

se ha creado

"stdout" y "stderr" son diferentes.


LINUX Bsico (6. Shells(1)) 13

6.3(2) Tuberas

Con tuberas, se puede utilizar la salida de un comando


como entrada de otro. El carcter de tubera es una barra vertical "|".
(ejemplo) queremos concatenar 2 archivos "/etc/passwd" y "/etc/group", y verlo con el paginador "more".
cat /etc/passwd /etc/group > tmp more tmp archivo temporal si usamos un tubera ... cat /etc/passwd /etc/group | more

Una tubera conecta el "stdout" de un comando hacia el


"stdin" de otro.
comando1 salida std std out out

tubera
conectar std std in in

entrada

comando2

LINUX Bsico (6. Shells(1))

14

Los comandos more, less, grep, sort se utilizan frecuentemente con las tuberas. (29) grep buscar patrones que se encuentren en archivos e informa dnde localiza esos patrones. (ej.) grep exp-reg arch1 [arch2 ...]
sale los lneas que contienen usr00 [usr000@linuxpc usr000]$ cat /etc/passwd | grep usr00 usr000:x:500:500::/home/usr000:/bin/bash usr001:x:501:501::/home/usr001:/bin/bash = grep usr00 usr002:x:502:502::/home/usr002:/bin/bash /etc/passwd usr003:x:503:503::/home/usr003:/bin/bash usr004:x:504:504::/home/usr004:/bin/bash usr005:x:505:505::/home/usr005:/bin/bash usr006:x:506:506::/home/usr006:/bin/bash usr007:x:507:507::/home/usr007:/bin/bash usr008:x:508:508::/home/usr008:/bin/bash usr009:x:509:509::/home/usr009:/bin/bash
LINUX Bsico (6. Shells(1)) 15

(30) sort

ordenar archivos de texto. (ej.) sort arch1 [arch2 ...]


Para la salida en una sola columna usr001]$ ls -i1

[usr001@linuxpc 400941 a 400940 abc 400936 bc 400942 defg 400937 xyz [usr001@linuxpc 400936 bc 400937 xyz 400940 abc 400941 a 400942 defg [usr001@linuxpc 400942 defg 400941 a 400940 abc 400937 xyz 400936 bc [usr001@linuxpc 400937 xyz 400942 defg 400936 bc 400940 abc 400941 a

usando primer campo usr001]$ ls -i1 | sort descendentemente usr001]$ ls -i1 | sort -r usando segundo campo usr001]$ ls -i1 | sort -r +1

LINUX Bsico (6. Shells(1))

16

6.3(3) Redireccionamientos
Redireccionamiento de salida

Se emplea para redireccionar la salida de un comando


hacia un archivo. En vez de que la salida vaya a la pantalla de la terminal, se coloca en un archivo. Los smbolos de redireccionamiento de salida son >, >>, 2>, 2>>, &>.
[usr001@linuxpc usr001]$ date jue sep 16 20:08:37 ECT 2004 [usr001@linuxpc usr001]$ date > arch1 [usr001@linuxpc usr001]$ cat arch1 jue sep 16 20:08:42 ECT 2004

LINUX Bsico (6. Shells(1))

17

El redireccionamiento de salida conecta el "stdout" o


stderr de un comando hacia un archivo.
std std out out salida comando 2>&1 mensaje de error 1>&2 &> arch arch ivo ivo arch arch ivo ivo >, >> arch arch ivo ivo

std std err err

2>, 2>>

LINUX Bsico (6. Shells(1))

18

Diferencia entre > y >> (2> y 2>>)

Si el archivo no existe, son iguales. Si est el archivo, > sobrescribe el archivo, >> agregar al archivo.
no existente [usr001@linuxpc usr001]$ ls [usr001@linuxpc usr001]$ whoami > arch1 [usr001@linuxpc usr001]$ cat arch1 ya existente usr001 [usr001@linuxpc usr001]$ date > arch1 [usr001@linuxpc usr001]$ cat arch1 se ha sobrescrito jue sep 16 22:06:45 ECT 2004 [usr001@linuxpc usr001]$ whoami >> arch1 [usr001@linuxpc usr001]$ cat arch1 jue sep 16 22:06:45 ECT 2004 se ha aadido usr001

(31) whoami Presenta su nombre de usuario.


LINUX Bsico (6. Shells(1)) 19

> y 2>, &>


[usr001@linuxpc usr001]$ ls arch1 [usr001@linuxpc usr001]$ cat arch1 jue sep 16 22:30:52 ECT 2004 [usr001@linuxpc usr001]$ cat arch1 jue sep 16 22:18:33 ECT 2004 cat: arch2: No existe el fichero o [usr001@linuxpc usr001]$ cat arch1 [usr001@linuxpc usr001]$ cat a jue sep 16 22:18:33 ECT 2004 [usr001@linuxpc usr001]$ cat b cat: arch2: No existe el fichero o [usr001@linuxpc usr001]$ cat arch1 [usr001@linuxpc usr001]$ cat c jue sep 16 22:18:33 ECT 2004 cat: arch2: No existe el fichero o

existente no existente arch2 el directorio arch2 >a 2>b

salida de stdout salida de stderr

el directorio arch2 &>c el directorio

LINUX Bsico (6. Shells(1))

20

2>&1 (1>&2)
[usr001@linuxpc usr001]$ ls arch1 [usr001@linuxpc usr001]$ cat arch1 jue sep 16 22:30:52 ECT 2004 [usr001@linuxpc usr001]$ cat arch1 jue sep 16 22:30:52 ECT 2004 cat: arch2: No existe el fichero o [usr001@linuxpc usr001]$ cat arch1 cat: arch2: No existe el fichero o jue sep 16 22:30:52 ECT 2004 [usr001@linuxpc usr001]$ cat arch1 [usr001@linuxpc usr001]$ cat a jue sep 16 22:30:52 ECT 2004 cat: arch2: No existe el fichero o [usr001@linuxpc usr001]$ cat arch1 [usr001@linuxpc usr001]$ cat a jue sep 16 22:30:52 ECT 2004 cat: arch2: No existe el fichero o jue sep 16 22:30:52 ECT 2004 cat: arch2: No existe el fichero o [usr001@linuxpc usr001]$ cat arch1 cat: arch2: No existe el fichero o [usr001@linuxpc usr001]$ cat a jue sep 16 22:30:52 ECT 2004

existente arch2 no existente el directorio salida de arch2 2>&1 | sort stderr el directorio arch2 >a 2>&1 el directorio arch2 >>a 2>&1 el directorio el directorio arch2 2>&1 >a el directorio 2>&1 no funciona = &>

salida de stdout

orden es importante

LINUX Bsico (6. Shells(1))

21

Redireccionamiento de entrada

Se usa para redireccionar la entrada en un comando a

fin de que provenga de un archivo y no de la terminal. Los smbolos de redireccionamiento de entrada son <. El smbolo < conecta el "stdin de un comando con un archivo.
arch arch ivo ivo

<
conectar std std in in

entrada

comando

[usr001@linuxpc usr001]$ grep usr000 < /etc/passwd usr000:x:500:500::/home/usr000:/bin/bash [usr001@linuxpc usr001]$ cat /etc/passwd | grep usr000 usr000:x:500:500::/home/usr000:/bin/bash [usr001@linuxpc usr001]$ grep usr000 /etc/passwd usr000:x:500:500::/home/usr000:/bin/bash
LINUX Bsico (6. Shells(1))

los resultados son iguales.

22

6.4 Sustituciones

(1) Sustitucin de variables

Los variables son disponibles en el shell. Algunos variables se definen por el shell o el sistema
de LINUX.
Variables principales disponibles en el shell HOME LOGNAME PATH PS1 PWD SHELL TERM Nombre de ruta de acceso completo de su directorio base. Su nombre de usuario. Directorios en los que el shell busca comandos. Principal indicador del shell. Nombre de ruta de acceso completo del directorio de trabajo actual. Nombre de su shell actual. Tipo de terminal que utiliza usted.
LINUX Bsico (6. Shells(1)) 23

Con el carcter $, podemos sustituir el nombre de un


variable con su valor.
sustituir echo /home/usr000
4096 4096 1332 24 191 124 120 sep sep sep sep sep sep sep 17 15 17 15 15 15 15 12:37 23:46 12:28 23:39 23:39 23:39 23:39 . .. .bash_history .bash_logout .bash_profile .bashrc .gtkrc [usr000@linuxpc /home/usr000 [usr000@linuxpc total 28 drwx-----2 drwxr-xr-x 15 -rw------1 -rw-r--r-1 -rw-r--r-1 -rw-r--r-1 -rw-r--r-1 [usr000@linuxpc usr000]$ echo $HOME usr000]$ ls -la $HOME usr000 root usr000 usr000 usr000 usr000 usr000 usr000]$ usr000 root usr000 usr000 usr000 usr000 usr000 cd $HOME

cambia el directorio de trabajo actual a su directorio base. = cd = cd ~

(32) echo

Toma el argumento que se le pasa y lo escribe a la salida estndar.


LINUX Bsico (6. Shells(1)) 24

6.4(2) Sustitucin de comandos

La sustitucin de comandos sustituye el resultado de un


comando por un parmetro de posicin. Para sustituir un comando, ponemos el comando entre dos ` (acentos graves). ` comando `

[usr001@linuxpc usr001]$ whoami usr001 [usr001@linuxpc usr001]$ echo `whoami` = echo usr001 usr001 [usr001@linuxpc usr001]$ grep `whoami` /etc/passwd usr001:x:501:501::/home/usr001:/bin/bash = grep usr001 /etc/passwd

LINUX Bsico (6. Shells(1))

25

6.5 Comillas y apstrofos


(1) Comillas " " Las comillas " " desactivan los caracteres especiales, *, ?, [,
], >, <, ... Sin embargo, la sustitucin de variables $ y comandos ` ` an se lleva a afecto.

[usr000@linuxpc usr000]$ ls el carcter comodn a [usr000@linuxpc usr000]$ ls * un nombre de archivo a [usr000@linuxpc usr000]$ ls "*" ls: *: No existe el fichero o el directorio [usr000@linuxpc usr000]$ date > " " un archivo del un archivo que nombre es [usr000@linuxpc usr000]$ ls -l existe. un espacio. total 4 -rw-rw-r-1 usr000 usr000 29 sep 17 09:47 -rw-rw-r-1 usr000 usr000 0 sep 17 09:46 a [usr000@linuxpc usr000]$ cat " " vie sep 17 09:47:08 ECT 2004 [usr000@linuxpc usr000]$ rm " " [usr000@linuxpc usr000]$

LINUX Bsico (6. Shells(1))

26

sustitucin de variables [usr000@linuxpc /home/usr000 [usr000@linuxpc /home/usr000 [usr000@linuxpc $HOME [usr000@linuxpc usr000 [usr000@linuxpc usr000 [usr000@linuxpc `whoami` usr000]$ echo $HOME usr000]$ echo "$HOME" usr000]$ echo "\$HOME" usr000]$ echo `whoami` usr000]$ echo "`whoami`" usr000]$ echo "\`whoami\`" para desactivar la sustitucin, "\" es necesario. para desactivar la sustitucin, "\" es necesario. sustitucin de comandos

LINUX Bsico (6. Shells(1))

27

(2) Apstrofos ' ' Los apstrofos ' ' desactivan todo el anlisis sintctico de shell.
[usr000@linuxpc usr000]$ ls el carcter comodn a [usr000@linuxpc usr000]$ ls ? un nombre de archivo a [usr000@linuxpc usr000]$ ls '?' ls: ?: No existe el fichero o el directorio [usr000@linuxpc usr000]$ echo $HOME sustitucin de variables /home/usr000 [usr000@linuxpc usr000]$ echo '$HOME' se ha desactivado $HOME la sustitucin. [usr000@linuxpc usr000]$ echo `whoami` sustitucin de usr000 [usr000@linuxpc usr000]$ echo '`whoami`' comandos `whoami` se ha desactivado la sustitucin.

LINUX Bsico (6. Shells(1))

28

6.6 Grupos de comandos


(1) Secuencia de comandos (punto y coma ;) Un comando simple se concluye con un Enter. Si quiere colocar mltiples comandos en una lnea de comando

antes de presionar Enter, puede delimitar comandos individuales con un signo de punto y coma ;.

comando1 ; comando2 ; comando3 El shell ejecuta cada comando en secuencia, como si usted hubiera escrito cada uno de ellos de forma independiente en una lnea.

[usr000@linuxpc usr000]$ whoami ; date ; cal usr000 vie sep 17 10:43:44 ECT 2004 septiembre de 2004 do lu ma mi ju vi s 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
LINUX Bsico (6. Shells(1)) 29

6.6(2) Grupos de comandos


Llaves { } Si quiere redireccionar la entrada o la salida hacia todos los
comandos como un grupo, puede hacerlo al convertir la lnea de comando en un grupo de comandos. Un grupo de comandos son varios comandos encerrados entre llaves { }. { comando1; comando2; } > archivo { comando1; comando2; } | archivo
un espacio es necesario. punto y coma es necesario.

[usr000@linuxpc usr000]$ { whoami; date; } > a [usr000@linuxpc usr000]$ cat a usr000 vie sep 17 11:08:30 ECT 2004 [usr000@linuxpc usr000]$ { whoami; date; } | sort -r vie sep 17 11:09:23 ECT 2004 usr000

LINUX Bsico (6. Shells(1))

30

Muchas gracias por su atencin ! Hasta pronto !


En la prxima hora, vamos a aprender sobre el control de procesos.

LINUX Bsico (6. Shells(1))

31

Vous aimerez peut-être aussi