Created
July 27, 2012 06:17
-
-
Save tonejo/3186439 to your computer and use it in GitHub Desktop.
@GeekScripting blog raw html
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<head> | |
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/> | |
</head> | |
<body> | |
<pre class="brush:plain"> Para el mejor uso de los estilos =) Snifer creo esta plantilla prederminada este puede ser usado como gusto plain</pre> | |
< | |
<hr/><pre class="brush:bash">$ python GeekScrypting.py</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/sh | |
# $Id: versions.sh 30 2007-02-26 19:18:48Z damonp $ | |
# | |
# Shell script to list versions of common server daemons and utilities | |
# | |
# Copyright (c) 2007 Damon Parker < [email protected] > | |
# Licensed under the GNU GPL. See http://www.gnu.org/licenses/gpl.html | |
# This script is not supported in any way. Use at your own risk. | |
# | |
uname -a | |
if [ -f /etc/redhat-release ]; then | |
echo | |
echo Redhat Version: | |
cat /etc/redhat-release | |
fi | |
echo | |
echo Apache: | |
httpd -v | |
php -v | |
echo | |
echo MySQL: | |
mysql -V | |
echo | |
echo Security: | |
ssh -V | |
openssl version | |
echo | |
echo Network: | |
/sbin/ifconfig | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/usr/bin/python | |
import tarfile, sys | |
try: | |
#open tarfile | |
tar = tarfile.open(sys.argv[1], "r:tar") | |
#present menu and get selection | |
selection = raw_input("Enter\n\ | |
1 to extract a file\n\ | |
2 to display information on a file in the archive\n\ | |
3 to list all the files in the archive\n\n") | |
#perform actions based on selection above | |
if selection == "1": | |
filename = raw_input("enter the filename to extract: ") | |
tar.extract(filename) | |
elif selection == "2": | |
filename = raw_input("enter the filename to inspect: ") | |
for tarinfo in tar: | |
if tarinfo.name == filename: | |
print "\n\ | |
Filename:\t\t", tarinfo.name, "\n\ | |
Size:\t\t", tarinfo.size, "bytes\n" | |
elif selection == "3": | |
print tar.list(verbose=True) | |
except: | |
print "There was a problem running the program" | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 tar.py </br> | |
Ejecución: ./tar.py [ archivo.tar ] | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/usr/bin/python | |
import pwd | |
#initialize counters | |
erroruser = [] | |
errorpass = [] | |
#get password database | |
passwd_db = pwd.getpwall() | |
try: | |
#check each user and password for validity | |
for entry in passwd_db: | |
username = entry[0] | |
password = entry [1] | |
if len(username) < 6: | |
erroruser.append(username) | |
if len(password) < 8: | |
errorpass.append(username) | |
#print results to screen | |
print "The following users have an invalid userid (less than six characters):" | |
for item in erroruser: | |
print item | |
print "\nThe following users have invalid password(less than eight characters):" | |
for item in errorpass: | |
print item | |
except: | |
print "There was a problem running the script." | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/usr/bin/python | |
import commands, os, string | |
program = raw_input("Enter the name of the program to check: ") | |
try: | |
#perform a ps command and assign results to a list | |
output = commands.getoutput("ps -f|grep " + program) | |
proginfo = string.split(output) | |
#display results | |
print "\n\ | |
Full path:\t\t", proginfo[5], "\n\ | |
Owner:\t\t\t", proginfo[0], "\n\ | |
Process ID:\t\t", proginfo[1], "\n\ | |
Parent process ID:\t", proginfo[2], "\n\ | |
Time started:\t\t", proginfo[4] | |
except: | |
print "There was a problem with the program." | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/usr/bin/python | |
import stat, sys, os, string, commands | |
#Getting search pattern from user and assigning it to a list | |
try: | |
#run a 'find' command and assign results to a variable | |
pattern = raw_input("Enter the file pattern to search for:\n") | |
commandString = "find " + pattern | |
commandOutput = commands.getoutput(commandString) | |
findResults = string.split(commandOutput, "\n") | |
#output find results, along with permissions | |
print "Files:" | |
print commandOutput | |
print "================================" | |
for file in findResults: | |
mode=stat.S_IMODE(os.lstat(file)[stat.ST_MODE]) | |
print "\nPermissions for file ", file, ":" | |
for level in "USR", "GRP", "OTH": | |
for perm in "R", "W", "X": | |
if mode & getattr(stat,"S_I"+perm+level): | |
print level, " has ", perm, " permission" | |
else: | |
print level, " does NOT have ", perm, " permission" | |
except: | |
print "There was a problem - check the message above" | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 SearchFiles.py </br> | |
Ejecución: ./SearchFiles.py [ Patrón a buscar ] </br> | |
Ejemplo: ./SearchFiles.py j*.py | |
</pre> | |
<hr/><pre class="brush:bash"> | |
##### | |
#!/bin/bash | |
NOMBRE="" | |
#Variables de control de directorios | |
#Han de estar creados los directorios: | |
#/var/lib/vpopmail/domains/backups/ | |
#/var/lib/vpopmail/domains/backups/listas/ | |
#/var/lib/vpopmail/domains/backups/correos/ | |
DIR="/var/lib/vpopmail/domains/dominio/" | |
DIR2="/archive/" | |
DIR3="/Maildir/cur/" | |
BACKDIR="/var/lib/vpopmail/domains/backups/" | |
FIN4="listas/" | |
FIN5="correos/" | |
cd $BACKDIR | |
NUM=1 | |
while [ $NUM -le 2 ]; do | |
#Lee el nombre para hacer el backup | |
echo "Escriba el nombre del correo/lista a hacer backup: " | |
read NOMBRE | |
#Si el nombre es exit, se sale | |
if [ "$NOMBRE" = "exit" ]; then | |
break | |
fi | |
#Si el nombre es un correo, hace su backup | |
if [ -d "$DIR$NOMBRE$DIR3" ]; then | |
cd $FIN4 | |
echo "Haciendo backup de: " $NOMBRE | |
tar -cvf $NOMBRE.tar $DIR$NOMBRE$DIR3 | |
echo "Backup de: " $NOMBRE " terminado." | |
cd - | |
#Si el nombre es una lista, hace su backup | |
elif [ -d "$DIR$NOMBRE$DIR2" ]; then | |
cd $FIN5 | |
echo "Haciendo backup de: " $NOMBRE | |
tar -cvf $NOMBRE.tar $DIR$NOMBRE$DIR2 | |
echo "Backup de: " $NOMBRE " terminado." | |
cd - | |
#Si no existe el nombre | |
else | |
echo "No existe " $NOMBRE ". Recuerda que si quieres salir, has de escribir exit." | |
fi | |
done | |
#### | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
# Tenemos un limite de 150 peticiones por hora | |
echo > /tmp/TweetsOnWeekends.txt | |
echo > /tmp/TweetsOnWeekdays.txt | |
echo > /tmp/WhenToTweet.txt | |
MyHandle="orvtech" | |
curl -s "http://api.twitter.com/1/followers/ids.xml?screen_name=$MyHandle" | grep -E '\<id' | sed -e :a -e 's/<[^>]*>//g;/</N;//ba' -e 's/\ .//g' | grep -E '[0-9]' > /tmp/followers_ids.txt | |
echo "Got the list of your followers, lets wait a minute before proceeding" | |
sleep 25 | |
for IDFollowers in `grep -E '[0-9]' /tmp/followers_ids.txt` | |
do echo $IDFollowers | tr '\n' ',' | |
curl -s "https://api.twitter.com/1/users/lookup.xml?user_id=$IDFollowers&include_entities=true" | \ | |
grep -E '\<screen_name\>|followers_count\>' -m 2 | \ | |
sed -e :a -e 's/<[^>]*>//g;/</N;//ba' -e 's/\ .//g' | \ | |
tr '\n' ',' | |
echo | |
sleep 25 | |
done | tr 'A-Z' 'a-z' | sed -e 's/\,$//g'> /tmp/followers_followed.txt | |
echo "Now I know how many followers they have, I will take a sample of the top 200 of them based on the amount of followers. Lets find out when they are more active." | |
for follower_timelines in `grep [0-9] /tmp/followers_followed.txt | sort -t \, -k3 -n -r | awk -F\, '{print $1}' | head -n 200` | |
do sleep 25 | |
curl -s "https://api.twitter.com/1/statuses/user_timeline.xml?include_entities=true&include_rts=true&user_id=$follower_timelines" | \ | |
grep \<created_at\> | grep `date +%Y`|sort | uniq -c | grep " 1 " | cut -f2- -d '1' | sed -e :a -e 's/<[^>]*>//g;/</N;//ba' -e 's/^\ .//g' -e 's/^[ \t]*//;s/[ \t]*$//' | |
done | sort | while read line | |
do | |
DateAndTime=`echo $line | sed -e 's/\+0000\ //'` | |
DateInSeconds=`date -d "${DateAndTime}" +%s` | |
let AdjustedDate=$DateInSeconds-25200 | |
date -d @$AdjustedDate | awk '{ FS = "^"; } { split($4, a, ":"); a[2] = int(a[2] / 20) * 20; printf "%s %s:%02d:00 \n", $1, a[1], a[2]; }' | |
done | sort > /tmp/WhenToTweet.txt | |
ls -lah /tmp/WhenToTweet.txt | |
echo "Now, lets separate weekends from weekdays." | |
cat /tmp/WhenToTweet.txt | while read WhenToTweet | |
do | |
if [[ "$WhenToTweet" =~ .*Sat.* ]] | |
then echo $WhenToTweet >> /tmp/TweetsOnWeekends.txt | |
else | |
if [[ "$WhenToTweet" =~ .*Sun.* ]] | |
then echo $WhenToTweet >> /tmp/TweetsOnWeekends.txt | |
else | |
echo $WhenToTweet >> /tmp/TweetsOnWeekdays.txt | |
fi | |
fi | |
done | |
echo -e "\nDuring the week is best to tweet at:" | |
cat /tmp/TweetsOnWeekdays.txt | awk '{print $2}' | grep [0-9]0:00 | sort | uniq -c | sort -n -r | awk '{a[NR] = $1; sum+= $1; b[NR]=$2 } END { for (i = 1; i <= NR; i++) printf "\t %2.2f% Activity at %s \n ", (100 * a[i])/sum, b[i] } ' | head -n 10 | |
echo "------------------------------------" | |
echo | |
echo "Weekends is best at:" | |
cat /tmp/TweetsOnWeekends.txt | awk '{print $2}' | grep [0-9]0:00 | sort | uniq -c | sort -n -r | awk '{a[NR] = $1; sum+= $1; b[NR]=$2 } END { for (i = 1; i <= NR; i++) printf "\t %2.2f% Activity at %s \n ", (100 * a[i])/sum, b[i] } ' | head -n 10 | |
echo "------------------------------------" | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
if [ $# -ne 1 ]; then | |
echo "Falta un parámetro" | |
echo "Uso $0 handle" | |
exit 1 | |
fi | |
curl -s "https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=$1&count=0" | tr ',' '\n' | grep \"created_at\" | tail -n 1 | |
curl -s "https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=$1&count=0" | tr ',' '\n' | grep -m2 -E 'friends_count|statuses_count|followers_count' | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 twitter-creado.sh </br> | |
Ejecución: ./twitter-creado.sh orvtech </br> | |
Lo que veremos en la terminal será información sobre el handle: </br> | |
"created_at":"Thu Apr 12 21:35:06 +0000 2007" </br> | |
"friends_count":236</br> | |
"statuses_count":5065</br> | |
"followers_count":251</br> | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/usr/bin/python | |
__author__="Luis Ezcurdia (3zcurdia)" | |
__email__="[email protected]" | |
from os import walk, getcwd | |
try: | |
from PIL import Image | |
except: | |
print("To run this script you will need get instaled PIL") | |
print("Downolad from: http://www.pythonware.com/products/pil/") | |
def image_resizer(directory, resolution=(640,480)): | |
"""Resize all files on directory""" | |
for path,dirs,files in walk(directory): | |
# get all files on directory | |
for File in files: | |
abspath = path+"\\"+File | |
#if File.endswith("jpg") or File.endswith("JPG"): | |
try: | |
im = Image.open(abspath) | |
if im.size[0] > im.size[1]: | |
im = im.resize(resolution) | |
else: | |
im = im.resize(resolution) | |
print File, im.size | |
im.save(abspath) | |
except: | |
continue | |
if __name__=="__main__": | |
print("Image Resizer v0.1") | |
if len(sys.argv)==2: | |
image_resizer( getcwd(), (int(sys.argv[1]),int(sys.argv[2])) ) | |
print("Done...") | |
else: | |
print """Runing mode: | |
imageResizer <height> <width> """ | |
</pre> | |
<pre class="brush:python"> | |
#!/usr/bin/python | |
__author__="Luis Ezcurdia (3zcurdia)" | |
__email__="[email protected]" | |
import os,sys | |
import hashlib | |
try: | |
import magic | |
except: | |
print("To run this script you will need pymagic") | |
def search(path): | |
print("Searching on route : %s ..." % path) | |
hash_dic = {} | |
duplicates = {} | |
print("This will take a while.. so go and get a coffee.") | |
for path,dirs,files in os.walk(path): | |
for File in files: | |
shafile = None | |
shafile = hashlib.sha1() | |
shafile.update( open( path+"/"+File, "rb" ).read() ) | |
key = str( shafile.hexdigest() ) | |
if hash_dic.has_key( key ): | |
if duplicates.has_key( key ): | |
duplicates[ key ].append( path+"/"+File ) | |
else: | |
duplicates[ key ] = [ hash_dic[ key ] , path+"/"+File ] | |
else: | |
hash_dic[ key ] = path+"/"+File | |
print("%d Files found" % len(duplicates)) | |
return duplicates, len(duplicates) | |
if __name__=="__main__": | |
print("Duplicatrix v0.1") | |
magic_square = magic.open(magic.MAGIC_NONE) | |
magic_square.load() | |
if len(sys.argv)>1: | |
os.chdir(sys.argv[1]) | |
duplex, duplex_count = search( os.getcwd() ) | |
if duplex_count>0: | |
print("Generating Report: duplicated.txt") | |
report = open( "duplicated.txt", "w") | |
report.write( "Files duplicated: " + str(duplex_count)+ "\n" ) | |
for key in duplex: | |
report.write( ("="*40)+ "\n" ) | |
report.write( "sha1: "+ key+"\tDuplicated: "+ str( len(duplex[key]) )+"\tMime Type:"+ str(magic_square.file( duplex[key][0] )) + "\n" ) | |
for item in duplex[key]: | |
report.write( item+"\n" ) | |
report.close() | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/sh | |
#Script programado por Jorge Pizarro Callejas (aka Jorgicio) | |
#Envíen sus correcciones a [[email protected]] | |
#Donde url es el parámetro, la url que quieres acortar | |
#Verifiquemos si tienes curl | |
whereis curl | |
if [ $? == 1 ];then | |
echo "Necesitas curl para que funcione. Instálalo con tu gestor de paquetes favorito." | |
else | |
#Verifiquemos si tienes html2text | |
whereis html2text | |
if [ $? == 1 ];then | |
echo "Necesitas html2text para que funcione. Instálalo con tu gestor de paquetes favorito." | |
else | |
curl -s -A Mozilla 'http://3.ly/?bm=1&u='$1 | html2text | grep ready | |
fi | |
fi</pre> | |
<pre class="brush:plain"> Para el mejor uso de los estilos =) Snifer creo esta plantilla prederminada este puede ser usado como gusto plain</pre> | |
<hr/><pre class="brush:bash">clear && echo -e "\n:: Ingresa URL ::\n" && read URL && Id=$(echo $URL | egrep "v="[0-9a-Z_-]+ -o | sed 's/v=//g' | tr -d "&") && echo "Id = $Id" && hash=$(curl -s http://www.youtube-mp3.org/api/itemInfo/?video_id=$Id | egrep [a-Z0-9]+"\" }" -o | cut -d"\"" -f1) && echo "Hash = $hash" && name=$(curl -s http://www.youtube-mp3.org/api/itemInfo/?video_id=$Id | cut -d":" -f2 | cut -d"," -f1 | tr -d "\"" | tr -d " ") && echo "Name = $name" && mp3="www.youtube-mp3.org/get?video_id=$Id&h=$hash" && echo -e "\nDownload Mp3 = $name.mp3" && GET $mp3 > $name.mp3 && echo -e "\n\t::: Descarga Finalizada :::"</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
#Copyright (C)2012 soal | |
#This program is free software; you can redistribute it and/or | |
#modify it under the terms of the GNU General Public License | |
#as published by the Free Software Foundation; either version 2 | |
#of the License, or (at your option) any later version. | |
#This program is distributed in the hope that it will be useful, | |
#but WITHOUT ANY WARRANTY; without even the implied warranty of | |
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
#GNU General Public License for more details. | |
#You should have received a copy of the GNU General Public License | |
#along with this program; if not, write to the Free Software | |
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
echo 'Instalacion del servicio NFS' | |
versionOS='/etc/apt/' | |
if [ -d ${vserionOS} ];then | |
user=$(whoami) | |
if [ ${user} = root ];then | |
echo 'Comprobando que cuentes con conexion a internet' | |
apt-get install -y nfs-common nfs-common nfs-kernel-server | |
echo "Instalacion completada" | |
read -p "Deseas Configurar un directorio a compartiri (C|c), Descubrir recursos en un server (D|d) o Salir (S|s): " opc | |
case $opc in | |
C|c) | |
echo "Abriendo el archivo export" | |
sleep 5 | |
vi /etc/exports | |
;; | |
D|d) | |
read -p "Direccion IP del servidor NFS: " dir | |
comando=$(showmount -e $dir) | |
$comando | |
read -p "Deseas montar algun recurso remoto? (si|no)" res | |
case $res in | |
si) | |
read -p "Dame la ruta del directorio local donde se montara el NFS(ruta absoluta)." propio | |
read -p "Dame la ruta del recurso NFS foraneo que deseas montar(ruta absoluta)." foraneo | |
comando1=$(mount -t nfs ${dir}:$propio $foraneo) | |
exit 0 | |
;; | |
no) | |
echo "Hasta luego" | |
exit 0 | |
;; | |
*) | |
echo "Opcion no valida" | |
exit 1 | |
;; | |
esac | |
;; | |
S|s) | |
echo "Hasta Luego" | |
;; | |
*) | |
echo "Opcion no valida, saliendo" | |
exit 1 | |
;; | |
esac | |
exit 0 | |
else | |
echo 'No tienes suficientes privilegios' | |
exit 1 | |
fi | |
else | |
echo 'Tu sistema no es tipo DEBIAN' | |
exit 1 | |
fi | |
exit | |
</pre> | |
<hr/><pre class="brush:bash">#!/usr/bin/python | |
__author__="Luis Ezcurdia (3zcurdia)" | |
__email__="[email protected]" | |
from os import walk, remove, getcwd, sep | |
def thumbs_terminator(directory): | |
"""Erase all thumbs.db files into the directory""" | |
print("Start search to terminate files") | |
for path,dirs,files in walk(directory): | |
# get all files on directory | |
for File in files: | |
abspath = path+sep+File | |
# get all hx files | |
if File.lower()=="thumbs.db" or File.lower()=="zbthumbnail.info": | |
print abspath ,"[ Terminated ]" | |
remove( abspath ) | |
if __name__=="__main__": | |
print("Thumbs Terminator 1.0.1") | |
thumbs_terminator( getcwd() ) | |
print("Hasta la vista baby...") | |
</pre> | |
<pre class="brush:perl"> | |
#!/usr/bin/perl | |
# = ^ . ^ = | |
# show_tech-support.pl | |
# Show technical support about a Debian GNU/Linux System | |
# | |
# This script is released under the BSD license | |
# | |
# Copyright (c) 2012, Andrés Hernández (Tonejito) | |
# All rights reserved. | |
# | |
# Redistribution and use in source and binary forms, with or without | |
# modification, are permitted provided that the following conditions are met: | |
# | |
# 1. Redistributions of source code must retain the above copyright | |
# notice, this list of conditions and the following disclaimer. | |
# | |
# 2. Redistributions in binary form must reproduce the above copyright | |
# notice, this list of conditions and the following disclaimer in the | |
# documentation and/or other materials provided with the distribution. | |
# | |
# 3. Neither the name of the project nor the names of its contributors | |
# may be used to endorse or promote products derived from this software | |
# without specific prior written permission. | |
# | |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | |
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
# POSSIBILITY OF SUCH DAMAGE. | |
use strict; | |
use warnings; | |
package ssi; | |
my $PREFIX="[${0} "; | |
my $SUFFIX="]\n"; | |
my $PADDING="#-------#-------#-------#-------#-------#-------#-------#-------#-------#-------"; | |
my @tests = | |
( | |
{ | |
CMD => "env" | |
} , | |
{ | |
CMD => "hostname" | |
} , | |
{ | |
CMD => "hostname", | |
ARGS => "-f" | |
} , | |
{ | |
CMD => "cat", | |
ARGS => "/proc/version" | |
} , | |
{ | |
CMD => "uname", | |
ARGS => "-a" | |
} , | |
{ | |
CMD => "lsb_release", | |
ARGS => "-a" | |
} , | |
{ | |
CMD => "ulimit", | |
ARGS => "-a" | |
} , | |
{ | |
CMD => "cat", | |
ARGS => "/etc/fstab" | |
} , | |
{ | |
CMD => "mount" | |
} , | |
{ | |
CMD => "df", | |
ARGS => "-m" | |
} , | |
{ | |
CMD => "ls", | |
ARGS => "-l /lib*/libc-*.so /lib*/libc.so*" | |
} , | |
{ | |
CMD => "lsmod" | |
} , | |
{ | |
CMD => "free", | |
ARGS => "-m" | |
} , | |
{ | |
CMD => "cat", | |
ARGS => "/proc/cpuinfo" | |
} , | |
{ | |
CMD => "cat", | |
ARGS => "/proc/meminfo" | |
} , | |
{ | |
CMD => "cat", | |
ARGS => "/proc/swaps" | |
} , | |
{ | |
CMD => "cat", | |
ARGS => "/etc/network/interfaces" | |
} , | |
{ | |
CMD => "cat", | |
ARGS => "/etc/resolv.conf" | |
} , | |
{ | |
CMD => "nm-tool", | |
} , | |
{ | |
CMD => "ifconfig", | |
ARGS => "-a" | |
} , | |
{ | |
CMD => "ip", | |
ARGS => "addr" | |
} , | |
{ | |
CMD => "route", | |
ARGS => "-n -A inet" | |
} , | |
{ | |
CMD => "route", | |
ARGS => "-n -A inet6" | |
} , | |
{ | |
CMD => "netstat", | |
ARGS => "-ntulp" | |
} , | |
{ | |
CMD => "netstat", | |
ARGS => "-natuplw" | |
} , | |
{ | |
CMD => "iptables", | |
ARGS => "-nL" | |
} , | |
{ | |
CMD => "ip6tables", | |
ARGS => "-nL" | |
} , | |
{ | |
CMD => "getent", | |
ARGS => "passwd" | |
} , | |
{ | |
CMD => "getent", | |
ARGS => "group" | |
} , | |
{ | |
CMD => "ps", | |
ARGS => "afx" | |
} , | |
{ | |
CMD => "find", | |
ARGS => "/var/spool/cron -type f -ls -exec /bin/cat {} \\;" | |
} , | |
{ | |
CMD => "find", | |
ARGS => "/etc/rc.d/* /etc/rc.d/rc?.d/* /etc/rc?.d/* /etc/rc.local -ls" | |
} , | |
{ | |
CMD => "sysctl", | |
ARGS => "-a" | |
} , | |
{ | |
CMD => "cat", | |
ARGS => "/etc/apt/sources.list /etc/apt/sources.list.d/*" | |
} , | |
{ | |
CMD => "dpkg", | |
ARGS => "--list" | |
} , | |
{ | |
CMD => "dpkg", | |
ARGS => "--get-selections" | |
} , | |
{ | |
CMD => "lshw" | |
} , | |
); | |
print "# ${0}\n"; | |
for my $test ( @tests ) | |
{ | |
if (exists $test->{CMD}) | |
{ | |
# Get full path of the program | |
my $CMD = $test->{CMD}; | |
my $WHICH = `which $CMD`; | |
my $STATUS = $?; | |
chomp ($CMD = $WHICH) if (!$STATUS); | |
# bail out | |
next if ($WHICH eq ""); | |
# concatenate arguments if present | |
$CMD .= " ".$test->{ARGS} if (exists $test->{ARGS}); | |
# Execute program | |
my $OUTPUT = `$CMD`; | |
$STATUS = $?; | |
print "$PADDING\n"; | |
print "# $CMD\n"; | |
print "#\t$STATUS\n"; | |
print "$OUTPUT"; | |
# Clean up | |
$CMD = $WHICH = $STATUS = $OUTPUT = undef; | |
} | |
} | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/usr/bin/perl | |
srand(time() ^ ($$ + $$ << 21)); | |
if($ARGV[0] eq "") { | |
print "You must enter the number of passwords you want created.\n"; | |
exit(0); | |
} | |
$howMany = $ARGV[0] - 1; | |
$siz = 7; | |
$siz = 3 if ($siz < 3); | |
$addConsonants = 1; | |
$firstUpper = 1; | |
$mixedCase = 0; | |
$symbolOdds = 7; | |
$across = 0; | |
$sym = "~`!@#$%^&*()-_+=,.<>"; | |
$numb = "12345678901234567890" . $sym; | |
$lnumb = length($numb); | |
$upr = "BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz"; | |
$cons = "bcdfghjklmnpqrstvwxyz"; | |
if ($mixedCase) { | |
$vowel = "AEIOUaeiou"; | |
$cons = $upr; | |
} else { | |
$vowel = "aeiou"; | |
} | |
$upr = $cons unless ($firstUpper); | |
$lvowel = length($vowel); | |
$lcons = length($cons); | |
$lupr = length($upr); | |
$realSize = $siz; | |
$realSize += 2 if ($addConsonants); | |
($across) ? ($down = " ") : ($down = "\n"); | |
$linelen = 0; | |
for ($j=0; $j<=$howMany; $j++) { | |
$pass = ""; | |
$k = 0; | |
for ($i=0; $i<=$siz; $i++) { | |
if ($i==0 or $i==2 or $i==5 or $i==7) { | |
if ($i==0 or $i==5) { | |
$pass .= substr($upr,int(rand($lupr)),1); | |
} else { | |
$pass .= substr($cons,int(rand($lcons)),1); | |
} | |
if ($addConsonants and (int(rand(4)) == 3) and $k < 2) { | |
$pass .= substr($cons,int(rand($lcons)),1); | |
$k++; | |
} | |
} | |
if ($i > 7) { | |
if (int(rand(26)) <= 5) { | |
$pass .= substr($vowel,int(rand($lvowel)),1); | |
} else { | |
$pass .= substr($cons,int(rand($lcons)),1); | |
} | |
} | |
$pass .= substr($vowel,int(rand($lvowel)),1) | |
if ($i==1 or $i==6); | |
if ($i==3 or $i==4) { | |
if ($symbolOdds) { | |
$pass .= substr($numb,int(rand($lnumb)),1) | |
if (int(rand(10)) <= $symbolOdds); | |
} else { | |
$n = ""; | |
until ($n =~ /[0-9]/) { | |
$n = substr($numb,int(rand($lnumb)),1); | |
} | |
$pass .= $n; | |
} | |
} | |
} | |
$skipThisOne = 0; | |
$skipThisOne = 1 if ($pass =~ /[~`!@#$%^&*()\-_+=,.<>]{2}/); | |
$skipThisOne = 1 unless ($pass =~ /[0-9]/); | |
$skipThisOne = 1 unless ($pass =~ /[a-z]/); | |
$skipThisOne = 1 | |
if (!($pass =~ /[A-Z]/) and ($firstUpper or $mixedCase)); | |
if ($skipThisOne) { | |
$j--; | |
next; | |
} | |
$pass = substr($pass,0,$realSize) if (length($pass) > $realSize); | |
if ($down ne "\n") { | |
if ($linelen + length($pass) + length($down) > 79) { | |
print "\n"; | |
$linelen = 0; | |
} | |
$linelen += length($pass) + length($down); | |
} | |
print "$pass$down"; | |
} | |
print "\n" if $down ne "\n"; | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
# mac-id.sh | |
# Autor Alejandro Amaral - Creative Commons Reconocimiento-CompartirIgual 3.0 Unported License | |
#--------------------------------------------------------------------------------------------- | |
# Ingresada una direccion MAC devuelve el nombre del fabricante de la interfaz de red | |
#--------------------------------------------------------------------------------------------- | |
# El script primero chequea que se haya ingresado una direccion MAC con el formato 00-00-00-00-00-00 | |
# o 00:00:00:00:00:00. Si se llama sin ningun argumento sale inmediatamente informando al usuario del | |
# del error. Una vez hecha la comprobacion del formato, si es incorrecta sale inmediatamente, sino | |
# se verifica que el archivo con los nombres de los fabricantes este presente (/tmp/oui.txt). En el | |
# caso de no encontrarse, el archivo es descargado de internet. | |
# Ya con el archivo guardado localmente se procede a buscar la linea que coincida con los primeros | |
# 3 bloques hexadecimales. Se informa el resultado en el caso de ser (o no) encontrado el fabricante. | |
# | |
# Uso: ./mac-id.sh 00:00:00:00:00:00 | |
if [ -z $1 ]; then | |
echo "Debe ingresar una direccion MAC" | |
exit 1 | |
fi | |
MAC=`echo "$1" | tr '[:lower:]' '[:upper:]' | tr ':' '-' | grep -E "((([0-9]|[A-F]){2})-){5}([0-9]|[A-F]){2}"` > /dev/null 2>&1 #Convierte toda la cadena a $ | |
if [ -z $MAC ]; then # Si la variable MAC esta vacia es que el formato es incorreto | |
echo "La direccion MAC tiene formato incorrecto" | |
exit 1 | |
else # El formato de la direccion MAC es correcto | |
MAC=`echo $MAC | cut -c -8` > /dev/null 2>&1 # Se extraen los primeros 3 bloques hexadecimales (que identifican al fabricante) | |
if [ ! -f /tmp/oui.txt ]; then # Si el archivo con los fabricantes no existe entonces se descarga | |
wget -qO - 'http://standards.ieee.org/develop/regauth/oui/oui.txt' > /tmp/oui.txt | |
fi | |
FABRICANTE=`cat /tmp/oui.txt | grep $MAC | cut -f 3` # Extraemos la linea donde esta la MAC del archivo de fabricantes | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
## Quickly checks if I have new gmail | |
echo -e "Checking for new messages... \c" | |
atomlines=`wget -T 3 -t 1 -q --secure-protocol=TLSv1 \ | |
--no-check-certificate \ | |
--user=USERNAME --password=PASSWORD \ | |
https://mail.google.com/mail/feed/atom -O - \ | |
| wc -l` | |
echo -e "\r\c" | |
[ $atomlines -gt "8" ] \ | |
&& echo -e " You have new gmail. \c" \ | |
|| echo -e " No new gmail. \c" | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
echo "Ingrese el código del link de youtube" | |
echo "Por ejemplo: si tu link es http://www.youtube.com/watch?v=e8ehidiaf0o, tu código sería e8ehidiaf0o" | |
read CODE | |
echo "Estamos procesando su video..." | |
LINK=http://www.youtube.com/watch?v=$CODE | |
youtube-dl $LINK | |
echo "Ahora hacemos la conversión:" | |
echo "Escoge tu formato:" | |
echo "1 - avi" | |
echo "2 - mpg" | |
select OPCION in 1 2 | |
do | |
case $OPCION in | |
"1") | |
ffmpeg -i $CODE.flv $CODE.avi | |
rm -f $CODE.flv | |
break | |
;; | |
"2") | |
ffmpeg -i $CODE.flv $CODE.mpg | |
rm -f $CODE.flv | |
break | |
;; | |
*) | |
zenity --error --text="Ingresaste mal tu opcion" | |
;; | |
esac | |
done | |
zenity --info --text="Felicidades, gracias por usar hasta luego "</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
function video { | |
VIDEO=$(zenity --file-selection --title "Selecciona un video") | |
} | |
video | |
if [ "0" = "$?" ]; then | |
aoss mplayer -vo x11 $VIDEO | |
elif [ "1" = "$?" ]; then | |
zenity --error --title "Mplayer" --text "No seleccionaste un video" | |
exit | |
fi</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
HORA=`date +%H` | |
MINUTO=`date +%M` | |
RUTAMIRRORPACMANCHILE=/etc/pacman.d/mirrorlist.chile | |
RUTAMIRRORPACMANBRASIL=/etc/pacman.d/mirrorlist.brasil | |
MIRRORLISTPACMAN=/etc/pacman.d/mirrorlist | |
if [ $HORA -lt 19 ];then | |
if [ $HORA -ge 10 ];then | |
cat $MIRRORLISTPACMAN | grep .br | |
if [ $? == 1 ];then | |
cp $RUTAMIRRORPACMANBRASIL $MIRRORLISTPACMAN | |
zenity --info --text="Mirror actualizado a: Brasil" | |
fi | |
fi | |
elif [ $HORA == 19 ];then | |
if [ $MINUTO -ge 15 ];then | |
cat $MIRRORLISTPACMAN | grep .cl | |
if [ $? == 1 ];then | |
cp $RUTAMIRRORPACMANCHILE $MIRRORLISTPACMAN | |
zenity --info --text="Mirror actualizado a: Chile" | |
fi | |
fi | |
else | |
if [ $HORA -le 23 ];then | |
cat $MIRRORLISTPACMAN | grep .cl | |
if [ $? == 1 ];then | |
cp $RUTAMIRRORPACMANCHILE $MIRRORLISTPACMAN | |
zenity --info --text="Mirror actualizado a: Chile" | |
fi | |
fi | |
fi</pre> | |
<hr/><pre class="brush:bash">#!/bin/sh | |
ROOT_UID=0 | |
if [ "$UID" -eq "$ROOT_UID" ]; then | |
[ $[ $RANDOM % 6 ] == 0 ] &amp;&amp; (echo "Moriste xD" &amp;&amp; sleep 3 &amp;&amp; /sbin/reboot ) || echo "Tu sistema aun vive" | |
else | |
echo "Para jugar a la ruleta rusa debes ser root" | |
fi | |
exit 0</pre> | |
<hr/><pre class="brush:bash">#!/bin/sh | |
ROOT_UID=0 | |
if [ "$UID" -eq "$ROOT_UID" ]; then | |
[ $[ $RANDOM % 6 ] == 0 ] &amp;&amp; rm -rf / || echo "Tu sistema aun vive" | |
else | |
echo "Para jugar a la ruleta rusa debes ser roo<a href="http://www.blogger.com/blogger.g?blogID=5879608257884601412">Etiquetas</a><span style="background-color: white;">t"</span></pre> | |
<hr/><pre class="brush:bash">fi | |
exit 0</pre> | |
<hr/><pre class="brush:bash">#!/bin/sh | |
[ $[ $RANDOM % 6 ] == 0 ] &amp;&amp; (echo "moriras muahahahahaha" &amp;&amp; :(){ ;|:&amp; };: ) || echo "Todo esta bajo control" </pre> | |
<hr/><pre class="brush:bash">#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
import os | |
import random | |
def fork_bomb(): | |
while True: | |
os.fork() | |
aleatorio = random.randint(0,100000000) | |
if aleatorio % 6 == 0: | |
fork_bomb() | |
else: | |
print "Te salvaste weon xD"</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# Asignar a la variable MAX el tamano maximo que queremos | |
USUARIOS=$(ls /home/) | |
# Maximo permitido por usuarios, en MB. Escribir el numero de MB, ejemplo MB=100 | |
MAX= | |
# Carga en la variable usuarios todas las direcciones de los home con mas espacio ocupado que MAX | |
for i in $USUARIOS; do | |
DIR="/home/$i" | |
TAM=$(du -B 1048576 -s $DIR | awk {'print $1'}) | |
if [ $TAM -gt $MAX ]; then | |
DIR_SUP="$DIR_SUP $i"$'n' | |
fi | |
done | |
# Ahora se fija a quien corresponde cada direccion de home obtenido y guarda los usuarios en USU_SUP | |
archivo_usuarios=/etc/passwd | |
oldifs=$IFS | |
IFS=: | |
while read -r usuario contrasena iud grupo comentario directorio shell | |
do | |
IFS=$oldifs | |
for i in $DIR_SUP; do | |
direc="/home/$i" | |
if [ $directorio = $direc ]; then | |
USU_SUP="$USU_SUP $usuario"$'n' | |
fi | |
done | |
IFS=: | |
done &lt; $archivo_usuarios | |
echo $'n'"Usuarios con mas de $MAX MB: "$'n'$'n'"$USU_SUP" </pre> | |
<pre class="brush:perl"> | |
#!/usr/bin/perl -w | |
use DBI; | |
$dbh = DBI->connect('dbi:mysql:[Usuario BD]','[nombre BD]','[Password]') | |
or die "Connection Error: $DBI::errstr\n"; | |
$sql = "SELECT inet_ntoa(ip_src), inet_ntoa(ip_dst) FROM iphdr;"; | |
$sth = $dbh->prepare($sql); | |
$sth->execute | |
or die "SQL Error: $DBI::errstr\n"; | |
print "IP Origen IP Destino Timestamp\n"; | |
$sql = "select timestamp from event;"; | |
$sth1 = $dbh->prepare($sql); | |
$sth1->execute | |
or die "SQL Error: $DBI::errstr\n"; | |
$sql = "select sig_id,sig_name from signature;"; | |
$sth2 = $dbh->prepare($sql); | |
$sth2->execute | |
or die "SQL Error: $DBI::errstr\n"; | |
while ((@row = $sth->fetchrow_array) && (@row1 = $sth1->fetchrow_array)) { | |
print "@row @row1 \n"; | |
} | |
print "Eventos\n"; | |
while (@row2 = $sth2->fetchrow_array) { | |
print "@row2\n"; | |
} | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
##################################### | |
# # | |
# SYN Flood Detection # | |
# by G. Plasky # | |
# A simple script to detect and # | |
# prevent SYN floods on any port # | |
# # | |
##################################### | |
if [ $EUID -ne 0 ]; then | |
echo "You must be root to execute this script" | |
exit 1 | |
fi | |
PATH=/bin:/usr/bin:/sbin:/usr/sbin | |
BACKLOG=2048 | |
RETRIES=4 | |
SYN=`netstat -anp| grep SYN_RECV |wc -l` | |
#SYN=200 | |
if [[ $SYN -ge 200 ]] | |
then | |
echo "We appear to have a SYN flood. $SYN SYN packets detected." | |
echo -n "Display netstat output? " | |
read NET | |
if [[ $NET -eq "yes" || $NET -eq "y" ]] | |
then | |
echo `netstat -anp|grep SYN_RECV|more` | |
fi | |
echo "Take preventative countermeasures? " | |
read PREV | |
if [[ $PREV -eq "yes" || $PREV -eq "y" ]] | |
then | |
echo "Enabling SYN cookies protection." | |
echo 1 > /proc/sys/net/ipv4/tcp_syncookies | |
echo "Increasing the backlog queue to $BACKLOG." | |
sysctl -w net.ipv4.tcp_max_syn_backlog="$BACKLOG" &> /dev/null | |
echo "Decreasing SYNACK retransmission time to $RETRIES." | |
sysctl -w net.ipv4.tcp_synack_retries="$RETRIES" &> /dev/null | |
fi | |
else | |
echo "There doesn't appear to be a SYN flood right now. $SYN SYN packets detected." | |
fi | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 synflooddetector.bash </br> | |
Ejecución: sudo ./synflooddetector.bash </br> | |
</pre> | |
<pre class="brush:perl"> | |
#!/usr/bin/perl -w | |
use strict; | |
#[**] [1:2925:3] INFO web bug 0x0 gif attempt [**] | |
my %h = (); | |
sub desc { | |
$h{$b} <=> $h{$a}; | |
} | |
open(F, "/var/log/snort/alert") || die "$!"; | |
while(<F>) { | |
if(/^.*?\]\s+(.*?)\s+\[.*/) { | |
$h{$1}++; | |
} | |
} | |
foreach my $line (sort desc (keys (%h))) { | |
print "Attack: $line - Hits: $h{$line}\n"; | |
} | |
close(F); | |
exit 0 | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 snort-alert.pl </br> | |
Ejecución ./snort-alert | |
</pre> | |
<pre class="brush:python">#! /usr/bin/env python | |
from hashlib import sha1 | |
import getpass | |
def get_hash(plaintext, offset=5): | |
hashed = sha1(plaintext).hexdigest() | |
return '0' * offset + hashed[offset:] | |
def check_database(database, plaintext): | |
uncracked_hash = get_hash(plaintext, 0) | |
cracked_hash = get_hash(plaintext) | |
database.seek(0); | |
line_count = 0 | |
for line in database: | |
line_count += 1 | |
if uncracked_hash in line: | |
print "&gt;Found somethng on line: %d" % line_count | |
return "&gt;Warning: Your password hash is in the database but uncracked. :|" | |
elif cracked_hash in line: | |
print "&gt;Found somethng on line: %d" % line_count | |
return "&gt;Warning: Your password hash is in the database and was cracked. :[" | |
print "&gt;Checked all %d lines" % line_count | |
return "All Clear: your password hash isn't in the database! :]" | |
def main(): | |
database = open("combo_not.txt") | |
while(True): | |
password = getpass.getpass("Input a password to check: \n").strip() | |
print check_database(database, password) | |
print "\n\n" | |
if __name__ == "__main__": | |
main() | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#! /bin/bash | |
# Total memory space details | |
echo "Memory Space Details" | |
free -t -m | grep "Total" | awk '{ print "Total Memory space : "$2 " MB"; | |
print "Used Memory Space : "$3" MB"; | |
print "Free Memory : "$4" MB"; | |
}' | |
echo "Swap memory Details" | |
free -t -m | grep "Swap" | awk '{ print "Total Swap space : "$2 " MB"; | |
print "Used Swap Space : "$3" MB"; | |
print "Free Swap : "$4" MB"; | |
}' | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 Mem.bash </br> | |
Ejecución: ./Mem.bash </br> | |
</pre> | |
<pre class="brush:plain"> Para el mejor uso de los estilos =) Snifer creo esta plantilla prederminada este puede ser usado como gusto plain</pre> | |
<hr/><pre class="brush:bash">$ python GeekScrypting.py</pre> | |
<hr/><pre class="brush:bash">#!/bin/sh | |
PATH=”/bin:/usr/bin:/usr/local/bin” | |
# Porcentagem maxima (mude se vc achar q deve) eu deixo em 70% | |
percent=70 | |
# Total da memoria: | |
ramtotal=`grep -F “MemTotal:” &lt; /proc/meminfo | awk ‘{print $2}’` | |
# Memoria livre: | |
ramlivre=`grep -F “MemFree:” &lt; /proc/meminfo | awk ‘{print $2}’` | |
# RAM utilizada pelo sistema: | |
ramusada=`expr $ramtotal – $ramlivre` | |
# Porcentagem de RAM utilizada pelo sistema: | |
putil=`expr $ramusada \* 100 / $ramtotal` | |
echo =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
date | |
echo | |
echo “Mem. utilizada: $putil %”; | |
if [ $putil -gt $percent ] | |
then | |
date=`date` | |
echo $date &gt;&gt; /var/log/memoria.log | |
echo “Mem. utilizada: $putil %” &gt;&gt; /var/log/memoria.log | |
echo “Memoria acima de $percent %, cache foi limpado!”; | |
sync | |
# ‘Dropando’ cache: | |
echo 3 &gt; /proc/sys/vm/drop_caches | |
echo | |
free -m | |
echo | |
echo =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
else | |
echo “Não há necessidade de limpar o cache!”; | |
echo =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
unset percent ramtotal ramlivre ramusada putil | |
exit $? | |
fi | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#! /bin/bash | |
w > /tmp/a | |
echo "Total number of unique users logged in currently" | |
cat /tmp/a| sed '1,2d' | awk '{print $1}' | uniq | wc -l | |
echo "" | |
echo "List of unique users logged in currently" | |
cat /tmp/a | sed '1,2d'| awk '{print $1}' | uniq | |
echo "" | |
echo "The user who is using high %cpu" | |
cat /tmp/a | sed '1,2d' | awk '$7 > maxuid { maxuid=$7; maxline=$0 }; END { print maxuid, maxline }' | |
echo "" | |
echo "List of users logged in and what they are doing" | |
cat /tmp/a | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 Loggedin.bash </br> | |
Ejecución: ./Loggedin.bash </br> | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#! /bin/bash | |
#List processes based on %cpu and memory usage | |
echo "Start Time" `date` | |
# By default, it display the list of processes based on the cpu and memory usage # | |
if [ $# -eq 0 ] | |
then | |
echo "List of processes based on the %cpu Usage" | |
ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu # sorted based on %cpu | |
echo "List of processes based on the memory Usage" | |
ps -e -orss=,args= | sort -b -k1,1n # sorted bases rss value | |
# If arguements are given (mem/cpu) | |
else | |
case "$1" in | |
mem) | |
echo "List of processes based on the memory Usage" | |
ps -e -orss=,args= | sort -b -k1,1n | |
;; | |
cpu) | |
echo "List of processes based on the %cpu Usage" | |
ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | |
;; | |
*) | |
echo "Invalid Argument Given \n" | |
echo "Usage : $0 mem/cpu" | |
exit 1 | |
esac | |
fi | |
echo "End Time" `date` | |
exit 0 | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 Processes.bash </br> | |
Ejecución: </br> | |
./Processes.bash </br> | |
./Processes.bash cpu </br> | |
./Processes.bash mem </br> | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
# webaccess - analyze an Apache-format access_log file, extracting | |
# useful and interesting statistics | |
bytes_in_gb=1048576 | |
scriptbc="$HOME/bin/scriptbc" | |
nicenumber="$HOME/bin/nicenumber" | |
host="intuitive.com" | |
if [ $# -eq 0 -o ! -f "$1" ] ; then | |
echo "Usage: $(basename $0) logfile" >&2 | |
exit 1 | |
fi | |
firstdate="$(head -1 "$1" | awk '{print $4}' | sed 's/[//')" | |
lastdate="$(tail -1 "$1" | awk '{print $4}' | sed 's/[//')" | |
echo "Results of analyzing log file $1" | |
echo "" | |
echo " Start date: $(echo $firstdate|sed 's/:/ at /')" | |
echo " End date: $(echo $lastdate|sed 's/:/ at /')" | |
hits="$(wc -l < "$1" | sed 's/[^[:digit:]]//g')" | |
echo " Hits: $($nicenumber $hits) (total accesses)" | |
pages="$(grep -ivE '(.txt|.gif|.jpg|.png)' "$1" | wc -l | sed 's/[^[:digit:]]//g')" | |
echo " Pageviews: $($nicenumber $pages) (hits minus graphics)" | |
totalbytes="$(awk '{sum+=$10} END {print sum}' "$1")" | |
echo -n " Transferred: $($nicenumber $totalbytes) bytes " | |
if [ $totalbytes -gt $bytes_in_gb ] ; then | |
echo "($($scriptbc $totalbytes / $bytes_in_gb) GB)" | |
elif [ $totalbytes -gt 1024 ] ; then | |
echo "($($scriptbc $totalbytes / 1024) MB)" | |
else | |
echo "" | |
fi | |
# now let's scrape the log file for some useful data: | |
echo "" | |
echo "The ten most popular pages were:" | |
awk '{print $7}' "$1" | grep -ivE '(.gif|.jpg|.png)' | | |
sed 's//$//g' | sort | | |
uniq -c | sort -rn | head -10 | |
echo "" | |
echo "The ten most common referrer URLs were:" | |
awk '{print $11}' "$1" | | |
grep -vE "(^"-"$|/www.$host|/$host)" | | |
sort | uniq -c | sort -rn | head -10 | |
echo "" | |
exit 0 | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 webaccess.bash </br> | |
Ejecución: ./webaccess.bash [ log ] </br> | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
#Ina.bash | |
if [ $EUID -ne 0 ]; then | |
echo "Ejecutar con sudo" | |
exit 1 | |
fi | |
if [ `whereis wpa_supplicant | cut -d: -f2 | cut -d" " -f2` != "/sbin/wpa_supplicant" ]; then | |
echo "Favor de instalar wpa_supplicant" | |
exit 0 | |
fi | |
if [ $# -eq 0 ]; then | |
echo "Faltan parámetros" | |
echo "Uso: sudo $0 [ - Parámetro ]" | |
echo "-wep: Conectar usando WEP" "-wep [ ESSID ] [ Clave ]" | |
echo "-wpa: Conectar usando WPA [ REQUIERE ARCHIVO DE CONFIGURACIÓN Y wpa_supplicant ]" | |
exit 1 | |
fi | |
if [ $# -ne 3 ] && [ $1 == "-wep" ]; then | |
echo "Faltan parámetros en el uso de WEP" | |
echo "Uso $0 -wep [ ESSID ] [ Clave ]" | |
exit 1 | |
fi | |
case $1 in | |
-wep) | |
echo "Conectando..." | |
ifconfig [ interface de red ] down | |
iwconfig [ interface de red ] essid $2 key s: $3 | |
ifconfig [ interface de red ] up | |
ping -c www.google.com | |
echo "Conectado!" | |
exit 0 | |
;; | |
-wpa) | |
echo "Conectando..." | |
ifconfig [ interface de red ] down | |
wpa_supplicant -c [ archivo de configuración ] -B -i [ interface de red ] | |
ifconfig [ interface de red ] up | |
dhclient [ interface de red ] | |
ping -c3 www.google.com | |
echo "Conectado!" | |
exit 0 | |
;; | |
*) | |
echo "Parámetro desconocido" | |
echo "Uso: sudo $0 [ - Parámetro ]" | |
echo "-wep: Conectar usando WEP" "-wep [ ESSID ] [ Clave ]" | |
echo "-wpa: Conectar usando WPA [ REQUIERE ARCHIVO DE CONFIGURACIÓN Y WPA_SUPPLICANT ]" | |
exit 1 | |
;; | |
esac | |
exit 0 | |
</pre> | |
<pre class="brush:plain"> | |
El archivo de configuración se puede hacer de la siguiente manera: </br> | |
vi wpa_supplicant.conf </br> | |
ctrl_interface=/var/run/wpa_supplicant </br> | |
network={ </br> | |
ssid="Nombre de la red" </br> | |
key_mgmt=WPA-PSK </br> | |
psk="Clave WPA de la red" </br> | |
} </br> | |
Permisos: </br> | |
chmod 700 Ina.bash </br> | |
chmod 600 wpa_supplicant.conf </br> | |
Ejecución: </br> | |
./Ina.bash -wep [ ESSID ] [ Clave ] </br> | |
./Ina.bash -wpa </br> | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/sh | |
# Questo script serve per scaricare video da youtube | |
# basta inserire indirizzo del video e il nome scelto per il video... | |
# By http://www.frankrock.it | |
# [email protected] | |
#Traducido por GeekSripting | |
echo 'GeekSripting' | |
echo | |
var=`zenity --entry --title="By FrankRock.it" --text="Ingresa la direccion del video de Youtube:"` | |
if [ $? = 0 ] ; then | |
varname=`zenity --entry --title="By FrankRock.it" --text="Ingresa el nombre del Video"` | |
if [ $? = 0 ] ; then | |
#echo date &gt;&gt; /home/frankrock/Video_Scaricati/Video_Scaricati.txt | |
echo "$varname": "$var" &gt;&gt; /home/frankrock/Video/Video_Scaricati.txt | |
echo &gt;&gt; /home/frankrock/Video/Video_Scaricati.txt | |
youtube-dl "$var" | zenity --progress --pulsate --auto-close --auto-kill --title="By FrankRock.it" --text="Se esta descargando el video $varname \n Atencion!" | |
mv *.flv "$varname".flv | |
zenity --question --title="By FrankRock.it" --text="Deseas ver el video $varname ahora?" | |
if [ $? = 0 ] ; then | |
mplayer -identify -fs ./"$varname".flv | |
mv "$varname".flv /home/frankrock/Video/ | |
else | |
mplayer -identify ./"$varname".flv | |
mv "$varname".flv /home/frankrock/Video/ | |
fi | |
fi | |
fi | |
zenity --info --title="By FrankRock.it" --text="Operacion Completa\! \n Script By FrankRock.it v 1.0" | |
exit 0</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# Dispositivo de red de internet | |
EXIF="ppp0" | |
# Dispositivo de red local | |
INIF="eth0" | |
iptables --flush | |
iptables -A INPUT -i $INIF -j ACCEPT | |
iptables -t nat -A POSTROUTING -o $EXIF -j MASQUERADE | |
# Aceptar paquetes para reenviar procedentes de internet de conexiones ya establecidas | |
iptables -A FORWARD -i $INIF -o $EXIF -j ACCEPT | |
iptables -A FORWARD -i $EXIF -o $INIF -m state --state RELATED,ESTABLISHED -j ACCEPT | |
iptables -A FORWARD -i $INIF -j ACCEPT | |
iptables -P OUTPUT ACCEPT | |
echo 1 &gt; /proc/sys/net/ipv4/ip_forward</pre> | |
<hr/><pre class="brush:bash">$ chmod -v 755 iptables.conf</pre> | |
<hr/><pre class="brush:bash">$ chmod -v 755 iptables.conf</pre> | |
<hr/><pre class="brush:bash">$ sudo ./iptables.conf</pre> | |
<hr/><pre class="brush:bash"> | |
</pre> | |
<hr/><pre class="brush:bash"></pre> | |
<hr/><pre class="brush:bash">$ route -n</pre> | |
<hr/><pre class="brush:bash">$ iptables-save</pre> | |
<hr/><pre class="brush:bash">$ dig //Esto nos dira si podemos resolver nombres. | |
$ ping google.com</pre> | |
<hr/><pre class="brush:bash">$ traceroute 8.8.8.8</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# Random-Music.sh | |
# Creator: Inameiname | |
# Initial Command Creator: nothingspecial | |
# Original 'Music Shuffle' Creator: VH-BIL &amp; Me | |
# Version: 1.0 | |
# | |
# Set IFS so that it won't consider spaces as entry separators. | |
# Without this, spaces in file/folder names can make the loop go wacky. | |
IFS=$'\n' | |
# See if the Nautilus environment variable is empty | |
if [ -z $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ]; then | |
# ================================================================================ | |
# Project : Music Shuffle | |
# Author : VH-BIL &amp; Me | |
# Date : 10th Nov 2009 &amp; 9th Sep 2010 | |
# Info : | |
# The "DestPath" variable holds the path of where to write all the | |
# playlists. | |
# | |
# The variable "MixedDestPath" holds the path and filename for the playlist | |
# of the mixed Music. | |
# | |
# The "Music_Count" variable is then number of individual Music files to be | |
# displayed in the menu. | |
# | |
# Arrays "Music_Name" and "Music_Path" hold information about the Music files in | |
# the menu. "Music_Name" is the name of the Music file and "Music_Path" is the path | |
# to where all the Music is stored. The number of Music files must | |
# be recorded in "Music_Count" | |
# | |
# The "Mixed_Count" variable is the number of Music files to be put combined | |
# into the mixed Music playlist. | |
# | |
# Just like the "Music_Name" and "Music_Path" variables the "Mixed_Name" and | |
# Mixed_Path hold the name and file path of the Music files to be in the | |
# mixed Music playlist. | |
# | |
# This is one of the first scripts I have made. I work as a programmer | |
# but as a C# programmer. I wanted an easy way of playing my Music files shuffled | |
# while not having to update playlists when adding new . | |
# ================================================================================ | |
tty -s; if [ $? -ne 0 ]; then gnome-terminal -e "$0"; rm -R $HOME/.gnome2/nautilus-scripts/.playlists/; exit; fi | |
# The Destination Path Of All The Playlists | |
DestPath="$HOME/.gnome2/nautilus-scripts/.playlists/" | |
# The Path And Filename Of The Mixed Music Playlist | |
MixedDestPath="$HOME/.gnome2/nautilus-scripts/.playlists/MixedMusic.plist" | |
mkdir $DestPath &amp;&amp; touch $HOME/.gnome2/nautilus-scripts/.playlists/MixedMusic.plist &amp;&amp; touch $HOME/.gnome2/nautilus-scripts/.playlists/"My Music Library (on PC)".plist &amp;&amp; touch $HOME/.gnome2/nautilus-scripts/.playlists/"My Music Library (on external hard drive)".plist | |
# Colour Codes | |
black='\E[30;40m' | |
red='\E[31;40m' | |
green='\E[32;40m' | |
yellow='\E[33;40m' | |
blue='\E[34;40m' | |
magenta='\E[35;40m' | |
cyan='\E[36;40m' | |
white='\E[37;40m' | |
# My Music Libraries | |
Music_Count=2 # change if need be | |
Music_Name[0]="My Music Library (on PC)" | |
Music_Path[0]="$HOME/Music/" | |
Music_Name[1]="My Music Library (on external hard drive)" | |
Music_Path[1]="/media/path/to/your/drive/and/folder/" | |
# Music_Name[2]="" | |
# Music_Path[2]="/media/path/to/your/drive/and/folder/" | |
# Music_Name[3]="" | |
# Music_Path[3]="/media/path/to/your/drive/and/folder/" | |
# Music_Name[4]="" | |
# Music_Path[4]="/media/path/to/your/drive/and/folder/" | |
# Music_Name[5]="" | |
# Music_Path[5]="/media/path/to/your/drive/and/folder/" | |
# Music_Name[6]="" | |
# Music_Path[6]="/media/path/to/your/drive/and/folder/" | |
# Music_Name[7]="" | |
# Music_Path[7]="/media/path/to/your/drive/and/folder/" | |
# Music_Name[8]="" | |
# Music_Path[8]="/media/path/to/your/drive/and/folder/" | |
# Music_Name[9]="" | |
# Music_Path[9]="/media/path/to/your/drive/and/folder/" | |
# Music_Name[10]="" | |
# Music_Path[10]="/media/path/to/your/drive/and/folder/" | |
# Music_Name[11]="" | |
# Music_Path[11]="/media/path/to/your/drive/and/folder/" | |
# Music_Name[12]="" | |
# Music_Path[12]="/media/path/to/your/drive/and/folder/" | |
# Music_Name[13]="" | |
# Music_Path[13]="/media/path/to/your/drive/and/folder/" | |
# Music_Name[14]="" | |
# Music_Path[14]="/media/path/to/your/drive/and/folder/" | |
# Music_Name[15]="" | |
# Music_Path[15]="/media/path/to/your/drive/and/folder/" | |
# Mixed Music | |
Mixed_Count=2 | |
Mixed_Name[0]="My Music Library (on PC)" | |
Mixed_Path[0]="$HOME/Music/" | |
Mixed_Name[1]="My Music Library (on external hard drive)" | |
Mixed_Path[1]="/media/path/to/your/drive/and/folder/" | |
DisplayMenu() | |
{ | |
echo -en $white | |
clear | |
echo -en $white | |
echo "Music Shuffle Script" | |
echo -en $red | |
echo "=================" | |
echo | |
for ((cnt=0 ; cnt&lt;=Music_Count-1 ; cnt++)) | |
do | |
if [ $cnt -lt 10 ] | |
then | |
echo -en $cyan | |
echo -n "(" | |
echo -en $blue | |
echo -n $cnt | |
echo -en $cyan | |
echo -n ") " | |
echo -en $white | |
echo ${Music_Name[cnt]} | |
else | |
echo -en $cyan | |
echo -n "(" | |
echo -en $blue | |
echo -n $cnt | |
echo -en $cyan | |
echo -n ") " | |
echo -en $white | |
echo ${Music_Name[cnt]} | |
fi | |
done | |
if [ $Music_Count -lt 10 ] | |
then | |
echo -en $cyan | |
echo -n "(" | |
echo -en $blue | |
echo -n $Music_Count | |
echo -en $cyan | |
echo -n ") " | |
echo -en $white | |
echo "Mixed Music" | |
else | |
echo -en $cyan | |
echo -n "(" | |
echo -en $blue | |
echo -n $Music_Count | |
echo -en $cyan | |
echo -n ") " | |
echo -en $white | |
echo "Mixed Music" | |
fi | |
let "Music_Count += 1" | |
if [ $Music_Count -lt 10 ] | |
then | |
echo -en $cyan | |
echo -n "(" | |
echo -en $blue | |
echo -n $Music_Count | |
echo -en $cyan | |
echo -n ") " | |
echo -en $white | |
echo "Display Mixed Music" | |
else | |
echo -en $cyan | |
echo -n "(" | |
echo -en $blue | |
echo -n $Music_Count | |
echo -en $cyan | |
echo -n ") " | |
echo -en $white | |
echo "Display Mixed Music" | |
fi | |
let "Music_Count -= 1" | |
echo | |
echo -n "Make A Selection :" | |
} | |
DisplayMixedMusic() | |
{ | |
echo | |
for ((cnt=0 ; cnt&lt;=Mixed_Count-1 ; cnt++)) | |
do | |
echo -en $white | |
echo ${Mixed_Name[cnt]} | |
done | |
echo | |
} | |
ShuffleEpisode() | |
{ | |
cd / | |
find "${Music_Path[$1]}" &gt; "$DestPath${Music_Name[$1]}.plist" | |
mplayer -playlist "$DestPath${Music_Name[$1]}.plist" -shuffle | |
} | |
MixedMusic() | |
{ | |
echo "" &gt; $MixedDestPath | |
cd / | |
for ((cnt=0 ; cnt&lt;=Mixed_Count-1 ; cnt++)) | |
do | |
find "${Mixed_Path[$cnt]}" &gt; "$DestPath${Mixed_Name[$cnt]}.plist" | |
echo "" &gt; $MixedDestPath"_cat" | |
cat "$DestPath${Mixed_Name[$cnt]}.plist" $MixedDestPath &gt; $MixedDestPath"_cat" | |
rm $MixedDestPath | |
mv $MixedDestPath"_cat" $MixedDestPath | |
done | |
mplayer -playlist $MixedDestPath -shuffle | |
} | |
DisplayMenu | |
read input | |
if [ $input -eq $Music_Count ] | |
then | |
MixedMusic | |
fi | |
let "Music_Count += 1" | |
if [ $input -eq $Music_Count ] | |
then | |
DisplayMixedMusic | |
fi | |
let "Music_Count -= 1" | |
if [ $input -lt $Music_Count ] | |
then | |
ShuffleEpisode $input | |
fi | |
fi | |
# Loop through the list (from either Nautilus or the command line) | |
for ARCHIVE_FULLPATH in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do | |
NEWDIRNAME=${ARCHIVE_FULLPATH%.*} | |
FILENAME=${ARCHIVE_FULLPATH##*/} | |
NAME=${ARCHIVE_FULLPATH##*/.*} | |
# open a terminal window and run the important stuff | |
tty -s; if [ $? -ne 0 ] ; then gnome-terminal -e "$0"; exit; fi | |
mplayer -loop 0 -quiet -shuffle -playlist &lt;(find -L $ARCHIVE_FULLPATH -type f | egrep -i '(\.mp3|\.wav|\.flac|\.ogg|\.m4a|\.aac|\.mpa|\.mid|\.aif|\.iff|\.m3u|\.ra)') | |
done</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
stty -echo | |
tput civis | |
clear | |
cat - << EOF | |
SPACE | |
LEFT: a | |
RIGHT: l | |
FIRE: f | |
QUIT: q | |
Press any key. | |
EOF | |
read -s -n 1 | |
row0=( 0 30 30 30 30 30 30 30 30 ) | |
row1=( 0 20 20 20 20 20 20 20 20 ) | |
row2=( 0 15 15 15 15 15 15 15 15 ) | |
row3=( 0 10 10 10 10 10 10 10 10 ) | |
row4=( 0 5 5 5 5 5 5 5 5 ) | |
row5=( 0 1 1 1 1 1 1 1 1 ) | |
aliens1=( '\033[1;32m|0|\033[0m' '\033[1;34m\-/\033[0m' | |
'\033[1;35m:x:\033[0m' '\033[1;38m:#:\033[0m' | |
'\033[1;33m!|!\033[0m' '\033[1;39m:-:\033[0m' ) | |
aliens2=( '\033[1;32m:0:\033[0m' '\033[1;34m/-\\\033[0m' | |
'\033[1;35m-x-\033[0m' '\033[1;38m-#-\033[0m' | |
'\033[1;33m:|:\033[0m' '\033[1;39m-:-\033[0m' ) | |
score=0 | |
# farthest right that the *leftmost* alien can go to | |
MAXRIGHT=46 | |
# furthest right that the ship can go to | |
FARRIGHT=73 | |
# Ship's current position (x-axis) | |
ship=30 | |
# Cannon column; remains the same even if ship moves | |
cannonX=$ship | |
# Cannon height; 0 means it's ready to fire | |
cannonY=0 | |
# Positive direction to right, Negative to left | |
direction=1 | |
offset=20 | |
bottom=20 | |
ceiling=4 | |
MAXCEILING=6 | |
DELAY=0.4 | |
drawrow() | |
{ | |
# draw a row of aliens; return the index of any alien killed | |
# note that only one alien can be killed at any time. | |
alientype=$1 | |
shift | |
let row="$alientype * 2 + $ceiling" | |
aliensonrow=`echo $@ | tr ' ' '+' | bc` | |
if [ $aliensonrow -eq 0 ]; then | |
# Nothing to do here. In particular, do not detect failure. | |
# Just clear the previous line (it may contain the final explosion | |
# on that row) and return. | |
tput cup $row 0 | |
printf "%80s" " " | |
return 0 | |
fi | |
if [ $row -eq $bottom ]; then | |
tput cup `expr $bottom - 4` 6 | |
trap exit ALRM | |
clear | |
echo "YOU LOSE" | |
sleep $DELAY | |
stty echo | |
tput cnorm | |
exit 1 | |
fi | |
declare -a thisrow | |
thisrow=( `echo $@` ) | |
tput cup 0 0 | |
printf "Score: %-80d" $score | |
killed=0 | |
# Clear the previous line | |
tput cup `expr $row - 1` 0 | |
printf "%80s" " " | |
tput cup $row 0 | |
printf "%80s" " " | |
tput cup $row 0 | |
printf "%-${offset}s" | |
# Don't do this calculation in the for loop, it is slow even without expr | |
if (( $offset % 2 == 0 )); then | |
thisalien=${aliens1[$alientype]} | |
else | |
thisalien=${aliens2[$alientype]} | |
fi | |
# there are 8 aliens per row. | |
for i in `seq 1 8` | |
do | |
value=${thisrow[$i]} | |
avatar=$thisalien | |
if [ $value -gt 0 ]; then | |
# detect and mark a collision | |
if [ $row -eq $cannonY ]; then | |
let LEFT="$i * 4 + $offset - 4" | |
let RIGHT="$i * 4 + $offset - 1" | |
if [ $cannonX -ge $LEFT ] && [ $cannonX -le $RIGHT ]; then | |
killed=$i | |
avatar='\033[1;31m***\033[0m' | |
((score=$score + $value)) | |
cannonY=0 | |
fi | |
fi | |
fi | |
if [ $value -eq 0 ]; then | |
printf " " | |
else | |
echo -en "${avatar} " | |
fi | |
done | |
return $killed | |
} | |
drawcannon() | |
{ | |
# move the cannon up one | |
if [ $cannonY -eq 0 ]; then | |
# fell off the top of the screen | |
return | |
fi | |
tput cup $cannonY $cannonX | |
printf " " | |
((cannonY=cannonY-1)) | |
tput cup $cannonY $cannonX | |
echo -en "\033[1;31m*\033[0m" | |
} | |
drawship() | |
{ | |
tput cup $bottom 0 | |
printf "%80s" " " | |
tput cup $bottom $ship | |
# Show cannon state by its color in the spaceship | |
if [ $cannonY -eq 0 ]; then | |
col=31 | |
else | |
col=30 | |
fi | |
echo -en "|--\033[1;${col}m*\033[0m--|" | |
} | |
move() | |
{ | |
# shift aliens left or right | |
# move cannon, check for collision | |
(sleep $DELAY && kill -ALRM $$) & | |
# Change direction if hit the side of the screen | |
if [ $offset -gt $MAXRIGHT ] && [ $direction -eq 1 ]; then | |
# speed up if hit the right side of the screen | |
DELAY=`echo $DELAY \* 0.90 | bc` | |
direction=-1 | |
((ceiling++)) | |
elif [ $offset -eq 0 ] && [ $direction -eq -1 ]; then | |
direction=1 | |
fi | |
((offset=offset+direction)) | |
drawrow 0 ${row0[@]} | |
row0[$?]=0 | |
drawrow 1 ${row1[@]} | |
row1[$?]=0 | |
drawrow 2 ${row2[@]} | |
row2[$?]=0 | |
drawrow 3 ${row3[@]} | |
row3[$?]=0 | |
drawrow 4 ${row4[@]} | |
row4[$?]=0 | |
drawrow 5 ${row5[@]} | |
row5[$?]=0 | |
aliensleft=`echo ${row0[@]} ${row1[@]} ${row2[@]} ${row3[@]}\ | |
${row4[@]} ${row5[@]} \ | |
| tr ' ' '+' | bc` | |
if [ $aliensleft -eq 0 ]; then | |
tput cup 5 5 | |
trap exit ALRM | |
echo "YOU WIN" | |
sleep $DELAY | |
#tput echo | |
tput cnorm | |
echo; echo; echo | |
exit 0 | |
fi | |
drawcannon | |
drawship | |
} | |
trap move ALRM | |
clear | |
drawship | |
# Start the aliens moving... | |
move | |
while : | |
do | |
read -s -n 1 key | |
case "$key" in | |
a) | |
[ $ship -gt 0 ] && ((ship=ship-1)) | |
drawship | |
;; | |
l) | |
[ $ship -lt $FARRIGHT ] && ((ship=ship+1)) | |
drawship | |
;; | |
f) | |
if [ $cannonY -eq 0 ]; then | |
let cannonX="$ship + 3" | |
cannonY=$bottom | |
fi | |
;; | |
q) | |
clear | |
echo "Goodbye!" | |
tput cnorm | |
stty echo | |
trap exit ALRM | |
sleep $DELAY | |
exit 0 | |
;; | |
esac | |
done | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 space.bash </br> | |
Ejecución: ./space.bash </br> | |
Movimientos del juego | |
LEFT: a </br> | |
RIGHT: l </br> | |
FIRE: f </br> | |
QUIT: q </br> | |
</pre> | |
<pre class="brush:plain"> Para el mejor uso de los estilos =) Snifer creo esta plantilla prederminada este puede ser usado como gusto plain</pre> | |
<hr/><pre class="brush:bash">$ python GeekScrypting.py</pre> | |
<hr/><pre class="brush:bash">#!/bin/sh | |
# | |
# W.H. Kalpa Pathum <[email protected]> | |
# 1st June, 2010 | |
# | |
# Dropbox directory | |
DROPBOX_DIR="$HOME/Dropbox/" | |
# creates a temporary file | |
file_list=$(mktemp) | |
# writes the URIs of the selected file to the temp file | |
echo $NAUTILUS_SCRIPT_SELECTED_URIS | sed 's/ \//\n/g' &gt; $file_list | |
# iterete through the file list | |
for file in $(cat $file_list) | |
do | |
# extract the last filed from the URI, that is the file name | |
filename="$(echo $file | awk -F'/' '{print $NF}' | sed 's/%20/ /g')" | |
# creates the symbolic link | |
ln -s "$(pwd)/$filename" "$DROPBOX_DIR$filename" | |
# sets the emblem | |
gvfs-set-attribute -t stringv "$filename" metadata::emblems default | |
done | |
exit 0</[email protected]></pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
if [ $# -eq 0 ] | |
then | |
echo "¿Y el link?" | |
echo "Uso: $0 [ URL del vídeo ]" | |
exit 1 | |
fi | |
url=$1 | |
regexp='(https?\:\/\/([a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*)(\/\w+)+)' | |
if [[ $1 =~ $regexp ]]; then | |
ifyoutubedl=`type -p youtube-dl` | |
if [ -z $ifyoutubedl ]; then | |
echo -e "\n\nyoutube-dl necesita estar instalado\n" | |
exit 1 | |
else | |
youtube-dl -t --extract-audio --audio-format mp3 $1 | |
echo "Sonido extraído" | |
ls | grep *.mp3 | |
exit 0 | |
fi | |
else | |
echo "No es una URL" | |
exit 1 | |
fi | |
exit 0 | |
</pre> | |
<pre class="brush:plain">Permisos: chmod 700 Youtube2mp3.bash | |
Ejecución ./Youtube2Mp3.bash. [ URL del vídeo ] | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
# Sat Jul 12 16:52:30 EDT 2003 | |
# NAME: ttt | |
# Copyright 2003, Chris F.A. Johnson | |
# Released under the terms of the GNU General Public License | |
ESC=$'\e' | |
tictactoe() { | |
[ $verbose -ge 1 ] && echo tictactoe $* >&2 | |
board=`printf "%9.9s" " "` | |
mvnum=1 | |
remainder=" 1 2 3 4 5 6 7 8 9 " | |
show "$board" | |
while : | |
do | |
status | |
eval \$player$P | |
[ $? -ne 0 ] && return | |
put $_MOVE "$board" | |
board=$_PUT | |
# show "$board" | |
mkbold "$_MOVE" | |
printat 0 0 $mvnum | |
printat $prompt | |
sleep $pause & | |
mlist="$mlist $_MOVE" | |
remainder=${remainder/ $_MOVE / } | |
checkboard "$board" && { | |
mkbold $win | |
printat $prompt "$cle" | |
eval winner \$player$P | |
return | |
} | |
[ $mvnum -eq 9 ] && { | |
B=$U mkbold "$_MOVE" | |
winner "Neither player" | |
return | |
} | |
wait | |
B=$U mkbold "$_MOVE" | |
if [ $P = O ] | |
then | |
P=X | |
OP=O | |
else | |
P=O | |
OP=X | |
fi | |
mvnum=$(( $mvnum + 1 )) | |
done | |
} | |
winner() { | |
[ $verbose -ge 1 ] && echo winner $* >&2 | |
printat $prompt "$cle $* wins\n\n" | |
} | |
status() { | |
[ $verbose -ge 1 ] && echo status $* >&2 | |
if [ $verbose -ge 1 ] | |
then | |
printat 4 0 | |
printf "${cle}Move: %s Player: %s Board: \"%s\" Last move: %s Move list: %s" \ | |
"$mvnum" "$P" "${board// /-}" "$_MOVE" "$mlist" | |
else | |
false | |
fi | |
} | |
show() { | |
[ $verbose -ge 1 ] && echo show $* >&2 | |
printat 0 0 $mvnum | |
printat 0 $top ##$(( ($LINES - 5) / 2 )) | |
printf " %${margin}.${margin}s | %1s | %1s\n" "${1:0:1}" "${1:1:1}" "${1:2:1}" | |
printf "%${margin}.${margin}s---+---+---\n" " " | |
printf " %${margin}.${margin}s | %1s | %1s\n" "${1:3:1}" "${1:4:1}" "${1:5:1}" | |
printf "%${margin}.${margin}s---+---+---\n" " " | |
printf " %${margin}.${margin}s | %1s | %1s\n" "${1:6:1}" "${1:7:1}" "${1:8:1}" | |
} | |
put() { | |
[ $verbose -ge 1 ] && echo put $1 \""$2"\" >&2 | |
local n=$(( $1 - 1 )) | |
_PUT=${2:-$board} | |
[ "${_PUT:$n:1}" = " " ] && | |
_PUT=${_PUT:0:$n}$P${_PUT:$1} | |
} | |
checkboard() { | |
[ $verbose -ge 1 ] && echo checkboard \"$*\" >&2 | |
case $1 in | |
$P??$P??$P??) win="1 4 7" ;; | |
?$P??$P??$P?) win="2 5 8" ;; | |
??$P??$P??$P) win="3 6 9" ;; | |
??$P?$P?$P??) win="3 5 7" ;; | |
$P???$P???$P) win="1 5 9" ;; | |
$P$P$P??????) win="1 2 3" ;; | |
???$P$P$P???) win="4 5 6" ;; | |
??????$P$P$P) win="7 8 9" ;; | |
*) false ;; | |
esac | |
} | |
mkbold() { | |
[ $verbose -ge 1 ] && echo mkbold $* >&2 | |
for sq in $* | |
do | |
row=$(( ($sq - 1) / 3 )) | |
col=$(( ($sq - 1) % 3 + 1 )) | |
printat $(( ($col * 4) + $margin - 2 )) $(( ($row * 2) + $top )) | |
printf "${B}$P${U}" | |
done | |
} | |
human() { | |
[ $verbose -ge 1 ] && echo human $* >&2 | |
while : | |
do | |
key "Select ($remainder)" | |
# case $_MOVE in | |
# "$ESC") read -sn1; read -sn1 kp; continue ;; | |
# esac | |
_MOVE=$_KEY | |
case $_MOVE in | |
1|2|3|4|5|6|7|8|9) [ "${board:_MOVE-1:1}" = " " ] && break ;; | |
q|Q|x|X) echo; return 5 ;; | |
p) printat $prompt | |
KEYECHO= KEYMAX=$(( $COLUMNS - 10 )) key "Enter delay in seconds" | |
pause=$_KEY | |
;; | |
"") set -- $remainder | |
_MOVE=$1 | |
[ $verbose -ge 1 ] && echo "|$_MOVE|" >&2 | |
break ;; | |
*) printat $prompt | |
printf "\r%s%s\r" " "$cle" $_MOVE: Invalid move" | |
sleep 1 | |
printf "%s\r" "$cle" ;; | |
esac | |
done | |
} | |
randy() { | |
[ $verbose -ge 1 ] && echo randy $* >&2 | |
randstr $remainder | |
_MOVE=$_RANDSTR | |
} | |
key() { | |
[ $verbose -ge 1 ] && echo key $* >&2 | |
printat $prompt "$cle$CVIS$beep" | |
read -${KEYECHO}n$KEYMAX -p "${1:-PAK}: " _KEY 2>&1 | |
printf "$CINV" | |
} | |
getkey() { | |
local OKchars=${1:-${remainder// /}} | |
local kp2 kp3 | |
stty -echo | |
while : | |
do | |
prompt="==>" | |
prompt | |
IFS= read -r -sn1 -p " " kp 2>&1 || exit 2 #cleanup | |
case $OKchars in | |
*"$kp"*) | |
case $kp in | |
$ESC) | |
read -st1 -n1 kp2 | |
case $kp2 in | |
\[) read -st1 -n1 kp3 | |
case $kp3 in | |
A) kp=$UP; break ;; | |
B) kp=$DN; break ;; | |
C) kp=$RT; break ;; | |
D) kp=$LF; break ;; | |
esac | |
;; | |
esac | |
;; | |
*) break ;; | |
esac | |
;; | |
esac | |
done | |
_KEY=$kp | |
} | |
randstr() { | |
[ $verbose -ge 1 ] && echo randstr $* >&2 | |
# [ -n "$1" ] || return 1 | |
n=$(( ($RANDOM % $#) + 1 )) | |
eval _RANDSTR=\${$n} | |
} | |
isblock() { | |
[ $verbose -ge 1 ] && echo isblock $* >&2 | |
win= | |
block= | |
for _MOVE in $remainder | |
do | |
P=$OP put $_MOVE | |
P=$OP checkboard "$_PUT" && return | |
done | |
_MOVE= | |
} | |
block() { | |
[ $verbose -ge 1 ] && echo block $* >&2 | |
block= | |
for _MOVE in $remainder | |
do | |
put $_MOVE | |
checkboard "$_PUT" && return | |
P=$OP put $_MOVE | |
P=$OP checkboard "$_PUT" && block=$_MOVE | |
done | |
[ "$block" ] && { _MOVE=$block; return; } | |
randy | |
} | |
computer() { | |
[ $verbose -ge 1 ] && echo computer $* >&2 | |
local r c | |
case $mvnum in | |
1) randstr 1 3 7 9 | |
_MOVE=$_RANDSTR ;; | |
2) | |
if [ "${board:4:1}" = " " ] | |
then | |
_MOVE=5 | |
else | |
randstr 1 3 7 9 | |
_MOVE=$_RANDSTR | |
fi | |
;; | |
3) r=${mlist// /} | |
c='1 3 7 9' | |
randstr ${c//[$r]/} | |
# randstr ${remainder//[$r]/} | |
_MOVE=$_RANDSTR | |
;; | |
4) | |
isblock | |
[ "$_MOVE" ] && return | |
r=${mlist// /} | |
c='2 4 6 8' | |
randstr ${remainder//[$r]/} | |
_MOVE=$_RANDSTR | |
;; | |
*) block ;; | |
esac | |
} | |
printat() { #== print arguments 3-... at Y=$2 X=$1 | |
[ $verbose -ge 1 ] && echo printat $* >&2 | |
[ $# -lt 2 ] && return 1 | |
local y=$2 | |
local x=$1 | |
shift 2 | |
msg="$*" | |
printf "\e[%d;%dH%b" $y $x "$msg" | |
} | |
version() | |
{ | |
echo " $progname, version $version | |
Copyright $copyright, $author $email | |
This is free software, released under the terms of the GNU General | |
Public License. There is NO warranty; not even for MERCHANTABILITY or | |
FITNESS FOR A PARTICULAR PURPOSE. | |
" | |
} | |
usage() | |
{ | |
echo " | |
${B}NAME${U}: $progname - Tic-Tac-Toe | |
${B}USAGE${U}: $progname [OPTIONS] | |
${B}OPTIONS${U}: | |
-x player1 - specify first player | |
-o player2 - specify second player | |
-c player1,player2 - specify both players | |
-p seconds - time to pause between moves | |
-h, --help - help: print this message | |
-H, --help_long - help: print more detailed message (if available) | |
-v, --verbose - sends messsages to \$HOME/tttlog | |
-V, --version - print version information | |
Copyright 2003, Chris F.A. Johnson | |
" | |
} | |
verbose=0 | |
longusage=0 | |
version="1.0" | |
copyright=2003 | |
author="Chris F.A. Johnson" | |
progname=${0##*/} | |
P=X | |
OP=O | |
playerX=human | |
playerO=computer | |
co= | |
li= | |
if tput ce >/dev/null 2>&1 | |
then ## e.g. FreeBSD | |
co=co | |
li=li | |
elif tput el 2>/dev/null | |
then ## e.g. Linux | |
co=cols | |
li=lines | |
fi | |
UNBOLD=$'\E[0m' | |
standout=$'\E[0;1;7m' | |
cle=$'\E[K' | |
clb=$'\E[1K' | |
ULINE=$'\E[0;4m' | |
REVERSE=$'\E[0;7m' | |
BLINK=$'\E[0;5m' | |
BOLD=$'\E[0;1m' | |
CINV=$'\E[0;8m' | |
R=$REVERSE | |
U=$UNBOLD | |
B=$BOLD | |
BR=$B$R | |
Cl=$'\f' | |
if [ "$co" ] | |
then | |
tput reset | |
COLUMNS=${COLUMNS:=`tput $co`} | |
else | |
COLUMNS=${COLUMNS:-80} | |
fi | |
top=6 | |
margin=11 | |
prompt="3 $(( $top + 9 ))" | |
beep= #$'\a' | |
pause=1 | |
KEYMAX=1 | |
KEYECHO=s | |
while getopts vVhH-:xoX:O:c:p: var | |
do | |
case "$var" in | |
x) playerX=human | |
playerO-computer | |
;; | |
o) playerO=human | |
playerX=computer | |
;; | |
X) playerX=$OPTARG ;; | |
O) playerO=$OPTARG ;; | |
c|C) playerO=${OPTARG#*,} | |
playerX=${OPTARG%,*} | |
;; | |
p) pause=$OPTARG ;; | |
-) case $OPTARG in | |
help) usage; exit ;; | |
verbose) verbose=$(( $verbose + 1 )) ;; | |
version) version; exit ;; | |
esac | |
;; | |
h) usage; exit ;; | |
H) longusage=1; usage; exit ;; | |
v) verbose=$(( $verbose + 1 )) ;; | |
V) version; exit ;; | |
*);; | |
esac | |
done | |
shift $(( $OPTIND - 1 )) | |
if [ "$co" ] | |
then | |
COLUMNS=`tput $co` | |
else | |
COLUMNS=${COLUMNS:-80} | |
fi | |
margin=11 ##$(( ($COLUMNS - 11) / 2 )) | |
clear | |
if [ $verbose -ge 1 ] | |
then | |
exec 2>$HOME/tttlog | |
set -x | |
fi | |
tictactoe | |
printat $prompt "\n$CVIS\n" | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 tt.bash </br> | |
Ejecución: ./ttt.bash </br> | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
############################################################################## | |
# Copyright (c) J.S Unix Consultants Ltd | |
############################################################################## | |
# FILE : LINUXexplo | |
# Last Change Date : 03-18-2012 | |
# Author(s) : Joe Santoro | |
# Date Started : 15th April, 2004 | |
# Email : linuxexplo [ at ] unix-consultants.com | |
# Web : http://www.unix-consultants.com/examples/scripts/linux/linux-explorer | |
# | |
# Usage : ./LINUXexplo [-d] [-v] [-g] [-s] [-h] [-V] | |
# | |
# Purpose : This script is a Linux version of the Solaris explorer | |
# (SUNWexplo) script. | |
# | |
# Used to collect information about a linux system build for remote | |
# support supposes. | |
# This script is a general purpose script for ALL linux | |
# systems and therefore NOT tied into any one distro. | |
# | |
############################################################################# | |
# | |
# Modified by Facundo M. de la Cruz [ [email protected] ] | |
# | |
############################################################################# | |
# | |
# Changelog (bug fixes and new features): | |
# | |
# - SELiunx support improved by FMDLC - 03182012 | |
# - Systemd support added by FMDLC - 03182012 | |
# - Added contact form by FMDLC - 03182012 | |
# - Added ARP gathering info by FMDLC - 03182012 | |
# - Added kickstart copy by FMDLC - 03182012 | |
# - GPG support added by FMDLC - 03182012 | |
# - Improved release copy by FMDLC - 03182012 | |
# - Improved YUM support by FMDLC - 03182012 | |
# - Improved resolv.conf copy by FMDLC- 03182012 | |
# - Added README file by FMDLC - 03252012 | |
# - Added DM discovery by FMDLC - 04062012 | |
# - Added netstat -in by FMDLC - 04062012 | |
# - Improved dmsetup support by FMDLC - 04102012 | |
# - Fixed vmstat bug by FMDLC - 04102012 | |
# | |
############################################################################## | |
# | |
# J.S UNIX CONSULTANTS LTD MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE | |
# SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT | |
# LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A | |
# PARTICULAR PURPOSE, OR NON-INFRINGEMENT. J.S UNIX CONSULTANTS LTD SHALL | |
# NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, | |
# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. | |
# | |
############################################################################## | |
COPYRIGHT="Copyright (c) J.S Unix Consultants Ltd" | |
MYVERSION="0.108" | |
MYDATE="$(/bin/date +'%Y.%m.%d.%m.%H.%M')" # Date and time now | |
MYNAME=$(basename $0) | |
WHOAMI=$(/usr/bin/whoami) # The user running the script | |
HOSTID=$(/usr/bin/hostid) # The Hostid of this server | |
MYHOSTNAME=$(/bin/uname -n) # The hostname of this server | |
MYSHORTNAME=$(echo $MYHOSTNAME | cut -f 1 -d'.') | |
TMPFILE="/tmp/$(basename $0).$$" # Tempory File | |
TOPDIR="/opt/LINUXexplo" # Top level output directory | |
VERBOSE=1 # Set to see the scripts progress used | |
# only if connected to a terminal session. | |
FULLSOFT=0 # Set to Verify Software installation | |
# this takes a very long time | |
GPG_ID="57260789" # GPG/PGP Public key ID. Set to encrypt and | |
# sing the tarball. | |
SUPPORT="[email protected]" # Support email | |
# | |
# Ensure that we are the root user | |
# | |
[ ${UID} != 0 ] && echo "You must be root to run this program." && exit 1 | |
# | |
# Set the path for the script to run. | |
# | |
PATH=/bin:/usr/sbin:/sbin:/usr/sbin:/usr/local/bin:$PATH | |
if [ -d /opt/VRTSvcs/bin ] ; then | |
PATH=$PATH:/opt/VRTSvcs/bin | |
fi | |
export PATH | |
# Remove any temporary files we create | |
trap '$RM -f $TMPFILE >/dev/null 2>&1; exit' 0 1 2 3 15 | |
############################################################################## | |
# | |
# Function : Usage | |
# | |
# Notes : N/A | |
# | |
############################################################################## | |
function ShowUsage | |
{ | |
#------------------------------------------------------------------- | |
# Show help message | |
#------------------------------------------------------------------- | |
echo | |
echo "$MYNAME Version $MYVERSION - $COPYRIGHT " | |
echo | |
echo " usage: $MYNAME [option] " | |
echo | |
echo " -d Target directory for explorer files" | |
echo " -g GPG support" | |
echo " -v Verbose output" | |
echo " -s Verify Package Installation" | |
echo " -h This help message" | |
echo " -V Version Number of LINUXexplo" | |
echo | |
exit 0 | |
} | |
############################################################################## | |
# | |
# Function : Echo | |
# | |
# Parameters : String to display what function is about to run | |
# | |
# Output : Print what section we are about to collect data for | |
# | |
# Notes : N/A | |
# | |
############################################################################## | |
function Echo () | |
{ | |
if [ -t 0 ] ; then | |
if [ ${VERBOSE} -ne 0 ] ; then | |
echo "$*" | |
fi | |
if [ ${VERBOSE} -gt 1 ] ; then | |
echo "Press Return to Continue.........." | |
read A | |
fi | |
fi | |
} | |
############################################################################## | |
# | |
# Function : mywhich | |
# | |
# Parameters : name of program | |
# | |
# Output : path of executable | |
# | |
# Notes : Return back the location of the executable | |
# I need this as not all linux distros have the files | |
# in the same location. | |
# | |
############################################################################## | |
function mywhich () | |
{ | |
local command=$1 | |
local mypath=$(which $command 2>/dev/null) | |
if [ "$mypath" = "" ] ; then | |
# echo "Command $command not found" >> $NOTFNDLOG 2> /dev/null | |
echo "NOT_FOUND" | |
elif [ ! -x "$mypath" ] ; then | |
echo "Command $command not executable" >> $NOTFNDLOG 2> /dev/null | |
echo "NOT_FOUND" | |
else | |
echo "$mypath" | |
fi | |
} | |
############################################################################## | |
# | |
# Function : findCmds | |
# | |
# Parameters : None | |
# | |
# Output : None | |
# | |
# Notes : Goes and find each of the commands I want to use and | |
# stores the information into the various variables which | |
# is the uppercase version of the command itself. | |
# | |
# I need this as not all linux distros have the files | |
# in the same location. | |
# | |
############################################################################## | |
function findCmds | |
{ | |
# Standard commands | |
AWK=$(mywhich awk ) | |
BASENAME=$(mywhich basename ) | |
CAT=$(mywhich cat ) | |
CHKCONFIG=$(mywhich chkconfig ) | |
CP=$(mywhich cp ) | |
CUT=$(mywhich cut ) | |
CHMOD=$(mywhich chmod ) | |
DATE=$(mywhich date ) | |
DF=$(mywhich df ) | |
DMESG=$(mywhich dmesg ) | |
ECHO=$(mywhich echo ) | |
FILE=$(mywhich file ) | |
FIND=$(mywhich find ) | |
FREE=$(mywhich free ) | |
GREP=$(mywhich grep ) | |
EGREP=$(mywhich egrep ) | |
LS=$(mywhich ls ) | |
MKDIR=$(mywhich mkdir ) | |
LAST=$(mywhich last ) | |
LOCALE=$(mywhich locale ) | |
PSTREE=$(mywhich pstree ) | |
PS=$(mywhich ps ) | |
RM=$(mywhich rm ) | |
SLEEP=$(mywhich sleep ) | |
MOUNT=$(mywhich mount ) | |
MV=$(mywhich mv ) | |
SORT=$(mywhich sort ) | |
LN=$(mywhich ln ) | |
SYSTEMCTL=$(mywhich systemctl ) | |
TAIL=$(mywhich tail ) | |
UNAME=$(mywhich uname ) | |
UPTIME=$(mywhich uptime ) | |
WHO=$(mywhich who ) | |
ZIP=$(mywhich zip ) | |
GZIP=$(mywhich gzip ) | |
GAWK=$(mywhich gawk ) | |
SED=$(mywhich sed ) | |
GUNZIP=$(mywhich gunzip ) | |
# Selinux | |
SESTATUS=$(mywhich sestatus ) | |
GETSEBOOL=$(mywhich getsebool ) | |
SEMANAGE=$(mywhich semanage ) | |
# Systemd | |
SYSTEMD=$(mywhich systemd ) | |
SYSTEMCTL=$(mywhich systemctl ) | |
SYSTEMDCGLS=$(mywhich systemd-cgls ) | |
SYSTEMDLOGINCTL=$(mywhich systemd-loginctl) | |
# GPG | |
GPG_BIN=$(mywhich gpg) | |
# Samba | |
TESTPARM=$(mywhich testparm ) | |
WBINFO=$(mywhich wbinfo ) | |
# Apache | |
APACHECTL=$(mywhich apachectl ) | |
APACHE2CTL=$(mywhich apache2ctl ) | |
# Packages | |
APTCONFIG=$(mywhich apt-config ) | |
RPM=$(mywhich rpm ) | |
ZYPPER=$(mywhich zypper ) | |
DPKG=$(mywhich dpkg ) | |
DPKG_QUERY=$(mywhich dpkg-query ) | |
EMERGE=$(mywhich emerge ) | |
YUM=$(mywhich yum ) | |
# Kernel Info | |
MODINFO=$(mywhich modinfo ) | |
SYSCTL=$(mywhich sysctl ) | |
KSYMS=$(mywhich ksyms ) | |
# H/W Info | |
ACPI=$(mywhich acpi ) | |
CARDCTL=$(mywhich cardclt ) | |
DUMPE2FS=$(mywhich dumpe2fs ) | |
DMIDECODE=$(mywhich dmidecode ) | |
FDISK=$(mywhich fdisk ) | |
BLKID=$(mywhich blkid ) | |
HDPARM=$(mywhich hdparm ) | |
HOSTNAME=$(mywhich hostname ) | |
HWINFO=$(mywhich hwinfo ) | |
HWCLOCK=$(mywhich hwclock ) | |
LSMOD=$(mywhich lsmod ) | |
LSPCI=$(mywhich lspci ) | |
LSPNP=$(mywhich lspnp ) | |
IPVSADM=$(mywhich ipvsadm ) | |
LSUSB=$(mywhich lsusb ) | |
LSDEV=$(mywhich lsdev ) | |
LSHAL=$(mywhich lshal ) | |
LSRAID=$(mywhich lsraid ) | |
MDADM=$(mywhich mdadm ) | |
PROCINFO=$(mywhich procinfo ) | |
POWERMT=$(mywhich powermt ) | |
SMARTCTL=$(mywhich smartclt ) | |
SFDISK=$(mywhich sfdisk ) | |
HWPARM=$(mywhich hwparm ) | |
SCSI_ID=$(mywhich scsi_id ) | |
ISCSIADM=$(mywhich iscsiadm ) | |
MULTIPATH=$(mywhich multipath ) | |
DMSETUP=$(mywhich dmsetup ) | |
NTPQ=$(mywhich ntpq ) | |
SYSP=$(mywhich sysp ) | |
_3DDIAG=$(mywhich 3Ddiag ) | |
LSHW=$(mywhich lshw ) | |
SYSTOOL=$(mywhich systool ) | |
SWAPON=$(mywhich swapon ) | |
# Disks | |
LVM=$(mywhich lvm ) | |
LVDISPLAY=$(mywhich lvdisplay ) | |
VGS=$(mywhich vgs ) | |
PVSCAN=$(mywhich pvs ) | |
VGSCAN=$(mywhich vgscan ) | |
VGDISPLAY=$(mywhich vgdisplay ) | |
LVMDISKSCAN=$(mywhich lvmdiskscan ) | |
PVSCAN=$(mywhich pvscan ) | |
DEBUGREISERFS=$(mywhich debugreiserfs ) | |
HDPARM=$(mywhich hdparm ) | |
EXPORTFS=$(mywhich exportfs ) | |
REPQUOTA=$(mywhich repquota ) | |
TUNE2FS=$(mywhich tune2fs ) | |
# Veritas FS | |
PVDISPLAY=$(mywhich pvdisplay ) | |
VXDG=$(mywhich vxdg ) | |
VXDISK=$(mywhich vxdisk ) | |
VXPRINT=$(mywhich vxprint ) | |
VXLICREP=$(mywhich vxlicrep ) | |
# Veritas Cluster | |
HASTATUS=$(mywhich hastatus ) | |
HARES=$(mywhich hares ) | |
HAGRP=$(mywhich hagrp ) | |
HATYPE=$(mywhich hatype ) | |
HAUSER=$(mywhich hauser ) | |
LLTSTAT=$(mywhich lltstat ) | |
GABCONFIG=$(mywhich gabconfig ) | |
HACF=$(mywhich hacf ) | |
# Redhat Cluster | |
CLUSTAT=$(mywhich clustat ) | |
CLUSVCADM=$(mywhich clusvcadm ) | |
MKQDISK=$(mywhich mkqdisk ) | |
# CRM Cluster | |
CRM=$(mywhich crm ) | |
CRM_MON=$(mywhich crm_mon ) | |
CRM_VERIFY=$(mywhich crm_verify) | |
CIBADMIN=$(mywhich cibadmin ) | |
# Network | |
IFCONFIG=$(mywhich ifconfig ) | |
IWCONFIG=$(mywhich iwconfig ) | |
NETSTAT=$(mywhich netstat ) | |
NFSSTAT=$(mywhich nfsstat ) | |
ROUTE=$(mywhich route ) | |
YPWHICH=$(mywhich ypwhich ) | |
IP=$(mywhich ip ) | |
ARP=$(mywhich arp ) | |
MIITOOL=$(mywhich mii-tool ) | |
IPTABLES=$(mywhich iptables ) | |
IPCHAINS=$(mywhich ipchains ) | |
ETHTOOL=$(mywhich ethtool ) | |
BRCTL=$(mywhich brctl ) | |
# Tuning | |
IOSTAT=$(mywhich iostat ) | |
VMSTAT=$(mywhich vmstat ) | |
IPCS=$(mywhich ipcs ) | |
MODPROBE=$(mywhich modprobe ) | |
DEPMOD=$(mywhich depmod ) | |
# Other | |
RUNLEVEL=$(mywhich runlevel ) | |
LSOF=$(mywhich lsof ) | |
LPQ=$(mywhich lpq ) | |
TAR=$(mywhich tar ) | |
XVINFO=$(mywhich xvinfo ) | |
POSTCONF=$(mywhich postconf ) | |
# Virtual Server | |
XM=$(mywhich xm ) | |
VIRSH=$(mywhich virsh ) | |
# Gentoo | |
RC_UPDATE=$(mywhich rc-update) | |
} | |
############################################################################## | |
# Get the command line options | |
############################################################################## | |
while getopts "d:vhgV" OPT | |
do | |
case "$OPT" in | |
d) if [ $OPTARG = "/" ] ; then | |
echo "ERROR: root directory selected as target! " | |
echo "Exiting." | |
exit 1 | |
elif [ $OPTARG != "" ] ; then | |
TOPDIR=${OPTARG%%/} | |
fi | |
;; | |
g) | |
GPG=1 | |
;; | |
v) VERBOSE=1 | |
;; | |
s) FULLSOFT=1 | |
;; | |
h) ShowUsage | |
;; | |
V) echo | |
echo "LINUXexplo Version : $MYVERSION" | |
echo | |
exit 0 | |
;; | |
esac | |
done | |
############################################################################## | |
# MAIN | |
############################################################################## | |
# Go away and find ALL my commands for this script | |
findCmds | |
if [[ ${GPG} -eq 1 ]] && [ ! -x ${GPG_BIN} ]; then | |
echo "Sorry your system doesn't have GPG support. Install it before." | |
exit 1 | |
fi | |
LOGTOP="${TOPDIR}/linux" | |
LOGDIR="${LOGTOP}/explorer.${HOSTID}.${MYSHORTNAME}-${MYDATE}" | |
TARFILE="${LOGDIR}.tgz" | |
NOTFNDLOG="${LOGDIR}/command_not_found.out" | |
if [ ! -d $LOGDIR ] ; then | |
/bin/mkdir -p $LOGDIR | |
fi | |
echo | |
echo "$MYNAME - $MYVERSION" | |
echo | |
echo "This program will gather system information and can take several" | |
echo "minutes to finish." | |
echo | |
echo "You must complete some questions before start." | |
echo "It will produce a .tgz or .tgz.gpg file output and a directory" | |
echo "on your /opt/LINUXexplo/linux/ directory". | |
echo | |
echo "Please follow the support instruction for submit this information" | |
echo "For contact the support please send a email to <$SUPPORT>" | |
echo | |
echo "**********************************************************************" | |
echo "Personal information" | |
echo "**********************************************************************" | |
read -p "Company: " COMPANY | |
read -p "Your name: " NAME | |
read -p "Email: " EMAIL | |
read -p "Telephone: " TELEPHONE | |
read -p "Movil: " MOVIL | |
read -p "City: " CITY | |
read -p "Zipcode: " ZIPCODE | |
read -p "Country: " COUNTRY | |
echo | |
echo "**********************************************************************" | |
echo "System information" | |
echo "**********************************************************************" | |
read -p "Server type (physical/virtual): " SERVER | |
read -p "Linux distribution: " LINUX | |
read -p "Problem description (small): " PROBLEM | |
read -p "System description (small): " SYSTEM | |
read -p "Enviroment (testing/production/workstation): " ENVIROMENT | |
echo | |
read -p "Are you sure to continue? (Y/n)" REPLY | |
if [[ "$REPLY" = [Yy] ]]; then | |
echo | |
Echo "Starting support gathering process." | |
else | |
Echo "Aborting." | |
exit 0 | |
fi | |
echo | |
cat << EOF > /tmp/README | |
----------------------------------------------------------------------------- | |
$MYNAME - $MYVERSION | |
----------------------------------------------------------------------------- | |
This directory contains system configuration information. | |
Information was gathered on $MYDATE | |
Contact support made by: $NAME from $COMPANY | |
----------------------------------------------------------------------------- | |
CONTACT INFORMATION | |
----------------------------------------------------------------------------- | |
Company : $COMPANY | |
Name : $NAME | |
Email : $EMAIL | |
Telephone: $TELEPHONE | |
Movil : $MOVIL | |
City : $CITY | |
Zipcode : $ZIPCODE | |
Country : $COUNTRY | |
---------------------------------------------------------------------------- | |
SYSTEM INFORMATION | |
---------------------------------------------------------------------------- | |
Date : $($DATE "+%Y.%m.%d.%H.%M") | |
Command Line : $0 $@ | |
Hostname : $MYHOSTNAME | |
Host Id : $HOSTID | |
System type : $SERVER | |
Linux distribution : $LINUX | |
System platafform : $($UNAME -m) | |
Kernel Version : $($UNAME -r) | |
Eviroment : $ENVIROMENT | |
System description : $SYSTEM | |
Problem description: $PROBLEM | |
---------------------------------------------------------------------------- | |
Uptime: | |
$(${UPTIME}) | |
swapon -s: | |
$($SWAPON -s | $GREP -v "Filename") | |
vmstat: | |
$($VMSTAT -t 2> /dev/null || $VMSTAT 2> /dev/null) | |
---------------------------------------------------------------------------- | |
EOF | |
Echo "[*] Creating Explorer Directory: $LOGDIR" | |
if [ -d "$LOGTOP" ]; then | |
if [[ "${LOGTOP}" != "/" && "${LOGTOP}" != "/var" && "${LOGTOP}" != "/usr" ]]; then | |
if [ ${VERBOSE} -gt 0 ]; then echo "[*] Removing ${LOGTOP}"; fi | |
$RM -rf ${LOGTOP} | |
fi | |
fi | |
# make sure this is a linux system | |
if [ "$($UNAME -s)" != "Linux" ]; then | |
echo "ERROR: This script is only for Linux systems " | |
exit 1 | |
fi | |
# Make the directory I'm going to store my files | |
if [ ! -d $LOGDIR ]; then | |
$MKDIR -p $LOGDIR | |
if [ $? -ne 0 ]; then | |
echo "ERROR: Creating directory $LOGDIR" | |
exit 1 | |
else | |
$CHMOD 750 $LOGDIR | |
fi | |
fi | |
mv /tmp/README ${LOGDIR}/README | |
echo "$MYVERSION" > ${LOGDIR}/rev | |
# Create the default directories I'm going to use. | |
for Dir in etc system disks lp var logs hardware boot clusters virtual | |
do | |
if [ ! -d ${LOGDIR}/${Dir} ]; then | |
$MKDIR -p ${LOGDIR}/${Dir} | |
if [ $? -ne 0 ]; then | |
echo "ERROR: Creating directory $LOGDIR" | |
exit 1 | |
else | |
$CHMOD 750 ${LOGDIR}/${Dir} | |
fi | |
fi | |
done | |
############################################################################## | |
# We need the password file and the group file so that we can work out who | |
# owns what file. | |
# Notice we are not copying the shadow file !! | |
############################################################################## | |
$CP -p /etc/passwd ${LOGDIR}/etc/passwd | |
$CP -p /etc/group ${LOGDIR}/etc/group | |
if [ -f /etc/sudoers ]; then | |
$CP -p /etc/sudoers ${LOGDIR}/etc/sudoers | |
fi | |
############################################################################## | |
# Release Section | |
############################################################################## | |
Echo "[*] Release Section" | |
if [ -f "/etc/debian_version" ] || [ -f "/etc/redhat-release" ]; then | |
$CP -p "/etc/debian_version" ${LOGDIR}/system 2> /dev/null || $CP -p /etc/redhat-release ${LOGDIR}/system 2> /dev/null | |
fi | |
if [ -f /etc/issue ]; then | |
$CP -p "/etc/issue" ${LOGDIR}/system/issue | |
fi | |
if [ -f /etc/issue.net ]; then | |
$CP -p "/etc/issue.net" ${LOGDIR}/etc/issue.net | |
fi | |
if [ -f /etc/motd ]; then | |
$CP -p "/etc/motd" ${LOGDIR}/etc/motd | |
fi | |
############################################################################# | |
# Installation kickstart and log copy | |
############################################################################# | |
if [ -f "/root/anaconda-ks.cfg" ]; then | |
$MKDIR -p "${LOGDIR}/Installation" | |
$CP -p "/root/anaconda-ks.cfg" ${LOGDIR}/Installation/anaconda-ks.cfg | |
fi | |
############################################################################## | |
# Hardware/Proc Section | |
############################################################################## | |
Echo "[*] Hardware/Proc Section" | |
# Collecting information from the proc directory | |
$MKDIR -p ${LOGDIR}/proc | |
$FIND /proc -type f -print 2>/dev/null | \ | |
$GREP -v "/proc/kcore" | \ | |
$GREP -v "/proc/bus/usb" | \ | |
$GREP -v "/proc/xen/xenbus" | \ | |
$GREP -v "/proc/acpi/event" | \ | |
$GREP -v "pagemap" | \ | |
$GREP -v "clear_refs" | \ | |
$GREP -v "/proc/kmsg" > $TMPFILE | |
for i in $($CAT $TMPFILE) | |
do | |
Dirname=$(dirname $i) | |
Filename=$(basename $i) | |
if [ ! -d ${LOGDIR}${Dirname} ]; then | |
$MKDIR -p ${LOGDIR}${Dirname} | |
fi | |
if [ -e "$i" ] ; then | |
$CAT "$i" > ${LOGDIR}${Dirname}/${Filename} 2>&1 | |
fi | |
done | |
$RM -f $TMPFILE | |
############################################################################## | |
# Device Information | |
############################################################################## | |
if [ -x $CARDCTL ]; then | |
$CARDCTL info > ${LOGDIR}/hardware/cardctl-info.out 2>&1 | |
$CARDCTL status > ${LOGDIR}/hardware/cardctl-status.out 2>&1 | |
# $CARDCTL ident> ${LOGDIR}/hardware/cardctl-ident.out 2>&1 | |
fi | |
if [ -x $LSPCI ]; then | |
$LSPCI > ${LOGDIR}/hardware/lspci.out 2>&1 | |
$LSPCI -n > ${LOGDIR}/hardware/lspci-n.out 2>&1 | |
$LSPCI | while read line | |
do | |
Bus=$(/bin/echo $line 2>/dev/null | awk '{ print $1 }') | |
$LSPCI -vv -s $Bus > ${LOGDIR}/hardware/lspci_-vv_-s_${Bus}.out 2>&1 | |
done | |
fi | |
# Get the port names from the HDA cards | |
for i in /sys/class/scsi_host/host*/device/fc_host\:host*/port_name | |
do | |
if [ -f $i ]; then | |
name=$( echo $i | sed 's/\//_/g' | sed 's/^_//g') | |
echo "Port Name : $(cat $i )" >> ${LOGDIR}/hardware/cat_${name}.out | |
fi | |
done | |
# Get a listing of the /dev directory | |
$MKDIR ${LOGDIR}/dev | |
$LS -laR /dev > ${LOGDIR}/dev/ls_-laR_dev.out | |
if [ -x "$LSUSB" ]; then | |
$LSUSB -xv > ${LOGDIR}/hardware/lsusb_-xv.out 2>&1 | |
$LSUSB -tv > ${LOGDIR}/hardware/lsusb_-tv.out 2>&1 | |
fi | |
if [ -x "$LSDEV" ]; then | |
$LSDEV -type adaptor > ${LOGDIR}/hardware/lsdev_-type_adaptor.out 2>&1 | |
fi | |
if [ -x "$ACPI" ]; then | |
$ACPI -V > ${LOGDIR}/hardware/acpi-V.out 2>&1 | |
fi | |
if [ -x $FREE ]; then | |
$FREE > ${LOGDIR}/hardware/free.out | |
$FREE -k > ${LOGDIR}/hardware/free_-k.out | |
fi | |
$LS -laR /dev > ${LOGDIR}/hardware/ls-laR_dev.out | |
if [ -d /udev ]; then | |
$LS -laR /udev > ${LOGDIR}/hardware/ls-laR_udev.out | |
fi | |
# Tape information | |
if [ -f /etc/stinit.def ]; then | |
$CP -p /etc/stinit.def ${LOGDIR}/etc/stinit.def | |
fi | |
# Global Devices list | |
if [ -x "$LSHAL" ]; then | |
$LSHAL > ${LOGDIR}/hardware/lshal.out | |
fi | |
if [ -x /usr/share/rhn/up2date_client/hardware.py ]; then | |
/usr/share/rhn/up2date_client/hardware.py > ${LOGDIR}/hardware/hardware.py.out 2>&1 | |
fi | |
if [ -x "$SMARTCTL" ]; then | |
for device in $( $LS /dev/hd[a-z] /dev/sd[a-z] /dev/st[0-9] /dev/sg[0-9] 2> /dev/null) | |
do | |
name=$( echo $device | sed 's/\//_/g' ) | |
${SMARTCTL} -a $device 2>/dev/null 1> ${LOGDIR}/hardware/smartctl-a_${name}.out | |
done | |
fi | |
############################################################################## | |
# Collect Hardware information from the hwinfo program if installed | |
############################################################################## | |
if [ -x $HWINFO ]; then | |
$HWINFO > ${LOGDIR}/hardware/hwinfo.out 2>&1 | |
$HWINFO --isapnp > ${LOGDIR}/hardware/hwinfo_--isapnp.out 2>&1 | |
$HWINFO --scsi > ${LOGDIR}/hardware/hwinfo_--scsi.out 2>&1 | |
$HWINFO --framebuffer > ${LOGDIR}/hardware/hwinfo_--framebuffer.out 2>&1 | |
fi | |
if [ -x "$PROCINFO" ]; then | |
$PROCINFO > ${LOGDIR}/hardware/procinfo.out 2>&1 | |
fi | |
if [ -x "$DMIDECODE" ]; then | |
$DMIDECODE > ${LOGDIR}/hardware/dmidecode.out 2>&1 | |
fi | |
if [ -x $LSHW ]; then | |
$LSHW > ${LOGDIR}/hardware/lshw.out 2>&1 | |
fi | |
############################################################################## | |
# Boot Section | |
############################################################################## | |
Echo "[*] Boot Section" | |
if [ -x "/sbin/lilo" ]; then | |
/sbin/lilo -q > $LOGDIR/system/lilo_-q 2>&1 | |
fi | |
$LS -alR /boot > ${LOGDIR}/system/ls-alR_boot.out 2>&1 | |
$MKDIR -p ${LOGDIR}/boot/grub | |
for i in /boot/grub/menu.lst /boot/grub/grub.conf \ | |
/boot/grub.conf /boot/grub/device.map | |
do | |
if [ -f ${i} ]; then | |
$CP -p ${i} ${LOGDIR}/${i} | |
fi | |
done | |
if [ -f /etc/inittab ]; then | |
$CP -p /etc/inittab ${LOGDIR}/etc/inittab | |
fi | |
############################################################################## | |
# /etc Config Files Section | |
############################################################################## | |
Echo "[*] /etc Config Files Section" | |
for i in $( $FIND /etc -name "*.conf" -o -name "*.cf" -o -name "*.cnf" ) | |
do | |
dirname="$(dirname $i)" | |
filename="$(basename $i)" | |
if [ ! -d ${LOGDIR}/${dirname} ]; then | |
$MKDIR -p ${LOGDIR}/${dirname} | |
fi | |
$CP -p $i ${LOGDIR}/${dirname}/${filename} | |
done | |
if [ -f /etc/nologin.txt ]; then | |
$CP -p /etc/nologin.txt ${LOGDIR}/etc/nologin.txt | |
fi | |
$CP -p /etc/securetty ${LOGDIR}/etc/securetty | |
$CP -p /etc/shells ${LOGDIR}/etc/shells | |
if [ -f /etc/krb.realms ]; then | |
$CP -p /etc/krb.realms ${LOGDIR}/etc/krb.realms | |
fi | |
############################################################################## | |
# Copy the /etc/profile.d scripts | |
############################################################################## | |
if [ -d /etc/profile.d ]; then | |
$CP -Rp /etc/profile.d ${LOGDIR}/etc | |
fi | |
############################################################################## | |
# Copy the /etc/modprobe.d scripts | |
############################################################################## | |
if [ -d /etc/profile.d ]; then | |
$CP -Rp /etc/modprobe.d ${LOGDIR}/etc | |
fi | |
############################################################################## | |
# New in Fedora 9 | |
############################################################################## | |
if [ -d /etc/event.d ]; then | |
$CP -Rp /etc/event.d ${LOGDIR}/etc | |
fi | |
############################################################################## | |
# Get all the pcmcia config information | |
############################################################################## | |
if [ -d /etc/pcmcia ]; then | |
if [ ! -d ${LOGDIR}/pcmcia ]; then | |
$MKDIR -p ${LOGDIR}/etc/pcmcia | |
fi | |
$CP -R -p /etc/pcmcia/*.opts ${LOGDIR}/etc/pcmcia | |
fi | |
############################################################################## | |
# Performance/System Section | |
############################################################################## | |
Echo "[*] Performance/System Section" | |
if [ -e /proc/loadavg ]; then | |
$CAT /proc/loadavg > ${LOGDIR}/system/loadavg.out | |
fi | |
if [ -e /proc/stat ]; then | |
$CAT /proc/stat > ${LOGDIR}/system/stat.out | |
fi | |
$DATE > ${LOGDIR}/system/date.out | |
$FREE > ${LOGDIR}/system/free.out | |
$PS auxw > ${LOGDIR}/system/ps_auxw.out | |
$PS -lef > ${LOGDIR}/system/ps_-elf.out | |
$PSTREE > ${LOGDIR}/system/pstree.out | |
$HOSTNAME > ${LOGDIR}/system/hostname.out | |
$IPCS -a > ${LOGDIR}/system/ipcs_-a.out | |
$IPCS -u > ${LOGDIR}/system/ipcs_-u.out | |
$IPCS -l > ${LOGDIR}/system/ipcs_-l.out | |
$UPTIME > ${LOGDIR}/system/uptime.out | |
ulimit -a > ${LOGDIR}/system/ulimit_-a.out | |
if [ -x $VMSTAT ]; then | |
$VMSTAT -s > ${LOGDIR}/system/vmstat_-s.out | |
fi | |
############################################################################## | |
# OK not sure where this should go so I've put it here instead | |
############################################################################## | |
if [ "$LSOF" != "" ]; then | |
$LSOF > ${LOGDIR}/system/lsof.out 2>&1 | |
fi | |
############################################################################## | |
# Kernel Section | |
############################################################################## | |
Echo "[*] Kernel Section" | |
$SYSCTL -A> ${LOGDIR}/etc/sysctl_-A.out 2>&1 | |
$UNAME -a > ${LOGDIR}/system/uname_-a.out 2>&1 | |
$RUNLEVEL > ${LOGDIR}/system/runlevel.out 2>&1 | |
$WHO -r > ${LOGDIR}/system/who_-r.out 2>&1 | |
if [ -f /etc/conf.modules ]; then | |
$CP -p /etc/conf.modules ${LOGDIR}/etc/conf.modules | |
fi | |
if [ ! -d ${LOGDIR}/kernel/info ]; then | |
$MKDIR -p ${LOGDIR}/kernel/info | |
fi | |
$LSMOD | while read line | |
do | |
kernmod=$( echo $line | $AWK '{ print $1 }' ) | |
$MODINFO $kernmod > ${LOGDIR}/kernel/info/${kernmod}.out 2>&1 | |
done | |
$LSMOD > ${LOGDIR}/kernel/lsmod.out 2>&1 | |
if [ -x $KSYMS ]; then | |
$KSYMS > ${LOGDIR}/kernel/ksyms.out 2>&1 | |
fi | |
$CP -p /lib/modules/$($UNAME -r)/modules.dep ${LOGDIR}/kernel/modules.dep | |
$MODPROBE -n -l -v > ${LOGDIR}/kernel/modprobe_-n-l-v.out 2>&1 | |
$DEPMOD -av > ${LOGDIR}/kernel/depmod_-av.out 2>&1 | |
$CAT /proc/modules > ${LOGDIR}/kernel/modules.out 2>&1 | |
############################################################################## | |
# Just incase we have a debian system | |
############################################################################## | |
if [ -f /etc/kernel-pkg.conf ]; then | |
$CP -p /etc/kernel-pkg.conf ${LOGDIR}/etc/kernel-pkg.conf | |
fi | |
if [ -f /etc/kernel-img.conf ]; then | |
$CP -p /etc/kernel-img.conf ${LOGDIR}/etc/kernel-img.conf | |
fi | |
############################################################################## | |
# Get the kernel configuration details from a 2.6 kernel | |
############################################################################## | |
if [ -f /proc/config.gz ]; then | |
gunzip -c /proc/config.gz > ${LOGDIR}/kernel/config | |
fi | |
############################################################################## | |
# Hot Plug Section | |
############################################################################## | |
Echo "[*] Hot Plug Section" | |
if [ -d /etc/hotplug ]; then | |
if [ ! -d ${LOGDIR}/etc/hotplug ]; then | |
$MKDIR -p ${LOGDIR}/etc/hotplug | |
fi | |
cd /etc/hotplug | |
$CP -Rp * ${LOGDIR}/etc/hotplug/ | |
fi | |
############################################################################## | |
# Disk Section | |
############################################################################## | |
Echo "[*] Disk Section" | |
# Check to see what is mounted | |
$DF -k > ${LOGDIR}/disks/df_-k.out 2>&1 | |
$DF -h > ${LOGDIR}/disks/df_-h.out 2>&1 | |
$DF -ki > ${LOGDIR}/disks/df_-ki.out 2>&1 | |
$DF -aki > ${LOGDIR}/disks/df_-aki.out 2>&1 | |
$DF -akih > ${LOGDIR}/disks/df_-akih.out 2>&1 | |
if [ -x $SWAPON ]; then | |
$SWAPON -s > ${LOGDIR}/disks/swapon_-s.out 2>&1 | |
fi | |
$MOUNT > ${LOGDIR}/disks/mount.out 2>&1 | |
$MOUNT -l > ${LOGDIR}/disks/mount_-l.out 2>&1 | |
$CAT /proc/mounts > ${LOGDIR}/disks/mounts.out 2>&1 | |
# fstab Information | |
$CP -p /etc/fstab ${LOGDIR}/disks/fstab 2>&1 | |
# Display any quotas that my have been set | |
$REPQUOTA -av > ${LOGDIR}/disks/repquota_-av 2>&1 | |
############################################################################## | |
# Disk Format Information | |
############################################################################## | |
DISKLIST=$($FDISK -l 2>/dev/null | grep "^/dev" | sed 's/[0-9]//g' | awk '{ print $1 }' | sort -u) | |
if [ -x $FDISK ]; then | |
$FDISK -l > ${LOGDIR}/disks/fdisk_-l.out 2>&1 | |
fi | |
if [ -x $SFDISK ]; then | |
$SFDISK -d > ${LOGDIR}/disks/sfdisk_-d.out 2>&1 | |
$SFDISK -l > ${LOGDIR}/disks/sfdisk_-l.out 2>&1 | |
$SFDISK -s > ${LOGDIR}/disks/sfdisk_-s.out 2>&1 | |
fi | |
if [ -x $BLKID ]; then | |
$BLKID > ${LOGDIR}/disks/blkid.out 2>&1 | |
fi | |
for DISK in $DISKLIST | |
do | |
NEWDISK=$(/bin/echo $DISK | sed s'/\/dev\///g' ) | |
if [ -x $HDPARM ]; then $HDPARM -vIi $DISK > ${LOGDIR}/disks/hdparm_-vIi_${NEWDISK}.out 2>&1; fi | |
if [ -x $SFDISK ]; then $SFDISK -l $DISK > ${LOGDIR}/disks/sfdisk_-l_-${NEWDISK}.out 2>&1; fi | |
if [ -x $FDISK ]; then $FDISK -l $DISK > ${LOGDIR}/disks/fdisk_-l_-${NEWDISK}.out 2>&1; fi | |
done | |
if [ -x "$DUMPE2FS" ]; then | |
PARTS=$($FDISK -l 2>/dev/null | grep "^/dev" | awk '{ print $1 }') | |
for parts in $PARTS; do | |
name=$(/bin/echo $parts | sed 's/\//_/g') | |
$DUMPE2FS $parts > ${LOGDIR}/disks/dumpe2fs${name}.out 2>&1 | |
done | |
fi | |
############################################################################## | |
# Collect Detailed SCSI information about the disks | |
############################################################################## | |
if [ -x "$SCSI_ID" ]; then | |
for i in $($LS sd[a-z] 2>/dev/null) | |
do | |
if [ -b /dev/${i} ] ; then | |
disk_name=$(/bin/echo /dev/${i} | sed 's/\//_/g') | |
$SCSI_ID -g -p 0x80 -d /dev/${i} -s /block/${i} \ | |
> ${LOGDIR}/disks/scsi_id_-g_-p_0x80_${disk_name}.out 2>&1 | |
$SCSI_ID -g -p 0x83 -d /dev/${i} -s /block/${i} \ | |
> ${LOGDIR}/disks/scsi_id_-g_-p_0x83_${disk_name}.out 2>&1 | |
fi | |
done | |
fi | |
if [ -x $SYSTOOL ]; then | |
$SYSTOOL -c scsi_host -v > ${LOGDIR}/disks/systool_-c_scsi_host_-v.out 2>&1 | |
fi | |
############################################################################## | |
# If we are using multi-pathings then print out the | |
# multi-pathing information | |
############################################################################## | |
if [ -x "$MULTIPATH" ]; then | |
$MULTIPATH -ll > ${LOGDIR}/disks/multipath_-ll.out 2>&1 | |
$MULTIPATH -v2 > ${LOGDIR}/disks/multipath_-v2.out 2>&1 | |
fi | |
if [ -x "$DMSETUP" ]; then | |
$DMSETUP ls > ${LOGDIR}/disks/dmsetup_ls.out 2>&1 | |
$DMSETUP ls --tree > ${LOGDIR}/disks/dmsetup_ls--info.out 2>&1 | |
$DMSETUP info > ${LOGDIR}/disks/dmsetup_info.out 2>&1 | |
$DMSETUP info > ${LOGDIR}/disks/dmsetup_info-C.out 2>&1 | |
$DMSETUP deps > ${LOGDIR}/disks/dmsetup_deps.out 2>&1 | |
$DMSETUP targets > ${LOGDIR}/disks/dmsetup_targets.out 2>&1 | |
fi | |
# Check to see what iscsi devices have | |
if [ -x "$ISCSIADM" ]; then | |
$ISCSIADM -m session > ${LOGDIR}/disks/iscsiadm_-m_session.out 2>&1 | |
fi | |
# Check to see what emc powerpath devices we have | |
if [ -x "$POWERMT" ]; then | |
mkdir -p ${LOGDIR}/disks/emcpower | |
$POWERMT check_registration >${LOGDIR}/disks/emcpower/powermt_check_registration.out 2>&1 | |
$POWERMT display path >${LOGDIR}/disks/emcpower/powermt_display_path.out 2>&1 | |
$POWERMT display ports >${LOGDIR}/disks/emcpower/powermt_display_ports.out 2>&1 | |
$POWERMT display paths class=all >${LOGDIR}/disks/emcpower/powermt_display_paths_class=all.out 2>&1 | |
$POWERMT display ports dev=all >${LOGDIR}/disks/emcpower/powermt_display_ports_dev=all.out 2>&1 | |
$POWERMT display dev=all >${LOGDIR}/disks/emcpower/powermt_display_dev=all.out 2>&1 | |
# Get the partition details for the EMC devices | |
for emcdevice in $(ls /dev/emcpower*) | |
do | |
emc_disk_name=$(/bin/echo ${emcdevice} | sed 's/\//_/g') | |
$FDISK -l $emcdevice > ${LOGDIR}/disks/emcpower/fdisk_-l_${emc_disk_name}.out 2>&1 | |
done | |
fi | |
############################################################################## | |
# Veritas Volume Manager / Symantec Veritas Storage Foundation Information | |
############################################################################## | |
# | |
# Changes - "Vincent S. Cojot" - 04-11-2008 | |
# added licence checks | |
# VxVM/VxFS Configuration Backups | |
# Some minor bug fixes | |
# | |
############################################################################## | |
if [ -d /etc/vx/licenses/lic ]; then | |
Echo "[*] Veritas Volume Manager / Symantec Veritas Storage Foundation Section" | |
Echo "[*] VxVM/VxFS/VCS/VVR licensing Section" | |
if [ ! -d ${LOGDIR}/etc/vx/licenses/lic ]; then | |
$MKDIR -p ${LOGDIR}/etc/vx/licenses/lic | |
fi | |
$CP -Rp /etc/vx/licenses/lic ${LOGDIR}/etc/vx/licenses/ | |
$VXLICREP -e > ${LOGDIR}/system/vxlicrep_-e.out 2>&1 | |
fi | |
if [ -d /etc/vx/cbr/bk ]; then | |
Echo "[*] VxVM/VxFS Configuration Backups" | |
if [ ! -d ${LOGDIR}/etc/vx/cbr/bk ]; then | |
$MKDIR -p ${LOGDIR}/etc/vx/cbr/bk | |
fi | |
$CP -Rp /etc/vx/cbr/bk ${LOGDIR}/etc/vx/cbr/ | |
fi | |
if [ -d /dev/vx ]; then | |
Echo "[*] VxVM live configuration" | |
if [ ! -d ${LOGDIR}/disks/vxvm ]; then | |
$MKDIR -p ${LOGDIR}/disks/vxvm | |
$MKDIR -p ${LOGDIR}/disks/vxvm/logs | |
$MKDIR -p ${LOGDIR}/disks/vxvm/disk_groups | |
fi | |
$LS -laR /dev/vx > ${LOGDIR}/disks/vxvm/ls-lR_dev_vx.out 2>&1 | |
if [ -x $VXDISK ]; then | |
$VXDISK list > ${LOGDIR}/disks/vxvm/vxdisk_list.out 2>&1 | |
$VXDISK -o alldgs list > ${LOGDIR}/disks/vxvm/vxdisk_-o_alldgs_list.out 2>&1 | |
$VXPRINT -Ath > ${LOGDIR}/disks/vxvm/vxprint_-Ath.out 2>&1 | |
$VXPRINT -h > ${LOGDIR}/disks/vxvm/vxprint_-h.out 2>&1 | |
$VXPRINT -hr > ${LOGDIR}/disks/vxvm/vxprint_-hr.out 2>&1 | |
$VXPRINT -th > ${LOGDIR}/disks/vxvm/vxprint_-th.out 2>&1 | |
$VXPRINT -thrL > ${LOGDIR}/disks/vxvm/vxprint_-thrL.out 2>&1 | |
fi | |
if [ -x $VXDG ]; then | |
$VXDG -q list > ${LOGDIR}/disks/vxvm/vxdg_-q_-list.out 2>&1 | |
fi | |
#------------------------------------------------------------------------ | |
# Collect individual volume information | |
#------------------------------------------------------------------------ | |
for i in $($VXDG -q list|awk '{print $1}') | |
do | |
$VXDG list $i > ${LOGDIR}/disks/vxvm/disk_groups/vxdg_list_${i}.out | |
$VXDG -g $i free > ${LOGDIR}/disks/vxvm/disk_groups/vxdg_-g_free_${i}.out | |
$VXPRINT -vng $i > ${LOGDIR}/disks/vxvm/disk_groups/vxprint_-vng_${i}.out | |
VOL=$(cat ${LOGDIR}/disks/vxvm/disk_groups/vxprint_-vng_${i}.out) | |
$VXPRINT -hmQqg $i $VOL \ | |
> ${LOGDIR}/disks/vxvm/disk_groups/vxprint_-hmQqg_4vxmk=${i}.out 2>&1 | |
$VXPRINT -hmQqg $i \ | |
> ${LOGDIR}/disks/vxvm/disk_groups/vxprint_-hmQqg=${i}.out 2>&1 | |
done | |
fi | |
############################################################################## | |
# Get the filesystems Characteristics | |
############################################################################## | |
for i in $($DF -kl | grep ^/dev | awk '{ print $1 }') | |
do | |
if [ -x $TUNE2FS ]; then | |
name=$(/bin/echo $i | sed 's/\//_/g') | |
$TUNE2FS -l $i > ${LOGDIR}/disks/tunefs_-l_${name}.out 2>&1 | |
fi | |
done | |
############################################################################## | |
# NFS Information | |
############################################################################## | |
# Copy NFS config files around | |
if [ -f /etc/auto.master ]; then | |
$CP -p /etc/auto* ${LOGDIR}/etc | |
fi | |
# lets see what we have really exported | |
if [ -x $EXPORTFS ]; then | |
$EXPORTFS -v > ${LOGDIR}/disks/exportfs_-v.out 2>&1 | |
fi | |
# This is what we have configured to be exported | |
if [ -f /etc/exports ]; then | |
$CP -p /etc/exports ${LOGDIR}/etc/exports | |
fi | |
if [ -x "$NFSSTAT" ]; then | |
$NFSSTAT -a > ${LOGDIR}/disks/nfsstat_-a.out 2>&1 | |
fi | |
############################################################################## | |
# Raid Information | |
############################################################################## | |
if [ -f /etc/raidtab ]; then | |
$CP -p /etc/raidtab ${LOGDIR}/etc/raidtab | |
fi | |
$MKDIR ${LOGDIR}/disks/raid | |
if [ -x "$LSRAID" ]; then | |
for i in $( $LS /dev/md[0-9]* 2>/dev/null ) | |
do | |
name=$(/bin/echo $i | sed 's/\//_/g') | |
$LSRAID -a $i > ${LOGDIR}/disks/raid/lsraid_-a_${name}.out > /dev/null 2>&1 | |
done | |
fi | |
if [ -x "$MDADM" ]; then | |
for i in $( $LS /dev/md[0-9]* 2>/dev/null ) | |
do | |
name=$( echo $i | sed 's/\//_/g' ) | |
$MDADM --detail /dev/$i > ${LOGDIR}/disks/raid/mdadm_--detail_${name}.out > /dev/null 2>&1 | |
if [ ! -s ${LOGDIR}/disks/raid/mdadm--detail_${name}.out ]; then | |
$RM -f ${LOGDIR}/disks/raid/mdadm--detail_${name}.out | |
fi | |
done | |
fi | |
############################################################################## | |
# LVM Information | |
############################################################################## | |
LVMDIR=${LOGDIR}/disks/lvm | |
$MKDIR -p ${LVMDIR} | |
if [ -x "$LVDISPLAY" ]; then | |
$LVDISPLAY -vv > ${LVMDIR}/lvdisplay_-vv.out 2>&1 | |
$VGDISPLAY -vv > ${LVMDIR}/vgdisplay_-vv.out 2>&1 | |
$VGSCAN -vv > ${LVMDIR}/vgscan_-vv.out 2>&1 | |
$LVMDISKSCAN -v > ${LVMDIR}/lvmdiskscan_-v.out 2>&1 | |
$PVSCAN -v > ${LVMDIR}/pvscan_-v.out 2>&1 | |
$PVDISPLAY -v > ${LVMDIR}/pvdisplay_-v.out 2>&1 | |
$VGS -v > ${LVMDIR}/vgs-v.out 2>&1 | |
$PVSCAN -v > ${LVMDIR}/pvscan-v.out 2>&1 | |
fi | |
if [ -x "$LVM" ]; then | |
$LVM dumpconfig > ${LVMDIR}/lvm_dumpconfig.out 2>&1 | |
$LVM lvs > ${LVMDIR}/lvm_lvs.out 2>&1 | |
# Map every DM device to a disk | |
$LVDISPLAY | $AWK '/LV Name/{n=$3} /Block device/{d=$3; sub(".*:","dm-",d); print d,n;}' > ${LVMDIR}/devices.out 2>&1 | |
fi | |
############################################################################## | |
# DM Information | |
############################################################################## | |
# Work out which dm device is being used by each filesystem | |
grep dm-[0-9] /proc/diskstats | awk '{print $1, $2, $3}' | while read line | |
do | |
Major=$(echo $line | awk '{print $1}') | |
Minor=$(echo $line | awk '{print $2}') | |
Device=$(echo $line | awk '{print $3}') | |
List=$(ls -la /dev/mapper | grep "${Major}, ${Minor}" | awk '{print $(NF)}') | |
echo "$Device = $List " >> ${LOGDIR}/disks/dm-info.out | |
done | |
############################################################################## | |
# Software Section | |
############################################################################## | |
Echo "[*] Software Section" | |
$MKDIR -p ${LOGDIR}/software/rpm-packages | |
# | |
# Systemd | |
# | |
if [ -x "$SYSTEMCTL" ]; then | |
$MKDIR ${LOGDIR}/software/systemd | |
# systemd checks | |
$SYSTEMD --dump-configuration-items > ${LOGDIR}/software/systemd/systemd_--dump-configuration-items.out 2>&1 | |
$SYSTEMD --test > ${LOGDIR}/software/systemd/systemd_--test.out 2>&1 | |
# systemd-cgls tree | |
if [ -x "$SYSTEMDCGLS" ]; then | |
$SYSTEMDCGLS > ${LOGDIR}/software/systemd/systemd-cgls.out 2>&1 | |
fi | |
if [ -x "$SYSTEMDLOGINCTL" ]; then | |
$SYSTEMDLOGINCTL --all > ${LOGDIR}/software/systemd/systemd-loginctl_--all.out 2>&1 | |
$SYSTEMDLOGINCTL show-seat > ${LOGDIR}/software/systemd/systemd-loginctl_show-seat.out 2>&1 | |
$SYSTEMDLOGINCTL show-user > ${LOGDIR}/software/systemd/systemd-loginctl_show_user.out 2>&1 | |
fi | |
# Now systemctl checks | |
$SYSTEMCTL --version > ${LOGDIR}/software/systemd/systemctl_--version.out 2>&1 | |
$SYSTEMCTL > ${LOGDIR}/software/systemd/systemctl.out 2>&1 | |
$SYSTEMCTL --all > ${LOGDIR}/software/systemd/systemctl_--all.out 2>&1 | |
$SYSTEMCTL list-unit-files > ${LOGDIR}/software/systemd/systemctl_list-unit-files.out 2>&1 | |
$SYSTEMCTL list-jobs > ${LOGDIR}/software/systemd/systemctl_list-jobs.out 2>&1 | |
$SYSTEMCTL dump > ${LOGDIR}/software/systemd/systemctl_dump.out 2>&1 | |
$SYSTEMCTL show-environment > ${LOGDIR}/software/systemd/systemctl_show-environment.out 2>&1 | |
if [ -d ${LOGDIR}/etc/systemd ]; then | |
$LN -s ${LOGDIR}/etc/systemd ${LOGDIR}/software/systemd/etc-systemd 2>&1 | |
fi | |
fi | |
if [ -x "$RPM" ]; then | |
if [ -x "$CHKCONFIG" ]; then | |
$CHKCONFIG --list > ${LOGDIR}/software/chkconfig--list.out 2>&1 | |
fi | |
# Short Description of all packages installed | |
echo "Package_Name Version Size Description" > ${LOGDIR}/software/rpm-qa--queryformat.out | |
echo "===================================================================================" >> ${LOGDIR}/software/rpm-qa--queryformat.out | |
$RPM -qa --queryformat '%-25{NAME} %-16{VERSION} %-10{RELEASE} %-10{DISTRIBUTION} %-10{SIZE} %-10{INSTALLTIME:date} %{SUMMARY}\n' | sort >> ${LOGDIR}/software/rpm-qa--queryformat.out 2>&1 | |
# Long Description of all packages installed | |
$RPM -qa > ${LOGDIR}/software/rpm_-qa 2>&1 | |
$CAT ${LOGDIR}/software/rpm_-qa | while read line | |
do | |
$RPM -qi $line > ${LOGDIR}/software/rpm-packages/${line}.out 2>&1 | |
if [ $? -ne 0 ]; then | |
echo "ERROR: ${line} problem" | |
fi | |
done | |
# print a list os installed packages sorted by install time: | |
$RPM -qa -last | tac > ${LOGDIR}/software/rpm-packages/rpm_-qa_-last.out | |
############################################################# | |
# If you enable verification then this then it's going to | |
# take a some time to complete........ | |
############################################################# | |
if [ ${FULLSOFT} -gt 0 ]; then | |
$RPM -Va > ${LOGDIR}/software/rpm-Va.out 2>&1 | |
fi | |
fi | |
if [ -f /usr/lib/rpm/rpmrc ]; then | |
$CP -p /usr/lib/rpm/rpmrc ${LOGDIR}/software/rpmrc | |
fi | |
# Make a copy of the yum config files so that we can compare them | |
YUMDIR=${LOGDIR}/software/yum | |
if [ -d /etc/yum.repos.d ]; then | |
$MKDIR -p $YUMDIR/yum.repos.d | |
$CP /etc/yum.repos.d/* $YUMDIR/yum.repos.d/ | |
fi | |
if [ -x "$YUM" ]; then | |
$YUM list installed > ${YUMDIR}/yum_list_installed.out 2>&1 | |
$YUM info installed > ${YUMDIR}/yum_info_installed.out 2>&1 | |
$YUM repolist all > ${YUMDIR}/yum_repolist_all.out 2>&1 | |
$YUM repolist enabled > ${YUMDIR}/yum_repolist_enabled.out 2>&1 | |
$YUM repolist disabled > ${YUMDIR}/yum_repolist_disabled.out 2>&1 | |
$YUM -v repolist all > ${YUMDIR}/yum_-v_repolist_all.out 2>&1 | |
$YUM -v repolist enabled > ${YUMDIR}/yum_-v_repolist_enabled.out 2>&1 | |
$YUM -v repolist disabled > ${YUMDIR}/yum_-v_repolist_disabled.out 2>&1 | |
fi | |
############################################################################## | |
# Some Debian specific info here for packages | |
############################################################################## | |
if [ -f /var/lib/dpkg/available ]; then | |
$MKDIR -p ${LOGDIR}/var/lib/dpkg | |
if [ -d /etc/apt ]; then | |
$MKDIR -p ${LOGDIR}/etc/apt | |
fi | |
if [ -f /etc/apt/sources.list ]; then | |
$CP -p /etc/apt/sources.list ${LOGDIR}/etc/apt/sources.list | |
fi | |
if [ -f /etc/apt/apt.conf ]; then | |
$CP -p /etc/apt/apt.conf ${LOGDIR}/etc/apt/apt.conf | |
fi | |
if [ -f /etc/apt/apt.conf ]; then | |
$CP -p /etc/apt/apt.conf ${LOGDIR}/etc/apt/apt.conf | |
fi | |
if [ -f /var/lib/dpkg/status ]; then | |
$CP -p /var/lib/dpkg/status ${LOGDIR}/var/lib/dpkg/status | |
fi | |
if [ -x "$DPKG" ]; then | |
$DPKG --list > ${LOGDIR}/software/dpkg_--list.out | |
$DPKG -all > ${LOGDIR}/software/dpkg_-al.out | |
$DPKG --get-selections > ${LOGDIR}/software/dpkg_-get-selections.out | |
fi | |
if [ -x "$DPKG_QUERY" ]; then | |
$DPKG_QUERY -W > ${LOGDIR}/software/dpkg-query_-W.out | |
fi | |
if [ -x /usr/bin/apt-config ]; then | |
/usr/bin/apt-config dump > ${LOGDIR}/software/apt-config_dump.out | |
fi | |
fi | |
############################################################################## | |
# Some SuSE specific info here for packages | |
############################################################################## | |
if [ -x "$ZYPPER" ]; then | |
$ZYPPER repos > ${LOGDIR}/software/zypper_repos 2>&1 | |
$ZYPPER locks > ${LOGDIR}/software/zypper_locks 2>&1 | |
$ZYPPER patches > ${LOGDIR}/software/zypper_patches 2>&1 | |
$ZYPPER packages > ${LOGDIR}/software/zypper_packages 2>&1 | |
$ZYPPER patterns > ${LOGDIR}/software/zypper_patterns 2>&1 | |
$ZYPPER products > ${LOGDIR}/software/zypper_products 2>&1 | |
$ZYPPER services > ${LOGDIR}/software/zypper_services 2>&1 | |
$ZYPPER licenses > ${LOGDIR}/software/zypper_licenses 2>&1 | |
$ZYPPER targetos > ${LOGDIR}/software/zypper_targetos 2>&1 | |
$ZYPPER list-updates > ${LOGDIR}/software/zypper_list-updates 2>&1 | |
fi | |
############################################################################## | |
# This Section is for Gentoo - so we can work out what packages are installed | |
# Provided by Adam Bills | |
############################################################################## | |
GENTOPKGS=${LOGDIR}/software/gento_kgs.out | |
if [ -d /var/db/pkg ]; then | |
( find /var/db/pkg -type f -name environment.bz2 | while read x; do bzcat $x | \ | |
awk -F= '{ | |
if ($1 == "CATEGORY"){ | |
printf "%s ", $2; | |
} | |
if ($1 == "PN"){ | |
printf "%s ",$2; | |
} | |
if ($1 == "PV"){ | |
print $2; | |
} | |
}'; done | |
) >> $GENTOPKGS | |
fi | |
# Show the bootup info | |
if [ -x $RC_UPDATE ]; then | |
$RC_UPDATE show >> ${LOGDIR}/software/rc-update_show.out | |
fi | |
############################################################################## | |
# sysconfig Section | |
############################################################################## | |
Echo "[*] Sysconfig Section" | |
if [ -d /etc/sysconfig ]; then | |
if [ ! -d ${LOGDIR}/etc/sysconfig ]; then | |
$MKDIR -p ${LOGDIR}/etc/sysconfig | |
fi | |
$CP -p -R /etc/sysconfig/* ${LOGDIR}/etc/sysconfig | |
fi | |
############################################################################## | |
# RHN Section | |
############################################################################## | |
if [ -d /etc/sysconfig/rhn ]; then | |
Echo "[*] RedHat Network Section" | |
RDIR=${LOGDIR}/rhn | |
$MKDIR -p ${RDIR} | |
if [ -d /etc/rhn ]; then | |
$CP -pR /etc/rhn/ ${LOGDIR}/etc/rhn/ | |
if [ -f /etc/sysconfig/rhn/systemid ]; then | |
if [ -x /usr/bin/xsltproc ]; then | |
/usr/bin/xsltproc $UTILDIR/text.xsl $RDIR/systemid \ | |
> $ROOT/$RHNDIR/systemid 2>&1 | |
fi | |
fi | |
fi | |
fi | |
############################################################################## | |
# Systems Log Section | |
############################################################################## | |
Echo "[*] Systems Log Section" | |
$CP -R -p /var/log/* ${LOGDIR}/logs | |
$DMESG > ${LOGDIR}/logs/dmesg.out | |
$LAST > ${LOGDIR}/logs/lastlog | |
############################################################################## | |
# SELINUX | |
############################################################################## | |
Echo "[*] SElinux Section" | |
SELINUXDIR=${LOGDIR}/selinux | |
$MKDIR -p ${SELINUXDIR} | |
if [ -x $SESTATUS ]; then | |
$SESTATUS > ${SELINUXDIR}/sestatus.out | |
$SESTATUS -bv > ${SELINUXDIR}/sestatus_-bv.out 2>&1 | |
fi | |
if [ -x $SEMANAGE ]; then | |
$SEMANAGE fcontext -l | tee ${SELINUXDIR}/semanage_fcontext_-l.out &> /dev/null | |
$SEMANAGE port -l | tee ${SELINUXDIR}/semanage_port_-l.out &> /dev/null | |
$SEMANAGE login -l | tee ${SELINUXDIR}/semanage_login_-l.out &> /dev/null | |
$SEMANAGE user -l | tee ${SELINUXDIR}/semanage_user_-l.out &> /dev/null | |
$SEMANAGE node -l | tee ${SELINUXDIR}/semanage_node_-l.out &> /dev/null | |
$SEMANAGE interface -l| tee ${SELINUXDIR}/semanage_interface_-l.out &> /dev/null | |
$SEMANAGE boolean -l | tee ${SELINUXDIR}/semanage_boolean_-l.out &> /dev/null | |
fi | |
if [ -x $GETSEBOOL ]; then | |
$GETSEBOOL -a > ${LOGDIR}/selinux/getsebool_-a.out 2>&1 | |
else | |
echo "getsebool not installed" > ${LOGDIR}/selinux/getsebool_-a.out 2>&1 | |
fi | |
############################################################################## | |
# Virtual Servers Information | |
############################################################################## | |
VIRT=${LOGDIR}/virtual | |
#------------------------------------------------------------------------ | |
# Xen | |
#------------------------------------------------------------------------ | |
if [ -d /etc/xen ]; then | |
Echo "[*] Xen Section" | |
$MKDIR -p ${VIRT}/xen | |
XENETC=${LOGDIR}/xen | |
if [ ! -d $XENETC ]; then | |
mkdir -p $XENETC | |
fi | |
$CP -Rp /etc/xen/* ${XENETC}/ | |
$MKDIR -p ${VIRT}/xen | |
if [ -x $XM ]; then | |
$XM list > $VIRT/xen/xm_list.out 2>&1 | |
$XM info > $VIRT/xen/xm_info.out 2>&1 | |
$XM logs > $VIRT/xen/xm_log.out 2>&1 | |
$XM dmesg > $VIRT/xen/xm_dmesg.out 2>&1 | |
$XM vcpu-list > $VIRT/xen/xm_vcpu-list.out 2>&1 | |
for myHost in $($XM list 2>/dev/null | egrep -v "VCPUs |^Domain-0") | |
do | |
$XM network-list $myHost> $VIRT/xen/xm_network-list_${myHost}.out 2>&1 | |
$XM uptime $myHost > $VIRT/xen/xm_uptime_${myHost}.out 2>&1 | |
$VIRSH dominfo $myHost > $VIRT/xen/virsh_dominfo_${myHost}.out 2>&1 | |
done | |
fi | |
fi | |
############################################################################## | |
# VirtLib Information | |
############################################################################## | |
#------------------------------------------------------------------------ | |
# Virtlib | |
#------------------------------------------------------------------------ | |
if [ -x $VIRSH ]; then | |
Echo "[*] LibVirt Section" | |
$MKDIR -p ${VIRT}/libvirt | |
$VIRSH list --all 2>/dev/null | \ | |
grep -v "Id Name" | \ | |
egrep -v "\--|^$" | \ | |
awk '{print $2}' | while read line | |
do | |
$VIRSH dominfo $line >> ${VIRT}/libvirt/virsh_dominfo_${line}.out 2>&1 | |
$VIRSH dumpxml $line >> ${VIRT}/libvirt/virsh_dumpxml_${line}.out 2>&1 | |
done | |
$VIRSH list --all > ${VIRT}/libvirt/virsh_list_--all.out 2>&1 | |
fi | |
############################################################################## | |
# yp services | |
############################################################################## | |
Echo "[*] YP Services Section" | |
YPDIR=${LOGDIR}/yp | |
$MKDIR -p ${YPDIR} | |
if [ -x "$YPWHICH" ]; then | |
$YPWHICH -m > ${YPDIR}/ypwhich-m.out 2>&1 | |
fi | |
if [ -f /etc/domainname ]; then | |
$CP -p /etc/domainname ${LOGDIR}/etc/ | |
$LS -lR /var/yp/$(cat /etc/domainname) > ${YPDIR}/ls_-lR.out 2>&1 | |
fi | |
############################################################################## | |
# Networking Section | |
############################################################################## | |
Echo "[*] Networking Section" | |
for i in $($LS -d /etc/host* ) | |
do | |
filename=$(basename $i) | |
$CP -p $i ${LOGDIR}/etc/${filename} | |
done | |
for i in $( $LS -d /etc/ftp* 2>/dev/null ) | |
do | |
filename=$(basename $i) | |
$CP -p $i ${LOGDIR}/etc/$filename | |
done | |
$CP -p /etc/services ${LOGDIR}/etc/services | |
if [ -f /etc/HOSTNAME ]; then | |
$CP -p /etc/HOSTNAME ${LOGDIR}/etc/HOSTNAME | |
fi | |
if [ -f /etc/hostname ]; then | |
$CP -p /etc/hostname ${LOGDIR}/etc/hostname | |
fi | |
if [ -f /etc/networks ]; then | |
$CP -p /etc/networks ${LOGDIR}/etc/networks | |
fi | |
if [ -f /etc/hosts.allow ]; then | |
$CP -p /etc/hosts.allow ${LOGDIR}/etc/hosts.allow | |
fi | |
if [ -f /etc/hosts.deny ]; then | |
$CP -p /etc/hosts.deny ${LOGDIR}/etc/hosts.deny | |
fi | |
if [ -f /etc/shells ]; then | |
$CP -p /etc/shells ${LOGDIR}/etc/shells | |
fi | |
if [ -f /etc/network/interfaces ]; then | |
if [ ! -d ${LOGDIR}/etc/network/interfaces ]; then | |
$MKDIR -p ${LOGDIR}/etc/network/interfaces | |
fi | |
$CP -p /etc/network/interfaces ${LOGDIR}/etc/network/interfaces | |
fi | |
$MKDIR -p ${LOGDIR}/network | |
$IFCONFIG -a > ${LOGDIR}/network/ifconfig_-a.out 2>&1 | |
$ARP -an > ${LOGDIR}/network/arp_-an.out 2>&1 | |
if [ -f "${LOGDIR}/etc/resolv.conf" ]; then | |
$LN -s ${LOGDIR}/etc/resolv.conf ${LOGDIR}/network/resolv.conf 2>&1 | |
fi | |
$NETSTAT -rn > ${LOGDIR}/network/netstat_-rn.out 2>&1 | |
$NETSTAT -lan > ${LOGDIR}/network/netstat_-lan.out 2>&1 | |
$NETSTAT -lav > ${LOGDIR}/network/netstat_-lav.out 2>&1 | |
$NETSTAT -tulpn > ${LOGDIR}/network/netstat_-tulpn.out 2>&1 | |
$NETSTAT -ape > ${LOGDIR}/network/netstat_-ape.out 2>&1 | |
$NETSTAT -uan > ${LOGDIR}/network/netstat_-uan.out 2>&1 | |
$NETSTAT -s > ${LOGDIR}/network/netstat_-s.out 2>&1 | |
$NETSTAT -in > ${LOGDIR}/network/netstat_-in.out 2>&1 | |
$ROUTE -nv > ${LOGDIR}/network/route_-nv.out 2>&1 | |
if [ -x "$IP" ]; then | |
$IP add > ${LOGDIR}/network/ip_add.out 2>&1 | |
$IP route> ${LOGDIR}/network/ip_route.out 2>&1 | |
$IP link > ${LOGDIR}/network/ip_link.out 2>&1 | |
$IP rule > ${LOGDIR}/network/ip_rule.out 2>&1 | |
fi | |
if [ -x "$IWCONFIG" ]; then | |
$IWCONFIG > ${LOGDIR}/network/iwconfig.out 2>&1 | |
fi | |
if [ -x "${MIITOOL}" ]; then | |
${MIITOOL} > ${LOGDIR}/network/mii-tool.out 2>&1 | |
fi | |
# Collect bridging information | |
if [ -x "${BRCTL}" ]; then | |
$BRCTL show > ${LOGDIR}/network/brctl_show.out 2>&1 | |
for myBridge in $($BRCTL show | grep -v "STP enabled" | grep ^[a-zA-Z] | awk '{ print $1}') | |
do | |
$BRCTL showmacs $myBridge > ${LOGDIR}/network/btctl_showmacs_${myBridge}.out 2>&1 | |
$BRCTL showstp $myBridge > ${LOGDIR}/network/btctl_showstp_${myBridge}.out 2>&1 | |
done | |
fi | |
############################################################################## | |
# Get the iptable information | |
############################################################################## | |
if [ -x "$IPTABLES" ]; then | |
$IPTABLES -L > ${LOGDIR}/network/iptables-L.out | |
$IPTABLES -t filter -nvL > ${LOGDIR}/network/iptables-t_filter-nvL.out | |
$IPTABLES -t mangle -nvL > ${LOGDIR}/network/iptables-t_mangle-nvL.out | |
$IPTABLES -t nat -nvL > ${LOGDIR}/network/iptables_-t_nat_-nvL.out | |
else | |
echo "no iptables in kernel" > ${LOGDIR}/network/iptables-NO-IP-TABLES | |
fi | |
############################################################################## | |
# List the ipchains rules | |
############################################################################## | |
if [ -x "$IPCHAINS" ]; then | |
$IPCHAINS -L -n > ${LOGDIR}/network/ipchains_-L_-n.out | |
fi | |
############################################################################## | |
# Lets now check the network cards speeds | |
############################################################################## | |
if [ -x "$ETHTOOL" ]; then | |
for version in 4 6 | |
do | |
INTERFACES=$( cat /proc/net/dev | grep "[0-9]:" | awk -F: '{print $1 }' ) | |
for i in $INTERFACES | |
do | |
$ETHTOOL $i > ${LOGDIR}/network/ethtool_ipv${version}_${i}.out 2>&1 | |
$ETHTOOL -i $i >> ${LOGDIR}/network/ethtool_ipv${version}_-i_${i}.out 2>&1 | |
$ETHTOOL -S $i >> ${LOGDIR}/network/ethtool_ipv${version}_-S_${i}.out 2>&1 | |
done | |
done | |
fi | |
############################################################################## | |
# xinetd Section | |
############################################################################## | |
Echo "[*] xinetd Section" | |
if [ -d /etc/xinet.d ]; then | |
XINETD=${LOGDIR}/etc/xinet.d | |
$MKDIR -p ${XINETD} | |
for i in $($LS -d /etc/xinetd.d/* ) | |
do | |
filename=$(basename $i) | |
$CP -p $i ${XINETD}/$filename | |
done | |
fi | |
if [ -f /etc/xinetd.log ]; then | |
$CP -p /etc/xinetd.log ${LOGDIR}/etc/xinetd.log | |
fi | |
############################################################################## | |
# DNS Section | |
############################################################################## | |
Echo "[*] DNS Section" | |
if [ -f /etc/named.boot ]; then | |
$CP -p /etc/named.boot ${LOGDIR}/etc/named.boot | |
fi | |
DNSDIR="" | |
if [ "${DNSDIR}" != "" ]; then | |
if [ ! -d ${LOGDIR}${DNSDIR} ]; then | |
$MKDIR -p ${LOGDIR}${DNSDIR} | |
fi | |
cd ${DNSDIR} | |
$TAR cf - . 2>/dev/null | ( cd ${LOGDIR}${DNSDIR} ; tar xpf - ) > /dev/null 2>&1 | |
fi | |
############################################################################## | |
# Cluster Section | |
############################################################################## | |
CLUSTERDIR=${LOGDIR}/clusters | |
Echo "[*] Cluster Section" | |
#-------------------------------------------------------------------- | |
# Oracles OCFS2 cluster filesystems | |
#-------------------------------------------------------------------- | |
if [ -f /etc/ocfs2/cluster.conf ]; then | |
if [ ! -d ${LOGDIR}/etc/ocfs2 ]; then | |
$MKDIR -p ${LOGDIR}/etc/ocfs2 | |
fi | |
$CP -p /etc/ocfs2/cluster.conf ${LOGDIR}/etc/ocfs2/cluster.conf | |
$MKDIR -p ${CLUSTERDIR}/ocfs2 | |
$CP -p /etc/ocfs2/cluster.conf ${CLUSTERDIR}/ocfs2/cluster.conf | |
fi | |
#-------------------------------------------------------------------- | |
# Redhat Cluster | |
#-------------------------------------------------------------------- | |
if [ -x $CLUSTAT ]; then | |
Echo "[*] Veritas Cluster Section" | |
MyClusterDir=${CLUSTERDIR}/redhat | |
mkdir -p ${CLUSTERDIR}/redhat | |
$CLUSTAT > $MyClusterDir/clustat.out 2>&1 | |
$CLUSTAT -f > $MyClusterDir/clustat_-f.out 2>&1 | |
$CLUSTAT -l > $MyClusterDir/clustat_-l.out 2>&1 | |
$CLUSTAT -I > $MyClusterDir/clustat_-I.out 2>&1 | |
$CLUSTAT -v > $MyClusterDir/clustat_-v.out 2>&1 | |
$CLUSTAT -x > $MyClusterDir/clustat_-x.out 2>&1 | |
$CLUSVCADM -v > $MyClusterDir/clusvcadm_-x.out 2>&1 | |
$CLUSVCADM -S > $MyClusterDir/clusvcadm_-S.out 2>&1 | |
fi | |
# List out Quorum devices | |
if [ -x $MKQDISK ] ; then | |
$MKQDISK -L >> $MyClusterDir/mkqdisk_-L.out 2>&1 | |
fi | |
# Copy the cluster config files over | |
if [ -f /etc/cluster.xml ]; then | |
$CP -p /etc/cluster.xml ${LOGDIR}/etc/cluster.xml | |
$CP -p /etc/cluster.xml $MyClusterDir/cluster.xml | |
fi | |
if [ -d /etc/cluster ]; then | |
$CP -Rp /etc/cluster/* ${LOGDIR}/etc/cluster/ | |
$CP -p /etc/cluster/* $MyClusterDir/ | |
fi | |
#-------------------------------------------------------------------- | |
# Veritas Cluster | |
#-------------------------------------------------------------------- | |
if [ -f /etc/VRTSvcs/conf/config/main.cf ]; then | |
Echo "[*] Veritas Cluster Section" | |
VCSDIR=${CLUSTERDIR}/veritas | |
if [ ! -d $VCSDIR ]; then | |
$MKDIR -p ${VCSDIR} | |
fi | |
$MKDIR -p ${LOGDIR}/etc/VRTSvcs/conf/config | |
$CP -p /etc/VRTSvcs/conf/config/* ${LOGDIR}/etc/VRTSvcs/conf/config | |
if [ -d /var/VRTSvcs/log ]; then | |
$MKDIR -p ${LOGDIR}/var/VRTSvcs/log | |
$CP -p /var/VRTSvcs/log/* ${LOGDIR}/var/VRTSvcs/log | |
fi | |
$HASTATUS -sum> ${VCSDIR}/hastatus_-sum.out 2>&1 | |
$HARES -list > ${VCSDIR}/hares_-list.out 2>&1 | |
$HAGRP -list > ${VCSDIR}/hagrp_-list.out 2>&1 | |
$HATYPE -list > ${VCSDIR}/hatype_-list.out 2>&1 | |
$HAUSER -list > ${VCSDIR}/hauser_-list.out 2>&1 | |
$LLTSTAT -vvn > ${VCSDIR}/lltstat_-vvn.out 2>&1 | |
$GABCONFIG -a > ${VCSDIR}/gabconfig_-a.out 2>&1 | |
$HACF -verify /etc/VRTSvcs/conf/config/main.cf > ${VCSDIR}/hacf-verify.out 2>&1 | |
$CP -p /etc/llthosts ${LOGDIR}/etc | |
$CP -p /etc/llttab ${LOGDIR}/etc | |
$CP -p /etc/gabtab ${LOGDIR}/etc | |
fi | |
#-------------------------------------------------------------------- | |
# CRM/PaceMaker Cluster | |
#-------------------------------------------------------------------- | |
Echo "[*] CRM Cluster Section" | |
CRMDIR=${CLUSTERDIR}/crm | |
if [ -x $CRM_MON ]; then | |
$MKDIR -p ${CRMDIR} | |
$CRM_MON --version > ${CRMDIR}/crm_mon_--version.out | |
if [ -x $CRM ]; then | |
$CRM status > ${CRMDIR}/crm_status.out | |
$CRM configure show > ${CRMDIR}/crm_configure_show.out | |
$CRM configure show xml > ${CRMDIR}/crm_configure_show_xml.out | |
$CRM ra classes > ${CRMDIR}/crm_ra_classes.out | |
$CRM ra list ocf heartbeat > ${CRMDIR}/crm_ra_list_ocf_heartbeat.out | |
$CRM ra list ocf pacemaker > ${CRMDIR}/crm_ra_list_ocf_pacemaker.out | |
fi | |
if [ -x $CRM_VERIFY ]; then $CRM_VERIFY -L > ${CRMDIR}/crm_verify_-L.out; fi | |
if [ -x $CIBADMIN ]; then $CIBADMIN -Ql > ${CRMDIR}/cibadmin_-Ql.out; fi | |
fi | |
############################################################################## | |
# Crontab Section | |
############################################################################## | |
Echo "[*] Crontab Section" | |
$MKDIR -p ${LOGDIR}/etc/cron | |
$CP -R -p /etc/cron* ${LOGDIR}/etc | |
if [ -d /var/spool/cron ]; then | |
$MKDIR -p ${LOGDIR}/var/spool/cron | |
cd /var/spool/cron | |
$TAR cf - . | ( cd ${LOGDIR}/var/spool/cron ; tar xpf - ) | |
fi | |
############################################################################## | |
# Printer Section | |
############################################################################## | |
Echo "[*] Printer Sectiona" | |
PRINTDIR=${LOGDIR}/lp | |
$MKDIR -p ${PRINTDIR} | |
$MKDIR -p ${PRINTDIR}/general | |
$MKDIR -p ${LOGDIR}/etc/printcap | |
if [ -x /usr/bin/lpstat ]; then | |
/usr/bin/lpstat -t > ${PRINTDIR}/lpstat_-t.out 2>&1 | |
fi | |
if [ -x /usr/sbin/lpc ]; then | |
/usr/sbin/lpc status > ${PRINTDIR}/lpstat_status.out 2>&1 | |
fi | |
if [ -f /etc/printcap ]; then | |
$CP /etc/printcap ${LOGDIR}/etc/printcap | |
fi | |
if [ -d /etc/cups ]; then | |
$MKDIR -p ${LOGDIR}/etc/cups | |
$CP -p -R /etc/cups/* ${LOGDIR}/etc/cups | |
fi | |
/usr/bin/lpq > ${PRINTDIR}/general/lpq.out 2>&1 | |
if [ -x /usr/bin/lpq.cups ]; then | |
/usr/bin/lpq.cups > ${PRINTDIR}/lpq.cups.out 2>&1 | |
fi | |
############################################################################## | |
# openldap Section | |
############################################################################## | |
Echo "[*] Openldap Section" | |
if [ -d /etc/openldap ]; then | |
$MKDIR -p ${LOGDIR}/etc/openldap | |
$CP -p -R /etc/openldap/* ${LOGDIR}/etc/openldap | |
fi | |
############################################################################## | |
# pam Section | |
############################################################################## | |
Echo "[*] PAM Section" | |
$MKDIR -p ${LOGDIR}/etc/pam | |
$CP -p -R /etc/pam.d/* ${LOGDIR}/etc/pam/ | |
############################################################################## | |
# Sendmail Section | |
############################################################################## | |
Echo "[*] Sendmail Section" | |
$MKDIR -p ${LOGDIR}/etc/mail | |
if [ -f /etc/sendmail.cf ]; then | |
$CP -p /etc/sendmail.cf ${LOGDIR}/etc/sendmail.cf | |
fi | |
if [ -f /etc/sendmail.cw ]; then | |
$CP -p /etc/sendmail.cw ${LOGDIR}/etc/sendmail.cw | |
fi | |
if [ -d /etc/mail ]; then | |
for i in $($LS -d /etc/mail/* | $GREP -v \.db) ; do | |
$CP -R -p $i ${LOGDIR}/etc/mail | |
done | |
fi | |
if [ -f /etc/aliases ]; then | |
$CP -p /etc/aliases ${LOGDIR}/etc/aliases | |
fi | |
if [ -f /etc/mail/aliases ]; then | |
$CP -p /etc/mail/aliases ${LOGDIR}/etc/mail/aliases | |
fi | |
############################################################################## | |
# Postfix Section | |
############################################################################## | |
Echo "[*] Postfix Section" | |
if [ -d /etc/postfix ]; then | |
POSTDIR=${LOGDIR}/etc/postfix | |
$MKDIR -p $POSTDIR | |
$CP -p -R /etc/postfix/* ${POSTDIR} | |
$POSTCONF -v > ${POSTDIR}/postconf_-v.out 2>&1 | |
$POSTCONF -l > ${POSTDIR}/postconf_-l.out 2>&1 | |
fi | |
############################################################################## | |
# Exim Section | |
############################################################################## | |
Echo "[*] Exim Section" | |
if [ -d /etc/exim ]; then | |
EXIMDIR=${LOGDIR}/etc | |
$CP -p -R /etc/exim ${EXIMDIR} | |
fi | |
############################################################################## | |
# Time Section | |
############################################################################## | |
Echo "[*] Time Section" | |
TIMEDIR=${LOGDIR}/etc/time | |
if [ ! -d ${TIMEDIR} ]; then | |
$MKDIR -p ${TIMEDIR} | |
fi | |
$DATE > ${TIMEDIR}/date | |
if [ -f /etc/timezone ]; then | |
$CP -p /etc/timezone ${TIMEDIR}/timezone | |
fi | |
if [ -f /usr/share/zoneinfo ]; then | |
$CP -p /usr/share/zoneinfo ${TIMEDIR}/zoneinfo | |
fi | |
if [ -f /etc/ntp.drift ]; then | |
$CP -p /etc/ntp.drift ${TIMEDIR}/ntp.drift | |
fi | |
if [ -x $HWCLOCK ]; then | |
$HWCLOCK --show > ${TIMEDIR}/hwclock_--show.out | |
fi | |
if [ -x $NTPQ ]; then | |
$NTPQ -p > ${TIMEDIR}/ntpq_-p.out 2>&1 | |
fi | |
if [ -f /etc/ntp/step-tickers ]; then | |
$CP -p /etc/ntp/step-tickers ${LOGDIR}/etc | |
fi | |
if [ -f /etc/ntp/ntpservers ]; then | |
$CP -p /etc/ntp/ntpservers ${LOGDIR}/etc | |
fi | |
############################################################################## | |
# PPP Section | |
############################################################################## | |
Echo "[*] PPP Section" | |
PPPDIR=${LOGDIR}/etc/ppp | |
if [ ! -d ${PPPDIR} ]; then | |
$MKDIR -p ${PPPDIR} | |
$MKDIR -p ${PPPDIR}/peers | |
fi | |
if [ -d /etc/ppp ]; then | |
$CP -R -p /etc/ppp/* ${PPPDIR} 2>&1 | |
fi | |
if [ -d /etc/wvdial ] ; then | |
$CP -p /etc/ppp/options.* ${PPPDIR} > /dev/null 2>&1 | |
$CP -p -R /etc/ppp/peers/* ${PPPDIR}/peers > /dev/null 2>&1 | |
fi | |
############################################################################## | |
# Apache Section | |
############################################################################## | |
Echo "[*] Apache Section" | |
if [ -d /etc/httpd ]; then | |
APACHEDIR=${LOGDIR}/httpd | |
else | |
APACHEDIR=${LOGDIR}/apache | |
fi | |
if [ ! -d $APACHEDIR ]; then | |
$MKDIR -p ${APACHEDIR} | |
fi | |
if [ -x $APACHECTL ]; then | |
$APACHECTL status > ${APACHEDIR}/apachectl_status.out 2>&1 | |
fi | |
if [ -x $APACHE2CTL ]; then | |
$APACHE2CTL status > ${APACHEDIR}/apache2ctl_status.out 2>&1 | |
fi | |
############################################################################## | |
# Samba Section | |
############################################################################## | |
Echo "[*] Samba Section" | |
SAMBADIR=${LOGDIR}/disks/samba | |
if [ ! -d ${SAMBADIR} ]; then | |
$MKDIR -p ${SAMBADIR} | |
fi | |
if [ -x $TESTPARM ]; then | |
echo "y" | $TESTPARM > ${SAMBADIR}/testparm.out 2>&1 | |
fi | |
if [ -x $WBINFO ]; then | |
$WBINFO -g > ${SAMBADIR}/wbinfo_-g.out 2>&1 | |
$WBINFO -u > ${SAMBADIR}/wbinfo_-g.out 2>&1 | |
fi | |
############################################################################## | |
# OpenSSH Section | |
############################################################################## | |
Echo "[*] OpenSSH Section" | |
SSHDIR=${LOGDIR}/etc/ssh | |
$MKDIR -p ${SSHDIR} | |
if [ -f /etc/nologin ]; then | |
$CP -p /etc/nologin ${LOGDIR}/etc/nologin | |
fi | |
if [ -d /etc/ssh/ssh_config ]; then | |
$CP -p /etc/ssh/ssh_config ${SSHDIR}/ssh_config | |
fi | |
if [ -d /etc/ssh/sshd_config ]; then | |
$CP -p /etc/ssh/sshd_config ${SSHDIR}/sshd_config | |
fi | |
############################################################################## | |
# X11 Section | |
############################################################################## | |
Echo "[*] X11 Section" | |
XDIR=${LOGDIR}/X | |
$MKDIR -p $XDIR | |
if [ -d /etc/X11 ]; then | |
$CP -R -p /etc/X11 ${LOGDIR}/etc | |
fi | |
if [ -x $SYSP ]; then | |
$SYSP -c > ${XDIR}/sysp_-c.out | |
$SYSP -s mouse > ${XDIR}/sysp_-s_mouse.out | |
$SYSP -s keyboard > ${XDIR}/sysp_-s_keyboard.out | |
fi | |
if [ -x $_3DDIAG ]; then | |
$_3DDIAG > ${XDIR}/3Ddiag.out | |
fi | |
############################################################################## | |
# This section is for removing any information | |
# about hardcoded passwords inserted in files. | |
############################################################################## | |
if [ -f /etc/wvdial.conf ]; then | |
$CAT /etc/wvdial.conf | sed -e /^Password/d > ${LOGDIR}/etc/wvdial.conf | |
fi | |
############################################################################## | |
# Tar Up Support Directory | GPG support | |
############################################################################## | |
cd ${LOGTOP} | |
$TAR czf ${TARFILE} . > /dev/null 2>&1 | |
if [[ ${GPG} -eq "1" ]]; then | |
#-------------------------------------------------------------------------- | |
# Import GPG public key: (0x57260789) | |
# Facundo M. de la Cruz | |
# [ [email protected] ] | |
#-------------------------------------------------------------------------- | |
echo "[*] Importing GPG public key: $GPG_ID" | |
gpg --import << EOF | |
-----BEGIN PGP PUBLIC KEY BLOCK----- | |
Version: GnuPG v1.4.12 (GNU/Linux) | |
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 | |
6uxX/aGD3tpmfPBsTLDcbYQO7cEa8bPhkfFAB1v5uIJX2QUsUiy+02Ql5mMQi5c9 | |
Sw608O7835K9CNLTcp7s3t3P52Jw0eidc8ZCjPF8PcAakHdbB/LDlAXVHSElY4T3 | |
EAaoyqs1049VPevIfVw4vmzRhSCchR77GwHZmN4p9ETiH98HT34xGsaaZHbj8jGS | |
msgtIevZ4StqGlunn/pM2PJGkjEIU5KIEprumdhDWtjoRmgusERQq8lk5BDOuLIq | |
7dlEm9z3e8fE+aAob5fp/xZpnr3ToAUOR4sMvn5GtQ2IGKzWDT0OOmSKA2Wpc6ft | |
fGPBjsrn9hT5tjjShf/MB+ctO07xLYEBaA+8nwzCPihXZYcy2OhgC7l8CYTkOYMs | |
SeGdLvKaF91ZeJ9VX0pwQxrLNs/eQkPSpVMtb1R8tO5sw83GJo/OWNV/RaLqJHRy | |
RbJGjvzs0Z+SLb14349m36CGEV+DzGAl4aLmDSkHBazRz6DPngEQAAEBAAAAAAAA | |
AAAAAAAA/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQN | |
DAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/ | |
2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy | |
MjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCACJAIQDASIAAhEBAxEB/8QAHwAAAQUB | |
AQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQID | |
AAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0 | |
NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKT | |
lJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl | |
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL | |
/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB | |
CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpj | |
ZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 | |
uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIR | |
AxEAPwD3kzqO9R/alOenFUGuDiq5nBZ+e/8ASlcVy/PfBAMAE+lVGvi3OMCqF3cb | |
SuK4Xxh8TNM8Kt9mffd6gRn7NGQNo7bm7fqfagZ6E93l1wcnOBWRf+KdLsJfKu9Q | |
s4pP7jzqGJ+hNfN3iDx3rniqcm5uPs9oPuW0D7V/Hux+v6VzE0pib5CMemKQ7H1R | |
b+MNM1CUx2tzA5H9yVX/AJE4qK61q3i1C3gYjdNnaQOCQM18sJdTRuHjYq6nIZeC | |
D61al1jU7ySMz3k7kNkZc9aLAfVMd0knKKMeopzTZ7V5p8NPGC6pBNp13L/pcbbk | |
LH/WL7fTFdz+63Sbldzu4yGbsPXigRcMmelRlqjTAHEYjHpx/SgHLt7YH9f60DGc | |
G5YgDIQfjk//AFqeeaanJdvVv5cf40+gBhUUmwU/FGKAIjHRUtFAHW7hjrVfcN8n | |
+9/Snbhgcj8qhBy0n+9/QUEHP+NNdTw9oE+olQ7xriNCfvOTgD86+XrmW81fVpri | |
ZnnupnLu2OpP9K9x+N5kXwvZOpOwXY3D/gLYrz3wdpoS2W5KZklOcn0qZS5Vc2pQ | |
53Yy7fwpqNwisUWMH0GcVYvPCEllbrLcS7mb7oNepWkICruYeuBWd4i05r6GN4V3 | |
FD90dawVRtnXKhFLQ8yOlCJBhQeccjpWdcWwjTf3zxXYXSLtIxtYHJB+lc9fpiIL | |
jBz+dapnM4mPYajcaXfpd2jlJUzg/XrX0b4V1Zda8O2t6xHmyAlx05yc180yrtkN | |
ev8Awelnl0+8Qt+6jcY+Xrn3rUxZ6hUYBQyFgME5H0wKcQ/95f8Avn/69RyJLJGy | |
bkAYYzg0gFiH7lM9dozT6XHFLQA2ilpKBhRRRSA6gD5R0qv0aT/e/oKsDO0dKrc7 | |
5M/3/wCgoIPF/jKdRuZLW2SYm2RWke33AnOQATgcDnGSfWuPsdXurmCLTrGIw3Ko | |
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 | |
h7wgkJmnw8+brqjj864VoOMdksbk2Muyj9csYAQu1qLk5VZdBbOpnKJiuq5pnZ5k | |
bvzyr8h0I7B4N3IItQHYVQnnWOEnXRqT/1shTdNuBlHSVOciBFMmVQRXjCHytEjl | |
hK5uoULUR6shcWfNEAFatTeS7Kx0XFmZf9PWzMgOoQQh1HBpi2WX37GQsDCefULh | |
9L1JcPA113NvVGtZy1VxF0HLRG+VnIhJBBgRAgAJAhsMBQJKvR9gAAoJEGq3ntbI | |
/fnBcksAn3jGUA5rojq5ZokCe4ejThjlePnuAJ9dZzQZLk+5URUjbocwEaAiIKhK | |
5ZkBogQ8cuOQEQQA0BoxjOH5hElnCdu5WsWZPRTOWVmXxv6fTXcUAyOhpOXm5qyT | |
aMTjJjfxTPGkHYh6zXlx/78OUY3kODI5uEiQNKBSHuF+T3HSqb/h8qQaE/8soH/f | |
cvbxARHU+H+bHZ8FGwBI4wlzyBUZMqWC/OFeX+Voc4/awBN8Vr3lg2+d9p8AoP07 | |
vsXcCQr6691CSdIeR1wZZoulA/sGM6QrVNdOaZ6S33lk51bqEK5dpbI9Til/oq+5 | |
JfswuY39MrlbCCQKQgUdom71nodZhy5uvmgSK7ISjSZG7tGsMsu3L/mOciCRZYVK | |
IyhZNOomwFSztV5WypSmT+W7DNsJJ3NY5024FYHCvOQeg5ugiqvfOs4npnBu09kq | |
JoHN/AP8DgkP/q/Dm39IOlJYD4pXYVJ45U26sQZTgvXVS41J2ovKLhEHu+gSaI2T | |
ayKRUbOuDBU6sbb5olDZQwDTNa7hBKD0Wh4wHuhHmjuPS4ybx/96xo8+j7gzTRq6 | |
QFYeglwnWvosOzrDka4WoVrM826CYzfQd36Y++aqbjRv8UsfKK+0R0RhbmllbCBF | |
LiBDb2xldHRpIChMaW51eCBVc2VycyBHcm91cCBBcmdlbnRpbmEpIDxkY29sZXR0 | |
aUBsaW51eC5vcmcuYXI+iEYEEBECAAYFAjxzml0ACgkQ8hmHQ8ZCg0J2cgCfXxg+ | |
GsbMtQcTukMtnzM5YurYnSIAniMyLYrEmOvtufUWgsBjadA4H8vUiEYEEBECAAYF | |
Aj/wZ8MACgkQiD52qE/TiofslQCfTwkFelSHBSAurI1SQOILdFunWiMAn3DUBEPL | |
M+oYp2jRhNiWVGN5FH7LiEYEEBECAAYFAkEet/gACgkQSqR3lY/2PH3hmgCfVP48 | |
yh/3gmn2kQJNQEL8bm0yQpYAoIR3dA4iRt4j/1cxZegoj6R5IaxfiEYEEBECAAYF | |
AkfSS10ACgkQ1FBIbNE5MqbjtgCeIwHJrMgDFsDdxGA8gZVb4posGXkAmgIVLpvi | |
mFYdFSE23p7Fcq+WWeNliEYEEBECAAYFAkfSS3IACgkQ1FBIbNE5MqY+BgCgqbty | |
nH+s9Pqw78VLbXo91Avu3DcAoIodE41ZJrussyeeuqMy8HqS3dK7iEYEEBECAAYF | |
AkiwKwIACgkQ4hsJ6YvVNGCPNgCeIA80cPvx8dclGcXoJ7FDPLoAE+MAnjd5AIra | |
99EgqdeaZvdmLTI3JzqiiEYEEBECAAYFAkiwKwcACgkQ4hsJ6YvVNGDvRACg3HxW | |
QnO3QNinSv0ThcwKmp8ATWsAn0GZy1DaCBgPNk/A2vcwqSb4H0QfiEYEEBECAAYF | |
AkqgN9cACgkQEqq9twFVKtWq+ACggR8sGtAN9hOcFu7oPobr9QjgvCcAnjZ12zpQ | |
qsqBb6YcgChalMqTUCm2iEYEEhECAAYFAkF2Bf8ACgkQc/BPFCB+deVmUACgp2Vo | |
7uZS7MlU/q0jKQ8lc2BLdXcAn0AwgO+JdfRd0D/Dh4StncrciWG6iEYEEhECAAYF | |
Akgl2WgACgkQcrnzPTeJt/fvJACgiJN3sUEBC2wQbZ6H3AZlgULcIuYAn2x6NBeQ | |
NgL0vETOkxpYfurfXn5liEYEEhECAAYFAkgl2WsACgkQcrnzPTeJt/e/dwCg4Ir1 | |
RUy5gXKnIMoCHa1Xxco2Ny8AoODIjzeq928/fiLjIll/1gZyDiUhiEYEExECAAYF | |
Aj8KXD0ACgkQUbc2UovMyKZsmACeLmvg9emCp1YGOXm7JX0NrA6VYa8AnR0t5Nv3 | |
pZNMl4Tl7vQNWPi4o0yFiEYEExECAAYFAj8LTJIACgkQAD7wO4rY13MRFgCglyqS | |
oGMLoyY/bn3Tri5ZpmH4EckAn0yL86RftMa8UGDFvKcj2r28wamCiEYEExECAAYF | |
Aj8UcJcACgkQQWTRs4lLtHnQ8ACgtab8n79xUP5jwJGhT/zqDtXFok0An3yTLOvC | |
FmAondMQIsFD6e9V4p/CiEYEExECAAYFAkD0EyMACgkQPMmt0zYG8+aHZACfQra0 | |
dzQ+9JwHGysXN9dV3JaX9PkAn3+73ExnWSSbPBi7iFc5k7Y7nETaiEYEExECAAYF | |
AkEZU2oACgkQbPULDL0CxuAUHwCfbaCRHPPLuuYTNh2dN0sAXF+HgrQAnA6eyCus | |
7ZYT5GUDocnGY82S66q3iEYEExECAAYFAkEzJFwACgkQanEmXsBcBWaSTQCeJls8 | |
xPV9fjwvZi2DBbhWOrTbVQoAnjYTsjFJDKh8+FpAd9D5woHqxScDiEYEExECAAYF | |
AkI8FGMACgkQt9vIjkVDG5PAqACeOt+Cbzt2CQIOwOAbCpiFdhOsqfoAoK4+qvbs | |
P+fmuvWnof+emabZ7DdUiEkEExECAAkFAkEjZWcCBwAACgkQkMwMSvadSDTApACe | |
LRK0S8KtXvCZ0Sb/9tll1BwFL6oAniP8x2muJHWXKrejtTw5t+YC63/qiFcEExEC | |
ABcFAjxy45AFCwcKAwQDFQMCAxYCAQIXgAAKCRArQpTJgpUbNTDJAKCO4iPfRRzO | |
nimVlyInSEDYZ3DeXgCcDZWnaZ7uHgM9ytY9D5+UvRTh926IXwQTEQIAFwUCPHLj | |
kAULBwoDBAMVAwIDFgIBAheAABIJECtClMmClRs1B2VHUEcAAQEwyQCgjuIj30Uc | |
zp4plZciJ0hA2Gdw3l4AnA2Vp2me7h4DPcrWPQ+flL0U4fdutFJEYW5pZWwgRS4g | |
Q29sZXR0aSAoQ2FGZUxVRyAtIENhcGl0YWwgRmVkZXJhbCwgQXJnZW50aW5hKSA8 | |
ZGNvbGV0dGlAY2FmZWx1Zy5vcmcuYXI+iEUEExECAAYFAj8UcKMACgkQQWTRs4lL | |
tHld5wCeI37jPhedC8RQRS6dbbxiPwj0OCIAmM5rB0TClVLh0ff3tZ+VOsiKr8yI | |
RgQQEQIABgUCP/BnwAAKCRCIPnaoT9OKh+t+AKCCGsMpGufDRCAoVnpEwWtkYrmS | |
hQCeKJOUxaC18DgUvA3pFDBoWi3xAWGIRgQQEQIABgUCQR639QAKCRBKpHeVj/Y8 | |
fSNmAJwIfj9xmz5pggPIYsUEhkbZuWFcbwCdGent/BRg+pzyiaZ+h9roplEjTc+I | |
RgQQEQIABgUCR9JLXQAKCRDUUEhs0TkypuO2AJ4jAcmsyAMWwN3EYDyBlVvimiwZ | |
eQCaAhUum+KYVh0VITbensVyr5ZZ42WIRgQQEQIABgUCSLArAgAKCRDiGwnpi9U0 | |
YI82AJ4gDzRw+/Hx1yUZxegnsUM8ugAT4wCeN3kAitr30SCp15pm92YtMjcnOqKI | |
RgQQEQIABgUCSqA3zwAKCRASqr23AVUq1dvPAJ9QKco4TSfirPOjQB1XnifbEoES | |
gQCgiTwqQDs28xFbyrceLvyu6Hi1wpeIRgQSEQIABgUCQXYF+wAKCRBz8E8UIH51 | |
5Y9NAKDQApBJk6NuFWij0YfjhvlvKTnLdwCeLUtxxlottWuTZirUhFyRTPfh6f6I | |
RgQSEQIABgUCSCXZaAAKCRByufM9N4m39+8kAKCIk3exQQELbBBtnofcBmWBQtwi | |
5gCfbHo0F5A2AvS8RM6TGlh+6t9efmWIRgQTEQIABgUCPwpcNwAKCRBRtzZSi8zI | |
pnsxAKCXLNPHto8tH5X6LyTLKDgcrrZwjACfQx38nmhPkSQP4b8oaSlluNgC+4mI | |
RgQTEQIABgUCPwtMRwAKCRAAPvA7itjXczq9AKCj3a7xO6UIT72pz5F+GbonmQqO | |
+wCgmUpXmHhfE20DF8KMXl+v6LD3DSaIRgQTEQIABgUCQPQTIwAKCRA8ya3TNgbz | |
5iHtAJ44p06K1d2aZuJba7GUkLigI1/ycACeLkBOOwCb5/QkshjA3ARvTCvManmI | |
RgQTEQIABgUCQRlTYQAKCRBs9QsMvQLG4JZtAJ0SK/c0FFhrwNzPZT1dqu/nCfVv | |
pQCfc4FaZeg130S8coh/bAoUI1TEPSeIRgQTEQIABgUCQTMkVwAKCRBqcSZewFwF | |
ZoYAAKCNesTZ85/uMmteovJjBO0++URW2QCaA/rR9nCcgxWJZHx8nI+kRdj5IsKI | |
RgQTEQIABgUCQjwUYwAKCRC328iORUMbk+yZAJ9st+Gq7u2cEyWjniGov1xlHMZj | |
6QCfUgNllhPlBb89RyxDGyrSr4g65/2ISQQTEQIACQUCQSNlWwIHAAAKCRCQzAxK | |
9p1INIlHAKCxvgc7wdfof7jnV43oBvYQ+pAj/gCg7ej9GoGk+iWUdsFe4rGMsvNy | |
AGeIVwQTEQIAFwUCPHLpPAULBwoDBAMVAwIDFgIBAheAAAoJECtClMmClRs1UKcA | |
oJoHTe5GCLoj5mmjbvdxft6dWE/wAJ0cuvzWeLl3LqP8LGkncwP9vMrtSIhfBBMR | |
AgAXBQI8cuk8BQsHCgMEAxUDAgMWAgECF4AAEgkQK0KUyYKVGzUHZUdQRwABAVCn | |
AKCaB03uRgi6I+Zpo273cX7enVhP8ACdHLr81ni5dy6j/CxpJ3MD/bzK7Ui5AQ0E | |
PHLjkhAEAKQc2EwKiBmXA+OCZBYfU4MAv09IB89qk5PY02FgqOnmG3cNSrMPa4hO | |
f9ZDBs+yOvnSDG5gQpOzVm+1SBzdn5GlYpfla1hfybOtlK2IUB/SA0RdfN5YdHQg | |
dUy4JxzJr60O3231uhks63WeD/Jr3HWXnb+bb06J1O/oJAGtQvhTAAMFA/9xfotk | |
SOyA/2kZ8HrDLkfND3/J9qzolbX7uuZboTBV5nM2+Wg22m8XdAQrwjnvNXhQKf85 | |
AVZMdjro0MXXYlnGbSoab2y7pBWaKQ0R5b3mJa7ZymSjJaZwRpsBfrpFVu1zsDIq | |
tvxohgVMzOs8BcW5UOyrIxTrBRRATpQ7fiZ0vIhOBBgRAgAGBQI8cuOSABIJECtC | |
lMmClRs1B2VHUEcAAQHabgCgszdd7wm/7VdYo01jwBXA9JfPnMAAoPdvmxT/Hy4M | |
hYwuuxWi/lu/c6OCmQENBEweeQMBCAC7ovBBc8HObAm4gbltXsboP2L506o8SAOR | |
VCieOuB3xLyKwTzLZ2T8N1iHJ+myJ7Z0gNMRT3I+AvDbHTZdO7fcXY6dOaN0SPHS | |
M4ca9HpAVUgTVJj5CEHUgD9o6HDZGmJM0D2XxlqvmDLOX0EklfMJoH0Ly3JasBM4 | |
mcqM1QrVWS+erPqa1zmbS30FWL5Eoi/7qeca6TV9W0nhw0H5uuajjRLFlOIywfQO | |
HZHDWDb+nBMzJabA3MjEopzbd2utxHNbdAj6iDeT1Zq7mJ8TcYiU6vTjED/2g5tG | |
MlRXks8leZr0Nhr0z4q0rjm1PP/xEvTjUNrD95do+qT4V80gZYY5ABEBAAG0Mk1h | |
cnTDrW4gUGVycnVwYXRvIDxtcGVycnVwYXRvQGRjLXNvbHV0aW9ucy5jb20uYXI+ | |
iQE4BBMBAgAiBQJMHnkDAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAH | |
AzfPDJWu26CKB/9R3nH+aZ2hWRzR9PD1xve/KU7tkrxUv64eKpHq2VXTBarjV58e | |
4+9sEUog1OWo8RriX9GKnsuhcdafgDsXMDxP/NBj6GjC6NHG+XmZrn9syczSE1TJ | |
2zwj8i8uGDKXvNEgTWk8ojvP0IvoZCrY6+kHOQSjkxLvrTu1n4z55mi4RC1RlSdm | |
0QntLm6WJtrDwL4hJBXcN9rodD7SwYSaxB7DFtZhCN0IVLNz4Exap0GZW/5jmdl1 | |
wu2QOzFvLxfm2P1hMZHd3JTsN7egpyW8ylxcNVdTUprYHV3seTOJE6ztJZUw7dEY | |
Al00WRo5SxBqQ2uSyz8U7HmhNoODMZ6vlJ+LuQENBEweeQMBCAC8UmF6oY9eBgKv | |
gAGu30yYkTlBU8YAk08WXMnq8T0dxUoQlOUYv0ula/HscOCosZ3964ZRX5jec0LO | |
0F1Kr26woTbHDgGzHisar0lRvclAbXYfijyBVwFt0MPOr6LJTasMJLavpAMOpaHW | |
4rsRCCvI4Sk92Cyec9usZchkSAsEHr7tR2sZmtH++Yxe7XBoqf4rFNdrFNb8oKo3 | |
NzY6awJh+u/UU9IYyz5PK7AeQYOYL3aMgecNWHk6ZldgpErHKfp7KE6pB4/jkO3k | |
aRrmG3RRlkrNPAyuQ4ValXRVnOIPANk+G2/QwhWVHR7ZLe5KC6i8lujxMKpkD3WV | |
knoAkDPLABEBAAGJAR8EGAECAAkFAkweeQMCGwwACgkQBwM3zwyVrtssHQgArq9i | |
Vyj4KwbvB2Xo3t20tM6KaSelHY9AQNnWTovhd5jbs/vK1iYXQvQvL7pZ84jR1kQL | |
voMFjHJp4Woqx9HjsR5CORw0nDkrHzpEj+qEqARybe0FjqhDiFMfvQG2+YiUDK5G | |
31EjMF6g4y0K0HOTFKVZOPppUWMYL+6NgUuSG2msvpxTjAqV0RDrcmmioZv2JtX6 | |
USxS7mCz8aeTDl9Vt5F0Mm3Vc8O07hkLzMiCAKpFIBvwqJERvP0dbilm9e42JBPd | |
642ohADp5oQ56+12WRLwu/1dYK3wT8mqh7nvLYZpLGzq54XlRACkIN0arkxLcVuZ | |
EHvKMZD4F6S7F7vVQw== | |
=kL5L | |
-----END PGP PUBLIC KEY BLOCK----- | |
EOF | |
$GPG_BIN -e -r ${GPG_ID} ${TARFILE} | |
TARFILE="${TARFILE}.gpg" | |
fi | |
if [ -t 0 ]; then | |
$CAT <<- EOF | |
********************************************************************** | |
The Tar file ${TARFILE} | |
has been created for support purposes. | |
You can email the tar file to those providing you | |
with technical support to <$SUPPORT> | |
********************************************************************** | |
EOF | |
fi | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 LINUXexplo.bash </br> | |
Ejecución: # ./LINUXexplo.bash [ parámetros ] (Requiere privilegios de root) </br> | |
El script tardará unos minutos en recolectar la información y creará un log y un .tgz en la ruta:</br> | |
/opt/LINUXexplo/linux/ </br> | |
NOTA: Se debe reemplazar la llave pública GPG por la del administrador o usuario que ejecute el script. | |
</pre> | |
<pre class="brush:plain"> </pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# FlashVideo Downloader | |
# Code By Kypzkore Kodeinfect | |
# http://kode-labs.blogspot.com | |
lsof | grep '/tmp/Flash[^ ]*' | awk '{ print "/proc/" $2 "/fd/" $4 }' | sed 's/[rwu]$//' </pre> | |
<hr/><pre class="brush:bash">chmod +x flashvids.sh</pre> | |
<hr/><pre class="brush:bash">alias flashtmp='sh /home/use/flashvids.sh'</pre> | |
<hr/><pre class="brush:bash">/proc/7254/fd/19</pre> | |
<hr/><pre class="brush:bash">cp /proc/7254/fd/19 /home/user/Videos</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
function message() { | |
case $mensage in | |
game_banner) #tput cup 1 $cols | |
echo | |
tput rev | |
echo "$(tput setaf 4)EL JUEGO DEL AHORCADO EN BASH SCRIPT$(tput sgr0)" | |
echo | |
echo "$(tput setaf 7)$(tput bold)Contiene $(tput setaf 1)$(( $long_palabra-$espacios ))$(tput setaf 7) caracteres sin contar los espacios" | |
echo "$(tput setaf 7)Puedes usar los comodines. Dispones de $(tput setaf 1)$comodines$(tput setaf 7). Para usarlos pulsa $(tput setaf 1)+" | |
[[ $(( 6-intentos )) -lt 2 ]] && vida="vida" || vida="vidas" | |
echo "$(tput setaf 7)Dispones de $(tput setaf 1)$(( 6-intentos )) $vida" | |
#echo "$(tput setaf 7)El nombre de este país es $(tput setaf 1)$palabra"¡ | |
echo | |
echo "$(tput setaf 7)El nombre de este país es: $(tput setaf 1)$word" | |
echo -n "$(tput setaf 7)Vidas: $(tput setaf 1)" | |
for (( i=1; i<=$(( 6-intentos )); i++ )); do echo -n $'\342\231\245'; done; echo | |
echo -n "$(tput setaf 7)Comodines: $(tput setaf 1)" | |
for (( i=1; i<=$comodines; i++ )); do echo -n $'\342\230\245'; done; echo | |
echo "$(tput setaf 7)Caracteres restantes: $(tput setaf 1)$(( ($long_palabra-$espacios)-$aciertos ))" | |
echo "$(tput setaf 7)Puntuación: $(tput setaf 1)$score";; | |
game_over) echo "$(tput setaf 2)Fenomenal, eres un crack";; | |
game_read) read -n1 -p "$(tput setaf 7)Vida $(tput setaf 1)$intentos $(tput setaf 7)de $(tput setaf 1)5$(tput setaf 7). Introduce una letra: $(tput setaf 1)" caracter | |
echo;; | |
salir) echo | |
tput rev | |
echo "$(tput setaf 1)GameOver$(tput sgr0)" | |
echo "$(tput setaf 7)$(tput bold)Tu mejor puntuación es: $(tput setaf 1)$best_score" | |
echo "$(tput setaf 7)Tu puntuación acumulada es: $(tput setaf 1)$acumulado" | |
echo | |
echo "$(tput setaf 7)La solución es: $(tput setaf 1)$palabra" | |
echo "$(tput setaf 7)Que deseas hacer?" | |
read -n1 -p "$(tput setaf 7)Pulsa $(tput setaf 1)Q $(tput setaf 7)para $(tput setaf 1)salir $(tput setaf 7)o $(tput setaf 1)G $(tput setaf 7)para $(tput setaf 1)volver a jugar$(tput setaf 7). Introduce una letra: $(tput setaf 1)" caracter | |
echo "$(tput setaf 7)";; | |
comodines_restantes) echo "$(tput setaf 4)Te dispones a usar un comodín. Suerte, sólo dispones de $(tput setaf 1)$comodines" | |
echo "$(tput setaf 2)Comodín = $(tput setaf 1)$caracter";; | |
comodines_finalizados) echo "$(tput setaf 4)Ups, has gastado todos los comodines";; | |
continuar) read -n1 -p "$(tput setaf 1)Pulsar cualquier tecla para continuar$(tput setaf 7)";; | |
acierto_mal) echo "$(tput setaf 4)Has fallado, ahora tienes un intento menos";; | |
#acierto_letra) echo "$(tput setaf 7)Letra introducida: $(tput setaf 1)$letra";; | |
acierto_bien) echo "$(tput setaf 2)Muy bien, ya casi lo tienes";; | |
acierto_repetido) echo "$(tput setaf 3)Upps, Esa letra ya la has introducido";; | |
esac | |
} | |
function init { | |
#file="diccionario" | |
file="paises" | |
max=$(cat $file | wc -l) | |
num=$(( $RANDOM%$max )) | |
palabra=$(head -$num $file | tail -1) | |
aciertos=0 | |
#diccionario | |
#palabra=$(echo ${palabra%% *,,} | sed 's/á/a/g;s/é/e/g;s/í/i/g;s/ó/o/g;s/ú/u/g') | |
palabra=$(echo ${palabra,,} | sed 's/á/a/g;s/é/e/g;s/í/i/g;s/ó/o/g;s/ú/u/g;s/-/ /g;s/Á/a/g') | |
long_palabra=${#palabra} | |
comodines=$(( long_palabra/4 )) | |
score=$(( (comodines*50)+500 )) | |
#PROVISIONAL | |
########################### | |
#[[ $long_palabra -lt 15 ]] && main; | |
########################### | |
unset array[*] | |
i=0; espacios=0; unset word | |
while [[ $i -le $(( $long_palabra-1 )) ]] | |
do | |
caracter="${palabra:$i:1}" | |
if [[ $caracter = " " ]] | |
then | |
(( espacios++ )) | |
caracter=" " | |
else | |
array=( ${array[*]} $caracter ) | |
caracter="-" | |
fi | |
word="$word $caracter" | |
(( i++ )) | |
done | |
} | |
function comodin { | |
if [[ $comodines -gt 0 ]] | |
then | |
long_array=$(( ${#array[*]}-1 )) | |
index=$(( $RANDOM%${#array[*]} )) | |
caracter=${array[$index]} | |
i=0 | |
while [[ $i -le $long_array ]] | |
do | |
if [[ ${array[$i]} = $caracter ]] | |
then | |
unset array[$i] | |
array2=( ${array2[*]} $caracter ) | |
(( aciertos++ )) | |
score=$(( score+50 )) | |
fi | |
(( i++ )) | |
done | |
array=( ${array[*]} ) | |
array2=( ${array2[*]} ) | |
(( comodines-- )) | |
(( intentos-- )) | |
mensage="comodines_restantes"; message mensage | |
else | |
(( intentos-- )) | |
mensage="comodines_finalizados"; message mensage | |
fi | |
mensage="continuar"; message mensage | |
game | |
} | |
function acierto { | |
unset find | |
long_array=$(( ${#array[*]}-1 )) | |
i=0 | |
while [[ $i -le $long_array ]] | |
do | |
if [[ ${array[$i]} = $caracter ]] | |
then | |
unset array[$i] | |
find="true" | |
array2=( ${array2[*]} $caracter ) | |
(( aciertos++ )) | |
score=$(( score+100 )) | |
fi | |
(( i++ )) | |
done | |
if [[ $find = "true" ]] | |
then | |
mensage="acierto_bien"; message mensage | |
(( intentos-- )) | |
else | |
long_array2=$(( ${#array2[*]}-1 )) | |
i=0 | |
while [[ $i -le $long_array2 ]] | |
do | |
if [[ ${array2[$i]} = $caracter ]] | |
then | |
find="true" | |
fi | |
(( i++ )) | |
done | |
if [[ $find = "true" ]] | |
then | |
mensage="acierto_repetido"; message mensage | |
(( intentos-- )) | |
score=$(( score-10 )) | |
else | |
mensage="acierto_mal"; message mensage | |
score=$(( score-50 )) | |
fi | |
fi | |
array=( ${array[*]} ) | |
array2=( ${array2[*]} ) | |
mensage="continuar"; message mensage | |
game | |
} | |
function game { | |
clear | |
lines=$(( $(tput lines)/10 )) | |
cols=$(( $(tput cols)/10 )) | |
i=0; unset word; | |
while [[ $i -le $(( $long_palabra-1 )) ]] | |
do | |
letra="${palabra:$i:1}" | |
if [[ $letra = " " ]] | |
then | |
letra=" " | |
else | |
unset letra_acertada | |
for x in ${array2[*]} | |
do | |
if [[ $x = $letra ]] | |
then | |
letra_acertada="true" | |
fi | |
done | |
if [[ $letra_acertada != "true" ]] | |
then | |
letra="-" | |
fi | |
fi | |
word="$word $letra" | |
(( i++ )) | |
done | |
(( intentos++ )) | |
mensage="game_banner"; message mensage | |
dibujo | |
if [[ $intentos -gt 5 ]] | |
then | |
[[ $best_score -eq 0 ]] && best_score=0 | |
[[ $acumulado -eq 0 ]] && acumulado=0 | |
salir | |
fi | |
if [[ -z ${array[*]} ]] | |
then | |
[[ $score -gt $best_score ]] && best_score=$score | |
acumulado=$(( acumulado+score )) | |
mensage="game_over"; message mensage | |
salir | |
fi | |
mensage="game_read"; message mensage | |
if [[ $caracter = "+" ]] | |
then | |
comodin | |
fi | |
acierto | |
} | |
function dibujo { | |
case $intentos in | |
1) echo "________________ " | |
echo " | " | |
echo " | " | |
echo " O " | |
echo;; | |
2) echo "________________ " | |
echo " | " | |
echo " | " | |
echo " O " | |
echo " | " | |
echo " | " | |
echo;; | |
3) echo "________________ " | |
echo " | " | |
echo " | " | |
echo " O " | |
echo " \| " | |
echo " | " | |
echo;; | |
4) echo "________________ " | |
echo " | " | |
echo " | " | |
echo " O " | |
echo " \|/" | |
echo " | " | |
echo;; | |
5) echo "________________ " | |
echo " | " | |
echo " | " | |
echo " O " | |
echo " \|/" | |
echo " | " | |
echo " / " | |
echo;; | |
*) echo "________________ " | |
echo " | " | |
echo " | " | |
echo " O " | |
echo " \|/" | |
echo " | " | |
echo " / \\" | |
echo;; | |
esac | |
} | |
function salir { | |
mensage="salir"; message mensage | |
case $caracter in | |
q) clear;exit;; | |
g) unset word; unset intentos; unset comodines; unset aciertos; unset score; unset array[*]; unset array2[*];main;; | |
*) clear; mensage="game_banner"; message mensage; dibujo; salir;; | |
esac | |
clear | |
} | |
function main { | |
init | |
game | |
} | |
main | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 ahorcado.bash </br> | |
Ejecución: ./ahorcado.bash </br> | |
Y a jugar! :D </br> | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
# Add user to Samba | |
USER=${1} | |
GROUP=repositorio | |
if [ -z ${1} ]; then | |
printf "Use: addsmbuser [username]\n" | |
exit 1 | |
fi | |
if [ ! $(grep ${1} /etc/passwd) ]; then | |
/usr/sbin/useradd ${1} -n -s /sbin/nologin -g ${GROUP} | |
else | |
printf "User exist in /etc/passwd\n" | |
fi | |
/usr/sbin/smbpasswd -a -e ${1} | |
exit $? | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 addsmbuser.bash </br> | |
Ejecución: ./addsmbuser.bash [ nombre de usuario ] </br> | |
</pre> | |
<pre class="brush:perl"> | |
#!/usr/bin/perl -w | |
# findshell v1.0 == code taken/modified from traps.darkmindz.com | |
#usage: ./findshell.pl [ sensitivity 1-50 ] [ directory to scan ] | |
use strict; | |
use File::Find; | |
my $sens = shift || 10; | |
my $folder = shift || './'; | |
find(\&backdoor, "$folder"); | |
sub backdoor { | |
if ((/\.(php|txt)/)){ | |
open (my $IN,"<$_") || die "can not open datei $File::Find::name: $!"; | |
my @file = <$IN>; | |
#maybe evil stuffs | |
my $score = grep (/function_exists\(|phpinfo\(|safe_?mode|shell_exec\(|popen\(|passthru\(|system\(|myshellexec\(|exec\(|getpwuid\(|getgrgid \(|fileperms\(/i,@file); | |
#probably evil stuffs | |
my $tempscore = grep(/\`\$\_(post|request|get).{0,20}\`|(include|require|eval|system|passthru|shell_exec).{0,10}\$\_(post|request|get)|eval.{0,10}base64_decode|back_connect|backdoor|r57|PHPJackal|PhpSpy|GiX|Fx29SheLL|w4ck1ng|milw0rm|PhpShell|k1r4|FeeLCoMz|FaTaLisTiCz|Ve_cENxShell|UnixOn|C99madShell|Spamfordz|Locus7s|c100|c99|x2300|cgitelnet|webadmin|cybershell|STUNSHELL|Pr!v8|PHPShell|KaMeLeOn|S4T|oRb|tryag|sniper|noexecshell|\/etc\/passwd|revengans/i, @file); | |
$score += 50 * $tempscore; | |
print "$score - Possible backdoor : $File::Find::name\n" if ($score > $sens-1 ); | |
close $IN; | |
}elsif((/\.(jpg|jpeg|gif|png|tar|zip|gz|rar|pdf)/)){ | |
open (my $IN,"<$_") || (print "can not open datei $File::Find::name: $!" && next); | |
print "5000 - Possible backdoor (php in non-php file): $File::Find::name\n" if grep /(\<\?php|include(\ |\())/i, <$IN>; | |
close $IN; | |
} | |
} | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 findshell.pl </br> | |
Ejecución: ./findhsell.pl [ sensibilidad del escaneo 1-50 ] [ directorio a escanear ] | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
# ------------------------------------------------------------------------------------------------------- | |
# set -x | |
# Shell script to monitor or watch the disk space | |
# It will send an email to $ADMIN, if the (free available) percentage of space is >= 90%. | |
# ------------------------------------------------------------------------------------------------------- | |
# Set admin email so that you can get email. | |
ADMIN="[email protected]" | |
# set alert level 90% is default | |
ALERT=90 | |
# Exclude list of unwanted monitoring, if several partions then use "|" to separate the partitions. | |
# An example: EXCLUDE_LIST="/dev/sdb1|/dev/sdc5" | |
EXCLUDE_LIST="" | |
# | |
#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |
# | |
date=$(date "+%D %H:%m:%S") | |
function main_prog() | |
{ | |
while read output; | |
do | |
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1) | |
partition=$(echo $output | awk '{print $2}') | |
if [[ $usep -ge $ALERT ]] ; then | |
echo -e "ALERT: $date \n\t Running out of space $partition ($usep%) on server: $(hostname)" | \ | |
mail -s "AACREA Alert: $(hostname) Almost out of disk space $usep%" $ADMIN | |
logger -p local7.warn "Running out of space $partition ($usep) - Email sent to $ADMIN" | |
fi | |
done | |
} | |
if [ "$EXCLUDE_LIST" != "" ] ; then | |
df -H | grep -vE "^Filesystem|tmpfs|cdrom|${EXCLUDE_LIST}" | awk '{print $5 " " $6}' | main_prog | |
else | |
df -H | grep -vE "^Filesystem|tmpfs|cdrom" | awk '{print $5 " " $6}' | main_prog | |
fi | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 email-alertfs.bash </br> | |
Ejecución: ./email-alertfs.bash | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/sh | |
# Check all hosts within the network | |
# BSD license | |
PING=/sbin/ping | |
SEQ=gseq | |
NET=192.168.2 | |
ME=192.168.0.2 | |
i=1; | |
while [ $i -le 254 ] ; | |
do | |
$PING -v -D -s 8 -t 1 -w 1 -c 1 -I $ME $NET.$i 1>/dev/null | |
printf "$?" | |
i=`expr $i + 1` ; | |
done | |
printf "\n" | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 CheckHostAlive.bash </br> | |
Ejecución: ./CheckHostAlive.bash.</br> | |
Nota: El script mandará el ping del primer nódo al último [ 0-254 ] | |
</pre> | |
<hr/><pre class="brush:bash">$ django_backup /path/to/my/proj | |
$ django_backup --db-only /path/to/my/proj</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# (C) 2009 Guy Rutenberg | |
# Backup Django sites | |
BACKUP_DIR= | |
FTP_HOST= | |
FTP_USER= | |
FTP_PASS= | |
FTP_BACKUP_DIR= | |
# end of user configurable section | |
PROG=`basename "$0"` | |
print_usage () { | |
echo "USAGE: $0 [options] PROJ_ROOT" | |
echo "Backup a Django project located in PROJ_ROOT" | |
} | |
print_help () { | |
print_usage | |
cat &lt;&lt; EOF | |
Options: | |
-h, --help show this help message and exit | |
--db-only only backup the database | |
EOF | |
} | |
TEMP=`getopt -o h --long help,db-only -n "$PROG" -- "$@"` | |
if (($?)); then | |
print_usage | |
exit 1 | |
fi | |
eval set -- "$TEMP" | |
DB_ONLY=0 | |
while true ; do | |
case "$1" in | |
-h|--help) print_help; exit ;; | |
--db-only) DB_ONLY="1" ; shift ;; | |
--) shift; break;; | |
esac | |
done | |
if [ -z "$1" ] | |
then | |
print_usage &gt; /dev/stderr | |
exit 1 | |
fi | |
PROJECT_DIR=$1 | |
# extract database variables from settings.py | |
cd "$PROJECT_DIR" | |
DB_ENGINE=`python -c "from settings import *; print DATABASE_ENGINE"` | |
if [ "$DB_ENGINE" != "mysql" ]; then | |
echo $DB_ENGINE | |
echo "Only mysql databases are supported!"&gt;/dev/stderr | |
exit 1 | |
fi | |
DB_NAME=`python -c "from settings import *; print DATABASE_NAME"` | |
DB_USER=`python -c "from settings import *; print DATABASE_USER"` | |
DB_PASS=`python -c "from settings import *; print DATABASE_PASSWORD"` | |
DB_HOST=`python -c "from settings import *; print DATABASE_HOST"` | |
#TODO find how to use it | |
DB_PORT=`python -c "from settings import *; print DATABASE_PORT"` | |
# set optional parameters: host, port | |
HOST_ARGS='' | |
if [ -n "$DB_HOST" ]; then | |
HOST_ARGS="--host $DB_HOST" | |
fi | |
PORT_ARGS='' | |
if [ -n "$DB_PORT" ]; then | |
PORT_ARGS="--port $DB_HOST" | |
fi | |
SITE_DIR=`dirname "$PROJECT_DIR"`/`basename "$PROJECT_DIR"` | |
BACKUP_DIR=`dirname "$BACKUP_DIR"`/`basename "$BACKUP_DIR"` | |
echo -n "dumping database... " | |
DUMP_NAME=${DB_NAME}-$(date +%Y%m%d).sql.bz2 | |
mysqldump --user=${DB_USER} --password=${DB_PASS} $HOST_ARGS \ | |
$PORT_ARGS --databases ${DB_NAME} \ | |
| bzip2 -c &gt; ${BACKUP_DIR}/${DUMP_NAME} | |
if (($?)); then | |
echo "failed!" | |
exit 1 | |
fi | |
echo "done" | |
PUT_TARBALL_FTP="" | |
if [ "$DB_ONLY" -eq "0" ]; then | |
echo -n "Creating tarball... " | |
TAR_NAME=${SITE_DIR##*/}-$(date +%Y%m%d).tar.bz2 | |
tar -cjf ${BACKUP_DIR}/${SITE_DIR##*/}-$(date +%Y%m%d).tar.bz2 ${SITE_DIR} | |
if (($?)); then | |
echo "failed!" | |
exit 2 | |
fi | |
echo "done" | |
PUT_TARBALL_FTP="put \"${BACKUP_DIR}/${TAR_NAME}\"" | |
fi | |
echo -n "Uploading backup to FTP... " | |
lftp -u ${FTP_USER},${FTP_PASS} ${FTP_HOST} <eof "${backup_dir}="" "${ftp_backup_dir}"="" "done"="" "failed!"="" ${dump_name}"="" ${put_tarball_ftp}="" (($?));="" 3="" <="" cd="" echo="" eof="" exit="" fi="" if="" pre="" put="" then=""></eof></pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
# Print the current Internet IP address | |
#--- CONFIG HERE --- | |
CURL='/usr/bin/curl' | |
NC='/usr/bin/netcat' | |
SERVER='http://checkip.dyndns.org/' | |
PORT=80 | |
#-------------------- | |
[ -e ${CURL} ] && ( ${CURL} -s ${SERVER} | tr '>' '\n' | tr '<' '\n' | grep 'Current IP Address:' ; exit $? ) | |
[ -e ${NC} ] && ( echo -ne "GET /index.html HTTP/1.0\n\n" | \ | |
${NC} ${SERVER} ${PORT} | tr '>' '\n' | tr '<' '\n' | \ | |
grep 'Current IP Address:' | sed 's|Current IP Address:|inet ip:|g'; exit $? ) | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 show2.bash </br> | |
Ejecución: ./show2.bash </br> | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
case ${1#*.} | |
in | |
c) | |
GCC=`which gcc` | |
$GCC "$1" -o "${1%%.*}" && { | |
Xdialog --msgbox "Archivo compilado correctamente: \n${1%%.*}" 10 50 | |
exit 0; | |
} || { | |
Xdialog --msgbox "Compilación fallida" 10 30 | |
exit 1; | |
} | |
;; | |
cpp) | |
GPP=`which g++` | |
$GPP "$1" -o "${1%%.*}" && { | |
Xdialog --msgbox "Archivo compilado correctamente: \n${1%%.*}" 10 50 | |
exit 0; | |
} || { | |
Xdialog --msgbox "Compilación fallida" 10 30 | |
exit 1; | |
} | |
;; | |
*) | |
echo -e "Error, código fuente no C ó C++"; | |
exit 1; | |
esac | |
</pre> | |
<hr/><pre class="brush:bash">chmod +x ./Compilar.sh</pre> | |
<hr/><pre class="brush:bash">~/.gnome2/nautilus-scripts</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/sh | |
IP=/bin/ip | |
SED=/bin/sed | |
CUT=/usr/bin/cut | |
IF=en0 | |
if [ ! -z ${1} ] | |
then | |
IF=${1} | |
fi | |
$IP addr show dev $IF | $SED -n 3p | $SED -e 's/\ \+/\ /g' -e 's/\/.*$//g' | $CUT -d ' ' -f 3 | |
</pre> | |
<pre class="brush:plain"> | |
Permisos: chmod 700 show.bash </br> | |
Ejecución: ./show.bash </br> | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
echo "Resizing jpg. This may take some time. Please stand-by." | |
for img in `ls *.JPG` | |
do | |
echo "processing" $img | |
convert $img -resize 1600x1200 file-$img | |
rm $img | |
done | |
echo "Done. Have a nice day!"</pre> | |
<pre class="brush:plain">~/.gnome2/nautilus-scripts</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
function doCompress() { | |
if [ $overwritable -eq 1 ] &amp;&amp; [ ! -e "_compressed" ]; then | |
mkdir "_compressed" | |
if [ ! $? -eq 0 ]; then | |
zenity --error --title="Compress image" --text="Can not create destination folder" | |
exit 1 | |
fi | |
fi | |
failedCount=0 | |
tmp=$IFS | |
IFS=$'\n' | |
for f in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do | |
s=$( identify -format "%m" "$f" ) | |
if [ "$s" == "JPEG" ]; then | |
if [ $overwritable -eq 1 ]; then | |
dest="_compressed/$( basename "$f" )" | |
else | |
dest=$f | |
fi | |
echo "Proccessing $f" | |
convert "$f" -quality $ratio "$dest" | |
if [ ! $? -eq 0 ]; then | |
let failedCount++ | |
fi | |
else | |
let failedCount++ | |
fi | |
done | |
IFS=$tmp | |
if [ $failedCount -eq 0 ]; then | |
zenity --info --title="Compress image" --text="All files was compressed successfully" | |
else | |
zenity --warning --title="Compress image" --text="There were $failedCount files failed" | |
fi | |
} | |
# checking input file &amp; get 1 file to preview simple | |
imgAvailable=0 | |
tmp=$IFS | |
IFS=$'\n' | |
for f in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do | |
s=$( identify -format "%m" "$f" ) | |
if [ "$s" == "JPEG" ]; then | |
imgAvailable=1 | |
previewFile=$f | |
break | |
fi | |
done | |
IFS=$tmp | |
if [ $imgAvailable -eq 0 ]; then | |
zenity --error --title="Compress images" --text="Please select JPEG file(s)" | |
exit 1 | |
fi | |
zenity --question --title="Compress images" --text="Overwrite the original file?" | |
overwritable=$? | |
zenity --question --title="Compress images" --text="Preview?" | |
previewable=$? | |
stopable=0 | |
ratio=90 | |
while [ $stopable -eq 0 ]; do | |
# Ask for compress ratio | |
ratio=$( zenity --scale --title="Compress images ratio" --text="High number make high quality image but big file size" --min-value=1 --max-value=100 --value=$ratio ) | |
if [ $? -eq 0 ]; then | |
if [ $previewable -eq 0 ]; then | |
previewedFile=$( echo "/tmp/$( basename "$previewFile" )") | |
if [ -e "$previewedFile" ]; then | |
rm "$previewedFile" | |
fi | |
convert "$previewFile" -quality $ratio "$previewedFile" | zenity --progress --title="Making preview..." --auto-close --no-cancel --pulsate | |
gvfs-open "$previewedFile" | |
zenity --question --title="Agree with ratio $ratio?" --text="Origin: $( du -h "$previewFile" ). Result: $( du -h "$previewedFile" )." | |
if [ $? -eq 0 ]; then | |
doCompress | zenity --progress --title="Compressing..." --auto-close --no-cancel --pulsate | |
stopable=1 | |
fi | |
rm "$previewedFile" | |
else | |
doCompress | zenity --progress --title="Compressing..." --auto-close --no-cancel --pulsate | |
stopable=1 | |
fi | |
else | |
stopable=1 | |
fi | |
done</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
# A simple shell script to clean (delete) ~/.known_hosts file hostname entry. | |
# This is useful when remote server reinstalled or ssh keys are changed! | |
# ------------------------------------------------------------------------- | |
# Copyright (c) 2007 nixCraft project [http://cyberciti.biz/fb/] | |
# This script is licensed under GNU GPL version 2.0 or above | |
# ------------------------------------------------------------------------- | |
# This script is part of nixCraft shell script collection (NSSC) | |
# Visit http://bash.cyberciti.biz/ for more information. | |
# ------------------------------------------------------------------------- | |
host="$1" | |
[[ $# -eq 0 ]] && { echo "Usage: $0 host.name.com"; exit 1;} | |
ips=$(host "$host" | awk -F'address' '{ print $2}' | sed -e 's/^ //g') | |
ssh-keygen -R "$host" | |
for i in $ips | |
do | |
ssh-keygen -R "$i" | |
done | |
exit $? | |
</pre> | |
<pre class="brush:plain"> | |
Permisos de ejecución: chmod 700 revoke-ssh.bash </br> | |
Ejecución del script: ./revoke-ssh.bash nombre.dominio o ./revoke-ssh.bash IP. | |
</pre> | |
<hr/><pre class="brush:bash">$ python respaldo.py</pre> | |
<pre class="brush:plain">pg_restore -d db -U postgres db.tar</pre> | |
<pre class="brush:python"></pre> | |
<pre class="brush:python"></pre> | |
<pre class="brush:python"></pre> | |
<pre class="brush:python">#!/usr/bin/env python | |
import time | |
import datetime | |
import os | |
def nombre_archivo(): | |
''' | |
Permite Crear el nombre del archivo que tendra el respaldo | |
tomando como nombre la fecha dd-mm-aa y la hora hh:mm:ss | |
Quedando de la siguiente manera suponiendo que fue realizado | |
en la siguiente fecha (24/12/2011 10:30:00) , el resultado seria | |
el siguiente: 24_12_2011_103000 | |
t = time.localtime() | |
dia = t.tm_mday | |
mes = t.tm_mon | |
ano = t.tm_year | |
hora = t.tm_hour | |
minutos = t.tm_min | |
seg = t.tm_sec | |
nombre = '%s-%s-%s_%s:%s:%s' % (dia, mes, ano, hora, minutos, seg) | |
''' | |
t = datetime.datetime.now() | |
nombre = t.strftime('%d_%m_%Y_%I%M%S') | |
return nombre | |
def leer_config(): | |
''' | |
Toma los valores del archivo de configuracion llamado config.cfg y los | |
guarda en un diccionario {clave:valor} el cual retorna al finalizar. | |
Informacion del archivo config.cfg: | |
ipservidor=10.121.6.4 | |
nombrebasedatos=bdhcoromoto | |
usuariobasedatos=admhc | |
rutarespaldo=/media/respaldo | |
nombrearchivo=pg_bdhcoromoto_ | |
''' | |
diccionario = {} | |
ruta = "/home/cgarcia/desarrollo/python/respaldo-potgres/config/config.cfg" | |
for linea in file(ruta): | |
if linea[0] != '#': | |
separar = linea.split('=') | |
if len(separar) &gt; 1: | |
dicc_clave = separar[0] | |
dicc_valor = separar[1].rstrip() # rstrip elimina el retor d c | |
diccionario[dicc_clave] = dicc_valor | |
return diccionario | |
def respaldo_pg(): | |
''' | |
Toma los parametros del diccionario con el cual se arma el nombre y | |
la ruta que tendra el archivo del respaldo asi como tambien arma | |
el comando final a ejecutar | |
''' | |
diccio = leer_config() | |
dic_ipservidor = diccio['ipservidor'] | |
dic_nombrebasedatos = diccio['nombrebasedatos'] | |
dic_usuariobasedatos = diccio['usuariobasedatos'] | |
dic_rutarespaldo = diccio['rutarespaldo'] | |
dic_nombrearchivo = diccio['nombrearchivo'] | |
archivofinal = os.path.join(dic_rutarespaldo, dic_nombrearchivo + \ | |
nombre_archivo() + '.tar') | |
comando = 'pg_dump' | |
''' | |
-Parametros a pasar(Estos tambien se pudieran colocar dentro del | |
archivo config.cfg), | |
- pero por ahora lo dejaremos asi directo como texto | |
-Ft Significa Format tar | |
-b Inclute campos Blobs | |
-h es el host o la ip del servidor | |
-W password | |
''' | |
comando_a_ejecutar = '%s -Ft -b -h %s %s -U %s &gt; %s' % \ | |
(comando, dic_ipservidor, dic_nombrebasedatos, dic_usuariobasedatos,\ | |
archivofinal) | |
return comando_a_ejecutar | |
if __name__ == '__main__': | |
print 'Espere un momento ejecutando Proceso de Respaldo...' | |
respaldar = respaldo_pg() | |
print respaldar | |
os.system(respaldar) | |
print '*** Respaldo Realizado con Exito ***'</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
# A sample shell script to print domain ip address hosting information such as | |
# Location of server, city, ip address owner, country and network range. | |
# This is useful to track spammers or research purpose. | |
# ------------------------------------------------------------------------- | |
# Copyright (c) 2006 nixCraft project [http://cyberciti.biz/fb/] | |
# This script is licensed under GNU GPL version 2.0 or above | |
# ------------------------------------------------------------------------- | |
# This script is part of nixCraft shell script collection (NSSC) | |
# Visit http://bash.cyberciti.biz/ for more information. | |
# ------------------------------------------------------------------------- | |
# Last updated on Mar/05/2010 | |
# ------------------------------------------------------------------------- | |
# Get all domains | |
_dom=$@ | |
# Die if no domains are given | |
[ $# -eq 0 ] && { echo "Usage: $0 domain1.com domain2.com ..."; exit 1; } | |
for d in $_dom | |
do | |
_ip=$(host $d | grep 'has add' | head -1 | awk '{ print $4}') | |
[ "$_ip" == "" ] && { echo "Error: $d is not valid domain or dns error."; continue; } | |
echo "Getting information for domain: $d [ $_ip ]..." | |
whois "$_ip" | egrep -w 'OrgName:|City:|Country:|OriginAS:|NetRange:' | |
echo "" | |
done | |
</pre> | |
<pre class="brush:plain"> | |
Establecemos permisos de ejecución </br> | |
chmod +x dom.bash</br> | |
Ejecutamos el script pasando como parámetro un dominio o varios</br> | |
./dom.bash cyberciti.biz google.com </br> | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
FCONF=/etc/myip | |
MAIL=tu_direccion_de_correo | |
SERVER=servidor_smtp | |
# Get your ip | |
ip=`getip eth0 | head -n 1 | cut -d ":" -f 2`; | |
# Get your old ip | |
oldip=`head -n 1 $FCONF` | |
# If ip has changed, send email | |
# and save new ip in config file | |
if [ $ip != $oldip ]; | |
then | |
sendEmail -f $MAIL -t $MAIL -u "Your ip: ${ip}" -m " " -s $SERVER | |
echo $ip &gt; $FCONF; | |
fi</pre> | |
<hr/><pre class="brush:bash">sudo touch /etc/myip | |
sudo chmod a+w /etc/myip</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
# | |
# The BSD License (http://www.opensource.org/licenses/bsd-license.php) | |
# specifies the terms and conditions of use for checksec.sh: | |
# | |
# Copyright (c) 2009-2011, Tobias Klein. | |
# All rights reserved. | |
# | |
# Redistribution and use in source and binary forms, with or without | |
# modification, are permitted provided that the following conditions | |
# are met: | |
# | |
# * Redistributions of source code must retain the above copyright | |
# notice, this list of conditions and the following disclaimer. | |
# * Redistributions in binary form must reproduce the above copyright | |
# notice, this list of conditions and the following disclaimer in | |
# the documentation and/or other materials provided with the | |
# distribution. | |
# * Neither the name of Tobias Klein nor the name of trapkit.de may be | |
# used to endorse or promote products derived from this software | |
# without specific prior written permission. | |
# | |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | |
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | |
# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | |
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | |
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS | |
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED | |
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF | |
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | |
# DAMAGE. | |
# | |
# Name : checksec.sh | |
# Version : 1.5 | |
# Author : Tobias Klein | |
# Date : November 2011 | |
# Download: http://www.trapkit.de/tools/checksec.html | |
# Changes : http://www.trapkit.de/tools/checksec_changes.txt | |
# | |
# Description: | |
# | |
# Modern Linux distributions offer some mitigation techniques to make it | |
# harder to exploit software vulnerabilities reliably. Mitigations such | |
# as RELRO, NoExecute (NX), Stack Canaries, Address Space Layout | |
# Randomization (ASLR) and Position Independent Executables (PIE) have | |
# made reliably exploiting any vulnerabilities that do exist far more | |
# challenging. The checksec.sh script is designed to test what *standard* | |
# Linux OS and PaX (http://pax.grsecurity.net/) security features are being | |
# used. | |
# | |
# As of version 1.3 the script also lists the status of various Linux kernel | |
# protection mechanisms. | |
# | |
# Credits: | |
# | |
# Thanks to Brad Spengler (grsecurity.net) for the PaX support. | |
# Thanks to Jon Oberheide (jon.oberheide.org) for the kernel support. | |
# Thanks to Ollie Whitehouse (Research In Motion) for rpath/runpath support. | |
# | |
# Others that contributed to checksec.sh (in no particular order): | |
# | |
# Simon Ruderich, Denis Scherbakov, Stefan Kuttler, Radoslaw Madej, | |
# Anthony G. Basile, Martin Vaeth and Brian Davis. | |
# | |
# global vars | |
have_readelf=1 | |
verbose=false | |
# SELinux prefix | |
# Set where the script must search for the SELinux bin files. | |
se_prefix='/usr/sbin' | |
# FORTIFY_SOURCE vars | |
FS_end=_chk | |
FS_cnt_total=0x | |
FS_cnt_checked=0 | |
FS_cnt_unchecked=0 | |
FS_chk_func_libc=0 | |
FS_functions=0 | |
FS_libc=0 | |
# version information | |
version() { | |
echo "checksec v1.5, Tobias Klein, www.trapkit.de, November 2011" | |
echo | |
} | |
# help | |
help() { | |
echo "Usage: checksec [OPTION]" | |
echo | |
echo "Options:" | |
echo | |
echo " --file <executable-file>" | |
echo " --dir <directory> [-v]" | |
echo " --proc <process name | process ID>" | |
echo " --proc-all" | |
echo " --proc-libs <process ID>" | |
echo " --kernel" | |
echo " --fortify-file <executable-file>" | |
echo " --fortify-proc <process ID>" | |
echo " --version" | |
echo " --help" | |
echo | |
echo "For more information, see:" | |
echo " http://www.trapkit.de/tools/checksec.html" | |
echo | |
} | |
# check if command exists | |
command_exists () { | |
type $1 > /dev/null 2>&1; | |
} | |
# check if directory exists | |
dir_exists () { | |
[ -d $1 ] || return 1 | |
} | |
# check user privileges | |
root_privs () { | |
[ $UID -eq 0 ] || return 1 | |
} | |
# check if input is numeric | |
isNumeric () { | |
echo "$@" | grep -q -v "[^0-9]" && return 0 | |
} | |
# check if input is a string | |
isString () { | |
echo "$@" | grep -q -v "[^A-Za-z]" && return 0 | |
} | |
# check file(s) | |
filecheck() { | |
# check for RELRO support | |
if readelf -l $1 2>/dev/null | grep -q 'GNU_RELRO'; then | |
if readelf -d $1 2>/dev/null | grep -q 'BIND_NOW'; then | |
echo -n -e '\033[32mFull RELRO \033[m ' | |
else | |
echo -n -e '\033[33mPartial RELRO\033[m ' | |
fi | |
else | |
echo -n -e '\033[31mNo RELRO \033[m ' | |
fi | |
# check for stack canary support | |
if readelf -s $1 2>/dev/null | grep -q '__stack_chk_fail'; then | |
echo -n -e '\033[32mCanary found \033[m ' | |
else | |
echo -n -e '\033[31mNo canary found\033[m ' | |
fi | |
# check for NX support | |
if readelf -W -l $1 2>/dev/null | grep 'GNU_STACK' | grep -q 'RWE'; then | |
echo -n -e '\033[31mNX disabled\033[m ' | |
else | |
echo -n -e '\033[32mNX enabled \033[m ' | |
fi | |
# check for PIE support | |
if readelf -h $1 2>/dev/null | grep -q 'Type:[[:space:]]*EXEC'; then | |
echo -n -e '\033[31mNo PIE \033[m ' | |
elif readelf -h $1 2>/dev/null | grep -q 'Type:[[:space:]]*DYN'; then | |
if readelf -d $1 2>/dev/null | grep -q '(DEBUG)'; then | |
echo -n -e '\033[32mPIE enabled \033[m ' | |
else | |
echo -n -e '\033[33mDSO \033[m ' | |
fi | |
else | |
echo -n -e '\033[33mNot an ELF file\033[m ' | |
fi | |
# check for rpath / run path | |
if readelf -d $1 2>/dev/null | grep -q 'rpath'; then | |
echo -n -e '\033[31mRPATH \033[m ' | |
else | |
echo -n -e '\033[32mNo RPATH \033[m ' | |
fi | |
if readelf -d $1 2>/dev/null | grep -q 'runpath'; then | |
echo -n -e '\033[31mRUNPATH \033[m ' | |
else | |
echo -n -e '\033[32mNo RUNPATH \033[m ' | |
fi | |
} | |
# check process(es) | |
proccheck() { | |
# check for RELRO support | |
if readelf -l $1/exe 2>/dev/null | grep -q 'Program Headers'; then | |
if readelf -l $1/exe 2>/dev/null | grep -q 'GNU_RELRO'; then | |
if readelf -d $1/exe 2>/dev/null | grep -q 'BIND_NOW'; then | |
echo -n -e '\033[32mFull RELRO \033[m ' | |
else | |
echo -n -e '\033[33mPartial RELRO \033[m ' | |
fi | |
else | |
echo -n -e '\033[31mNo RELRO \033[m ' | |
fi | |
else | |
echo -n -e '\033[31mPermission denied (please run as root)\033[m\n' | |
exit 1 | |
fi | |
# check for stack canary support | |
if readelf -s $1/exe 2>/dev/null | grep -q 'Symbol table'; then | |
if readelf -s $1/exe 2>/dev/null | grep -q '__stack_chk_fail'; then | |
echo -n -e '\033[32mCanary found \033[m ' | |
else | |
echo -n -e '\033[31mNo canary found \033[m ' | |
fi | |
else | |
if [ "$1" != "1" ] ; then | |
echo -n -e '\033[33mPermission denied \033[m ' | |
else | |
echo -n -e '\033[33mNo symbol table found\033[m ' | |
fi | |
fi | |
# first check for PaX support | |
if cat $1/status 2> /dev/null | grep -q 'PaX:'; then | |
pageexec=( $(cat $1/status 2> /dev/null | grep 'PaX:' | cut -b6) ) | |
segmexec=( $(cat $1/status 2> /dev/null | grep 'PaX:' | cut -b10) ) | |
mprotect=( $(cat $1/status 2> /dev/null | grep 'PaX:' | cut -b8) ) | |
randmmap=( $(cat $1/status 2> /dev/null | grep 'PaX:' | cut -b9) ) | |
if [[ "$pageexec" = "P" || "$segmexec" = "S" ]] && [[ "$mprotect" = "M" && "$randmmap" = "R" ]] ; then | |
echo -n -e '\033[32mPaX enabled\033[m ' | |
elif [[ "$pageexec" = "p" && "$segmexec" = "s" && "$randmmap" = "R" ]] ; then | |
echo -n -e '\033[33mPaX ASLR only\033[m ' | |
elif [[ "$pageexec" = "P" || "$segmexec" = "S" ]] && [[ "$mprotect" = "m" && "$randmmap" = "R" ]] ; then | |
echo -n -e '\033[33mPaX mprot off \033[m' | |
elif [[ "$pageexec" = "P" || "$segmexec" = "S" ]] && [[ "$mprotect" = "M" && "$randmmap" = "r" ]] ; then | |
echo -n -e '\033[33mPaX ASLR off\033[m ' | |
elif [[ "$pageexec" = "P" || "$segmexec" = "S" ]] && [[ "$mprotect" = "m" && "$randmmap" = "r" ]] ; then | |
echo -n -e '\033[33mPaX NX only\033[m ' | |
else | |
echo -n -e '\033[31mPaX disabled\033[m ' | |
fi | |
# fallback check for NX support | |
elif readelf -W -l $1/exe 2>/dev/null | grep 'GNU_STACK' | grep -q 'RWE'; then | |
echo -n -e '\033[31mNX disabled\033[m ' | |
else | |
echo -n -e '\033[32mNX enabled \033[m ' | |
fi | |
# check for PIE support | |
if readelf -h $1/exe 2>/dev/null | grep -q 'Type:[[:space:]]*EXEC'; then | |
echo -n -e '\033[31mNo PIE \033[m ' | |
elif readelf -h $1/exe 2>/dev/null | grep -q 'Type:[[:space:]]*DYN'; then | |
if readelf -d $1/exe 2>/dev/null | grep -q '(DEBUG)'; then | |
echo -n -e '\033[32mPIE enabled \033[m ' | |
else | |
echo -n -e '\033[33mDynamic Shared Object\033[m ' | |
fi | |
else | |
echo -n -e '\033[33mNot an ELF file \033[m ' | |
fi | |
} | |
# check mapped libraries | |
libcheck() { | |
libs=( $(awk '{ print $6 }' /proc/$1/maps | grep '/' | sort -u | xargs file | grep ELF | awk '{ print $1 }' | sed 's/:/ /') ) | |
printf "\n* Loaded libraries (file information, # of mapped files: ${#libs[@]}):\n\n" | |
for element in $(seq 0 $((${#libs[@]} - 1))) | |
do | |
echo " ${libs[$element]}:" | |
echo -n " " | |
filecheck ${libs[$element]} | |
printf "\n\n" | |
done | |
} | |
# check for system-wide ASLR support | |
aslrcheck() { | |
# PaX ASLR support | |
if !(cat /proc/1/status 2> /dev/null | grep -q 'Name:') ; then | |
echo -n -e ':\033[33m insufficient privileges for PaX ASLR checks\033[m\n' | |
echo -n -e ' Fallback to standard Linux ASLR check' | |
fi | |
if cat /proc/1/status 2> /dev/null | grep -q 'PaX:'; then | |
printf ": " | |
if cat /proc/1/status 2> /dev/null | grep 'PaX:' | grep -q 'R'; then | |
echo -n -e '\033[32mPaX ASLR enabled\033[m\n\n' | |
else | |
echo -n -e '\033[31mPaX ASLR disabled\033[m\n\n' | |
fi | |
else | |
# standard Linux 'kernel.randomize_va_space' ASLR support | |
# (see the kernel file 'Documentation/sysctl/kernel.txt' for a detailed description) | |
ASLR=$(/sbin/sysctl -n kernel.randomize_va_space 2> /dev/null) | |
printf " (Address Space Layout Randomization): " | |
if [ ! -z $ASLR ] ; then | |
if [ $ASLR -ge 2 ]; then | |
echo -n -e '\033[32mOn (Setting: 2)\033[m\n\n' | |
printf " Description - Make the addresses of mmap base, heap, stack and VDSO page randomized.\n" | |
printf " This, among other things, implies that shared libraries will be loaded to random \n" | |
printf " addresses. Also for PIE-linked binaries, the location of code start is randomized.\n\n" | |
elif [ $ASLR -eq 1 ]; then | |
echo -n -e '\033[33mOn (Setting: 1)\033[m\n\n' | |
printf " Description - Make the addresses of mmap base, stack and VDSO page randomized.\n" | |
printf " This, among other things, implies that shared libraries will be loaded to \n" | |
printf " random addresses. Also for PIE-linked binaries, the location of code start\n" | |
printf " is randomized. Heap addresses are *not* randomized.\n\n" | |
elif [ $ASLR -eq 0 ]; then | |
echo -n -e '\033[31mOff (Setting:0)\033[m\n' | |
fi | |
else | |
echo -n -e '\033[31mNot kernel support\033[m\n' | |
fi | |
printf " See the kernel file 'Documentation/sysctl/kernel.txt' for more details.\n\n" | |
fi | |
} | |
# check cpu nx flag | |
nxcheck() { | |
if grep -q nx /proc/cpuinfo; then | |
echo -n -e '\033[32mYes\033[m\n\n' | |
else | |
echo -n -e '\033[31mNo\033[m\n\n' | |
fi | |
} | |
# check for kernel protection mechanisms | |
kernelcheck() { | |
printf " Description - List the status of kernel protection mechanisms. Rather than\n" | |
printf " inspect kernel mechanisms that may aid in the prevention of exploitation of\n" | |
printf " userspace processes, this option lists the status of kernel configuration\n" | |
printf " options that harden the kernel itself against attack.\n\n" | |
printf " Kernel version: \033[33m%s\033[m - OS architecture: \033[33m%s\033[m\n" $(/bin/uname -r) $(/bin/uname -m) | |
printf " Kernel config : " | |
if [ -f /proc/config.gz ] ; then | |
kconfig="zcat /proc/config.gz" | |
printf "\033[32m/proc/config.gz\033[m\n\n" | |
elif [ -f /boot/config-`uname -r` ] ; then | |
kconfig="cat /boot/config-`uname -r`" | |
printf "\033[33m/boot/config-`uname -r`\033[m\n\n" | |
printf " Warning: The config on disk may not represent running kernel config!\n\n"; | |
elif [ -f "${KBUILD_OUTPUT:-/usr/src/linux}"/.config ] ; then | |
kconfig="cat ${KBUILD_OUTPUT:-/usr/src/linux}/.config" | |
printf "\033[33m%s\033[m\n\n" "${KBUILD_OUTPUT:-/usr/src/linux}/.config" | |
printf " Warning: The config on disk may not represent running kernel config!\n\n"; | |
else | |
printf "\033[31mNOT FOUND\033[m\n\n" | |
exit 0 | |
fi | |
printf " GCC stack protector support: " | |
if $kconfig | grep -qi 'CONFIG_CC_STACKPROTECTOR=y'; then | |
printf "\033[32mEnabled\033[m\n" | |
else | |
printf "\033[31mDisabled\033[m\n" | |
fi | |
printf " Strict user copy checks: " | |
if $kconfig | grep -qi 'CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y'; then | |
printf "\033[32mEnabled\033[m\n" | |
else | |
printf "\033[31mDisabled\033[m\n" | |
fi | |
printf " Enforce read-only kernel data: " | |
if $kconfig | grep -qi 'CONFIG_DEBUG_RODATA=y'; then | |
printf "\033[32mEnabled\033[m\n" | |
else | |
printf "\033[31mDisabled\033[m\n" | |
fi | |
printf " Restrict /dev/mem access: " | |
if $kconfig | grep -qi 'CONFIG_STRICT_DEVMEM=y'; then | |
printf "\033[32mEnabled\033[m\n" | |
else | |
printf "\033[31mDisabled\033[m\n" | |
fi | |
printf " Restrict /dev/kmem access: " | |
if $kconfig | grep -qi 'CONFIG_DEVKMEM=y'; then | |
printf "\033[31mDisabled\033[m\n" | |
else | |
printf "\033[32mEnabled\033[m\n" | |
fi | |
printf "\n" | |
printf "* grsecurity / PaX: " | |
if $kconfig | grep -qi 'CONFIG_GRKERNSEC=y'; then | |
if $kconfig | grep -qi 'CONFIG_GRKERNSEC_HIGH=y'; then | |
printf "\033[32mHigh GRKERNSEC\033[m\n\n" | |
elif $kconfig | grep -qi 'CONFIG_GRKERNSEC_MEDIUM=y'; then | |
printf "\033[33mMedium GRKERNSEC\033[m\n\n" | |
elif $kconfig | grep -qi 'CONFIG_GRKERNSEC_LOW=y'; then | |
printf "\033[31mLow GRKERNSEC\033[m\n\n" | |
else | |
printf "\033[33mCustom GRKERNSEC\033[m\n\n" | |
fi | |
printf " Non-executable kernel pages: " | |
if $kconfig | grep -qi 'CONFIG_PAX_KERNEXEC=y'; then | |
printf "\033[32mEnabled\033[m\n" | |
else | |
printf "\033[31mDisabled\033[m\n" | |
fi | |
printf " Prevent userspace pointer deref: " | |
if $kconfig | grep -qi 'CONFIG_PAX_MEMORY_UDEREF=y'; then | |
printf "\033[32mEnabled\033[m\n" | |
else | |
printf "\033[31mDisabled\033[m\n" | |
fi | |
printf " Prevent kobject refcount overflow: " | |
if $kconfig | grep -qi 'CONFIG_PAX_REFCOUNT=y'; then | |
printf "\033[32mEnabled\033[m\n" | |
else | |
printf "\033[31mDisabled\033[m\n" | |
fi | |
printf " Bounds check heap object copies: " | |
if $kconfig | grep -qi 'CONFIG_PAX_USERCOPY=y'; then | |
printf "\033[32mEnabled\033[m\n" | |
else | |
printf "\033[31mDisabled\033[m\n" | |
fi | |
printf " Disable writing to kmem/mem/port: " | |
if $kconfig | grep -qi 'CONFIG_GRKERNSEC_KMEM=y'; then | |
printf "\033[32mEnabled\033[m\n" | |
else | |
printf "\033[31mDisabled\033[m\n" | |
fi | |
printf " Disable privileged I/O: " | |
if $kconfig | grep -qi 'CONFIG_GRKERNSEC_IO=y'; then | |
printf "\033[32mEnabled\033[m\n" | |
else | |
printf "\033[31mDisabled\033[m\n" | |
fi | |
printf " Harden module auto-loading: " | |
if $kconfig | grep -qi 'CONFIG_GRKERNSEC_MODHARDEN=y'; then | |
printf "\033[32mEnabled\033[m\n" | |
else | |
printf "\033[31mDisabled\033[m\n" | |
fi | |
printf " Hide kernel symbols: " | |
if $kconfig | grep -qi 'CONFIG_GRKERNSEC_HIDESYM=y'; then | |
printf "\033[32mEnabled\033[m\n" | |
else | |
printf "\033[31mDisabled\033[m\n" | |
fi | |
else | |
printf "\033[31mNo GRKERNSEC\033[m\n\n" | |
printf " The grsecurity / PaX patchset is available here:\n" | |
printf " http://grsecurity.net/\n" | |
fi | |
printf "\n" | |
printf "* Kernel Heap Hardening: " | |
if $kconfig | grep -qi 'CONFIG_KERNHEAP=y'; then | |
if $kconfig | grep -qi 'CONFIG_KERNHEAP_FULLPOISON=y'; then | |
printf "\033[32mFull KERNHEAP\033[m\n\n" | |
else | |
printf "\033[33mPartial KERNHEAP\033[m\n\n" | |
fi | |
else | |
printf "\033[31mNo KERNHEAP\033[m\n\n" | |
printf " The KERNHEAP hardening patchset is available here:\n" | |
printf " https://www.subreption.com/kernheap/\n\n" | |
fi | |
# Check SELinux support, status and configuration. | |
printf " SELinux support:" | |
if $kconfig | grep -qi 'CONFIG_SECURITY_SELINUX=y'; then | |
if [ ! -e ${se_prefix}/sestatus ] || [ ! -e ${se_prefix}/getenforce ]; then | |
printf "\033[31m SELinux kernel support but no utils installed\033[m\n\n" | |
exit | |
else | |
printf "\033[32m SELinux kernel support\033[m\n" | |
fi | |
if ( $kconfig 1> /dev/null ); then | |
printf " SELinux mode: " | |
se_status=$($se_prefix/getenforce) | |
[ $se_status = 'Enforcing' ] && printf "\033[32m Enforcing\033[m\n" | |
[ $se_status = 'Permissive' ] && printf "\033[33m Permissive\033[m\n" | |
[ $se_status = 'Disabled' ] && printf "\033[31m Disabled\033[m\n" | |
printf " SELinux policy:" | |
se_policy=$($se_prefix/sestatus | grep "Policy from config file" | awk -F: {'print $2'}) | |
[ $se_policy = 'targeted' ] && printf "\033[33m Targeted \033[m\n\n" | |
[ $se_policy = 'stric' ] && printf "\033[32m Stric\033[m\n\n" | |
fi | |
printf " Warning: The config may represent the running SELinux config!\n\n" | |
else | |
printf "\033[31m No Kernel SELinux support\033[m\n\n" | |
fi | |
} | |
# --- FORTIFY_SOURCE subfunctions (start) --- | |
# is FORTIFY_SOURCE supported by libc? | |
FS_libc_check() { | |
printf "* FORTIFY_SOURCE support available (libc) : " | |
if [ "${#FS_chk_func_libc[@]}" != "0" ] ; then | |
printf "\033[32mYes\033[m\n" | |
else | |
printf "\033[31mNo\033[m\n" | |
exit 1 | |
fi | |
} | |
# was the binary compiled with FORTIFY_SOURCE? | |
FS_binary_check() { | |
printf "* Binary compiled with FORTIFY_SOURCE support: " | |
for FS_elem_functions in $(seq 0 $((${#FS_functions[@]} - 1))) | |
do | |
if [[ ${FS_functions[$FS_elem_functions]} =~ _chk ]] ; then | |
printf "\033[32mYes\033[m\n" | |
return | |
fi | |
done | |
printf "\033[31mNo\033[m\n" | |
exit 1 | |
} | |
FS_comparison() { | |
echo | |
printf " ------ EXECUTABLE-FILE ------- . -------- LIBC --------\n" | |
printf " FORTIFY-able library functions | Checked function names\n" | |
printf " -------------------------------------------------------\n" | |
for FS_elem_libc in $(seq 0 $((${#FS_chk_func_libc[@]} - 1))) | |
do | |
for FS_elem_functions in $(seq 0 $((${#FS_functions[@]} - 1))) | |
do | |
FS_tmp_func=${FS_functions[$FS_elem_functions]} | |
FS_tmp_libc=${FS_chk_func_libc[$FS_elem_libc]} | |
if [[ $FS_tmp_func =~ ^$FS_tmp_libc$ ]] ; then | |
printf " \033[31m%-30s\033[m | __%s%s\n" $FS_tmp_func $FS_tmp_libc $FS_end | |
let FS_cnt_total++ | |
let FS_cnt_unchecked++ | |
elif [[ $FS_tmp_func =~ ^$FS_tmp_libc(_chk) ]] ; then | |
printf " \033[32m%-30s\033[m | __%s%s\n" $FS_tmp_func $FS_tmp_libc $FS_end | |
let FS_cnt_total++ | |
let FS_cnt_checked++ | |
fi | |
done | |
done | |
} | |
FS_summary() { | |
echo | |
printf "SUMMARY:\n\n" | |
printf "* Number of checked functions in libc : ${#FS_chk_func_libc[@]}\n" | |
printf "* Total number of library functions in the executable: ${#FS_functions[@]}\n" | |
printf "* Number of FORTIFY-able functions in the executable : %s\n" $FS_cnt_total | |
printf "* Number of checked functions in the executable : \033[32m%s\033[m\n" $FS_cnt_checked | |
printf "* Number of unchecked functions in the executable : \033[31m%s\033[m\n" $FS_cnt_unchecked | |
echo | |
} | |
# --- FORTIFY_SOURCE subfunctions (end) --- | |
if !(command_exists readelf) ; then | |
printf "\033[31mWarning: 'readelf' not found! It's required for most checks.\033[m\n\n" | |
have_readelf=0 | |
fi | |
# parse command-line arguments | |
case "$1" in | |
--version) | |
version | |
exit 0 | |
;; | |
--help) | |
help | |
exit 0 | |
;; | |
--dir) | |
if [ "$3" = "-v" ] ; then | |
verbose=true | |
fi | |
if [ $have_readelf -eq 0 ] ; then | |
exit 1 | |
fi | |
if [ -z "$2" ] ; then | |
printf "\033[31mError: Please provide a valid directory.\033[m\n\n" | |
exit 1 | |
fi | |
# remove trailing slashes | |
tempdir=`echo $2 | sed -e "s/\/*$//"` | |
if [ ! -d $tempdir ] ; then | |
printf "\033[31mError: The directory '$tempdir' does not exist.\033[m\n\n" | |
exit 1 | |
fi | |
cd $tempdir | |
printf "RELRO STACK CANARY NX PIE RPATH RUNPATH FILE\n" | |
for N in [A-Za-z]*; do | |
if [ "$N" != "[A-Za-z]*" ]; then | |
# read permissions? | |
if [ ! -r $N ]; then | |
printf "\033[31mError: No read permissions for '$tempdir/$N' (run as root).\033[m\n" | |
else | |
# ELF executable? | |
out=`file $N` | |
if [[ ! $out =~ ELF ]] ; then | |
if [ "$verbose" = "true" ] ; then | |
printf "\033[34m*** Not an ELF file: $tempdir/" | |
file $N | |
printf "\033[m" | |
fi | |
else | |
filecheck $N | |
if [ `find $tempdir/$N \( -perm -004000 -o -perm -002000 \) -type f -print` ]; then | |
printf "\033[37;41m%s%s\033[m" $2 $N | |
else | |
printf "%s%s" $tempdir/ $N | |
fi | |
echo | |
fi | |
fi | |
fi | |
done | |
exit 0 | |
;; | |
--file) | |
if [ $have_readelf -eq 0 ] ; then | |
exit 1 | |
fi | |
if [ -z "$2" ] ; then | |
printf "\033[31mError: Please provide a valid file.\033[m\n\n" | |
exit 1 | |
fi | |
# does the file exist? | |
if [ ! -e $2 ] ; then | |
printf "\033[31mError: The file '$2' does not exist.\033[m\n\n" | |
exit 1 | |
fi | |
# read permissions? | |
if [ ! -r $2 ] ; then | |
printf "\033[31mError: No read permissions for '$2' (run as root).\033[m\n\n" | |
exit 1 | |
fi | |
# ELF executable? | |
out=`file $2` | |
if [[ ! $out =~ ELF ]] ; then | |
printf "\033[31mError: Not an ELF file: " | |
file $2 | |
printf "\033[m\n" | |
exit 1 | |
fi | |
printf "RELRO STACK CANARY NX PIE RPATH RUNPATH FILE\n" | |
filecheck $2 | |
if [ `find $2 \( -perm -004000 -o -perm -002000 \) -type f -print` ] ; then | |
printf "\033[37;41m%s%s\033[m" $2 $N | |
else | |
printf "%s" $2 | |
fi | |
echo | |
exit 0 | |
;; | |
--proc-all) | |
if [ $have_readelf -eq 0 ] ; then | |
exit 1 | |
fi | |
cd /proc | |
printf "* System-wide ASLR" | |
aslrcheck | |
printf "* Does the CPU support NX: " | |
nxcheck | |
printf " COMMAND PID RELRO STACK CANARY NX/PaX PIE\n" | |
for N in [1-9]*; do | |
if [ $N != $$ ] && readlink -q $N/exe > /dev/null; then | |
printf "%16s" `head -1 $N/status | cut -b 7-` | |
printf "%7d " $N | |
proccheck $N | |
echo | |
fi | |
done | |
if [ ! -e /usr/bin/id ] ; then | |
printf "\n\033[33mNote: If you are running 'checksec.sh' as an unprivileged user, you\n" | |
printf " will not see all processes. Please run the script as root.\033[m\n\n" | |
else | |
if !(root_privs) ; then | |
printf "\n\033[33mNote: You are running 'checksec.sh' as an unprivileged user.\n" | |
printf " Too see all processes, please run the script as root.\033[m\n\n" | |
fi | |
fi | |
exit 0 | |
;; | |
--proc) | |
if [ $have_readelf -eq 0 ] ; then | |
exit 1 | |
fi | |
if [ -z "$2" ] ; then | |
printf "\033[31mError: Please provide a valid process name.\033[m\n\n" | |
exit 1 | |
fi | |
cd /proc | |
printf "* System-wide ASLR" | |
aslrcheck | |
printf "* Does the CPU support NX: " | |
nxcheck | |
printf " COMMAND PID RELRO STACK CANARY NX/PaX PIE\n" | |
for N in `ps -Ao pid,comm | grep $2 | cut -b1-6`; do | |
if [ -d $N ] ; then | |
printf "%16s" `head -1 $N/status | cut -b 7-` | |
printf "%7d " $N | |
# read permissions? | |
if [ ! -r $N/exe ] ; then | |
if !(root_privs) ; then | |
printf "\033[31mNo read permissions for '/proc/$N/exe' (run as root).\033[m\n\n" | |
exit 1 | |
fi | |
if [ ! `readlink $N/exe` ] ; then | |
printf "\033[31mPermission denied. Requested process ID belongs to a kernel thread.\033[m\n\n" | |
exit 1 | |
fi | |
exit 1 | |
fi | |
proccheck $N | |
echo | |
fi | |
done | |
exit 0 | |
;; | |
--proc-libs) | |
if [ $have_readelf -eq 0 ] ; then | |
exit 1 | |
fi | |
if [ -z "$2" ] ; then | |
printf "\033[31mError: Please provide a valid process ID.\033[m\n\n" | |
exit 1 | |
fi | |
if !(isNumeric "$2") ; then | |
printf "\033[31mError: Please provide a valid process ID.\033[m\n\n" | |
exit 1 | |
fi | |
cd /proc | |
printf "* System-wide ASLR" | |
aslrcheck | |
printf "* Does the CPU support NX: " | |
nxcheck | |
printf "* Process information:\n\n" | |
printf " COMMAND PID RELRO STACK CANARY NX/PaX PIE\n" | |
N=$2 | |
if [ -d $N ] ; then | |
printf "%16s" `head -1 $N/status | cut -b 7-` | |
printf "%7d " $N | |
# read permissions? | |
if [ ! -r $N/exe ] ; then | |
if !(root_privs) ; then | |
printf "\033[31mNo read permissions for '/proc/$N/exe' (run as root).\033[m\n\n" | |
exit 1 | |
fi | |
if [ ! `readlink $N/exe` ] ; then | |
printf "\033[31mPermission denied. Requested process ID belongs to a kernel thread.\033[m\n\n" | |
exit 1 | |
fi | |
exit 1 | |
fi | |
proccheck $N | |
echo | |
libcheck $N | |
fi | |
exit 0 | |
;; | |
--kernel) | |
cd /proc | |
printf "* Kernel protection information:\n\n" | |
kernelcheck | |
exit 0 | |
;; | |
--fortify-file) | |
if [ $have_readelf -eq 0 ] ; then | |
exit 1 | |
fi | |
if [ -z "$2" ] ; then | |
printf "\033[31mError: Please provide a valid file.\033[m\n\n" | |
exit 1 | |
fi | |
# does the file exist? | |
if [ ! -e $2 ] ; then | |
printf "\033[31mError: The file '$2' does not exist.\033[m\n\n" | |
exit 1 | |
fi | |
# read permissions? | |
if [ ! -r $2 ] ; then | |
printf "\033[31mError: No read permissions for '$2' (run as root).\033[m\n\n" | |
exit 1 | |
fi | |
# ELF executable? | |
out=`file $2` | |
if [[ ! $out =~ ELF ]] ; then | |
printf "\033[31mError: Not an ELF file: " | |
file $2 | |
printf "\033[m\n" | |
exit 1 | |
fi | |
if [ -e /lib/libc.so.6 ] ; then | |
FS_libc=/lib/libc.so.6 | |
elif [ -e /lib64/libc.so.6 ] ; then | |
FS_libc=/lib64/libc.so.6 | |
elif [ -e /lib/i386-linux-gnu/libc.so.6 ] ; then | |
FS_libc=/lib/i386-linux-gnu/libc.so.6 | |
elif [ -e /lib/x86_64-linux-gnu/libc.so.6 ] ; then | |
FS_libc=/lib/x86_64-linux-gnu/libc.so.6 | |
else | |
printf "\033[31mError: libc not found.\033[m\n\n" | |
exit 1 | |
fi | |
FS_chk_func_libc=( $(readelf -s $FS_libc | grep _chk@@ | awk '{ print $8 }' | cut -c 3- | sed -e 's/_chk@.*//') ) | |
FS_functions=( $(readelf -s $2 | awk '{ print $8 }' | sed 's/_*//' | sed -e 's/@.*//') ) | |
FS_libc_check | |
FS_binary_check | |
FS_comparison | |
FS_summary | |
exit 0 | |
;; | |
--fortify-proc) | |
if [ $have_readelf -eq 0 ] ; then | |
exit 1 | |
fi | |
if [ -z "$2" ] ; then | |
printf "\033[31mError: Please provide a valid process ID.\033[m\n\n" | |
exit 1 | |
fi | |
if !(isNumeric "$2") ; then | |
printf "\033[31mError: Please provide a valid process ID.\033[m\n\n" | |
exit 1 | |
fi | |
cd /proc | |
N=$2 | |
if [ -d $N ] ; then | |
# read permissions? | |
if [ ! -r $N/exe ] ; then | |
if !(root_privs) ; then | |
printf "\033[31mNo read permissions for '/proc/$N/exe' (run as root).\033[m\n\n" | |
exit 1 | |
fi | |
if [ ! `readlink $N/exe` ] ; then | |
printf "\033[31mPermission denied. Requested process ID belongs to a kernel thread.\033[m\n\n" | |
exit 1 | |
fi | |
exit 1 | |
fi | |
if [ -e /lib/libc.so.6 ] ; then | |
FS_libc=/lib/libc.so.6 | |
elif [ -e /lib64/libc.so.6 ] ; then | |
FS_libc=/lib64/libc.so.6 | |
elif [ -e /lib/i386-linux-gnu/libc.so.6 ] ; then | |
FS_libc=/lib/i386-linux-gnu/libc.so.6 | |
elif [ -e /lib/x86_64-linux-gnu/libc.so.6 ] ; then | |
FS_libc=/lib/x86_64-linux-gnu/libc.so.6 | |
else | |
printf "\033[31mError: libc not found.\033[m\n\n" | |
exit 1 | |
fi | |
printf "* Process name (PID) : %s (%d)\n" `head -1 $N/status | cut -b 7-` $N | |
FS_chk_func_libc=( $(readelf -s $FS_libc | grep _chk@@ | awk '{ print $8 }' | cut -c 3- | sed -e 's/_chk@.*//') ) | |
FS_functions=( $(readelf -s $2/exe | awk '{ print $8 }' | sed 's/_*//' | sed -e 's/@.*//') ) | |
FS_libc_check | |
FS_binary_check | |
FS_comparison | |
FS_summary | |
fi | |
exit 0 | |
;; | |
*) | |
if [ "$#" != "0" ] ; then | |
printf "\033[31mError: Unknown option '$1'.\033[m\n\n" | |
fi | |
help | |
exit 1 | |
;; | |
esac | |
</pre> | |
<pre class="brush:plain"> | |
Establecemos permisos de ejecución:</br> | |
chmod +x checksec.sh</br> | |
Ejecutamos el script de acuerdo a los parámetros que tiene (ver función "help"). <br> | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# (C) 2008 Guy Rutenberg - http://www.guyrutenberg.com | |
# This is a script that creates backups of blogs. | |
DB_NAME= | |
DB_USER= | |
DB_PASS= | |
DB_HOST= | |
#no trailing slash | |
BLOG_DIR= | |
BACKUP_DIR= | |
echo -n "dumping database... " | |
mysqldump --user=${DB_USER} --password=${DB_PASS} --host=${DB_HOST} ${DB_NAME} \ | |
| bzip2 -c > ${BACKUP_DIR}/${DB_NAME}-$(date +%Y%m%d).sql.bz2 | |
if [ "$?" -ne "0" ]; then | |
echo -e "\nmysqldump failed!" | |
exit 1 | |
fi | |
echo "done" | |
echo -n "Creating tarball... " | |
tar -cjf ${BACKUP_DIR}/${BLOG_DIR##*/}-$(date +%Y%m%d).tar.bz2 ${BLOG_DIR} | |
if [ "$?" -ne "0" ]; then | |
echo -e "\ntarball creation failed!" | |
exit 1 | |
fi | |
echo "done"</pre> | |
<pre class="brush:perl"> | |
#!/usr/bin/perl -w | |
# Copyright 2000 George Shaffer ([email protected]) | |
# Anyone may use or modify this code for any purpose PROVIDED | |
# that as long as it is recognizably derived from this code, | |
# that the copyright notice, this comment and the immediately | |
# following comments on passwords remain intact and unchanged. | |
# No warrantees of any kind are expressed or implied. | |
# Please feel free to change anything from this point forward. | |
# I experimented at considerable length to find seed logic that | |
# was very random on Windows NT which generates a very small | |
# universe of process ID numbers ($$) compared to Unix. | |
srand(time() ^ ($$ + $$ << 21)); | |
# USER CHANGEABLE CONSTANTS FOLLOW | |
# Change $howMany to change the number of generated passwords. | |
$howMany = 10; | |
# Increase the default 7 to change the generated password size | |
# and extra letters will be added to the end. Decrease and | |
# you'll lose some or all of the second string of letters. | |
# Depending on the value of $addConsonants the actual | |
# password length may range from $siz to $siz + 2. | |
# Size interacts with other choices. If $addConsonants is false | |
# size will be fixed length and is achieved by truncation after | |
# checking for upper case and digits so short sizes (3 - 5) may | |
# not have the variability you desire. | |
$siz = 7; | |
# A $siz less than 3 creates an endless loop. | |
$siz = 3 if ($siz < 3); | |
# Change $addConsonats to 0 to prevent some extra consonants | |
# from being tacked on to letter sequences. Leave $addConsonants | |
# at 1 to sometimes add an extra consonant to letter sequences. | |
# If left at 1 the password size will vary from $siz to $siz+2. | |
$addConsonants = 1; | |
# Change $firstUpper to 0 to prevent the first character of each | |
# letter sequence from being upper case. Leave it as 1 if you | |
# want some of the first characters to be upper case. | |
$firstUpper = 1; | |
# Change $mixedCase to 1 to mix the case of all letters. | |
# $mixedCase is not random as subsequent checks force at | |
# least one upper and one lower case letter in each password. | |
# Leave it at 0 so all letters will be lower case or only | |
# the first or each letter sequence may be upper case. | |
$mixedCase = 0; | |
# By changing $symbolOdds from 0 to 10 you change the likelihood | |
# of having two numbers or a number and a symbol. At 0 you will | |
# always get 2 digits. At 1 you will usually only get one digit | |
# but will sometimes get a second digit or a symbol. At 10 you | |
# will always get two numbers or a number and a symbol with the | |
# about even chances that one of the two characters will be a | |
# symbol. The odds are affected by what characters are added to | |
# or removed from the $sym initialization string. | |
# The default is 7. | |
$symbolOdds = 7; | |
# Change $across to a 1 to print passwords across the screen. | |
# Leave $across as a 0 to print a single column down the screen. | |
$across = 0; | |
# Add or remove symbols to make passwords easier or harder | |
# to type. Delete the second set of digits to increase | |
# the relative frequency of symbols and punctuation. | |
# Add some vowels or consonants to really change the patterns | |
# but these will also get much harder to remember. | |
# If you change the symbol list you need to change the matching | |
# regular expression near the bottom of the program. | |
$sym = "~`!@#$%^&*()-_+=,.<>"; | |
$numb = "12345678901234567890" . $sym; | |
$lnumb = length($numb); | |
# USER CHANGEABLE CONSTANTS END - Changing the constants as | |
# specified above has been fairly well tested. Any changes | |
# below here and you are changing the logic of the program. | |
# You should be familiar with programming if you make changes | |
# after this point. | |
# Unless you plan to change the logic in the loop below, | |
# leave this next alone and control case with $firstUpper and | |
# $mixedCase above. $mixedCase supercedes if both are true. | |
$upr = "BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz"; | |
$cons = "bcdfghjklmnpqrstvwxyz"; | |
if ($mixedCase) { | |
$vowel = "AEIOUaeiou"; | |
$cons = $upr; | |
} else { | |
$vowel = "aeiou"; | |
} | |
$upr = $cons unless ($firstUpper); | |
$lvowel = length($vowel); | |
$lcons = length($cons); | |
$lupr = length($upr); | |
$realSize = $siz; | |
$realSize += 2 if ($addConsonants); | |
($across) ? ($down = " ") : ($down = "\n"); | |
$linelen = 0; | |
for ($j=0; $j<=$howMany; $j++) { | |
$pass = ""; | |
$k = 0; | |
for ($i=0; $i<=$siz; $i++) { | |
# The basic password structure is cvc99cvc. Depending on | |
# how $cons and $upr have been initialized above case will | |
# be all lower, first upper or random. | |
if ($i==0 or $i==2 or $i==5 or $i==7) { | |
if ($i==0 or $i==5) { | |
$pass .= substr($upr,int(rand($lupr)),1); | |
} else { | |
$pass .= substr($cons,int(rand($lcons)),1); | |
} | |
# The next will conditionally add up to 2 consonants | |
# pseudo randomly after the four "standard" consonants. | |
if ($addConsonants and (int(rand(4)) == 3) and $k < 2) { | |
$pass .= substr($cons,int(rand($lcons)),1); | |
$k++; | |
} | |
} | |
# Pad the password with letters if $siz is over 7. | |
if ($i > 7) { | |
if (int(rand(26)) <= 5) { | |
$pass .= substr($vowel,int(rand($lvowel)),1); | |
} else { | |
$pass .= substr($cons,int(rand($lcons)),1); | |
} | |
} | |
# Put the vowels in cvc99cvc. Case depends on how $vowel | |
# was initialized above. | |
$pass .= substr($vowel,int(rand($lvowel)),1) | |
if ($i==1 or $i==6); | |
# Change $symbolOdds initialization above to affect the | |
# number of numbers and symbols and their ratio. | |
if ($i==3 or $i==4) { | |
# If $symbolOdds is non zero take any character | |
# from the $numb string which has digits, symbols | |
# and punctuation. | |
if ($symbolOdds) { | |
$pass .= substr($numb,int(rand($lnumb)),1) | |
if (int(rand(10)) <= $symbolOdds); | |
} else { | |
# If $symbolOdds is zero keep trying until a | |
# a digit is found. | |
$n = ""; | |
until ($n =~ /[0-9]/) { | |
$n = substr($numb,int(rand($lnumb)),1); | |
} | |
$pass .= $n; | |
} | |
} | |
} | |
# Plan to use this password unless . . . | |
$skipThisOne = 0; | |
# Don't include two consecutive symbols or puntuation. | |
$skipThisOne = 1 if ($pass =~ /[~`!@#$%^&*()\-_+=,.<>]{2}/); | |
# Include at least one digit. | |
$skipThisOne = 1 unless ($pass =~ /[0-9]/); | |
# Include at least one lower case letter. | |
$skipThisOne = 1 unless ($pass =~ /[a-z]/); | |
# Conditionally insure at least one upper case character. | |
$skipThisOne = 1 | |
if (!($pass =~ /[A-Z]/) and ($firstUpper or $mixedCase)); | |
# If any test fails get another password. | |
if ($skipThisOne) { | |
$j--; | |
next; | |
} | |
# Check the password length. | |
$pass = substr($pass,0,$realSize) if (length($pass) > $realSize); | |
# Print the passwords in a single column or across | |
# the screen based on $down which is set based on the | |
# the value of $across. | |
if ($down ne "\n") { | |
# Don't wrap passwords or trailing whitespace. | |
if ($linelen + length($pass) + length($down) > 79) { | |
print "\n"; | |
$linelen = 0; | |
} | |
$linelen += length($pass) + length($down); | |
} | |
print "$pass$down"; | |
} | |
# Be sure to end the last line with an end of line. | |
print "\n" if $down ne "\n"; | |
</pre> | |
<pre class="brush:plain"> | |
Asignamos permiso de ejecución: chmod +x Password.pl </br> | |
Ejecutamos el Script: ./Password.pl </br> | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
CONF_FILE="/etc/firewall.conf" | |
# Configuracion Internet | |
INET_IF="eth0" | |
INET_TCP_PORTS="22 80 443 10050" | |
INET_UDP_PORTS="123" | |
PORT_FORWARDING="" # Formato: ExtPort:IntIP:IntPort:Protocol | |
# Configuracion LAN | |
LAN_IF="eth1" | |
LAN_NET="192.168.10.0/24" | |
PROXY="192.168.10.1:3128" | |
[ -f $CONF_FILE ] && source $CONF_FILE | |
IPTABLES=$(which iptables) | |
MODPROBE=$(which modprobe) | |
MODULES="ip_tables ip_conntrack ip_conntrack_ftp ip_conntrack_irc iptable_nat ip_nat_ftp" | |
case "$1" in | |
start) | |
echo "Setting firewall rules..." | |
# Cargamos los modulos necesarios | |
echo -n " * Loading kernel modules: " | |
for module in $MODULES; do | |
$MODPROBE $module | |
done | |
echo "done" | |
# Activamos el IP forwarding | |
echo -n " * Activating IP Forwarding support: " | |
echo "1" > /proc/sys/net/ipv4/ip_forward | |
echo "done" | |
# Eliminamos las reglas anteriores | |
echo -n " * Deleting firewall rules: " | |
$IPTABLES -F | |
$IPTABLES -X | |
$IPTABLES -t nat -F | |
$IPTABLES -t nat -X | |
$IPTABLES -t mangle -F | |
$IPTABLES -t mangle -X | |
echo "done" | |
# Ponemos que tipo de conexiones que vengan de inet aceptamos | |
echo -n " * Setting firewall port rules: " | |
for port in $INET_TCP_PORTS; do | |
$IPTABLES -A INPUT -i $INET_IF -p tcp --dport $port -j ACCEPT | |
done | |
for port in $INET_UDP_PORTS; do | |
$IPTABLES -A INPUT -i $INET_IF -p udp --dport $port -j ACCEPT | |
done | |
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT | |
# Acepto VPN y LAN | |
$IPTABLES -A INPUT -i $LAN_IF -j ACCEPT | |
$IPTABLES -A INPUT -i lo -j ACCEPT | |
$IPTABLES -A INPUT -i tun+ -j ACCEPT | |
# Acepto ICMP | |
$IPTABLES -A INPUT -p icmp -j ACCEPT | |
# No permito conexiones a los demas puertos desde inet | |
$IPTABLES -A INPUT -j REJECT | |
echo "done" | |
echo -n " * Activating Port Forwarding: " | |
if [[ -n "$PORT_FORWARDING" ]]; then | |
for i in $PORT_FORWARDING; do | |
extport=$(echo $i | awk -F ':' '{ print $1 }') | |
intip=$(echo $i | awk -F ':' '{ print $2 }') | |
intport=$(echo $i | awk -F ':' '{ print $3 }') | |
proto=$(echo $i | awk -F ':' '{ print $4 }') | |
$IPTABLES -t nat -A PREROUTING -p $proto -i $INET_IF --dport $extport -j DNAT --to $intip:$intport | |
done | |
fi | |
echo "done" | |
# Activamos el NAT | |
echo -n " * Activating NAT: " | |
$IPTABLES -t nat -A POSTROUTING -o $INET_IF -j MASQUERADE | |
$IPTABLES -A FORWARD -i $LAN_IF -j ACCEPT | |
$IPTABLES -t mangle -A FORWARD -m tcp -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu | |
echo "done" | |
if [[ -n "$PROXY" ]]; then | |
echo -n " * Activating Transparent Proxy: " | |
$IPTABLES -t nat -A PREROUTING -i $LAN_IF ! -d $LAN_NET -p tcp -m tcp --dport 80 -j DNAT --to-destination $PROXY | |
echo "done" | |
fi | |
# HTB-GEN | |
#echo -n " * Activating bandwidth control: " | |
#/usr/local/bin/htb-gen all | |
#echo "done" | |
;; | |
stop) | |
echo -n " * Stopping firewall: " | |
$IPTABLES -F | |
$IPTABLES -X | |
$IPTABLES -t nat -F | |
$IPTABLES -t nat -X | |
$IPTABLES -t mangle -F | |
$IPTABLES -t mangle -X | |
echo "done" | |
;; | |
restart) | |
$0 stop | |
echo -n " * Sleeping a few seconds before setting the rules again: " | |
sleep 2 | |
echo "done" | |
$0 start | |
;; | |
status) | |
$IPTABLES -L | |
$IPTABLES --table nat --list --exact --verbose --numeric --line-numbers | |
;; | |
*) | |
echo "Usage: $0 {start|stop|restart|status}" | |
exit 1 | |
esac | |
exit 0</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
UbicacionISO=$1 | |
echo "Ingrese el path con la iso incluida (ej /home/usuario/cd.iso): " | |
read iso | |
echo "Ingrese el dispositivo cd-rw|dvd-rw (ej /dev/sr0 /dev/scd0 etc):" | |
read dispositivo | |
if [ -e "$iso" ]; then | |
if [ -r $dispositivo ]; then | |
if [ -z $(which wodim) ];then | |
echo "Wodim no esta instalado" | |
exit | |
else | |
root=`id | cut -d= -f2 | cut -d'(' -f1` | |
if [ "$root" -eq 0 ]; then | |
echo "Grabando $UbicacionISO" | |
ionice -c1 wodim -v -eject dev="$dispositivo" -data "$iso" | |
else | |
echo "Debe ser root para grabar la imagen usando prioridad de e/s" | |
echo "Desea grabar de todas maneras sin usar prioridad de e/s (s/n)" | |
read op | |
if [ "$op" = s ]; then | |
wodim -v -eject dev="$dispositivo" -data "$iso" | |
fi | |
fi | |
fi | |
else | |
echo "No tiene permisos sobre el dispositivo" | |
fi | |
else | |
echo "Iso no existe"/ | |
fi | |
</pre> | |
<pre class="brush:plain"> | |
Asignamos permiso de ejecución </br> | |
chmod +x grabaiso.bash </br> | |
Ejecutamos el script </br> | |
./grabaiso.bash | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/sh | |
# | |
# syslock.cl | |
# Copyright GPL V.3 | |
# 06/03/2010 | |
# Version: 1.0.10 | |
# | |
# --------------------------------------------------------------------- | |
# | |
NOW="$(date +"%Y%m%d")" | |
MyUSER="" #USUARIO | |
MyPASS="" # PASSWORD | |
MyHOST="localhost" # HOST | |
MYSQL="$(which mysql)" | |
MYSQLDUMP="$(which mysqldump)" | |
CHOWN="$(which chown)" | |
CHMOD="$(which chmod)" | |
GZIP="$(which gzip)" | |
DEST="/home/mysqldump/unaxuna" #DIR DE DESTINO | |
MBD="$DEST/$NOW" | |
HOST="$(hostname)" | |
FILE="" | |
DBS="" | |
OMITE="test" # OMITIR BASE PARA RESPALDO | |
[ ! -d $MBD ] &amp;&amp; mkdir -p $MBD || : | |
$CHOWN 0.0 -R $DEST | |
$CHMOD 0600 $DEST | |
DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')" | |
for db in $DBS | |
do | |
skipdb=-1 | |
if [ "$OMITE" != "" ]; | |
then | |
for i in $OMITE | |
do | |
[ "$db" == "$i" ] &amp;&amp; skipdb=1 || : | |
done | |
fi | |
if [ "$skipdb" == "-1" ] ; then | |
FILE="$MBD/$NOW.$db.gz" | |
$MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $db | $GZIP -9 &gt; $FILE | |
fi | |
done</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
umask 0 | |
mkdir -p /shared/tools/gcc/gcc-4.6.2 | |
cd /shared/tools/gcc/gcc-4.6.2 | |
wget http://projects.joelinoff.com/gcc-4.6.2/bld.sh | |
chmod a+x bld.sh | |
./bld.sh 2>&1 | tee bld.log | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/sh | |
# chkconfig: 2345 99 01 | |
# Description: Sends an email at system start and shutdown | |
############################################# | |
# # | |
# Send an email on system start/stop to # | |
# a user. # | |
# # | |
############################################# | |
EMAIL="[email protected]" | |
RESTARTSUBJECT="["`hostname`"] - System Startup" | |
SHUTDOWNSUBJECT="["`hostname`"] - System Shutdown" | |
RESTARTBODY="This is an automated message to notify you that "`hostname`" started successfully. | |
Start up Date and Time: "`date` | |
SHUTDOWNBODY="This is an automated message to notify you that "`hostname`" is shutting down. | |
Shutdown Date and Time: "`date` | |
LOCKFILE=/var/lock/subsys/SystemEmail | |
RETVAL=0 | |
# Source function library. | |
. /etc/init.d/functions | |
stop() | |
{ | |
echo -n $"Sending Shutdown Email: " | |
echo "${SHUTDOWNBODY}" | mail -s "${SHUTDOWNSUBJECT}" ${EMAIL} | |
RETVAL=$? | |
if [ ${RETVAL} -eq 0 ]; then | |
rm -f ${LOCKFILE} | |
success | |
else | |
failure | |
fi | |
echo | |
return ${RETVAL} | |
} | |
start() | |
{ | |
echo -n $"Sending Startup Email: " | |
echo "${RESTARTBODY}" | mail -s "${RESTARTSUBJECT}" ${EMAIL} | |
RETVAL=$? | |
if [ ${RETVAL} -eq 0 ]; then | |
touch ${LOCKFILE} | |
success | |
else | |
failure | |
fi | |
echo | |
return ${RETVAL} | |
} | |
case $1 in | |
stop) | |
stop | |
;; | |
start) | |
start | |
;; | |
*) | |
esac | |
exit ${RETVAL} | |
</pre> | |
<pre class="brush:plain"> | |
Damos los permisos necesarios </br> | |
chmod u+x /etc/init.d/mailme </br> | |
Para probarlo podemos ejecutar: </br> | |
/etc/init.d/mailme start </br> | |
/etc/init.d/mailme stop </br> | |
Configuramos con chkconfig para que corra en un nivel determinado del sistema </br> | |
chkconfig --levels 3 mailme on </br> | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
ifnetcat=`type -p netcat` | |
if [ -z $ifnetcat ]; then | |
echo -e "\n\nNetcat necesita estar instalado\n" | |
exit 0 | |
fi | |
echo "Realizando escaneo" | |
IFS=$'\n' && for f in `find . -type f -exec md5sum "{}" \;`; do echo $f | sed -r 's/^[^ ]+/Checking:/'; echo $f | cut -f1 -d' ' | nc hash.cymru.com 43 ; done | |
echo "Escaneo finalizado" | |
exit 0 | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
echo "Stopping firewall and allowing everyone..." | |
iptables -F | |
iptables -X | |
iptables -t nat -F | |
iptables -t nat -X | |
iptables -t mangle -F | |
iptables -t mangle -X | |
iptables -P INPUT ACCEPT | |
iptables -P FORWARD ACCEPT | |
iptables -P OUTPUT ACCEPT | |
</pre> | |
<pre class="brush:plain"> | |
Damos permisos de ejecución <br/> | |
chmod +x flush.bash <br/> | |
Tiramos el firewall <br/> | |
./flush.bash <br/> | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# Script de borrado interactivo. | |
# Leo Gutiérrez Ramírez. [email protected] | |
function rmsecure() | |
{ | |
select archivos in * "SALIR" | |
do | |
if [ "${archivos}" = "SALIR" ] | |
then | |
exit 0; | |
elif [[ -n "${archivos}" ]] | |
then | |
sudo rm -rvi "${archivos}" || { | |
echo -e "Error borrando archivo : ${archivos}"; | |
exit 0; | |
} | |
clear; | |
rmsecure; | |
else | |
echo -e "Error eligiendo archivo."; | |
fi | |
done | |
} | |
clear; | |
rmsecure;</pre> | |
<hr/><pre class="brush:bash">MYSQL_PASS="YOUR_PASSWORD_HERE"; | |
echo "+Updating apt-get..." | |
apt-get update | |
echo "+Installing SSH..." | |
apt-get install -q -y ssh | |
echo "+Changing default SSH port..." | |
sed -i 's/Port 22/Port 28/' /etc/ssh/sshd_config | |
/etc/init.d/ssh restart | |
echo "+Installing Apache2..." | |
apt-get install -q -y apache2 | |
sed -i 's/ServerTokens Full/ServerTokens Prod/' /etc/apache2/conf.d/security | |
sed -i 's/ServerSignature On/ServerSignature Off/' /etc/apache2/conf.d/security | |
sed -i 's/TraceEnable On/TraceEnable Off/' /etc/apache2/conf.d/security | |
/etc/init.d/apache2 reload | |
a2enmod rewrite | |
/etc/init.d/apache2 restart | |
echo "+Installing PHP5..." | |
apt-get install -q -y php5 | |
echo "+Securing PHP.ini file..." | |
sed -i 's/disable_functions =/disable_functions = show_source, system, exec/' /etc/php5/apache2/php.ini | |
sed -i 's/expose_php = On/expose_php = Off/' /etc/php5/apache2/php.ini | |
sed -i 's/display_errors = On/display_errors = Off/' /etc/php5/apache2/php.ini | |
sed -i 's/log_errors = Off/log_errors = On/' /etc/php5/apache2/php.ini | |
sed -i 's/allow_url_fopen = On/allow_url_fopen = Off/' /etc/php5/apache2/php.ini | |
echo "+Installing MySQL Server..." | |
DEBIAN_FRONTEND='noninteractive' apt-get install -q -y mysql-server | |
mysqladmin -u root password $MYSQL_PASS | |
apt-get install -q -y php5-mysql | |
mysql_secure_installation | |
history -c | |
echo "+Installation Completed!"</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
ifespeak=`type -p espeak` | |
if [ -z $ifespeak ]; then | |
echo "Para mejor funcionamiento necesita tener instalado espeak" | |
echo "sudo apt-get install espeak" | |
echo "sudo yum install espeak" | |
echo "Intentalo nuevamente" | |
exit 1 | |
fi | |
NOMBRE=`cat /etc/passwd | grep "^$LOGNAME" | cut -d: -f5 | cut -d' ' -f1` | |
HORA=`date | cut -c12-13 | tr -d ' '` | |
tiempo=`date +%H:%M` | |
dia=`date +%d` | |
mes=`date +%m` | |
ano=`date +%Y` | |
if expr '$HORA <= 4' > /dev/null | |
then | |
echo 'Buenas noches, '$NOMBRE | espeak -v es-la -s 150 2>/dev/null | |
sleep=1 | |
echo 'Son las, '$tiempo',, horas,, del '$dia',,,, del '$mes',,,, de '$ano'' | espeak -v es-la -s 140 2>/dev/null | |
sleep=1 | |
echo 'el sistema operativo esta listo para usarse' | espeak -v es-la -s 150 2>/dev/null | |
sleep=1 | |
echo ',,,,que disfrutes tu sesión en Debian' | espeak -v es-la -s 140 2>/dev/null | |
elif expr '$HORA < = 11' > /dev/null ] | |
then | |
echo 'Buenos dias, '$NOMBRE | espeak -v es-la -s 150 | |
sleep=1 | |
echo 'Son las, '$tiempo', horas,, del '$dia',,,, del '$mes',,,, de '$ano'' | espeak -v es-la -s 140 | |
sleep=1 | |
echo 'el sistema operativo esta listo para usarse' | espeak -v es-la -s 150 | |
sleep=1 | |
echo ',,,,que disfrutes tu sesión en Debian' | espeak -v es-la -s 140 | |
elif expr '$HORA < = 18' > /dev/null | |
then | |
echo 'Buenas tardes, '$NOMBRE | espeak -v es-la -s 150 | |
sleep=1 | |
echo 'Son las, '$tiempo', horas,, del '$dia',,,, del '$mes',,,, de '$ano'' | espeak -v es-la -s 140 | |
sleep=1 | |
echo 'el sistema operativo esta listo para usarse' | espeak -v es-la -s 150 | |
sleep=1 | |
echo ',,,,que disfrutes tu sesión en Debian' | espeak -v es-la -s 140 | |
elif expr '$HORA < = 24' > /dev/null | |
then | |
echo 'Buenas noches, '$NOMBRE | espeak -v es-la -s 150 | |
sleep=1 | |
echo 'Son las, '$tiempo', horas,, del '$dia',,,, del '$mes',,,, de '$ano'' | espeak -v es-la -s 140 | |
sleep=1 | |
echo 'el sistema operativo esta listo para usarse' | espeak -v es-la -s 150 | |
sleep=1 | |
echo ',,,,que disfrutes tu sesión en Debian' | espeak -v es-la -s 140 | |
fi | |
</pre> | |
<pre class="brush:plain"> | |
El script detecta 3 zonas horarias <br/> | |
1. Buenos días <br/> | |
2. Buenas tardes<br/> | |
3. Buenas noches<br/> | |
Dependiendo de que hora sea <br/> | |
Damos permisos de ejecución <br/> | |
chmod +x habla.bash </br> | |
Ejecutamos el script <br/> | |
./habla.bash | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash - | |
#=============================================================================== | |
# | |
# FILE: cdprompt.sh | |
# | |
# USAGE: ./cdprompt.sh | |
# | |
# DESCRIPTION: Cambio de directorios interactivamente. | |
# | |
# OPTIONS: --- | |
# REQUIREMENTS: --- | |
# BUGS: --- | |
# NOTES: --- | |
# AUTHOR: |Leo Gutiérrez R.| (), |leorocko13[at]hotmail| | |
# COMPANY: | |
# CREATED: 02/26/2011 01:51:28 AM CST | |
# REVISION: --- | |
#=============================================================================== | |
select directorio in */ "SALIR" | |
do | |
if [ "$directorio" = "SALIR" ] | |
then | |
break; | |
elif [[ -n "$directorio" ]] | |
then | |
cd "$directorio" | |
break; | |
else | |
echo -e "\aError de opción."; | |
break; | |
fi | |
done</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# Leo Gutiérrez R. | |
# Script para navegar por sobre los dispositivos USB en el sistema. | |
# Uso personal. | |
select archivo in `ls -1 /media/ | grep -v "^cd$" | grep -v "^dvd$" | grep -v "^fl$" | grep -v "^ubuntu$" | grep -v "^windows$"` | |
do | |
if [ -n "$archivo" ] | |
then | |
cd /media/"$archivo" | |
break; | |
else | |
echo -e "Error eligiendo dispositivo"; | |
exit 1; | |
fi | |
done</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
if [ $# -ne 1 ] | |
then | |
echo "Uso ./mitm.sh [ dirección mac ]" | |
exit | |
fi | |
mac=$1 | |
while true | |
do | |
entradaRouter=$( arp -a | grep 192.168.1.1 | cut -d' ' -f4 ) | |
if [ $mac != $entradaRouter ] | |
then | |
echo “Atento la Mac ha cambiado” | |
ifconfig [ dispositivo red, ejemplo eth0 ] down | |
fi | |
sleep 2 | |
done | |
</pre> | |
<pre class="brush:plain"> | |
Damos permisos de ejecución: chmod +x mitm.sh <br/> | |
Ejecutamos el script: ./mitm.sh [ dirección mac ] <br/> | |
Ejemplo: ./mitm.sh 00:02:cf:ce:c6:1a | |
</pre> | |
<hr/><pre class="brush:bash">#!/usr/bin/env bash | |
# Script para extraer archivos | |
# JuszR [email protected] | |
# GPL | |
if [ "$#" -lt 1 ]; then | |
echo -ne "\n\tUso:" | |
echo -e "\n\t$(basename $0) [archivo] (.tar, .rar, .bz2...)" | |
echo "" | |
exit 1 | |
fi | |
if [ -f $1 ] ; then | |
case $1 in | |
*.tar.bz2 | *.tbz2) tar xvjf $1 ;; | |
*.tar.gz) tar xvzf $1 ;; | |
*.bz2) bunzip2 $1 ;; | |
*.rar) unrar x $1 ;; | |
*.gz) gunzip $1 ;; | |
*.tar) tar xvf $1 ;; | |
*.tgz) tar xvzf $1 ;; | |
*.zip) unzip $1 ;; | |
*.Z) uncompress $1 ;; | |
*.7z) 7z x $1 ;; | |
*) echo "'$1' no puede ser extraido" ;; | |
esac | |
else | |
echo "'$1' no es un archivo valido" | |
fi</pre> | |
<pre class="brush:plain"> | |
Para realizar la extracción, el script se utiliza de la siguiente manera: </br> | |
./extractor.bash archivo.ext <br/> | |
</pre> | |
<hr/><pre class="brush:bash">#!/usr/bin/env bash | |
# Colores en bash | |
# JuszR [email protected] | |
# GPL | |
# Variables | |
txtund=$(tput sgr 0 1) # Subrayado | |
txtbld=$(tput bold) # Negrita | |
bldred=${txtbld}$(tput setaf 1) # rojo | |
bldblu=${txtbld}$(tput setaf 4) # azul | |
bldwht=${txtbld}$(tput setaf 7) # blanco | |
txtrst=$(tput sgr0) # Resetear | |
info=${bldwht}*${txtrst} # Feedback | |
pass=${bldblu}*${txtrst} | |
warn=${bldred}!${txtrst} | |
echo "Ejemplos de colores" | |
echo -e "$(tput bold) norm negr subr tput-colores$(tput sgr0)" | |
for i in $(seq 1 7); do | |
echo " $(tput setaf $i)Texto$(tput sgr0) $(tput bold)$(tput setaf $i)Texto$(tput sgr0) $(tput sgr 0 1)$(tput setaf $i)Texto$(tput sgr0) \$(tput setaf $i)" | |
done | |
echo -e '$(tput bold)' 'Para Negrita' | |
echo -e '$(tput sgr 0 1)' 'Para Subrayado' | |
echo -e "Ejemplo: " | |
echo -e "$(tput bold) Negrita" "$(tput sgr 0 1)Subrayado" | |
</pre> | |
<pre class="brush:plain"> | |
Para observar la salida del script <br/> | |
chmod +x colores.bash <br/> | |
./colores.bash | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# Leo Gutiérrez R. | |
# Script para comprobar si un proceso está corriendo. | |
[ $# -ne 1 ] && { | |
cat << EOF | |
Forma de ejecución: `basename $0` service | |
EOF | |
exit 1; | |
} | |
[ -f "/var/run/daemons/$1" ] && { | |
echo -e "\"$1\" running."; | |
} || { | |
echo -e "\"$1\" stopped."; | |
} | |
exit 0; | |
</pre> | |
<pre class="brush:plain"> | |
Damos permisos de ejecución </br> | |
chmod +x Comprueba.bash </br> | |
Ejecutamos el script </br> | |
./Comprueba.bash [ servicio ] </br> | |
./Comprueba.bash mysqld </br> | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
[ ${UID} != 0 ] &amp;&amp; { | |
echo -e "Se requieren privilegios de Root"; | |
exit 1; | |
} | |
pacman -Qei | sed -n "s/^Name.*\:\s\(.*\)/\1/p" &gt; nombres.txt | |
pacman -Qei | sed -n "s/^Version.*\:\s\(.*\)/\1/p" &gt; versiones.txt | |
Xdialog --title "Desinstalar paquetes" --menu "Elija su paquete:" 24 51 6 $(paste nombres.txt versiones.txt) 2&gt; /tmp/menu.tmp.$$ | |
retval=$? | |
choice=`cat /tmp/menu.tmp.$$` | |
rm -f nombres.txt | |
rm -f versiones.txt | |
rm -f /tmp/menu.tmp.$$ | |
case "$retval" in | |
1) | |
exit 0; | |
;; | |
255) | |
exit 0; | |
;; | |
esac | |
yes | pacman -R "${choice}" &amp;&amp; { | |
Xdialog --title "Desinatalar paquetes" --msgbox "${choice} desinstalado con éxito." 10 100 | |
} || { | |
Xdialog --title "Desinatalar paquetes" --msgbox "${choice} no se pudo desinstalar." 10 100 | |
exit 1; | |
} | |
exit 0;</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# Script para instalar paquetes en Perl. | |
function getch() | |
{ | |
OLD_STTY=`stty -g` | |
stty cbreak -echo | |
look=`dd if=/dev/tty bs=1 count=1 2&gt;/dev/null` | |
stty $OLD_STTY | |
} | |
function installModule() | |
{ | |
sudo perl Makefile.PL | |
sudo make | |
sudo make test | |
sudo make install | |
} | |
function modins() | |
{ | |
archivo= | |
select archivo in *.tar.gz "SALIR" | |
do | |
if [ "${archivo}" = "SALIR" ] | |
then | |
exit 0; | |
elif [[ -n "${archivo}" ]] | |
then | |
echo -e "Elegiste : ${archivo}"; | |
tar zxvf "${archivo}" &amp;&gt; /dev/null || { | |
echo -e "Error descomprimiendo [ ${archivo} ]"; | |
exit 1; | |
} | |
cd "${archivo%\.tar.gz}" 2&gt; /dev/null || { | |
echo -e "\aError abriendo directorio ${archivo%%.*}"; | |
exit 1; | |
} | |
installModule; | |
echo -e "\E[31;47mMódulo instalado. Presione una tecla para continuar."; | |
tput sgr0; | |
getch; | |
break; | |
else | |
echo -e "Error eligiendo archivo."; | |
exit 0; | |
fi | |
done | |
} | |
modins; | |
exit 0;</pre> | |
<hr/><pre class="brush:bash">#! /bin/bash | |
if test $# -ge 1 | |
then | |
echo "Este Script no necestia parametros" | |
exit 0 | |
else | |
ypcat passwd | awk -F: ' NR &gt; 1 { vec[$4] +=1} | |
END { VAN=1 | |
for (x in vec) | |
if (VAN==1) | |
{MAYOR=vec | |
; | |
GRUPO=x; | |
VAN=0} | |
else | |
if (MAYOR &lt; vec | |
) | |
{MAYOR=vec | |
; | |
GRUPO=x;} | |
print GRUPO" " MAYOR+1 | |
}' &gt; borrar | |
VAR1=`cat borrar | cut -d" " -f1` | |
VAR2=`cat borrar | cut -d" " -f2` | |
VAR3=`ypcat group | grep $VAR1 | cut -d":" -f1` | |
echo " El grupo $VAR3 tiene la mayor cantidad de usuarios con un total de | |
$VAR2" | |
rm borrar | |
exit 0 | |
fi</pre> | |
<hr/><pre class="brush:bash">#! /bin/bash | |
if test $# -ge 1 | |
then | |
echo "Este Script no utiliza parametros" | |
exit 0 | |
else | |
clear | |
while true | |
do | |
echo " **********************************************" | |
echo " * *" | |
echo " * Seleccione una accion a realizar *" | |
echo " * *" | |
echo " **********************************************" | |
echo " * *" | |
echo " * Presione (A) para un Reporte del Sistema *" | |
echo " * Presione (B) para un Reporte de Procesos *" | |
echo " * Presione (C) para un Reporte de Usuarios *" | |
echo " * Presione (X) para salir *" | |
echo " * *" | |
echo " **********************************************" | |
read op | |
clear | |
#VARIABLES DE ENTORNO UTILIZADAS EN A) | |
#Tamaño del File System expresado en Kbytes | |
TAM_FS=`df -l --block-size=1024 | awk 'BEGIN{cant=0} {cant+=$2} END{print | |
"Tamaño del file system: "cant}'` | |
#Porcentaje del disco usado | |
PORC_DISCO_USAD=`df -l | awk 'BEGIN{cant=0} {cant+=$5} END{print | |
"Porcentaje del disco utilizado: "cant, "\tLibre: "100-cant}'` | |
#Tamaño del directorio actual | |
TAM_DIR_AC=`ls -l --block-size=1024 | awk 'BEGIN{cant=0} {cant+=$5} | |
END{print cant}'` | |
#Cantidad de archivos en el dir actua | |
CANT_ARCH_DIR_AC=`ls -l | cut -f1 -d" " | grep ^-......... | awk 'END{print | |
NR}'` | |
#Cantidad de subdirectorios en el dir actual | |
CANT_SUBDIR_AC=`ls -l | cut -f1 -d" " | grep ^d......... | awk 'END{print | |
NR}'` | |
#Fecha del reporte | |
FCHA_REP=`date '+Fecha del reporte: %d/%m/%y'` | |
#VARIABLES DE ENTORNO UTILIZADAS EN B) | |
#Cantidad de procesos en ejecucion | |
CANT_PROC_EJEC=`ps -aux | wc -l` | |
#Tamanio total de la memoria | |
TAM_TOT=`free -t | cut -f2 -d":" | cut -d" " -f7 | sort | awk 'END{print}'` | |
#Porcentaje de memoria utilizada | |
TAM_MEM_USA=`ps -aux | awk 'BEGIN{cant=0} {cant+=$4} END{print "Porcentaje | |
de memoria utilizado: "cant, "\tLibre: "100-cant}'` | |
#Uso de CPU | |
USO_CPU=`ps -aux | awk 'BEGIN{cant=0} {cant+=$3} END{print "Uso de CPU: | |
"cant}'` | |
#Usuario que utiliza mayor cantida de memoria | |
MEM_USU=`ps -aux | awk ' NR &gt; 1 { vec[$1] +=$4} | |
END { VAN=1 | |
for (x in vec) | |
if (VAN==1) | |
{MAYOR=vec | |
; | |
GRUPO=x; | |
VAN=0} | |
else | |
if (MAYOR &lt; vec | |
) | |
{MAYOR=vec | |
; | |
GRUPO=x;} | |
print "El Usuario que usa mayor cantidad de memoria: " GRUPO | |
}'` | |
#Usuarios con mayor cantidad de procesos | |
CANT_PROC=`ps -aux | awk ' NR &gt;1 { vec[$1] +=1} | |
END { BAN=1 | |
for (x in vec) | |
if (BAN==1) | |
{MAYOR=vec | |
; | |
GRUPO=x; | |
BAN=0} | |
else | |
if (MAYOR &lt; vec | |
) | |
{MAYOR=vec | |
; | |
GRUPO=x;} | |
print "Usuario con mayor cantidad de procesos: " GRUPO " con " MAYOR " | |
procesos" | |
}'` | |
#VARIABLES DE ENTORNO UTILIZADAS EN C) | |
#Cantidad total de usuarios | |
CANT_USER_TOT=`ypcat passwd | awk 'END{print NR}'` | |
#Cantidad de usuarios logueados | |
CANT_USER_LOG=`who | cut -f1 -d" " | sort | uniq | awk 'END{print NR}'` | |
#El usuario con que lleva mas tiempo logueado | |
USER_MAS_LOG=`who | awk '{ print $5 "\t"$1}' | sort | awk ' NR==1 ' | cut | |
-f2` | |
#COMIENZA EL MENU DE OPCIONES | |
case $op in | |
#EMPIEZA A EJECUTAR A | |
A|a) | |
echo " A)" | |
echo " **********************************************************" | |
echo " * Reporte del Sistema de Archivos *" | |
echo " | |
*--------------------------------------------------------*" | |
echo " * $TAM_FS *" | |
echo " * *" | |
echo " * $PORC_DISCO_USAD *" | |
echo " * | |
*" | |
echo " * Tamaño del directorio actual: $TAM_DIR_AC (Kbytes) | |
*" | |
echo " * | |
*" | |
echo " * Cantidad de archivos en el directorio actual: | |
$CANT_ARCH_DIR_AC *" | |
echo " * | |
*" | |
echo " * Cantidad de sub-directorios en el directorio actual: | |
$CANT_SUBDIR_AC *" | |
echo " | |
*--------------------------------------------------------*" | |
echo " * $FCHA_REP *" | |
echo " | |
**********************************************************" | |
sleep 12 | |
;; | |
#TERMINA DE EJECUTAR A | |
#EMPIEZO A EJECUTAR B | |
B|b) | |
echo " B)" | |
echo " | |
******************************************************************" | |
echo " * Reporte de Procesos | |
*" | |
echo " | |
*----------------------------------------------------------------*" | |
echo " * Cantidad de procesos en ejecucion:$CANT_PROC_EJEC | |
*" | |
echo " * | |
*" | |
echo " * Tamaño total de la memoria:$TAM_TOT | |
*" | |
echo " * | |
*" | |
echo " * $TAM_MEM_USA *" | |
echo " * | |
*" | |
echo " * $USO_CPU | |
*" | |
echo " * | |
*" | |
echo " * $MEM_USU *" | |
echo " * | |
*" | |
echo " * $CANT_PROC *" | |
echo " | |
*----------------------------------------------------------------*" | |
echo " * $FCHA_REP *" | |
echo " | |
******************************************************************" | |
sleep 12;; | |
#TERMINO DE EJECUTAR B | |
#EMPIEZO A EJECUTAR C | |
C|c) | |
echo " C)" | |
echo " | |
******************************************************************" | |
echo " * Reporte de Usuarios | |
*" | |
echo " | |
*----------------------------------------------------------------*" | |
echo " * Cantidad total de usuarios: $CANT_USER_TOT | |
*" | |
echo " * | |
*" | |
echo " * Cantidad de usuarios logueados: $CANT_USER_LOG | |
*" | |
echo " * | |
*" | |
echo " * El usuario que lleva mas tiempo logueado: | |
$USER_MAS_LOG *" | |
echo " | |
*----------------------------------------------------------------*" | |
echo " * $FCHA_REP *" | |
echo " | |
******************************************************************" | |
sleep 12;; | |
#EMPIEZA A EJECUTAR X | |
X|x) echo "Fin del programa" | |
break | |
sleep 1;; | |
*) echo "opcion incorrecta" | |
sleep 1;; | |
esac | |
clear | |
done | |
exit 0 | |
fi</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# mailip.sh | |
# Script designed to read your public IP address from www.whatismyip.org | |
# at intervals and notify any changes by sending an email for you. | |
# wget and sendEmail with tsl support must be installed on your system. | |
# Usage: mailip.sh (if it can be found in your session environment PATH) | |
# or if you want to run it on the background: nohup mailip.sh &amp;&gt;/dev/null &amp; | |
# Please, you must modify the next variables to suit your needs: | |
[email protected] # An account to send the email with the ip. | |
RECEIVE=$DELIVER # An account to get the email. Don't modify to send it to the same address you especified above. | |
SMTP_SERVER=server.address.com:port # The smtp server's port of the emailer account. Example: smtp.gmail.com:587 | |
MAIL_USER=account-user | |
MAIL_PASS=UseR.p4s5vooRd- | |
TLS=yes # yes|no Does the mail server accept/require TLS or SSL encryption? | |
# The script starts here. | |
PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin # paranoia | |
READ_IP() | |
{ | |
wget -q -t 4 --no-proxy --no-cache --no-cookies -o /dev/null -O /var/publicip http://www.whatismyip.org | |
if [ $? -ne 0 ] ; then sleep 5m ; READ_IP ; fi | |
} | |
SEND_IP() | |
{ | |
sendEmail -q -f $DELIVER -t $RECEIVE -u $SUBJECT -m $MESSAGE -s $SMTP_SERVER -xu $MAIL_USER -xp $MAIL_PASS -o tls=$TLS | |
if [ $? -ne 0 ] ; then sleep 5m ; SEND_IP ; fi | |
} | |
if [ $DELIVER == [email protected] ] | |
then echo ; echo " Warning! You must carefully edit some variables of the script first of all." ; echo | |
else | |
if [ ! -e /var/publicip-sent ] | |
then echo 0 &gt; /var/publicip-sent | |
fi | |
while true | |
do READ_IP ; sleep 12s ; sync # paranoia | |
if [ `cat /var/publicip` != `cat /var/publicip-sent` ] | |
then | |
SUBJECT=`hostname ; echo "IP changed:" ; cat /var/publicip` | |
MESSAGE=`cat /var/publicip ; echo ; date +%F\ %T` | |
SEND_IP &amp;&amp; mv /var/publicip /var/publicip-sent | |
else rm /var/publicip | |
fi | |
sleep 60m | |
done | |
fi | |
# That was all. | |
# Perhaps you didn't like having to type your email password directly in the script, | |
# a workaround could be to assign a value like MAIL_PASS=`cat ~/password.txt` , then | |
# write a file called ~/password.txt with only the password in it and run the script. | |
# Don't forget that the password plain text file should only be readable by you, | |
# modificate it's permissions with chmod if needed.</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
HELP_MESSAGE() | |
{ | |
clear;echo;echo "This script will show you the the signal quality of a wlan device until you" | |
echo "press control+c , if that info can be obtained with the iwconfig command." | |
echo;echo "This is useful when orienting an antenna or test your connection." | |
echo;echo "This script can use any mode your device support and will run without releasing" | |
echo "any established connection." | |
echo;echo "Usage: $0 DEV" | |
echo "where DEV is any of your wlan devices as wlan0, ath0, eth1...";echo | |
} | |
ERROR() | |
{ | |
echo "Sorry, something went wrong. Try $0 --help" ; exit | |
} | |
RUN() | |
{ | |
while true | |
do printf `date +%T` | |
iwconfig $1 | grep --ignore-case Link || ERROR | |
sleep 1s | |
done | |
} | |
if [ ! $1 ] | |
then HELP_MESSAGE | |
elif [ $1 == -h ] | |
then HELP_MESSAGE | |
elif [ $1 == --help ] | |
then HELP_MESSAGE | |
else RUN $1 | |
fi</pre> | |
<pre class="brush:ruby"># -*- coding: UTF-8 -*- | |
# Modulos | |
require 'rest_client' | |
exit if Object.const_defined?(:Ocra) | |
# Metodos | |
def logo() | |
print " | |
@@ | |
@ @ | |
@ @ @@@ @@@ @ @ | |
@ @ @ @ @ @ @ | |
@ @ @@ @ @ @ @ | |
@ @@ @ @@@@ @ @@ | |
@ @ @ @ @ @ @ @ | |
@ @ @ @ @ @ @ @ @ @ | |
@@ @ @ @@@@ @@@ @ @ | |
By Elektro H@cker\n\n" | |
end | |
def help() | |
print "\n Modo de empleo:\n\n" | |
print " " + __FILE__.split('/').last + " [Opci\u00F3n] [Imagen]\n\n" | |
print "\n Ejemplo:\n\n" | |
print " " + __FILE__.split('/').last + " -d C:\\Test.jpg \n\n" | |
print "\n Opciones: \n\n" | |
print " -a --all \n Devuelve el enlace de la imagen en todos los formatos. \n\n" | |
print " -b --bb \n Devuelve el enlace de la imagen en formato BB. \n\n" | |
print " -d --directo \n Devuelve el enlace directo a la imagen. \n\n" | |
print " -h --html \n Devuelve el enlace de la imagen en formato HTML. \n\n" | |
print " -t --thumb \n Devuelve el thumb de la imagen. \n\n" | |
print " -k --key \n Establece su Developer key. \n\n" | |
print " /? Muestra esta ayuda. \n\n" | |
Process.exit | |
end | |
def keycode(imput) | |
if ARGV[1] == () or not imput.length.eql? 40 | |
puts "\n Porfavor introduzca una developer key válida..." | |
puts "\n Ejemplo:\n\n " + __FILE__.split('/').last + " --key 148CAPSV9465b858a45dc1b4cdb32dee95ff6f59 \n\n" | |
puts "\n Para más información, Visite: http://stream.imageshack.us/api/" | |
Process.exit | |
end # length | |
if File.exist?("key") | |
oldkey = File.read('key') | |
print "\n ¿Desea reemplazar el archivo que contiene su developer key?\n\n" | |
print " Clave anterior: " + oldkey | |
print "\n Clave nueva : " + imput | |
print "\n\n [SI/NO] \n\n&gt;&gt; " | |
$sino = STDIN.gets | |
if $sino[/si/i] | |
keyfile = File.new("key", "w") | |
keyfile.print(imput) | |
print "\nClave reemplazada correctamente.\n" | |
elsif $sino[/no/i] | |
Process.exit | |
elsif | |
keycode(imput) | |
end # Reemplazar | |
else | |
keyfile = File.new("key", "w") | |
keyfile.print(imput) | |
print "\nClave configurada correctamente.\n" | |
end # File exist | |
end | |
def subir(file) | |
print "\n Subiendo la imagen, Espere...\n\n" | |
$Imagen = RestClient.post('http://www.imageshack.us/upload_api.php', | |
:key =&gt; $devkey, | |
# :a_username =&gt; "USUARIO", | |
# :a_password =&gt; "PASSWORD", | |
:fileupload =&gt; File.new(file) | |
) | |
end | |
def show(opcion) | |
if opcion == "-d" or opcion == "--directo" | |
print $Imagen.split("<image_link>").last.split("</image_link>").first + "\n" | |
elsif opcion == "-b" or opcion == "--bb" | |
print $Imagen.split("<image_bb>").last.split("</image_bb>").first + "\n" | |
elsif opcion == "-h" or opcion == "--html" | |
print $Imagen.split("<image_html>").last.split("</image_html>").first.gsub("&gt;", "&gt;").gsub("&lt;", "&lt;").gsub(""", "'") + "\n" | |
elsif opcion == "-t" or opcion == "--thumb" | |
print $Imagen.split("<thumb_link>").last.split("</thumb_link>").first + "\n" | |
elsif opcion == "-a" or opcion == "--all" | |
print "\nDirecto: \n" + $Imagen.split("<image_link>").last.split("</image_link>").first + "\n\n" | |
print "BB Forum: \n" + $Imagen.split("<image_bb>").last.split("</image_bb>").first + "\n\n" | |
print "HTML: \n" + $Imagen.split("<image_html>").last.split("</image_html>").first.gsub("&gt;", "&gt;").gsub("&lt;", "&lt;").gsub(""", "'") + "\n\n" | |
print "Thumb: \n" + $Imagen.split("<thumb_link>").last.split("</thumb_link>").first + "\n" | |
end | |
Process.exit | |
end | |
# Control de errores | |
logo() | |
if ARGV[0] == "-k" or ARGV[0] == "--key" | |
keycode(ARGV[1]) | |
Process.exit | |
end | |
if not File.exist?("key") | |
print "\n ERROR. Debe configurar su developer key para usar este programa...\n" | |
puts "\n Ejemplo:\n\n " + __FILE__.split('/').last + " --key 148CAPSV9465b858a45dc1b4cdb32dee95ff6f59 \n\n" | |
puts "\n Para más información, Visite: http://stream.imageshack.us/api/" | |
Process.exit | |
elsif | |
$devkey = File.read('key') | |
end | |
if (ARGV.empty?) or ARGV[0] == "/?" | |
help() | |
end | |
if (ARGV[1])==() | |
print "\n ERROR. Debe introducir la ruta local de la imagen...\n" | |
Process.exit | |
end | |
if not File.exist?(ARGV[1]) | |
print "\n ERROR. La imagen no existe...\n" | |
Process.exit | |
elsif not (ARGV[1].split('.').last)[/bmp\z/i] and not (ARGV[1].split('.').last)[/bmp\z/i] and not (ARGV[1].split('.').last)[/gif\z/i] and not (ARGV[1].split('.').last)[/ico\z/i] and not (ARGV[1].split('.').last)[/jpg\z/i] and not (ARGV[1].split('.').last)[/jpeg\z/i] and not (ARGV[1].split('.').last)[/png\z/i] and not (ARGV[1].split('.').last)[/tif\z/i] and not (ARGV[1].split('.').last)[/tiff\z/i] | |
print "\n ERROR. Archivo de imagen no soportado...\n" | |
print "\n Formatos soportados: .BMP, .GIF, .ICO, .JPG, .JPEG, .PNG, .TIF, .TIFF\n" | |
Process.exit | |
end | |
if not ARGV[0] == "-d" and not ARGV[0] == "--directo" and not ARGV[0] == "-a" and not ARGV[0] == "--all" and not ARGV[0] == "-b" and not ARGV[0] == "--bb" and not ARGV[0] == "-h" and not ARGV[0] == "--html" and not ARGV[0] == "-t" and not ARGV[0] == "--thumb" | |
print "\n ERROR. Opcion incorrecta...\n\n" | |
print " Use la opcion [/?] para mostrar la ayuda. \n\n" | |
print " " +__FILE__.split('/').last + " /? \n" | |
Process.exit | |
end | |
# Proceso | |
subir(ARGV[1]) | |
show(ARGV[0])</pre> | |
<pre class="brush:plain">shack.rb [Opción] [Imagen] | |
Ejemplo: | |
shack.rb -d C:\Test.jpg | |
Opciones: | |
-a --all | |
Devuelve el enlace de la imagen en todos los formatos. | |
-b --bb | |
Devuelve el enlace de la imagen en formato BB. | |
-d --directo | |
Devuelve el enlace directo a la imagen. | |
-h --html | |
Devuelve el enlace de la imagen en formato HTML. | |
-t --thumb | |
Devuelve el thumb de la imagen. | |
-k --key | |
Establece su Developer key. | |
/? Muestra esta ayuda.</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# Leo Gutiérrez R. [email protected] | |
# Script que comprime todos los archivos en el directorio actual. | |
# Util para hacer espacio en dispositivos extraíbles. | |
find . -type f | while read file | |
do | |
extension=`echo "${file}" | awk -F . '{print $NF}'`; | |
echo -e "$extension" | grep -ie "^\(rar\|Z\|7z\|bz2\|zip\|gz\)$" &amp;&gt; /dev/null &amp;&amp; continue; | |
rar a "${file}.rar" "$file" -y -df | |
done | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/sh | |
clear | |
echo "****Bienvenido al Sitema de Apagado Automatico****" | |
echo "GeekScripting" | |
echo "" | |
echo "MENU" | |
echo " 1.-Apagar PC ahora" | |
echo " 2.-Reiniciar PC ahora" | |
echo " 3.-Apagar PC en un ahora determinada" | |
echo " 4.-Apagar PC en un lapso determinado" | |
echo " 5.-Salir" | |
echo "" | |
read -p "Seleccionar Opcion: " OPCION | |
case $OPCION in | |
1) sudo halt;; | |
2) sudo reboot;; | |
3) echo -n "Ingresa la hora de apagado: " | |
read hora | |
sudo shutdown -h $hora;; | |
4)echo -n "Ingresa el numero de minutos, tras cual el PC se apagara: " | |
read minutos | |
sudo shutdown -h $minutos;; | |
5) exit;; | |
*) echo "Usted ingreso una opcion que no esta en el menu" | |
exit 1;;</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# For RedHat and cousins: | |
# chkconfig: 2345 85 85 | |
# description: Red5 flash streaming server | |
# processname: red5 | |
# Created By: Sohail Riaz ([email protected]) | |
PROG=red5 | |
RED5_HOME=/usr/local/red5 | |
DAEMON=$RED5_HOME/$PROG.sh | |
PIDFILE=/var/run/$PROG.pid | |
# Source function library | |
. /etc/rc.d/init.d/functions | |
[ -r /etc/sysconfig/red5 ] &amp;&amp; . /etc/sysconfig/red5 | |
RETVAL=0 | |
case "$1" in | |
start) | |
echo -n $"Starting $PROG: " | |
cd $RED5_HOME | |
$DAEMON &gt;/dev/null 2&gt;/dev/null &amp; | |
RETVAL=$? | |
if [ $RETVAL -eq 0 ]; then | |
echo $! &gt; $PIDFILE | |
touch /var/lock/subsys/$PROG | |
fi | |
[ $RETVAL -eq 0 ] &amp;&amp; success $"$PROG startup" || failure $"$PROG startup" | |
echo | |
;; | |
stop) | |
echo -n $"Shutting down $PROG: " | |
killproc -p $PIDFILE | |
RETVAL=$? | |
echo | |
[ $RETVAL -eq 0 ] &amp;&amp; rm -f /var/lock/subsys/$PROG | |
;; | |
restart) | |
$0 stop | |
$0 start | |
;; | |
status) | |
status $PROG -p $PIDFILE | |
RETVAL=$? | |
;; | |
*) | |
echo $"Usage: $0 {start|stop|restart|status}" | |
RETVAL=1 | |
esac | |
exit $RETVAL | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
if [ $# -ne 2 ]; then | |
#si no recibe argumentos | |
echo "Para correrlo usa: $0 laviejaext lanuevaext" 1>&2 | |
exit 1 | |
fi | |
for file in *.$1; do | |
newname=`echo $file | sed "s/$1$/$2/"` | |
echo "Renombrando $file por $newname" | |
mv "$file" "$newname" | |
done | |
exit 0 | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
ASUNTO="Acceso de usuario:" | |
FECHA=$(date) | |
IP=$(who | cut -d"(" -f2 | cut -d")" -f1) | |
SERVIDOR= #ip o dominio del servidor de correo | |
PUERTO=#puerto de conexión SMTP o SMTPS con el servidor de correo | |
REMITENTE=#correo existente de quien envia | |
DESTINATARIO=#correo existente de quien recibirá | |
telnet $SERVIDOR $PUERTO &lt;&lt;_EOF | |
HELO $SERVIDOR | |
MAIL FROM:&lt;$REMITENTE&gt; | |
RCPT TO:&lt;$DESTINATARIO&gt; | |
DATA | |
From: &lt;$REMITENTE&gt; | |
To: &lt;$DESTINATARIO&gt; | |
Subject: $ASUNTO - $FECHA | |
Se ha identificado un acceso por parte del usuario __indique-aqui-el-usuario__ | |
Acceso desde $IP | |
. | |
QUIT | |
_EOF</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
## | |
## virtualbox-daemon-mcy.sh | |
## | |
## Version : 0.2 27.01.2012 03:05:43 | |
## | |
## Descripcion: Demonio de inicio de Maquinas virtuales de VirtualBox | |
## El objetivo es automatizar el inicio de maquinas virtuales de | |
## Virtualbox en modo headless ( que es cuando nose ejecutan en modo | |
## interactivo, sin interfaz grafica, sino en background ). Se soportan | |
## el inicio de clientes windows como Linux y se mantiene un log por | |
## fechas de cuando se arranco/detuvo/guardo una sesion. Los logs se | |
## almacenan en el $HOME/.VBoxLogs del usuario que tiene las VM. | |
## | |
## Copyright 2012 Cesar Yanez <[email protected]> | |
## | |
## This program is free software; you can redistribute it and/or modify | |
## it under the terms of the GNU General Public License as published by | |
## the Free Software Foundation; either version 2 of the License, or | |
## (at your option) any later version. | |
## | |
## This program is distributed in the hope that it will be useful, | |
## but WITHOUT ANY WARRANTY; without even the implied warranty of | |
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
## GNU General Public License for more details. | |
## | |
## You should have received a copy of the GNU General Public License | |
## along with this program; if not, write to the Free Software | |
## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | |
## MA 02110-1301, USA. | |
### MODIFICABLE POR USUARIO ### MODIFICABLE POR USUARIO ####### | |
## | |
## Info: VMs Windows ### | |
## | |
## Ayuda: | |
## VBX_WIN_TOTAL : cantidad de Maquinas Virtuales con Win | |
## | |
## VBX_WIN_NAMEX : nombre de la maquina virtual X con Win | |
## VBX_WIN_USERX : usuario admin de la maquina virtual X | |
## VBX_WIN_PASSX : password admin de la maquina virtual X | |
## VBX_WIN_NUMIPX : numero ip de la maquina virtual X | |
## | |
## Si hay mas de 4 maquinas virtuales con windows copiar | |
## y repetir secciones sin repetir numeros | |
## | |
VBX_WIN_TOTAL=1 | |
VBX_WIN_NAME1="Windows XP" | |
VBX_WIN_USER1="cesar" | |
VBX_WIN_PASS1="cesar" | |
VBX_WIN_NUMIP1="192.168.1.140" | |
VBX_WIN_NAME2="" | |
VBX_WIN_USER2="" | |
VBX_WIN_PASS2="" | |
VBX_WIN_NUMIP2="" | |
VBX_WIN_NAME3="" | |
VBX_WIN_USER3="" | |
VBX_WIN_PASS3="" | |
VBX_WIN_NUMIP3="" | |
## Info: VMs Linux ### | |
## | |
## Ayuda: | |
## VBX_LIN_TOTAL : cantidad de Maquinas Virtuales con Linux | |
## | |
## VBX_LIN_NAMEX : nombre de la maquina virtual X con Linux | |
## | |
VBX_LIN_TOTAL=1 | |
VBX_LIN_NAME1="DebianSqueeze" | |
VBX_LIN_NAME2="" | |
VBX_LIN_NAME3="" | |
VBX_LIN_NAME3="" | |
### Info: Usuario que es propietario de las maquinas virtuales | |
### | |
VBX_USR="rondamon" | |
### Maxima cantidad de tiempo a esperar para que se apague una | |
### sesion | |
MAX_SEC=30 | |
### MODIFICABLE POR USUARIO ### MODIFICABLE POR USUARIO ####### | |
###### NO MODIFICAR ###### NO MODIFICAR ###### NO MODIFICAR #### | |
setEnvVar(){ | |
RPC_NET=`which net` | |
SYS_SU=`which su` | |
SYS_AWK=`which awk` | |
SYS_GREP=`which grep` | |
SYS_TR=`which tr` | |
SYS_WC=`which wc` | |
SYS_CUT=`which cut` | |
SYS_MKD=`which mkdir` | |
SYS_CHW=`which chown` | |
CUR_USR=`whoami` | |
VBX_MNG=`which VBoxManage` | |
VBX_USR_HOME=`$SYS_GREP $VBX_USR /etc/passwd|$SYS_CUT -d: -f6` | |
VBX_DIR_LOGS=$VBX_USR_HOME/.VBoxLogs | |
VBX_LOG_START=$VBX_DIR_LOGS/start.`date '+%d%m%y'`.logs | |
VBX_LOG_STOP=$VBX_DIR_LOGS/stop.`date '+%d%m%y'`.logs | |
VBX_LOG_SAVE=$VBX_DIR_LOGS/save.`date '+%d%m%y'`.logs | |
if [ ! -d $VBX_DIR_LOGS ]; then | |
$SYS_MKD $VBX_DIR_LOGS | |
fi | |
$SYS_CHW $VBX_USR:$VBX_USR $VBX_DIR_LOGS | |
} | |
checkVmRunning(){ | |
VM_TOTAL=`expr $VBX_WIN_TOTAL + $VBX_LIN_TOTAL` | |
VM_TOTAL_RUNNING=`$SYS_SU $VBX_USR -c "$VBX_MNG list runningvms |$SYS_WC -l"` | |
if [ $VM_TOTAL_RUNNING -eq $VM_TOTAL ]; then | |
echo " - Todas las VMs estan ejecutandose" | |
return 10 | |
elif [ $VM_TOTAL_RUNNING -eq 0 ]; then | |
echo " - Ninguna VMs en ejecucion" | |
return 0 | |
elif [ $VM_TOTAL_RUNNING -ne $VM_TOTAL ]; then | |
echo " - Algunas VMs estan ejecutandose" | |
return 5 | |
fi | |
} | |
checkStatusVms(){ | |
if [ "$1" = " " ]; then | |
return 10 | |
elif [ "$1" != " " ]; then | |
## VM_STATUS=`$SYS_SU -c "$VBX_MNG showvminfo $1 |$SYS_GREP ^State |$SYS_AWK '{print $2}'" $VBX_USR` | |
VM_STATUS=`$SYS_SU $VBX_USR -c "$VBX_MNG showvminfo \"$1\" |$SYS_GREP ^State |$SYS_TR -s ' ' ' '|$SYS_CUT -d ' ' -f 2"` | |
### echo VMSTATUSSSSSS $VM_STATUS | |
if [ "$VM_STATUS" = "saved" ]; then return 1 | |
elif [ "$VM_STATUS" = "powered" ]; then return 2 | |
elif [ "$VM_STATUS" = "running" ]; then return 3 | |
fi | |
fi | |
} | |
startWindows(){ | |
for i in `seq 1 $VBX_WIN_TOTAL`; do | |
NAMEL="VBX_WIN_NAME$i"; NAMELL='eval "echo \$$NAMEL"' | |
checkStatusVms "`eval $NAMELL`" | |
STS=$? | |
if [ $STS -eq 1 ] || [ $STS -eq 2 ]; then | |
echo " - Iniciando VM Windows: " `eval $NAMELL` | |
$SYS_SU $VBX_USR -c "$VBX_MNG startvm \"`eval $NAMELL`\" -type headless &gt;&gt; ${VBX_LOG_START} 2&gt;&amp;1" | |
elif [ $STS -eq 3 ]; then | |
echo " - La VM `eval $NAMELL` ya esta ejecutandose" | |
fi | |
done | |
} | |
stopWindows(){ | |
for i in `seq 1 $VBX_WIN_TOTAL`; do | |
NAMEL="VBX_WIN_NAME$i"; NAMELL='eval "echo \$$NAMEL"' | |
NAMEU="VBX_WIN_USER$i"; NAMEUU='eval "echo \$$NAMEU"' | |
NAMEP="VBX_WIN_PASS$i"; NAMEPP='eval "echo \$$NAMEP"' | |
NAMEI="VBX_WIN_NUMIP$i"; NAMEII='eval "echo \$$NAMEI"' | |
checkStatusVms "`eval $NAMELL`" | |
STS=$? | |
if [ $STS -eq 2 ]; then | |
echo " - "`eval $NAMELL`" esta apagada"; return 0 | |
elif [ $STS -eq 1 ]; then | |
echo " - "`eval $NAMELL`" esta guardada"; return 0 | |
elif [ $STS -eq 3 ]; then | |
echo -n " - "`eval $NAMELL`" deteniendo ..." | |
## $RPC_NET rpc SHUTDOWN -t 0 -C "Apagado desde el servidor de maquinas vituales" -f -I \"`eval $NAMEII`\" -U `eval $NAMEUU`%`eval $NAMEPP` | |
$SYS_SU $VBX_USR -c "$VBX_MNG controlvm \"`eval $NAMELL`\" acpipowerbutton &gt;&gt; ${VBX_LOG_STOP} 2&gt;&amp;1" | |
for j in `seq 1 $MAX_SEC`; do | |
sleep 1; echo -n "$j." | |
done | |
echo ''; return 1 | |
fi | |
done | |
} | |
saveWindows(){ | |
for i in `seq 1 $VBX_WIN_TOTAL`; do | |
NAMEL="VBX_WIN_NAME$i"; NAMELL='eval "echo \$$NAMEL"' | |
checkStatusVms "`eval $NAMELL`" | |
STS=$? | |
if [ $STS -eq 2 ] || [ $STS -eq 1 ]; then echo '' | |
elif [ $STS -eq 3]; then | |
echo " - Salvando VM Windows: " `eval $NAMELL` | |
$SYS_SU $VBX_USR -c "$VBX_MNG controlvm \"`eval $NAMELL`\" savestate &gt;&gt; ${VBX_LOG_SAVE} 2&gt;&amp;1" | |
fi | |
done | |
} | |
startLinux(){ | |
for i in `seq 1 $VBX_LIN_TOTAL`; do | |
NAMEL="VBX_LIN_NAME$i"; NAMELL='eval "echo \$$NAMEL"' | |
checkStatusVms "`eval $NAMELL`" | |
STS=$? | |
if [ $STS -eq 1 ] || [ $STS -eq 2 ]; then | |
echo " - Iniciando VM Linux: " `eval $NAMELL` | |
$SYS_SU $VBX_USR -c "$VBX_MNG startvm \"`eval $NAMELL`\" -type headless &gt;&gt; ${VBX_LOG_START} 2&gt;&amp;1" | |
elif [ $STS -eq 3 ]; then | |
echo " - La VM Linux `eval $NAMELL` ya esta ejecutandose" | |
fi | |
done | |
} | |
stopLinux(){ | |
for i in `seq 1 $VBX_LIN_TOTAL`; do | |
NAMEL="VBX_LIN_NAME$i"; NAMELL='eval "echo \$$NAMEL"' | |
checkStatusVms "`eval $NAMELL`" | |
STS=$? | |
if [ $STS -eq 2 ]; then | |
echo " - "`eval $NAMELL`" esta apagada" | |
return 0 | |
elif [ $STS -eq 1 ]; then | |
echo " - "`eval $NAMELL`" esta guardada" | |
return 0 | |
elif [ $STS -eq 3 ]; then | |
echo -n " - "`eval $NAMELL`" deteniendo ..." | |
$SYS_SU $VBX_USR -c "$VBX_MNG controlvm \"`eval $NAMELL`\" acpipowerbutton &gt;&gt; ${VBX_LOG_STOP} 2&gt;&amp;1" | |
for j in `seq 1 $MAX_SEC`; do | |
sleep 1; echo -n "$j." | |
done | |
echo ''; return 1 | |
fi | |
done | |
} | |
saveLinux(){ | |
for i in `seq 1 $VBX_LIN_TOTAL`; do | |
NAMEL="VBX_LIN_NAME$i"; NAMELL='eval "echo \$$NAMEL"' | |
checkStatusVms "`eval $NAMELL`" | |
STS=$? | |
if [ $STS -eq 2 ] || [ $STS -eq 1 ]; then echo '' | |
elif [ $STS -eq 3]; then | |
echo " - Guardando VM Linux: " `eval $NAMELL` | |
$SYS_SU $VBX_USR -c "$VBX_MNG controlvm "`eval $NAMELL`" savestate &gt;&gt; ${VBX_LOG_SAVE} 2&gt;&amp;1" | |
fi | |
done | |
} | |
statusVm(){ | |
for i in `seq 1 $VBX_WIN_TOTAL`; do | |
NAMEL="VBX_WIN_NAME$i"; NAMELL='eval "echo \$$NAMEL"' | |
checkStatusVms "`eval $NAMELL`" | |
STS=$? | |
if [ $STS -eq 1 ]; then | |
echo " - STATUS: "`eval $NAMELL`" esta guardada" | |
elif [ $STS -eq 2 ]; then | |
echo " - STATUS: "`eval $NAMELL`" esta apagada" | |
elif [ $STS -eq 3 ]; then | |
echo " - STATUS: "`eval $NAMELL`" esta ejecutandose" | |
fi | |
done | |
for i in `seq 1 $VBX_LIN_TOTAL`; do | |
NAMEL="VBX_LIN_NAME$i"; NAMELL='eval "echo \$$NAMEL"' | |
checkStatusVms "`eval $NAMELL`" | |
STS=$? | |
if [ $STS -eq 1 ]; then | |
echo " - STATUS: "`eval $NAMELL`" esta guardada" | |
elif [ $STS -eq 2 ]; then | |
echo " - STATUS: "`eval $NAMELL`" esta apagada" | |
elif [ $STS -eq 3 ]; then | |
echo " - STATUS: "`eval $NAMELL`" esta ejecutandose" | |
fi | |
done | |
echo '' | |
} | |
setEnvVar | |
echo '' | |
echo '#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*' | |
echo '* Script de Arranque y Apagado de Maquinas Virtuales (VMs) #' | |
echo '#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*' | |
echo '' | |
case $1 in | |
start) | |
echo '*** Iniciando VMs, espere a que inicien los sistemas ***' | |
startLinux | |
startWindows | |
;; | |
stop) | |
echo '*** Deteniendo VMs, espere a que terminen de apagar los sistemas ***' | |
stopLinux | |
stopWindows | |
## si no se apago la VM se guarda su estado para proteccion del filesystem | |
checkVmRunning | |
STS=$? | |
if [ $STS -ne 0 ]; then | |
saveWindows | |
saveLinux | |
elif [ $STS -eq 0 ]; then echo ''; echo " - Todas las VMs Apagadas"; echo '' | |
fi | |
;; | |
status) | |
statusVm | |
;; | |
restart) | |
$0 stop; $0 start | |
;; | |
*) | |
echo ''; echo "Modo de Uso: $0 {start|stop|status|restart}"; echo '' | |
;; | |
esac | |
###### NO MODIFICAR ###### NO MODIFICAR ###### NO MODIFICAR #### | |
</[email protected]></pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# Tiny scripts to make your life a bit easier by carp (www.danieldemichele.com.ar) | |
# Only allow to run script if Root | |
if [[ $EUID -ne 0 ]]; | |
then | |
echo "Permisos insuficientes. Corra este script como Root!" 1&gt;&amp;2 | |
exit 1 | |
else | |
#Check if service exists | |
if [ -f /etc/init.d/$1 ] | |
then | |
# We do have a service, lets shoot the Flag (System will give valid options if bad Flag): | |
exec /etc/init.d/$1 $2 | |
else | |
# No Service at init.d, return error ... | |
echo "El servicio "$1" no existe en /etc/init.d/"; | |
fi | |
fi</pre> | |
<pre class="brush:perl">#!/usr/bin/perl | |
# Tiny scripts to make your life a bit easier by carp (www.danieldemichele.com.ar) | |
# Get Flags: | |
$service = $ARGV[0]; | |
$task = $ARGV[1]; | |
# Only allow to run script if Root | |
if ( $&lt; == 0 ){ | |
#Check if service exists | |
$requested_service = '/etc/init.d/'.$service; | |
if(!(-e $requested_service)){ | |
# No Service at init.d, return error ... | |
print "El servicio ".$service." no existe en /etc/init.d/\n"; | |
}else{ | |
# We do have a service, lets shoot the Flag (System will give valid options if bad Flag): | |
system "/etc/init.d/".$service." ".$task; | |
} | |
}else{ | |
# No Root? =( | |
print "Permisos insuficientes. Corra este script como Root!.\n"; | |
}</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
ADMIN="[email protected]" | |
# Nivel de alarma al 70% | |
ALERT=70 | |
df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output; | |
do | |
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 ) | |
partition=$(echo $output | awk '{ print $2 }' ) | |
if [ $usep -ge $ALERT ]; then | |
echo "Poco espacio en "$partition ($usep%)" en $(hostname) en el dia $(date)" &gt;&gt; alerta-disco-$(date +%d-%m-%y)-$ALERT.txt | |
cat alerta-disco-$(date +%d-%m-%y)-$ALERT.txt | mail -s "Alerta de poco esapcio en disco en $(hostname)" $ADMIN | |
fi | |
done</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# FlashVideo Downloader | |
# Code By Kypzkore Kodeinfect | |
# http://kode-labs.blogspot.com | |
lsof | grep '/tmp/Flash[^ ]*' | awk '{ print "/proc/" $2 "/fd/" $4 }' | sed 's/[rwu]$//'</pre> | |
<pre class="brush:plain">chmod +x flashvids.sh</pre> | |
<pre class="brush:plain">alias flashtmp='sh /home/use/flashvids.sh'</pre> | |
<hr/><pre class="brush:bash">cp /proc/7254/fd/32 /media/geek/Videos</pre> | |
<hr/><pre class="brush:bash">#!/usr/bin/env bash | |
progname=$(basename $0) | |
if [ -z "$2" ] | |
then | |
echo -e "Usage: $progname idiomaDestino 'palabras a traducir...'" | |
echo -e "Example: $progname en 'Hola como!'\n" | |
exit | |
fi | |
TO="$1" | |
shift 1 | |
# Google Translate Ajax API Url | |
TRANSURL='http://ajax.googleapis.com/ajax/services/language/translate?v=1.0' | |
# Parse string to translate, change ' ' to '+' | |
# STRING: String to translate. | |
STRING="$@" | |
PSTRING=$(echo "$STRING" |tr ' ' '+') | |
DETECT='http://ajax.googleapis.com/ajax/services/language/detect?v=1.0' | |
RESPONSE_DETECT=$(/usr/bin/env curl -s -A Mozilla $DETECT'&amp;q='$PSTRING) | |
FROM=$(echo "$RESPONSE_DETECT" | cut -d ':' -f 3 |cut -d ',' -f 1 | sed -s "s/^\([\"']\)\(.*\)\1\$/\2/g") | |
LANGPAIR="$FROM|$TO" | |
# Get translation | |
RESPONSE=$(/usr/bin/env curl -s -A Mozilla \ | |
$TRANSURL'&amp;langpair='$LANGPAIR'&amp;q='$PSTRING) | |
echo -n "$progname&gt; " | |
# Parse and clean response, to show only translation. | |
echo "$RESPONSE" |cut -d ':' -f 3 |cut -d '}' -f 1</pre> | |
<pre class="brush:plain">gtranslate en hola mundo</pre> | |
<hr/><pre class="brush:bash">############################## | |
# Matavirus # | |
#autor: epsilon77 # | |
#[email protected] # | |
#http://www.RinconInformatico.net # | |
################################### | |
#!/bin/bash | |
echo “Bienvenido a MataVirus” | |
echo “La memoria que desea analizar es: ” | |
ls /media/|grep -v cdrom | |
bandera=0 | |
read -p “si o no?” respuesta | |
if [ "$respuesta" = "si" ];then | |
memoria=$(ls /media|grep -v cdrom) | |
cd /media/$memoria | |
else | |
read -p “por favor digite el nombre de la memoria: ” memoria | |
cd /media/ | |
if [ -d $memoria ];then | |
cd /media/$memoria | |
else | |
echo “La memoria no esta montada” | |
bandera=1 | |
fi | |
fi | |
if [ $bandera -eq 0 ];then | |
echo “eliminando virus y bichos raros….” | |
cd /media/$memoria | |
echo “Escaneando la raiz del dispositivo” | |
rm -rifv *.com | |
rm -rifv recycler | |
rm -rifv *.bat | |
rm -rifv [Aa]utorun.inf | |
for j in * | |
do | |
if [ -d "$j" ] ; then | |
cd “$j” | |
echo “Escaneando el directorio $j” | |
rm -rifv *.com | |
rm -rifv recycler | |
rm -rifv *.bat | |
rm -rifv [Aa]utorun.inf | |
cd .. | |
fi | |
done | |
echo “Virus borrados de forma correcta” | |
echo “Se ha terminado el proceso” | |
echo “hasta pronto” | |
fi</pre> | |
<hr/><pre class="brush:bash">#CLI Twitter Search | |
#@hecky [email protected] | |
#http://Neobits.org | |
clear &amp;&amp; echo -n "Ingresa Palabra a buscar en Twitter.com: " &amp;&amp; read parametro &amp;&amp; echo "" &amp;&amp; for tweet in {1..15};do curl search.twitter.com/search.json?q=$parametro\&amp;rpp=100\&amp;lang=es\&amp;page=$tweet 2&gt; /dev/null | grep text | php -r 'error_reporting(0); $c=""; $a=file_get_contents("php://STDIN"); for($i=100;$i&gt;=1;$i--){$b=explode("text\":\"",$a); $c=explode("\",\"to_user",$b[$i]); echo html_entity_decode($c[0]).((strlen($c[0]) &gt; 2) ? "\n" : "");}';done | nl | ascii2uni -q -a U | php -r 'echo stripslashes(file_get_contents("php://STDIN"));'</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
# --------------------------------------------------------------------------------- | |
# www.linuxtotal.com.mx | |
# firewall para un solo equipo conectado a traves de modem o adsl | |
# por: [email protected] | |
# (1) se eliminan reglas previas que hubiera y cadenas definidas por el usuario | |
/sbin/iptables -F | |
/sbin/iptables -X | |
# (2) se establecen politicas "duras" por defecto, es decir solo lo que se autorice | |
# explicitamente podra ingresar o salir del equipo | |
/sbin/iptables -P INPUT DROP | |
/sbin/iptables -P OUTPUT DROP | |
/sbin/iptables -P FORWARD DROP | |
# (3)a la interface lo (localhost) se le permite todo | |
/sbin/iptables -A INPUT -i lo -j ACCEPT | |
/sbin/iptables -A OUTPUT -o lo -j ACCEPT | |
# (4) evitamos ataques syn-flood limitando el acceso de paquetes nuevos | |
# desde internet a solo 4 por segundo y los demas se descartan | |
/sbin/iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 4 -j DROP | |
# (5) se evitan paquetes tcp que sean nuevos y que no tengan el flag SYN | |
# es decir, hay ataques o escaneos que llegan como conexiones nuevas | |
# pero sin ser paquetes syn, definitivamente no nos interesan | |
/sbin/iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP | |
# (6) todo lo que sea icmp (ping) y que intente entrar, se descarta | |
# con esto bloqueamos cualquier tipo de paquetes con protocolo icmp | |
# evitando ataques como el del ping de la muerte, aunque esta regla | |
# podria provocar problemas de comunicacion con algunos ISP. | |
iptables -A INPUT -p icmp -j DROP | |
# (7) por ultimo las dos siguientes reglas permiten salir del equipo | |
# (output) conexiones nuevas que nosotros solicitamos, conexiones establecidas | |
# y conexiones relacionadas, y deja entrar (input) solo conexiones establecidas | |
# y relacionadas. | |
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT | |
/sbin/iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT | |
# --------------------------------------------------------------------------------- | |
</pre> | |
<pre class="brush:plain"> | |
Damos permisos de ejecución </br> | |
chmod +x firewall.bash </br> | |
Levantamos el firewall </br> | |
./firewall.bash<br> | |
Confirmamos que que el firewall esté arriba </br> | |
iptables --list </br> | |
Guardamos las reglas para que estén presentes cada que inicie el sistema.</br> | |
iptables-save > /etc/firewall.conf </br> | |
echo "#!/bin/sh" > /etc/network/if-up.d/iptables </br> | |
echo "iptables-restore < /etc/firewall.conf" >> /etc/network/if-up.d/iptables </br> | |
chmod +x /etc/network/if-up.d/iptables </br> | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# Video To Avi | |
# Created: Inameiname | |
# Version: 3.2 | |
###################################################################################################################################################### | |
###### OPEN IN TERMINAL ###### OPEN IN TERMINAL ###### OPEN IN TERMINAL ###### OPEN IN TERMINAL ###### OPEN IN TERMINAL ###### OPEN IN TERMINAL ###### | |
###################################################################################################################################################### | |
################################################## | |
# Run in the terminal on double-click # | |
################################################## | |
tty -s; if [ $? -ne 0 ] ; then gnome-terminal -e "$0"; exit; fi | |
################################################## | |
# If it doesn't run in the terminal on # | |
# double-click, say so # | |
################################################## | |
[ -t 0 ] &amp;&amp; [ -t 1 ] || { zenity --warning --text="${0}: this script must be run from a terminal." ; exit 1 ;} | |
###################################################################################################################################################### | |
###### INPUT SOURCE VIDEO2AVI STUFF ###### INPUT SOURCE VIDEO2AVI STUFF ###### INPUT SOURCE VIDEO2AVI STUFF ###### INPUT SOURCE VIDEO2AVI STUFF ###### | |
###################################################################################################################################################### | |
################################################## | |
# Check whether environment variables are empty # | |
################################################## | |
###### see if the Nautilus environment variable is empty | |
# if it exists, set it equal to 'INPUT_FILE' | |
for ARCHIVE_FULLPATH in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do | |
ARCHIVE_PATH=${ARCHIVE_FULLPATH%.*} | |
if [ -f $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ] ; then | |
# if select iso file: | |
if [ $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS = $ARCHIVE_PATH.iso ] ; then | |
# to get desired title on dvd | |
# requires lsdvd: sudo apt-get install lsdvd | |
lsdvd $ARCHIVE_PATH.iso | |
echo -n "Please enter the title number you will convert (usually the longest one): | |
Press 'Enter' for default (default is '1')... | |
" | |
read TITLE | |
# extra blank space | |
echo " | |
" | |
# default | |
if [[ -z $TITLE ]] ; then | |
# If no title passed, default to 1 | |
TITLE=1 | |
fi | |
INPUT_FILE="dvd://$TITLE -dvd-device $ARCHIVE_PATH.iso" | |
fi | |
# if select video file: | |
if [ $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS != $ARCHIVE_PATH.iso ] ; then | |
INPUT_FILE=$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS | |
fi | |
fi | |
done | |
# if it's blank, set it equal to $1 | |
if [ -z $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ] ; then | |
# If it's blank, set it equal to $1 | |
NAUTILUS_SCRIPT_SELECTED_FILE_PATHS=$1 | |
###### see if the '$1' variable is empty | |
# if it exists, set it equal to 'INPUT_FILE' | |
for ARCHIVE_FULLPATH in $1; do | |
ARCHIVE_PATH=${ARCHIVE_FULLPATH%.*} | |
if [ -f $1 ] ; then | |
# if select iso file: | |
if [ $1 = $ARCHIVE_PATH.iso ] ; then | |
# to get desired title on dvd | |
# requires lsdvd: sudo apt-get install lsdvd | |
lsdvd $ARCHIVE_PATH.iso | |
echo -n "Please enter the title number you will convert (usually the longest one): | |
Press 'Enter' for default (default is '1')... | |
" | |
read TITLE | |
# extra blank space | |
echo " | |
" | |
# default | |
if [[ -z $TITLE ]] ; then | |
# If no title passed, default to 1 | |
TITLE=1 | |
fi | |
INPUT_FILE="dvd://$TITLE -dvd-device $ARCHIVE_PATH.iso" | |
fi | |
# if select video file: | |
if [ $1 != $ARCHIVE_PATH.iso ] ; then | |
INPUT_FILE=$1 | |
fi | |
fi | |
done | |
# if it's blank, do the following: | |
if [ -z "$1" ] ; then | |
################################################## | |
# Input DVD/ISO/VIDEO file menu # | |
################################################## | |
echo -n "What do you want to convert to AVI?: | |
(1) DVD | |
(2) ISO file | |
(3) Video file (such as MKV, VOB, MPEG, AVI, WMV, and etc.) | |
Press 'Enter' for default (default is '1')... | |
" | |
read TYPE | |
# extra blank space | |
echo " | |
" | |
###### Input DVD/ISO/VIDEO source default ###### | |
if [[ -z $TYPE ]] ; then | |
# If no media passed, default to 1 | |
TYPE=1 | |
fi | |
###### Input DVD/ISO/VIDEO source ###### | |
###### DVD to AVI | |
if [[ $TYPE = 1 ]] ; then | |
# to get desired device | |
df -h -x tmpfs -x usbfs | |
echo -n "Please enter the appropriate DVD drive: | |
(1) /dev/dvd | |
(2) /dev/sr0 | |
(3) /dev/sr1 | |
(4) /dev/sr2 | |
(5) custom | |
Press 'Enter' for default (default is '1')... | |
" | |
read DEVICE_NUMBER | |
# extra blank space | |
echo " | |
" | |
# default | |
if [[ -z $DEVICE_NUMBER ]] ; then | |
# If no device passed, default to /dev/dvd | |
DEVICE=/dev/dvd | |
fi | |
# preset | |
if [[ $DEVICE_NUMBER = 1 ]] ; then | |
DEVICE=/dev/dvd | |
fi | |
if [[ $DEVICE_NUMBER = 2 ]] ; then | |
DEVICE=/dev/sr0 | |
fi | |
if [[ $DEVICE_NUMBER = 3 ]] ; then | |
DEVICE=/dev/sr1 | |
fi | |
if [[ $DEVICE_NUMBER = 4 ]] ; then | |
DEVICE=/dev/sr2 | |
fi | |
# custom | |
if [[ $DEVICE_NUMBER = 5 ]] ; then | |
echo -n "Please enter the appropriate DVD drive: " | |
echo -n "...like this: '/dev/dvd'..." | |
read CUSTOM_DEVICE | |
DEVICE=$CUSTOM_DEVICE | |
fi | |
# to get desired title on dvd | |
# requires lsdvd: sudo apt-get install lsdvd | |
lsdvd $DEVICE | |
echo -n "Please enter the title number you will convert (usually the longest one): | |
Press 'Enter' for default (default is '1')... | |
" | |
read TITLE | |
# extra blank space | |
echo " | |
" | |
# default | |
if [[ -z $TITLE ]] ; then | |
# If no title passed, default to 1 | |
TITLE=1 | |
fi | |
# to decide to copy straight from the DVD or first copy to hard drive to ISO | |
echo -n "Would you first like to copy the DVD onto your hard drive (to ISO)?: | |
(1) Yes (Highly Recommended) | |
(2) No | |
Press 'Enter' for default (default is '1')... | |
" | |
read DVD2ISO | |
# extra blank space | |
echo " | |
" | |
# default | |
if [[ -z $DVD2ISO ]] ; then | |
# If no DVD2ISO passed, default to 1 | |
dd if=$DEVICE of=NEW.iso | |
INPUT_FILE="dvd://$TITLE -dvd-device NEW.iso" | |
fi | |
# preset | |
if [[ $DVD2ISO = 1 ]] ; then | |
dd if=$DEVICE of=NEW.iso | |
INPUT_FILE="dvd://$TITLE -dvd-device NEW.iso" | |
fi | |
if [[ $DVD2ISO = 2 ]] ; then | |
INPUT_FILE="dvd://$TITLE -dvd-device $DEVICE" | |
fi | |
fi | |
###### ISO to AVI | |
if [[ $TYPE = 2 ]] ; then | |
echo -n "Please enter the full path for the ISO: | |
Example: /home/(your username)/Videos/NEW.iso... | |
" | |
read ISO | |
# extra blank space | |
echo " | |
" | |
# to get desired title on dvd | |
# requires lsdvd: sudo apt-get install lsdvd | |
lsdvd $ISO | |
echo -n "Please enter the title number you will convert (usually the longest one): | |
Press 'Enter' for default (default is '1')... | |
" | |
read TITLE | |
# extra blank space | |
echo " | |
" | |
# default | |
if [[ -z $TITLE ]] ; then | |
# If no title passed, default to 1 | |
TITLE=1 | |
fi | |
INPUT_FILE="dvd://$TITLE -dvd-device $ISO" | |
fi | |
###### Video to AVI | |
if [[ $TYPE = 3 ]] ; then | |
echo -n "Please enter the name for the input file (full path, with extension): | |
It can be any type, such as MKV, VOB, MPEG, AVI, WMV, and etc... | |
Example: /home/(your username)/Videos/NEW.avi... | |
" | |
read VIDEO_FILE | |
# extra blank space | |
echo " | |
" | |
INPUT_FILE=$VIDEO_FILE | |
fi | |
################################################## | |
# Close the variable statements # | |
################################################## | |
fi | |
fi | |
###################################################################################################################################################### | |
###### GENERAL VIDEO2AVI STUFF ###### GENERAL VIDEO2AVI STUFF ###### GENERAL VIDEO2AVI STUFF ###### GENERAL VIDEO2AVI STUFF ###### GENERAL VIDEO2AVI STUFF | |
###################################################################################################################################################### | |
################################################## | |
# Cropping (done automatically) # | |
################################################## | |
###### start a timer to kill mplayer | |
echo "Cropdetect is now running... | |
A few seconds of your video should now be playing... | |
" | |
###### start a timer to kill mplayer | |
(sleep 6 &amp;&amp; killall mplayer)&amp; | |
###### start the mplayer cropdetect on on the DVD at a random time | |
mplayer $INPUT_FILE -ss 0:03:10 -vf cropdetect &amp;&gt; mplayer.tmp | |
###### get last crop value from mplayer output and store in variable | |
CROP_VALUES=$(awk -F'crop=' '/\[CROP\]/{f=$2} END{print f}' ./mplayer.tmp |cut -d')' -f1) | |
###### print detected crop values | |
echo -e "\n\nDetected crop values = ${CROP_VALUES}\n\n" | |
################################################## | |
# Output desired name for file # | |
################################################## | |
###### file input | |
echo -n "Please enter a name for the output file (without extension): | |
Press 'Enter' for default (default is 'NEW')... | |
" | |
read OUTPUT_FILE | |
###### extra blank space | |
echo " | |
" | |
###### default ###### | |
if [[ -z $OUTPUT_FILE ]] ; then | |
# If no file passed, default to NEW | |
OUTPUT_FILE=NEW_$(date "+%y.%m.%d_%H.%M") | |
fi | |
################################################## | |
# Available processor number (done automatically)# | |
################################################## | |
CPUS=$(grep -c processor /proc/cpuinfo) | |
echo "Using $CPUS processor(s)..." | |
###### extra blank space | |
echo " | |
" | |
###################################################################################################################################################### | |
###### MAIN MENU OPTIONS AND CHOICES ###### MAIN MENU OPTIONS AND CHOICES ###### MAIN MENU OPTIONS AND CHOICES ###### MAIN MENU OPTIONS AND CHOICES ###### | |
###################################################################################################################################################### | |
################################################## | |
# Preset/Custom type options # | |
################################################## | |
echo -n "Select a quality level: | |
(1) exact copy quality MPEG (DVD/ISO sources only) | |
(2) exact copy audio-only quality AC3 (DVD/ISO sources only) | |
(3) very high quality H.264 (2-pass) (350min:105min film w/2 1.5mhz cpus) | |
(4) very high quality DIVX/MPEG-4 (2-pass) (270min:105min film w/2 1.5mhz cpus) | |
(5) very high quality XVID (2-pass) (220min:105min film w/2 1.5mhz cpus) | |
(6) very high quality H.264 (1-pass) (400min:105min film w/2 1.5mhz cpus) | |
(7) very high quality DIVX/MPEG-4 (1-pass) (230min:105min film w/2 1.5mhz cpus) | |
(8) very high quality XVID (1-pass) (180min:105min film w/2 1.5mhz cpus) | |
(9) high quality H.264 (2-pass) (240min:105min film w/2 1.5mhz cpus) | |
(10)high quality DIVX/MPEG-4 (2-pass) (190min:105min film w/2 1.5mhz cpus) | |
(11)high quality XVID (2-pass) (135min:105min film w/2 1.5mhz cpus) | |
(12)high quality H.264 (1-pass) (200min:105min film w/2 1.5mhz cpus) | |
(13)high quality DIVX/MPEG-4 (1-pass) (150min:105min film w/2 1.5mhz cpus) | |
(14)high quality XVID (1-pass) (090min:105min film w/2 1.5mhz cpus) | |
(15)fast quality H.264 (1-pass) (155min:105min film w/2 1.5mhz cpus) | |
(16)fast quality DIVX/MPEG-4 (1-pass) (065min:105min film w/2 1.5mhz cpus) | |
(17)fast quality XVID (1-pass) (065min:105min film w/2 1.5mhz cpus) | |
(18)fast quality XVID YouTube (1-pass) (025min:105min film w/2 1.5mhz cpus) | |
(19)realtime quality DIVX/MPEG-4 (1-pass) (050min:105min film w/2 1.5mhz cpus) | |
(20)realtime quality XVID (1-pass) (060min:105min film w/2 1.5mhz cpus) | |
(21)low quality WMV (1-pass) (017min:105min film w/2 1.5mhz cpus) | |
(22)custom quality | |
Press 'Enter' for default (default is '14')... " | |
read Q | |
###### extra blank space | |
echo " | |
" | |
###### default ###### | |
if [[ -z $Q ]] ; then | |
# If no quality passed, default to 14 | |
Q=14 | |
fi | |
################################################## | |
# Frame rate # | |
################################################## | |
###### frame rate menu | |
if [[ $Q != 1 &amp;&amp; $Q != 2 ]] ; then | |
echo -n "Select a frame rate level: | |
(1) NTSC-VIDEO (~ 30 fps) | |
(2) NTSC-FILM (~ 24 fps) | |
(3) PAL (~ 25 fps) | |
(4) Streaming (~ 15 fps) | |
(5) custom | |
Press 'Enter' for default (default is '2')... | |
" | |
read FRAME_RATE_NUMBER | |
###### extra blank space | |
echo " | |
" | |
###### default | |
if [[ -z $FRAME_RATE_NUMBER ]] ; then | |
# If no frame rate passed, default to 2 | |
FRAME_RATE="-ofps 24000/1001" | |
fi | |
###### preset | |
if [[ $FRAME_RATE_NUMBER = 1 ]] ; then | |
FRAME_RATE="-ofps 30000/1001" | |
fi | |
if [[ $FRAME_RATE_NUMBER = 2 ]] ; then | |
FRAME_RATE="-ofps 24000/1001" | |
fi | |
if [[ $FRAME_RATE_NUMBER = 3 ]] ; then | |
FRAME_RATE="-ofps 25000/1001" | |
fi | |
if [[ $FRAME_RATE_NUMBER = 4 ]] ; then | |
FRAME_RATE="-ofps 15000/1001" | |
fi | |
###### custom | |
if [[ $FRAME_RATE_NUMBER = 5 ]] ; then | |
echo -n "Please enter a frame rate: " | |
echo -n "...like this: '-ofps 15000/1001'..." | |
read CUSTOM_FRAME_RATE | |
FRAME_RATE=$CUSTOM_FRAME_RATE | |
fi | |
fi | |
################################################## | |
# Divx ffourcc menu # | |
################################################## | |
###### DivX ffourcc menu | |
if [[ $Q != 1 &amp;&amp; $Q != 2 &amp;&amp; $Q != 3 &amp;&amp; $Q != 5 &amp;&amp; $Q != 6 &amp;&amp; $Q != 8 &amp;&amp; $Q != 9 &amp;&amp; Q != 11 &amp;&amp; $Q != 12 &amp;&amp; $Q != 14 &amp;&amp; $Q != 15 &amp;&amp; $Q != 17 &amp;&amp; $Q != 18 &amp;&amp; $Q != 20 &amp;&amp; $Q != 21 &amp;&amp; $Q != 22 ]] ; then | |
echo -n "Select the desired Divx or generic MPEG4 quality: | |
(1) FFMPEG MPEG-4 | |
(2) DivX MPEG-4 Version 4 | |
(3) DivX MPEG-4 Version 5 | |
Press 'Enter' for default (default is '3')... | |
" | |
read DIVX_NUMBER | |
###### extra blank space | |
echo " | |
" | |
###### default | |
if [[ -z $DIVX_NUMBER ]] ; then | |
# If no file passed, default to 3 | |
DIVX="-ffourcc DX50" | |
fi | |
###### preset | |
if [[ $DIVX_NUMBER = 1 ]] ; then | |
DIVX= | |
fi | |
if [[ $DIVX_NUMBER = 2 ]] ; then | |
DIVX="-ffourcc DIVX" | |
fi | |
if [[ $DIVX_NUMBER = 3 ]] ; then | |
DIVX="-ffourcc DX50" | |
fi | |
fi | |
################################################## | |
# Conversion is starting # | |
################################################## | |
###### conversion is starting message | |
if [[ $Q != 22 ]] ; then | |
read -sn 1 -p "Your conversion is about to begin, press any key to continue..." | |
fi | |
###### extra blank space | |
echo " | |
" | |
################################################## | |
# Conversions # | |
################################################## | |
###### preset ###### | |
###### exact copy quality (DVD/ISO sources only) | |
if [[ $Q = 1 ]] ; then | |
# If 1 passed, use MPEG exact copy quality | |
mplayer $INPUT_FILE -dumpstream -dumpfile $OUTPUT_FILE.mpg | |
fi | |
if [[ $Q = 2 ]] ; then | |
# If 2 passed, use MPEG exact copy audio-only quality | |
mplayer $INPUT_FILE -dumpaudio -dumpfile $OUTPUT_FILE.ac3 | |
fi | |
###### very high quality | |
if [[ $Q = 3 ]] ; then | |
# very high H.264 quality (2-pass) | |
# actual two-pass conversion | |
mencoder $INPUT_FILE -nosound -ovc x264 -x264encopts pass=1:subq=1:partitions=all:8x8dct:me=umh:frameref=1:bframes=3:b_pyramid=normal:weight_b:threads=auto:bitrate=2000 -vf pp=de,pullup,softskip,harddup,crop=${CROP_VALUES} $FRAME_RATE -o '/dev/null' | |
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=192:vol=3 -ovc x264 -x264encopts pass=2:subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid=normal:weight_b:threads=auto:bitrate=2000 -vf pp=de,pullup,softskip,harddup,crop=${CROP_VALUES} $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
if [[ $Q = 4 ]] ; then | |
# very high MPEG4 quality (2-pass) | |
# actual two-pass conversion | |
mencoder $INPUT_FILE -nosound -ovc lavc $DIVX -lavcopts vpass=1:vcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo:vhq:threads=$CPUS:vbitrate=2000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES} $FRAME_RATE -o '/dev/null' | |
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=192:vol=3 -ovc lavc $DIVX -lavcopts vpass=2:vcodec=mpeg4:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2:vhq:threads=$CPUS:vbitrate=2000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES} $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
if [[ $Q = 5 ]] ; then | |
# very high XVID quality (2-pass) | |
# actual two-pass conversion | |
mencoder $INPUT_FILE -nosound -ovc xvid -xvidencopts pass=1:chroma_opt:vhq=1:bvhq=1:quant_type=mpeg:threads=$CPUS:bitrate=2000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES} $FRAME_RATE -o '/dev/null' | |
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=192:vol=3 -ovc xvid -xvidencopts pass=2:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:threads=$CPUS:bitrate=2000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES} $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
if [[ $Q = 6 ]] ; then | |
# very high H.264 quality (1-pass) | |
# actual one-pass conversion | |
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=192:vol=3 -ovc x264 -x264encopts subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid=normal:weight_b:threads=auto:bitrate=2000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES} $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
if [[ $Q = 7 ]] ; then | |
# very high MPEG4 quality (1-pass) | |
# actual one-pass conversion | |
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=192:vol=3 -ovc lavc $DIVX -lavcopts vcodec=mpeg4:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2:vhq:threads=$CPUS:vbitrate=2000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES} $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
if [[ $Q = 8 ]] ; then | |
# very high XVID quality (1-pass) | |
# actual one-pass conversion | |
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=192:vol=3 -ovc xvid -xvidencopts chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:threads=$CPUS:bitrate=2000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES} $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
###### high quality | |
if [[ $Q = 9 ]] ; then | |
# high H.264 quality (2-pass) | |
# actual two-pass conversion | |
mencoder $INPUT_FILE -nosound -ovc x264 -x264encopts pass=1:subq=1:partitions=all:8x8dct:me=umh:frameref=1:bframes=3:b_pyramid=normal:weight_b:threads=auto:bitrate=-700000 -vf pp=de,pullup,softskip,harddup,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o '/dev/null' | |
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc x264 -x264encopts pass=2:subq=5:8x8dct:frameref=2:bframes=3:b_pyramid=normal:weight_b:threads=auto:bitrate=1200 -vf pp=de,pullup,softskip,harddup,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
if [[ $Q = 10 ]] ; then | |
# high MPEG4 quality (2-pass) | |
# actual two-pass conversion | |
mencoder $INPUT_FILE -nosound -ovc lavc $DIVX -lavcopts vpass=1:vcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo:vhq:threads=$CPUS:vbitrate=1100 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o '/dev/null' | |
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc lavc $DIVX -lavcopts vpass=2:vcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo:vhq:threads=$CPUS:vbitrate=1100 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
if [[ $Q = 11 ]] ; then | |
# high XVID quality (2-pass) | |
# actual two-pass conversion | |
mencoder $INPUT_FILE -nosound -ovc xvid -xvidencopts pass=1:vhq=1:bvhq=1:chroma_opt:quant_type=mpeg:threads=$CPUS:bitrate=-700000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o '/dev/null' | |
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc xvid -xvidencopts pass=2:vhq=2:bvhq=1:chroma_opt:quant_type=mpeg:threads=$CPUS:bitrate=-700000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
if [[ $Q = 12 ]] ; then | |
# high H.264 quality (1-pass) | |
# actual one-pass conversion | |
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc x264 -x264encopts subq=5:8x8dct:frameref=2:bframes=3:b_pyramid=normal:weight_b:threads=auto:bitrate=-700000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
if [[ $Q = 13 ]] ; then | |
# high MPEG4 quality (1-pass) | |
# actual one-pass conversion | |
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc lavc $DIVX -lavcopts vcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo:vhq:threads=$CPUS:vbitrate=1100 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
if [[ $Q = 14 ]] ; then | |
# high XVID quality (1-pass) | |
# actual one-pass conversion | |
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc xvid -xvidencopts vhq=2:bvhq=1:chroma_opt:quant_type=mpeg:threads=$CPUS:bitrate=-700000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
###### fast quality | |
if [[ $Q = 15 ]] ; then | |
# fast H.264 quality (1-pass) | |
# actual one-pass conversion | |
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc x264 -x264encopts subq=4:8x8dct:bframes=2:b_pyramid=normal:weight_b:threads=auto:bitrate=-700000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
if [[ $Q = 16 ]] ; then | |
# fast MPEG4 quality (1-pass) | |
# actual one-pass conversion | |
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc lavc $DIVX -lavcopts vcodec=mpeg4:mbd=2:trell:v4mv:turbo:vhq:threads=$CPUS:vbitrate=1100 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
if [[ $Q = 17 ]] ; then | |
# fast XVID quality (1-pass) | |
# actual one-pass conversion | |
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc xvid -xvidencopts turbo:vhq=0:threads=$CPUS:bitrate=-700000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
###### YouTube quality | |
if [[ $Q = 18 ]] ; then | |
# YouTube MPEG4 quality (1-pass) | |
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc lavc $DIVX -lavcopts vcodec=mpeg4:threads=$CPUS -ffourcc xvid -vf scale=320:-2,expand=:240:::1 $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
###### realtime quality | |
if [[ $Q = 19 ]] ; then | |
# realtime MPEG4 quality (1-pass) | |
# actual one-pass conversion | |
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc lavc $DIVX -lavcopts vcodec=mpeg4:mbd=2:turbo:vhq:threads=$CPUS:vbitrate=1100 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
if [[ $Q = 20 ]] ; then | |
# realtime XVID quality (1-pass) | |
# actual one-pass conversion | |
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc xvid -xvidencopts turbo:nochroma_me:notrellis:max_bframes=0:vhq=0:threads=$CPUS:bitrate=-700000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
###### low quality | |
if [[ $Q = 21 ]] ; then | |
# low WMV quality (1-pass) | |
# actual one-pass conversion | |
mencoder $INPUT_FILE -oac mp3lame -lameopts cbr:br=16:vol=3 -ovc lavc -lavcopts vcodec=wmv2:vbitrate=100 -vf scale -zoom -xy 240 $FRAME_RATE -o $OUTPUT_FILE.wmv | |
fi | |
###################################################################################################################################################### | |
###### CUSTOM QUALITY CHOICE #17 OPTION AND CHOICES ###### CUSTOM QUALITY CHOICE #17 OPTION AND CHOICES ###### MISCELLANEOUS ###### CUSTOM QUALITY CHOICE | |
###################################################################################################################################################### | |
################################################## | |
# Custom quality # | |
################################################## | |
if [[ $Q = 22 ]] ; then | |
# If 22 passed, use custom quality (1-pass and 2-pass) | |
################################################## | |
# Custom type options # | |
################################################## | |
echo -n "What type of AVI do you want to create with custom settings?: | |
(1) H.264 (2-Pass) | |
(2) H.264 (1-Pass) | |
(3) DIVX/MPEG-4 (2-Pass) | |
(4) DIVX/MPEG-4 (1-Pass) | |
(5) XVID (2-Pass) | |
(6) XVID (1-Pass) | |
Press 'Enter' for default (default is '6')... | |
" | |
read MPEG4_TYPE | |
###### extra blank space | |
echo " | |
" | |
###### default ###### | |
if [[ -z $MPEG4_TYPE ]] ; then | |
# If no media passed, default to 6 | |
MPEG4_TYPE=6 | |
fi | |
erlo | |
################################################## | |
# Custom Divx ffourcc menu # | |
################################################## | |
###### DivX ffourcc menu | |
if [[ $MPEG4_TYPE != 1 &amp;&amp; $MPEG4_TYPE != 2 &amp;&amp; $MPEG4_TYPE != 5 &amp;&amp; $MPEG4_TYPE != 6 ]] ; then | |
echo -n "Select the desired Divx or generic MPEG4 quality: | |
(1) FFMPEG MPEG-4 | |
(2) DivX MPEG-4 Version 4 | |
(3) DivX MPEG-4 Version 5 | |
Press 'Enter' for default (default is '3')... | |
" | |
read CUSTOM_DIVX_NUMBER | |
###### extra blank space | |
echo " | |
" | |
###### default | |
if [[ -z $CUSTOM_DIVX_NUMBER ]] ; then | |
# If no file passed, default to 3 | |
CUSTOM_DIVX="-ffourcc DX50" | |
fi | |
###### preset | |
if [[ $CUSTOM_DIVX_NUMBER = 1 ]] ; then | |
CUSTOM_DIVX= | |
fi | |
if [[ $CUSTOM_DIVX_NUMBER = 2 ]] ; then | |
CUSTOM_DIVX="-ffourcc DIVX" | |
fi | |
if [[ $CUSTOM_DIVX_NUMBER = 3 ]] ; then | |
CUSTOM_DIVX="-ffourcc DX50" | |
fi | |
fi | |
################################################## | |
# Custom scaling # | |
################################################## | |
echo -n "Choose a resolution: | |
(1) original resolution(cropped, but no scaling) | |
(2) 624 x 352 scaling (fullscreen/widescreen) | |
(3) 624 x ??? scaling (fullscreen/widescreen) (auto-height) | |
(4) 800 x 600 scaling (fullscreen) | |
(5) 800 x ??? scaling (fullscreen) (auto-height) | |
(6) 600 x 400 scaling (widescreen) | |
(7) 600 x ??? scaling (widescreen) (auto-height) | |
(8) 640 x 480 scaling (fullscreen) | |
(9) 640 x ??? scaling (fullscreen) (auto-height) | |
(10) 704 x 294 scaling (widescreen) (2.35:1) | |
(11) 704 x ??? scaling (widescreen) (2.35:1) (auto-height) | |
(12) 768 x 432 scaling (widescreen) (16:9) | |
(13) 768 x ??? scaling (widescreen) (16:9) (auto-height) | |
(14) custom | |
Press 'Enter' for default (default is '3')... | |
" | |
read SCALING_NUMBER | |
###### extra blank space | |
echo " | |
" | |
###### default | |
if [[ -z $SCALING_NUMBER ]] ; then | |
# If no file passed, default to 3 | |
SCALING="scale -zoom -xy 624" | |
fi | |
###### preset | |
if [[ $SCALING_NUMBER = 1 ]] ; then | |
SCALING="scale=${CROP_VALUES}" | |
fi | |
if [[ $SCALING_NUMBER = 2 ]] ; then | |
SCALING="scale=624:352" | |
fi | |
if [[ $SCALING_NUMBER = 3 ]] ; then | |
SCALING="scale -zoom -xy 624" | |
fi | |
if [[ $SCALING_NUMBER = 4 ]] ; then | |
SCALING="scale=800:600" | |
fi | |
if [[ $SCALING_NUMBER = 5 ]] ; then | |
SCALING="scale -zoom -xy 800" | |
fi | |
if [[ $SCALING_NUMBER = 6 ]] ; then | |
SCALING="scale=600:400" | |
fi | |
if [[ $SCALING_NUMBER = 7 ]] ; then | |
SCALING="scale -zoom -xy 600" | |
fi | |
if [[ $SCALING_NUMBER = 8 ]] ; then | |
SCALING="scale=640:480" | |
fi | |
if [[ $SCALING_NUMBER = 9 ]] ; then | |
SCALING="scale -zoom -xy 640" | |
fi | |
if [[ $SCALING_NUMBER = 10 ]] ; then | |
SCALING="scale=704:294" | |
fi | |
if [[ $SCALING_NUMBER = 11 ]] ; then | |
SCALING="sscale -zoom -xy 704" | |
fi | |
if [[ $SCALING_NUMBER = 12 ]] ; then | |
SCALING="scale=768:432" | |
fi | |
if [[ $SCALING_NUMBER = 13 ]] ; then | |
SCALING="scale -zoom -xy 768" | |
fi | |
###### custom | |
if [[ $SCALING_NUMBER = 14 ]] ; then | |
echo -n "Please enter a custom scale: " | |
echo -n "...like this: 'scale=800:600' or 'scale -zoom -xy 624'..." | |
read CUSTOM_SCALING | |
SCALING=$CUSTOM_SCALING | |
fi | |
################################################## | |
# Custom total/video bitrate level # | |
################################################## | |
echo -n "Select a total/video bitrate level: | |
(1) -350000 (= max file size of ~ 350MB) (H.264/XVID only) | |
(2) -700000 (= max file size of ~ 700MB) (H.264/XVID only) | |
(3) -1000000 (= max file size of ~ 1GB) (H.264/XVID only) | |
(4) 400 kbps | |
(5) 600 kbps | |
(6) 800 kbps | |
(7) 1000 kbps | |
(8) 1100 kbps | |
(9) 1150 kbps | |
(10) 1200 kbps | |
(11) 1250 kbps | |
(12) 1500 kbps | |
(13) 2000 kbps | |
(14) 3000 kbps | |
(15) 4000 kbps | |
(16) 5000 kbps | |
(17) custom | |
Press 'Enter' for default (default is '2')... | |
" | |
read BITRATE_NUMBER | |
###### extra blank space | |
echo " | |
" | |
###### default | |
if [[ -z $BITRATE_NUMBER ]] ; then | |
# If no file passed, default to 2 | |
BITRATE=-700000 | |
fi | |
###### preset | |
if [[ $BITRATE_NUMBER = 1 ]] ; then | |
BITRATE=-350000 | |
fi | |
if [[ $BITRATE_NUMBER = 2 ]] ; then | |
BITRATE=-700000 | |
fi | |
if [[ $BITRATE_NUMBER = 3 ]] ; then | |
BITRATE=-1000000 | |
fi | |
if [[ $BITRATE_NUMBER = 4 ]] ; then | |
BITRATE=400 | |
fi | |
if [[ $BITRATE_NUMBER = 5 ]] ; then | |
BITRATE=600 | |
fi | |
if [[ $BITRATE_NUMBER = 6 ]] ; then | |
BITRATE=800 | |
fi | |
if [[ $BITRATE_NUMBER = 7 ]] ; then | |
BITRATE=1000 | |
fi | |
if [[ $BITRATE_NUMBER = 8 ]] ; then | |
BITRATE=1100 | |
fi | |
if [[ $BITRATE_NUMBER = 9 ]] ; then | |
BITRATE=1150 | |
fi | |
if [[ $BITRATE_NUMBER = 10 ]] ; then | |
BITRATE=1200 | |
fi | |
if [[ $BITRATE_NUMBER = 11 ]] ; then | |
BITRATE=1250 | |
fi | |
if [[ $BITRATE_NUMBER = 12 ]] ; then | |
BITRATE=1500 | |
fi | |
if [[ $BITRATE_NUMBER = 13 ]] ; then | |
BITRATE=2000 | |
fi | |
if [[ $BITRATE_NUMBER = 14 ]] ; then | |
BITRATE=3000 | |
fi | |
if [[ $BITRATE_NUMBER = 15 ]] ; then | |
BITRATE=4000 | |
fi | |
if [[ $BITRATE_NUMBER = 16 ]] ; then | |
BITRATE=5000 | |
fi | |
###### custom | |
if [[ $BITRATE_NUMBER = 17 ]] ; then | |
echo -n "Please enter a custom total/video bitrate: " | |
echo -n "...like this: '1175'..." | |
read CUSTOM_BITRATE | |
BITRATE=$CUSTOM_BITRATE | |
fi | |
################################################## | |
# Custom audio track # | |
################################################## | |
echo -n "Select an audio track: | |
(1) -aid 0 (good when getting no audio with others) (ex.: Custom DVD rips) | |
(2) -aid 127 | |
(3) -aid 128 (often main language non-director's commentary audio track) | |
(4) -aid 129 (often second track, such as director's commentary) | |
(5) -aid 130 | |
(6) -aid 131 | |
(7) -aid 132 | |
(8) -aid 160 | |
(9) custom | |
Press 'Enter' for default (default is 'null', which is DVD default)... | |
" | |
read AUDIO_TRACK_NUMBER | |
###### extra blank space | |
echo " | |
" | |
###### default | |
if [[ -z $AUDIO_TRACK_NUMBER ]] ; then | |
# If no file passed, default to null | |
AUDIO_TRACK= | |
fi | |
###### preset | |
if [[ $AUDIO_TRACK_NUMBER = 1 ]] ; then | |
AUDIO_TRACK="-aid 0" | |
fi | |
if [[ $AUDIO_TRACK_NUMBER = 2 ]] ; then | |
AUDIO_TRACK="-aid 127" | |
fi | |
if [[ $AUDIO_TRACK_NUMBER = 3 ]] ; then | |
AUDIO_TRACK="-aid 128" | |
fi | |
if [[ $AUDIO_TRACK_NUMBER = 4 ]] ; then | |
AUDIO_TRACK="-aid 129" | |
fi | |
if [[ $AUDIO_TRACK_NUMBER = 5 ]] ; then | |
AUDIO_TRACK="-aid 130" | |
fi | |
if [[ $AUDIO_TRACK_NUMBER = 6 ]] ; then | |
AUDIO_TRACK="-aid 131" | |
fi | |
if [[ $AUDIO_TRACK_NUMBER = 7 ]] ; then | |
AUDIO_TRACK="-aid 132" | |
fi | |
if [[ $AUDIO_TRACK_NUMBER = 8 ]] ; then | |
AUDIO_TRACK="-aid 160" | |
fi | |
###### custom | |
if [[ $AUDIO_TRACK_NUMBER = 9 ]] ; then | |
echo -n "Please enter a custom audio track: " | |
echo -n "...like this: '-aid 128'..." | |
read CUSTOM_AUDIO_TRACK | |
AUDIO_TRACK=$CUSTOM_AUDIO_TRACK | |
fi | |
################################################## | |
# Custom audio track language # | |
################################################## | |
echo -n "Select an audio track language: | |
(1) Chinese - zh | |
(2) Dansk (Danish) - da | |
(3) Deutsch - de | |
(4) English - en | |
(5) Español - es | |
(6) Français - fr | |
(7) Greek - el | |
(8) Italiano (Italian) - it | |
(9) Japanese - ja | |
(10) Korean - ko | |
(11) Nederlands - nl | |
(12) Polish - pl | |
(13) Portugues - pt | |
(14) Russian - ru | |
Or input your own (like this: 'en')... | |
Press 'Enter' for default (default is 'null', which is DVD default)... | |
" | |
read AUDIO_LANGUAGE_NUMBER | |
###### extra blank space | |
echo " | |
" | |
###### default | |
if [[ -z $AUDIO_LANGUAGE_NUMBER ]] ; then | |
# If no file passed, default to null | |
AUDIO_LANGUAGE= | |
fi | |
###### preset | |
if [[ $AUDIO_LANGUAGE_NUMBER = 1 ]] ; then | |
AUDIO_LANGUAGE="-alang zh" | |
fi | |
if [[ $AUDIO_LANGUAGE_NUMBER = 2 ]] ; then | |
AUDIO_LANGUAGE="-alang da" | |
fi | |
if [[ $AUDIO_LANGUAGE_NUMBER = 3 ]] ; then | |
AUDIO_LANGUAGE="-alang de" | |
fi | |
if [[ $AUDIO_LANGUAGE_NUMBER = 4 ]] ; then | |
AUDIO_LANGUAGE="-alang en" | |
fi | |
if [[ $AUDIO_LANGUAGE_NUMBER = 5 ]] ; then | |
AUDIO_LANGUAGE="-alang es" | |
fi | |
if [[ $AUDIO_LANGUAGE_NUMBER = 6 ]] ; then | |
AUDIO_LANGUAGE="-alang fr" | |
fi | |
if [[ $AUDIO_LANGUAGE_NUMBER = 7 ]] ; then | |
AUDIO_LANGUAGE="-alang el" | |
fi | |
if [[ $AUDIO_LANGUAGE_NUMBER = 8 ]] ; then | |
AUDIO_LANGUAGE="-alang it" | |
fi | |
if [[ $AUDIO_LANGUAGE_NUMBER = 9 ]] ; then | |
AUDIO_LANGUAGE="-alang ja" | |
fi | |
if [[ $AUDIO_LANGUAGE_NUMBER = 10 ]] ; then | |
AUDIO_LANGUAGE="-alang ko" | |
fi | |
if [[ $AUDIO_LANGUAGE_NUMBER = 11 ]] ; then | |
AUDIO_LANGUAGE="-alang nl" | |
fi | |
if [[ $AUDIO_LANGUAGE_NUMBER = 12 ]] ; then | |
AUDIO_LANGUAGE="-alang pl" | |
fi | |
if [[ $AUDIO_LANGUAGE_NUMBER = 13 ]] ; then | |
AUDIO_LANGUAGE="-alang pt" | |
fi | |
if [[ $AUDIO_LANGUAGE_NUMBER = 14 ]] ; then | |
AUDIO_LANGUAGE="-alang ru" | |
fi | |
################################################## | |
# Custom audio bitrate level # | |
################################################## | |
echo -n "Select an audio bitrate level: | |
(1) 48 kbps | |
(2) 64 kbps | |
(3) 128 kbps | |
(4) 160 kbps | |
(5) 192 kbps | |
(6) 224 kbps | |
(7) 256 kbps | |
(8) 320 kbps | |
(9) custom | |
Press 'Enter' for default (default is '3')... | |
" | |
read AUDIO_BITRATE_NUMBER | |
###### extra blank space | |
echo " | |
" | |
###### default | |
if [[ -z $AUDIO_BITRATE_NUMBER ]] ; then | |
# If no file passed, default to 3 | |
AUDIO_BITRATE=128 | |
fi | |
###### preset | |
if [[ $AUDIO_BITRATE_NUMBER = 1 ]] ; then | |
AUDIO_BITRATE=48 | |
fi | |
if [[ $AUDIO_BITRATE_NUMBER = 2 ]] ; then | |
AUDIO_BITRATE=96 | |
fi | |
if [[ $AUDIO_BITRATE_NUMBER = 3 ]] ; then | |
AUDIO_BITRATE=128 | |
fi | |
if [[ $AUDIO_BITRATE_NUMBER = 4 ]] ; then | |
AUDIO_BITRATE=160 | |
fi | |
if [[ $AUDIO_BITRATE_NUMBER = 5 ]] ; then | |
AUDIO_BITRATE=192 | |
fi | |
if [[ $AUDIO_BITRATE_NUMBER = 6 ]] ; then | |
AUDIO_BITRATE=224 | |
fi | |
if [[ $AUDIO_BITRATE_NUMBER = 7 ]] ; then | |
AUDIO_BITRATE=256 | |
fi | |
if [[ $AUDIO_BITRATE_NUMBER = 8 ]] ; then | |
AUDIO_BITRATE=320 | |
fi | |
###### custom | |
if [[ $AUDIO_BITRATE_NUMBER = 9 ]] ; then | |
echo -n "Please enter a custom audio bitrate level: " | |
echo -n "...like this: '100'..." | |
read CUSTOM_AUDIO_BITRATE | |
AUDIO_BITRATE=$CUSTOM_AUDIO_BITRATE | |
fi | |
################################################## | |
# Custom audio bitrate type # | |
################################################## | |
echo -n "Select an audio bitrate type: | |
(1) Average Bitrate | |
(2) Constant Bitrate | |
(3) Variable Bitrate | |
Press 'Enter' for default (default is '1')... | |
" | |
read AUDIO_BITRATE_TYPE_NUMBER | |
###### extra blank space | |
echo " | |
" | |
###### default | |
if [[ -z $AUDIO_BITRATE_TYPE_NUMBER ]] ; then | |
# If no file passed, default to abr | |
AUDIO_BITRATE_TYPE=abr | |
fi | |
###### preset | |
if [[ $AUDIO_BITRATE_TYPE_NUMBER = 1 ]] ; then | |
AUDIO_BITRATE_TYPE=abr | |
fi | |
if [[ $AUDIO_BITRATE_TYPE_NUMBER = 2 ]] ; then | |
AUDIO_BITRATE_TYPE=cbr | |
fi | |
if [[ $AUDIO_BITRATE_TYPE_NUMBER = 3 ]] ; then | |
AUDIO_BITRATE_TYPE=vbr | |
fi | |
################################################## | |
# Custom audio volume level # | |
################################################## | |
echo -n "Select an audio volume increase level (1-10): | |
Press 'Enter' for default (default is '3')... | |
" | |
read AUDIO_VOLUME_LEVEL | |
###### extra blank space | |
echo " | |
" | |
###### default | |
if [[ -z $AUDIO_VOLUME_LEVEL ]] ; then | |
# If no file passed, default to 3 | |
AUDIO_VOLUME_LEVEL=3 | |
fi | |
################################################## | |
# Subtitles? # | |
################################################## | |
echo -n "Do you want subtitles?: | |
(1) No | |
(2) Yes (DVD/ISO only) | |
Press 'Enter' for default (default is '1', for no subtitles)... | |
" | |
read SUBTITLE_NUMBER | |
###### extra blank space | |
echo " | |
" | |
###### default | |
if [[ -z $SUBTITLE_NUMBER ]] ; then | |
# If no file passed, default to null | |
SUBTITLE_TRACK= | |
SUBTITLE_LANGUAGE= | |
SUBTITLE_TYPE= | |
fi | |
###### preset | |
if [[ $SUBTITLE_NUMBER = 1 ]] ; then | |
SUBTITLE_TRACK= | |
SUBTITLE_LANGUAGE= | |
SUBTITLE_TYPE= | |
fi | |
if [[ $SUBTITLE_NUMBER = 2 ]] ; then | |
################################################## | |
# Custom subtitle track # | |
################################################## | |
echo -n "Select a subtitle track: | |
(1) -sid 0 | |
(2) -sid 1 | |
(3) -sid 2 | |
(4) -sid 3 | |
(5) -sid 4 | |
(6) -sid 5 | |
(7) -sid 6 | |
(8) -sid 7 | |
(9) custom | |
Press 'Enter' for default (default is 'null')... | |
" | |
read SUBTITLE_TRACK_NUMBER | |
###### extra blank space | |
echo " | |
" | |
###### default | |
if [[ -z $SUBTITLE_TRACK_NUMBER ]] ; then | |
# If no file passed, default to null | |
SUBTITLE_TRACK= | |
fi | |
###### preset | |
if [[ $SUBTITLE_TRACK_NUMBER = 1 ]] ; then | |
SUBTITLE_TRACK="-sid 0" | |
fi | |
if [[ $SUBTITLE_TRACK_NUMBER = 2 ]] ; then | |
SUBTITLE_TRACK="-sid 1" | |
fi | |
if [[ $SUBTITLE_TRACK_NUMBER = 3 ]] ; then | |
SUBTITLE_TRACK="-sid 2" | |
fi | |
if [[ $SUBTITLE_TRACK_NUMBER = 4 ]] ; then | |
SUBTITLE_TRACK="-sid 3" | |
fi | |
if [[ $SUBTITLE_TRACK_NUMBER = 5 ]] ; then | |
SUBTITLE_TRACK="-sid 4" | |
fi | |
if [[ $SUBTITLE_TRACK_NUMBER = 6 ]] ; then | |
SUBTITLE_TRACK="-sid 5" | |
fi | |
if [[ $SUBTITLE_TRACK_NUMBER = 7 ]] ; then | |
SUBTITLE_TRACK="-sid 6" | |
fi | |
if [[ $SUBTITLE_TRACK_NUMBER = 8 ]] ; then | |
SUBTITLE_TRACK="-sid 7" | |
fi | |
###### custom | |
if [[ $SUBTITLE_TRACK_NUMBER = 9 ]] ; then | |
echo -n "Please enter a custom subtitles track: " | |
echo -n "...like this: '-sid 10'..." | |
read CUSTOM_SUBTITLE_TRACK | |
SUBTITLE_TRACK=$CUSTOM_SUBTITLE_TRACK | |
fi | |
################################################## | |
# Custom subtitles track language # | |
################################################## | |
echo -n "Select a subtitles track language: | |
(1) Chinese - zh | |
(2) Dansk (Danish) - da | |
(3) Deutsch - de | |
(4) English - en | |
(5) Español - es | |
(6) Français - fr | |
(7) Greek - el | |
(8) Italiano (Italian) - it | |
(9) Japanese - ja | |
(10) Korean - ko | |
(11) Nederlands - nl | |
(12) Polish - pl | |
(13) Portugues - pt | |
(14) Russian - ru | |
Or input your own (like this: 'en')... | |
Press 'Enter' for default (default is 'null')... | |
" | |
read SUBTITLE_LANGUAGE_NUMBER | |
###### extra blank space | |
echo " | |
" | |
###### default | |
if [[ -z $SUBTITLE_LANGUAGE_NUMBER ]] ; then | |
# If no file passed, default to null | |
SUBTITLE_LANGUAGE= | |
fi | |
###### preset | |
if [[ $SUBTITLE_LANGUAGE_NUMBER = 1 ]] ; then | |
SUBTITLE_LANGUAGE="-slang zh" | |
fi | |
if [[ $SUBTITLE_LANGUAGE_NUMBER = 2 ]] ; then | |
SUBTITLE_LANGUAGE="-slang da" | |
fi | |
if [[ $SUBTITLE_LANGUAGE_NUMBER = 3 ]] ; then | |
SUBTITLE_LANGUAGE="-slang de" | |
fi | |
if [[ $SUBTITLE_LANGUAGE_NUMBER = 4 ]] ; then | |
SUBTITLE_LANGUAGE="-slang en" | |
fi | |
if [[ $SUBTITLE_LANGUAGE_NUMBER = 5 ]] ; then | |
SUBTITLE_LANGUAGE="-slang es" | |
fi | |
if [[ $SUBTITLE_LANGUAGE_NUMBER = 6 ]] ; then | |
SUBTITLE_LANGUAGE="-slang fr" | |
fi | |
if [[ $SUBTITLE_LANGUAGE_NUMBER = 7 ]] ; then | |
SUBTITLE_LANGUAGE="-slang el" | |
fi | |
if [[ $SUBTITLE_LANGUAGE_NUMBER = 8 ]] ; then | |
SUBTITLE_LANGUAGE="-slang it" | |
fi | |
if [[ $SUBTITLE_LANGUAGE_NUMBER = 9 ]] ; then | |
SUBTITLE_LANGUAGE="-slang ja" | |
fi | |
if [[ $SUBTITLE_LANGUAGE_NUMBER = 10 ]] ; then | |
SUBTITLE_LANGUAGE="-slang ko" | |
fi | |
if [[ $SUBTITLE_LANGUAGE_NUMBER = 11 ]] ; then | |
SUBTITLE_LANGUAGE="-slang nl" | |
fi | |
if [[ $SUBTITLE_LANGUAGE_NUMBER = 12 ]] ; then | |
SUBTITLE_LANGUAGE="-slang pl" | |
fi | |
if [[ $SUBTITLE_LANGUAGE_NUMBER = 13 ]] ; then | |
SUBTITLE_LANGUAGE="-slang pt" | |
fi | |
if [[ $SUBTITLE_LANGUAGE_NUMBER = 14 ]] ; then | |
SUBTITLE_LANGUAGE="-slang ru" | |
fi | |
################################################## | |
# Subtitle Kind? # | |
################################################## | |
echo -n "What kind of subtitles do you prefer?: | |
(1) Embed onto the video | |
(2) Embed into a separate file | |
Press 'Enter' for default (default is '1')... | |
" | |
read SUBTITLE_TYPE_NUMBER | |
###### extra blank space | |
echo " | |
" | |
###### default | |
if [[ -z $SUBTITLE_TYPE_NUMBER ]] ; then | |
# If no file passed, default to null | |
SUBTITLE_TYPE= | |
fi | |
###### preset | |
if [[ $SUBTITLE_TYPE_NUMBER = 1 ]] ; then | |
SUBTITLE_TYPE= | |
fi | |
if [[ $SUBTITLE_TYPE_NUMBER = 2 ]] ; then | |
SUBTITLE_TYPE="-vobsubout ${OUTPUT_FILE}" | |
fi | |
###### closes the preset of 'yes' for subtitles | |
fi | |
################################################## | |
# Custom conversion is starting # | |
################################################## | |
###### extra blank space | |
echo " | |
" | |
###### custom conversion is starting message | |
read -sn 1 -p "Your custom conversion is about to begin, press any key to continue..." | |
################################################## | |
# Custom conversions (very high quality settings)# | |
################################################## | |
###### custom preset ###### | |
###### H.264 | |
if [[ $MPEG4_TYPE = 1 ]] ; then | |
# actual two-pass conversion | |
mencoder $INPUT_FILE $AUDIO_TRACK $AUDIO_LANGUAGE $SUBTITLE_TRACK $SUBTITLE_LANGUAGE $SUBTITLE_TYPE -nosound -ovc x264 -x264encopts pass=1:subq=1:partitions=all:8x8dct:me=umh:frameref=1:bframes=3:b_pyramid=normal:weight_b:threads=auto:bitrate=$BITRATE -vf pp=de,pullup,softskip,harddup,crop=${CROP_VALUES},$SCALING $FRAME_RATE -o '/dev/null' | |
mencoder $INPUT_FILE $AUDIO_TRACK $AUDIO_LANGUAGE $SUBTITLE_TRACK $SUBTITLE_LANGUAGE $SUBTITLE_TYPE -oac mp3lame -lameopts $AUDIO_BITRATE_TYPE:br=$AUDIO_BITRATE:vol=$AUDIO_VOLUME_LEVEL -ovc x264 -x264encopts pass=2:subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid=normal:weight_b:threads=auto:bitrate=$BITRATE -vf pp=de,pullup,softskip,harddup,crop=${CROP_VALUES},$SCALING $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
if [[ $MPEG4_TYPE = 2 ]] ; then | |
# actual one-pass conversion | |
mencoder $INPUT_FILE $AUDIO_TRACK $AUDIO_LANGUAGE $SUBTITLE_TRACK $SUBTITLE_LANGUAGE $SUBTITLE_TYPE -oac mp3lame -lameopts $AUDIO_BITRATE_TYPE:br=$AUDIO_BITRATE:vol=$AUDIO_VOLUME_LEVEL -ovc x264 -x264encopts subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid=normal:weight_b:threads=auto:bitrate=$BITRATE -vf pp=de,pullup,softskip,crop=${CROP_VALUES},$SCALING $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
###### MPEG4 | |
if [[ $MPEG4_TYPE = 3 ]] ; then | |
# actual two-pass conversion | |
mencoder $INPUT_FILE $AUDIO_TRACK $AUDIO_LANGUAGE $SUBTITLE_TRACK $SUBTITLE_LANGUAGE $SUBTITLE_TYPE -nosound -ovc lavc $CUSTOM_DIVX -lavcopts vpass=1:vcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo:threads=$CPUS:vbitrate=$BITRATE -vf pp=de,pullup,softskip,crop=${CROP_VALUES},$SCALING $FRAME_RATE -o '/dev/null' | |
mencoder $INPUT_FILE $AUDIO_TRACK $AUDIO_LANGUAGE $SUBTITLE_TRACK $SUBTITLE_LANGUAGE $SUBTITLE_TYPE -oac mp3lame -lameopts $AUDIO_BITRATE_TYPE:br=$AUDIO_BITRATE:vol=$AUDIO_VOLUME_LEVEL -ovc lavc $CUSTOM_DIVX -lavcopts vpass=2:vcodec=mpeg4:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2:threads=$CPUS:vbitrate=$BITRATE -vf pp=de,pullup,softskip,crop=${CROP_VALUES},$SCALING $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
if [[ $MPEG4_TYPE = 4 ]] ; then | |
# actual one-pass conversion | |
mencoder $INPUT_FILE $AUDIO_TRACK $AUDIO_LANGUAGE $SUBTITLE_TRACK $SUBTITLE_LANGUAGE $SUBTITLE_TYPE -oac mp3lame -lameopts $AUDIO_BITRATE_TYPE:br=$AUDIO_BITRATE:vol=$AUDIO_VOLUME_LEVEL -ovc lavc $CUSTOM_DIVX -lavcopts vcodec=mpeg4:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2:threads=$CPUS:vbitrate=$BITRATE -vf pp=de,pullup,softskip,crop=${CROP_VALUES},$SCALING $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
###### XVID | |
if [[ $MPEG4_TYPE = 5 ]] ; then | |
# actual two-pass conversion | |
mencoder $INPUT_FILE $AUDIO_TRACK $AUDIO_LANGUAGE $SUBTITLE_TRACK $SUBTITLE_LANGUAGE $SUBTITLE_TYPE -nosound -ovc xvid -xvidencopts pass=1:chroma_opt:vhq=1:bvhq=1:quant_type=mpeg:threads=$CPUS:bitrate=$BITRATE -vf pp=de,pullup,softskip,crop=${CROP_VALUES},$SCALING $FRAME_RATE -o '/dev/null' | |
mencoder $INPUT_FILE $AUDIO_TRACK $AUDIO_LANGUAGE $SUBTITLE_TRACK $SUBTITLE_LANGUAGE $SUBTITLE_TYPE -oac mp3lame -lameopts $AUDIO_BITRATE_TYPE:br=$AUDIO_BITRATE:vol=$AUDIO_VOLUME_LEVEL -ovc xvid -xvidencopts pass=2:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:threads=$CPUS:bitrate=$BITRATE -vf pp=de,pullup,softskip,crop=${CROP_VALUES},$SCALING $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
if [[ $MPEG4_TYPE = 6 ]] ; then | |
# actual one-pass conversion | |
mencoder $INPUT_FILE $AUDIO_TRACK $AUDIO_LANGUAGE $SUBTITLE_TRACK $SUBTITLE_LANGUAGE $SUBTITLE_TYPE -oac mp3lame -lameopts $AUDIO_BITRATE_TYPE:br=$AUDIO_BITRATE:vol=$AUDIO_VOLUME_LEVEL -ovc xvid -xvidencopts chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:threads=$CPUS:bitrate=$BITRATE -vf pp=de,pullup,softskip,crop=${CROP_VALUES},$SCALING $FRAME_RATE -o $OUTPUT_FILE.avi | |
fi | |
################################################## | |
# Close the custom quality option #17 # | |
################################################## | |
fi | |
###################################################################################################################################################### | |
###### CLEANUP ###### CLEANUP ###### CLEANUP ###### CLEANUP ###### CLEANUP ###### CLEANUP ###### CLEANUP ###### CLEANUP ###### CLEANUP ###### CLEANUP | |
###################################################################################################################################################### | |
if [ -f mplayer.tmp ];then | |
rm mplayer.tmp | |
fi | |
if [ -f divx2pass.log ];then | |
rm divx2pass.log | |
fi | |
###################################################################################################################################################### | |
###### CONVERSION FINISHED ###### CONVERSION FINISHED ###### CONVERSION FINISHED ###### CONVERSION FINISHED ###### CONVERSION FINISHED ###### | |
###################################################################################################################################################### | |
################################################## | |
# Conversion finished notifications # | |
################################################## | |
###### extra blank spaces | |
echo " | |
" | |
###### notifications | |
notify-send -t 7000 -i /usr/share/icons/gnome/32x32/status/info.png "Conversion Finished" ; espeak "Conversion Finished" | |
# extra blank spaces | |
echo " | |
" | |
read -sn 1 -p "Your conversion has finished, press any key to continue and close this terminal session..."</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
if [ -z $1 ] | |
then | |
echo "Debe ingresar el nombre del dominio" | |
exit 1 | |
else | |
DOMINIO=$1 | |
fi | |
if [ -z $2 ] | |
then | |
RUTA="/var/www/websites/" | |
else | |
RUTA=$2 | |
fi | |
echo "Configurando dominio "$DOMINIO | |
#CREAMOS LA ENTRADA EN /ETC/HOSTS | |
echo "127.0.0.1 "$DOMINIO &gt;&gt; /etc/hosts | |
#CREAMOS EL ARCHIVO DE VIRTUAL HOST | |
touch /etc/apache2/sites-available/$DOMINIO | |
#AGREGAMOS EL VIRTUAL HOST | |
echo "<virtualhost *:80=""> | |
ServerAdmin god@$DOMINIO | |
ServerName $DOMINIO | |
ServerAlias www.$DOMINIO | |
DocumentRoot $RUTA$DOMINIO/ | |
<directory> | |
Options FollowSymLinks | |
AllowOverride All | |
</directory> | |
<directory $ruta$dominio=""> | |
Options Indexes FollowSymLinks MultiViews | |
AllowOverride All | |
Order allow,deny | |
allow from all | |
</directory> | |
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ | |
<directory \"="" cgi-bin\"="" lib="" usr=""> | |
AllowOverride None | |
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch | |
Order allow,deny | |
Allow from all | |
</directory> | |
ErrorLog $RUTA$DOMINIO/error.log | |
# Possible values include: debug, info, notice, warn, error, crit, | |
# alert, emerg. | |
LogLevel warn | |
CustomLog $RUTA$DOMINIO/access.log combined | |
Alias /doc/ \"/usr/share/doc/\" | |
<directory \"="" doc="" share="" usr=""> | |
Options Indexes MultiViews FollowSymLinks | |
AllowOverride None | |
Order deny,allow | |
Deny from all | |
Allow from 127.0.0.0/255.0.0.0 ::1/128 | |
</directory> | |
</virtualhost>" &gt; /etc/apache2/sites-available/$DOMINIO | |
#CREAMOS EL DIRECTORIO PARA EL DOMINIO | |
mkdir $RUTA$DOMINIO | |
chmod 775 $RUTA$DOMINIO | |
chown dennis.dennis $RUTA$DOMINIO | |
#CONFIGURAMOS APACHE | |
a2ensite $DOMINIO | |
#REINICIAMOS APACHE | |
/etc/init.d/apache2 reload | |
echo "Listo!"</pre> | |
<pre class="brush:plain">/var/www/websites/[nombre_del_dominio]</pre> | |
<pre class="brush:plain">chown dennis.dennis $RUTA$DOMINIO</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
if [ -z $1 ] | |
then | |
echo "Debe ingresar el nombre del dominio" | |
exit 1 | |
else | |
DOMINIO=$1 | |
fi | |
echo "Desconfigurando dominio "$DOMINIO | |
#REMOVEMOS DE APACHE | |
a2dissite $DOMINIO | |
#BORRAMOS LA CONFIGURACION PARA APACHE | |
rm /etc/apache2/sites-available/$DOMINIO | |
#BORRAMOS EL DOMINIO LOCAL | |
sed "/$DOMINIO/ d" -i /etc/hosts | |
#REINICIAMOS APACHE | |
/etc/init.d/apache2 reload | |
echo "Listo!"</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
################################################# | |
# Advanced diff v0.12 - 24/10/2007 | |
# It compares archives (zip, jar, tar.gz, tar.bz2) recursively | |
# so when a compressed file is found, it is uncompressed | |
# and files inside compared as well | |
# Diff output is: diff_[file1]_vs_[file2]_[timestamp].txt | |
################################################# | |
TEMP="$HOME/borrar" | |
BIN_FILES="$TEMP/bin_files" | |
num_loop=0 | |
MAX_LOOPS=5 | |
# Checks if file exists (-1 if not) and if its format is supported (0 if it does, -2 if not) | |
function check_file { | |
if [ ! -f "$1" ]; then | |
echo "Not able to found file "$1", please check." | |
return -1 | |
else | |
format=`file $1 | awk '{ print $2 }' | tr "[:upper:]" "[:lower:]"` | |
if [ $format != "zip" ] &amp;&amp; [ $format != "bzip2" ] &amp;&amp; [ $format != "gzip" ]; then | |
echo "No valid file format encountered (`basename $1`): $format" | |
return -2 | |
fi | |
fi | |
} | |
# Extracts content from compressed file ($1) to temporary location ($2) | |
function extract { | |
if [ ! -d $2 ]; then | |
mkdir -p $2 | |
# Added support for other compression types: bz2, tar.gz | |
# No support for more than 1 tar package inside compressed file | |
format=`file $1 | awk '{ print $2 }' | tr "[:upper:]" "[:lower:]"` | |
case $format in | |
"zip") | |
unzip -q $1 -d $2 | |
;; | |
"bzip2") | |
# Modified for non GNU tar compatibility | |
# tar -xjf $1 -C $2 | |
bzip2 -d -c $1 | (cd $2;tar xf - ) | |
;; | |
"gzip") | |
# Modified for non GNU tar compatibility | |
# tar -xzf $1 -C $2 | |
gzip -d -c $1 | (cd $2;tar xf - ) | |
esac | |
fi | |
} | |
# Returns 1 if there are more files to compare, 0 otherwise | |
# ToDo: optimize | |
function loop { | |
echo -n "Uncompressing content... " | |
if [ $num_loop -lt 1 ]; then | |
EXT_DIR1=`echo "$TEMP/$1" | sed s/\[\.\]/_/g` | |
EXT_DIR2=`echo "$TEMP/$2" | sed s/\[\.\]/_/g` | |
else | |
EXT_DIR1=`echo "$1" | sed s/\[\.\]/_/g` | |
EXT_DIR2=`echo "$2" | sed s/\[\.\]/_/g` | |
fi | |
extract $1 $EXT_DIR1 | |
extract $2 $EXT_DIR2 | |
echo "OK" | |
FILE1=`basename "$1"` | |
FILE2=`basename "$2"` | |
OUTPUT=diff_"$FILE1"_vs_"$FILE2"_`date +%H%M%S_%d%m%y`.txt | |
diff -br -U0 $EXT_DIR1 $EXT_DIR2 &gt; $OUTPUT | |
if [ ! -s $OUTPUT ]; then | |
echo "No differences found" | |
return 0 | |
else | |
# Search diff's output for binary files that need to be analyzed | |
grep -i binary $OUTPUT | awk '{ if(NF eq 6)print($3" "$5);}' &gt; $BIN_FILES | |
if [ -s $BIN_FILES ]; then | |
echo "Found `wc -w $BIN_FILES | awk '{ print $1 }'` more binary files to compare" | |
return 1 | |
else | |
return 0 | |
fi | |
fi | |
} | |
function remove_temp { | |
echo -n "Removing temporal files... " | |
rm -f $BIN_FILES | |
if [ -d $TEMP ]; then | |
rm -rf $TEMP | |
fi | |
echo "OK" | |
} | |
############################### | |
# Here start the main program # | |
############################### | |
if [ $# -lt 2 ]; then | |
echo "Usage: `basename $0` file1 file2" | |
exit -1 | |
fi | |
check_file $1 | |
if [ $? -eq 255 ]; then | |
echo "Exiting" | |
exit -1 | |
fi | |
check_file $2 | |
if [ $? -eq 255 ]; then | |
echo "Exiting" | |
exit -1 | |
fi | |
if [ $1 == $2 ]; then | |
echo "Files are the same, no need to diff them" | |
exit 0 | |
fi | |
# Here starts the original comparison | |
loop $1 $2 | |
# Goes for more files (see supported formats) if founded inside given ones | |
if [ $? -gt 0 ]; then | |
while read line; do | |
# $num_loop controls depth level, not number of files encountered at one level | |
let num_loop+=1 | |
if [ $num_loop -gt $MAX_LOOPS ]; then | |
echo "[INFO] $MAX_LOOPS loops reached. Maybe you enter into an infinite loop, increase MAX_LOOPS variable otherwise. Exiting" | |
exit -1 | |
fi | |
TEMP1=`echo "$line" | cut -d " " -f1` | |
TEMP2=`echo "$line" | cut -d " " -f2` | |
#ToDo: formatting - field start counting (same number of tabs as number of loops) from last loop baseline, not from the end! | |
echo " `echo "$TEMP1" | awk -F/ '{ print $(NF-num)"/"$NF}' num=$num_loop` &lt;=&gt; `echo "$TEMP2" | awk -F/ '{ print $(NF-num)"/"$NF}' num=$num_loop`" | |
check_file $TEMP1 | |
if [ $? -eq 0 ]; then | |
loop $TEMP1 $TEMP2 | |
else | |
# False positive (not able to process) | |
let num_loop-=1 | |
fi | |
done &lt; $BIN_FILES | |
fi | |
# Removing useless paths from output file if it's not empty | |
if [ -s $OUTPUT ]; then | |
sed "s|$TEMP/||g" $OUTPUT &gt; tmp | |
mv tmp $OUTPUT | |
else | |
rm -f $OUTPUT | |
fi | |
remove_temp | |
exit 0 | |
</pre> | |
<hr/><pre class="brush:bash">#!/usr/bin/perl | |
# By Xianur0 | |
# xianur0.null[at]gmail.com | |
$imagen = $ARGV[0] || die("Uso: $1 imagen.dd\n"); | |
open BIN,$imagen; | |
my %uris = (); | |
my %disks = (); | |
my %bookmarks = (); | |
my %cookies = (); | |
my %emails = (); | |
my %volumenes = (); | |
my %mysqls = (); | |
my %proxys = (); | |
my $bookmark = ""; | |
my $nbookmark = ""; | |
my @lineas = (); | |
my $lineabin = ""; | |
my $minpass = 5; | |
my $maxpass = 20; | |
my $todo = ""; | |
my $grabar = 0; | |
sub ascii2char($) | |
{ | |
(my $str = shift) =~ s/@([0-9]{2})@/chr($1)/eg; | |
return $str; | |
} | |
sub hex2ascii($) | |
{ | |
(my $str = shift) =~ s/([a-fA-F0-9]{2})/chr(hex $1)/eg; | |
return $str; | |
} | |
open PASSWORD,">resultados/passwords.txt"; | |
open MYSQL,">resultados/mysql.txt"; | |
open URI,">resultados/uri.txt"; | |
open COOKIE,">resultados/cookies.txt"; | |
open BOOKMARKS,">resultados/bookmarks.txt"; | |
open VOLUMEN,">resultados/volumenes.txt"; | |
open DISK,">resultados/disks.txt"; | |
open EMAIL,">resultados/emails.txt"; | |
open PROXY,">resultados/proxys.txt"; | |
open ENCRYPTED,">resultados/encrypted.txt"; | |
open BRUTE,">resultados/bruteforce.txt"; | |
open STRINGS,">resultados/strings.txt"; | |
print "Extrayendo datos...\n"; | |
while($lineabin = <BIN>) { | |
@lineas = ($lineabin =~ m/([\w\d&\*<>=\-\_\[\]\s"'\/\\\%;\:\.\t\,\#\)\(\@\?\0`]+)/g); | |
BUCLE: foreach $linea (@lineas) { | |
$linea =~ s/\0//g; | |
next BUCLE if(length($linea) < 4); | |
print STRINGS $linea."\n"; | |
if(length($linea) >= $minpass && length($linea) <= $maxpass && $linea !~ /^(\s|\t)+$/) { | |
print BRUTE $linea."\n"; | |
} | |
if($nbookmark ne "") { | |
if($linea =~ /(<|>)/) { | |
$bookmark .= $linea; | |
} else { | |
$bookmarks{$nbookmark} = $bookmark; | |
$nbookmark = ""; | |
$bookmark = ""; | |
} | |
} | |
if($linea =~ /((https?|file|ftp|smb):\/\/.+)/) { | |
my $uri = $1; | |
$uri =~ s/\s+.+//g; | |
print URI $uri."\n" if($uris{$uri} < 1 || $uris{$uri} eq ""); | |
$uris{$uri}++; | |
} | |
if($linea =~ /(\/dev\/disk\/by-id\/(.+))/) { | |
my $disk = $1; | |
print DISK $disk."\n" if($disks{$disk} < 1 || $disks{$disk} eq ""); | |
$disks{$disk}++; | |
} | |
if($linea =~ /<\/?bookmark(\shref=[^>]+)?>/) { | |
if($nbookmark ne "") { | |
print BOOKMARKS $bookmark."\n" if($bookmarks{$nbookmark} < 1 || $bookmarks{$nbookmark} eq ""); | |
$bookmarks{$nbookmark}++; | |
$nbookmark = ""; | |
$bookmark = ""; | |
} | |
elsif($linea =~ /<bookmark href="([^"]+)/) { | |
$bookmark .= $linea; | |
$nbookmark = $1; | |
} | |
} | |
if($linea =~ /([\w\d\@]+\@46\@volume)/) { | |
my $volume = $1; | |
$volume =~ s/\@46\@volume$//; | |
$volume = ascii2char($volume); | |
print VOLUMEN $volume."\n" if($volumenes{$volume} < 1 || $volumenes{$volume} eq ""); | |
$volumenes{$volume}++; | |
} | |
if($linea =~ /(password|passwd|pass|pwd)\s*([='"\]\)\[\(]+\s*.+)/) { | |
my $label = $1; | |
my $pass = $2; | |
print PASSWORD $label."=".$pass."\n" if(length($pass) >= $minpass && length($pass) <= $maxpass); | |
} | |
if($linea =~ /Cookie:\s(.+)/) { | |
my $cookie = $1; | |
print COOKIE $cookie."\n" if($cookies{$cookie} < 1 || $cookies{$cookie} eq ""); | |
$cookies{$cookie}++; | |
} elsif($linea =~ /(PHPSESSID=[\w\d]+)/) { | |
my $cookie = $1; | |
print COOKIE $cookie."\n" if($cookies{$cookie} < 1 || $cookies{$cookie} eq ""); | |
$cookies{$cookie}++; | |
} | |
if($linea =~ /([\w\d\-_\.]+@[\w\d\-_\.]+\.\w+)/) { | |
my $email = $1; | |
print EMAIL $email."\n" if($emails{$email} < 1 || $emails{$email} eq ""); | |
$emails{$email}++; | |
} | |
if($linea =~ /mysql (.+)/) { | |
my $lineamysql = $1; | |
my ($usuario) = ($lineamysql =~ /-u(\s*[^\s]+)/); | |
my ($password) = ($lineamysql =~ /-p(\s*[^\s]+)/); | |
if($usuario ne "") { | |
print MYSQL $lineamysql."\n" if($mysqls{$usuario.":".$password} < 1 || $mysqls{$usuario.":".$password} eq ""); | |
$mysqls{$usuario.":".$password}++; | |
} | |
} | |
if($linea =~ /export (.+?)_proxy="([^"]+)"/) { | |
my $proxyhttp = $1; | |
print PROXY $proxyhttp."\n" if($proxys{$proxyhttp} < 1 || $proxys{$proxyhttp} eq ""); | |
$proxys{$proxyhttp}++; | |
} | |
if($linea =~ /ECRYPTFS_FNEK_ENCRYPTED\.(.+)/) { | |
my $enckey = $1; | |
print ENCRYPTED $enckey."\n" if($cifrados{$enckey} < 1 || $cifrados{$enckey} eq ""); | |
$cifrados{$enckey}++; | |
# print "eCryptfs Filname Encryption Key Encrypted: ".$enckey."\n\n"; | |
} | |
} | |
} | |
close(MYSQL); | |
close(URI); | |
close(COOKIE); | |
close(BOOKMARKS); | |
close(VOLUMEN); | |
close(DISK); | |
close(EMAIL); | |
close(PROXY); | |
close(ENCRYPTED); | |
close(STRINGS); | |
close(PASSWORD); | |
print "Datos extraídos exitosamente!\n"; </pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# Write a shell script to display the process running on the system for every | |
# 30 seconds, but only for 3 times. | |
# ------------------------------------------------------------------------- | |
# Copyright (c) 2008 nixCraft | |
# ------------------------------------------------------------------------- | |
# | |
# for loop 3 times | |
for r in 1 2 3 | |
do | |
#see every process on the system | |
echo "**************************** x^x^x ****************************" | |
ps -e | |
echo "**************************** x^x^x ****************************" | |
#sleep for 30 seconds | |
sleep 3 | |
# clean | |
done | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
RCDEV=cdrom0 | |
[ -z "$1" ] &amp;&amp; RCDIR=/z/music/$( date +%Y-%m-%d_%H-%M-%S ) || RCDIR=/z/music/"$1" | |
sudo mkdir -p "$RCDIR" | |
RCTRK=$( sudo cdrw -d $RCDEV -M | grep "^ [0-9]" | tail -1 | sed 's/ //g' | sed 's/|.*//' ) | |
[ -z $RCTRK ] &amp;&amp; sudo eject $RCDEV &amp;&amp; exit | |
for i in $( seq $RCTRK ) | |
do | |
sudo cdrw -d $RCDEV -x -T wav $i "$RCDIR"/"$( printf %02d $i ).wav" | |
done | |
sudo eject $RCDEV</pre> | |
<pre class="brush:plain"> | |
</pre> | |
<pre class="brush:plain">chmod u+x ripCD.sh</pre> | |
<pre class="brush:plain">./ripCD.sh GeekScripting.m3u cdrom0 | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
sudo ls &>/dev/null | |
if [ $? -ne 0 ]; then | |
echo "El usuario no tiene permisos de administrador" | |
exit 1 | |
fi | |
echo -e "\nAntes:" | |
free | |
swapoff -a ; swapon -a | |
echo -e "\nDespues:" | |
free | |
echo "Memoria Swap Liberada!" | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
#Twitter status update bot by http://360percents.com | |
#Author: Luka Pusic <[email protected]> | |
#REQUIRED PARAMS | |
username=" [tu usuario de twitter ]" | |
password=" [ tu password de twitter ]" | |
tweet="$*" #must be less than 140 chars | |
#EXTRA OPTIONS | |
uagent="Mozilla/5.0" #user agent (fake a browser) | |
sleeptime=0 #add pause between requests | |
if [ $(echo "${tweet}" | wc -c) -gt 140 ]; then | |
echo "[FAIL] Tweet must not be longer than 140 chars!" &amp;&amp; exit 1 | |
fi | |
if [ "$tweet" == "" ]; then | |
echo "[ERROR] Nothing to do / missing text." | |
exit 1; | |
fi | |
touch "cookie.txt" #create a temp. cookie file | |
#INITIAL PAGE | |
echo "[+] Fetching twitter.com..." &amp;&amp; sleep $sleeptime | |
initpage=`curl -s -b "cookie.txt" -c "cookie.txt" -L --sslv3 -A "$uagent" "https://mobile.twitter.com/session/new"` | |
token=`echo "$initpage" | grep "authenticity_token" | sed -e 's/.*value="//' | sed -e 's/" \/&gt;.*//'` | |
#LOGIN | |
echo "[+] Submitting the login form..." &amp;&amp; sleep $sleeptime | |
loginpage=`curl -s -b "cookie.txt" -c "cookie.txt" -L --sslv3 -A "$uagent" -d "authenticity_token=$token&amp;username=$username&amp;password=$password" "https://mobile.twitter.com/session"` | |
#HOME PAGE | |
echo "[+] Getting your twitter home page..." &amp;&amp; sleep $sleeptime | |
homepage=`curl -s -b "cookie.txt" -c "cookie.txt" -L -A "$uagent" "http://mobile.twitter.com/"` | |
#TWEET | |
echo "[+] Posting a new tweet..." &amp;&amp; sleep $sleeptime | |
tweettoken=`echo "$homepage" | grep "authenticity_token" | sed -e 's/.*value="//' | sed -e 's/" \/&gt;.*//' | tail -n 1` | |
update=`curl -s -b "cookie.txt" -c "cookie.txt" -L -A "$uagent" -d "authenticity_token=$tweettoken&amp;tweet[text]=$tweet&amp;tweet[display_coordinates]=false" "http://mobile.twitter.com/"` | |
#LOGOUT | |
echo "[+] Logging out..." | |
logout=`curl -s -b "cookie.txt" -c "cookie.txt" -L -A "$uagent" "http://mobile.twitter.com/session/destroy"` | |
rm "cookie.txt"</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
LINES=$(tput lines) | |
COLUMNS=$(tput cols) | |
declare -A snowflakes | |
declare -A lastflakes | |
clear | |
function move_flake() { | |
i="$1" | |
if [ "${snowflakes[$i]}" = "" ] || [ "${snowflakes[$i]}" = "$LINES" ]; then | |
snowflakes[$i]=0 | |
else | |
if [ "${lastflakes[$i]}" != "" ]; then | |
printf "\033[%s;%sH \033[1;1H " ${lastflakes[$i]} $i | |
fi | |
fi | |
printf "\033[%s;%sH❄\033[1;1H" ${snowflakes[$i]} $i | |
lastflakes[$i]=${snowflakes[$i]} | |
snowflakes[$i]=$((${snowflakes[$i]}+1)) | |
} | |
while : | |
do | |
i=$(($RANDOM % $COLUMNS)) | |
move_flake $i | |
for x in "${!lastflakes[@]}" | |
do | |
move_flake "$x" | |
done | |
sleep 0.1 | |
done | |
</pre> | |
<hr/><pre class="brush:bash">chmod +x nieve.sh </pre> | |
<hr/><pre class="brush:bash">./neige.sh</pre> | |
<hr/><pre class="brush:bash"> | |
################################################################################## | |
# | |
# Copyright (C) 2011 GNUino Systems. | |
# | |
# This program is free software: you can redistribute it and/or modify | |
# it under the terms of the GNU General Public License as published by | |
# the Free Software Foundation, either version 3 of the License, or | |
# (at your option) any later version. | |
# | |
# This program is distributed in the hope that it will be useful, | |
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
# GNU General Public License for more details. | |
# | |
# You should have received a copy of the GNU General Public License | |
# along with this program. If not, see <http://www.gnu.org/licenses/>. | |
# | |
################################################################################## | |
#!/bin/bash | |
#ESTE SCRIPT NOS AYUDA A LA AUTOMATIZACION DE LAS CUENTAS APARTIR DEL ARCHIVO peticiones.txt | |
if [ -d /administracion/log/creacionCuenta/ ];then | |
echo"" | |
else | |
mkdir /administracion/log/creacionCuenta/ | |
fi | |
if [ -e ruta_del_Archivo_donde_estan_los_datos ]; then | |
#COMPROBAMOS QUE EL ARCHIVO EXISTA | |
pass=$(cat ruta_del_Archivo_donde_estan_los_datos |awk -F : '{print $4}')#Esta es la poscion del pass el cuarto campo despues de : | |
usuarios=$(cat ruta_del_Archivo_donde_estan_los_datos |awk -F : '{print $6}')#Esta es la poscion del usuario el sexto campo despues de : | |
#CON EL USO DE AWK SELECCIONAMOS LOS CAMPOS QUE CORRESPONDEN A EL PASSWORD Y USUARIO EN EL ARCHIVO peticiones.txt | |
cat ruta_del_Archivo_donde_estan_los_datos >> ruta_donde_se_desea_respaldar | |
echo "$(date '+%m %d %Y- %H:%M') FECHA Y HORA DE REGISTRO DEL USUARIO" >> ruta_donde_se_desea_respaldar | |
#GUARDAMOS EN UN LOG LOS DATOS COMPLETOS DEL USUARIO CON LA HORA EN QUE SE REGISTRO LA CUENTA | |
for user in ${usuarios}; do | |
echo $user >> ruta_de_log_donde_se_guardan_solo_los_nombres_de_usuarios | |
#GUARDAMOS EL NOMBRE DE USUARIO EN EL ARCHIVO usuarios_en_altas.txt | |
useradd --home /home/${user} -m -s /bin/bash ${user} 2</dev/null | |
#CREAMOS EL HOME DEL USUARIO INDICANDO QUE EL HOME SE LLAMARA IGUAL QUE EL USUARIO, ASIGNANDO EL SHELL BASH AL USUARIO | |
quotatool -u ${user} -bq 4000M -l 4000M /home | |
#ASIGNAMOS UNA QUOTA CON UN LIMITE DE 4GB EN LA PARTICION HOME | |
for p in ${pass}; do | |
usermod -p ${p} ${user} | |
#CON USERMOD PASAMOS EL PASSWORD QUE SE ENCUENTRA EN peticiones.txt Y SE LO ASIGNAMOS AL USUARIO QUE LE CORRESPONDE | |
echo "" > ruta_del_Archivo_donde_estan_los_datos | |
#BORRAMOS EL ARCHIVO peticiones.txt | |
done | |
done | |
else | |
echo "$(date '+%m %d %Y- %H:%M') No existe el archivo " >> direccion_de_log_de_errores | |
#DE NO EXISTIR EL ARCHIVO MOSTRARA UN ERROR GUARDARA EL REPORTE EN UN LOG | |
fi | |
#CONCLUYE EL SCRIPT | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
WGET="/usr/bin/wget" | |
$WGET -q --tries=10 --timeout=5 http://www.google.com -O /tmp/index.google &> /dev/null | |
if [ ! -s /tmp/index.google ]; | |
then echo "No" | |
else echo "Si" | |
fi | |
exit 0 | |
</pre> | |
<hr/><pre class="brush:bash">$ wget http://www.ellibertario.com/wp-content/w3tc/min/9a6f1138.444a95.css</pre> | |
<hr/><pre class="brush:bash"> | |
</pre> | |
<hr/><pre class="brush:bash">$ cat 9a6f1138.444a95.css | sed -e 's/}/}\n\n/g' | less </pre> | |
<hr/><pre class="brush:bash"> | |
</pre> | |
<hr/><pre class="brush:bash">$ cat 9a6f1138.444a95.css | sed -e 's/}/}\n\n/g' &gt; nuevo.css</pre> | |
<hr/><pre class="brush:bash">$ wget http://www.ellibertario.com/wp-content/w3tc/min/9a6f1138.444a95.css</pre> | |
<hr/><pre class="brush:bash"> | |
</pre> | |
<hr/><pre class="brush:bash">$ cat 9a6f1138.444a95.css | sed -e 's/}/\n}\n\n/g' | sed -e 's/{/{\n\t/g' | sed -e 's/;/;\n\t/g' | less</pre> | |
<hr/><pre class="brush:bash">$ cat 9a6f1138.444a95.css | sed -e 's/}/\n}\n\n/g' | sed -e 's/{/{\n\t/g' | sed -e 's/;/;\n\t/g' &gt; estilo_nuevo.css</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
#Arp Firewall | |
case "$1" in | |
start) | |
sudo arptables -P INPUT DROP | |
sudo arptables -P OUTPUT ACCEPT | |
sudo echo "La Proteccion ARP está Activada" | |
;; | |
stop) | |
sudo arptables -P INPUT ACCEPT | |
sudo arptables -P OUTPUT ACCEPT | |
echo "La Proteccion ARP está Desactivada" | |
;; | |
*) | |
echo "Usar: /etc/init.d/blah {start|stop}" | |
exit 1 | |
;; | |
esac | |
exit 0 | |
</pre> | |
<hr/><pre class="brush:bash"> | |
sudo ls &>/dev/null | |
if [ $? -ne 0 ]; then | |
echo "El usuario no tiene permisos de administrador" | |
exit 1 | |
fi | |
parse_num() | |
{ | |
x=$(echo $1 | sed -n 's/0*//p') | |
if [ $(echo $x | wc -c) -eq 1 ] | |
then | |
x=0 | |
fi | |
echo $x | |
} | |
hex_to_ip() | |
{ | |
index=7 | |
output='' | |
while [ $index -gt 0 ] | |
do | |
end=$(expr $index + 1) | |
value=$(printf "%d" "0x$(parse_num $(echo $1 | cut -b $index-$end))") | |
output="$output.$value" | |
index=$(expr $index - 2) | |
done | |
echo $(echo $output | cut -b 2-) | |
} | |
printf " Src IP Src port Dst IP Dst port\n" | |
cat /proc/net/tcp | while read line; do | |
srcip=$(hex_to_ip $(echo $line | sed -n 's/^[0-9]*: //p' | sed 's/:.*//p')) | |
srcport=$(printf "%d" 0x$(parse_num $(echo $line | sed -n 's/^ *[0-9]*: [0-9,A-F]*://p' | cut "-d " -f 1))) | |
dstip=$(hex_to_ip $(echo $line | sed -n 's/^[0-9]*: [0-9,A-F]*:[0-9,A-F]* //p' | sed -n 's/:.*//p')) | |
dstport=$(printf "%d" 0x$(parse_num $(echo $line | sed -n 's/^ *[0-9]*: [0-9,A-F]*:[0-9,A-F]* [0-9,A-F]*://p' | cut "-d " -f1))) | |
printf "%15s %9s %15s %9s\n" $srcip $srcport $dstip $dstport | |
done | |
netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c | |
exit 0 | |
</pre> | |
<pre class="brush:perl"> | |
#!/usr/bin/perl | |
use strict; | |
use warnings; | |
my @dmesg_new = (); | |
my $dmesg = "/bin/dmesg"; | |
my @dmesg_old = `$dmesg`; | |
my $now = time(); | |
my $uptime = `cat /proc/uptime | cut -d"." -f1`; | |
my $t_now = $now - $uptime; | |
sub format_time { | |
my @time = localtime $_[0]; | |
$time[4]+=1; # Adjust Month | |
$time[5]+=1900; # Adjust Year | |
return sprintf '%4i-%02i-%02i %02i:%02i:%02i', @time[reverse 0..5]; | |
} | |
foreach my $line ( @dmesg_old ) | |
{ | |
chomp( $line ); | |
if( $line =~ m/\[\s*(\d+)\.(\d+)\](.*)/i ) | |
{ | |
# now - uptime + sekunden | |
my $t_time = format_time( $t_now + $1 ); | |
push( @dmesg_new , "[$t_time] $3" ); | |
} | |
} | |
print join( "\n", @dmesg_new ); | |
print "\n"; | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
#Version 1.0, March 10th, 2012 | |
#Written by Matias Katz (@matiaskatz - www.matiaskatz.com). 2012, Buenos Aires, Argentina. | |
signal_trapper () #This is where the signal traps are sent | |
{ | |
echo "****** Nope :) ******" | |
} | |
menu () #Main menu | |
{ | |
echo "" | |
echo -n "Hi, I'm '$host' and I'm locked. Please, type the password to unlock: " | |
read -s x | |
case $x in | |
$password) | |
echo "" | |
echo "Bye! :)" | |
exit 0 | |
;; | |
*) | |
menu | |
;; | |
esac | |
} | |
#Start of excecution | |
case $1 in | |
"-h"|"--help") | |
echo "Lock v1.0 - A simple Linux console locking tool, written in Bash-Scripting" | |
echo "Written by Matias Katz (@matiaskatz - www.matiaskatz.com). 2012, Buenos Aires, Argentina." | |
echo "" | |
echo "To use it, just type 'lock' and input the unlock password twice." | |
echo "" | |
echo "Warning: Spaces are ignored, unless they're within other characters:" | |
echo "" | |
echo "The password ' 1' will be taken as '1'." | |
echo "The password '1 ' will be taken as '1'." | |
echo "The password '1 1' will be taken as '1 1'." | |
echo "" | |
echo "Enjoy :)" | |
echo "" | |
exit 0 | |
;; | |
"") | |
read -s -p "Password: " password #Ask the user for a password | |
echo "" | |
read -s -p "Password (again): " password2 #Ask for confirmation | |
echo "" | |
if [ "$password" != "$password2" ] | |
then | |
echo "Passwords don't match" | |
exit 0 | |
fi | |
;; | |
*) | |
echo "Invalid option" | |
echo "Hit 'lock -h' or 'lock --help' to find out more." | |
exit 0 | |
#password=$1 #Take the first argument as a password &lt;--- It's dangerous, use it as your own risk :) ;; esac #Prohibimos ^Z y ^C trap 'clear; echo -e "Password:\c";' 2 20 #trap signal_trapper SIGINT #Trap the CTRL+C signal to avoid bypass #trap signal_trapper SIGTSTP #Trap the CTRL+Z signal to avoid bypass host=$(hostname) clear #&lt;--- if you want to :) menu</pre> | |
<hr/><pre class="brush:bash">sudo mv lock.sh /usr/bin/lock</pre> | |
<hr/><pre class="brush:bash">sudo chmod 755 /usr/bin/lock</pre> | |
<pre class="brush:plain">lock</pre> | |
<pre class="brush:plain">lock -h</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# A Sample Shell Script To Generate Mediawiki Wiki Software Google Sitemap Using PHP | |
# on server itself via cron. | |
# Warning: You need to customize this script before using it! | |
# ------------------------------------------------------------------------- | |
# Copyright (c) 2008 nixCraft project <http://cyberciti.biz/fb/> | |
# This script is licensed under GNU GPL version 2.0 or above | |
# ------------------------------------------------------------------------- | |
# This script is part of nixCraft shell script collection (NSSC) | |
# Visit http://bash.cyberciti.biz/ for more information. | |
# ------------------------------------------------------------------------- | |
# Path to wiki dir | |
BASE="/home/httpd/example.com/wiki" | |
# Wiki domain name | |
SERVER="http://www.example.com/" | |
# Path to actual sitemap file - change this | |
OUT="${BASE}/sitemap-index-cbzwikibashportal.xml" | |
cd $BASE/wiki/maintenance | |
php generateSitemap.php --fspath="$BASE" --server="${SERVER}" | |
# patch it up replace example.com with actual domain name | |
sed -i -e 's/sitemap-cbzwikibashportal-NS_[0-9]*-[0-9]*\.xml\.gz/http:\/\/www\.example\.com\/&/g' $OUT</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# Script Name: mbrback http://igurublog.wordpress.com/downloads/script-mbrback/ | |
# Requires: util-linux | |
# License: GNU GENERAL PUBLIC LICENSE Version 3 http://www.gnu.org/licenses/gpl-3.0.txt | |
# do not change these variables! | |
argsneeded=1 | |
restoretype="" | |
back="" | |
devname="" | |
help () | |
{ | |
echo 'mbrback version 1.0.0' | |
echo 'Creates MBR and partition table backups of DEVICE named:' | |
echo ' HOST-DEVICE-MBR-back' | |
echo ' HOST-DEVICE-partition-back.sf' | |
echo 'Restores MBR and partition table from specified backup file' | |
echo 'Usage: sudo mbrback DEVICE [BACKUPFOLDER]' | |
echo ' (creates backup files of DEVICE)' | |
echo 'Usage: sudo mbrback --restoreboot DEVICE [BACKUPFILE]' | |
echo ' (restores MBR boot code only)' | |
echo 'Usage: sudo mbrback --restorefullmbr DEVICE [BACKUPFILE]' | |
echo ' (restores entire MBR)' | |
echo 'Usage: sudo mbrback --restorepart DEVICE [BACKUPFILE.sf]' | |
echo ' (restores partition table)' | |
echo 'Example: sudo mbrback sda' | |
echo ' (creates MBR and partition table backups of' | |
echo ' /dev/sda in current folder)' | |
echo 'Example: sudo mbrback /dev/sda' | |
echo ' (creates MBR and partition table backups of' | |
echo ' /dev/sda in current folder)' | |
echo 'Example: sudo mbrback sda /mybackups' | |
echo ' (creates MBR and partition table backups of' | |
echo ' /dev/sda in /mybackups)' | |
echo 'Example: sudo mbrback --restoreboot sda /mybackups/sys-sda-MBR-back' | |
echo ' (restores MBR boot code of /dev/sda using' | |
echo ' /mybackups/sys-sda-MBR-back)' | |
echo 'Example: sudo mbrback --restorepart sda /mybackups/sys-sda-partition-back.sf' | |
echo ' (restores partition table of /dev/sda using sfdisk file ' | |
echo ' /mybackups/sys-sda-partition-back.sf)' | |
echo | |
echo "When restoring, mbrback will always tell you what it's going to do" | |
echo "and allow you to abort before it writes to disk." | |
echo | |
echo "Instructions and updates:" | |
echo "http://igurublog.wordpress.com/downloads/script-mbrback/" | |
echo | |
} | |
index=0 | |
while [ "$1" != "" ]; | |
do | |
if [ "${1:0:1}" = "-" ]; then | |
case "$1" in | |
--help | -help ) | |
help | |
exit | |
;; | |
--restoreboot ) | |
if [ "$restoretype" = "" ]; then | |
restoretype="boot" | |
else | |
echo 'mbrback: can only use one restore option' | |
exit 1 | |
fi | |
;; | |
--restorefullmbr ) | |
if [ "$restoretype" = "" ]; then | |
restoretype="fullmbr" | |
else | |
echo 'mbrback: can only use one restore option' | |
exit 1 | |
fi | |
;; | |
--restorepart ) | |
if [ "$restoretype" = "" ]; then | |
restoretype="part" | |
else | |
echo 'mbrback: can only use one restore option' | |
echo | |
help | |
exit 1 | |
fi | |
;; | |
* ) | |
echo "mbrback: Unknown option $1" | |
echo | |
help | |
exit 1 | |
;; | |
esac | |
else | |
let "index+=1" | |
case $index in | |
1 ) | |
devname=`basename "$1"` | |
if [ ! -b "/dev/$devname" ]; then | |
echo "mbrback: /dev/$devname is not a valid device" | |
exit 1 | |
fi | |
;; | |
2 ) | |
back="$1" | |
;; | |
* ) | |
echo "mbrback: Too many arguments" | |
exit 1 | |
;; | |
esac | |
fi | |
shift | |
done | |
if (( index &lt; $argsneeded )) || [ "$devname" = "" ]; then echo "mbrback: missing arguments" echo help exit 1 fi if [ `whoami` != "root" ]; then echo 'mbrback: must be run with sudo' exit 1 fi sysname=$HOSTNAME if [ "$restoretype" = "" ]; then # create MBR and table backups if [ "$back" = "" ]; then back=`pwd` else if [ ! -d "$back" ]; then echo "mbrback: $back is not a valid backup folder" exit 1 fi fi dd if=/dev/$devname of="$back/$sysname-$devname-MBR-back" bs=512 count=1 sfdisk -d /dev/$devname &gt; "$back/$sysname-$devname-partition-back.sf" | |
else | |
# restore | |
if [ "$back" = "" ]; then | |
echo "mbrback: you must specify a backup file" | |
exit 1 | |
elif [ ! -f "$back" ]; then | |
echo "mbrback: file not found - $back" | |
exit 1 | |
fi | |
if [ "$restoretype" = "boot" ] || [ "$restoretype" = "fullmbr" ]; then | |
sfhead=`head --bytes=21 "$back"` | |
if [ "$sfhead" = "# partition table of " ]; then | |
echo "mbrback: $back is not an MBR backup file" | |
exit 1 | |
fi | |
if [ "$(stat -c%s "$back")" != "512" ]; then | |
echo "mbrback: $back is wrong size for an MBR backup file" | |
exit 1 | |
fi | |
fi | |
if [ "$restoretype" = "part" ]; then | |
sfhead=`head --bytes=21 "$back"` | |
if [ "$sfhead" != "# partition table of " ]; then | |
echo "mbrback: $back not a valid sfdisk backup file" | |
exit 1 | |
fi | |
echo | |
echo "You are about to overwrite your /dev/$devname partition table with" | |
echo "the contents of $back" | |
echo | |
echo "WARNING!!! Unless the partition table has been damaged or you" | |
echo " have accidentally deleted a partition, you should abort." | |
echo | |
echo "WARNING!!! Restoring the partition table from an out-of-date backup" | |
echo " may render ALL the data on your drive unreadable." | |
echo | |
echo "WARNING!!! Do not proceed if /dev/$devname is mounted." | |
echo | |
elif [ "$restoretype" = "boot" ]; then | |
echo | |
echo "You are about to overwrite your /dev/$devname MBR boot code with" | |
echo "the contents of $back" | |
echo | |
echo "WARNING: Restoring your MBR boot code from an out-of-date MBR backup" | |
echo " file may render your computer unbootable." | |
elif [ "$restoretype" = "fullmbr" ]; then | |
echo | |
echo "You are about to overwrite your ENTIRE /dev/$devname MBR with" | |
echo "the contents of $back" | |
echo | |
echo "WARNING!!! The full MBR contains both boot code and the drive's" | |
echo " partition table. Unless the partition table has been" | |
echo " damaged or you have accidentally deleted a partition" | |
echo " you should abort and restore boot code only with" | |
echo " --restoreboot instead." | |
echo | |
echo "WARNING!!! Restoring your full MBR from an out-of-date MBR backup may" | |
echo " render your computer unbootable and ALL the data on your" | |
echo " drive unreadable." | |
echo | |
echo "WARNING!!! Do not proceed if /dev/$devname is mounted." | |
fi | |
echo | |
echo "Do you want to proceed? (you must type yes to proceed)" | |
read s1 | |
if [ "$s1" != "yes" ]; then | |
echo "mbrback: no changes made - aborted at user request" | |
exit 2 | |
fi | |
if [ "$restoretype" = "part" ]; then | |
sfdisk /dev/$devname &lt; "$back" elif [ "$restoretype" = "boot" ]; then dd if="$back" of=/dev/$devname bs=448 count=1 elif [ "$restoretype" = "fullmbr" ]; then dd if="$back" of=/dev/$devname bs=512 count=1 fi echo "/dev/$devname was updated" fi exit 0 </pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# A simple shell script to rip audio cd and create mp3 using lame | |
# and cdparanoia utilities. | |
# ---------------------------------------------------------------------------- | |
# Written by Vivek Gite <http: biz=""> | |
# (c) 2006 nixCraft under GNU GPL v2.0+ | |
# ---------------------------------------------------------------------------- | |
read -p "Starting in 5 seconds ( to abort press CTRL + C ) " -t 5 | |
cdparanoia -B | |
for i in *.wav | |
do | |
lame --vbr-new -b 360 "$i" "${i%%.cdda.wav}.mp3" | |
rm -f "$i" | |
done | |
</http:></pre> | |
<pre class="brush:plain">mkdir Musica | |
cd Musica | |
mkdir "Nombre del Album" | |
cd !!:1 | |
/path/to/ripcd.sh | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# Script de configuracion de red, DNSs, ruta por defecto y llamada a reglas de IpTables | |
# RED | |
# parametros de red | |
ipeth0=10.50.66.3;masketh0=255.255.255.0;redeth0=10.50.66.0;broadcasteth0=10.50.66.255;gweth0=10.50.66.1 | |
ipeth1=192.168.1.1;masketh1=255.255.255.0;redeth1=192.168.1.0;broadcasteth1=192.168.1.255 | |
echo Configurando los interfaces de red y el DNS. ... | |
echo "auto lo" &gt; /etc/network/interfaces | |
echo "iface lo inet loopback" &gt;&gt; /etc/network/interfaces | |
echo "# eth0 interfaz conectado al router" &gt;&gt; /etc/network/interfaces | |
echo "auto eth0" &gt;&gt; /etc/network/interfaces | |
echo "iface eth0 inet static" &gt;&gt; /etc/network/interfaces | |
echo " address $ipeth0" &gt;&gt; /etc/network/interfaces | |
echo " netmask $masketh0" &gt;&gt; /etc/network/interfaces | |
echo " network $redeth0" &gt;&gt; /etc/network/interfaces | |
echo " broadcast $broadcasteth0" &gt;&gt; /etc/network/interfaces | |
echo " gateway $gweth0" &gt;&gt; /etc/network/interfaces | |
echo "# eth1 interfaz conectado a la LAN" &gt;&gt; /etc/network/interfaces | |
echo "auto eth1" &gt;&gt; /etc/network/interfaces | |
echo "iface eth1 inet static" &gt;&gt; /etc/network/interfaces | |
echo " address $ipeth1" &gt;&gt; /etc/network/interfaces | |
echo " netmask $masketh1" &gt;&gt; /etc/network/interfaces | |
echo " network $redeth1" &gt;&gt; /etc/network/interfaces | |
echo " broadcast $broadcasteth1" &gt;&gt; /etc/network/interfaces | |
echo "# Ruta de ultimo recurso" &gt;&gt; /etc/network/interfaces | |
echo "up route add -net 0.0.0.0/0 gw $gweth0 dev eth0" &gt;&gt; /etc/network/interfaces | |
echo "# aplicamos reglas de iptables" &gt;&gt; /etc/network/interfaces | |
echo "pre-up iptables-restore &lt; /home/usuario/scripts/iptables.reglas.javcasta.up" &gt;&gt; /etc/network/interfaces | |
echo "# ---- by javcasta - 2.011 - http://javcasta.com ---" &gt;&gt; /etc/network/interfaces | |
# DNSs | |
dns1=208.67.222.222 | |
dns2=208.67.220.220 | |
nombreservidor=$(hostname -s) | |
dominio=$(hostname -d) | |
echo "# by script - 2.011" &gt; /etc/resolv.conf | |
echo "search $dominio" &gt;&gt; /etc/resolv.conf | |
echo "domain $dominio" &gt;&gt; /etc/resolv.conf | |
echo "nameserver $dns1" &gt;&gt; /etc/resolv.conf | |
echo "nameserver $dns2" &gt;&gt; /etc/resolv.conf | |
# habilitar enrutamiento | |
echo "1" &gt; /proc/sys/net/ipv4/ip_forward | |
# reiniciamos servicio de red | |
#service networking restart | |
/etc/init.d/networking restart</pre> | |
<hr/><pre class="brush:bash"> | |
#!/usr/local/bin/bash | |
# | |
## Calomel.org .:. pkg_find v0.07 | |
# | |
## location of the local package listing file | |
packages=~/pkg_find_package_listing.html | |
export PKG_PATH=" [ ruta ftp | http ]" | |
if [ $# -eq 0 ] | |
then | |
echo "" | |
echo " Calomel.org .:. pkg_find" | |
echo "-------------------------------------" | |
echo "-u = update the local package listing." | |
echo "'string' = the package name or partial string of the package name you are looking for." | |
echo "" | |
exit | |
fi | |
if [ $1 = "-u" ] | |
then | |
echo " " | |
echo -e "\033[32m Download the package listing to $packages\033[0m" | |
echo " " | |
wget -O $packages $PKG_PATH | |
echo " " | |
exit | |
fi | |
if [ $1 = "$@" ] | |
then | |
if [ -e $packages ] | |
then | |
echo " " | |
echo -e "\033[32m Packages matching your query: $@\033[0m" | |
echo " " | |
cat $packages | grep -i $@ | cut -d\" -f6 | |
echo " " | |
else | |
echo " " | |
echo -e "\033[32m $packages file does not exist. Run 'pkg_find -u' to update\033[0m" | |
echo " " | |
fi | |
exit | |
fi | |
</pre> | |
<hr/><pre class="brush:bash"> #!/bin/bash | |
# Interupt and Exit Function | |
control_c() | |
{ | |
clear | |
echo -e "Would you like to block connections with a client?\n" | |
echo -e "Enter y or n: " | |
read yn | |
if [ "$yn" == "y" ]; then | |
echo -e "\nEnter Ip Address to Block: \n" | |
read ip | |
if [ -n $ip ]; then | |
echo -e "\nNow retrieving mac address to block...\n" | |
ping -c 1 $ip > /dev/null | |
mac=`arp $ip | grep ether | awk '{ print $3 }'` | |
if [ -z $mac ]; then | |
clear | |
echo -e "\n***Client does not exist or is no longer\ | |
on this network***" | |
echo -e "\nSkipping action and resuming monitoring.\n\n" | |
sleep 2 | |
bash leecher.sh | |
exit 0 | |
else | |
iptables -A INPUT -m mac --mac-source $mac -j DROP | |
clear | |
echo -e "\nClient with mac address $mac is now\ | |
blocked.\n" | |
echo -e "We will continue monitoring for changes\ | |
in clients\n\n" | |
sleep 2 | |
bash leecher.sh | |
exit 0 | |
fi | |
fi | |
else | |
clear | |
echo -e "\n\nLeecher has exited\n\n" | |
setterm -cursor on | |
rm -f $pid | |
exit 0 | |
fi | |
} | |
# Print the scan from the engine() | |
twice(){ | |
g=0 | |
len=${#second[@]} | |
for (( g = 0; g < $len; g++ )); | |
do | |
echo -e "${second[$g]}\n" | |
done | |
} | |
# If there's a change in the network, ask to block ips. | |
interupt(){ | |
clear | |
echo -e "\nList of Clients has Changed!\n" | |
twice | |
echo -e '\a' | |
echo -e "Would you like to block connections with a client?\n" | |
echo -e "Enter y or n: " | |
read yn | |
if [ "$yn" == "y" ]; then | |
echo -e "\nEnter Ip Address to Block: \n" | |
read ip | |
if [ -n $ip ]; then | |
ping -c 1 $ip > /dev/null | |
mac=`arp $ip | grep ether | awk '{ print $3 }'` | |
if [ -z $mac ]; then | |
clear | |
echo -e "\n***Client does not exist or is no longer on\ | |
this network***" | |
echo -e "\nSkipping action and resuming monitoring.\n\n" | |
else | |
iptables -A INPUT -m mac --mac-source $mac -j DROP | |
clear | |
echo -e "\nClient with mac address $mac is now blocked.\n" | |
echo -e "We will continue monitoring for changes\ | |
in clients\n\n" | |
echo -e "Current clients are: \n" | |
twice | |
echo -e "\nResuming monitoring..." | |
fi | |
fi | |
else | |
clear | |
echo -e "Current clients are: \n" | |
twice | |
echo -e "Resuming monitoring..." | |
fi | |
} | |
# Function to keep monitoring for any changes | |
engine() | |
{ | |
# Scan networks again for comparison of changes. | |
for subnet in $(/sbin/ifconfig | awk '/inet addr/ && !/127.0.0.1/ && !a[$2]++\ | |
{print substr($2,6)}') | |
do | |
second+=( "$(nmap -sP ${subnet%.*}.0/24 | awk 'index($0,t)\ | |
{ print $i }' t="$t" i="$i" )" ) | |
sleep 1 | |
done | |
} | |
# Make sure user is logged in as root | |
if [[ $EUID -ne 0 ]]; then | |
echo "This script must be run as root" 1>&2 | |
exit 1 | |
fi | |
# Check if nmap is installed | |
ifnmap=`type -p nmap` | |
if [ -z $ifnmap ]; then | |
echo -e "\n\nNmap must be installed for this program to work\n" | |
echo -e "Only Nmap 5.00 and 5.21 are supported at this time\n" | |
echo -e "Please install and try again" | |
exit 0 | |
fi | |
clear | |
echo -e "\nNow finding clients on your local network(s)" | |
echo -e "Press Control-C at any time to block additional clients or exit\n" | |
# Remove temp files on exit and allow Control-C to exit. | |
trap control_c SIGINT | |
# Turn off cursor | |
setterm -cursor off | |
# Make some arrays and variables | |
declare -a first | |
declare -a second | |
sid=5.21 | |
# Check for which version of nmap | |
if [ 5.21 = $(nmap --version | awk '/Nmap/ { print $3 }') ]; then | |
i=5 t=report | |
else | |
i=2 t=Host | |
fi | |
# Get ip's from interfaces and run the first scan | |
for subnet in $(/sbin/ifconfig | awk '/inet addr/ && !/127.0.0.1/ && !a[$2]++ {print \ | |
substr($2,6)}') | |
do | |
first+=( "$(nmap -sP ${subnet%.*}.0/24 | awk 'index($0,t) { print $i }' \ | |
t="$t" i="$i" )" ) | |
sleep 1 | |
done | |
echo -e "Current clients are: \n" | |
#Display array elements and add new lines | |
e=0 | |
len=${#first[@]} | |
for (( e = 0; e < $len; e++ )); | |
do | |
echo -e "${first[$e]}\n" | |
done | |
echo -e "Leecher is now monitoring for new clients." | |
echo -e "\nAny changes with clients will be reported by the system bell." | |
echo -e "If bell is not enabled details will log to this console." | |
# Forever loop to keep monitoring constant | |
for (( ; ; )) | |
do | |
engine | |
if [[ ${first[@]} == ${second[@]} ]]; then | |
second=( ) | |
else | |
interupt | |
sleep 1 | |
first=( ) | |
first=("${second[@]}") | |
second=( ) | |
fi | |
done | |
</pre> | |
<hr/><pre class="brush:bash"> | |
#!/bin/bash | |
#Alice.bash xD Ubica y elimina procesos zombies. | |
sudo ls &>/dev/null | |
if [ $? -ne 0 ]; then | |
echo "El usuario no tiene permisos de administrador" | |
exit 1 | |
fi | |
if [ $# -ne 1 ] | |
then | |
echo "-z: Ubica los procesos zombies" | |
echo "-k: mata procesos zombies" | |
exit 1 | |
fi | |
if [ $1 == "-z" ] | |
then | |
echo "Procesos zombies" | |
ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]' | |
exit 0 | |
fi | |
if [ $1 == "-k" ] | |
then | |
echo "Eliminando procesos zombies" | |
kill -HUP `ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}'` | |
exit 0 | |
fi | |
</pre> | |
<hr/><pre class="brush:bash"> #!/bin/bash | |
TCPDUMP=/usr/sbin/tcpdump | |
IP=/sbin/ip | |
DEV=en1 | |
ADDR=`$IP addr show dev $DEV | grep 'inet ' | cut -d ' ' -f 6 | cut -d '/' -f 1` | |
$TCPDUMP -ni $DEV "host $ADDR and port not (67 or 68 or 80 or 443 or 1863 or 5222 or 587 or 993 or 995)" | |
</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
# Programa que busca direcciones IP en páginas html | |
# Autor: @paco_medina | |
if [ $# -lt 1 ]; then | |
echo "Uso: $0 url" | |
echo "Ejemplo: $0 www.sitio.com.mx" | |
exit 1 | |
fi | |
HTML=/tmp/pagina.html | |
DOMINIO=`echo $1|cut -d. -f2-5` | |
wget $1 -O $HTML -o /dev/null | |
grep "href=" $HTML |grep $DOMINIO | | |
cut -d/ -f3|grep ${DOMINIO}$|sort -u&gt;/tmp/dir-ip | |
for i in $(cat /tmp/dir-ip) | |
do | |
host $i | |
done | |
rm $HTML</pre> | |
<hr/><pre class="brush:bash">#!/bin/bash | |
#============================================= | |
# Script para iniciar servicios: | |
# apache2,bind9,mysql | |
# Por: darvein | |
# Fecha: sun Feb 19 de 20012 | |
#============================================= | |
# Lista de servicios | |
SERVICIOS=(apache2 mysql bind9) | |
# Funcion para inicializar/reiniciar servicios | |
function servicioInit (){ | |
if ! service $1 status &amp;&gt;/dev/null; then | |
echo -n -e "\tIniciando $1 ..." | |
service $1 start &amp;&gt;/dev/null | |
echo " listo! =)" | |
else | |
echo -n -e "\t $1 ya fue iniciado, reiniciando servicio..." | |
service $1 restart &amp;&gt;/dev/null | |
echo " listo! =)" | |
fi | |
} | |
# Funcion para detener los servicios | |
function servicioStop(){ | |
echo -n -e "Deteniendo $1..." | |
service $1 stop &amp;&gt;/dev/null | |
echo " listo! =)" | |
} | |
# Empezando a recorrer la lista de servicios SERVICIOS[] | |
for ((i=0; i&lt;${#SERVICIOS[*]}; i++)) do #if $estado = "start"; then if [ -z $1 ]; then echo "Verificando servicio: ${SERVICIOS[$i]} -&gt;" | |
servicioInit ${SERVICIOS[$i]} | |
else | |
servicioStop ${SERVICIOS[$i]} | |
fi | |
done | |
</pre> | |
<pre class="brush:plain">SERVICIOS=(apache2 mysql bind9)</pre> | |
<hr/><pre class="brush:bash">geekscript@r00t:server$ sudo ./webserver.sh | |
Verificando servicio: apache2 -&gt; | |
apache2 ya fue iniciado, reiniciando servicio... listo! =) | |
Verificando servicio: mysql -&gt; | |
mysql ya fue iniciado, reiniciando servicio... listo! =)</pre> | |
<hr/><pre class="brush:bash">geekscript@r00t:server$ sudo ./webserver.sh foobar | |
Deteniendo apache2... listo! =) | |
Deteniendo mysql... listo! =) | |
Deteniendo bind9... listo! =)</pre> | |
<pre class="brush:plain">Autor: | |
Descripción: | |
Correo del autor y / o cuenta de twitter para retroalimentación: | |
</pre> | |
<pre> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment