elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


  Mostrar Temas
Páginas: [1]
1  Programación / Scripting / [Bash] Ayuda con script para leer fichero en: 13 Febrero 2014, 00:20 am
Mi situación es la siguiente:

En el fichero A tengo una lista con 5 ítem:

Citar
casa
reloj
auto
bomba
cebra

Lo que quiero hacer es colocar en el fichero B esa lista y agregando una linea cada 2 ítem.


Citar
-----
casa
reloj
-----
auto
bomba
-----
cebra


Me prepare un código pero no estoy pudiendo mantener la separación de a 2, ya que lee todo el fichero A completo.


Código:
#!/bin/bash
FICHERO="/tmp/datos"
if [ -f $FICHERO ]
then
echo "Obteniendo el fichero"
else
echo "El fichero no existe"
exit 1
fi
echo ---- >> /tmp/resultado
#Creamos una variable con los datos del fichero
datos=`cat $FICHERO`
#Se crea un bucle for, que va a ir leyendo cada linea
for i in $datos
do
lista=`echo "$i"`
echo $lista >> /tmp/resultado
echo ---- >> /tmp/resultado
sleep 1
done

Algo me falta en el bucle para que me cuente los ítem parece.

De antemano agradezco su ayuda.
2  Seguridad Informática / Seguridad / Firewall con iptables politica DROP en: 10 Octubre 2012, 00:36 am
Estoy con el trabajo de afinar el firewall de mi debian, esta todo bien después de las modificaciones que realice , pero quería que ustedes me den su punto de vista, por si hay algo que pueda mejorar.
Resumiendo pase todo a DROP para obtener mejor protección.

Aquí el código:


Código:
#!/bin/sh
##
## Recordar guardar en
## /etc/network/if-up.d/firewallver.sh
## chmod +x /etc/network/if-up.d/firewallver.sh

## Definimos las variables
## Interface conectada a internet
RED_EXT="eth0"
## Interface de red local
RED_INT="eth1"
## Ip de casa para conectar SSH
IP_CASA="190.138.0.101"
## DNS primario
DNS1="208.67.222.222"
## DNS secundario
DNS2="208.67.220.220"
WEBSERVER="192.168.10.20"

## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F

## Establecemos politica por defecto DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

## Por ahora esta todo denegado.
## Debemos decir de manera explicita qué es lo que queremos abrir

## Operar en localhost sin limitaciones
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT

## Este es un servicio que da la maquina a internet,
## por tanto todo paquete entrante se acepta para
## este puerto y los salientes vinculados se aceptan también.
#/sbin/iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
#/sbin/iptables -A OUTPUT -p tcp -m tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT

## Abrir puerto 80 del Web server dentro de la red local
## ( mejor seria una DMZ ;)
/sbin/iptables -t nat -A PREROUTING -i $RED_EXT -p tcp --dport 80 -j DNAT --to-destination $WEBSERVER:80
/sbin/iptables -A FORWARD -i $RED_EXT -o $RED_INT -p tcp --dport 80 -j ACCEPT

## Abrir puerto 22 para administrar ssh desde casa
/sbin/iptables -A INPUT -s $IP_CASA -p tcp --dport 22 -j ACCEPT
/sbin/iptables -A OUTPUT -o $RED_EXT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT

## Abrir puerto 22 para administrar ssh desde la red local
/sbin/iptables -A INPUT -i $RED_INT -p tcp --dport 22 -j ACCEPT
/sbin/iptables -A OUTPUT -o $RED_INT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT

## El puerto 5900 debe estar abierto ya que esta instalado un servidor vnc
#/sbin/iptables -A INPUT -s $IP_CASA -p tcp --dport 5900 -j ACCEPT
#/sbin/iptables -A OUTPUT -o $RED_EXT -p tcp --sport 5900 -m state --state ESTABLISHED,RELATED -j ACCEPT

## Permitimos que el servidor y la red interna puedan salir a:
## Internet (navegación)
/sbin/iptables -A INPUT -p tcp -m tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -m tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT

## webs seguras
/sbin/iptables -A INPUT -p tcp -m tcp --sport 443 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -m tcp --sport 443 -m state --state RELATED,ESTABLISHED -j ACCEPT

## Correo POP3 SMTP
/sbin/iptables -A INPUT -p tcp -m tcp --sport 110 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -m tcp --sport 110 -m state --state RELATED,ESTABLISHED -j ACCEPT

/sbin/iptables -A INPUT -p tcp -m tcp --sport 465 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 465 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -m tcp --sport 465 -m state --state RELATED,ESTABLISHED -j ACCEPT

/sbin/iptables -A INPUT -p tcp -m tcp --sport 995 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 995 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -m tcp --sport 995 -m state --state RELATED,ESTABLISHED -j ACCEPT

/sbin/iptables -A INPUT -p tcp -m tcp --sport 587 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 587 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -m tcp --sport 587 -m state --state RELATED,ESTABLISHED -j ACCEPT

## Reglas necesarias para FTP pasivo y activo.
## Se permiten conexiones entrantes establecidas previamente
/sbin/iptables -A INPUT -p tcp -m tcp --sport 20:21 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 20:21 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -m tcp --sport 20:21 -m state --state RELATED,ESTABLISHED -j ACCEPT

/sbin/iptables -A INPUT -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 1024:65535 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -m tcp --sport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT

## Permitimos la consulta a un primer DNS
/sbin/iptables -A INPUT -s $DNS1 -p udp -m udp --sport 53 -j ACCEPT
/sbin/iptables -A OUTPUT -d $DNS1 -p udp -m udp --dport 53 -j ACCEPT
/sbin/iptables -A FORWARD -s $DNS1 -p udp -m udp --sport 53 -j ACCEPT

## Permitimos la consulta a un segundo DNS
/sbin/iptables -A INPUT -s $DNS2 -p udp -m udp --sport 53 -j ACCEPT
/sbin/iptables -A OUTPUT -d $DNS2 -p udp -m udp --dport 53 -j ACCEPT
/sbin/iptables -A FORWARD -s $DNS2 -p udp -m udp --sport 53 -j ACCEPT

