
Пълната серия за истинските admins и hackers
$ whoami
→ Тони Ангелчовски · sysadmin · macOS & Linux · dtgarage.eu
→ Тони Ангелчовски · sysadmin · macOS & Linux · dtgarage.eu
Написах тази серия защото бях уморен от YouTube туторъли, показващи
ls -la като "pro trick".Истинските admins и hacker-и знаят неща, за които никой не говори. Командите, с които работят ежедневно. Инструментите, скрити дълбоко в macOS. Начините, по които четат системата като отворена книга.
Пет тома. 200+ команди. Copy-paste ready. Без bullshit.
Landing page с всички 5 тома, интерактивни примери и директни линкове към всеки том
Командите, за които 99% от Mac потребителите нямат идея
Знаеш ли, че можеш да pipeline-ваш всяко CLI output директно в клипборда?
Bash:
# Вземи remote файл директно в clipboard — без да запазваш нищо
ssh user@server 'cat /etc/hosts' | pbcopy
# Намери текст и го копирай
cat ~/Desktop/passwords.txt | pbcopy
# Paste в pipeline
pbpaste | grep "admin"
Spotlight индексира съдържанието на файлове. Можеш да търсиш по metadata — дата, автор, дори GPS координати на снимки.
Bash:
# Намери всички .pem файлове (SSH ключове, сертификати)
mdfind -name "*.pem" -onlyin ~/
# Търси в СЪДЪРЖАНИЕТО на файлове
mdfind "kMDItemTextContent == '*password*'cd"
# Файлове модифицирани тази седмица
mdfind -name "*.pdf" | xargs ls -lt | head -20
Bash:
# Кой процес държи порт 8080?
lsof -i :8080
# Кои PDF-и е отворил Safari?
lsof -p $(pgrep Safari) | grep -i "\.pdf"
# GOLD: Изтрити файлове, заемащи disk space
lsof -u $USER | grep "deleted"
Защо е яко: Последната команда показва файлове, изтрити но все още отворени от процес. Те заемат disk space но са "невидими". Рестартирай процеса и освобождаваш пространството.
Bash:
# Screenshot без сянка (файловете стават 40-60% по-малки)
defaults write com.apple.screencapture disable-shadow -bool true
# Finder показва скрити файлове
defaults write com.apple.finder AppleShowAllFiles -bool true && killall Finder
# Dock без delay — появява се моментално
defaults write com.apple.dock autohide-delay -float 0 && killall Dock
# Спри автоматичното запазване в iCloud
defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false
| Shortcut | Действие |
|---|---|
⌘ + ⌃ + ⇧ + 4 | Screenshot на зона → директно в клипборда |
⌘ + ⌥ + V | MOVE файл (не copy) след Cmd+C |
⌃ + R | Reverse search в терминал history |
⌃ + U | Изчисти целия ред в терминала |
⌃ + ⌘ + Q | Lock screen моментално |
⌘ + ⌥ + M | Минимизирай всички прозорци |
Истинският hacker debugging — виж всеки system call без source код
DTrace е динамична инструментация на живо — закача се за ядрото и app-овете без да ги спира или рестартира. ~800 000 probe точки в macOS.
Bash:
# Закачи се за вече работещ процес
sudo dtruss -p $(pgrep Safari)
# Само file operations на Spotify
sudo dtruss -t open -p $(pgrep "Spotify") 2>&1
# Trace нов процес от старта
sudo dtruss /usr/bin/curl https://example.com 2>&1 | head -50
Bash:
# Пусни и натисни Ctrl+C след 5 секунди
sudo dtrace -n \
'syscall:::entry /pid == $target/ { @calls[probefunc] = count(); }
END { trunc(@calls, 20); printa("%-30s %@d\n", @calls); }' \
-p $(pgrep Slack)
Резултатът показва защо Slack яде CPU в idle — буквално броиш колко пъти извиква всеки system call.
Bash:
sudo dtrace -n \
'profile-997 /arg0/ { @[execname, ksym(arg0)] = count(); }
END { trunc(@, 20); printa(@); }'
Важно: SIP (System Integrity Protection) блокира dtrace по default. За dev машини: Recovery Mode → Terminal →
[COLOR=rgb(247, 218, 100)][SIZE=4]csrutil enable --without dtrace[/SIZE][/COLOR]
Bash:
# fs_usage — file system usage на живо
sudo fs_usage -w -f filesys $(pgrep Chrome)
# sc_usage — интерактивен syscall монитор
sudo sc_usage $(pgrep Safari)
# sample — CPU profiling без dtrace
sample $(pgrep myapp) 10 -file /tmp/profile.txt
Aliases, Functions, Prompt и Performance — реален sysadmin конфиг
Bash:
# Git aliases
alias gs='git status -sb'
alias ga='git add -p' # Game-changer — patch mode
alias gc='git commit -v' # Показва diff в editor-а
alias gca='git commit --amend --no-edit'
alias gl='git log --oneline --decorate --graph --all'
alias grh='git reset HEAD~1' # Undo последния commit
# Network
alias myip='curl -s https://api.ipify.org && echo'
alias flush='sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder'
alias ports='sudo lsof -i -n -P | grep LISTEN'
# macOS specific
alias show='defaults write com.apple.finder AppleShowAllFiles YES && killall Finder'
alias dsclean='find . -name ".DS_Store" -delete'
alias zr='source ~/.zshrc'
# Safety net
alias rm='rm -i' # Пита преди изтриване
Bash:
# mkcd — създай и влез
function mkcd() { mkdir -p "$1" && cd "$1"; }
# killport — kill процеса на порт
function killport() {
local pid=$(lsof -ti :$1)
[ -n "$pid" ] && kill -9 $pid && echo "Killed PID $pid" || echo "Nothing on :$1"
}
# serve — HTTP сървър с local IP
function serve() {
local port="${1:-8000}"
local ip=$(ipconfig getifaddr en0 2>/dev/null || echo "localhost")
echo "Serving at: http://${ip}:${port}"
python3 -m http.server $port
}
# weather — времето в терминала
function weather() { curl -s "wttr.in/${1:-Sofia}?format=3"; }
Bash:
export NVM_DIR="$HOME/.nvm"
function _load_nvm() {
[ -s "$NVM_DIR/nvm.sh" ] && source "$NVM_DIR/nvm.sh"
}
for cmd in node npm npx nvm; do
eval "function $cmd() { unfunction $cmd; _load_nvm; $cmd \"\$@\"; }"
done
Tip: Измери startup time с
time zsh -i -c exit. Над 300ms = имаш проблем. Цел: под 80ms.
Keychain, SSH Config, GPG, TLS Cert Инспекция — без GUI
Bash:
# Намери парола → директно в клипборда
security find-internet-password -s "github.com" -w | pbcopy
# В скриптове — НИКОГА не hardcode credentials:
API_KEY=$(security find-generic-password -s "MyAPI" -w)
curl -H "Authorization: Bearer $API_KEY" https://api.example.com
INI:
Host *
ServerAliveInterval 60
AddKeysToAgent yes
UseKeychain yes # macOS Keychain интеграция
ControlMaster auto # Мултиплексиране!
ControlPath ~/.ssh/cm_%r@%h:%p
ControlPersist 10m # Instant последващи конекции
Host prod
HostName 203.0.113.10
User deploy
ForwardAgent no # НИКОГА на prod!
Host dev-internal
HostName 10.0.0.50
ProxyJump bastion.example.com
Bash:
git config --global user.signingkey YOUR_KEY_ID
git config --global commit.gpgsign true
# Провери подписа
git log --show-signature -1
# → gpg: Good signature from "Тони Ангелчовски"
Bash:
# Дни до изтичане — за cron job
echo | openssl s_client -connect example.com:443 2>/dev/null \
| openssl x509 -noout -checkend 2592000
# → Certificate will not expire ИЛИ → ALERT: Certificate will expire!
Кой какво е правил на машината и кога — 8 артефакта
Bash:
# Sudo използване — кой е ескалирал привилегии и кога
log show --predicate 'process == "sudo"' --last 30d --info
# → 2024-03-15 02:47:33 sudo: alex : COMMAND=/bin/bash
# SSH login опити
log show --predicate 'process == "sshd"' --last 7d --info \
| grep "Accepted\|Failed\|Invalid"
# Архивирай преди logs да изчезнат (7 дни!)
sudo log collect --last 7d --output ~/forensics.logarchive
Bash:
log show --predicate 'eventMessage contains "disk" AND eventMessage contains "mounted"' \
--last 30d
# → 02:31 "SanDisk 64GB" mounted
# → 02:47 "SanDisk 64GB" unmounted
# → 16 минути прозорец. Какво е копирано?
SQL:
-- Safari история
sqlite3 ~/Library/Safari/History.db \
"SELECT datetime(visit_time + 978307200, 'unixepoch', 'localtime'),
url, title
FROM history_visits
JOIN history_items ON history_visits.history_item = history_items.id
ORDER BY visit_time DESC LIMIT 50;"
| Час | Артефакт | Събитие |
|---|---|---|
| 02:29 | Unified Log | Wi-Fi join: "CoffeeShop_Free" — нова мрежа в 2 нощем |
| 02:31 | Disk Log | USB mount: SanDisk 64GB |
| 02:33 | zsh_history | rm -rf /Users/boss/Documents/Q4_Report/ |
| 02:34 | zsh_history | cp -r ~/Projects/secret/ /Volumes/SANDISK/ |
| 02:47 | Disk Log | USB unmount — само 16 мин след mount |
| 02:47 | zsh_history | history -c — опит за изтриване на следи ← записан! |
| 03:08 | Safari SQLite | Visit: wetransfer.com |
history -c е в историята! Потребителят е опитал да изтрие следите, но самата команда за изтриване е записана. Доказателство за опит за прикриване.
| Том | Тема | Команди | Ниво |
|---|---|---|---|
| Terminal Secrets | 47 | ||
| DTrace & dtruss | 25 | ||
| .zshrc Pro Setup | 50+ | ||
| Security | 38 | ||
| Forensics | 42+ |
Landing page · 5 тома · Copy-paste команди · macOS 12–15
Тони Ангелчовски
Sysadmin · macOS & linux · Основател на dtgarage.eu
Тази серия е компилация от реален опит —
команди и tricks, използвани ежедневно, не намерени в Stack Overflow.
Написано за хората, които искат да разбират машината си, не само да я ползват.
Всички команди са тествани · Copy-paste ready · Използвай на собствена отговорност
Хареса ли ти серията?
Last edited: