Linux recipes



	apt install resolvconf
	vi /etc/network/interfaces
		address, netmask, network, broadcast, gateway, dns-nameservers
		wireless-essid, wireless-key s:

network card buffer overflows

	# set noapic in boot options

install wpa

	# edit /etc/udev/rules.d/70-persistent-net.rules to set interface name to wlan0
	apt install wpasupplicant
	wpa_passphrase ssid >>/etc/wpa_supplicant/wpa_supplicant.conf
	vi /etc/network/interfaces
		auto wlan0
		iface wlan0 inet dhcp
			wpa-driver wext
			wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
	# install 2.6.30 kernel
	# install agere firmware see into /lib/firmware
	ifup wlan0
	apt install wireless-tools
		iwlist wlan0 scan

bridge two interfaces

	apt install bridge-utils
	vi /etc/network/interfaces
		auto br0
		iface eth0 inet manual
		iface eth1 inet manual
		iface br0 inet dhcp
			bridge_ports eth0 eth1

bridge tap into network

	vi /etc/network/interfaces
	# setup bridge
		iface br0 inet static
			bridge_ports eth0 tap0
	# change eth0 to manual
		iface eth0 inet manual
	# setup tap
		iface tap0 inet static
			pre-up tunctl -u user -t tap0
			post-down tunctl -d tap0
	# ensure tap created before bridge
	auto tap0 br0

internet sharing

		# host
		iptables -A FORWARD -i lan -o wan -j ACCEPT
		iptables -A FORWARD -i wan -o lan -m state --state ESTABLISHED,RELATED -j ACCEPT
		iptables -t nat -A POSTROUTING -o wan -j MASQUERADE
		# client
		route add default gw ip lan

file sharing from Windows

	apt install smbfs
	apt install cifs-utils
	smbclient -U user -L ip-address
	mkdir tmp
	smbmount //ip-address/x tmp -o user=user
	mount -t cifs -o username=user -o domain=host //host/user mountpoint

remote access via ssh

	apt install ssh # secure shell
	scp . server:~
	ssh-keygen # setup RSA login key
		scp *.pub server:.ssh
		cat *.pub >>authorized_keys # on server
	vi /etc/ssh/sshd_config
		set X11Forwarding yes
	vi /etc/ssh/ssh_config
		ControlMaster auto
		ControlPath ~/.ssh/%r@%h:%p
	/etc/init.d/ssh restart
	ssh -X $REMOTE
	ssh -L 2022:client2:22 server; ssh -X -p 2022 localhost # port forward to second client

remote backups

	apt_get install rsync
		rsync /src /dst -a --del
		rsync /src server:/dst -az --del -e ssh

rsync using remote fakeroot

	# mount dst with user_xattr set in fstab
	rsync -a --del /src backup@server:/dst --rsync-path='rsync --fake-super' -e 'ssh -i /home/backup/.ssh/id_rsa'

VPN tunnel via PPTP

	vi /etc/ppp/chap-secrets
		username PPTP password *
	vi /etc/ppp/peers/tunnel
		pty "pptp server --nolaunchpppd"
		name username
		remotename PPTP
		file /etc/ppp/options.pptp
		ipparam tunnel
	vi /etc/ppp/ip-up.d/tunnel
		if [ "$PPP_IPPARAM" = "tunnel" ]; then
			route add -net 192.168.subnet.0/24 dev $IFNAME
	chmod +x /etc/ppp/ip-up.d/tunnel
	pon tunnel
	poff tunnel

VPN through openvpn

	apt install openvpn
	cp *.crt *.key .openvpn
	chmod 400 .openvpn
	vi /etc/default/openvpn
	vi .openvpn/client.conf
		remote vpn-server 1194
		ca ca.crt
		cert cert.crt
		key key.key
		tls-auth ta.key 1
		cipher AES-256-CBC
	su openvpn client.conf


	cd /usr/src
	bzip -d *.bz2
	tar xf *.tar
	cd ltmodemX
	mknod --mode=0660 /dev/ttyLT0 c 62 64
	chown :dialout /dev/ttyLT0
	ln /dev/ttyLT0 /dev/modem
	mkdir /lib/modules/2.6.8-X/kernel/drivers/modem
	cp /usr/src/ltmodem*/lt*.ko /lib/modules/2.6.8*/kernel/drivers/modem
	depmod -a
	vi /etc/modprobe.d/aliases
		alias char-major-62 ltserial
		alias ttyLT0 ltserial
		alias modem ltserial
	modprobe ltserial
		username, password


	apt install kphone
		# no stun, though can use
		# prefer codec iLBC, then G711a
	apt install ekiga
		# need to route ports SIP 5060, RTP 8000


	vi /etc/apt/sources.list
		dep stable non-free
	apt install skype
	LD_PRELOAD=/usr/lib/libv4l/ skype

remote desktop

	apt install rdesktop
	rdesktop 192.168.X.X
		-f # sets window full screen
		-r disk:directory=/home/user/directory # shares client directory
		-g 1024x768 -g 1280x800
	ctrl-alt-enter # turn off full screen

restart network

	/etc/init.d/networking restart

accessing local network client names under NT domains

	apt install winbind
	vi /etc/nsswitch.conf
		# add wins to hosts

reverse ssh

	crontab -e
		if ! ps -C autossh >/dev/null; then [autossh]; fi
	autossh -f -p 10022 -R 10022:localhost:22 client -fN # from server
	ssh -p 10022 localhost # from client

DNS for dynamic IP

	# setup at
	apt install inadyn
	vi /etc/inadyn.conf
		update_period_sec 600
		username user
		password password
		alias name
		iterations 1
	chmod 600 /etc/inadyn.conf
	crontab -e
		0 0 * * * /usr/sbin/inadyn

securing ports

	apt remove nfs-common rpcbind
	vi /etc/inetd.conf
		# comment out ident line
	/etc/init.d/openbsd-inetd restart

pcmcia bus for Xircom network card

	pccardctl info
	ifdown eth0
	pccardctl eject
	rmmod xirc2ps_cs
	modprobe xirc2ps_cs
	pccardctl insert
	ifup eth0

controlling multiple interfaces

	route add X0.X1.X2.X3 eth0
	route add wlan0
	route add wlan1
	iptables -t nat -A OUTPUT -d -j DNAT --to X0.X1.X2.X3 -o wlan0
	iptables -t nat -A OUTPUT -d -j DNAT --to X0.X1.X2.X3 -o wlan1

show and scan available ports

	nmap ip
	nmap -sn net/24

spoof MAC

	ifdown eth0
	ifconfig eth0 hw ether mac-address
	ifup eth0

guessnet automatic network settings

	apt install guessnet
	vi /etc/network/interfaces
		mapping eth0
			script guessnet-ifupdown
			map default: default
			map timeout: 10
			map verbose: true
			map autofilter: true
		iface eth0-home inet static
			test peer address router-ip mac router-mac source own-ip
				# network settings
			iface default inet dhcp

change interface names

	vi /etc/udev/rules.d/70-persistent-net.rules

override domain name servers

	vi /etc/dhcp/dhclient.conf
		supersede domain-name-servers,; # google DNS

list network interfaces

	ip -br addr show
	lshw -short -class network

show DNS records

	dig -t ANY


	sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap

set full hostname of local machine

	vi /etc/hostname
	vi /etc/hosts hostname.domain hostname localhost
	hostname --fqdn

regenerate default SSL certificates

	make-ssl-cert generate-default-snakeoil --force-overwrite

SSL certification (

	# validate domain
	openssl genrsa -aes256 -out domain.key 2048 # create key
	openssl req -new -key domain.key -out domain.csr # create request
	# submit request and save certificate
	# allow time for certificate to reach servers
	# copy to server
	openssl rsa -in domain.key -out /etc/ssl/private/domain.key # decrypt key
	cat domain.crt >/etc/ssl/certs/startcom-domain-unified.crt

SSL certification (certbot through

	# initial certificate
		git clone # mainline
		apt install python-certbot # or repository
	# manual renewal
		certbot-auto certonly --manual -d domain -d *.domain
		# make challenge available at DNS TXT _acme-challenge.domain
		# make challenge available at http://domain/.well-known/acme-challenge
	# nginx certs
		vi /etc/nginx/sites-available/default
			ssl_certificate /etc/letsencrypt/live/domain/fullchain.pem;
			ssl_certificate_key /etc/letsencrypt/live/domain/privkey.pem;
		service nginx restart
	# gitlab certs (note that gitlab now have inbuild certbot functionality)
		@ turn off https forced if key has to be removed and added
		@ update fullchain and privkey
	# prosody certs
	# non-interactive renewal (only for apache)
		certbot-auto renew


replace mail transfer agent exim4 with smaller esmtp

	apt --purge install esmtp-run # removes exim4 daemon
	set fully qualified hostname
	vi .esmtprc
	# add CNAME for sending machine in DNS records

sending mail with telnet

	telnet 25
	MAIL FROM: email
	RCPT TO: email
		SUBJECT: test
		# blank line

install firefox

	apt install iceweasel mozplugger

install opera

	vi /etc/apt/sources.list
		deb stable non-free
		wget -O - | apt-key add -
	apt install opera
		remove tab bar
		history->memory cache=5Mb
		browsing->redraw after 5s
		browsing->no icons
		User Prefs->Turbo Mode=0

instant messaging

	apt install pidgin pidgin-otr

multimedia browser plugins

	apt install flashplayer-mozilla mozilla-mplayer
		add to opera plugins
	update-flashplugin-nonfree --install
	# OR
	# download flash_player_npapi_linux.x86_64.tar.gz
	tar -xzf flash_player_npapi_linux.x86_64.tar.gz
	mv /usr/lib/mozilla/plugins/

install peer to peer

	apt install mldonkey-server mldonkey-gui # edonkey
	apt install gtk-gnutella # gnutella/limewire
	apt install transmission-gtk

unpacking mail file

	apt install munpack
	# put into export filter
	# export to mbox file
	munpack file.mbx

GPG privacy

	apt install gpgkeys seahorse
	gpg --gen-key # generate key pair
	gpg --send-keys --keyserver key_id # upload public key
	gpg --recv-keys --keyserver key_id # download public key
	gpg --fingerprint key_id # check a fingerprint
	gpg --sign-key key_id # sign a key
	gpg -ea -r email # encoding
	gpg -d test.file.asc # decoding
	gpg --clearsign # sign a text file
	gpg --verify # verify a signature
	gpg --edit-key email # edit key trust
	gpg --list-keys

GPG party sign using caff

	apt install signing-party
	caff -E -m yes keyid # mail back signed keys
		# select uids
		# check fingerprint
		showphoto # check photo
		sign # sign level 2
		quit # quit and send mail

GPG party import

	# save all signature.asc
	gpg --import *.asc
	gpg --keyserver --send-keys key_id # update own key to server

GPG key removal

	gpg --export-secret-key --export-options export-minimal --armor key_id
	gpg --delete-secret-keys key_id
	gpg --delete-key key_id

GPG published over DNS

	gpg --list-keys --fingerprint key_id # get the fingerprint
	gpg --export --armor key_id > # get the key
	# add a DNS TXT record
		user._pka TXT "v=pka1;fpr=key_fingerprint;uri=https://domain/"
	# test for the record
		dig +short user._pka.domain TXT
	# test with GPG
		echo 'test' | gpg --no-default-keyring --keyring /tmp/gpg-$$ --encrypt --armor --auto-key-locate pka -r email | gpg

GPG symmetric file encryption/decryption

	gpg --symmetric file
	gpg --decrypt file.gpg >file

web site ftp upload transfer

	apt install sitecopy
	mkdir -m 700 .sitecopy
	touch .sitecopyrc
	chmod 600 .sitecopyrc
	vi .sitecopyrc
		site sitename
		server servername
		remote remoteroot
		local localroot
		username username
	sitecopy --init sitename # to initialize indexing
	sitecopy -o --update sitename # to update site

web site mirror

	wget -x --save-cookies cookies.txt --keep-session-cookies --post-data "p=blah&submit=login" login.php
	wget --load-cookies cookies.txt -mk -w 5 sitename

command line emailing

	echo '<html>' >messagefile
	echo '<h1>initial message</h1>' >>messagefile
	sed -e 's/$/<br>/' logfile >>messagefile
	echo '</html>' >>messagefile
	cat messagefile | mail -s 'log file' -a 'Content-type: text/html'

dns records for google hosted

	CNAME calendar,docs,www,user,mail
	A @
	MX @,,,,
	SPF @ v=spf1 ~all
	# mail to check spf/dkim


		tar xvzf ansifonts.tar.gz; mv vga11x19.pcf /usr/share/fonts/X11/misc
		mkfontdir /usr/share/fonts/X11/misc/
		xset fp rehash
		rxvt -fn vga11x19 -bg black -fg white

power management

acpi management

		apt install lm-sensors
		sensors-detect # install sensor modules
		sensors # check temperature
		acpitool -s # sleep
		acpitool -T # shows toshiba values
		acpitool -l 7 # sets LCD brightness
		# setup /etc/acpi/events, /etc/acpi/actions for ac adapter and power button
		apt install vbetool
		vbetool dpms off # turn off LCD backlight, not sure how to automate
		# comment out DPMS from xorg.conf

setting up UPS 3105

		apt install nut
		vi /etc/nut/ups.conf
			# pw3105
				driver = bcmxcp_usb
				port = auto
		upsdrvctl start
		vi /etc/nut/upsd.conf
			ACL all
			ACL localhost
			ACCEPT localhost
			REJECT all
		vi /etc/nut/upsd.users
			# nut
				password = password
				allowfrom = localhost
				upsmon master
		vi /etc/nut/upsmon.conf
			POWERDOWNFLAG /etc/killpower
			MONITOR pw3105@localhost 1 nut password master
			SHUTDOWNCMD "/sbin/shutdown -h +0"
		chown nut:nut /etc/nut/*
		chmod 640 /etc/nut/upsd.users /etc/nut/upsmon.conf
		upsc pw3105@localhost ups.status # check status
		vi /etc/default/nut
		apt install wmnut
		wmnut -w

power saving

		echo 1500 >/proc/sys/vm/dirty_writeback_centisecs

fix powersave logging

		vi /etc/acpi/events/ac /etc/acpi/events/battery
			action=/etc/acpi/ %e #  pass a parameter to 


check 3D access

		apt install mesa-utils

legacy nvidia graphics card

		apt install nvidia-glx-legacy-173xx nvidia-xconfig
		apt install nvidia-glx-legacy-96xx nvidia-xconfig
		nvidia-xconfig --no-composite

ATI graphics dual head

		# add to Device section of /etc/X11/xorg.conf
			Option "MergedFB" "true"
			Option "CRT2Position" "Below"
			Option "MergedXineramaCRT2IsScreen0" "true"
			Option "SWCursor" "true"
		# or duplicate Device, Monitor, Screen section of /etc/X11/xorg.conf, and in ServerLayout
			Screen 0 "0 screen"
			Screen 1 "1 screen" Below "0 screen"
			Option "Xinerama" "true"

ATI fglrx driver

		apt install linux-headers-3.2
		apt -t wheezy-backports install fglrx-legacy-driver
		aticonfig --initial=dual-head --xinerama=on

change screen resolution

		dpkg-reconfigure xserver-xorg # sets up dummy xorg.conf
		# add monitor frequencies to the monitor section
			HorizSync	31.5-64.3 # Sony Vaio PCG-SRX77
			VertRefresh	50.0-70.0 # Sony Vaio PCG-SRX77
			HorizSync	42.0-52.0
			VertRefresh 55.0-65.0
		# add in display mode to the screen section
			Subsection	"Display"
				Modes	"1024x768"

disable faulty radeon graphics modeset on boot

		vi /etc/default/grub
			# add nomodeset or radeon.modeset=0

disable svideo for intel vblank wait timed out

		vi /etc/default/grub
			kernel ... video=SVIDEO-1:d

display changes

	xrandr --query # list displays
	xrandr --output displays --mode 1024x768
	xset q # query settings
	xset s off # disable blank time
	xset -dpms # disable dpms


xwindows, desktop

install xwindows

		apt install xorg
			# Portege] PCI:0:4:0 /dev/psaux
			# Athlon] PCI:1:0:0 PCI:1:0:1 1280x1024 hsync:30-69 vsync:59-85

reconfigure xorg

		 dpkg-reconfigure xserver-xorg

fluxbox desktop

		apt install fluxbox
			desktop style MerleyKay
			toolbar 100% autohide maximize_over
			slit autohide maximize_over
			.fluxbox/init strftimeFormat: %k:%M %d/%m/%y
			.fluxbox/init # point to local keys file
			.fluxbox/keys Mod4 m :RootMenu
			.fluxbox/startup # holds wm apps
			.fluxbox/slitlist # remembers order of wm apps

share keyboard and mouse between computers

		apt install synergy
			# on server
			# edit .synergy.conf
				section: screens
				section: links
						up = host2
						down = host1
				section: options
					switchDoubleTap = 500
			# server start
			# client start
				ssh host2
				ssh -f -N -L 24800:host1:24800 host1
				synergyc localhost

authorize xwindows access

		xhost +$REMOTE # or use xauth or use sux

monitoring applications in the slit

		apt install wmcpu wmnet wmbutton
		vi .fluxbox/startup
			wmcpu &; wmnet -w &; wmbutton &; fluxbox

send X output to null

		Xvfb :99 -screen 0 1x1x8 &
		DISPLAY=:99 application &

math applications

		apt install galculator # scientific calculator
		apt install octave octplot # equation evaluation
		#  octave 
			loading data files
				load a.out # data in a
				fa = fft(a)


		sudo freshclam # update virus list
		clamscan file # virus scan
		rm /etc/cron.d/clamav-freshclam

create menu entry

		vi /usr/share/menu/app # standard desktop
		vi /usr/share/applications/app.desktop # for gnome

hide dotfiles in file dialog


play a video on the desktop background

		mplayer -rootwin -nosound -loop 0 -vf scale=1280 video.avi

selection pasting to xterm

		vi ~/.Xdefaults
			xterm*selectToClipboard: true
		xrdb -merge ~/.Xdefaults

force hires 1024x768 on startup on Toshiba 3500

		vi /etc/default/grub

fingerprint reader

		apt install fprintd libpam-fprintd
		fprintd-enroll username -f finger

text manipulation

editors and readers

		apt install vim-gtk
		apt install leafpad abiword abiword-help abiword-plugins # notepad, document editor
		apt install acroread xpdf-reader flpsed pdftk # pdf reader, annotation
		apt install xournal # edits pdfs
		apt install wordnet # dictionary/thesaurus
		apt install xchm # compressed html reader
		apt install myspell-en-au

ereader formatting

		# use firefox
			unwriteable-margin-bottom = 110
		letter paper
		size 150%
		ignore scaling
		headers and footers off

set default editor to vi

		ln -sf /usr/bin/vi /etc/alternatives/editor

strip carriage returns from file

		tr out.txt

edit hex in vim

		vim -b file.bin
		:%!xxd -r

digraphs in vim

		ctrl-k a :

deleting empty lines in vim


sort lines in vim

		:sort u # unique lines

generate random string for password

		openssl rand -hex 8

manipulate pdf pages

		pdftk in0.pdf in1.pdf output out.pdf # join
		pdftk in.pdf 1-10 output out.pdf # select pages
		pdftk in.pdf input_pw password output out.pdf # decrypt



		apt install lmemory # memory
		apt install Xjig # jigsaw
		apt install gnugo gnuchess # go, chess
		apt install nethack # hack
		apt install sabre # flight simulator
		apt install supertuxkart # kart racer
		apt install planetpenguin-racer # skiing
		apt install gltron # Tron lightcycles
		apt install frozen-bubble # tetris style
		apt install pingus # lemmings
		apt install neverball neverputt # rolling ball
		apt install wesnoth # board strategy
		apt install codebreaker # mastermind
		apt install pioneers-server pioneers-client # Settlers

installing windows game

		# copy game to /usr/local/games
		# create desktop link in /usr/share/applications
		# create an xpm icon in /usr/share/pixmaps
		apt install icotools
			wrestool -l game.exe | grep icon
			wrestool -x -n MAINICON game.exe >game.ico
			gimp game.ico # save as xpm


		# transaction flow
			# wallet -> broadcast to mempool -> confirm to blockchain
		apt install snapd
		snap install bitcoin-core
		# files in ~/snap/bitcoin-core/common/
		bitcoin-core.daemon # start server
		bitcoin-core.cli getblockcount
		bitcoin_core.cli createwallet folder
		# load wallet into running server
			bitcoin_core.cli loadwallet filename
		# get wallet information
			bitcoin-core.cli -rpcwallet=folder getwalletinfo
			bitcoin_core.cli -rpcwallet=folder getnewaddress name
		# send money
			bitcoin-core.cli -rpcwallet=folder settxfee amount # BTC/1kB eg 0.00005 = 5 satoshis/byte
			firefox # queue statistics
			bitcoin-core.cli sendtoaddress address amount # make payment
		# rebroadcast transaction to mempool
		# blocksonly=1 prevents broadcast
			bitcoin-core.cli getrawtransaction transaction-id
			bitcoin-core.cli sendrawtransaction raw-transaction-data

audiovisual multimedia


		apt install pavucontrol

test speakers

		aplay -L
		speaker-test -c2 -t wav

check pulseaudio configuration

	pactl list short sources
	pactl list short sinks
	pactl set-default-sink 'sink'

access patent encumbered repositories

		vi /etc/apt/sources.list
			deb stable main

multimedia applications

		apt install mpg123 audacious
		apt install timidity fluid-soundfont-gm
		apt install vsound lame realplayer
		apt install vlc
		apt install audacity liblame0 mp3splt-gtk
			# configure
		apt install ripperx # CD ripper
		apt install xdvdshrink # DVD ripper and burner
		apt install libav-tools


		ffprobe -i input.mpg # view streams
		avconv -i input.ext -codec copy output.mp4 # convert to mp4
		avconv -i input.ext -c:v libx264 -strict experimental output.mp4 # convert to x264
		avconv # cut video
			-i input.mp4
			-ss hh:mm:ss # start
			-t hh:mm:ss # length
			-codec copy

select audio/video streams from flv

		mplayer -dumpaudio movie.flv -dumpfile movie.mp3
		avconv -i in.flv -map 0:0 -c:v copy out.mp4 # select video
		avconv -i in.flv -map 0:1 -c:a copy out.aac # select audio
		avconv -i in.flac -acodec libmp3lame -aq 2 out.mp3

combine audio back in

		ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a wma -map 0:v:0 -map 1:a:0 out.wmv

working with DVDs

		mpegdemux -d -s 0xe0 src.vob dst.m1v # ripping video from DVD vob
		mpegdemux -d -s 0xbd -p 0x80 --ac3 src.vob dst.ac3 # ripping sound from DVD vob
		ffmpeg -i src.mpg -async 1 -target pal-dvd dst.vob # create vob file from avi source
		ffmpeg -i src.vob -async 1 -target pal-dvd -map 0.0 -map 0.1 -b 5400000 -ab 448000 dst.vob # create vob file from avi source with parameters
		mplex -f 8 -o dst.vob src.m1v src.ac3 # multiplexing to vob
		# vlc to mpeg transport to capture DVD
		dvdauthor -x src.xml
			<dvdauthor dest="DVD">
				<vmgm />
							<vob file="movie.vob" chapters="0:00,10:00" />

rip svcd

		apt install vcdimager

rip dvd

		apt install dvdbackup libdvdcss2 genisoimage
		dvdbackup -M -i /dev/sr0
		genisoimage -dvd-video -o movie.iso folder

reencoding video

		apt install mencoder w32codecs
		ln -s /usr/share/fonts/truetype/freefont/FreeSerif.ttf /usr/share/mplayer/subfont.ttf
		mencoder input.flv -ovc xvid -xvidencopts pass=2:bitrate=1150 -oac mp3lame -of avi -o output.avi #  encoding for video player 
		mencoder input.mp4 -ovc -vf scale=960:540 -ofps 30000/1001 xvid -xvidencopts bitrate=3000 -oac mp3lame -o output.avi #  encoding for Sprint 
		ffmpeg -i input.avi -b 1150k -s 320x240 -vcodec mpeg4 -r 30000/1001 output.avi #  encoding for youtube 
		#  mencoder options
			-vf scale=width:height
			-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2160000
			-ffourcc DX50

editing video

		apt install openshot
		# encoding for xvid
			libxvid, 3 Mb/s
			libmp3lame, 44100 Hz, 2 channel, 192 kb/s
		vi /usr/shared/pyshared/...
			# set progressive scanning if interleaved

capturing screen video

		./slowdown.out # approximately 10 times
		recordmydesktop --full-shots --no-sound --windowid 0x00000000 --v_bitrate 1150000 --fps 3

play video at different frame rate

		mplayer -fps 30 video.ogv

identify DVD type

		dvd+rw-mediainfo /dev/dvd

burn DVD

		dvd+rw-format /dev/dvdrw # for rewritables
		growisofs -Z /dev/dvdrw -r -J $folder

record streaming files

		mplayer $2 -ao pcm:file=$1.pcm
		lame -m m -b 32 $1.pcm `date +%Y%m%d`$1.mp3
		rm $1.pcm

record streaming files

		mplayer $1 -dumpstream -dumpfile $2.rm

convert mp3 to wav

		mpg321 src.mp3 -w dst.wav

convert audio to ogg

		find . -name \*.m4a -exec sh "{}" \;
			 vlc -I dummy "$1" --sout="#transcode{acodec=vorb,ab=256}:standard{access=file,mux=ogg,dst="\""$1.ogg"\""}" vlc:quit

video streaming

		gstreamer-properties # to set stream properties
		gqcam # to view camera
		ln /dev/video0 /dev/video # for applications that use /dev/video
		apt install stopmotion vgrabbj # stop motion animation

video streaming over network

		vlc --vlm-conf test.vlm --ttl 12 -I http --http-src /usr/share/vlc/http --http-host :8080 --rtsp-host :5554 # server
		vlc rtsp://ip_address:5554/test # client
		iceweasel http://ip_address:8080/vlm.hml # interface
		# vod command
			new test vod enabled input "test.avi"

downloading iview

		apt install python3 python3-gi bzr python-beautifulsoup libssl-dev python-simplejson
		# install rtmpdump from
		bzr branch https+urllib:// python-iview
		# compile rtmpdump
		PATH=$PATH:path_to_rtmpdump ./iview-gtk

downloading BBC

		apt install get-iplayer
		get-iplayer #  get list of programs 
		get-iplayer --get number --output ~/ --partial-proxy

running jack, showing oscilloscope of playing sound

		apt install jackd1
		alsaplayer -o jack file.ogg
		jack.scope -s
			(connect "alsaplayer-[0-9]*:out_1" "jack\.scope-[0-9]*:in_1")

random generation from sound

		apt install randomsound

rotate video

		mencoder -vf rotate=1,mirror -ovc lavc -oac copy input.avi -o output.avi
		ffmpeg -i input.avi -vf transpose=1 -target pal-dvd output.vob

replace mp3 id3 tags with filename

		find *.mp3 -exec sh -c 'id3v2 -t $(basename {} .mp3) {}' \;


graphics packages

		apt install gqview libjpeg-progs gthumb
		apt install gimp gimp-help-en gimp-helpbrowser gimp-print
		apt install scribus scribus-template # publishing
		apt install openclipart-png openclipart-svg
		apt install dia # diagramming editor
		apt install inkscape python-xml # svg editor


		apt install sane sane-utils
		adduser user scanner
		# snapscan
			# add u176v042.bin from driver disk to /usr/share/sane/snapscan
			# set firmware line in /etc/sane.d/snapscan.conf
		# epson
			# use epkowa
			vi .sane/xscanimage/epkowa:libusb:XXX:XXX.rc # to edit resolution
		sane-find-scanner # find scanner device
		scanimage -L # check for access to scanner
		xscanimage # scan a page

capture camera

		mplayer -fps 1 -speed 0.1 -frames 10 -tv driver=v4l2 -vo jpeg tv://

batch scanning

		scanimage --help
		scanimage -d epson2 --wait-for-button=yes --batch=%.4d.pnm --mode Gray --depth 8 --resolution 150 -x 210 -y 297 --batch-start=1
		find . -name '*.pnm' -exec sh -c 'convert -quality 90 -normalize {} $(basename {} .pnm).jpg' \;
		convert -density 150x150 *.jpg dst.pdf
		convert -crop xsizexysize+xoffset+yoffset -resize xsizexysize input.jpg output.jpg
		find . -name '*.JPG' -exec sh -c 'convert -resize 50% -quality 90 {} $(basename {} .JPG).jpg' \;

image processing

		convert in.nef -crop wxh+x+y -colorspace Gray -level lower%,upper% -sharpen 0x1.0 out.jpg

screen snapshot

		import -window id snapshot.jpg

panorama images

		# convert to 2:1 aspect ratio
		exiftool -ProjectionType="equirectangular" -Make="RICO" -Model="RICO THETA S" filename.jpg

image metadata

		exiftool -artist="name" -P -overwrite_original -m img.jpg

animated gif

		mogrify -crop widthxheight+xoffset+yoffset +repage *.png
		convert -layers OptimizeFrame -delay 10 *.png -loop 0 filename.gif

image stacking

		avconv -i input.avi -r 30 -f image2 %04d.tif # video to images
		align_image_stack -a prefix -i -C *.tif # align images
		enfuse -o output.tif *.png # stack images

acecad tablet device

		apt install xserver-xorg-input-acecad
		# add lines to /etc/X11/xorg.conf
			Section "InputDevice"
				Identifier "Tablet"
				Driver "acecad"
				Option "Device" "autodev"
				Option "Mode" "absolute"
			Section "ServerLayout"
				InputDevice "Tablet"
		# restart X
		# check log in /var/log/Xorg.0.log
		# setup in gimp->file->preferences->input devices

gimp plugins

		apt install libgimp2.0-dev

extract images from pdf files and join together

		pdfimages -j file.pdf "prefix"
		convert in.pbm out.png
		convert -rotate 90 in.png out.png
		convert -crop 2000x1500+100+100 in.png out.png
		convert -density 200x200 in.png out.png
		convert *.png out.pdf

montage of images

		montage -tile 2x4 -geometry 500x500 -background none inputimages output.jpg # proof sheet
		montage -geometry +0+0 inputimages output.jpg # retain resolution

increase image magick memory

		sudo vi /etc/ImageMagick-6/policy.xml
			# set memory resource size


		apt install gnuplot
			plot "input.dat" using 0:1 with lines, "input.dat" using 0:2 with lines # plot comparative traces

download flash videos (youtube, vimeo)

		# open in player
		lsof +L1 | grep Flash
		cp /proc/pid/fd/fd video.mp4 # copy at end
		tail -c +0 -f /proc/pid/fd/fd >video.mp4 # copy while running

fix opengl hang with blank window

		vblank_mode=0 app
		vi /etc/drirc
					<application name="all">
					<option name="vblank_mode" value="0"/>
		# OR
		vi /etc/default/grub

access digital camera

	gphoto2 --auto-detect
	gphoto2 --list-files
	gphoto2 --no-keep --get-all-files
	gphoto2 --capture-image
	gphoto2 --set-config datetime=now

streaming camera to html5

	apt install gstreamer1.0-tools
	gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! theoraenc quality=4 ! oggmux ! tcpserversink host=ip-address port=port
		<video width="100%" autoplay>
			<source src="http://ip-address:port/" type="video/ogg">

languages and fonts

international fonts

		apt install ttf-gentium ttf-sil-charis ttf-sil-doulos


		dpkg-reconfigure locales



arabic support

		reconfigure xserver # lenny
			layout "us,ar"
			options "grp:caps_toggle,grp_led:caps"
		vi /etc/default/keyboard # squeeze
		# keymap in /usr/share/X11/xkb/symbols
		# Scheherezade and Lateef fonts from SIL
			# install in /usr/share/fonts/truetype
			apt install libft-perl
			defoma-hints -c --no-question truetype font.ttf >font.hints
			defoma-font register-all font.hints

japanese support

		apt install scim-anthy
		im-switch -c # set scim via scim-bridge
		# restart X session
		# use ctrl-space to switch

inserting unicode

		ctrl-shift-u ctrl-shift- # hold down ctrl-shift
		ctrl-V u hexcode # in vim

install latex xetex

		apt install texlive arabtex texlive-xetex texlive-omega texlive-latex-extra lmodern
		# if no access to xetex fmt
			fmtutil --enablefmt xetex # fixes access to xetex fmt
			fmtutil --enablefmt xelatex
		latex test.tex
		xdvi test
		dvips -o test
		xetex test.tex
		xpdf test

add latex sty

		mkdir /usr/share/texmf/tex/latex/newsty
		cp new.sty /usr/share/texmf/tex/latex/newsty

truetype fonts?

		apt install xfstt
		FontPath "unix/:7101" in /etc/X11/XF86Config-4
		apt install fontforge fontmatrix

installing ttf font

		cp font-folder /usr/share/fonts/
		fc-cache -vf

losslessly recompressing images


package management


		apt update # update package index
		apt dist-upgrade # upgrade packages
		apt autoclean # remove unavailable packages

mixed stable and testing distribution

		# add both stable and testing lines to /etc/apt/sources.list
		vi /etc/apt/apt.conf
			APT::Default-Release "stable";
		apt update
		apt -t testing install # package

downgrade to stable distribution

		vi /etc/apt/preferences
			Package: *
		Pin: release a=stable
		Pin-Priority: 1001

apt proxy

		apt install apt-proxy
		vi /etc/apt-proxy/apt-proxy-v2.conf
			# set up backend sections
		/etc/init.d/apt-proxy restart
		# on client machines
			vi /etc/apt/sources.list
				# use server:9999/section as the source
		apt update
		apt-proxy-update /var/cache/apt/archives

mount remote apt directory via ssh

		apt install sshfs
		sshfs host:/var/cache/apt/archives /var/cache/apt/archives
		fusermount -u /var/cache/apt/archives

mount remote directory via ssh through fstab

		ln -s /sbin/mount.fuse /sbin/mount.fuse.sshfs
		vi /etc/fstab
			server:/home/user /media/share fuser.sshfs user,noauto 0 0
		mount /media/share
		umount /media/share

create a local deb repository

		apt install dpkg-dev
		mkdir /var/cache/apt/altdeb
		cp package-file.deb /var/cache/apt/altdeb
		dpkg-scanpackages /var/cache/apt/altdeb	/dev/null | gzip > /var/cache/apt/altdeb/Packages.gz
		vi /etc/apt/sources.list
			deb file:// /var/cache/apt/altdeb/
		apt update

list installed packages

		dpkg --get-selections

upgrading to squeeze

		# install later kernel because of new udev
		# disk names hda->sda

add GPG key (eg Opera)

		gpg --keyserver --recv F9A2F76A9D1A0061
		gpg --export --armor F9A2F76A9D1A0061 | apt-key add -

viewing library debug information

		apt install libname-dbg
		cd /usr/src/
		apt source libname
		objdump --prefix=/usr/src/ --prefix-strip=2 -S /lib/libname

fixing fstab after / mounted ro

		reboot to recovery
		mount -o remount /dev/sda1 /
		vi /etc/fstab

forcing broken dependencies

		dpkg -i --ignore-depends package.deb
		vi /var/lib/dpkg/status
			# remove broken dependencies

installation, kernel, devices

install Debian distro

		# Portege 3480ct] set up BIOS (F1)
		# Portege 3500] set up BIOS (Esc)
		boot from Sarge CD
		Debian mirror at
		partition using Debian
		no desktop packages

build debian kernel

		apt install kernel-package ncurses-dev build-essential
		apt install linux-source-2.6.26
		tar xfj linux-source-2.6.26.tar.bz2
		ln -s /usr/src/kernel-source-2.6.26 /usr/src/linux
		bzcat ../patch-2.6.26-8-rt16.bz2 | patch -p1 # real time patches
		make clean && make mrproper
		make menuconfig # or oldconfig
		make-kpkg clean
		fakeroot make-kpkg buildpackage linux-image --initrd --append-to-version "-gmX"
		dpkg -i linux-image-2.6.26.deb
		apt install firmware-linux

backported debian kernel

		apt install -t lenny-backports linux-image-2.6.30-bpo.1-686 firmware-linux acpid

boot DSL from grub

		# loop mount the iso
		# copy the isolinux directory to /boot
		# copy the KNOPPIX directory to /
		# set up grub to point to linux24 and minirt24.gz

boot windows from second disk

		title Windows
		rootnoverify (hd1,0)
		map (hd0) (hd1)
		map (hd1) (hd0)
		chainloader +1

working with DOS formats

		apt install dosfstools
		mkfs.fat -F 12 /dev/sdX1 # FAT 12
		mkfs.fat -F 16 /dev/sdX1 # FAT 16
		mkfs.fat -F 32 /dev/sdX1 # FAT 32

mounting floppy

		killall -9 udisks-daemon # squeeze daemon bug
		mount /media/floppy

adding and copying to new disk

		fdisk /dev/sdX
             c # turn off dos compatibility
			 n p # make primary partition
			 n e # make extended partition for swap
			 n l # make logical partition for swap
			 a 1
		mkfs -t ext4 /dev/sdX1
		tune2fs -O ^has_journal /dev/sdX1 #  optionally disable journal 
		mkswap /dev/sdX5
		telinit 1 # or reboot in maintenance mode
		# mount sdX1
		cp -ax / /new-disk
		grub-install --root-directory=/new-disk /dev/sdX
		# update UUIDs in /new-disk/etc/fstab
			blkid /dev/sdX1 /dev/sdX5
		# switch disks
		# boot from command line
			linux (hd0,1)/vmlinuz root=/dev/sda1
			initrd (hd0,1)/initrd.img
		grub-mkconfig -o /boot/grub/grub.cfg
		# update UUIDs in /etc/initramfs-tools/conf.d/resume
		update-initramfs -u

change swap volume

		blkid /dev/sda5 >>/etc/initramfs-tools/conf.d/resume
		vi /etc/initramfs-tools/conf.d/resume
		update-initramfs -u

memtest boot disk

		apt install memtest86+
		ln -s /usr/lib/grub /lib/grub
		ln -s /usr/sbin/grub /sbin/grub

remove extra terminals

		vi /etc/inittab
			ctrl-alt-F1 ctrl-alt-F7

change magic key to shutdown instead of reboot

		vi /etc/inittab
		change ctrlaltdel shutdown line to -h instead of -r
		# remove unnecessary terminals

allow user to shut down

		addgroup shutdown
		adduser user shutdown
		chown root:shutdown /sbin/shutdown
		chmod 750 /sbin/shutdown
		chmod u+s /sbin/shutdown

allow user to shut down

		# user] ALL=NOPASSWD: /sbin/shutdown

system clock using ntp

		apt install ntp # real-time updates
		vi /etc/ntp.conf
		apt install ntpdate # scheduled updates
		sudo crontab -e
			2 0 * * * /usr/sbin/ntpdate -s

system testing

		apt install sysutils # bogomips, memtest, etc

setting up devices

		# add drivers
			cp *.ko /lib/modules/`uname -r`/kernel/drivers/mfr/
		# set up nodes
			udevinfo -a -p /sysfs_path
			vi /etc/udev/rules.d/z60_mfr.rules
				KERNEL=="driver", NAME="devicename"
			udevtest /sysfs path

parallel port

		modprobe ppdev
		mknod /dev/parport0 c 99 0 -m 666

fixing irq problems (eg scsi)

		# add irqpoll to defoptions

prevent process hangup

		nohup command # run command without hangup
		disown -h pid # prevent hangup of pid

process monitoring

		/usr/bin/time -v application # report process statistics
		strace -c application 2>strace.out # summarize system calls

run a command from a different user context

		su -c "DISPLAY=:0.0 command" user

monitor logins

		less /var/log/auth.log

authentication of applications

		vi /etc/pam.conf
		vi /etc/pam.d/command

list process hierarchy

		pstree -p

power down usb port

		echo suspend >/sys/bus/usb/devices/1-2/power/level
		echo auto >/sys/bus/usb/devices/1-2/power/level

reset root password

		# on start, add init=/bin/bash
		mount -n -o rw,remount / # remount root
		# change root password
		mount -n -o ro,remount /

boot chart

		apt install bootchart
		# grub
		geeqie bootchart.png

preserve MBR

		dd if=/dev/hda of=/mnt/sda1/mbr.img bs=512 count=1
		dd if=/mnt/sda1/mbr.img of=/dev/hda bs=512 count=1

cleaning up a system

		change root password
		remove users
		adduser smith
		purge /home/*
		rm /var/log/*.gz
		check /etc/network/interfaces
		check /etc/wpa_supplicant/wpa_supplicant.conf
		check /etc/shadow
		check root in /etc/aliases
		clean /etc/hosts
		change /etc/hostname
		root clear .bash_history, .ssh, .gnupg
		dd if=/dev/zero of=dummy.txt bs=4096

reducing disk access for SSD

		# turn off journal
		# set relatime,discard,commit=600 in /etc/fstab
		# remove swap from /etc/fstab
		# move /tmp and /var/tmp to memory in /etc/fstab
			tmpfs /tmp tmpfs defaults 0 0
			tmpfs /var/tmp tmpfs defaults 0 0

FAT 16 file system

		mkfs.fat -F 16 /dev/sdb1

live usb-hdd

		dd if=debian-live-X.X.X-i386-lxde-desktop.iso of=/dev/sdb
		gparted /dev/sdb
			# make ext4 partition with label persistence
		mount /dev/sdb2
		vi persistence.conf
			/ union
		# boot to usb-hdd, use persistence option

live usb

		# get hybrid ISO
			# create FAT partition for ISO
			# create ext3 partition for live-rw
		# mount FAT partition
		vi /media/sdb1/syslinux.cfg
			# add persistent flag to boot variables

faster boot

		apt install readahead; touch /.readahead-collect

rename user

		usermod -l newuser olduser
		groupmod -n newgroup oldgroup
		usermod -d /home/newuser -m newuser

network led

		apt install iptables-persistent
		iptables -A INPUT -j LED --led-trigger-id all --led-delay 50
		iptables-save >/etc/iptables/rules
		echo netfilter-all >/sys/class/leds/beaglebone\:green\:usr0/trigger


cups installation

		apt install cupsys cupsys-client gs-esp cups-pdf cupsys-bsd hp-ppd
		# set hp1200 to socket://ip-address:9100
		# set pdf to color_ps, or use /usr/share/gs-esp/8.15/lib/ghostpdf.ppd

multiple page printing

		apt install mpage

printer sharing

		# set to shared from server settings
		cupsctl --share-printers
		# remote administration
		cupsctl --remote-admin

remove xprint

		apt --purge autoremove xprint-common

print to shared printer from windows

		# add network printer from another machine
		# url] http://ip-address:631/printers/queuename

set printer to reverse page order

		lpadmin -p CANON -o outputorder-default=reverse

fix Adobe plugin bug generating debuglog

		vi -b /opt/Adobe/Reader9/Browser/intellinux/

files, storage and mounting

list available disks and partitions

		fdisk -l

mounting USB drive

		mkdir /media/usb1
		vi /etc/fstab
			/dev/sda1 /media/usb1 auto rw,user,umask=000,noauto 0 0
		mount /media/usb1
		umount /media/usb1

mount ISO file

		mkdir /mnt/iso
		mount -o loop -t iso9660 file.iso /mnt/iso
		umount /mnt/iso
		# or
		apt install fuseiso9660
		add-group username fuse
		fuseiso9660 src.iso mountpoint
		fusermount -u mountpoint

ripping ISO file

		dd if=/dev/cdrom of=file.iso

erase disk

		dd if=/dev/zero of=/dev/sdx

check dd progress

		kill -USR1 $!


		mount /media/usb0
		rsync /home/* /media/usb0/host -a --del -e ssh -v

drive testing

		dumpe2fs -b /dev/sda1 # list current bad blocks
		e2fsck -c /dev/sda1 # read test
		e2fsck -cc /dev/sda1 # read/write test
		apt install smartmontools
			smartctl -i /dev/sda # information
			smartctl -d ata -a /dev/sda # extended information
			smartctl -d ata -t short /dev/sda # short test
			smartctl -d ata -t long /dev/sda # long test
			smartctl -l selftest

force fsck on next boot

		tune2fs -c 1 /dev/sda1

allow laptop mode to turn off drive

		vi /etc/laptop-mode/laptop-mode.conf
			/etc/init.d/laptop-mode restart

allow hdparm to turn off drive

		vi /etc/hdparm.conf
			/dev/sda {
				spindown_time = 240
		/etc/init.d/hdparm restart

check disk transfer rates

		hdparm -t -T /dev/sda

force fast ide (short 40 pin cable)

		vi /etc/modprobe.d/options
			options ide_core ignore_cable=0 # kernel 2.6.26
			options libata force=1.00:short40c # kernel 2.6.32
		update-initramfs -u

convert Nero nrg files to iso

		apt install nrg2iso
		nrg2iso src.nrg dst.iso

orphaned mounts

		vi /etc/mtab # and remove, not sure if this is kosher

packaging utilities

		apt install zip unzip
		apt install unrar

encrypting directory system

		apt install encfs
		addgroup username fuse
		encfs directory mountpoint
			# copy files into mount
		fusermount -u mountpoint

recursively set permissions

		chmod -R u=rwX,go=rX .
		# or
		find . -type d -exec chmod 755 {} \;
		find . -type f -exec chmod 644 {} \;

secure deletion and disk wiping

		apt install secure-delete
		sfill -lz /

encryption applications

		apt install mypasswordsafe

file management

		apt install xfe xtrlock filelight

mount root readonly

		telinit 1
		service rsyslog stop
		service network-manager stop
		killall dhclient
		mount -o remount,ro /

backup disk

		# mount root readonly
		dd if=/dev/sda of=host.img.gz
		fdisk -l -u host.img
		# something like mount -o loop,ro host.img XXX

managing MSDOS files

		apt install mtools

redirect both standard and error output

		command &>command.out

truncate a file

		dd if=/dev/null bs=1k seek=new size in KBi of=filename

disk quotas

		apt install quota

file creation times

		debugfs -R "stat " /dev/sda5

storing archives as readable filesystems

		apt install squashfs-tools
		mksquashfs /home/user dir.sqsh
		mount dir.sqsh /media/share -t squashfs -o loop
		fusermount -u /media/share

software raid

		apt install mdadm
		mdadm --create /dev/md0 -v --level=0 --raid-devices=2 /dev/sda2 /dev/sdb2
		mkfs -t ext3 /dev/md0

upgrading from ext3 to ext4

		vi /etc/fstab # change to ext4
		# reboot into single user read only
		tune2fs -O extents,uninit_bg,dir_index /dev/sda1
		# reboot into single user read only
		e2fsck -fDC0 /dev/sda1
		# reboot

change reserved space

		tune2fs -m5 /dev/sdb1

monitor block reads/writes

		while true; do cat /sys/block/sda/stat; sleep 10; done

Adobe digital editions

		# mount ereader and note mount point
		# umount ereader
			# add ereader mount point as floppy drive Y
		wine digitaleditions.exe
			# register
			# drag and drop files

new uuid

		tune2fs /dev/sdb1 -U random

hard link duplicate files

		hardlink -s 64M -X -v .

image failed hard drive

		apt install gddrescue
		smartctl -l scterc,10,10 /dev/sdx # limit recovery time
		ddrescue -d -r3 /dev/sdx sdx.img

changing partitions on loopback disk images

		kpartx -av disk.img
		ls -l /dev/mapper/loop0p* # dm to partition mapping
		ln -s /dev/dm-X /dev/loop0pY # mirror previous links
		gparted /dev/loop0
		kpartx -uv /dev/loop0 # update
		kpartx -d disk.img # disconnect
		rm -f /dev/loop0pX

splitting files

		split -b 2G -d filename filename.
		cat filename.* >filename

overlay filesystem

		mount -t overlay overlay -o lowerdir=lower/,upperdir=upper/,workdir=.working/ merged/

MTP access

		apt install jmtpfs
		# unlock phone
		jmtpfs mountpoint
		fuse -u mountpoint


install perl

		apt install perl perl-doc


		apt install j2re1.4 # deb stable non-free
		add path in opera # /usr/lib/j2se/1.4/jre/lib/i386
		run java once as superuser


		apt install sun-java6-bin sun-java6-fonts sun-java6-plugin
		update-alternatives --config java


		apt install avrdude


		apt install wabt
		vi /etc/nginx/mime.types
			application/wasm wasm;
		vi test.wasm
					func $test (export "test") (param f64) (result f64)
					(f64.mul (local.get 0) (f64.const 42))
		wat2wasm test.wat
		vi test.html
					.then(results => alert(results.instance.exports.test(10)));

install current libboost

		# download to /usr/src
		tar --bzip2 -xf boost*.tar.bz2
		./configure --with-libraries=date_time,thread
		make install
		mv /usr/local/include/boost_1-36/boost /usr/local/include
		rmdir /usr/local/include/boost_1-36

file differencing

		apt install meld

invoking a command in multiple directories

		find . -type d -exec bash -c 'cd "{}"; command' \;

hex dump

		od -A n -t x1 file.bin
		hexdump file.bin -e '"" 128/1 "%02X" "\n"'


		LC_ALL=en_CA.UTF-8 wine /media/cdrom/SETUP.EXE
		apt install winetricks
		winetricks corefonts vcrun6sp6
		cp SYMBOL.TTF .wine/drive_c/windows/Fonts/


		# basic
		git init # create git repository 
		git add filename # track files 
		git commit -a -m 'message' # stage and commit 
		git remote add repository https://host/username/repository.git
		git push # push to remote
		# detailed
		git status # summary status
		git add -u # stage commit 
		git diff # unstaged changes 
		git commit -m 'message' # commit 
		git checkout -- . # discard changes
		git reset --hard branch # unwind back 
		git branch # show branches 
		git log # show commit log 
		git reflog # show head reference log
		git branch -D branch # delete branch 
		git push -u repository master # explict push to remote


		apt install cmake
		vi CMakeLists.txt
			cmake_minimum_required(VERSION version)
			set(CMAKE_CXX_FLAGS "flags")
			file(GLOB SOURCES "sources")
			add_executable(executable ${SOURCES})
		cmake -B build # create build files
		cmake --build build # run build


		sqlite3 database.sqlite
			.schema table
			select * from table where field = 'value';
			select count (*) from table;

bash shortcuts

		sudo !! # sudo last command
		cmd !* # new command with previous arguments
		reset # reset terminal
		<esc> . # last argument
		^oldtext^newtext # rerun with replace
		<ctrl>-u <ctrl>-y # undo/restore command buffer
		<ctrl>-x <ctrl>-e # edit command
		<ctrl>-l # clear screen
		<ctrl>-r # search commands
		mv filename.{old,new} # change filename extension
		<alt>-<SysRq> r e i s u b #  reboot: raw, sigterm, sigkill, sync, ro mount, boot

serve current directory on http

		python3 -m http.server # serve folder on port 8000

monitor network activity

		lsof -i

sand boxes


		apt install screen
		d # disconnect session
		c # new session
		p # previous session
		n # next session
		[ # scroll mode
		screen -ls # list screen sessions
		screen -r  # resume

windows in vmware

		# download vmware tar from
		# does not work with 64 bit kernel
		apt install linux-headers-2.6-k7
		export CC=/usr/bin/gcc-4.1
			use headers from built kernel
		# create image files
		# boot from floppy, fdisk/format, install from CD
		# download VMWare Tools windows.iso from Workstation/Server
		# mount as second cdrom, install video and mouse drivers
		apt install dbus # fixes /usr/lib/ hang in libdbus, libdbus-glib
		# parallel port access
			adduser smith lp
			rmmod lp

windows in virtualbox

		apt install virtualbox-ose virtualbox-ose-modules-2.6-686 -t lenny-backports
		# if in repository
			apt install virtualbox-ose-modules-2.6-686 -t lenny-backports
		# otherwise
			apt install virtualbox-ose-source -t lenny-backports
			m-a unpack virtualbox-ose
			m-a auto-install virtualbox-ose
		# create virtual disks
		# install from iso mounted as CD
		# download VBoxGuestAdditions_1.6.6.iso
		# install guest additions from within guest operating system
		# make sure vboxdrv loads on startup
			vi /etc/modules
		# otherwise
			vi /etc/default/virtualbox-ose
			/etc/init.d/virtualbox-ose start
		# start the machine
			# select host interface to bridge the networks
			insmod vboxnetflt # solves bad module
			VBoxManage startvm virtualmachine

windows virtualbox images
		vboxmanage clonehd disk.vmdk disk.vdi --format VDI
		adduser user vboxusers
		vboxmanage extpack install extpack.vbox-extpack

shrink virtualbox disk file

		# from client
			# defragment
			sdelete -z
		# from host
			vboxmanage modifyhd disk.vdi compact

clone virtualbox disk file

		VBoxManage clonevdi src.vdi dst.vdi


		ln -s /media/share .wine/dosdevices/d:
		apt install fuseiso
		sudo adduser user fuse
		sh -c 'fuseiso /home/user/rom.iso /media/share;\
			wine "c:/Program Files/example.exe";\
			fusermount -u /media/share'


		mkdir chroot
		debootstrap stable chroot debian_repository
		chroot chroot /bin/bash


		g++ -v -dD -E empty_file.cpp # list predefines
		g++ --print-search-dirs # list search path