## Permitimos que se actualize la hora con internet
/sbin/iptables -A INPUT -p udp -m udp --sport 123 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p udp -m udp --dport 123 -j ACCEPT
/sbin/iptables -A FORWARD -p udp -m udp --sport 123 -m state --state RELATED,ESTABLISHED -j ACCEPT

## FORWARD
## Aceptar los paquetes a hacer forward
/sbin/iptables -A FORWARD -i $RED_INT -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -o $RED_EXT -j MASQUERADE

## Habilita el forwarding para poder responder
echo 1 > /proc/sys/net/ipv4/ip_forward

# Barrera de backup por si cambiamos a modo ACCEPT temporalmente
# Con esto protegemos los puertos reservados y otros conocidos
/sbin/iptables -A INPUT -p tcp -m tcp --dport 1:1024 -j DROP
/sbin/iptables -A INPUT -p udp -m udp --dport 1:1024 -j DROP
/sbin/iptables -A INPUT -p tcp -m tcp --dport 1723 -j DROP
/sbin/iptables -A INPUT -p tcp -m tcp --dport 3306 -j DROP
/sbin/iptables -A INPUT -p tcp -m tcp --dport 5432 -j DROP

#iptables -L -n para verificar las reglas
# Fin del script

La parte que me preocupa es esta:

Código:
## Abrir puerto 80 del Web server dentro de la red local
## ( mejor seria una DMZ ;)
/sbin/iptables -t nat -A PREROUTING -i $RED_EXT -p tcp --dport 80 -j DNAT --to-destination $WEBSERVER:80
/sbin/iptables -A FORWARD -i $RED_EXT -o $RED_INT -p tcp --dport 80 -j ACCEPT

Comentarios y sugerencias espero.
Gracias.
3  Programación / Scripting / [BATCH] Código para bloquear archivos y/o directorios en: 5 Octubre 2012, 13:08 pm
Estoy "trabajando" en un código para bloquear los archivos y/o directorios que están dentro de mis documentos en windows xp.

Código:
echo S|CACLS "%USERPROFILE%\Mis documentos\*.*" /T /E /C /P TODOS:N

