diff --git a/knowledge base/acronyms.md b/knowledge base/acronyms.md
index 3bb46cf..423b6a7 100644
--- a/knowledge base/acronyms.md
+++ b/knowledge base/acronyms.md
@@ -29,6 +29,7 @@
| CVS | Concurrent Versioning System | |
| DBMS | Data Base Management System | |
| DKIM | DomainKeys Identified Mail | |
+| EA | Extended Attributes | |
| EEPROM | Electronically Erasable Programmable Read-Only Memory | |
| FIFO | First In First Out | |
| FILO | First In Last Out | |
diff --git a/knowledge base/exiftool.md b/knowledge base/exiftool.md
new file mode 100644
index 0000000..3d73cb1
--- /dev/null
+++ b/knowledge base/exiftool.md
@@ -0,0 +1,42 @@
+# ExifTool
+
+Platform-independent Perl library and command-line application for reading, writing and editing meta information in a wide variety of files.
+It supports many different metadata formats as well as the maker notes of many digital cameras.
+
+## Table of contents
+
+1. [TL;DR](#tldr)
+1. [Further readings](#further-readings)
+1. [Sources](#sources)
+
+## TL;DR
+
+```sh
+# Installation.
+brew install 'exiftool'
+```
+
+## Further readings
+
+- [Website]
+- [Github]
+
+## Sources
+
+All the references in the [further readings] section, plus the following:
+
+- [Top 5 ways to view and edit metadata]
+
+
+
+
+[github]: https://github.com/exiftool/exiftool
+[website]: https://exiftool.org/
+
+
+[further readings]: #further-readings
+
+
+[top 5 ways to view and edit metadata]: https://daminion.net/articles/tips/top-5-ways-to-view-and-edit-metadata/
diff --git a/knowledge base/mac os x/README.md b/knowledge base/mac os x/README.md
index f9919a0..f3e10d2 100644
--- a/knowledge base/mac os x/README.md
+++ b/knowledge base/mac os x/README.md
@@ -4,17 +4,18 @@
1. [TL;DR](#tldr)
1. [Hidden settings](#hidden-settings)
-1. [Resize an image](#resize-an-image)
-1. [Resize a PDF file from Preview](#resize-a-pdf-file-from-preview)
+1. [Image manipulation](#image-manipulation)
+1. [Resize PDF files](#resize-pdf-files)
+1. [Manage tags](#manage-tags)
1. [Update the OS from CLI](#update-the-os-from-cli)
1. [Keychain access from CLI](#keychain-access-from-cli)
1. [Mount an NFS share](#mount-an-nfs-share)
1. [Use TouchID to authenticate in the terminal](#use-touchid-to-authenticate-in-the-terminal)
1. [Fix iTerm2](#fix-iterm2)
1. [Xcode CLI tools](#xcode-cli-tools)
- 1. [Headless installation](#headless-installation)
- 1. [Removal](#removal)
- 1. [Upgrade](#upgrade)
+ 1. [Headless installation](#headless-installation)
+ 1. [Removal](#removal)
+ 1. [Upgrade](#upgrade)
1. [Boot keys cheatsheet](#boot-keys-cheatsheet)
1. [Further readings](#further-readings)
1. [Sources](#sources)
@@ -150,21 +151,20 @@ defaults write com.apple.dock ResetLaunchPad -bool TRUE
# Force Finder to always display hidden files.
defaults write com.apple.finder AppleShowAllFiles TRUE
+
+# Prevent Finder to create .DS_Store files on network shares.
+defaults write com.apple.desktopservices DSDontWriteNetworkStores true
```
-## Resize an image
+## Image manipulation
-See also [Resize, rotate, or flip an image in Preview on Mac].
+Use Preview to perform basic image manipulation through the GUI.
+See [Resize, rotate, or flip an image in Preview on Mac].
-From CLI:
+See [`sips`][sips] for the command line utility shipping with OS X by default.
+Install [ImageMagick] if you need something more powerful.
-```sh
-# Retain ratio.
-# Save as different file.
-sips -Z '1000' -o 'resized.jpg' 'IMG_20190527_013903.jpg'
-```
-
-## Resize a PDF file from Preview
+## Resize PDF files
In the Preview app:
@@ -174,6 +174,32 @@ In the Preview app:
1. Click the _Quartz Filter_ pop-up menu, then choose _Reduce File Size_.
1. Click the _Export_ button.
+## Manage tags
+
+Tags are stored both in a file's or folder's `com.apple.metadata:_kMDItemUserTags` extended attribute.
+
+Avoid using the `xattr` tool, as it almost always returns the hex dump of a `plist` file, which needs to be converted:
+
+```sh
+$ xattr -px com.apple.metadata:_kMDItemUserTags 'path/to/file' \
+| perl -wane 'print chr hex for @F' | plutil -p -
+[
+ 0 => "test"
+]
+```
+
+[`mdls`][mdls] returns a more readable output, but still is not really useful for other actions than read:
+
+```sh
+$ mdls -raw -name kMDItemUserTags 'path/to/file'
+(
+ test
+)
+```
+
+See [jdberry/tag] for a more versatile command line utility.
+See [Tagging files from the macOS command line] for more information.
+
## Update the OS from CLI
```sh
@@ -368,6 +394,7 @@ All the references in the [further readings] section, plus the following:
- [Compress a PDF in Preview on Mac]
- [Resize, rotate, or flip an image in Preview on Mac]
- [Who is listening on a given TCP port on Mac OS X?]
+- [Tagging files from the macOS command line]
-[time machine]: time%20machine.md
+[imagemagick]: ../imagemagick.md
+[jdberry/tag]: tag.md
+[little snitch]: little%20snitch.md
[macports]: macports.md
[openssl-osx-ca]: openssl-osx-ca.md
-[little snitch]: little%20snitch.md
+[sips]: sips.md
+[time machine]: time%20machine.md
[boot a mac from usb drive]: https://www.wikihow.com/Boot-a-Mac-from-USB-Drive
@@ -398,7 +428,9 @@ All the references in the [further readings] section, plus the following:
[launchctl man page]: https://www.unix.com/man-page/osx/1/launchctl
[list of xcode command line tools]: https://mac.install.guide/commandlinetools/8.html
[macos network quality tool]: https://www.theapplegeek.co.uk/blog/networkquality
+[mdls]: https://ss64.com/osx/mdls.html
[pam_reattach]: https://github.com/fabianishere/pam_reattach
+[tagging files from the macos command line]: https://brettterpstra.com/2017/08/22/tagging-files-from-the-command-line/
[using terminal to find your mac's network name]: https://www.tech-otaku.com/networking/using-terminal-find-your-macs-network-name/
[who is listening on a given tcp port on mac os x?]: https://stackoverflow.com/questions/4421633/who-is-listening-on-a-given-tcp-port-on-mac-os-x
[xcode command line tools installation faq]: https://www.godo.dev/tutorials/xcode-command-line-tools-installation-faq
diff --git a/knowledge base/mac os x/sips.md b/knowledge base/mac os x/sips.md
new file mode 100644
index 0000000..fbbe6ad
--- /dev/null
+++ b/knowledge base/mac os x/sips.md
@@ -0,0 +1,39 @@
+# The Scriptable Image Processing System (SIPS)
+
+Command-line tool shipped by default with Mac OS X which allows basic image manipulation.
+Think [ImageMagick], but not as powerful.
+
+Used to query or modify raster image files (JPG/GIF/PNG) and ColorSync ICC profiles.
+Image processing options include flip, rotate, and change image format/width/height.
+
+Its functionality can be used through the "Image Events" AppleScript suite, and supports executing JavaScript to either modify or generate images.
+
+## Table of contents
+
+1. [TL;DR](#tldr)
+1. [Further readings](#further-readings)
+
+## TL;DR
+
+```sh
+# Retain ratio.
+# Save as different file.
+sips -Z '1000' -o 'resized.jpg' 'IMG_20190527_013903.jpg'
+```
+
+## Further readings
+
+- [`man` page][man page]
+- [Mac OS X]
+- [ImageMagick]
+
+
+
+
+[imagemagick]: ../imagemagick.md
+[mac os x]: README.md
+
+
+[man page]: https://ss64.com/osx/sips.html
diff --git a/knowledge base/mac os x/tag.md b/knowledge base/mac os x/tag.md
new file mode 100644
index 0000000..6a37121
--- /dev/null
+++ b/knowledge base/mac os x/tag.md
@@ -0,0 +1,91 @@
+# Tag
+
+Command line tool to manipulate tags on Mac OS X files (10.9 Mavericks and above) and to query for files with those tags.
+It leverages the file system's built-in metadata search functionality to quickly find all files that have been tagged with a given set of tags.
+
+## Table of contents
+
+1. [TL;DR](#tldr)
+1. [Further readings](#further-readings)
+1. [Sources](#sources)
+
+## TL;DR
+
+```sh
+# Installation.
+brew install 'tag'
+sudo port install 'tag'
+
+# Add tags to files.
+tag --add 'tag_name' 'path/to/file'
+tag --add 'tag_name_1,…,tag with spaces N' 'file_1' … 'file_N'
+
+# List tags for files.
+tag
+tag 'path/to/file'
+tag --list 'path/to/file'
+tag --list 'file_1' … 'file_N'
+tag --recursive
+
+# Replace *all* tags in files with new ones.
+tag --set 'tag_name' 'path/to/file'
+tag --set 'tag_name_1,…,tag with spaces N' 'file_1' … 'file_N'
+
+# Remove *specific* tags from files.
+tag --remove 'tag_name' 'file'
+tag --remove 'tag_name_1,…,tag with spaces N' 'file_1' … 'file_N'
+
+# Remove *all* tags from files.
+# The '*' wildcard matches all tags.
+# Needs escaping against shell expansion.
+tag --remove '*' 'file'
+
+# List files from the input matching *specific* tags.
+tag --match 'tag_name' 'path/to/file'
+tag --match 'tag_name_1,…,tag with spaces N' 'file_1' … 'file_N'
+
+# List files from the current directory matching any combination of one or more
+# tags.
+tag --match '*' *
+tag --match '*' --recursive '.'
+
+# List files from the current directory with *no* tags.
+tag --match '' *
+
+# Find files with *specific* tags.
+tag --find 'tag_name'
+tag --find 'tag_name_1,…,tag with spaces N'
+
+# Find files with at least one tag.
+tag --find '*'
+
+# Find files with no tags.
+tag --find ''
+```
+
+## Further readings
+
+- [Github]
+- [Mac OS X]
+
+## Sources
+
+All the references in the [further readings] section, plus the following:
+
+- [Tagging files from the macOS command line]
+
+
+
+
+[github]: https://github.com/jdberry/tag
+
+
+[further readings]: #further-readings
+
+
+[mac os x]: README.md
+
+
+[tagging files from the macos command line]: https://brettterpstra.com/2017/08/22/tagging-files-from-the-command-line/
diff --git a/knowledge base/mac os x/xattr.md b/knowledge base/mac os x/xattr.md
new file mode 100644
index 0000000..b9f0efd
--- /dev/null
+++ b/knowledge base/mac os x/xattr.md
@@ -0,0 +1,22 @@
+# xattr
+
+CLI tool to display and manipulate extended attributes of files, directories and symbolic links.
+
+## Table of contents
+
+1. [Further readings](#further-readings)
+
+## Further readings
+
+- [`man` page][man page]
+- [Mac OS X]
+
+
+
+
+[mac os x]: README.md
+
+
+[man page]: https://ss64.com/osx/xattr.html