76 useful bash scripts collection on Mac OSX.(实用的命令行脚本)
- adb-bulk-uninstall
#! /bin/bash
adb shell "pm list packages -3 | cut -c9- | xargs -r -n1 -t pm uninstall"
- altool-install
#! /bin/bash
sudo ln -s /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool /usr/local/bin/altool
- avoid-mac-sleeping
#! /bin/bash
caffeinate -u -t 3600
- background-jobs
#! /bin/bash
# Run command background
sleep 100 &
# List jobs background
jobs
# Bring command to front
fg %1
- backup-current-directory
#! /bin/bash
DATE=`date "+%Y_%m_%d_%H_%M_%S"`
tar -czvf ~/Desktop/${DATE}.tar ./*
echo ""
echo "*** Back up success, go to ~/Desktop/${DATE}.tar ***"
echo ""
- base64-encode-and-decode
#! /bin/bash
echo "hello" | tr -d \\n | base64
echo "aGVsbG8=" | tr -d \\n | base64 -D
- batch-create-files
#! /bin/bash
seq -w -f "content%g" 10000 10 11000 | xargs touch
- big-sur-startup-disk
#! /bin/bash
sudo /Applications/Install\ macOS\ Big\ Sur.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume
- clean-zsh-history
#! /bin/bash
echo "" > ~/.zsh_history & exec $SHELL -l
- cleanup-any-npm-file
#! /bin/bash
npm ls -gp --depth=0 | awk -F/ '/node_modules/ && !/\/npm$/ {print $NF}' | xargs npm -g rm
- convert-file-format
#! /bin/bash
textutil -convert html file.ext
- convert-ringtone-format
#! /bin/bash
afconvert input.mp3 rintone.m4r -f m4af
- cpu-vendor
#! /bin/bash
sysctl -n machdep.cpu.vendor
- create-audiobook
#! /bin/bash
say -v Alex -f file.txt -o "output.m4a"
- create-empty-file
#! /bin/bash
mkfile 10g ~/Desktop/file
- csrutil
#! /bin/bash
# in recovery mode
csrutil disable;
csrutil enable;
- current-wifi
#! /bin/bash
airport -I | awk '/ SSID/ {print substr($0, index($0, $2))}'
- cxxfilt
#! /bin/bash
# C++ name demangling
c++filt __Z4mainiPPc
- dev-tools-security
#! /bin/bash
# If you didn't enable Developer Mode using Xcode you will be asked to authorize the debugger every time you use it. To enable Developer Mode and only have to authorize once per session use:
sudo /usr/sbin/DevToolsSecurity -enable
# You might also need to add your user to the developer group:
sudo dscl . append /Groups/_developer GroupMembership $(whoami)
- display-shared-libraries
#! /usr/bin/bash
otool -L /System/Applications/Dictionary.app/Contents/MacOS/Dictionary
- domain-expiration
#! /bin/bash
# output: 2026-10-11T11:05:17Z
whois baidu.com | grep Expiry | sed -n "s/Registry Expiry Date://p" || echo "No matching result"
- enable-quicklook-selection
#! /bin/bash
defaults write com.apple.finder QLEnableTextSelection -bool TRUE;
killall Finder;
- extract-device-udid
#! /bin/bash
system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p'
- find-codesign
#! /bin/bash
security find-identity -v -p codesigning
- flush-dns-cache
#! /bin/bash
sudo dscacheutil -flushcache && killall -HUP mDNSResponder && say "DNS cache flushed."
#! /bin/bash
jot -r -c 60 a z | rs -g 0 6 | sort | uniq
- generate-random-name
#! /bin/bash
cat /usr/share/dict/propernames | sort -R | head -n 1
- generate-random-password
#! /bin/bash
date | md5 | head -c8; echo
- git-rebase-auto-squash
#! /bin/bash
git add featureA
git commit -m "Feature A is done"
# [dev fb2f677] Feature A is done
git add featureB
git commit -m "Feature B is done"
# [dev 733e2ff] Feature B is done
git add featureA
git commit --fixup fb2f677
# [dev c5069d5] fixup! Feature A is done
git log --oneline
# c5069d5 fixup! Feature A is done
# 733e2ff Feature B is done
# fb2f677 Feature A is done
# ac5db87 Previous commit
git rebase -i --autosquash ac5db87
# pick fb2f677 Feature A is done
# fixup c5069d5 fixup! Feature A is done
# fixup c9e138f fixup! Feature A is done
# pick 733e2ff Feature B is done
- git-reset-hard-recovery
#! /bin/bash
# reference: https://stackoverflow.com/questions/5788037/recover-from-git-reset-hard
git fsck --lost-found
#! /bin/bash
AUTHOR=$(git config --get user.name)
git log --author="${AUTHOR}" --format="%cd : %s" --since=last.Monday --reverse --no-merges --date=format:'%F %T'
- go-source-code-line-count
#! /bin/bash
find . -name '*.go' | xargs wc -l | sort -nr
#! /bin/bash
git log --graph --decorate --pretty=oneline --abbrev-commit --all
- heap-stat
#! /bin/bash
# ref: https://developer.apple.com/videos/play/wwdc2020/10163/
heap Mail | egrep 'class_rw|COUNT'
- hidden-desktop
#! /bin/bash
# chflags nohidden ~/Desktop
chflags hidden ~/Desktop/*
- install-all-system-update
#! /bin/bash
softwareupdate -ia
- join-wifi
#! /bin/bash
# Replace WIFI_SSID and WIFI_PASSWORD with actual
networksetup -setairportnetwork en0 WIFI_SSID WIFI_PASSWORD
#! /bin/bash
curl -sS http://httpbin.org/get | python3 -m json.tool
- key-repeat-rate
#! /bin/bash
defaults write -g KeyRepeat -int 0.02
- latest-power-on-time
#! /bin/bash
last | awk 'NR==1 {print $6}'
- launch-xcode-editor
#! /bin/bash
xed -x
- md5-digest
#! /bin/bash
md5 -xs "Hello world!"
- most-used-command
#! /bin/bash
history | awk '{CMD[$2]++;count++;} END { for (a in CMD )print CMD[a] " " CMD[a]/count*100 "% " a }' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10
- netstat-overview
#! /bin/bash
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
- pip-update
#! /bin/bash
echo "starting upgrade pip packages..."
python3 -m pip list --outdated --format=freeze | grep -v "^\-e" | cut -d = -f 1
| xargs -n1 python3 -m pip install -U
echo "finished upgrade pip packages..."
- print-environment
#! /bin/bash
printenv
- python-packages-count
#! /bin/bash
pip3 list --format=columns | tail +3 | wc -l
- python-source-file-count
#! /bin/bash
tree | grep '.py$' | wc -l
- query-dns-settings
#! /bin/bash
# list all network services
IN=$(networksetup -listallnetworkservices | awk '{if (NR>1) print $0 ";"}');
while IFS=";" read -ra SERVICES; do
for i in "${SERVICES[@]}"; do
echo "${i} DNS Servers:"
networksetup -getdnsservers "${i}"
done
done <<< "$IN"
- query-terminfo-database
#! /bin/bash
# clear the screen
tput clear
# save cursor position
tput sc
# move cursor position
tput cup 10 13
# hide cursor
tput civis
# show cursor
tput cnorm
# show output
tput rc
- rename-git-remote-repo
#! /bin/bash
# print current remote repo url
git remote -v;
# after go to github.com and edit your repo name
# execute command below to set remote name and url
git remote set-url $0 $1;
git remote -v;
- resign-framework
#! /bin/bash
codesign -f -s ${IDENTITY} ${FRAMEWORKPATH}
- restart
#! /bin/bash
# sudo reboot
sudo shutdown -r now
- retrive-cpu-core-count
#! /bin/bash
sysctl -a | grep -Eo "core_count:(.+?)$"
- retrive-external-ip
#! /bin/bash
curl ipecho.net/plain; echo
- retrive-system-version
#! /bin/bash
sw_vers
- retrive-website-status
#! /bin/bash
siteaddr=$1
dig ${siteaddr}
ping ${siteaddr} -c 10
whois ${siteaddr}
nslookup ${siteaddr}
traceroute ${siteaddr}
- retrive-wifi-ip-address
#! /bin/bash
ipconfig getifaddr en0
- rvi
#! /bin/bash
rvictl -s $1
rvictl -l
rvictl -x $1
- scan-wifi
#! /bin/bash
airport -s
- schedule-poweron
#! /bin/bash
# sudo pmset repeat cancel
sudo pmset repeat wakeorpoweron MTWRF 9:00:00 shutdown MTWRFSU 18:30:00
- search-system-command
#! /bin/bash
whatis $1
- setting-terminal-proxy
#! /bin/bash
variables=("http_proxy" "https_proxy" "ftp_proxy")
for i in "${variables[@]}"
do
export $i="socks5://localhost:1080"
done
env | grep -e _proxy | sort
echo -e "Proxy-related environment variables set."
#
# Reference: https://gist.github.com/patik/6d40ded40bf93c2f381b
#
# You can define the code as bash function and automatic set the
# proxy variables when you lauch a bash shell.
#
# To delete the variables, execute unset $VAR_NAME in bash.
- setup-airport
#! /bin/bash
sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/local/bin/airport
export $PATH="/usr/local/bin:$PATH"
#! /bin/bash
python3 -m http.server
python -m SimpleHTTPServer
#! /bin/bash
# Heavily inspired by https://www.commandlinefu.com/commands/view/6051/get-all-shellcode-on-binary-file-from-objdump
# With slightly modify.
objdump -d $1 | grep '[0-9a-f]:' | cut -f2 -d ':' | cut -f1-6 -d ' ' | tr -s ' ' | tr '\t' ' ' | sed 's/ $//g' | sed 's/ /\\x/g' | paste -s -d '\' - | sed 's/^/"/' | sed 's/$/"/g'
#! /bin/bash
osascript -e 'tell app "System Events" to display dialog "Hello world!"'
- show-hidden-files
#! /bin/bash
defaults write com.apple.finder AppleShowAllFiles true
- special-variables
#! /bin/bash
echo "File Name: $0"
echo "First Params: $1"
echo "Second Params: $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Params: $#"
echo "Last Status: $?"
echo "Current PID: $$"
- ssh-with-alias
#! /bin/bash
touch ~/.ssh/config;
echo -e "Host ALIAS\n HostName HOSTADDR\n User USERNAME" >> ~/.ssh/config;
- ssh-without-password
#! /bin/bash
ssh-keygen -t rsa;
ssh-copy-id -i ~/.ssh/id_rsa.pub USERNAME@HOSTADDR;
- systab
#!/bin/bash
# Copy from https://github.com/hollance/neural-engine/blob/master/docs/is-model-using-ane.md
image list IMAGE_NAME
# This prints the path to the IMAGE_NAME framework, something like this (it will be different on your machine):
image dump systab 'put-the-path-here'
- talk-content
#! /bin/bash
say "Hello world!"
- translate-rgb-to-hex
#! /bin/bash
hex=$(printf "#%02x%02x%02x" ${1:-0} ${2:-0} ${3:-0})
echo -n $hex | pbcopy
echo -e "\033[31m Result ${hex} copy to the clipboard."
- translate-words-with-dict
#! /bin/bash
open dict://$1
- zprint
#! /bin/bash
# Show information about kernel zones
sudo zprint