There are many useful keyboard shortcuts that I’ve come across over time, and I try to include them here so they don’t get forgotten.
COMMAND+SHIFT+I
Resource: https://developer.chrome.com/docs/devtools/shortcuts/
OPTION + COMMAND + SPACE
COMMAND + SPACE
COMMAND + TAB to highlight the minimized window you want to maximize.
Before releasing the COMMAND button, hit the OPTION button (ALT on a windows keyboard).
Resource: https://superuser.com/questions/196141/keyboard-shortcut-to-unhide-or-unminimize-a-window-in-os-x
OPTION + COMMAND + POWER
CTRL + SHIFT + POWER
Resource: https://support.apple.com/en-us/HT201236
COMMAND + L
Resource: https://apple.stackexchange.com/questions/11573/chrome-keyboard-shortcut-to-go-to-address-bar
COMMAND + SHIFT + .
Resource: https://ianlunn.co.uk/articles/quickly-showhide-hidden-files-mac-os-x-mavericks/
COMMAND + SHIFT + G
Resource: https://blog.bejarano.io/fixing-cron-jobs-in-mojave.html
CTRL + COMMAND + Q
COMMAND + F1
Hold OPTION + COMMAND and select the text you want with your mouse.
https://developer.apple.com/download/more/
sudo systemsetup -getremotelogin
sudo systemsetup -setremotelogin on
sudo systemsetup -setremotelogin off
Resource: http://osxdaily.com/2016/08/16/enable-ssh-mac-command-line/
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.screensharing.plist
Be sure to run this as root.
#!/bin/bash
USERNAME=user1
FULLNAME="User 1"
PASSWORD="yourpasswordgoeshere"
SECONDARY_GROUPS="staff"
if [[ $UID -ne 0 ]]; then echo "Please run $0 as root." && exit 1; fi
# Find the next available user ID
MAXID=$(dscl . -list /Users UniqueID | awk '{print $2}' | sort -ug | tail -1)
USERID=$((MAXID+1))
# Create the user account
dscl . -create /Users/$USERNAME
dscl . -create /Users/$USERNAME UserShell /bin/bash
dscl . -create /Users/$USERNAME RealName "$FULLNAME"
dscl . -create /Users/$USERNAME UniqueID "$USERID"
dscl . -create /Users/$USERNAME PrimaryGroupID 20
dscl . -create /Users/$USERNAME NFSHomeDirectory /Users/$USERNAME
dscl . -passwd /Users/$USERNAME $PASSWORD
# Add use to any specified groups
for GROUP in $SECONDARY_GROUPS ; do
dseditgroup -o edit -t user -a $USERNAME $GROUP
done
# Create the home directory
createhomedir -c -u $USERNAME > /dev/null
echo "Created user #$USERID: $USERNAME ($FULLNAME)"
sudo dscl . -delete /Users/$USERNAME
Delete the home directory if you created it:
sudo rm -rf /Users/$USERNAME
Resource: https://apple.stackexchange.com/questions/310308/delete-a-standard-user-from-mac-os
sudo dscl . list /Users | grep -v "^_"
The output will be written to /var/tmp/.tmp
screencapture -x /var/tmp/.tmp
Resource: https://www.tecmint.com/send-a-message-to-logged-users-in-linux-terminal/
sudo mkdir /mnt/name_of_system_folder
sudo mount -t nfs \
-o rsize=65536,wsize=65536,intr,hard,tcp,\
locallocks,rdirplus,readahead=128 system.com:<path to volume mount> \
/mnt/name_of_system_folder
Resources: https://care.qumulo.com/hc/en-us/articles/115008111268-Recommended-NFS-Mount-Options https://willhaley.com/blog/mount-nfs-share-on-a-mac/
sudo umount -Af -t nfs,smbfs
Resources: https://askubuntu.com/questions/292043/how-to-unmount-nfs-when-server-is-gone https://superuser.com/questions/249611/how-to-forceably-unmount-stuck-network-share-in-mac-os-x
https://gist.github.com/L422Y/8697518
Install:
brew cask install osxfuse
brew install sshfs
Mount remote system:
mkdir /mnt/remote_system
cd /mnt/remote_system
sudo sshfs -o allow_other,defer_permissions user@remote_system.com:/ /mnt/remote_system
Resources: https://www.digitalocean.com/community/tutorials/how-to-use-sshfs-to-mount-remote-file-systems-over-ssh https://howchoo.com/g/ymmxmzlmndb/how-to-install-sshfs
Plist files can be used as an alternative to cron jobs. This specific example will run even if there are no users logged in.
This particular one will run a python script, not_evil.py every day at 3 am.
Create /Library/LaunchDaemons/not.evil.plist with this content:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>not.evil</string>
<key>Program</key>
<string>/Users/notabackdooruser/not_evil.py</string>
<key>WorkingDirectory</key>
<string>/Users/notabackdooruser/</string>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>3</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<key>EnvironmentVariables</key>
<dict>
<key>http_proxy</key>
<string>http://companyproxy.com:80</string>
</dict>
</dict>
</plist>
Make sure the file is owned by root (sudo chown root job.plist) and that
wheel is set for the group (sudo chgrp wheel job.plist).
To load the file to the running daemons, run:
sudo launchctl load not.evil.plist
To remove the file from the running daemons, run:
sudo launchctl unload not.evil.plist
This will run the a bash script in the context of a specific user every minute.
It will output the results to /Users/yourusername/brew-output.txt
or /Users/yourusername/brew-errors.txt if there is an error in running the command.
To start, navigate to ~/Library/LaunchAgents and put this in a file called com.yourusername.job-name.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:</string>
</dict>
<key>Label</key>
<string>com.yourusername.job-name</string>
<key>ProgramArguments</key>
<array>
<string>bash</string>
<string>-c</string>
<string>/Users/yourusername/Library/LaunchAgents/bashscript.sh</string>
</array>
<key>StartInterval</key>
<integer>60</integer>
<key>StandardOutPath</key>
<string>/Users/yourusername/brew-output.txt</string>
<key>StandardErrorPath</key>
<string>/Users/yourusername/brew-errors.txt</string>
</dict>
</plist>
Follow this by adding the bash script to
/Users/yourusername/Library/LaunchAgents/bashscript.sh
and then running:
chmod +x /Users/yourusername/Library/LaunchAgents/bashscript.sh
With the plist and script in place, you can enable it with:
launchctl load com.yourusername.job-name.plist
and disable it with:
launchctl unload com.yourusername.job-name.plist
A complete example that automates brew updates for a user can be found here: https://gist.github.com/l50/884919db8c6819e73ebe2f50c6928fcc
Resources: https://alvinalexander.com/mac-os-x/mac-osx-startup-crontab-launchd-jobs https://medium.com/@chetcorcos/a-simple-launchd-tutorial-9fecfcf2dbb3
~/Library/LaunchAgents/com.yourusername.bashscript.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:</string>
</dict>
<key>Label</key>
<string>com.yourusername.job-name</string>
<key>Program</key>
<string>/Users/yourusername/Library/LaunchAgents/bashscript.sh</string>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
<key>StartInterval</key>
<integer>21600</integer>
Resource: https://www.maketecheasier.com/use-launchd-run-scripts-on-schedule-macos/
To specify which directory to run the job from:
<key>WorkingDirectory</key>
<string>/Users/yourname/demo</string>
Resource: https://medium.com/@chetcorcos/a-simple-launchd-tutorial-9fecfcf2dbb3
Add these lines to your .plist file:
<!-- Log STDERR -->
<key>StandardErrorPath</key>
<string>/Users/yourusername/Library/Logs/come.yourusername.job-name-err.log</string>
<!-- Log STDOUT -->
<key>StandardOutPath</key>
<string>/Users/yourusername/Library/Logs/com.yourusername.job-name.log</string>
<!-- Run when the jobs is loaded -->
<key>RunAtLoad</key>
<true/>
Run this command to view the logs:
tail -f /var/log/system.log
Then run this to load the job:
launchctl load -w ~/Library/LaunchAgents/com.yourusername.job-name.plist
and this to unload the job once you’re done:
launchctl unload ~/Library/LaunchAgents/com.yourusername.job-name.plist
Resources: https://stackoverflow.com/questions/6337513/how-can-i-debug-a-launchd-script-that-doesnt-run-on-startup https://stackoverflow.com/questions/1370901/very-simple-launchd-plist-not-running-my-script
You may have characters in your plist that require you to escape them. For example:
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/bash</string>
<string>runBgScript.sh&</string>
</array>
The & is problematic here. Instead of playing the escape all
the things game, you can just do this instead:
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/bash</string>
<string><![CDATA[runBgScript.sh&]]></string>
</array>
Resource: https://stackoverflow.com/questions/3757817/plist-contains-the-character
# Update all
softwareupdate -i -a
Resource: https://www.jamf.com/jamf-nation/discussions/30828/softwareupdate-l-no-updates-found
ssh-add -K ~/.ssh/[your-private-key]
sysctl -a | grep cpu.thread_count | egrep -o '(\d+)'
log show --predicate 'eventMessage contains "Previous shutdown cause"' --last 24h
Resource: https://apple.stackexchange.com/questions/158684/chrome-wont-quit-mac-yosemite
This would call for something like strace in linux,
which is not available in OSX. Instead, we use dtrace:
capture() {
sudo dtrace -p "$1" -qn '
syscall::write*:entry
/pid == $target && arg0 == 1/ {
printf("%s", copyinstr(arg1, arg2));
}
'
}
shasum -a 256 <path to binary>
# For example, to get the SHA-256 of the Chromium binary:
shasum -a 256 /Applications/Chromium.app/Contents/MacOS/Chromium
The value next to inet6 is your ipv6 address.
You can also:
Resource: https://it.umn.edu/services-technologies/how-tos/ipv6-setup-guides-mac-os-x
for file in ./*.pdf; do open "${file}"; done
Resource: https://apple.stackexchange.com/questions/316008/open-several-pdfs-from-terminal
Resource: http://hints.macworld.com/article.php?story=20100927085636535
ls ~/Library/MessagesResources: https://serverfault.com/questions/954586/osx-mojave-crontab-tmp-tmp-x-operation-not-permitted http://osxdaily.com/2018/10/09/fix-operation-not-permitted-terminal-error-macos/
You may need to do this bit of horribleness as well (obviously not ideal from a security standpoint): https://blog.bejarano.io/fixing-cron-jobs-in-mojave.html
You can install a specific version of a package using @.
For example, to install golang 1.12:
brew update; brew upgrade; brew cleanup
Here’s a one-liner:
sudo chown -R $(whoami) /usr/local/bin /usr/local/lib /usr/local/sbin && \
chmod u+w /usr/local/bin /usr/local/lib /usr/local/sbin
Resource: https://www.caseyliss.com/2019/10/8/brew-bundle
This is a great tutorial that covers the process in depth: https://dev.to/clairecodes/making-the-alt-key-work-in-iterm2-1aa9
This happens when Chrome Extensions claim the shortcut. Navigate to chrome://extensions/shortcuts and find which one is doing it. Once you’ve identified it, change that shortcut and the issue should be resolved.
Simply type “thisisunsafe”
NEW_HOSTNAME=myhostname
# Change FQDN:
sudo scutil --set HostName "${NEW_HOSTNAME}.domain.com"
# Change Bonjour hostname:
sudo scutil --set LocalHostName "${NEW_HOSTNAME}.local"
# Change the computer name:
sudo scutil --set ComputerName "${NEW_HOSTNAME}"
# Flush DNS cache:
dscacheutil -flushcache
# Reboot the system for the changes to take effect:
sudo reboot
Resource: https://apple.stackexchange.com/questions/287760/set-the-hostname-computer-name-for-macos
Add the following line to the top of
sudo vi /etc/pam.d/sudo
# Add this line to the top and save:
auth sufficient pam_tid.so
Resource: https://sixcolors.com/post/2020/11/quick-tip-enable-touch-id-for-sudo/
Open chrome and type the URL you want to remove
Find links on the suggestions list that are associated with the site you want to remove
Type the following to remove the link from the suggested list:
SHIFT+FN+DELETE
Resource: https://osxdaily.com/2021/10/22/how-delete-chrome-url-links-address-bar/
osascript -e 'tell application "System Events" to get login items'
Alternatively, you can get the full path to all login items with:
osascript -e 'tell application "System Events" to get path of every login item'