Funciona, de cierta manera... no se puede entrar en las carpetas que contiene mis documentos, pero con programas como word revisas los archivos usados recientes y abre los archivos que están dentro de las carpetas que contiene mis documentos.
De igual manera si estos directorios tiene accesos directos creados en el escritorio puedo entrar sin problema  :-[

No quiero borrar nada, solo ocultar o evitar su uso.
Repito, en windows xp quiero usar el código.
4  Programación / Scripting / Ayuda memoria de comandos Gnu-Linux con útiles ejemplos en: 22 Septiembre 2012, 03:30 am
Comandos GNU/Linux - Unix

Ayuda memoria de comandos con útiles ejemplos
Para algunos comandos se debe usar sudo o ser el usuario root

Código:
[b]Trabajando con archivos y directorios[/b]

ls - lista el contenido de un directorio
ls -a - listar archivos y archivos ocultos
ls -l - información detallada de los ficheros y directorios listados
ls -l | grep ^d - lista solo los directorios en la ubicación actual
ls -lrt - listar los ficheros ordenados temporalmente
ls -lSrh - muestra una lista de los ficheros de una carpeta ordenados por tamaño (los más grandes al final)
ls -l >listado - lista el contenido de un directorio y lo guarda al principio en el archivo listado borrando todo su contenido
ls -l >>listado - lista el contenido de un directorio y lo guarda al final en el archivo listado
grep gato < archivo - muestra por pantalla las líneas del archivo que contienen la palabra "gato"
yes "Hola, soy yo" - escribe en consola, sin parar, "Hola, soy yo"
ls /bin | less - lista archivos por pantalla permitiendo deslizar la lista de arriba hacia abajo
ls /usr/bin | pr -T9 -W$COLUMNS - lista archivos y muestra por pantalla 9 columnas en ancho de la terminal
cd - moverse al directorio de trabajo
cd - - regresa a la ubicación anterior
cd .. - sube un nivel de directorios
pwd - mostrar la ruta actual
dirs - mostrar la ruta actual
pushd . - guarda el directorio actual en la pila para luego, poder
hacer popd y volver al mismo
file archivo - describe que tipo de archivo es
stat archivo - mostrar el estado del archivo
rm archivo1 - borra el archivo1
rm -r dir1 - borra el directorio dir1
rm -f archivo - borra archivo sin pedir confirmación
rm -rf dir2 - borra dir2 sin pedir confirmación
shred -fvzu archivo - borra definitivamente un archivo
cp archivo1 archivo2 - copiar archivo1 en archivo2
cp * /home/usuario - copia todos (*) los ficheros de la ubicación actual a la ruta especificada
cp -r dir1 dir2 - copiar el dir1 en dir2  si no existe se crea (cuando un usuario copia un archivo o directorio se convierte en su propietario)
cp -Rvf /home/usuario/datos /home/usuario/respaldo - copia un directorio completo a otro directorio mostrando el estado de la copia
rsync --progress archivo1 archivo2 - copia mostrando el progreso
mv archivo1 archivo2 - renombra archivo1 como archivo2 si archivo2 es un directorio lo mueve dentro el mismo
mv nuevo.txt .. - mueve un archivo al directorio del nivel superior
rename -v 's/ /_/g' * - sustituir los espacios por guiones bajos en la ubicación actual
ls -1 | while read a; do mv "$a" `echo $a | sed -e 's/\ /\./g'`; done - cambia los espacios por . en la ubicación actual
ln -s archivo link - crea un enlace simbólico de link hacia archivo
touch archivo – crea o actualiza archivo
cat > archivo – redirecciona lo que se ingrese por teclado a un archivo
cat archivo1 >> archivo2 – copia el contenido de archivo 1 al final del archivo2
cat <<.>> archivo - crear/escribir en un archivo sin abrir el editor de textos, para salir tipear un en una linea solo un . y enter
cat archivo1 | sort >archivo2 - ordena alfabéticamente las líneas de un archivo
cat archivo1 | tr 'a' 'A' > archivo2 - cambia unos caracteres por otros y crea como resultado el archivo2
more archivo - muestra el contenido de un fichero de forma paginada
less archivo - muestra el contenido del archivo  por pantalla permitiendo deslizar la lista de arriba hacia abajo
less +G archivo - visualizar el archivo empezando desde el final
head file - muestra las 10 primeras filas de file
tail archivo - muestra las 10 últimas filas del archivo
tail -f archivo - muestra las 10 últimas filas del archivo a medida que va creciendo
mkdir directorio - crea un directorio
mkdir $(date +%F) - crea un directorio con la fecha actual
mkdir -p /home/usuario/tesis/enero - crear un árbol de directorios (si tesis no existe lo crea)
mkdir -m 777 directorio -  crea un directorio asignándole los permisos
java -jar archivo.jar - ejecuta un programa java
nano -B /home/usuario/informes - hace un backup del archivo antes de guardarlo y le agrega un ~
convert -resize 640x480 original.jpg modicada.jpg - redimensiona una imágen
convert imágen_color.jpg -monochrome imágen_byn.jpg - convertir una imagen a blanco y negro
convert *.jpg catálogo.pdf - crear un catálogo pdf con imágenes
identify imagen.jpg - ver las propiedades de una imagen
animate imagen.gif - visualizar gif animados
convert fichero.pdf extraido - extraer las imágenes de un pdf
gpg -c archivo - cifra archivo
gpg archivo.gpg - descifra archivo
view archivo - visor de archivos
mcedit archivo - editor de archivos


[b]Gestión de medios[/b]

mount /dev/cdrom /mnt/cdrom - monta la unidad de cd en /mnt/cdrom
umount /dev/cdrom /mnt/cdrom - desmonta la unidad de cd de /mnt/cdrom
cat /dev/cdrom > debian.iso - crea una imagen iso del cd
dd if=/dev/cdrom of=/tmp/imagen.iso - crea una imagen iso del cd
cat /dev/sda > /dev/sdb - copia todo el disco duro 'sda' en el disco duro 'sdb'
mkisofs -L -max-iso9660-filenames -o documentos.iso /home/usuario/Documentos - crear una imagen ISO a partir de un directorio
mkisofs /mnt/cdrom | gzip > cd_iso.gz - crear una imagen ISO comprimida de un cd
gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom - grabar a CD una imagen ISO comprimida
md5sum archivo.iso > archivo.iso.txt - generar la suma control MD5 de un archivo
md5sum -w -c archivo.iso.txt - verificar la suma control MD5 de un archivo
(archivo.iso y archivo.iso.txt deben estar en el mismo directorio)
dd if=/dev/dvd | md5sum - ejecutar un checksum md5 en un dispositivo como un DVD
md5sum -cv software.tar.gz.md5 - comprueba el archivo software.tar.gz y el archivo de firma MD5
mount -o loop -t iso9660 /ruta/de/imagen.iso /puntodemontaje – monta una imagen iso
cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force - borrar un cdrom
cdrecord -v speed=8 dev=0,0,0 imagen.iso - grabar una imagen ISO a 8x
mount -t ext3 /dev/particionLinux /mnt/carpetademontaje - monta un sistema de ficheros ext3
mount /dev/usbdisk /mnt/carpetademontaje - monta un dispositivo USB
badblocks -v /dev/hda1 - verificar la existencia de bloques erróneos en el disco hda1
fsck /dev/hda1 - reparar-verificar integridad de un sistema de archivos linux en el disco hda1
mke2fs /dev/hda1 - crear un sistema de archivos tipo linux ext2 en la partición hda1
mke2fs -j /dev/hda1 - crear un sistema de archivos tipo linux ext3 (journal) en la partición hda1  
mkfs /dev/hda1 - crear un sistema de archivos tipo linux en la partición hda1
mkfs -t vfat 32 -F /dev/hda1 - crear un sistema de archivos FAT32
mkswap /dev/hda3 - crear un sistema de archivos swap
swapon /dev/hda3 - activar una nueva partición swap
swapon /dev/hda2 /dev/hdb3 - activar dos particiones swap


[b]Gestión de procesos[/b]

ps - muestra los procesos activos del usuario
ps -aux - muestra todos los procesos del sistema
pstree -AGUp - muestra los procesos en forma de árbol con número de PID
ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS - muestra los procesos ordenados por uso de memoria (los que más memoria usan al final)
top - muestra todos los procesos y su consumo de cpu ram y swap en tiempo real
kill pid - mata el proceso con id pid
killall proc - mata todos los procesos proc
bg - lista los procesos parados o en segundo plano
fg - lleva el proceso más reciente a primer plano
fg n - lleva proceso n a primer plano
time comando - mide el tiempo que se ejecuta comando
nice proceso prioridad - permite ajustar la prioridad de un proceso de -20 a 19 (por defecto es 10 su valor)


[b]Permisos[/b]

chmod 777 archivo - lectura, escritura y ejecución para el propietario, grupo, y otros
chmod 775 archivo - lectura, escritura y ejecución para el propietario y grupo, lectura y ejecución para otros
chmod 755 archivo - lectura, escritura y ejecución para el propietario, lectura y ejecución para  grupo y otros
chmod 750 archivo - lectura, escritura y ejecución para el propietario para el propietario, lectura y ejecución para  grupo, otros nada
chmod 700 archivo - lectura, escritura y ejecución para el propietario para el propietario, grupo y otros nada
umask - muestra el valor de la máscara del usuario para creación de archivos y directorios (predeterminada umask 022 = chmod 755)
umask 077 - fija el valor de la máscara del usuario para creación de archivos y directorios a 077 que es igual  a chmod 700
chown usuario archivo - cambia de propietario el archivo o directorio
chown usuario:grupo archivo - cambia el propietario del fichero o directorio y el grupo al cual pertenece
chgrp grupo archivo - cambia el grupo del archivo al grupo especificado
chgrp -R internet descargas - asignar al grupo internet el directorio descargas
chattr -R +i directorio - protege el directorio y su contenido recursivamente de escritura/borrado/modificación
stat -c '%A %a %n' archivo - mostrar los permisos en formato octal de un archivo o directorio


[b]Comandos relacionados con shell script[/b]

echo $0 - muestra cuál shell esta en uso
cat /etc/shells – muestra las shells disponibles en el sistema
script.sh - todos los scripts por regla general deben terminar con .sh no es obligatorio pero permite identificarlos más fácilmente al usuario
#!/bin/bash - en la primera línea del script se debe indicar que shell se va a usar
# - la almohadilla indica que en esa linea del script todo lo escrito es un comentario, estos comentarios no se verán en pantalla cuando se ejecute el script
chmod +x script.sh - asigna permisos de ejecución al script
./script.sh - ejecuta un script
sh script.sh - ejecuta el fichero de script especificado
source script.sh - ejecuta un script aunque no tenga permisos de ejecución
sh -n tu_script.sh - comprueba errores de sintaxis en el script sin ejecutarlo, si no retorna nada entonces el script no tiene errores de sintaxis
echo hola - escribe el mensaje hola en la salida estándar (pantalla)
echo '*' - nos muestra por pantalla el carácter especial *. Las terminal interpreta todo lo que esta dentro de las comillas como un carácter sin significado especial, ídem para variables, espacios y símbolos   ? [ ] > >> < & ; \ ' )  |
echo \*.jpg - elimina el significado especial de un único carácter anteponiendole una barra invertida \
echo `date` - ejecuta el comando date insertado dentro de las comillas invertidas y muestra por pantalla la fecha y hora actual
env - muestra las variables globales
set | less - muestra todas las variables de entorno shell y su valor
unset HISTFILE - deshabilita el historial para la cesión actual
echo $ +Tab+Tab - muestra las variables disponibles (comando echo $ y después pulsamos dos veces la tecla TAB )
DESTINO="192.168.1.233" - define la variable DESTINO con el valor 192.168.1.233
echo $DESTINO - muestra por pantalla el valor de la variable DESTINO
export VARIABLE - exporta una variable para que se convierta en una variable global
export nombrevariable=valor - cambia el valor de una variable de entorno
alias listar='ls -lah' - creará un nuevo comando llamado listar, que cada vez que se ejecute será igual que si ejecutásemos el comando ls -lah
read -p "Introduce tu nombre nombre:" nombre - crea una variable a partir de lo que se ingresa por el teclado
read -sn1 -p "Presione una tecla para continuar..."; echo - comando de pausa en bash
test -d /home/usuario && echo "Existe el directorio" - informa por pantalla únicamente si  el directorio existe
ssh -T user@server < script.sh - ejecuta un script local en un servidor remoto


[b]SSH – SCP - FTP[/b]

ssh usuario@pc_remota - conectar a pc_remota como usuario
ssh -p 22 -l usuario 192.168.1.9 - conectar a pc_remota (192.168.1.9) por el puerto 22 como usuario
ssh usuario@pc_remota last -10 - ejecuta el comando en la pc remota sin necesidad de hacer login
ssh-copy-id usuario@pc_remota - añadir clave de usuario a pc_remota para autenticarte
scp usuario@ordenador_remoto:/directorioremoto/fichero /tmp/nuevofichero
copia un fichero remoto al directorio local /tmp
scp -r usuario@ordenador_remoto:/directorioremoto/directorio /tmp/nuevodir
copia un directorio remoto con todo su contenido al equipo local
scp /tmp/fichero1 usuario@ordenador_remoto:/directorioremoto/nuevofichero
copia el fichero1 a un equipo remoto
scp -r /tmp/directorio usuario@ordenador_remoto:/directorioremoto/nuevodir
copia el directorio con todo su contenido a un equipo remoto
ftp -i -n 95.211.109.197 - se conecta con el servidor FTP
nlist . /home/usuario/lista_ftp - obtiene un listado de los archivos del FTP y se guarda en como lista_ftp
rename backup backupold - renombra el directorio backup a backupold del FTP

[b]Búsqueda[/b]

ls | grep frase - buscar patrón frase en la salida del comando ls
ls archivoa archivob archivoc 1>existentes 2>inexistentes -  busca en un directorio los archivos solicitados y guarda 2 resultados, existentes y inexistentes
grep frase archivo - buscar patrón frase en archivo
grep -r frase directorio – buscar recursivamente patrón frase en directorio
grep -w -v -f  archivo1 archivo2 – muestra en pantalla una lista de las lineas de archivo2 que no están en archivo1
locate archivo - busca instancias de archivo
perl -i.bak -pe 's/manzana/naranja/; s/dollar/euro/; s/foo/bar/;' archivo - crea un backup y luego cambia la palabra manzana por naranja, dolar por euro
find . -name tesis - busca archivos y carpetas con el nombre tesis en la ubicación actual
find . -iname tesis - busca archivos y carpetas con el nombre tesis aunque tenga mayúsculas o minúsculas indistintamente en la ubicación actual
find . -user alumno - buscar archivos y carpetas que le pertenezcan al usuario alumno en la ubicación actual
find . -type f -mtime -10 - buscar archivos creados o modificados en los últimos diez días la ubicación actual
find . -type f -atime +10 - busca archivos que no han sido usados en los últimos 10 días en la ubicación actual
find . -type f -mtime -2 -exec cp -r '{}'  /home/usuario/backup \;
busca en el directorio actual archivos creados o modificados los últimos 2 días y los copia a la ruta especificada
find . -mtime +2 -exec rm -rf {} \;
borra archivos de 2 días de antigüedad en el directorio actual (OJO)
find . -name \*.txt -exec chmod 755 '{}' \;
buscar en el directorio actual archivos con extensión '.txt' y modifica sus permisos a 755
find -type f ! -perm -444 - buscar archivos con permiso de solo lectura



[b]Información del sistema[/b]

uname -a - muestra información de la máquina y el sistema operativo
lsb_release -a - muestra que distribución esta instalada
head -n1 /etc/issue - muestra el nombre y la versión de la distribución instalada
date - muestra la fecha y hora del sistema en formato local
date -u - muestra la fecha y hora del sistema en formato universal (UTC)
hwclock --show - muestra la hora de la BIOS
grep UTC /etc/default/rcS - Comprobamos si la BIOS tiene hora local o universal (UTC)
uptime - tiempo que lleva encendido el sistema
who -b - muestra la fecha y hora del último reinicio del sistema
who -u - nos dice quienes están conectados al sistema
w - es una variación del comando who que ofrece más información
whoami - nombre de mi usuario
finger usuario - muestra información sobre usuario
man comando - páginas de manual del comando
man -k palabra-clave - busca dentro de las descripciones de man la palabra clave  ejemplo: man -k e2fs
info comando - paginas de manual gnu info
comando --help - da una ayuda sobre el comando
apropos palabra_clave - busca dentro de las descripciones de man la palabra clave
apropos -e palabra_exacta - busca dentro de las descripciones de man la palabra exacta
whereis aplicación - localiza el binario, fuente y página de manual de app
whatis comando - muestra descripción del comando
which comando - localiza la aplicación mostrando la ruta de acceso del fichero ejecutable
type comando - muestra la ubicación del comando especificado
df -h - muestra espacio libre en los discos
du -hs /home/usuario - muestra espacio usado por el usuario
lsmod - muestra los módulos cargados en el kernel
ls -l /etc/init.d - muestra los servicios instalados en el equipo
fc-list | cut -d ':' -f 1 | sort -u - muestra las fuentes instaladas en el sistema

[b]Información de hardware[/b]

cat /proc/cpuinfo - información sobre la CPU
cat /proc/meminfo - información sobre el uso de la memoria
cat /proc/swaps - información sobre el uso de la memoria swap
cat /proc/net/dev - verifica los adaptadores de red y sus estadísticas
cat /proc/mounts - muestra los sistemas de ficheros que se encuentran montados
cat /proc/version - muestra información del sistema operativo
cat /proc/interrupts - mostrar interrupciones
vmstat - muestra estadísticas de uso de la memoria, cpu, lectuas/escrituras en disco, etc
ls pci - lista los dispositivos PCI con lo que dispone el equipo
ls usb - lista los dispositivos USB con lo que dispone el equipo
dmidecode q | less - muestra la información del BIOS en un listado muy completo de todo el hardware encontrado en el equipo
dmidecode -t baseboard - muestra información de la placa madre
dmidecode -t bios - muestra información de la BIOS
lshw - lista el hardware del equipo
lsmod - muestra el estado de los módulos en el Kernel del sistema
free - uso de memoria y memoria swap
dmesg - muestra los mensajes del kernel durante el inicio del sistema
fdisk -l - muestra información de las particiones
hdparm -i /dev/sda - despliega las características de un disco duro
hdparm -tT /dev/sda - realiza un test para calcular la velocidad de transferencia del disco duro indicado



[b]Empaquetado y compresión[/b]

tar cf archivo.tar archivo - empaqueta archivo en un fichero archivo.tar
tar xf archivo.tar - extrae el contenido de archivo.tar
tar czf archivo.tar.gz archivo – empaqueta y comprime (gzip) archivo en archivo.tar.gz
tar xzf archivo.tar.gz - extrae y descomprime usando Gzip
tar zxvf directorioEmpaquetado.tar.gz -C home/usuario/dirdestino - desempaqueta y descomprime en el directorio destino
tar czv debian.iso | split -b100m – debian.tar.gz - comprime un archivo iso y lo separa en partes de 100mb
cat debian.tar.gz* | tar xzvf - - une los archivos que antes separamos
tar cjf archivo.tar.bz2 archivo - empaqueta y comprime (bzip2) archivo en archivo.tar.bz2
tar xjf file.tar.bz2 - extrae y descomprime usando Bzip2
bzip2 documento - crea el archivo documento.bz2 y borra el original
bzip2 -d documento.bz2 - descomprime el archivo.tar.bz2
tar jxvf dircomprimido.tar.bz2 -C /home/usuario/dirdestino - desempaqueta y descomprime en el directorio destino
gzip archivo - crea el archivo archivo.gzip y borra el original
gzip -d archivo.gz - descomprime archivo.gz
split -b10m archivo - troza un archivo en partes de 10mb con nombres xaa xab xac…
cat x* > archivo - une los archivos xaa xab xac….


[b]Redes[/b]

ifconfig -a - muestra la configuración de red
ip addr show - muestra todas las direcciones de todas las interfaces de red del equipo
curl ifconfig.me - muestra la IP externa (requiere conexión a Internet)
iwlist scan - mostrar redes inalámbricas disponibles
ip link | awk '/link/ {print $2}' - lista las MAC address del equipo
ifconfig eth0 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255 up asigna la ip, la mascara y el broadcast al dispositivo de red eth0
route add default gw 192.168.1.1 eth0 - asigna la puerta de enlace al dispositivo de red eth0
echo "nameserver x.x.x.x" > /etc/resolv.conf - configura el 1er servidor DNS
echo "nameserver x.x.x.x" >> /etc/resolv.conf - configura el 2do servidor DNS
ping host - hace ping a host y muestra los datos
ping -c 10 192.168.1.2 - hace ping 10 veces luego se detiene
whois dominio - información del dominio
wget -c www.servidor.com/archivo.zip - inicia o continua una descarga parada
wget -c –passive-ftp ftp://archivo.zip - continua o inicia una descarga usando el modo pasivo del FTP
wget -r www.ejemplo.com - descargar un sitio web completo
wget -o /reporte.log --limit-rate=50k ftp://ftp.centos.org/download/centos5-dvd.iso | at 01:00 - inicia la descarga a la 1 am, limitada a 50k y crea un reporte
wget –http-user=usuario –http-password=contraseña http://ejemplo.com/archivo.mp3
descarga de un sitio donde se requiere de usuario y contraseña
wget -r -l10 www.sitioweb.com – descarga un sitio web recursivamente hasta 10 niveles
/etc/init.d/networking restart - reinicia la red
restart smbd - reinicia samba
/etc/init.d/samba restart - reinicia samba
rm /etc/udev/rules.d/70-persistent-net.rules
útil cuando remplazamos físicamente la tarjeta de red
netstat -i - visualiza las estadísticas de todos los dispositivos de red configurados
netstat -a - muestra las conexiones de red actuales
netstat -putall - muestra los puertos abiertos
netstat -ant - muestra las conexiones activas a internet
lsof -Pni4 | grep LISTEN - comprobar los puertos abiertos
netstat -ln - conexiones activas a Internet
netstat -atun | grep ESCUCHAR - muestra las conexiones establecidas a puertos determinados
ip route show - muestra todas las rutas definidas en nuestro equipo
mount -t cifs //ipservidor/dircompartido /home/usuario/carpetademontaje -o user=usuario,passwd=contraseña - monta en el pc un directorio compartido en red
ifconfig wlan0 down - detiene la interfaz de red especificada
ifconfig wlan0 up - inicia la interfaz de red especificada
ifconfig wlan0 hw ether 02:01:02:03:04:08 - cambia el mac adress del dispositivo de red wlan0 (previamente detener la interfaz de red y luego iniciarla)
sudo -s "echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all" - deshabilita la respuesta de ping
sudo -s "echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all" - habilita la respuesta de ping
twistd -n web --path . - publica el directorio actual en http://ipdelpc:8080/
dd if=/dev/zero bs=256 count=1048576 | ssh user@ipserv 'cat > /dev/null' - test de velocidad de la red (realizada copiando 256 mb de datos vacíos)



[b]Backup y resguardo del sistema[/b]

dd bs=1M if=/dev/sda | gzip | ssh usuario@ip_serv 'dd of=sda.gz' - hacer un respaldo de un disco duro local en un host remoto via ssh
dd if=/dev/sda of=/tmp/file1 - respaldar el contenido del disco duro a un archivo
dump -0aj -f /tmp/home0.bak /home - hacer un respaldo completo del directorio '/home'
dump -1aj -f /tmp/home0.bak /home - hacer un respaldo incremental del directorio '/home'
restore -if /tmp/home0.bak - restaurar un respaldo interactivamente
rsync -rogpav --delete /home /tmp - sincronización entre directorios (ver todavia)
rsync -rogpav -e ssh --delete /home ip_address:/tmp - sincronización a través de un túnel SSH
rsync -az -e ssh --delete ip_addr:/home/public /home/local - sincronización de un directorio local con uno remoto vía ssh y compresión
rsync -az -e ssh --delete /home/local ip_addr:/home/public - sincronización de un directorio remoto con uno local vía ssh y compresión
tar -Puf backup.tar /home/usuario - hacer un respaldo incremental del directorio /home/usuario
( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr 'cd /home/share/ && tar x -p' - copiar el contenido de un directorio a un directorio remoto via ssh
( tar c /home ) | ssh -C user@ip_addr 'cd /home/backup-home && tar x -p'   copiar el contenido de un directorio local a un directorio remoto via ssh
tar cf - . | (cd /tmp/backup ; tar xf - ) - copia local, preservando permisos y ligas de un directorio a otro
lftp -u login,passwd -e "mirror --reverse /dir/local/ /ftp/dir/destino/" ftp.server - hace un espejo de un directorio local a un directorio ftp
sfdisk -d /dev/sda | sfdisk /dev/sdb - copia la tabla de partitiones de /dev/sda a /dev/sdb


[b]Automatizando el backup[/b]

nano /etc/crontab - edita el servicio de tareas programadas cron

Algunos ejemplos de cron

17 * * * * usuario /home/usuario/miscript.sh - ejecuta la tarea en el minuto 17 de cada hora todos los días
30 10,18,21 * * * usuario /home/usuario/miscript.sh - ejecuta la tarea en el minuto 30 de las horas 10,18 y 21 todos los días


[b]Instalación de software[/b]

Instalar desde las fuentes
./configure
make
make install
./arhivo.bin - instala un archivo binario, previamente darle permisos de ejecución con chmod +x archivo.bin

[b]Instalar paquetes Debian y derivados[/b]

dpkg -i paquete.deb - instala un paquete deb
dpkg -l - listado de todos los paquetes instalados
dpkg -i * - instala todos los paquetes deb contenidos en el directorio en que se ejecuta
dpkg -r paquete.deb - desinstala paquete deb
dpkg -P paquete.deb - desinstala un paquete y borra sus los archivos de configuración
dpkg-deb -I mipaquete.deb - lista las dependencias de un paquete .deb
apt-get install samba - instala la aplicación especificada (requiere conexión a internet)
apt-get update - actualiza la base de datos de paquetes a actualizar o instalar a partir del fichero /etc/apt/sources.list (requiere conexión a internet)
apt-get upgrade - actualiza todos los paquetes instalados en el sistema a la última versión disponible (requiere conexión a internet)
apt-get -s dist-upgrade - hacer una simulación de los programas que se van a actualizar, sin llegar a hacerlo
apt-get install -f paquete - comprueba la correcta instalación de/los paquetes descargados y sus dependencias (requiere conexión a internet)
apt-cache search aplicación - busca una aplicación en la lista de aplicaciones a instalar
apt-cache show aplicación - mostrar información del programa

[b]Instalar paquetes Red Hat y derivados[/b]

rpm -Uvh pkg.rpm - instala paquete rpm
rpm -qpR paquete - lista las dependencias de un paquete .rpm
yum install paquete - instala un paquete
yum update paquete - actualiza paquetes asegurando dependencia
yum check-update - revisa paquetes a actualizar
yum remove paquete - borra paquetes


[b]Combinaciones de teclas[/b]

Ctrl+A - inicio de linea
Ctrl+E - fin de linea
Ctrl+C - interrumpe el comando activo
Ctrl+Z - suspende el comando activo, con fg se reanuda y con bg se lleva a segundo plano
Ctrl+D - abandona sesión actual, similar a exit
Ctrl+W - borra una palabra en la línea actual
Ctrl+U - borra toda la línea
Ctrl+K - elimina hasta el fin de la linea
Ctrl+Y - restablece la linea borrada
Ctrl+L - limpia la pantalla
Ctrl+R - intercambia los dos últimos caracteres
Ctrl+H - retroceso
Ctrl+J - equivale a enter
Ctrl+X+E - invoca al editor de textos predeterminado
Alt+F1 a Alt+F6 abre una nueva terminal.
Alt+. - inserta el último argumento del comando anterior
Alt+Esc - inserta el último argumento del comando anterior
Alt+_ - inserta el último comando
Tab - auto-completa el comando
Shift+RePág - se desplaza hacia arriba
Shift+AvPág - se desplaza hacia abajo
echo -e "Terminal shortcut keys\n" && sed -e 's/\^/Ctrl+/g;s/M-/Shift+/g' <(stty -a 2>&1| sed -e 's/;/\n/g' | grep "\^" | tr -d ' ') - muestra un listado con los atajos de teclado disponibles


[b]Administración del sistema[/b]

sudo - permite la ejecución de comandos como superusuario (solicita la propia contraseña)
sudo su - trabaja con privilegios de administrador en su propio entorno (solicita la propia contraseña)
sudo -i - trabaja con privilegios de administrador en el entorno del root (solicita la propia contraseña)
su - trabaja con privilegios de administrador en su propio entorno (solicita la contraseña de root)
su - - trabaja con privilegios de administrador en el entorno del root (solicita la contraseña de root)
sudo -e /etc/samba/smb.conf - sudoedit invoca al editor de textos por defecto
visudo - muestra y permite editar el fichero /etc/sudoers, donde se le indica al sistema qué usuarios podrán ejecutar comandos como si fuesen el usuario root utilizando el comando "sudo"
exit - abandona la sesión actual
logout - terminar sesión
init 0 - apaga la maquina
init 1 - modo monousuario
init 2 - modo multiusuario, sin funciones de red
init 3 - modo multiusuario, con funciones de red
init 4 - no utilizado
init 5 - X11 multiusuario, red, modo gráfico
init 6 - reinicia la maquina
reboot - reiniciar sistema
halt - apaga el equipo
poweroff - apaga el equipo
shutdown -h now - apaga el sistema instantáneamente
shutdown -h +5 - apaga la pc en 5 minutos
shutdown 15 'El sistema se cerrará en 15 minutos, guarde su información'
envía un mensaje a todos los usuarios conectados y apaga el sistema en 15 min
shutdown -h 15:35 "El sistema se apagará a las 15:35" - envía un mensaje a todos los usuarios conectados y apaga el sistema a la hora indicada
shutdown -r now - reiniciar el sistema instantáneamente
shutdown -r 20:00 - reinicia el equipo a la hora y minuto indicada
history 10 - muestra los  últimos 10 comandos ejecutados
history -c - borra el historial de comandos ejecutados
history -r - borra el historial de la cesión actual
dpkg-reconfigure tzdata - reconfigura la zona horaria del sistema
apt-get clean - elimina todos los paquetes descargados (almacenados automáticamente en /var/cache/apt/archives
date -s "04/25/11" +"%D" - cambia la fecha del sistema al 25 de Abril del 2011
date -s "15:00:00" +"%T" - cambia la hora del sistema a las 15:00
hwclock -systohcv - ajusta el reloj de la BIOS a la hora del sistema
hwclock -hctosys - ajusta el reloj del sistema a la hora de la BIOS
ntpdate -u ntp.ubuntu.com - sincroniza la hora con la del servidor
at -f script.sh 11:28 25.04.11 - ejecuta un script el 25 del 4 del 2011 a las 11:28 minutos
atq - lista las tareas automáticas programadas
atrm 8 - elimina la tarea número 8
service cron restart - reinicia un servicio (cron en este caso)
service smbd stop - detiene un servicio (samba en este caso)
service apache2 start - inicia un servicio ( apache en este caso)
smbstatus - muestra el estado del servicio samba
watch -n 10 comando - ejecuta un comando cada 10 segundos
last - lista el historial de accesos al sistema
lastb - lista el historial de accesos fallidos al sistema
last reboot - muestra las veces que el equipo se ha reiniciado, la fecha, la hora y el tipo de reinicio
ldd /usr/bin/ssh - muestra las librerías requeridas por archivos ejecutables (ssh en este caso)
fsck /dev/sda1 - comprueba el sistema de ficheros de la partición sda1
echo 10 | sudo dd of=/proc/acpi/video/VGA/LCD/brightness - establece el brillo de la la pantalla del LCD en 10%
touch /forcefsck – ejecuta un chequeo del sistema la próxima vez que se inicie
add-apt-repository ppa:gezakovacs/ppa - agrega repositorios desde la terminal
badblocks -n -s /dev/sda - comprueba sectores averiados en la unidad sda
apt-get --just-print upgrade - lista actualizaciones disponibles sin actualizar el sistema
sync; echo 3 > /proc/sys/vm/drop_caches - borrar la memoria caché
watch lsof -i :80 - muestra quien esta visitando nuestra web
/etc/modprobe.d/blacklist - añadir el módulo a la lista negra por lo que no se cargará cuando se inicie el sistema
fuser -k 80/tcp - esto cerrará el puerto 80, puerto por defecto utilizado por el servidor web
taskset -c 0 comando - ejecuta el comando usando solo un núcleo del CPU



[b]Administración de usuarios[/b]

passwd - asigna o cambia la contraseña del usuario actual
passwd root - asigna o cambia contraseña al usuario root
passwd -e usuario - expira inmediatamente la contraseña del usuario forzándole a cambiarla la próxima vez que inicie cesión
passwd -d usuario - borra la contraseña permitiendo entrar sin password al usuario
passwd -l usuario - bloquea la cuenta de un usuario
passwd -u usuario - desbloquea la cuenta de un usuario bloqueado
userdel usuario -  elimina al usuario del sistema
chage -E 2011-12-31 usuario - estable la fecha limite en la que el password del usuario caduca
chage -d 0 -m 0 -M 60 usuario - se le solicitará al usuario cambiar la contraseña la próxima vez que inicie cesión
groups usuario - muestra los grupos a los que pertenece el usuario
id usuario - muestra identificación del usuario y los grupos a los que pertenece
pinky -l usuario - proporciona información del usuario, directorio de trabajo y cual shell usa
addgroup nuevogrupo - crea un grupo
groupadd nuevogrupo - añade un nuevo grupo
adduser nuevousuario - crea un nuevo usuario
adduser -u 0 -o -g 0 -G 0,1,2,3,4,6,10 -M usuario - añade un usuario al sistema operativo como si se tratase del superusuario root (con los mismos permisos)
usermod -G grupoa,grupob usuario - asigna grupos a un usuario
useradd -s /sbin/nologin usuario - crea la cuenta usuario desactivada, ideal para usuarios samba
smbpasswd -a usuario - crea la contraseña samba al usuario
chfn usuario - cambia el nombre real del usuario e información adicional
openssl rand -base64 8 - genera un password aleatorio de 8 dígitos

[b]Archivos de configuración[/b]

/etc/hostname - muestra el nombre del equipo
/etc/hosts.allow - equipos con permiso de conectarse
/etc/hosts.deny - equipos sin permiso de conectarse
/etc/samba/smb.conf - configuración de samba
/etc/network/interfaces - configuración de las interfaces de red
/etc/cups/cupsd.conf - configuración del servicio de impresión
/etc/squid/squid.conf - configuración del proxy caché squid
/etc/resolv.conf – configuración de servidores dns
/etc/crontab – configuración del servicio de tareas programadas cron
/etc/fstab - configuración de fstab
/etc/sudoers - configuración de usuarios que podrán ejecutar comandos como si fuesen el root utilizando el comando "sudo"
/etc/apt/sources.list - lista de repositorios de apt

[b]Utilidades[/b]

? - remplaza un único carácter o dígito
~ - directorio de trabajo del usuario actual
$ - usuario normal
# - súper usuario (root)
& - agregando al final del comando permite que se ejecute en segundo plano
!! - ejecutar el último comando utilizado
bc - calculadora en la terminal
| - enlaza ordenes, usado para interconectar procesos
shopt -s cdspell - corregirá automáticamente los errores tipográficos cometidos en las ejecuciones del comando cd
<espacio>date - espacio seguido de un comando ejecuta el comando sin guardarlo en el historial
comando1 || comando2 - el comando2 se ejecuta si comando1 no es exitoso
comando1 && comando2 - únicamente si comando1 se ha ejecutado sin error, se ejecutará comando2
; - ejecuta un comando a continuación de otro
setterm -blank 0 - desactiva el salva pantallas negro, agregar a /etc/rc.local para hacer persistente la orden
clear - borra la pantalla
startx - arranca el servidor gráfico (si esta instalado)
sleep 10 - retarda 10 segundos antes de continuar con lo siguiente
cal - calendario del mes en curso
cal -3 – calendario del mes anterior, actual y siguiente
cal 2011 - calendario completo de un año
cal 09 2011 - calendario correpondiente al mes del año especificado
for y in $(seq 2011 2013); do cal $y; done - muestra el calendario de múltiples años
man -t ls | ps2pdf - > ls.pdf - convertir páginas del manual en archivo pdf
lpr archivo - envía un documento a la cola de impresión
grep -v '^#\|^$\|^;' /etc/samba/smb.conf - visualiza por pantalla las líneas que no tienen comentarios y  omite las lineas en blanco del archivo smb.conf
echo 'hardstatus alwayslastline " %d-%m-%y %c:%s | %w"' >> $HOME/.screenrc; screen - reloj en la última linea de la terminal (exit para salir)
pdftohtml -i -stdout FILE.pdf | w3m -T text/html - visualizar documentos PDFs en la linea de comandos con w3m (sin imágenes)
egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' archivo.txt - extrae las ip's de un archivo

Atención: No es un simple copy y paste, los fui anotando uno a uno durante mi actividad laborar con sistemas Gnu/Linux.

Espero sea de ayuda, así como me sirve cotidianamente a mi.
5  Programación / Scripting / Sumarle 1 mes a la fecha actual en batch en: 20 Septiembre 2012, 15:42 pm
Estoy tratando de ver la forma de hacer un script que a la fecha actual le sume un mes y el resultado se guarde en in archivo.txt, el problema me aparece por ejemplo con el mes 12, encontré un código en la siguiente web http://multingles.net/docs/jmt/sumdias.htm

Código:
@echo off
setlocal ENABLEEXTENSIONS
call :dias %1
set /a j+=%2
call :inc %j%
echo %dd%/%mm%/%yy%
endlocal
goto :EOF

:dias
for /f "tokens=1,2,3 delims=-/." %%a in ("%1") do (
   set dd=%%a&set mm=%%b&set yy=%%c)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
goto :EOF

:inc
set /a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
goto :EOF

Y al final del código explica su forma de uso:
Si lo llamamos por ejemplo inc_fecha.cmd, la manera de invocarlo será:

inc_fecha  fecha  ndias

fecha: admite el formato:  dd.mm.aaaa, dd-mm-aaaa o dd/mm/aaaa
El resultado sumar los "ndias" tecleados a la fecha. (admite signo para restar días)
NOTA: la rutina es exacta teniendo presente la regla de bisiestos en centenarios.

Pero no me da el resultado deseado, alguien puede ayudarme por favor.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines