Here's a great little article on how to edit the hosts file on a Mac:
http://decoding.wordpress.com/2009/04/06/how-to-edit-the-hosts-file-in-mac-os-x-leopard/
Add the following line to /etc/profile to setup full logging of all ssh sessions:
script -q /var/log/sessions/ssh-`date +%d-%M-%Y-%Hh-%Mm-%Ss`-`whoami`-$$.log && exit
Of course this is a security risk and violates user privacy.
Here's an lftp script to rename a remote file vi FTP without downloading the file:
#!/bin/bash
NAS_HOST=myhost
NAS_USER=myuser
NAS_PASS=mypass
SRC=$1
DST=$2
lftp -c "open -e \"mv $SRC $DST\" -u $NAS_USER,$NAS_PASS $NAS_HOST"
This Unison program is great. It neatly handles syncing between two servers where changes are occurring on both sides. On one client site it takes about 30 seconds to compare/sync a 23GB /var/www/html/ structure with about 100 sites.
1) Install unison (http://www.cis.upenn.edu/~bcpierce/unison/). Requires "ocaml" compiler (http://caml.inria.fr/), and needs the "etags" command from emacs (so "yum install emacs", whatever)
2) Set up a "/root/.unison/profile-name.prf" file. See example pasted below. Comment out "batch=true" and "silent=true" for initial test runs. Uncomment them for running from a cron job.
3) Run manually to test: unison profile-name
4) If you leave the logging turned on, make an /etc/logrotate.d/unison file, something like this:
/var/log/unison.log {
notifempty
daily
rotate 7
missingok
compress
}
5) Set up cron job(s). Create multiple profiles if specific paths need more frequent syncing. With silent=true, the jobs should produce no output (silent=true automatically sets batch=true).
Sample profile (/root/.unison/profile-name.prf)
# Reasonable defaults
auto=true
confirmbigdeletes=true
contactquietly=true
fastcheck=true
group=true
maxthreads=20
numericids=true
owner=true
times=true
# Dump an archive listing to ~/unison.dump
#dumparchives=true
# Skip confirmation
batch=true
# Suppress output (sets batch=true)
silent=true
# Run in a loop, repeating every X seconds (sort of daemon mode)
#repeat=60
# Log all sync operations
log=true
logfile=/var/log/unison.log
# Backup deleted files
backup=Name *
backuplocation=central
backupdir=/var/www/unison-backups
# Local root
root=/var/www/html/
# Remote root (the double forward-slash between IP and remote path is correct)
root=ssh://1.2.3.4//var/www/html/
# Resolve conflicts in favor of local root
prefer=/var/www/html/
# Limit to specific relative path (can specify multiple path= params)
#path=somepath/
# Don't sync (can specify multiple ignore lines)
ignore=Path */var/cache
I'm a big fan of the "replace" utility included in the mysql client package. With this utility you can search/replace a string of text across multiple files like this:
replace 'from-string' 'to-string' -- start-folder/*.pl
Quick and easy!
But on occasion I'm on a system that doesn't have the mysql client package so here's a similar function using find and sed:
find start-folder/ -name '*.pl' -exec sed -iorig 's/from-string/to-string/' {} \;