Autor: DANIEL
El comando screen para múltiples ventanas de SSH
Para obtener diversas ventanas abiertas en SSH podemos ejecutar el comando screen. La primera vez que lo ejecutemos se activará dicha funcionalidad. Cada vez que lo ejecutemos posteriormente se abrirá una nueva ventana.
Los comandos disponibles para usar screen son:
Comando | Descripción |
screen -S MiSesion | Crear sesión de screen con nombre asignado |
CTRL+a c | Crear ventana |
CTRL+a 0-9 | Cambiar de ventana |
CTRL+a n | próxima ventana |
CTRL+a A | Nombre de Ventana |
CTRL+a k | Mata un programa |
CTRL+a Shift+” | Lista las ventanas |
CTRL+a Shift+s | dividir una screen en dos regiones |
CTRL+a TAB | mover a región siguiente |
CTRL+a Shift+c | crea una ventana en la region |
CTRL+a Shift+x | cerrar región actual |
CTRL+a Shift+q | cerrar todas las regiones menos la actual |
CTRL+a d | Minimizar consola |
screen -r | retornar a la consola |
Optimizar un Servidor de Alto Tráfico
Si se están alcanzando los límites de un servidor ejecutando Apache, sirviendo una gran cantidad de contenido dinámico, puede cambiarse el mismo por un hardware más poderoso o primero intentar algunas técnicas para mejorar su rendimiento. Este punto cita las técnicas que pueden permitir esto último.
Problemas Comunes:
- Swapping – Demasiados procesos en ejecución utilizando demasiada RAM
- CPU ” Consultas a Bases de Datos mal optimizadas, código de programación mal optimizado, procesos fuera de control
- Red – Límites de hardware, Ataques
Soluciones Básicas:
- Utilizar el comando top d2c y ps axu para comprobar si hay procesos que utilizan mucha CPU o RAM.
- Usar netstat -anp | sort -u para comprobar si hay problemas de red.
Mejorar el Uso de la RAM por el Apache
Los procesos del Apache pueden utilizar grandes cantidades de memoria RAM si no están bien optimizados.
- Si el Apache sirve 100% archivos estáticos, cada proceso httpd utilizará alrededor de 2-3 megas de RAM.
- Si el Apache sirve 99% archivos estáticos y 1% archivos dinámicos, cada proceso httpd utilizará desde 3-20 megas de RAM (dependiendo de la complejidad de las páginas dinámicas).
Esto ocurre porque un proceso crece para dar cabida a todo lo que debe servir y nunca disminuye nuevamente a menos que ese proceso muera. En forma sencilla, a menos que se tengan muy pocas páginas dinámicas y una fluctuación de tráfico importante, la mayoría de los procesos httpd ocuparán una cantidad de RAM igual al script dinámico más grande en el sistema. Un servidor web inteligente debería tratar esto automáticamente, sin embargo, se tiene varias opciones para mejorar el uso de la RAM de forma manual.
Reducir los procesos desperdicio mediante la adecuación de KeepAlive:
Se trata de un equilibrio. KeepAliveTimeout es la cantidad de tiempo que se permite un proceso cuando no hace nada, pero sigue ocupando espacio. Esos segundos se suman en gran medida. Pero usando KeepAlive puede aumentarse la velocidad tanto para usted como para el cliente (si se desactiva KeepAlive el servicio de archivos estáticos como las imágenes puede ser mucho más lento). Lo mejor es tener KeepAlive en On y KeepAliveTimeout con un valor bajo (como 1 ó 2 segundos).
Límitar los procesos totales con MaxClients:
Si se usa Apache para servir contenido dinámico, las conexiones simultáneas se hacen muy limitadas. Si se supera un determinado número, el sistema comienza a realizar intercambios caníbales, haciéndose más lento y más lento hasta que muere. Use el ensayo y error para averiguar cuántos procesos de Apache pueden manejar el servidor y establecer dicho valor en MaxClients.
Nota:
la documentación del Apache sobre esto es engañosa – si se alcanza este límite, los clientes no serán “bloqueados”, simplemente se colocarán en la cola y su acceso se vuelve más lento. Basándose en el valor de MaxClients, se pueden estimar los valores que se necesitan para StartServers, MinSpareServers y MaxSpareServers.
Forzar el reinicio de procesos con MaxRequestsPerChild:
Obligar que los procesos mueran después de un tiempo hace que luego empiecen con un bajo uso de RAM, y esto en muchas situaciones puede reducir el uso de la memoria total. A menor contenido dinámico que se tenga, más útil será este método. Esto crea un juego de aumento-disminución, con los archivos dinámicos constantemente aumentando el uso total de la RAM y el reinicio de procesos constantemente reducirlo. Experimente con la directiva MaxRequestsPerChild – incluso valores tan bajos como 20 pueden funcionar bien. Pero no la coloque demasiado baja, porque la creación de nuevos procesos causa sobrecarga. Es posible averiguar la mejor configuración de carga mediante la ejecución del comando ps axu –sort:rss .
Nota:
El uso de este método es delicado. Si la única manera de mantener el servidor en ejecución es mediante el uso de este parámetro, finalmente se caerá en problemas. Dicho esto, modificando MaxRequestsPerChild es posible aumentar MaxClients tanto como en un 50%.
Mayor Afinación del Apache:
Para sitios de propósito mixto (como galerías de imágenes, sitios de descarga, etc.), a menudo puede mejorarse el rendimiento mediante la ejecución de dos demonios de apache diferentes en el mismo servidor. Esto es una opción avanzada solo para servidores dedicados a sitios de muy alta carga
Uso de CPU y RAM de PHP:
Compilar scripts PHP es generalmente más caro que ejectuarlos. ¿Por qué no usar una herramienta sencilla que los mantenga precompilados?. Se recomienda el uso de Turck MMCache. Algunas alternativas son PHP Accelerator, APC y Zend Accelerator. Esto causará un aumento en la velocidad entre 2x a 10x.
Optimizar las consultas de la base de datos:
Esto se trata en detalle en diversas partes, algunas notas importantes son: una instrucción de consulta incorrecta, ejecutándose a menudo, puede hacer que un sitio se cuelgue. Si se optimiza solo una consulta no se puede ver gran mejora de velocidad de todo el servidor. Si se buscan y optimizan todas las consultas ineficientes puede llegarse a una mejora de velocidad del servidor equivalente a 5x. La característica log-slow-queries de MySQL puede ser muy útil.
Cómo reportar logs de consultas lentas:
Ejecutar:
# nano /etc/rc.d/init.d/mysqld
Buscar esta línea:
SAFE_MYSQLD_OPTIONS="--defaults-file=/etc/my.cnf"
Cambiar a:
SAFE_MYSQLD_OPTIONS="--defaults-file=/etc/my.cnf--log-slow-queries=/var/log/slow-queries.log"
Como se puede ver, se añade la opción de registrar todas las consultas lentas a /var/log/slow-queries.log
Cierre y guarde el archivo.
Ahora ejecutar:
touch /var/log/slow-queries.log
chmod 644 /var/log/slow-queries.log
Ahora debe re-arrancarse mysql:
service myslqd restart
mysqld registrará todas las consultas lentas a este archivo.
Las Cargas del Servidor (Server Loads)
El promedio de carga de un servidor trata de medir el número de procesos activos en cualquier momento. Como una medida del uso del CPU, el promedio de carga es muy simple y no tiene una definición precisa, sin embargo es muy útil. Promedios altos en las cargas significa que el sistema esta siendo usado con intensidad y que su tiempo de respuesta correspondiente será lento. ¿Qué se considera alto?, Idealmente, la carga no debería ser mayor a 3, sin embargo, podría serlo por momentos cortos.
Cuando se muestra la carga del servidor se reflejan 3 valores que se refieren a la carga reportada hace 1, 5 y 15 minutos.
¿Como verificar la carga del servidor?
Existen diversas maneras de verificar la carga del servidor. La primera de ellas es ingresar al WHM y ver las cargas en la esquina superior derecha.
A su vez, a través del SSH se pueden ver las cargas con:
Método 1 – usando el comando uptime:
El comando uptime muestra lo siguiente:
uptime
9:40am up 9 days, 10:36, 4 users, load average: 0.02, 0.01, 0.00
Este comando muestra el tiempo transcurrido desde que se reinició la última vez el sistema, el número de procesos de usuario activos y el promedio de las cargas.
Método 2 – usando el comando procinfo:
El comando procinfo muestra lo siguiente:
procinfo
Linux 2.0.36 (root@tsv) (gcc 2.7.2.3)
#1 Wed Jul 25 21:40:16 EST 2010 [tsv]
Memory: Total Used Free Shared Buffers Cached Mem:
95564 90252 5312 31412 33104 26412
Swap: 68508 0 68508
Bootup: Sun Jul 21 15:21:15 2010
Load average: 0.15 0.03 0.01 2/58 8557
El promedio de carga se muestra en la esquina inferior derecha.
Método 3 – usando el comando w:
El comando w muestra lo siguiente:
w
9:40am up 9 days, 10:35, 4 users, load average: 0.02, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
mir ttyp0 :0.0 Fri10pm 3days 0.09s 0.09s bash
neil ttyp2 12-35-86-1.ea.co 9:40am 0.00s 0.29s 0.15s w
Note que la primera línea es exactamente igual a la mostrada por uptime.
Método 4 – usando el comando top – preferido:
El comado top hace un ranking de los procesos de acuerdo a la cantidad de tiempo del CPU que consumen, mostrando lo siguiente:
top
4:09am up 12:48, 1 user, load average: 0.02, 0.27, 0.17
58 processes: 57 sleeping, 1 running, 0 zombie, 0 stopped
CPU states: 0.5% user, 0.9% system, 0.0% nice, 98.5% idle
Mem: 95564K av, 78704K used, 16860K free, 32836K shrd, 40132K buff
Swap: 68508K av, 0K used, 68508K free 14508K cached
PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND
5909 neil 13 0 720 720 552 R 0 1.5 0.7 0:01 top
1 root 0 0 396 396 328 S 0 0.0 0.4 0:02 init
2 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kflushd
3 root -12 -12 0 0 0 SW< 0 0.0 0.0 0:00 kswapd
...
El comando top muestra también el tiempo de funcionamiento del servidor (uptime), la información de la memoria y el listado de los procesos que pueden ordenarse por uso del CPU, entre otros.
¿Qué se considera una carga alta, normal o media?
La respuesta a este punto es subjetiva, sin embargo, para dar una idea de lo que debería ser, una carga excelente es aquella igual o menor a 1.0. Una carga normal oscila entre 2.0 y 4.0 y una carga un poco mayor puede considerarse un poco alta. Si se nota que la respuesta del servidor se esta volviendo lenta, verifique primero la carga.
Existen situaciones particulares en las cuales un dominio de un servidor presenta cargas muy altas (ej. Día de la final del beisbol nacional en el portal del equipo campeón). Esas situaciones temporales se auto regularán cuando pase el evento que causa la carga muy alta. Gracias al sistema SIM los servidores están configurados para reiniciar sus procesos automáticamente cuando no se reportan por cargas muy altas.
Cuando las cargas promedio de un servidor están por encima de 2.0 es conveniente considerar colocar un servidor más poderoso ya que es de alto uso. Vale decir que estas cargas promedio no deberían tomarse cuando el sistema esta realizando el procesamiento de los logs, respaldos o estadísticas.
Comandos Básicos
La siguiente lista de comandos pretende ser de utilidad como referencia rápida para utilizar comandos de sistema. Se ha agrupado en dos: los comandos de sistema corrientes y los relacionados con la administración.
Comandos Básicos:
Comando |
Descripción |
Ejemplos |
ls |
listar contenido de directorios |
ls, ls -l, ls -fl, ls –color |
cp |
copiar ficheros/directorios |
cp -rfp directorio /tmp, cp archivo archivo_nuevo |
rm |
borrar ficheros/directorios |
rm -f fichero, rm -rf directorio, rm -i fichero |
mkdir |
crear directorios |
mkdir directorio |
rmdir |
borrar directorios, deben estar vacios |
rmdir directorio |
mv |
renombrar o mover ficheros/directorios |
mv directorio directorio, mv fichero nuevo_nombre, mv fichero a_directorio |
date |
gestion de fecha de sistema, se puede ver y establecer |
date, date 10091923 |
history |
muestra el historial de comandos introducidos por el usuario |
history | more |
more |
muestra el contenido de un fichero con pausas cada 25 lineas |
more fichero |
grep |
filtra los contenidos de un fichero |
cat fichero | grep cadena |
cat |
muestra todo el contenido de un fichero sin pausa alguna |
cat fichero |
chmod |
cambia los permisos de lectura/escritura/ejecucion de ficheros/directorios |
chmod +r fichero, chmod +w directorio, chmod +rw directorio -R, chmod -r fichero |
chown |
cambia los permisos de usuario:grupo de ficheros/directorios |
chown root:root fichero, chown pello:usuarios directorio -R |
tar |
archivador de ficheros |
tar cvf fichero.tar directorio , tar xvf fichero.tar, tar zcvf fichero.tgz directorio, tar zxvf fichero.tgz |
gunzip |
descompresor compatible con ZIP |
gunzip fichero |
rpm |
gestor de paquetes de redhat. Para instalar o actualizar software de sistema. |
rpm -i paquete.rpm, rpm -qa programa, rpm –force paquete.rpm, rpm -q –info programa |
mount |
montar unidades de disco duro, diskette, cdrom |
mount /dev/hda2 /mnt/lnx, mount /dev/hdb1 /mnt -t vfat |
umount |
desmontar unidades |
umount /dev/hda2, umount /mnt/lnx |
wget |
programa para descargar ficheros por http o ftp |
wget https://www.tecnoestudios.com/documento.pdf |
lynx |
navegador web con opciones de ftp, https |
lynx www.tecnoestudios.net, lynx –source https://www.tecnoestudios.com/script.sh | sh |
ftp |
cliente FTP |
ftp ftp.tecnoestudios.net |
whois |
whois de dominios |
whois tecnoestudios.net |
who |
muestra los usuarios de sistema que han iniciado una sesion |
who, w, who am i |
|
envio y lectura de correo electronico |
mail pepe@tecnoestudios.net < fichero, mail -v pepe@tecnoestudios.net < fichero |
sort |
ordena el contenido de un fichero |
cat /etc/numeros | sort, ls | sort |
ln |
para crear enlaces, accesos directos |
ln -s /directorio enlace |
tail |
muestra el final (10 lineas) de un fichero |
tail -f /var/log/maillog, tail -100 /var/log/maillog | more |
head |
muestra la cabecera (10 lineas) de un fichero |
head fichero, head -100 /var/log/maillog | more |
file |
nos dice de que tipo es un fichero |
file fichero, file * |
Comandos de Administración
Comando |
Descripción |
Ejemplos |
sysctl |
Configurar los parámetros del kernel en tiempo de ejecución |
sysctl -a |
ulimit |
muestra los limites del sistema (maximo de ficheros abiertos, etc..) |
ulimit |
adduser |
añadir usuario de sistema |
adduser pepe, adduser -s /bin/false pepe |
userdel |
eliminar usuario de sistema |
userdel pepe |
usermod |
modificar usuario de sistema |
usermod -s /bin/bash pepe |
df |
espacio en disco disponible, muy útil |
df, df -h |
uname |
Información sobre el tipo de unix (linux) en el que estamos, kernel, etc. |
uname, uname -a |
netstat |
la información sobre las conexiones de red activas |
netstat, netstat -ln, netstat -l, netstat -a |
ps |
toda la información sobre procesos en ejecución |
ps, ps -axf, ps -A, ps -auxf |
free |
muestra el estado de la memoria RAM y el SWAP |
free |
ping |
herramienta de red para comprobar entre otras cosas si llegamos a un host remoto |
ping www.tecnoestudios.net |
traceroute |
herramienta de red que nos muestra el camino que se necesita para llegar a otra maquina |
traceroute www.tecnoestudios.net |
du |
uso de disco. Muestra el espacio que está ocupado en disco |
du *, du -sH /*, du -sH /etc |
ifconfig |
configuración de interfaces de red, modems, etc. |
ifconfig, ifconfig eth0 ip netmask 255.255.255.0 |
route |
gestiona las rutas a otras redes. |
route, route -n |
iptraf |
muestra en una aplicacion de consola TODO el trafico de red IP, UDP, ICMP. Permite utilizar filtros, y es SUMAMENTE UTIL para diagnostico y depuración de firewalls |
iptraf |
tcpdump |
vuelca el contenido del trafico de red |
tcpdump, tcpdump -u |
lsof |
muestra los ficheros (librerías, conexiones) que utiliza cada proceso |
lsof, lsof -i, lsof | grep fichero |
lsmod |
Muestra los módulos de kernel que están cargados |
lsmod |
modprobe |
Trata de instalar un modulo, si lo encuentra lo instala pero de forma temporal |
modprobe ip_tables, modprobe eepro100 |
rmmod |
Elimina modulos del kernel que estan cargados |
rmmod <nombre de modulo> |
sniffit |
Sniffer o husmeador de todo el trafico de red. No suele venir instalado por defecto. |
sniffit -i |
Combinaciones Útiles
Los comandos son muy útiles, pero con el conocimiento básico del shell y sus comandos tenemos armas muy poderosas que muestran todo el potencial del interprete de comandos Unix. A continuación se muestran algunos ejemplos avanzados de comandos que se usan con cierta frecuencia.
Combinación |
Descripción |
comando | grep filtro |
A la salida de cualquier comando le podemos aplicar grep para que solo nos muestre la información que nos interesa. |
mail pepe@tecnoestudios.net < fichero.conf |
Con esto nos enviamos rápidamente un fichero de sistema a nuestra cuenta. |
mail -v testing@tecnoestudios.net |
Con el parametro -v, al terminar de escribir (. enter), veremos la traza del correo hasta el servidor, si es aceptado o no. |
find / -name ‘filtro’ -print |
Find es un buscador de ficheros muy potente y con muchos parámetros, todos los que nos podamos imaginar (tamaños, fechas, tipos de archivos, etc..) |
Usos de more
/cadena: podemos hacer busqueda de cadena
f: adelante
b: volver arriba
v: iniciar vi en la línea que estamos
Comandos de MySQL por Consola
Es normal que utilicemos MySQL a través de páginas PHP y para administrar la base de datos utilicemos un programa como PhpMyAdmin, pero a veces no nos queda otro remedio que acceder a la base de datos a través de la línea de comandos.
MySQL tiene un programa que se llama con el mismo nombre de la base de datos (mysql) que sirve para gestionar la base datos por línea de comandos.
Conectar con el servidor MySQL
Lo primero que tendremos que hacer es conectar con el sistema gestor de MySQL. Para ello, desde la línea de comandos invocamos a MySQL. Simplemente tenemos que escribir el comando “mysql” e indicarle unas opciones de conexión.
mysql
Con esa sentencia se conecta uno con la base de datos con los parámetros por defecto. Es decir, al servidor local, con usuario y password igual a cadenas vacías.
Lo más normal es que tengamos que indicar algún otro dato para conectar con la base de datos, como el usuario, la clave o la dirección del servidor con el que queremos conectar. La sintaxis sería la siguiente:
mysql -h nombre_servidor -u nombre_usuario -p
Si deseamos conectarnos a la base de datos en local y con nombre de usuario root tendríamos que escribir:
mysql -h localhost -u root -p
Lo primero que nos preguntará será el password para el usuario root. Una vez introducida la clave, ya estaremos dentro de la línea de comandos de MySQL. Con ello el prompt cambiará a algo como esto:
mysql>
Podríamos haber indicado la contraseña directamente en la línea de comandos para iniciar la sesión con MySQL, pero esto se desaconseja por razones de seguridad. De todos modos, la sintaxis hubiera sido:
mysql -h localhost -u root -pmi_clave
Nos fijamos que entre -h y el nombre del host hay un espacio en blanco, igual que entre -u y el nombre de usuario. Sin embargo, entre -p y la clave no debemos poner ningún espacio.
Dentro de la consola de MySQL
Una vez dentro, tendremos a nuestra disposición todas las sentencias de MySQL para el trabajo con la base de datos y el lenguaje SQL.
Lo más normal es que primero se tenga que conectar con una base de datos en concreto, de entre todas las que puede tener creadas en su servidor MySQL. Eso se hace con el comando use, seguido del nombre de la base de datos que desea conectar.
mysql> use mibasedatos;
Esto nos conectaría con la base de datos llamada “mibasedatos”.
Atención: Hay que fijarse que todas las sentencias dentro de la línea de comandos de MySQL acaban en “;”. Si no colocamos el punto y coma, lo más seguro es que no se ejecute el comando y nos vuelva a salir el prompt para que sigamos introduciendo el comando. Si lo que queríamos era ejecutar la sentencia que habíamos escrito antes, con simplemente entrar el “;” será suficiente. Es decir, no debemos escribir de nuevo la sentencia entera, sólo el “;” y volver a apretar “enter”.
Si queremos ver una lista de las bases de datos alojadas en nuestro servidor podemos escribir el comando show databases. Así:
mysql>show databases;
Con esto nos mostraría una lista de las bases de datos de nuestro servidor. Algo como esto:
mysql> show databases-> ;
5 rows in set (0.02 sec)
Si queremos crear una base de datos, podremos hacerlo con el comando “create database” seguido del nombre de la nueva base de datos.
mysql> create database miprueba;
Eso nos creará una base de datos que se llama “miprueba”. Como habíamos comentado, si queremos luego usar esa base de datos escribiríamos:
mysql> use miprueba;
Lógicamente, esta base de datos recién creada estará vacía, pero si estuviéramos usando una base de datos ya creada y queremos ver las tablas que tiene escribiríamos el comando “show tables”.
mysql> show tables;
Si no hay tablas, nos dirá algo como “Empty set”, pero si tenemos varias tablas dadas de alta en la base de datos que estamos usando, nos saldrá una lista de ellas:
mysql> show tables;
2 rows in set (0.00 sec)
Ahora, si deseamos obtener información sobre una tabla, para saber qué campos tiene y de qué tipo, podremos utilizar el comando describe seguido del nombre de la tabla.
mysql> describe administrador;
4 rows in set (0.11 sec)
Otras Sentencias SQL:
Desde la consola de MySQL podemos indicar por línea de comandos todo tipo de sentencias en lenguaje SQL, como selecciones, inserciones, actualizaciones, creación de tablas, etc. El mecanismo es el que se puede deducir. Simplemente colocamos la sentencia a ejecutar seguida del punto y coma. Veamos una serie de sentencias seguidas y el resultado de ejecutarlas:
mysql> create table prueba (id_prueba int);
Query OK, 0 rows affected (0.08 sec)
mysql> insert into prueba (id_prueba) values (1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into prueba (id_prueba) values (2);
Query OK, 1 row affected (0.00 sec)
mysql> insert into prueba (id_prueba) values (3);
Query OK, 1 row affected (0.00 sec)
mysql> select * from prueba;
3 rows in set (0.00 sec)
Para salir de la línea de comandos de MySQL:
Una vez hemos terminado de trabajar con MySQL, si queremos cerrar la conexión con el servidor, simplemente escribimos “quit” desde el prompt de MySQL:
mysql> quit
Para generar un archivo .sql desde una base de datos se debe ejecutar:
mysqldump -h servidor -u usuario -p base_de_datos > archivo_salida.sql
Para ejecutar un archivo .sql en una base de datos:
mysql -h servidor -u usuario -p base_de_datos < archivo_salida.sql
Comandos para Pruebas de Red
Para poder ejecutar estos comandos debemos usar YUM para instalar netkit-ping, traceroute, dnsutils, ipchains (para el kernel 2.2), iptables (para el kernel 2.4 ) y el paquete net-tools.
Comando |
Parámetros |
Descripción |
ping |
dominio.com |
Verificar la conexión a Internet |
traceroute |
dominio.com |
Rastrear paquetes IP |
ifconfig |
Verificar la configuración del servidor (host) |
|
route |
-n |
Verificar la configuración de la ruta |
dig |
[@dns-server.com] host.dom [{a|mx|any}] |less |
Verificar registros host.dom DNS [@ dns-server.com] para un registro [{mx|any}] |
ichains |
-L -n |less |
Verificar filtrado de paquetes (kernel 2.2) |
iptables |
-L -n |less |
Verificar filtrado de paquetes (kernel 2.4) |
netstat |
-a |
Mostrar todos los puertos abiertos |
netstat |
-l –inet |
Mostrar los puertos en escucha |
netstat |
-ln –tcp |
Mostrar puertos tcp en escucha (numérico) |
Tareas de Ejecución Cronometrada (cron y at)
El servicio crontab es el encargado de manejar las tareas de ejecución cronometrada (CRON). Es posible usar cron y at para planificar tareas en Linux.
Para crear o editar el archivo crontab para configurar los eventos planificados, ejecute el comando:
crontab -e
Ejemplo de un archivo crontab:
# utilice /bin/sh para ejecutar los comandos sin importar lo que dice el /etc/passwd
SHELL=/bin/sh
# envíe un mensaje al "hostmaster" sin importar a quien pertenece el crontab
MAILTO=hostmaster@1ahost.com
# Minuto Hora Día_del_mes Mes Día_de_la_semana comando
# Ejecutar todos los días a las 00:05
5 0 * * * $HOME/bin/tarea.diaria >> $HOME/tmp/salida 2>&1
# Ejecutar a las 14:15 el primer día de cada mes -- enviar salida al hostmaster
15 14 1 * * $HOME/bin/mensual
# Ejecutar a las 22:00 todos los días hábiles (1-5), recordar algo a Administración.
# % para nueva línea, el último % para cc:
0 22 * * 1-5 mail -s "Son las 10 de la noche" Admin %Admin: % %¿Ya se facturo todo? %. % %
23 */2 1 2 * echo "Ejecutar el 1 de febrero a los 23 minutos después de 0am, 2am, 4am ..."
5 4 * * sun echo "Ejecutar todos los domingos a las 04:05"
# Ejecutar a las 03:40 el primer lunes de cada mes
40 3 1-7 * * [ "$(date + %a)" == "Mon" ] && comando -args
A su vez, se puede ejecutar el comando at para planificar una tarea una sola vez:
$ echo "command -args"| at 3:40 Monday
Ejemplos de Comandos Combinados con Pipes
Encontrar todos los archivos en /usr excluyendo los directorios indicados (/usr/var, /usr/tmp, /usr/local):
find /usr | egrep -v "/usr/var|/usr/tmp|/usr/local"
Convertir todos los caracteres del archivo ejemplo.txt de minúsculas a mayúsculas:
cat ejemplo.txt | tr "a-z" "A-Z" > mayusculas.txt
Ver todos los procesos del Apache que están en ejecución:
ps -aux | grep -e "httpd"
Obtener los últimos cuatro accesos de la IP 192.168.2.107 al Apache:
cat /var/log/httpd/access_log-20141207 | grep -e "192.168.2.107" | tail -n4
Ver todas las conexiones tcp correspondientes a mysql:
netstat -tap | grep mysql
Ver todas las conexiones al servidor en el puerto 22 (SSH):
netstat -ln | grep 22
Numerar en forma inversa las líneas del archivo ejemplo.txt y mostrarlo en pantalla:
cat -n ejemplo.txt | sort -r
Ver las primeras 100 líneas del archivo log de los correos (maillog) con paginación:
head -100 /var/log/maillog | more
Mostrar los archivos más pesados en tamaño de bytes en el directorio de logs y controlar la vista con less:
cd /var/log
ls -lhS | less
Listar todos los archivos abiertos por los procesos, que se relacionen con el directori usr y controlar la lista con less:
lsof | grep usr | less
Obtener los 5 comandos más usados por SSH:
history | awk '{print $2}' | sort | uniq -c | sort -nr | head -5
Manejo de Permisos con chmod
Comando |
Parámetros |
Descripción |
chmod |
permisos archivos/directorio |
Cambia los permisos de archivos/directorios |
Los permisos se dividen en tres partes:
- Permisos del propietario
- Permisos del grupo
- Permisos de todos
Al ejecutar el comando ls -l se mostrará algo como;
drwxrwxrwx
Donde la primera letra indica si es directorio (d) o no (-), los tres caracteres siguientes pertenecen a los permisos de propietario para lectura (r), escritura (w) y ejecución (x); las tres letras siguientes pertenecen al grupo y las tres últimas letras a los permisos de todos.
Forma de asignar los permisos por números:
lectura (4), escritura (2) y ejecución (1).
Ejemplo:
chmod 755 archivo
Asigna permisos de (7) lectura, escritura y ejecución al propietario del archivo, y de (5) lectura y ejecución al grupo y (5) de lectura y ejecución a todos.