jueves, 26 de abril de 2012

Trabajos programados en cola - comando "at"


El comando at lo utilizamos si queremos colococar en una cola un trabajo ó tarea para ser ejecutado en un tiempo especifico. La orden at a diferencia de las tareas del cron se ejecuta solo una vez y desaparece de la cola, mientras que las tareas del cron se ejecutan periodicamente en el horario que se le especifique.

Sintaxis

  • at [-V] [-q queue (cola)] [-f file (archivo)] [-mldv (opciones)] tiempo [fecha]
  • El tiempo puede ser: HH:MM se puede colocar el sufijo AM ó PM, midnight (12:00am), noon (12:00pm), or teatime (4:00pm)
  • La fecha se puede especificar de la siguiente manera: MMDDYY, MM/DD/YY, today, tomorrow. Nota: si se coloca solo la hora y no se especifica fecha, se asume como “today” que seria el dia actual.

Ordenes del at

  • atq: despliega los trabajos en cola.
  • atrm numero_trabajo: elimina un trabajo de la cola.

Archivos Generales

/etc/at.allow → Usuario permitidos
/etc/at.deny → Usuarios denegados


Ejemplo

* Creo un trabajo en la cola “c” a ejecutarse el dia de mañana a las 21:55.
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ at -q c 21:55 tomorrow
warning: commands will be executed using /bin/sh
at> free > /home/johnny/Documents/pruebas/carpeta1/carpeta2/free.txt
at> <EOT>
job 9 at Mon Apr 9 21:55:00 2012

* Muestro el trabajo creado.
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ atq
9 Mon Apr 9 21:55:00 2012 c johnny

* Creo dos nuevos trabajos a ejecutarse el dia de hoy. Si no se especifica un numero de cola toma por defecto la cola “a”
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ at 21:57
warning: commands will be executed using /bin/sh
at> uptime > /home/johnny/Documents/pruebas/carpeta1/carpeta2/uptime.txt
at> <EOT>
job 10 at Sun Apr 8 21:57:00 2012
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ atq
10 Sun Apr 8 21:57:00 2012 a johnny
9 Mon Apr 9 21:55:00 2012 c johnny

johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ at 22:00
warning: commands will be executed using /bin/sh
at> date > /home/johnny/Documents/pruebas/carpeta1/carpeta2/date.txt
at> <EOT>
job 12 at Sun Apr 8 22:00:00 2012
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ atq
10 Sun Apr 8 21:57:00 2012 a johnny
9 Mon Apr 9 21:55:00 2012 c johnny
12 Sun Apr 8 22:00:00 2012 a johnny

* Elimino de la cola el trabajo a ejecutarse el dia de Lunes 9 de Abril, trabajo #9.
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ atrm 9
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ atq
10 Sun Apr 8 21:57:00 2012 a johnny
12 Sun Apr 8 22:00:00 2012 a johnny

miércoles, 25 de abril de 2012

Administrador de procesos cron


El cron es un administrador de procesos que se encarga de ejecutar tareas periodicas en un tiempo especifico. Los procesos o tareas que deben ser ejecutados por el demonio cron, se encuentran en el fichero crontab de cada usuario. Estos son procesos que se ejecutan en segundo plano (demonios).


Sintaxis

  • Tiempo de ejecución
      * Minutos (0-59)
      * Horas (0-23)
      * Día del mes (1-31)
      * Meses (1-12) ó (jan, feb, mar, apr, may, jun, jul, aug,sep, oct, nov, dec)
      * Día de la Semana (1-7) ó (mon, tue,wed, thr,fri, sat,sun). El Domingo puede ser el 0 ó el 7.
  • Usuario de ejecución.
  • Comando a ejecutar. (PATH ABSOLUTO)

Se pueden utilizar las siguientes opciones como comodines:

  • Asterisco “*” → Todos
  • Guión “-” → Rango (defino rango o periodo)
  • Coma “,” → Selectivo (defino minutos, horas, meses, dias de la semana en especifico)
  • Intervalos “/” → Intervalos


Opciones a utilizar con el comando crontab

  • -l → Lista el contenido del crontrab
  • -r → elimina el crontab actual
  • -e → crea un nuevo crontab para el usuario en caso de no existir ó edita el crontab actual del usuario.


