These snippets are mostly for Mac OS X 10.8 and 10.9.
_logger () {
echo "$(basename $0): ${1}"
# -i Log the process id of the logger process with each line.
# -t [tag] Mark every line in the log with the specified tag.
logger -i -t "$(basename $0) " "${1}"
}
# Turn off file globbing so we can pass asterisks as parameters
set -f
# Sets BASH to exit immediately if any command has a non-zero exit status.
set -e
# Sets BASH to exit if a veriable hasn't been previously defined.
set -u
# can also be "set -eu"
# This sets the script to carry non-zero exit codes through a pipe.
set -o pipefail
# Saves the Internal Field Separator.
SAVEIFS=$IFS
# Set the Internal Field Separator to only Tabs and Newlines.
IFS=$'\n\t'
# $colorful is an option to print out colorful output if run through the shell. It helps
#+ pick out lines where something failed.
if [[ $colorful = 1 ]];then
success="$(echo $'\e[1;4;32;40m SUCCESS \e[0m')"
failure="$(echo $'\e[1;4;31;40m FAILURE \e[0m')"
fi
openssl md5 /path/to/file
# MD5(/path/to/file)= kajsdhfjaghs8t233f92fhskdfhj
whosloggedin () {
ls -l /dev/console | awk '{ print $3 }'
# Convert the username to lowercase
ls -l /dev/console | awk '{ print $3 }' | tr "[:upper:]" "[:lower:]"
}
fieldset () {
test -z "${4}" && echo "Error: The 4th field/argument is not set." && exit 1
test -n "${4}" && echo "The 4th field/argument is set." && exit 0
}
listSetArgs () {
argarray=(${@})
argcount=$(echo ${#argarray[*]})
argmax=$((${argcount}-1))
i=0
while [[ $i -le ${argmax} ]];do
test -n $argarray[$i] && echo "$i is set, which is \"${argarray[$i]}\""
i=$(($i+1))
done
}
bootVolume="$(system_profiler SPSoftwareDataType | grep "Boot Volume" | awk -F ": " '{print $NF}')"
# This is for OS X 10.9
listNonSystemAccounts () {
nonSysAccounts="$(dscl . list /Users | grep -Ev "_amavisd|_appleevents|_appowner|_appserver|_ard|_assetcache|_atsserver|_avbdeviced|_calendar|_ces|_clamav|_coreaudiod|_cvmsroot|_cvs|_cyrus|_devdocs|_devicemgr|_dovecot|_dovenull|_dpaudio|_eppc|_ftp|_geod|_installassistant|_installer|_jabber|_kadmin_admin|_kadmin_changepw|_krb_anonymous|_krb_changepw|_krb_kadmin|_krb_kerberos|_krb_krbtgt|_krbtgt|_lda|_locationd|_lp|_mailman|_mcxalr|_mdnsresponder|_mysql|_netbios|_netstatistics|_networkd|_postfix|_postgres|_qtss|_sandbox|_screensaver|_scsd|_securityagent|_serialnumberd|_softwareupdate|_spotlight|_sshd|_svn|_taskgated|_teamsserver|_timezone|_tokend|_trustevaluationagent|_unknown|_update_sharing|_usbmuxd|_uucp|_warmd|_webauthserver|_windowserver|_www|daemon|nobody|root" | tr "\n" " ")"
echo "<result>${nonSysAccounts}</result>"
}
_resetActiveDirectory () {
rm /Library/Preferences/OpenDirectory/Configurations/Active\ Directory/*.plist
}
#
#
## Networking
#
#
# Get all network interfaces - will print out en0, en1, fw1, etc to build an array.
NICarray=($(ifconfig | grep -E "[a-z][a-z].*\: fl" | awk -F":" '{print $1}'))
# will return "inactive" or "active"
_getNICstatus () {
nicstatus=""
nicstatus="$(ifconfig "${1}" | grep status | awk -F": " '{print $2}')"
}
for NIC in "${NICarray[@]}";do
_getNICstatus "${NIC}"
echo "$NIC:${nicstatus}"
done
#
# Print ipv4 info
echo -e "open\nget State:/Network/Global/IPv4\nd.show\nquit" | scutil
#
# What device is AirPort assigned to? (Will print out "en0" or "en1" etc.
echo -e "open\nlist\nquit" | scutil | grep -E "Setup.*AirPort" | awk -F"/" '{print $4}'
#
# Get the network service name for a NIC id
networksetup -listallhardwareports| grep -B1 en0| grep -v en0| awk -F": " '{print $2}'
#
# Get's NIC link status. Will print "TRUE" or "FALSE"
echo -e "open\nget State:/Network/Interface/en2/Link\nd.show\nquit" | scutil | grep Active | awk -F" : " '{print $2}'
#
# Build array of network interface hardware IDs
NICHIDs=( $(echo -e "open\nlist\nquit" | scutil | grep -E "Setup.*Service/[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}$" | awk -F"/" '{print $NF}') )
#
# Print the service name of each of the NIC HIDs
for NICHID in ${NICHIDs[@]};do
echo -e "open\nget Setup:/Network/Service/${NICHID}\nd.show\nquit" | scutil | grep UserDefinedName | awk -F " : " '{print $2}'
done
#
_getIPaddress () {
host ${1} | grep -oE "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"
}
listAllUsers () {
dscl . list /Users UniqueID | awk '$2>=401{print}' | awk '{print $1}'
}
whatami () {
stat -f "%HT%SY" "${1}" | awk '{print $1}'
# Possible outputs are:
# Directory (directory, duh)
# Regular (regular file)
# Symbolic (symbolic link)
}
whatmodeami () {
# This version of stat only works with OS X I believe.
stat -f "%p" "${1}"|cut -c 4-6
}
backupfile () {
test -f "${1}" && mv "${1}" "${1}".bak
}
removefile () {
test -f "${1}" && rm "${1}"
}
sanitizeACLs () {
# Removes ACLs on all files recursively.
chmod -RN "${1}"
}
howLongHaveIbeenAsleep () {
echo $((`ioreg -c IOHIDSystem | sed -e '/HIDIdleTime/!{ d' -e 't' -e '}' -e 's/.* = //g' -e 'q'` / 1000000000))
# The same thing, but in Perl
ioreg -c IOHIDSystem | perl -ane 'if(/Idle/) {$idle=(pop @F)/1000000000; print $idle, "\n"; last;}'
}
# This brings the OS X user to the login screen.
uiQuickLogout () {
/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend
}
# Set global hot key to trigger a service (/Library/Services/)
setGlobalHotKey () {
defaults write /Library/Preferences/.GlobalPreferences NSUserKeyEquivalents -dict-add "${1}" "${2}"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# "${1}" "${2}" #
# setGlobalHotKey "Lock Screen" "@^l" #
# Service name |||---- "l" key #
# ||----- "^" Control key #
# |------ "@" Command key #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
}
getNetworkID () {
# Returns the MAC address of a NIC.
networksetup -getinfo "${1}" |\
grep -E "[a-g0-9][a-g0-9]:[a-g0-9][a-g0-9]:[a-g0-9][a-g0-9]:[a-g0-9][a-g0-9]:[a-g0-9][a-g0-9]:[a-g0-9][a-g0-9]" |\
awk '{print $NF}'
}
# getNetworkID "Wi-Fi"
timeMachineDiskCreate () {
hdiutil create -size 100g -fs HFS+ -type SPARSEBUNDLE -volname "tmbackups" tmbackup_$(system_profiler SPHardwareDataType | grep UUID | awk '{print $3}').sparsebundle
}
# Gets the hardware UUID
# e.g.: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
getHardwareUUID () {
system_profiler SPHardwareDataType | grep UUID | awk '{print $3}'
}
displayBoundDomain () {
dsconfigad -show | awk '/Active Directory Domain/{print $NF}'
}
# Timeout script to ping a HTTP server and check to see if a document exists.
apacheCheck () {
curl -m 60 --raw "http://server.com/8usjneflzkkd | grep -o "404 Not Found"
website="server.com"
URI="Pages/index.html"
curl -m 60 --raw http://"${website}"/"${URI}" | grep -o "404 Not Found"
}
# apacheCheck http://server.com
whereAmI () {
domainget="$(scutil -r server.com | awk -F, '{print $NF}')"
if [[ "${domainget}" = "Reachable" ]] || [[ "${domainget}" = "Transient Connection" ]];then
result="in"
fi
if [[ "${domainget}" = "Not Reachable" ]];then
result="out"
fi
if [[ "${domainget}" = "Connection Required" ]];then
result="offline"
fi
}
screenResolution () {
local screenWidth="$(system_profiler SPDisplaysDataType | grep -i resolution | awk -F': ' '{print $2}' | awk -F'x' '{print $1}' | sed 's/ //')"
local screenHeight="$(system_profiler SPDisplaysDataType | grep -i resolution | awk -F': ' '{print $2}' | awk -F'x ' '{print $2}')"
}
for device in dvd cd music picture video;do
echo "${device} status (0=disabled, 1=enabled): $(defaults read /Users/$(whoami)/Library/Preferences/com.apple.digihub com.apple.digihub.blank."${device[@]}".appeared)"
done
# List the path to each share per line.
getShares () {
sharing -l | grep "path:" | awk -F: '{print $NF}' | sed 's/^..//g'
}
#
# Software Update
#
## Get value of setting
serveradmin settings swupdate:productItems:091-7250:CFBundleName
## Get name of update
serveradmin settings swupdate:productItems:061-3770:CFBundleName | awk -F "=" '{ print $2}' | sed 's/ \"//g' | sed 's/\"//'
## Get all update product IDs
serveradmin settings swupdate | grep -E "swupdate:productItems:.*:enable" | sed 's/swupdate\:productItems\://g' | sed 's/\:enable = yes//g' | sed 's/\:enable = no//g'
## Get whether an update is enabled or not
_SUpdated () {
serveradmin settings swupdate:productItems:$1:enable | awk -F "=" '{ print $2 }'
}
_SUval () {
serveradmin settings swupdate:productItems:$1:$2
}
#
# Web
#
## Get document root for Apache
sudo serveradmin settings web:defaultSecureSite:documentRoot | awk -F"= " '{print $NF}' | sed 's/"//g'
##
#
# Processes
#
##
# Apache web service
ps ax | grep -q http[d]_server_app;echo $?
# Tomcat
ps ax | grep -q "[J]SS/Tomcat";echo $?
# MySQL
ps ax | grep -q "[m]ysqld";echo $?
# Misc
enableTRIMsupport () {
# This is for 3rd-party SSD drives in Macs
sudo cp /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage.original
sudo perl -pi -e 's|(\x52\x6F\x74\x61\x74\x69\x6F\x6E\x61\x6C\x00{1,20})[^\x00]{9}(\x00{1,20}\x54)|$1\x00\x00\x00\x00\x00\x00\x00\x00\x00$2|sg' /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage
sudo touch /System/Library/Extensions/
# Reboot is required
}
# Feedback
# $(tput bel)
# Bell when a command finishes (works when SSH'd into another machine)
echo && tput bel
# Disable the “reopen windows when logging back in” option
# This works, although the checkbox will still appear to be checked,
# and the command needs to be entered again for every restart.
defaults write com.apple.loginwindow TALLogoutSavesState -bool false
defaults write com.apple.loginwindow LoginwindowLaunchesRelaunchApps -bool false
# Avoid creating .DS_Store files on network volumes
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
# Prevent Time Machine from prompting to use new hard drives as backup volume
defaults write com.apple.TimeMachine DoNotOfferNewDisksForBackup -bool true
# OS X Cisco Snippets
#
#
# Cisco AnyConnect IPv4 address
/path/to/cisco/anyconnect/bin/vpn stats | grep "Client Address (IPv4)" | awk -F":" '{print $2}' | sed 's/.*.\ //'
# Is the cisco VPN agent running?
ps ax | grep [v]pnagent # "wc -l = 1"
# Returns the IP address of the Cisco Anyconnect VPN client.
getCiscoIP () {
/path/to/cisco/anyconnect/bin/vpn stats | grep "Address (IPv4" | awk '{print $NF}'
}
getCiscoState () {
# If it prints "connect." it's not connected.
# If it prints "Available." you're connected.
/path/to/cisco/anyconnect/bin/vpn state | grep notice | awk '{print $NF}'
}
# LINUX SNIPPETS
# Check if password is locked
sudo passwd -S admin
# Unlock password
sudo passwd -uf admin
# Check account status of number of failures
sudo /sbin/pam_tally2 --reset