20 de noviembre de 2008
Cómo modificar la zona horaria en Solaris
Buscaremos una línea que inicia con TZ, que, en realidad es la asignación de una variable de ambiente que podría lucír así:
TZ=US/Eastern
Si quisieramos cambiar esta zona (Esta de Estados Unidos, Florida, NY, etc), habría que modificar por algo como:
TZ="America/Mexico_City"
Y reiniciamos el servidor.
Ahora, suponiendo que sólo queramos modificar la zona horaria para nuestra sesión, entónces se necesario sobreescribir el valor de esta variable de ambiente. Veamos el siguiente ejemplo:
> echo $TZ
America/Mexico_City
> date
Fri Dec 5 11:09:38 CST 2008
> setenv TZ "US/Eastern"
> date
Fri Dec 5 12:09:57 EST 2008
> echo $TZ
US/Eastern
En realidad lo único que sucedió fue que ocurrió un ajuste en el tiempo, pero la hora del sistema en sí nunca se modificó. Es decir, si en este momento son las 11:09 CST, entónces en Florida son las 12:09 EST.
Lo mismo sucedería si cambiáramos la zona horaria y quisiéramos tener nuestro reloj puesto a GMT o UTC, veamos:
> echo $TZ
America/Mexico_City
> date
Fri Dec 5 11:15:57 CST 2008
> export TZ="UTC"
> date
Fri Dec 5 17:16:18 UTC 2008
Ahora, lo mismo que en el primer ejemplo, si en la Cd de México son las 11:15 CST, la hora UTC sería las 17:16. Recuerden que la zona horaria del centro de México es GMT-6 (UTC-6).
En sí, es muy importante recordar que la hora como tal no cambia, sólo se ajusta a la zona horaria. Para cambiar la hora y fecha (mas no la zona horaria), utilícese date.
Saludos!
Comandos para monitorear el desempeño en Solaris
sar
-d => display activity for all block device
-g/p => paging activities
-m => message & semaphore activities
-u => CPU utilization
-v => Reports status of process, i-node, file tables
2. iostat (Input/Output Statistics) en Solaris
Esta herramienta reporta de manera iterativa la actividad de E/S de terminales, discos y cintas, así como el uso del CPU.
La sintáxis típica del comando es algo como lo siguiente:
> iostat 1 5
Esto significa que cada intervalo de 1 segundo y por 5 veces, el comando nos mostrará
Esto es, se nos muestra infomación dividida por 6 bloques de columnas, el primer bloque (tty), concentra dos datos tin y tout, aquí lo que se muestra son los caracteres de entrada y de salida.
tty sd21 sd23 sd24 sd25 cpu
tin tout kps tps serv kps tps serv kps tps serv kps tps serv us sy wt id
0 76 0 0 0 3 0 17 192 3 75 17 3 7 3 3 22 72
0 693 0 0 0 0 0 0 0 0 0 17 4 6 0 3 48 48
0 670 0 0 0 0 0 0 8 2 5 17 4 8 1 4 24 70
0 670 0 0 0 0 0 0 9 2 12 17 4 11 2 5 24 68
0 670 0 0 0 0 0 0 384 3 7 8 2 9 8 8 40 44
Cada uno de estos discos tiene tres columnas que significan:
- kps: Bloques por segundo.
- tps: Transacciones por segundo.
- serv: Tiempo de servicio promedio, en mlisegundos.
- us: En modo usuario.
- sy: En modo de sustema.
- wt: En espera de E/S.
- id: En modo idle.
Las líneas siguientes se refieren a los datos obtenidos desde el momento de la última iteración hasta un segundo después (para efectos del ejemplo, aunque puede elejirse cualquier otro valor).
Sobre este comando, exíste una variante en la cual podemos ver estadísticas extendidas
> iostat -xtc
Una salida típica de este comando sería:
En donde cada columna significa:
extended device statistics tty cpu
device r/s w/s kr/s kw/s wait actv svc_t %w %b tin tout us sy wt id
sd21 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 0 0 0 0 100
sd22 0.0 0.0 0.4 0.4 0.0 0.0 49.5 0 0
sd23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
- r/s: Lecturas por segundo.
- w/s: Escrituas por segundo.
- Kr/s: Kb leídos por segundo.
- Kw/s: Kb escritos por segundo.
- wait: Número promedio de transacciones en espera de servicios (Longitud de la cola)
- actv: Número promedio de transacciones activamente servidas.
- svc_t: Tiempo promedio de servicio.
- %w: Porcentaje de tiempo en que la cola no está vacía.
- %b: Porcentaje de tiempo en que el procesador está ocupado.
3. lsof (LiSt of Opened Files)
Para tener una idea de qué procesos tienen abiertos archivos reulares, directorios, sockets (Unix e Internet), archivos especiales de bloques, etc; podemos servirnos del comando lsof, que aunque no es nativo de SunOS, se puede incorporar bajando el paquete de http://www.sunfreeware.com/ En donde se encuentra disponible para solaris 6, 8, 9 y 10.
La sintáxis típica es
> lsof
4. vmstat (Virtual Memory Statistics)
Reporta estadísticas del uso de la memoria virtual sobre los hilos del kernel, discos, memoria virtual, traps y actividad del CPU.
La sintáxis simple es:
> vmstat
Y su salida es:
kthr memory page disk faults cpuEn este caso
r b w swap free re mf pi po fr de sr s3 -- -- -- in sy cs us sy id
0 0 0 3557544 166696 553 1866 6 3 3 0 0 8 0 0 0 397 10621 2212 9 12 78
- kthr: Reporta el número de hilos del kernel en cualquiera de los siguientes estados:
- r: El número de hilos en la cola de ejecución
- b: El número de hilos bloqueados, en espera de recursos de E/S.
- w: El número de procesos ligeros (LWPs) en swap, esperando por ecursos para finalizar.
- Report the number of kernel threads in each
memory Report on usage of virtual and real memory.
swap available swap space (Kbytes)
free size of the free list (Kbytes)
page Report information about page faults and
paging activity. The information on each of
the following activities is given in units
per second.
re page reclaims - but see the -S
option for how this field is modi-
fied.
mf minor faults - but see the -S
option for how this field is modi-
fied.
pi kilobytes paged in
po kilobytes paged out
fr kilobytes freed
de anticipated short-term memory
shortfall (Kbytes)
sr pages scanned by clock algorithm
When executed in a zone and if the pools
facility is active, all of the above (except
for "de") only report activity on the pro-
cessors in the processor set of the zone's
pool.
disk Report the number of disk operations per
second. There are slots for up to four
disks, labeled with a single letter and
number. The letter indicates the type of
disk (s = SCSI, i = IPI, and so forth); the
number is the logical unit number.
faults Report the trap/interrupt rates (per
second).
in interrupts
sy system calls
cs CPU context switches
When executed in a zone and if the pools
facility is active, all of the above only
report actitivity on the processors in the
processor set of the zone's pool.
cpu Give a breakdown of percentage usage of CPU
time. On MP systems, this is an average
across all processors.
us user time
sy system time
id idle time
> vmstat 2 5
kthr memory page disk faults cpuAún con lo que hemos visto hay otra opción interesante para este comando que es el switch -p
r b w swap free re mf pi po fr de sr s3 -- -- -- in sy cs us sy id
0 0 0 3557544 166696 553 1866 6 3 3 0 0 8 0 0 0 397 10621 2212 9 12 78
2 0 0 3437616 159800 2128 5211 0 0 0 0 0 0 0 0 0 438 13856 2318 35 19 46
5 0 0 3437616 159792 2324 5604 0 0 0 0 0 1 0 0 0 425 14711 2391 39 20 41
0 0 0 3439064 161616 200 552 0 4 4 0 0 2 0 0 0 362 7254 2126 9 6 86
0 0 0 3439064 161616 7 80 0 0 0 0 0 0 0 0 0 352 6649 2099 6 4 90
> vmstat -p 2 3
Cuya salida sería como esta:
memory page executable anonymous filesystem
swap free re mf fr de sr epi epo epf api apo apf fpi fpo fpf
3555664 166616 553 1867 3 0 0 3 0 0 0 0 0 3 3 3
3439168 157080 7 93 0 0 0 0 0 0 0 0 0 0 0 0
3439160 157072 7 80 0 0 0 0 0 0 0 0 0 0 0 0
Como se observa, se agregan nuevas columnas, esto debido a que el modificador -p hace que vmstat reporte también la actividad de la paginación. Las columnas nuevas significan:
epi Executable page-ins.
epo Executable page-outs.
epf Executable page-frees.
api Anonymous page-ins.
apo Anonymous page-outs.
apf Anonymous page-frees.
fpi File system page-ins.
fpo File system page-outs.
fpf File system page-frees.
Debe decirse que en equipos multiprocesadores, vmstat presenta estadísticas promedio de los procesadores. A fin de tener los datos específicos de cada uno de ellos es necesario usar mpstat, herramienta que se describe a continuación.
5. mpstat (Multi Processor Statistics)
Este comando devuelve reportes estadísticos de cada uno de los procesadores o bien, por grupo de procesadores.
La sintáxis común es:
> mpstat
Y su salida es:
Esto significa básicamente que en el sistema tenemos instalados dos procesadores, y si revisamos las cuatro últimas columnas encontraremos algo interesante, ahí se describe el porcentaje que el procesador ha dedicado a procesos de usuario (usr), procesos de sistema (sys), así como el porcentaje de tiempo que ha pasado esperando por E/S (wt) y finalmente el porcantaje de tiempo que el procesador ha estado inactivo (idl).
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 1028 0 177 353 243 1083 30 366 62 0 5631 10 13 0 77
1 839 0 205 44 14 1129 29 365 51 0 4990 9 12 0 79
El resto de las columnas son:
- minf: Fallas menores
- mjf: Fallas mallores
- xcal: Llamadas cruzadas interprocesadores.
- intr: Interrupciones.
- ithr: Interrupciones como hilos.
- csw: Cambios de contexto
- icsw: Cambios involuntario de contexto
- migr: Migración de hilos (a otros procesadores)
- smtx: Spins en mutexes (bloqueo no adquirido en el primerintento)
- srw: Spins en bloqueos de lectura/escritura (bloqueo no adquirido en el primerintento)
- syscl: Llamadas al sistema
- set: Grupo de procesadores al que se pertenece
- usr: Porcentaje de tiempo en procesos de usuario.
- sys: Porcentaje de tiempo en procesos de sistema.
- wt: El tiempo de espera de E/S no se calcula ya como porcentaje de tiempo de CPU, por lo tanto siempre va a regresar 0 su medición.
- idl: Porcentaje de tiempo sin utilizar.
6. Comandos proc (Processes Commands)
Este conjunto de comandos toma información sobre
- pflags:
- pcred
- pldd
- psig
- pstack
- pfiles
- pstop
- prun
- pwait
- ptime
19 de noviembre de 2008
Algunas consultas útiles de SQL para Oracle
1. Volcado de la salida de una consulta hacia un archivo
col SEGMENT_NAME format a25
col owner format a7
spool /tmp/datos.txt
select (columnaA"@@"columnaB) from miTabla;
spool off;
Primero modificamos el formato de la salida, despues indico que quiero que los datos se vayan hacia el archivo /tmp/datos.txt, ejecuto mi consulta agregando como separador de campos una doble arroba, para manipularlos facilmente y finalmente termino el proceso de volcado. Cabe mencionar que pueden mandar tantas consultas como necesiten.
2. Revisión del tamaño de los datafiles
Mediante esta consulta podrán ver el tamaño que tienen disponible sus datafiles y darse una idea de si necesitan incrementarlos o crear alguno nuevo.
3. Revisión del tamaño de los tablespace_names
select TABLESPACE_NAME, sum(BYTES) BYTES from dba_data_files group by TABLESPACE_NAME ;
Con esta consulta ppodrán ver el tamaño en bytes de sus tablespace names.
4. Revisión de todos los procesos del SO que actualmente acceden a la BdD
select ADDR, PID, SPID, USERNAME, SERIAL#, TERMINAL, PROGRAM, BACKGROUND, LATCHWAIT, LATCHSPIN from v$process;
La salida de esta consulta indica los procesos del sistema operativo que están accediendo a la base de datos. Con esto, se podrán dar cuenta qué proceso se quedó colgado, o quién está usando mucha memoria.
5. Revisión de un proceso particular del SO en la BdD
SELECT b.sid SID,b.serial# "Serial#", c.spid "srvPID", b.osuser, b.username, b.status, b.client_info,b.program,b.LOGON_TIME,d.sql_text,b.machine FROM v$session b, v$process c, v$sqlarea dWHERE b.paddr = c.addr and b.sql_hash_value=d.hash_value and b.sql_address=d.addressand c.sPID = &OSPID
Esta consulta lo ayudará a determinar específicamente si un proceso en particular del OS está acediendo a la base de datos.
6. Consulta de los índices asociados a una tabla en particular
select * from all_indexes where table_name = 'miTabla';
Mediante esta consulta podráns saber los nombres de los índices asociados a una tabla en particular.
7. Consulta de la columna asociada a un índice en particular.
select * from all_ind_columns where index_name = 'miIndice';
Devuelve el nombre de la columna que está indexada por un índice en particular.
8. Creación de un índice para una columna.
CREATE INDEX miIndice ON miTabla(columnaA) tablespace INDX;
9. Creación de un índice para varias columnas.
CREATE INDEX miIndice ON miTabla(columnaA,ColumnaB,..,ColumnaZ) tablespace INDX;
10. Eliminación de un índice.
DROP INDEX miBase.miIndice;
11. Alteración del tamaño de los maxextents para un índice.
ALTER INDEX miBase.miIndice STORAGE (maxextents unlimited); (Para hacerlo ilimitado)
ALTER INDEX miBase.miIndice STORAGE (maxextents 8192); (Para darle un tamaño de 8Mb)
12. Alteración del tamaño de los maxextents para una tabla.
ALTER TABLE miBase.miTabla STORAGE (maxextents unlimited); (Para hacerlo ilimitado)
ALTER TABLE miBase.miTabla STORAGE (maxextents 8192); (Para darle un tamaño de 8Mb)
13. Cálculo del tamaño del tablespace SYSTEM
select TOTAL_BLOCKS from dba_free_space_coalesced where tablespace_name = 'SYSTEM';
Muy útil para saber si se les anda llenando este espacio de tablas.
14. Alteración del tamaño de un datafile.
alter database datafile '/u02/oradata/miSID/system01.dbf' resize 5120M;
15. Agregación de un datafile.
alter tablespace system add datafile '/u02/oradata/miSID/system02.dbf' size 1024M;
Por el momento es lo que tengo, ojalá les sean de utilidad.
17. Creación de un Rollback segment
CREATE ROLLBACK SEGMENT rollbacksegment_name TABLESPACE SYSTEM storage (initial 10k next 10k minextents 2);
Y después hay que traerlo online.
alter rollback_segment rollbacksegment_name online;
18. Cambiar el tamaño de un rollback segment
ALTER ROLLBACK SEGMENT rollbacksegment_name STORAGE (MAXEXTENTS 12288);
Monitoreo de procesos con top/watch hecho en casa.
El siguiente comando, ejecutado en un shell bash hará el truco. Aunque quizás no tendrán la opción de ordenar la salida, pero al menos les ayudará en su tarea:
> while [ 1 ] ; do clear ; ps -ea -o pid,pcpu,pmem,rss,vsz,osz,s,args head -25 ; sleep 1 ; done
Quizás así lo vean un poco confuso, por lo que lo pondré como si fuera un shell script:
0: #!/bin/bash
1: while [ 1 ] ; do
2: clear
3: ps -ea -o pid,pcpu,pmem,rss,vsz,osz,s,args head -25
4: sleep 1
5: done
Ahora, en la línea 0 se declara la ruta del intérprete de comandos, en la línea 1, se define un ciclo while infinito, resulta clara esta afirmación puesto que la instrucción while(1) siempre va a ser verdadera.
En la línea 2 se manda a limpiar la pantalla, en la línea 3 se muestran las primeras 25 líneas de la salida del comando ps. La línea 4 detiene por 1 segundo la ejecución del script y finalmente, en la línea 5 se cierra el ciclo.
En realidad, este esquema les puede servir para automatizar el despliegue de comando, al estilo de lo que hace watch. Para el que no sepa, watch ejecuta un comando cíclicamente ad infinitum.
Por ejemplo, si estuviésemos instalando un software muy grande y nos interesa monitorear el espacio de los filesystems. La sintaxis sería:
> watch -n 1 "df -h" (En Linux)
o bien
> watch -n 1 "df -F ufs -h" (En solaris 9 o superior)
En nuestro home-made watch quedaría como:
0: #!/bin/bash
1: while [ 1 ] ; do
2: clear
3: df -F ufs -h
4: sleep 1
5: done
Ojalá esto les pueda ayudar.
13 de noviembre de 2008
3 días Jumpstarteando un servidor
Sí, aunque usted no lo crea, llevo ya 3 días ejecutando jumpstart sobre un servidor de un cliente de la empresa. La empresa ha sido ardua, como se lo imaginarán. Eso sí, como todo en la vida, deja enseñanzas, sobre todo el cómo se ejecuta este procedimiento.
Al menos hasta ahora he aprendido bastante sobre el archivo de perfil de hardware y sobre la menara de ejecutar los procesos que quedaron "colgados" en sesiones anteriores.
Ahora, veamos brevemente qué es esto del jumpstart: Es un proceso mediante el cual podemos instalar uno o muchos sistemas con sólo un perfil. También se pueden definir varios perfiles a la ves para instalar múltiples estaciones de trabajo al mismo tiempo. Para ver más información sobre esto del jumpstart puede consultar: http://docs.sun.com/app/docs/doc/817-0491/6mg9nutco?l=en&a=view&q=Jumpstart
Veamos ahora lo que es un archivo de perfil. Se divide principalmente en dos secciones: La de opciones de los paquetes a instalar (lenguajes entre otras cosas), así como el tipo de instalación y finalmente la sección en la que se define el particionamiento de los discos duros.
Ahora, la primera sección tiene típicamente dos columnas, la del profile keywords y la de profile values. Los keywords son básicamente los nombres de opciones, los values, pues sus valores asignados.
Aquí un ejemplo de la primera sección:
profile keywords | profile value |
------------------------------------------- | |
install_type | initial_install |
system_type | server |
cluster | SUNWCXall |
geo | N_Amerca |
geo | W_Europe |
geo | E_Europe |
geo | N_Europe |
geo | S_Europe |
package | NSCPcom delete |
partitioning | explicit |
- install_type: Define si es que el sistema operativo a instalar se va a sobreescribir, si se va a actualizar, o bien, si se va a hacer una instalación nueva. En algunos casos, también podría indicar si se va a utilizar una imagen flash.
- system_type: Indica el tipo de sistema en el que se va a instalar el solaris.
- cluster: Define el tipo de software que se va a instalar.
- geo: Indica los paquetes de lozalización que se van a instalar. En pocas palabras, los lenguajes.
- package: Sirve para agregar o quitar paquetes de software.
- partitioning: Define el esquema de particionamiento que se va a utilizar durante la instalación. De no agregar esta opción, se utiliará el esquema por defecto.
otro ejemplo podría ser:
profile keywords | profile value |
------------------------------------------- | |
install_type | flash_install |
archive_location | nfs 148.228.20.1:/opt/jstart2/jumpstart/Flash/Sun4u-JS-Sol9-FlarImage |
partitioning | explicit |
En este caso, se le indica a la máquina que la instalación se hará a partir de una imagen flash, que se llama Sun4u-JS-So9-FlarImage que se obtendrá por medio de NFS desde 148.228.20.1 en el directorio /opt/jstart2/jumpstart/Flash/. Nuevamente, el particionamiento es explícito.
Cabe mencionar que cuando se usa una instalación flash no es posible utilizar la opción geo. La voz de la experiencia.
- archive_location: Indica la localización de la imagen flash en el servidor del jumpstart.
Ahora, un ejemplo de cómo se hace la definición de las particiones:
# filesys | slice | size | filesystem |
#---------- | --------- | -------- | ---------------- |
filesys | c0t9d0s0 | 4096 | / |
filesys | c0t9d0s1 | 2048 | swap |
filesys | c0t9d0s3 | 6144 | /var |
filesys | c0t9d0s4 | 4096 | /usr |
filesys | c0t9d0s5 | free | /opt |
filesys | c0t10d0s0 | 2048 | swap |
filesys | c0t10d0s1 | 15216 | /u01 |
filesys | c0t11d0s0 | 2048 | swap |
filesys | c0t11d0s1 | 15216 | /u02 |
filesys | c0t12d0s0 | 2048 | swap |
filesys | c0t12d0s1 | 15216 | /u03 |
filesys | c0t13d0s0 | 2048 | swap |
filesys | c0t13d0s1 | 15216 | /u04 |
filesys | c0t14d0s0 | 2048 | swap |
filesys | c0t14d0s1 | 15216 | /u05 |
Aquí podemos sacar varias cosas:
- Se stán utilizando 6 discos duros, que van desde c0t9d0 hasta c0t14d0, cada uno con una capacidad de 18 Gb.
- El primer disco tiene 5 particiones, mientras que los 5 restantes tienen sólo 2.
- Todos los discos duros deben tener un espacio para swap.
- El amaño de las particiones viene dado en Mb, excepto quinta la partición del primer disco, cuyo tamaño viene como free, lo que indica que se utilizará todo el espacio disponible después de crear las particiones que tienen un tamaño explícito.
- Nunca se utiliza la partición número 2, puesto que indica regularmente el disco entero. Si la llegan a usar, hay grandes probabilidades de que tengan errores. En mi experiencia, si usan la partición 2, cuando intenten crear una arcivo dentro de ésta, les va a marcar un error de MAXSYMLINKS reached. Como si se hubera alcanzado el límite máximo de ligas simbólicas posibles dentro de un sistema de archivos. ¿A que no sabían esto eh?
- A diferencia de linux, en donde la nomenclatura de las perticiones es del estilo de hda1, sda3, etc; la nomenclatura en Solaris es del tipo cWtXdYsZ. Donde W es el número de la controladora (HBA), X es el número de target, que es básicamente una dirección de hardware, única asignada a cada unidad, ya sea un disco, cdrom o una cinta. Y es la dirección del disco dentro de la controladora y finalmente Z es el número de slice o de partición.
Puede consultar más información sobre la convención de nombrado de particiones de Solaris en: http://docs.sun.com/app/docs/doc/801-7038/6i1cfovsu?a=view
Finalmete, pueden encontrar mucha más información sobre los keywords y sus valores en la siguiente dirección: http://docs.sun.com/app/docs/doc/817-5506/6mkv6kiat?a=view
12 de noviembre de 2008
La falta de ética y la socidad mexicana
Resulta que en uno de esos viajes de Puebla al DF, leí un artículo publicado en el Diario Síntesis, titulado: Alarma falta de ética en la sociedad Mexicana: académico de la UMAD.
De lo que se trata básicamente es de que en la sociedad mexicana los niveles de ética son muy bajos tanto en hombres como en mujeres, sin distingo de edad, estudios e incluso nivel socio eonómico. Y supongo que nos hemos tomado con más de un ejemplo a diario.
Ahora, antes de continuar, aunque este artículo no pretende de ninguna manera ser una lección sobre lo que es ética y lo que es moral, me permito reproducir integramente un estracto tomado de Wikipedia en donde se aclara la diferencia entre estos dos términos.
"(La Ética) Tiene como objeto de estudio la moral y la acción humana. Su estudio se remonta a los orígenes de la filosofía moral en Grecia y su desarrollo histórico ha sido diverso. Una doctrina ética elabora y verifica afirmaciones o juicios. Esta sentencia ética, juicio moral o declaración normativa es una afirmación que contendrá términos tales como 'malo', 'bueno', 'correcto', 'incorrecto', 'obligatorio', 'permitido', etc, referido a una acción o decisión. Cuando se emplean sentencias éticas se está valorando moralmente a personas, situaciones, cosas o acciones. De este modo, se están estableciendo juicios morales cuando, por ejemplo, se dice: "Ese político es corrupto", "Ese hombre es impresentable", "Su presencia es loable", etc. En estas declaraciones aparecen los términos 'corrupto', 'impresentable' y 'loable' que implican valoraciones de tipo moral.
La ética estudia la moral y determina qué es lo bueno y, desde este punto de vista, cómo se debe actuar. Es decir, es la teoría o la ciencia del comportamiento moral."
Puede consultar el artículo completo aquí (http://es.wikipedia.org/wiki/%C3%89tica).
O bien:
"Muchos autores consideran como sinónimos a estos términos. Sin embargo, en el ámbito de la filosofía se considera a la ética como una de sus partes principales. De ahí que podemos decir que una ética propuesta es el conjunto de normas sugeridas por un filósofo, o proveniente de la religión, en tanto que moral vendría a designar el grado de acatamiento que los individuos dispensan a las normas éticas imperantes en el grupo social. En un sentido práctico, ambos términos se hacen indistinguibles y por ello se los considera equivalentes.
El matiz que las delimita está en la observación o aplicación práctica de la norma que entraña el mandato ético. Por ello, la norma ética siempre será teórica, en tanto que la moral o costumbre será su aplicación práctica.
Por otro lado la moral se basa en los valores en lo que la conciencia nos dicta."
Puede consultar el artículo completo aquí: http://es.wikipedia.org/wiki/Moral#Moral_y_.C3.A9tica.
Ahora bien, supongo que todos hemos visto esos comerciales que pasan en la tele, tan famosos los de "¿Tienes el valor o te vale?". En ellos se describe perfectamente lo que sucede día con día en nuestras ciudades, en donde bajo una cantidad enorme de pretextos, nuestros compañeros de al lado (o incluso nosotros mismos) nos convertimos en unos verdaderos cavernícolas. Vaya, podemos hacer una ennumeración bastante somera de casos:
- Quien se estaciona en el lugar para discapacitados (o como les quieran decir ahora).
- Quien estando comodamente sentado en el transporte público se hace el desentendido y no cede el lugar a una mujer que va cargando chamaco y bolsas del súper.
- Quien ocupa tu lugar en el autobús/teatro/etc sin el menor asomo de remordimiento intenta hacerte sentar en donde NO te toca.
- Quien se estaciona en doble fila en una calle angosta.
- Quien en la autopista se mete en el acotamiento para "saltarse" la fila de carros antes de la caseta.
- Quien, aún habiendo espacio suficiente ascelera y te lanza el carro con tal de no dejarte cambiar de carril. Y esto, desde que pones la direccional para avisar con antelación tus satánicas intenciones.
En fin, que al son de "el gandalla no batalla" podemos continua ad infinitum.
¿Y esto a razón de qué? Pienso que tiene muchoque ver con nuestra doble moral. Al principio de mi vida en el DF pensé que se debía en mayor medida a que los recursos son pocos y el espacio es aún menor, pues hay que ser un poco más agresivos para conseguir nuestros fines. Poco a poco me he ido desengañando y me doy cuenta ahora de que es un problema que permea a todos niveles de nuestra sociedad. ¿Usted qué opina querido lector?