Archivos Generales

/etc/crontab → Se encuentra el archivo general del sistema
/var/spool/cron/crontabs → Se encuentra el archivo crontab de cada usuario

/etc/cron.allow → Usuario permitidos
/etc/cron.deny → Usuarios denegados

/etc/init.d/cron status → Verifico el estado del proceso cron. Puedo utilizar cualesquier de las siguientes opciones (status, stop, star, restart, reload)


Ejemplo:
A modo de ejemplo colocare la misma tarea a ejecutar, pero en diferentes horarios de modo de practicar la sintaxis del crontab.

  1. Ejecuta la tarea todos los dias, a cada hora, en el minuto 25.
min | hr | dia_mes | mes | dia_semana | usuario | Comando
25     *           *            *        *    cp /home/usuario/prueba/* /tmp/

  1. Ejecuta la siguiente tarea cada 5 minutos.
min | hr | dia_mes | mes | dia_semana | usuario | Comando
*/5 * * * * cp /home/usuario/prueba/* /tmp/

  1. Se ejecuta cada minuto durante los primero 15 minutos, entre las horas 2 y 4 todos los meses, siempre y cuando el dia sea Domingo.
min    |    hr    | dia_mes | mes | dia_semana | usuario | Comando
1-15     2-4          3,7         *          7                   cp /home/usuario/prueba/* /tmp/

Prioridad en los procesos con “nice” y “renice”


Utilizamos las ordenes:

  • nice: para ejecutar un proceso con una prioridad inicial. Su valor por defector es 10.
  • renice: para alterar la prioridad de un proceso ya iniciado.

Las prioridades pueden variar entre -20 y 19, siendo la prioridad negativa la mas alta.

Nota: un usuario no puede iniciar o alterar la prioridad de un proceso a prioridad negativa a menos que sea tenga permisos o sea root.

Sintaxis:

nice -n [prioridad negativa/positiva] orden
renice -n [prioridad negativa/positiva] orden


A continuacion se vera un ejemplo donde ejecutamos varias veces un proceso xclock con distintas prioridades:

- Inicia proceso con prioridad 0
johnny@debianJG:~$ xclock &
[3] 2853

- Inicia proceso con prioridad 10
johnny@debianJG:~$ nice xclock &
[4] 2856

- Inicia proceso con prioridad 5
johnny@debianJG:~$ nice -n 5 xclock &
[5] 2857

- Intenta iniciar proceso con prioridad negativa -5 y nos da un error por no tener permisos, deja prioridad 0.
johnny@debianJG:~$ nice -n -5 xclock &
[6] 2858
johnny@debianJG:~$ nice: cannot set niceness: Permission denied
johnny@debianJG:~$ top
top - 22:29:58 up 1:35, 2 users, load average: 0.11, 0.06, 0.01
Tasks: 157 total, 2 running, 155 sleeping, 0 stopped, 0 zombie
Cpu(s): 5.3%us, 1.2%sy, 0.0%ni, 91.7%id, 1.7%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 2853196k total, 1023116k used, 1830080k free, 264020k buffers
Swap: 1951736k total, 0k used, 1951736k free, 401024k cached

PID PPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2867 2450 johnny 20 0 2456 1116 832 R 4 0.0 0:00.04 top
2858 2450 johnny 20 0 7968 3012 2420 S 0 0.1 0:00.04 xclock
2857 2450 johnny 25 5 7968 3012 2420 S 0 0.1 0:00.04 xclock
2856 2450 johnny 30 10 7968 3012 2420 S 0 0.1 0:00.05 xclock
2853 2450 johnny 20 0 7968 3016 2420 S 0 0.1 0:00.06 xclock


Cambiamos la prioridad del proceso 2853a prioridad negativa -10, usando root.

root@debianJG:~# renice -n -10 2853
2853: old priority 0, new priority -10
johnny@debianJG:~$ top
top - 22:40:15 up 1:46, 2 users, load average: 0.10, 0.06, 0.01
Tasks: 159 total, 2 running, 157 sleeping, 0 stopped, 0 zombie
Cpu(s): 28.5%us, 0.7%sy, 0.0%ni, 70.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2853196k total, 1026396k used, 1826800k free, 264536k buffers
Swap: 1951736k total, 0k used, 1951736k free, 401356k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2858 johnny 20 0 7968 3012 2420 S 0 0.1 0:00.04 xclock
2857 johnny 25 5 7968 3012 2420 S 0 0.1 0:00.05 xclock
2856 johnny 30 10 7968 3012 2420 S 0 0.1 0:00.06 xclock
2853 johnny 10 -10 7968 3016 2420 S 0 0.1 0:00.06 xclock

Evitar sobreescribir archivos con redirecciones


A continuación explicare brevemente como evitar sobreescribir archivos existente cuando intentamos usar redirecciones en Debian squeeze. Esto puede variar dependiendo de la distribucion.

  • Usar el comando set -o noclobber para evitar que se que sobreescriba un archivo existente.
  • Si queremos quitar la proteccion ultilizamos >|
  • Si queremos que la proteccion se presente de forma permanente debemos incluir el comando set -o noclobber en el shell predeterminado del usuario. Ejemplo: .bashrc, .cshrc, entre otros.
Veamos los siguientes ejemplos:

johnny@debianJG:~/Documents/pruebas$ free > archivo1
johnny@debianJG:~/Documents/pruebas$ cat archivo1
total used free shared buffers cached
Mem: 2853196 1038132 1815064 0 269776 403900
-/+ buffers/cache: 364456 2488740
Swap: 1951736 0 1951736
johnny@debianJG:~/Documents/pruebas$ ls -l archivo1
-rw-r--r-- 1 johnny johnny 230 Apr 5 22:14 archivo1
johnny@debianJG:~/Documents/pruebas$ set -o noclobber
johnny@debianJG:~/Documents/pruebas$ uptime > archivo1
bash: archivo1: cannot overwrite existing file

johnny@debianJG:~/Documents/pruebas$ ls >| archivo1
johnny@debianJG:~/Documents/pruebas$ cat archivo1
!
archivo1
archivo2
archivo3
archivo4
-C
d
este>archivo
mi archivo
ooooo
-V

martes, 24 de abril de 2012

Redirecciones en Linux (Entradas, Salidas y Error estandar)


En linux se tiene 3 maneras estandar de mostrar los flujos de información de entrada y salida, estos son los siguientes:

  • Entrada estandar (stdin – Standard Input): generalmente asociada al teclado. Esta representada con el número 0.
  • Salida estandar (stdout – Standard Output): usada para mostrar la salida, generalmente la salida por el monitor. Esta representada con el número 1.
  • Salida estandar de error (stderr – Standard Error): usada para mostrar los errores de la salida estandar. Esta representada con el número 2.

Se utilizan los siguientes simbolos para redireccionar la entrada/salida estandar:

Mayor que “>”: Redirige la salida estandar, tambien se puede utilizar de la forma 1>, aunque si se omite el numero 1, el valor por defecto de la salida es 1.  

Menor que “<”: Redirige la entrada estandar.

Utilizar “>>” para redirigir la salida a un archivo ya existente sin sobreescribir su contenido.

Veamos algunos ejemplos para mayor entedimiento:

 
1) Redireccionando la salida estandar “>”
 
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ who
johnny tty7 2012-04-02 13:41 (:0)
johnny pts/0 2012-04-02 13:41 (:0.0)
johnny pts/1 2012-04-02 14:32 (:0.0)

- Redirecciono la salida estandar a un archivo: usuario_conect.txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$who > usuario_conect.txt

Nota: Si el archivo existe, se sobreescribe el contenido. Si queremos añadir la salida a un archivo ya existente utilizar >>.

- Listo el archivo
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ cat usuario_conect.txt
johnny tty7 2012-04-02 13:41 (:0)
johnny pts/0 2012-04-02 13:41 (:0.0)
johnny pts/1 2012-04-02 14:32 (:0.0)

- Añadiendo el resultado de la salida estandar al archivo usuario_conect.txt”

johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ ls >> usuario_conect.txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ cat usuario_conect.txt
johnny tty7 2012-04-02 13:41 (:0)
johnny pts/0 2012-04-02 13:41 (:0.0)
johnny pts/1 2012-04-02 14:32 (:0.0)
archivo2
carpeta3
mi_lista
tmp.txt
tmp2.txt
tmpfile
usuario_conect.txt 



2) Redireccionando la entrada estandar “<”

Un ejemplo sencillo que podemos ver, es contar la cantidad de lineas que posee el archivo lineas.txt”

johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2/carpeta3$ wc -l < lineas.txt
34



3) Redireccionando el error estandar “2>”

  • La redireccion de stdout no afectara a stderr o stdin. 
  • Los mensajes de error se muestran en stderr
  • Para redireccionar el error (stderr) a un archivo lo realizamos con 2>.
  • La redireccion de stderr no afectara a stdout ni a stdin.

Veamos algunos ejemplos:

- Voy a listar un archivo que no existe, de formar de producir un error, veamos lo que pasa.

johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ ls dir
ls: cannot access dir: No such file or directory

johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ ls dir > error .txt
ls: cannot access dir: No such file or directory

johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ cat error .txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$

- Vemos que el archivo error, no contiene nada (La redireccion de stdout no afectara a stderr ni a stdin) 

- Ahora redireccionamos la salida de error al archivo error.txt

johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ ls dir 2> error.txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ cat error.txt
ls: cannot access dir: No such file or directory 

- "Tambien podemos enviar añadir la salida de error a un archivo con 2>> ya existente sin necesidad de sobreescribirlo. Nota: si lo realizamos de la forma 2> y el archivo existe, se sobreescribe y si no existe lo genera."


johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ ls -l mi_casa 2>> error.txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ cat error.txt
ls: cannot access dir: No such file or directory
ls: cannot access mi_casa: No such file or directory


- Existe un archivo especial llamado /dev/null para deshacerse de datos indeseados.

johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ ls -l dir 2> /dev/null
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$

- La sentencia anterior indica que si el archivo listado no existe, que no muestre el error y se deshaga del mismo.



4) Redireccionando tanto salida estandar (stdout) como error estandar (stderr) a un solo archivo “&> ó 2>&1”


- Con la forma &> podemos enviar tanto el stdout como el stderr a un solo archivo.

johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ ls -l aa &> secuencia.txt 
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ cat secuencia.txt
ls: cannot access aa: No such file or directory
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ ls -l aa &>> secuencia.txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ cat secuencia.txt
ls: cannot access aa: No such file or directory
ls: cannot access aa: No such file or directory
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ ls -l &>> secuencia.txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ cat secuencia.txt
ls: cannot access aa: No such file or directory
ls: cannot access aa: No such file or directory
total 36
-rw-r--r-- 1 johnny johnny 0 Mar 11 12:32 archivo2
drwxrwxrwx 2 johnny johnny 4096 Apr 2 17:28 carpeta3
-rw-r--r-- 1 johnny johnny 102 Apr 2 17:58 error.txt
-rw-r--r-- 1 johnny johnny 2547 Mar 14 00:15 mi_lista
-rw-r--r-- 1 johnny johnny 566 Apr 2 18:06 registro.txt
-rw-r--r-- 1 johnny johnny 102 Apr 2 18:28 secuencia.txt
-rw-r--r-- 1 johnny johnny 482 Mar 14 00:41 tmp.txt
-rw-r--r-- 1 johnny johnny 346 Mar 14 00:39 tmp2.txt
-rw-r--r-- 1 johnny johnny 346 Mar 14 00:35 tmpfile
-rw-r--r-- 1 johnny johnny 211 Apr 2 17:12 usuario_conect.txt


- Una forma muy usada de listar tanto la salida estandar como la salida de un error a un solo archivo es la siguiente. 2>&1, la cual desvia la salida estándar de errores a la salida estándar, de esta manera podemos tener un archivo en donde se guarden tanto la salida exitosa como la de error de algun srcript en un solo archivo

 
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ ls -l > registro.txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ cat registro.txt
total 28
-rw-r--r-- 1 johnny johnny 0 Mar 11 12:32 archivo2
drwxrwxrwx 2 johnny johnny 4096 Apr 2 17:28 carpeta3
-rw-r--r-- 1 johnny johnny 102 Apr 2 17:58 error.txt
-rw-r--r-- 1 johnny johnny 2547 Mar 14 00:15 mi_lista
-rw-r--r-- 1 johnny johnny 0 Apr 2 18:00 registro.txt
-rw-r--r-- 1 johnny johnny 482 Mar 14 00:41 tmp.txt
-rw-r--r-- 1 johnny johnny 346 Mar 14 00:39 tmp2.txt
-rw-r--r-- 1 johnny johnny 346 Mar 14 00:35 tmpfile
-rw-r--r-- 1 johnny johnny 211 Apr 2 17:12 usuario_conect.txt

johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ ls -l noexiste >> registro.txt 2>&1
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ cat registro.txt
total 28
-rw-r--r-- 1 johnny johnny 0 Mar 11 12:32 archivo2
drwxrwxrwx 2 johnny johnny 4096 Apr 2 17:28 carpeta3
-rw-r--r-- 1 johnny johnny 102 Apr 2 17:58 error.txt
-rw-r--r-- 1 johnny johnny 2547 Mar 14 00:15 mi_lista
-rw-r--r-- 1 johnny johnny 0 Apr 2 18:00 registro.txt
-rw-r--r-- 1 johnny johnny 482 Mar 14 00:41 tmp.txt
-rw-r--r-- 1 johnny johnny 346 Mar 14 00:39 tmp2.txt
-rw-r--r-- 1 johnny johnny 346 Mar 14 00:35 tmpfile
-rw-r--r-- 1 johnny johnny 211 Apr 2 17:12 usuario_conect.txt
ls: cannot access noexiste: No such file or directory  

 

Uso de Tuberias


Tuberias

Con el uso de la tuberia, la cual es representada con el caracter especial “|” (pipe), podemos conectar la salida estandar de un comando a la entrada estandar de otro comando, es decir, las tuberias nos permiten conectar comandos.

El uso de las tuberias nos permite realizar operaciones complejas con multiples comandos.

Veamos algunos Ejemplos:

johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2/carpeta3$ ls -l
total 92
-rw-r--r-- 1 johnny johnny 0 Mar 14 00:09 a.txt
-rw-r--r-- 1 johnny johnny 50 Mar 13 23:25 archdir
-rw-r--r-- 1 johnny johnny 0 Mar 11 14:57 archivo3
-rw-r--r-- 1 johnny johnny 23 Mar 19 22:00 b.txt
-rw-r--r-- 1 johnny johnny 1132 Mar 13 23:32 bdir
-rw-r--r-- 1 johnny johnny 52 Mar 19 22:03 c.txt
-rw-r--r-- 1 johnny johnny 143 Mar 13 23:22 calendario
-rwxr--r-- 1 johnny johnny 71 Mar 22 00:00 cola.sh
-rw-r--r-- 1 johnny johnny 54 Mar 11 17:04 copia.prueba2.txt
-rw-r--r-- 1 johnny johnny 24 Mar 13 23:34 copia_ip.sh
-rw-r--r-- 1 johnny johnny 45 Mar 12 21:23 cut.txt
-rw-r--r-- 1 johnny johnny 1176 Mar 13 23:29 dir
-rw-r--r-- 1 johnny johnny 335 Mar 19 21:57 hola
-rw-r--r-- 1 johnny johnny 319 Mar 12 21:19 hola.txt
-rw-r--r-- 1 johnny johnny 23 Mar 12 18:26 hola1
-rw-r--r-- 1 johnny johnny 335 Mar 11 17:18 hola2.txt
-rw-r--r-- 1 johnny johnny 373 Mar 11 17:20 hola3.txt
-rwxr-xr-x 1 johnny johnny 24 Mar 12 16:52 ip.sh
-rw-r--r-- 1 johnny johnny 141 Mar 13 23:33 mdir
-rw-r--r-- 1 johnny johnny 69 Mar 13 23:56 mensaje
-rw-r--r-- 1 johnny johnny 1621 Mar 12 20:22 neruda.txt
-rw-r--r-- 1 johnny johnny 190 Mar 14 00:08 nuevoarchivo
-rw-r--r-- 1 johnny johnny 193 Mar 11 17:08 prueba.txt
-rw-r--r-- 1 johnny johnny 44 Mar 11 16:58 prueba2.txt
-rw-r--r-- 1 johnny johnny 23 Mar 11 14:59 suma.sh

johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2/carpeta3$ ls -l | grep hola
-rw-r--r-- 1 johnny johnny 335 Mar 19 21:57 hola
-rw-r--r-- 1 johnny johnny 319 Mar 12 21:19 hola.txt
-rw-r--r-- 1 johnny johnny 23 Mar 12 18:26 hola1
-rw-r--r-- 1 johnny johnny 335 Mar 11 17:18 hola2.txt
-rw-r--r-- 1 johnny johnny 373 Mar 11 17:20 hola3.txt

Con esto logramos que la salida del comando “ls” sea la entrada del comando “grep” el cual filtrara dicha entrada con la palabra “hola”.

Tambien podemos conectar varias ejecuciones de comandos, con el uso de tuberias multiples.

Basandonos en el ejemplo anterior pordemos realizar lo siguiente:

johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2/carpeta3$ ls -l | grep hola
-rw-r--r-- 1 johnny johnny 335 Mar 19 21:57 hola
-rw-r--r-- 1 johnny johnny 319 Mar 12 21:19 hola.txt
-rw-r--r-- 1 johnny johnny 23 Mar 12 18:26 hola1
-rw-r--r-- 1 johnny johnny 335 Mar 11 17:18 hola2.txt
-rw-r--r-- 1 johnny johnny 373 Mar 11 17:20 hola3.txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2/carpeta3$ ls -l | grep hola | wc -l
5

El comando “wc -l” nos permite contar la cantidad de lineas recibida del filtrado relizado por el comando “grep”.

Uso de Comillas en la shell


  • “ “ Comillas dobles, interpretan los caracteres $, \ y ' ' que estan en la cadena o string.

  • ' ' Comillas simples, interpretan el string dentro de las comilla como si fuese literales, es decir, si hay comando dentro de las comillas simples, los mismos no son interpratados. Nota: Estas comillas equivalen a las comillas inclinadas hacia la derecha en sistemas operativos como Solaris.

  • ` ` Comillas inclinadas hacia la izquierda, ejecutan el string entre la comillas como si fuera un comando.


Nota: El caracter especial "backslash \", sirve para escapar cualquier caracter especial, es decir, al precedir cualquier caracter especial que sea interpretado como parte de un comando, este se mostrara en su forma literal.


Ejemplo:


Comillas dobles “ “

johnny@debianJG:~/Documents/pruebas/abecedario$ echo "Probando el uso de comillas doble, se debe imprimir: debe interpretar los caracteres $, \ y \`\`"
Probando el uso de comillas doble, se debe imprimir: debe interpretar los caracteres $, \ y ``

johnny@debianJG:~/Documents/pruebas/abecedario$ echo "1) $ Muestro valor de la variable OLDPWD: $OLDPWD."
1) $ Muestro valor de la variables OLDPWD: /home/johnny/Documents/pruebas.

johnny@debianJG:~/Documents/pruebas/abecedario$ echo "2) \ Interpretando el backslash puedo mostrar las comillas \`\`."
2) \ Interpretando el backslash puedo mostrar las comillas ``.

johnny@debianJG:~/Documents/pruebas/abecedario$ echo "3) Ejecutando comando con las comillas invertidas muestro el valor de comando PWD: `pwd`"
 3) Ejecutando comando con las comillas invertidas muestro el valor de comando PWD:  /home/johnny/Documents/pruebas/abecedario


Comillas simples ' '

johnny@debianJG:~/Documents/pruebas/abecedario$ echo 'Imprime los caracteres especiales en su forma literal, es decir, sin interpretarlos: $ODLPWD, `pwd`, \`\`'
Imprime los caracteres especiales en su forma literal, es decir, sin interpretarlos: $ODLPWD, `pwd`, \`\`


Comillas inclinadas hacia la izquierda ` `

johnny@debianJG:~/Documents/pruebas/abecedario$ echo `pwd`
/home/johnny/Documents/pruebas/abecedario