viernes, 9 de septiembre de 2011

Sesión 6 Comandos para procesar texto

grep
Filtra y resalta el texto de un archivo mediante palabras clave

Ejemplo:
mi-usuario@maquina:~$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash


head 
Muestra las primeras líneas de un archivo (si no se le indica el número de líneas por default imprime 10)

Ejemplo:
mi-usuario@maquina:~$ head ~/.bashrc

.bash_history  .bash_logout   .bashrc      
carmeth@Toshiba-lap:~$ head .bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

# don't put duplicate lines in the history. See bash(1) for more options
# ... or force ignoredups and ignorespace
HISTCONTROL=ignoredups:ignorespace
mi-usuario@maquina:~$


tail
Muestra las últimas líneas de un archivo (si no se le indica el número de líneas por default imprime 10)

Ejemplo:
mi-usuario@maquina:~$ tail -n 5 /etc/passwd
rtkit:x:110:117:RealtimeKit,,,:/proc:/bin/false
haldaemon:x:114:124:Hardware abstraction layer,,,:/var/run/hald:/bin/false
mysql:x:115:125:MySQL Server,,,:/nonexistent:/bin/false
sshd:x:116:65534::/var/run/sshd:/usr/sbin/nologin
carmeth:x:1003:1004:carmeth,,,,:/home/carmeth:/bin/bash
mi-usuario@maquina:~$


wc
Cuenta el número de líneas, palabras y bytes de un archivo

Ejemplo:
mi-usuario@maquina:~$ wc /etc/passwd
  38   61 1969 /etc/passwd



sort
Ordena alfabéticamente las líneas de un archivo

Ejemplo:
mi-usuario@maquina:~$ sort /etc/passwd

avahi-autoipd:x:103:108:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
avahi:x:104:109:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
backup:x:34:34:backup:/var/backups:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
carmeth:x:1003:1004:carmeth,,,,:/home/carmeth:/bin/bash
couchdb:x:105:113:CouchDB Administrator,,,:/var/lib/couchdb:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
- - Se omite el resto de la salida de este comando - -




uniq
Omite las líneas repetidas de un archivo

Ejemplo:
mi-usuario@maquina:~$ cat archivo-repetido


Este es el contenido de archivo-repetido
esta línea se repite
esta línea se repite
esta línea ya no se repite
otra línea
otra línea
línea de contenido
línea de contenido



Ahora ejecutamos el comando uniq sobre este archivo para que omita las líneas repetidas
mi-usuario@maquina:~$ uniq archivo-repetido


Este es el contenido de archivo-repetido
esta línea se repite
esta línea ya no se repite
otra línea
línea de contenido


diff
Imprime las líneas que sean distintas entre 2 archivos 

Ejemplo:

mi-usuario@maquina:~$ cat archivo-repetido
Este es el contenido de archivo-repetido
esta línea se repite
esta línea se repite
esta línea ya no se repite 
otra línea
otra línea
línea de contenido
línea de contenido

mi-usuario@maquina:~$ cat archivo-repetido.backup
Este es el contenido de archivo-repetido.backup
esta línea se repite
esta línea se repite
esta línea ya no se repite 
otra línea **distinta**
otra línea
línea de contenido **cambiada**
línea de contenido

mi-usuario@maquina:~$ diff archivo-repetido archivo-repetido.backup 
1c1
< Este es el contenido de archivo-repetido
---
> Este es el contenido de archivo-repetido.backup
4a5
> otra línea **distinta**
6,7c7
< otra línea
< línea de contenido
---
> línea de contenido **cambiada**


cut
"Corta" dependiendo los campos y delimitadores que se le especifiquen

Ejemplo:
Para este ejemplo vamos a utilizar el archivo passwd, el cual esta separado por columnas, demitadas por el caracter : ahora veamos como se utiliza el comando cut
mi-usuario@maquina:~$ cut -d: -f 1 /etc/passwd
root
daemon
bin
sys
sync
games
man
lp
mail
news
uucp
proxy
www-data
- - El resto de la salida se omite - -

Ahora prueba utilizando otros delimitadores y otros campos



Sesión 6 Redireccionamiento de Entrada/Salida

-Entrada estándar (STDIN) : Teclado

-Salida estándar (STDOUT) : Pantalla

-Error estándar (STDERR) : Pantalla

A continuación se muestra una tabla con los operadores de redirección:

Operador
Acción
>
Redirecciona la salida a un archivo
>>
Agrega la salida a un archivo
2>
Redirecciona la salida de error estándar a un archivo
2>>
Agrega a un archivo la salida de error estándar
<
Envia un archivo como entrada de un comando



Veamos algunos ejemplos:

En este ejemplo la salida del comando cat se redireccionará al archivo passwd-backup (si el archivo no existe lo crea). 
mi-usuario@maquina:~$ cat /etc/passwd > passwd-backup 
mi-usuario@maquina:~$

Ahora vamos a ver el contenido del archivo passwd-backup

mi-usuario@maquina:~$ cat passwd-backup

cat passwd-backup
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
- - El resto de la salida de este comando se omite - -

Vamos a agregar contenido al archivo passwd-backup
mi-usuario@maquina:~$ cat /etc/hosts >> passwd-backup 
mi-usuario@maquina:~$


Si vuelves a leer el contenido del archivo passwd-backup encontrarás que se agregó el contenido del archivo /etc/hosts, hay que fijarnos que el operador que utizamos fue el de agregar la salida (>>), si hubieramos ocupado el operador de redirección de la salida (>) el contenido del archivo passwd-backup  se hubiera sobrescrito, es decir el contenido actual (del archivo /etc/passwd) se borraría y se reemplazaría por el contenido del archivo nuevo (/etc/hosts).

Ahora vamos a producir a propósito un error, vamos a utilizar el comando touch sin argumentos, por lo cual nos debería salir un error en pantalla (STDERR), pero lo vamos a redireccionar a un archivo.


mi-usuario@maquina:~$ touch 2>  archivo-errores
mi-usuario@maquina:~$ 

A continuación vamos a abrir el contenido del archivo archivo-errores:


mi-usuario@maquina:~$ cat archivo-errores
touch: falta un archivo como argumento
Pruebe `touch --help' para más información.

Como te puedes dar cuenta el contenido de archivo-errores es el error producido por el comando touch, solo que se ha redireccionado a un archivo. Ahora prueba agregando (2>>) el error estandar que produce el comando mkdir al archivo archivo-errores.

Ahora vamos a ver como pasar un archivo como entrada estándar a un comando:

Primero vamos a crear un archivo con el mensaje "Texto dentro del archivo mensaje ":
mi-usuario@maquina:~$ echo "Texto dentro del archivo mensaje" > mensaje
mi-usuario@maquina:~$

Leemos el contenido de ese archivo para checar que el contenido se haya guardado correctamente:

mi-usuario@maquina:~$ cat mensaje

Texto dentro del archivo mensaje

Ahora vamos a pasarle el archivo mensaje como entrada estándar al comando cat, el cual leera el contenido de ese archivo:
mi-usuario@maquina:~$ cat < mensaje

Texto dentro del archivo mensaje

Como te darás cuenta leímos el contenido del archivo mensaje, ahora prueba el comando anterior con los comandos less y echo.

Piping

El piping es redireccionar la salida de un comando como entrada de otro comando, estos comandos se redireccionan mediante la tecla pipe ( | ), yo la escribo prsionando la tecla ALTGR+2 pero puede variar dependiendo de la distriución de cada teclado:

comando-1 |  comando-2

Veamos unos ejemplos:

En este ejemplo la salida del comando echo (pantalla) la vamos a redirecionar como entrada del comando cat
mi-usuario@maquina:~$ echo "este mensaje se redirecciona al comando cat" | cat
este mensaje se redirecciona al comando cat

El siguiente ejemplo la salida del comando cat (pantalla) la vamos a redireccionar como entrada del comando less
mi-usuario@maquina:~$ cat /etc/passwd | less
- - Inicio de salida omitida - -
pulse:x:109:114:PulseAudio daemon,,,:/var/run/pulse:/bin/false
rtkit:x:110:117:RealtimeKit,,,:/proc:/bin/false
saned:x:111:118::/home/saned:/bin/false
hplip:x:112:7:HPLIP system user,,,:/var/run/hplip:/bin/false
gdm:x:113:120:Gnome Display Manager:/var/lib/gdm:/bin/false
eddye:x:1000:1000:eddye,,,:/home/eddye:/bin/bash
haldaemon:x:114:124:Hardware abstraction layer,,,:/var/run/hald:/bin/false
zend:x:1001:1001::/home/eddye/Escritorio/ZendServer-5.1.0_Tarball_B7-php5.3.5-linux-glibc23-x86_64/usr/zend/gui/lighttpd:/sbin/nologin
mysql:x:115:125:MySQL Server,,,:/nonexistent:/bin/false
sshd:x:116:65534::/var/run/sshd:/usr/sbin/nologin
carmeth:x:1003:1004:carmeth,,,,:/home/carmeth:/bin/bash
(END) 








Sesión 6 Comandos Básicos 3 (Lista del ejercicio)

su
Cambia de usuario en terminal, si no se le especifica el usuario el interprete sobreentiende que el usuario al que se desea cambiar es root

Ejemplo
mi-usuario@maquina:~$ su carmeth
Contraseña:
carmeth@maquina:~$


passwd
Cambia el password de un usuario

Ejemplo
mi-usuario@maquina:~$ su 

Cambiando la contraseña de mi-usuario.
(actual) contraseña de UNIX:
Introduzca la nueva contraseña de UNIX:
Vuelva a escribir la nueva contraseña de UNIX:

passwd: contraseña actualizada correctamente
mi-usuario@maquina:~$


who
Muestra quienes han iniciado sesión en la máquina

Ejemplo
mi-usuario@maquina:~$ who
mi-usuario    tty7         2011-09-09 12:45 (:0)
mi-usuario    pts/0        2011-09-09 19:12 (:0.0)


whoami
Muestra quien esta "logueado" acualmente

Ejemplo:
mi-usuario@maquina:~$ whoami
mi-usuario


hostname
Imprime el nombre de la máquina (esta información se obtiene del archivo /etc/hostname)

Ejemplo:
mi-usuario@maquina:~$ hostname
maquina


date
Imprime la fecha actual

Ejemplo:
mi-usuario@maquina:~$ date
vie sep  9 20:41:39 CDT 2011


cal
Imprime calendarios

Ejemplos:
mi-usuario@maquina:~$ cal

 Septiembre 2011
lu ma mi ju vi sá do
          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

mi-usuario@maquina:~$ cal -3
 Agosto 2011         Septiembre 2011         Octubre 2011      
lu ma mi ju vi sá do  lu ma mi ju vi sá do  lu ma mi ju vi sá do  
 1  2  3  4  5  6  7            1  2  3  4                  1  2
 8  9 10 11 12 13 14   5  6  7  8  9 10 11   3  4  5  6  7  8  9
15 16 17 18 19 20 21  12 13 14 15 16 17 18  10 11 12 13 14 15 16
22 23 24 25 26 27 28  19 20 21 22 23 24 25  17 18 19 20 21 22 23
29 30 31              26 27 28 29 30        24 25 26 27 28 29 30
                                            31

file
Imprime el tipo de archivo 

Ejemplo:
mi-usuario@maquina:~$ file file.txt
file.txt:           ASCII  text

Sesión 5 Ejercicio 4

Ejercicio 4: De la lista de comandos siguiente buscar la descripción, sintáxis básica y 3 variantes de cada uno (utilice los comandos para obtener información que más les convengan):

su
passwd
who
whoami
hostname
date
cal
file

Ejemplo:
comando: ls
descripción (obtenida del comando whatis): list directory contents
sintáxis básica: carmeth@Toshiba-lap:~$ ls
variante 1: ls -l
descripción variante 1 (obtenida del comando man ls): -l     use a long listing format
variante 2: ls file1
descripción variante 2: Lista el archivo file1 (en caso de que exista)
variante 3 (obtenida del comando man ls): ls -a
descripción variante 3: -a, --all   do not ignore entries starting with .

Sesión 5 Shell Scripting Loops

A continuación pongo algunos ejemplos de ciclos for que se pueden utilizar dentro de un script:

#Ejemplo de ciclo for 1
for (( x=0 ; x<=20 ; x++))
do
    echo "$x"
done


#Ejemplo de ciclo for 2
for y in {1..20}
do
    echo "Value of y is:  $y"
done



#Ejemplo de ciclo for 3
for FRUTAS in manzana uva naranja pera
do
    echo $FRUTAS
done



#Ejemplo de ciclo for 4 (Este ciclo va a ir del 1 al 20 y su incremento será de 2 en 2)
for z in {0..20..2}
do
    echo "Value is $z"
done

Sesión 5 File Globbing (expansión en terminal)

 ~ (tilde) :  Sirve para abreviar la ruta /home/usuario.

Ejemplo:
mi-usuario@maquina:~$ ls ~
examples.desktop  file1  file2  file3  tree-folder


* (comodín):  Representa 0 o más caracteres cualesquiera

Ejemplos :

mi-usuario@maquina:~$ ls

song11.mp3  song1.ogg  song2.ogg    song3.mp3  song4.mp3
song1.mp3   song2.mp3  song343.mp3  song3.ogg

mi-usuario@maquina:~$ ls *.mp3

song11.mp3  song1.mp3  song2.mp3  song343.mp3  song3.mp3  song4.mp3


mi-usuario@maquina:~$ ls *.ogg

song1.ogg  song2.ogg  song3.ogg

mi-usuario@maquina:~$ ls song3*

song343.mp3  song3.mp3  song3.ogg


? (comodín sencillo) :  Representa 1 solo caracter cual sea

Ejemplos:

mi-usuario@maquina:~$ ls

song11.mp3  song1.ogg  song2.ogg    song3.mp3  song4.mp3
song1.mp3   song2.mp3  song343.mp3  song3.ogg

mi-usuario@maquina:~$ ls song?.mp3
song1.mp3  song2.mp3  song3.mp3  song4.mp3

mi-usuario@maquina:~$ ls song?.ogg
song1.ogg  song2.ogg  song3.ogg

mi-usuario@maquina:~$ ls song??.ogg
song11.mp3

mi-usuario@maquina:~$ ls song???.ogg
song343.mp3


{} (braces) :  Expande o genera secuencias tales como numeros o letras.

Ejemplos:

mi-usuario@maquina:~$ touch file{1..4}
mi-usuario@maquina:~$ ls
file1  file2  file3  file4
mi-usuario@maquina:~$ ls file{1..3}
file1  file2  file3
mi-usuario@maquina:~$ mkdir folder{a..e}
mi-usuario@maquina:~$ ls
file1  file2  file3  file4  foldera  folderb  folderc  folderd  foldere
mi-usuario@maquina:~$ touch {f,h,w}ire
mi-usuario@maquina:~$ ls
file1  file3  fire     folderb  folderd  hire
file2  file4  foldera  folderc  foldere  wire


[[:keyword:]]  (clases de caracteres) :   Son conjuntos de caracteres con características en común como                                 pueden ser: alpha (letras), digit (números), punct (signos de puntuación), upper (mayúsculas), lower(minúsculas). Para conocer todas las clases de caracteres recomiendo ejecutar el comando man 7 glob


Ejemplos:

mi-usuario@maquina:~$ ls
file1  filea   filead  filebc  filecb  fileda  fire     folderd
file2  fileaa  fileb   filebd  filecc  filedb  foldera  foldere
file3  fileab  fileba  filec   filecd  filedc  folderb  hire
file4  fileac  filebb  fileca  filed   filedd  folderc  wire

mi-usuario@maquina:~$ ls file[[:alpha:]]
filea  fileb  filec  filed

mi-usuario@maquina:~$ ls file[[:digit:]]
file1  file2  file3  file4

mi-usuario@maquina:~$ ls file[[:alnum:]]
file1  file2  file3  file4  filea  fileb  filec  filed

mi-usuario@maquina:~$ ls file[[:alpha:]][[:alpha:]]
fileaa fileac fileba filebc fileca filecc fileda filedc
fileab filead filebb filebd filecb filecd filedb filedd


Prevenir Expansión en terminal

\ Toma literal el siguiente caracter
" "  Previene toda expansión excepto algunos símbolos (!, \, $, ')
' '   Previene toda expansión

Ejemplos:

mi-usuario@maquina:~$ touch \$\$money\$\$
mi-usuario@maquina:~$ ls
$$money$$

mi-usuario@maquina:~$ touch 'fight!!!!'
mi-usuario@maquina:~$ ls
fight!!!!

Sesión 5 Comandos para obtener ayuda y búsqueda

whatis
Imprime descripciones del manual

Ejemplo
mi-usuario@maquina:~$ ls

ls (1)               - list directory contents


apropos
Busca conforme a palabras clave del manual

Ejemplo
mi-usuario@maquina:~$ apropos bash
bash (1)             - GNU Bourne-Again SHell
bash-builtins (7)    - bash built-in commands, see bash(1)
bashbug (1)          - report a bug in bash
builtins (7)         - bash built-in commands, see bash(1)
dh_bash-completion (1) - install bash completions for package
rbash (1)            - restricted bash, see bash(1)


man
Despliega en pantalla las páginas del manual de linux (para salir de esa pantalla, presionar la tecla q ). El manual de linux se encuentra ordenado y clasificado por páginas y tipo de contenido, a continuación se enlista el número de la página y el tipo de contenido respectivamente:

1. Programas ejecutables y guiones del intérprete de órdenes
2. Llamadas del sistema
3. Llamadas de la bibilioteca
4. Ficheros especiales
5. Formato de ficheros y convenios
6. Juegos
7. Paquetes de macros y convenios
8. Órdenes de administración del sistema
9. Rutinas del núcleo



Ejemplo
mi-usuario@maquina:~$ man su

SU(1)                            User Commands                           SU(1)

NAME
       su - change user ID or become superuser

SYNOPSIS
       su [options] [username]

DESCRIPTION
       The su command is used to become another user during a login session.
       Invoked without a username, su defaults to becoming the superuser. The
       optional argument - may be used to provide an environment similar to
       what the user would expect had the user logged in directly.
- - El resto de la salida de este comando se omite - -

comando  - - help 
Muestra brevemente la sintaxis del comando indicado.

Ejemplo
mi-usuario@maquina:~$ passwd --help
Modo de uso: passwd [opciones] [USUARIO]

Options:
  -a, --all                     informa del estado de las contraseñas de todas
                                las cuentas
  -d, --delete                  borra la contraseña de la cuenta indicada
- - El resto de la salida de este comando se omite - -



whereis
Busca archivos binarios, páginas del manual y código fuente

Ejemplo
mi-usuario@maquina:~$ whereis cat

cat: /bin/cat /usr/share/man/man1/cat.1.gz


locate
Busca archivos en una base de datos (la base de datos se encuentra en la ruta/var/lib/mlocate/mlocate.db y se requiere ejecutar al menos una vez el comando updatedb para actualizar esta base ) por nombre
Ejemplo
mi-usuario@maquina:~$ locate passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/chpasswd
/etc/pam.d/passwd
/etc/security/opasswd
/home/eddye/backup-passwd
/home/eddye/.jd/plugins/webinterface/passwd.tmpl
- - El resto de la salida de este comando se omite - -

find
Busca de manera jerárquica y exhaustiva archivos y/o carpetas
Ejemplo:
mi-usuario@maquina:~$ find /etc passwd

/etc/gnashrc
/etc/rc0.d
/etc/rc0.d/S90halt
/etc/rc0.d/README
/etc/rc0.d/S40umountfs
/etc/rc0.d/K20vboxweb-service
/etc/rc0.d/S60umountroot
- - El resto de la salida de este comando se omite - -