Стандартна убунтівська кольорова схема для mcedit просто виїдає мозок. Є кусок роботи, де потрібно правити код в mcedit таки. Вставляємо наступний сніпєтц в .bashrc
автоматизація підключення WebDAV-шари
Є багато машин, на кожну потрібно підключити відповідну webdav-шару. Формат http://davhost/pc_0xx і 192.168.0.xx клієнт, відповідно.
#!/bin/bash
IP=`ifconfig | grep -v '127.0.0.1' | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p'`
IP_ARRAY=(${IP//./ })
FSTAB=/etc/fstab
USER_HOME=/home/user
CLIENT_DIR=$USER_HOME/client
DAVFS_DIR=.davfs2
CLIENT_SECRET=secrets
if [ ! -d $CLIENT_DIR ]; then
echo "create $CLIENT_DIR"
mkdir $CLIENT_DIR
chown user:user $CLIENT_DIR
else
echo "exist $CLIENT_DIR"
fi
if [ ! -d $USER_HOME/$DAVFS_DIR ]; then
echo "create $USER_HOME/$DAVFS_DIR"
mkdir $USER_HOME/$DAVFS_DIR
chown user:user $USER_HOME/$DAVFS_DIR
else
echo "exist $USER_HOME/$DAVFS_DIR"
fi
if [ ! -f $USER_HOME/$DAVFS_DIR/$CLIENT_SECRET ]; then
echo "create $USER_HOME/$DAVFS_DIR/$CLIENT_SECRET"
touch $USER_HOME/$DAVFS_DIR/$CLIENT_SECRET
chown user:user $USER_HOME/$DAVFS_DIR/$CLIENT_SECRET
chmod 0600 $USER_HOME/$DAVFS_DIR/$CLIENT_SECRET
echo "http://davhost/pc_0${IP_ARRAY[3]} user user" >> $USER_HOME/$DAVFS_DIR/$CLIENT_SECRET
else
echo "exist $USER_HOME/$DAVFS_DIR/$CLIENT_SECRET"
fi
if grep "http://davhost/pc_0${IP_ARRAY[3]}" $FSTAB
then
echo "exist mount access in $FSTAB"
else
echo "create mount access in $FSTAB"
echo "http://davhost/pc_0${IP_ARRAY[3]} /home/user/client davfs user,rw,auto,_netdev 0 0" >> $FSTAB
fi
chmod u+s /sbin/mount.davfs
usermod -a -G davfs2 user
files list file for package 'xxx' is missing final newline
Сьогодні при оновленні Ubuntu отримав САБЖ помилку. Наступний вигуглений скрипт вирішує проблему.
#!/usr/bin/python
# 8th November, 2009
# update manager failed, giving me the error:
# 'files list file for package 'xxx' is missing final newline' for every package.
# some Googling revealed that this problem was due to corrupt files(s) in /var/lib/dpkg/info/
# looping though those files revealed that some did not have a final new line
# this script will resolve that problem by appending a newline to all files that are missing it
# NOTE: you will need to run this script as root, e.g. sudo python newline_fixer.py
import os
dpkg_path = '/var/lib/dpkg/info/'
paths = os.listdir(dpkg_path)
for path in paths:
path = dpkg_path + path
f = open(path, 'a+')
data = f.read()
if len(data) > 1 and data[-1:] != '\n':
f.write('\n')
print 'added newline character to:', path
f.close()
Підбираємо опримальний об'єм пам'яті для zoneminder
#!/bin/sh
# Copyright (C) 2010 Chris "Pada" Kistner
# Modified by PacoLM to check only shared memory settings
# 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.
# if you find errors, check that coreutils are installed, if not, run the command below
# apt-get -y install coreutils bc
echo "--- Checking memory setting..."
page_size=$(getconf PAGE_SIZE)
mem_bytes=$(awk '/MemTotal:/ { printf "%0.f",$2 * 1024}' /proc/meminfo)
mb=1048576
mem_bytes_mb=$(expr $mem_bytes / $mb)
shmmax=$(echo "$mem_bytes * 0.90" | bc | cut -f 1 -d '.')
shmmax_mb=$(expr $shmmax / $mb)
shmall=$(expr $mem_bytes / $page_size)
shmmax_cur=$(sysctl -n kernel.shmmax)
shmmax_cur_mb=$(expr $shmmax_cur / $mb)
shmall_cur=$(sysctl -n kernel.shmall)
echo "-- Total memory = $mem_bytes B = $mem_bytes_mb MB"
echo "-- Page size = $page_size B"
echo "-- Current kernel.shmmax = $shmmax_cur B = $shmmax_cur_mb MB"
echo "-- Current kernel.shmall = $shmall_cur pages"
if [ "$shmmax" -eq "$shmmax_cur" ] && [ "$shmall" -eq "$shmall_cur" ]; then
echo "-- Recommended shm values already set"
else
echo "-- Recommended: kernel.shmmax = $shmmax B = $shmmax_mb MB"
echo "-- Recommended: kernel.shmall = $shmall pages"
fi
# Done
echo "--- Done."
додатковий трафік з Google Images
В свій час писав автоматизацію для наповнення інтернет-магазину, яка використовувала пошук в "Google Images". І час від часу натрапляв на сайти, де знаходився потрібний мені малюнок, але я не встигав на нього клікнути чи то скопіювати шлях, як відбувався повний перехід на вищезгаданий сайт з фреймів "Google Images". І перехід не на потрібну мені сторінку, де є малюнок, а в корінь сайту. Велика незручність для кінцевого користувача і додатковий трафік для власнику сайту. Про корисність цього трафіку можна довго сперечатись, але і немає страху втратити цього випадкового відвідувача :)
Технічний момент. В head'і прописуємо:
Закоментований варіант - перехід на сторінку де є малюнок, розкоментований - в корінь сайту.
Технічний момент. В head'і прописуємо:
<script type='text/javascript'>
if (parent.frames.length > 0) {.
//parent.location.href = location.href;
parent.location.href = 'http://t-v.te.ua';
}
</script>
Закоментований варіант - перехід на сторінку де є малюнок, розкоментований - в корінь сайту.
split на bash'і
snat=(
55410:192.168.10.99:80
55415:192.168.10.199:80
55411:192.168.20.99:80
55412:192.168.30.199:80
55413:192.168.24.99:80
55414:192.168.20.199:80
)
for i in ${snat[@]}; do
set -- "$i"
IFS=":"; declare -a Array=($*)
iptables -A FORWARD -p tcp -s ${Array[1]} --sport ${Array[2]} -j ACCEPT
iptables -A FORWARD -p tcp -d ${Array[1]} --dport ${Array[2]} -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport ${Array[0]} -j DNAT --to-destination ${Array[1]}\:${Array[2]}
echo "${Array[@]}"
done
п.с. збоченська мова
Багатопотокова проксі-чекалка на Python
#!/usr/bin/python
import Queue
import threading
import MySQLdb
import urllib2
import time
class DB:
conn = None
def connect(self):
self.conn = MySQLdb.connect(host = "x.y.z.q", user = "user", passwd = "password", db = "database")
def query(self, sql):
try:
cursor = self.conn.cursor()
cursor.execute(sql)
except (AttributeError, MySQLdb.OperationalError):
self.connect()
cursor = self.conn.cursor()
cursor.execute(sql)
return cursor
proxyList = []
global db
db = DB()
curr = db.query("SELECT url FROM proxy")
result_set = curr.fetchall ()
for row in result_set:
proxyList.append(row[0])
queue = Queue.Queue()
class ThreadUrl(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue
def run(self):
while True:
host = self.queue.get()
try:
proxy_handler = urllib2.ProxyHandler({'http':host})
opener = urllib2.build_opener(proxy_handler)
opener.addheaders = [('User-agent','Mozilla/5.0')]
urllib2.install_opener(opener)
req = urllib2.Request("http://www.proxylists.net/proxyjudge.php")
sock=urllib2.urlopen(req, timeout= 7)
rs = sock.read(5000)
if 'ProxyLists.Net - Proxy judge ' in rs:
print "ok %s" % host
db.query("UPDATE proxy SET checked=NOW() WHERE url = '%s' " % host)
except:
print "err %s" % host
db.query("DELETE FROM proxy WHERE url LIKE '%s' " % host)
self.queue.task_done()
def main():
for i in range(20):
t = ThreadUrl(queue)
t.setDaemon(True)
t.start()
for host in proxyList:
queue.put(host)
queue.join()
main()
Підписатися на:
Дописи (Atom)