diff --git a/BCC-Examples.md b/BCC-Examples.md new file mode 100644 index 0000000..82f7cef --- /dev/null +++ b/BCC-Examples.md @@ -0,0 +1,103 @@ +Random examples of using BCC tools + +``` +$ sudo python2 /usr/share/bcc/tools/biosnoop +TIME(s) COMM PID DISK T SECTOR BYTES LAT(ms) +0.000019000 ? 0 R -1 8 1.76 +0.993713000 Chrome_FileThr 3774 sda W 513149392 4096 10.12 +0.994569000 jbd2/dm-0-8 523 sda W 533988192 57344 0.59 +1.051730000 kworker/u32:1 17321 sda W 542135576 4096 13.12 +1.051821000 kworker/u32:1 17321 sda W 546060336 4096 13.21 +1.051845000 kworker/u32:1 17321 sda W 546060376 8192 13.23 +1.051867000 kworker/u32:1 17321 sda W 546060392 4096 13.25 + +$ sudo python2 /usr/share/bcc/tools/biolatency +Tracing block device I/O... Hit Ctrl-C to end. + usecs : count distribution + 0 -> 1 : 0 | | + 2 -> 3 : 0 | | + 4 -> 7 : 0 | | + 8 -> 15 : 0 | | + 16 -> 31 : 0 | | + 32 -> 63 : 0 | | + 64 -> 127 : 0 | | + 128 -> 255 : 0 | | + 256 -> 511 : 10 |****************************************| + 512 -> 1023 : 8 |******************************** | + 1024 -> 2047 : 2 |******** | + 2048 -> 4095 : 10 |****************************************| + 4096 -> 8191 : 0 | | + 8192 -> 16383 : 1 |**** | + +$ sudo python2 /usr/share/bcc/tools/tcpv4connect +PID COMM SADDR DADDR DPORT +2237 Socket Threa 192.168.1.72 216.58.218.167 443 +17224 curl 192.168.1.72 173.194.115.71 80 +17230 wget 192.168.1.72 192.30.252.131 80 +17230 wget 192.168.1.72 192.30.252.131 443 +3778 Chrome_IOThr 192.168.1.72 216.58.218.174 443 +3778 Chrome_IOThr 192.168.1.72 173.194.17.120 443 +3778 Chrome_IOThr 192.168.1.72 173.194.17.120 443 +3778 Chrome_IOThr 192.168.1.72 173.194.17.120 443 +3778 Chrome_IOThr 192.168.1.72 173.194.17.120 443 +3778 Chrome_IOThr 192.168.1.72 173.194.17.120 443 +3778 Chrome_IOThr 192.168.1.72 173.194.17.120 443 +3778 Chrome_IOThr 192.168.1.72 173.194.17.120 443 +3778 Chrome_IOThr 192.168.1.72 173.194.17.120 443 +3778 Chrome_IOThr 192.168.1.72 173.194.17.120 443 +3778 Chrome_IOThr 192.168.1.72 173.194.17.120 443 +3778 Chrome_IOThr 192.168.1.72 173.194.17.120 443 + + +$ sudo python2 /usr/share/bcc/tools/opensnoop +PID COMM FD ERR PATH +17538 <...> 6 0 /sys/kernel/debug/tracing/trace_pipe +3811 BrowserBlocking -1 2 /home/tengel/.config/chromium/Default/Storage/ext/fahmaaghhglfm +3811 BrowserBlocking 221 0 /home/tengel/.config/chromium/Default/Storage/ext/fahmaaghhglfm +3814 BrowserBlocking -1 2 /home/tengel/.config/chromium/Default/Storage/ext/fahmaaghhglfm +3814 BrowserBlocking 221 0 /home/tengel/.config/chromium/Default/Storage/ext/fahmaaghhglfm +1801 gkrellm 12 0 /proc/meminfo +3814 BrowserBlocking 221 0 /home/tengel/.config/chromium/.org.chromium.Chromium.WyKZxd +3814 BrowserBlocking 221 0 /home/tengel/.config/chromium/.org.chromium.Chromium.WyKZxd +3778 Chrome_IOThread 221 0 /dev/shm/.org.chromium.Chromium.2S3mnm +1801 gkrellm 12 0 /proc/meminfo + +$ sudo python2 /usr/share/bcc/tools/funccount 'vfs_*' +Tracing 44 functions for "vfs_*"... Hit Ctrl-C to end. +ADDR FUNC COUNT +ffffffff81229dd1 vfs_lock_file 8 +ffffffff811e69f1 vfs_create 9 +ffffffff811e3ca1 vfs_unlink 9 +ffffffff8120b541 vfs_fsync_range 17 +ffffffff811de421 vfs_fstat 85 +ffffffff811d9db1 vfs_writev 91 +ffffffff811d8731 vfs_open 100 +ffffffff811de481 vfs_fstatat 493 +ffffffff811de3f1 vfs_getattr 572 +ffffffff811de1d1 vfs_getattr_nosec 572 +ffffffff811d9991 vfs_write 3373 +ffffffff811d9871 vfs_read 4410 +Detaching... + +$ sudo python2 /usr/share/bcc/tools/funclatency do_sys_open +Tracing 1 functions for "do_sys_open"... Hit Ctrl-C to end. + nsecs : count distribution + 0 -> 1 : 0 | | + 2 -> 3 : 0 | | + 4 -> 7 : 0 | | + 8 -> 15 : 0 | | + 16 -> 31 : 0 | | + 32 -> 63 : 0 | | + 64 -> 127 : 0 | | + 128 -> 255 : 0 | | + 256 -> 511 : 0 | | + 512 -> 1023 : 0 | | + 1024 -> 2047 : 0 | | + 2048 -> 4095 : 0 | | + 4096 -> 8191 : 0 | | + 8192 -> 16383 : 3 |******************** | + 16384 -> 32767 : 3 |******************** | + 32768 -> 65535 : 6 |****************************************| +Detaching... +``` + diff --git a/Bash-Add-fd.md b/Bash-Add-fd.md new file mode 100644 index 0000000..aaa90ee --- /dev/null +++ b/Bash-Add-fd.md @@ -0,0 +1,10 @@ +If you've run out of file descriptors but can manage to get to a shell without needing to open more, bash can handle the rest using built in features. + +``` +#!/usr/bin/env bash + +builtin read -r NFM < /proc/sys/fs/file-max +NFM=$(($NFM+100)) +builtin echo $NFM > /proc/sys/fs/file-max +``` + diff --git a/CPU-Stats.md b/CPU-Stats.md new file mode 100644 index 0000000..9481551 --- /dev/null +++ b/CPU-Stats.md @@ -0,0 +1,63 @@ +Sample the CPU for stats while testing + +``` +#!usr/bin/env bash + +DTS=$(date +"%Y%m%d") + +if [[ -z "$1" ]]; then + echo "Usage: $0 xxx" + echo " where xxx is the number of seconds to collect data" + exit 1 +fi + +# check deps +command -v awk >/dev/null 2>&1 || { +echo " awk not installed. Aborting!" >&2; exit 1; } + +command -v bc >/dev/null 2>&1 || { +echo " bc not installed. Aborting!" >&2; exit 1; } + +# make sure $1 is an interger +[[ "$1" =~ ^-?[0-9]+$ ]] || { +echo " Supply an interger and try again." >&2; exit 1; } + +[[ -d $XDG_RUNTIME_DIR ]] && +file=$XDG_RUNTIME_DIR/"stats-$DTS" || file=/tmp/"stats-$DTS" + +[[ -f /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq ]] || { +echo " Cannot tell what the CPU current CPU frequency is. Aborting!" >&2; exit 1; } + +function full_exit { + [[ ! -r "$file" ]] && exit 1 + # credit for awk magic goes to + # http://stackoverflow.com/questions/6166375/median-of-column-with-awk + median=$(sort -n $file | awk ' { a[i++]=$1; } END { x=int((i+1)/2); if (x < (i+1)/2) print (a[x-1]+a[x])/2; else print a[x-1]; }') + mean=$(awk '{ sum += $1; n++ } END { if (n > 0) print sum / n; }' $file) + min=$(sort -n $file | head -n1) + max=$(sort -n $file | tail -n1) + + echo + echo "All values in MHz except count which is just the number of measurements..." + echo "median : $median" + echo "mean : $mean" + echo "max : $max" + echo "min : $min" + echo "count : $(wc -l $file|awk '{print $1}')" + + [[ -f $file ]] && rm -f $file + exit 0 +} +trap full_exit SIGHUP SIGINT SIGTERM + +echo "Collecting data for $1 seconds..." +TIME=( $(seq 1 1 "$1") ) + +for i in "${TIME[@]}"; do + sleep 1 + bc <<< "scale=1; $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq)/1000" >> "$file" +done + +full_exit +``` + diff --git a/MP3-Get-Tags.md b/MP3-Get-Tags.md new file mode 100644 index 0000000..99cecc5 --- /dev/null +++ b/MP3-Get-Tags.md @@ -0,0 +1,23 @@ +Pull out mp3 tags to create a libre.fm import file + +``` +#!/usr/bin/env bash + +DTB=1251499494 # epoch start time +DTS=$(date +%s) # epoch current time +DAT="${HOME}/Music" +while IFS="" read -r -d $'\000' mp3 <&3; do + DTN=$(shuf -i $DTB-$DTS -n 1) # random epoch between + ART=$(mid3v2 -l "$mp3" | grep "^TPE1" | cut -d'=' -f2) + SNG=$(mid3v2 -l "$mp3" | grep "^TIT2" | cut -d'=' -f2) + ALB=$(mid3v2 -l "$mp3" | grep "^TALB" | cut -d'=' -f2) + echo -e "$DTN\t$SNG\t$ART\t$ALB\t\t\t" +done 3< <(find "$DAT" -mindepth 1 -name \*.mp3 -print0) + +# Use libreimport.py / scrobble.py from here: +# http://bugs.foocorp.net/projects/librefm/wiki/LastToLibre +# +# Connect libre.fm to your last.fm account first, then the scrobbles +# import to both services at once for your entire local music library. +``` + diff --git a/Recursive-Unzip.md b/Recursive-Unzip.md new file mode 100644 index 0000000..f1f3bff --- /dev/null +++ b/Recursive-Unzip.md @@ -0,0 +1,16 @@ +Quick and dirty, probably isn't super safe + +``` +#!/usr/bin/env bash +shopt -s globstar nullglob +while set -- **/*.zip; [ $# -ge 1 ] do + for z; do + ( cd -- "$(dirname "$z")" && + z=${z##*/} && + unzip -- "$z" && + rm -- "$z" + ) + done +done +``` + diff --git a/SSL-Certgen.md b/SSL-Certgen.md new file mode 100644 index 0000000..6dadd35 --- /dev/null +++ b/SSL-Certgen.md @@ -0,0 +1,8 @@ +Generate a SSL self-signed key/cert + +``` +openssl req -new -newkey rsa:4096 -days 3650 -nodes -x509 -utf8 -sha256 \ + -subj "/C=US/ST=New York/L=New York/O=MyOrg/CN=myorg.com" \ + -keyout certificate.key -out certificate.crt +``` + diff --git a/Split-Disk.md b/Split-Disk.md new file mode 100644 index 0000000..ec2e41d --- /dev/null +++ b/Split-Disk.md @@ -0,0 +1,22 @@ +Cut a disk in half based on sectors, skipping the first 2048 + +``` +#!/usr/bin/env bash + +DISK="/dev/xvdb"; OFFSET=2048 \ + parted ${DISK} unit s print 2>/dev/null | \ + grep "^Disk ${DISK}" | \ + awk -v OFF=${OFFSET} '{gsub(/s$/,"",$3); \ + printf "STA1=%s\nEND1=%s\nLEN1=%s\nSTA2=%s\nEND2=%s\nLEN2=%s\n", + OFF,(($3/2)-OFF),((($3/2)-OFF)-OFF), + ((($3/2)-OFF)+1),$3,($3-((($3/2)-OFF)+1)) + }' + +# example output +STA1=2048 +END1=78641152 +LEN1=78639104 +STA2=78641153 +END2=157286400 +LEN2=78645247 +``` diff --git a/YUM-Disablerepos.md b/YUM-Disablerepos.md new file mode 100644 index 0000000..db4f829 --- /dev/null +++ b/YUM-Disablerepos.md @@ -0,0 +1,16 @@ +Disable all yum repos + +``` +python -c """from ConfigParser import ConfigParser +from glob import glob +repo_files = glob('/etc/yum.repos.d/*.repo') +for file in repo_files: + config = ConfigParser() + config.read(file) + sections = config.sections() + for section in sections: + config.set(section, 'enabled', 0) + f = open(file, 'wb') + config.write(f) + f.close()""" +``` diff --git a/_Sidebar.md b/_Sidebar.md index d62587b..52bd187 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -4,8 +4,11 @@ - [[Apache wpadmin]] - [[Arch Default Kernel]] - [[Arch Kernel Order]] +- [[BCC Examples]] +- [[Bash Add fd]] - [[Bash Dump History]] - [[Bash Trim Whitespace]] +- [[CPU Stats]] - [[CSS Reset]] - [[DB2 Info]] - [[Debian Upgrade]] @@ -29,6 +32,7 @@ - [[LUKS Encrypted Partitions]] - [[Linux Valid Usernames]] - [[Loopback FS]] +- [[MP3 Get Tags]] - [[MX Blackhole]] - [[Markdown Samples]] - [[Mount OVA]] @@ -40,14 +44,18 @@ - [[RPM Info]] - [[Radeon Temperature]] - [[Recover Deleted ext3]] +- [[Recursive Unzip]] - [[Roku Info]] +- [[SSL Certgen]] - [[Samba OSX]] - [[Server Notes]] - [[Smem Datamash]] +- [[Split Disk]] - [[systemd PID1]] - [[Thunderbird LDAP AD]] - [[uBlock Filters]] - [[udev Hide Partitions]] - [[Weechat Quickstart]] - [[YTM to Textbox]] +- [[YUM Disablerepos]]