gl0bal01/zellij-layouts
GitHub: gl0bal01/zellij-layouts
面向安全运维场景的Zellij终端布局模板集,提供渗透测试、恶意软件分析、OSINT调查和Docker工作流的即用型工作区配置。
Stars: 0 | Forks: 0
# Zellij Layouts


[Zellij](https://github.com/zellij-org/zellij) 是一个终端多路复用器(类似 tmux/screen),拥有布局系统,允许你在 `.kdl` 文件中定义窗格排列。本仓库提供即用的布局,你可以用单个命令启动它们。
## 快速开始
```
git clone ~/zellij-conf
cd ~/zellij-conf
make setup # one-time: create working directories
make install # validate and install all layouts
```
然后启动任意布局:
```
zellij --layout project options --default-cwd ~/projects/my-app
```
## 什么是布局?
一个 Zellij 布局是一个描述以下内容的 `.kdl` 文件:
- **Tabs** — 命名的工作区,你可以在其间切换 (`Ctrl+t`)
- **Panes** — 标签页内的终端分割(垂直/水平)
- **Commands** — 在特定窗格中自动运行的命令(例如 `watch git status`)
布局位于 `~/.config/zellij/layouts/`。Zellij 通过名称找到它们:
```
zellij --layout # loads ~/.config/zellij/layouts/.kdl
```
## 可用布局
### `claude-projects` — 多项目工作区
```
zp # alias (named session: "claude")
```
通过 `generate-layout.sh` 生成的多个项目标签页,每个包含:
- **左侧 70%** — 主 shell(聚焦)
- **右侧 30%** — 实时 `git status`(顶部)+ 日志尾部或 shell(底部)
外加固定标签页:`🏠 cockpit` (btop + ccusage) 和 `🧪 scratch`。
### `project` — 单个项目
```
zo ~/projects/my-app # alias
zp-new my-app # creates dir + named session "my-app"
```
与上述相同的窗格模式,不含 cockpit。使用 `--default-cwd` 将其指向任意目录。
### `docker` — Docker / Compose
```
zdk # alias (session: "docker", cwd: ~/docker)
zdk-new my-stack # creates ~/docker/my-stack, session "dk-my-stack"
```
| Tab | Panes |
|-----|-------|
| `🐳 stack` | Compose 命令 + 实时 `docker ps` + 镜像 shell |
| `📜 logs` | `docker compose logs -f` + `docker stats` |
| `🔧 debug` | Container exec + 构建 shell |
### `pentest` — 渗透测试
```
zpt # alias (session: "pentest", cwd: ~/ops/pentest)
zpt-new acme-corp # creates ~/ops/pentest/acme-corp, session "pt-acme-corp"
```
| Tab | Panes |
|-----|-------|
| `🎯 recon` | 扫描器 + 枚举 + 网络监控 + 笔记 |
| `⚔️ exploit` | MSF + payload + 监听器 + 代理 |
| `🔓 post` | 会话 + pivot + 进程监控 + loot |
| `📝 loot` | Hash 破解 + 报告 |
### `malware-analysis` — 恶意软件分析
```
zma # alias (session: "malware", cwd: ~/ops/malware)
zma-new emotet # creates ~/ops/malware/emotet, session "ma-emotet"
```
| Tab | Panes |
|-----|-------|
| `🔬 static` | file/strings/objdump + 反汇编 + 十六进制 + YARA |
| `🧪 dynamic` | strace/ltrace + 沙箱 + 进程和文件监控 |
| `🌐 network` | tcpdump + DNS + 连接追踪器 + FakeNet |
| `📋 ioc` | Hash/VT 查询 + 字符串 + 报告 |
### `osint` — OSINT 调查
```
zos # alias (session: "osint", cwd: ~/ops/osint)
zos-new target-co # creates ~/ops/osint/target-co, session "os-target-co"
```
| Tab | Panes |
|-----|-------|
| `🎯 target` | whois/dig + Shodan/Censys + IP 查询 + 笔记 |
| `🌐 web` | Wayback/archive + 元数据 + 技术栈 + 证书 |
| `📡 social` | 用户名/邮箱/电话/泄露搜索 |
| `🗂️ timeline` | 报告 + 数据关联 + 证据日志 |
## 会话如何工作
Zellij 会话在你分离后依然保持。你可以同时运行多个会话并在它们之间切换。
```
zellij --session myname --layout project # start a named session
```
如果该名称的会话已存在,Zellij 会重新附加到它,而不是创建重复项。
| 操作 | 命令 / 快捷键 |
|--------|-------------------|
| 列出会话 | `zls` |
| 附加到会话 | `za ` |
| 分离(保持运行) | `Ctrl+o` 然后 `d` |
| 切换会话(在 Zellij 内) | `Ctrl+o` 然后 `w` |
| 终止一个会话 | `zks ` |
| 终止所有会话 | `zka` |
## 在 Zellij 内导航
Zellij 使用 **模式** — 按组合键进入模式,执行操作,按 `Esc` 退出。
### 标签页
| 操作 | 快捷键 |
|--------|---------|
| 进入标签页模式 | `Ctrl+t` |
| 下一个 / 上一个标签页 | `l` / `h` (或 `→` / `←`) |
| 按数字跳转标签页 | `1`–`9` |
| 新建标签页 | `n` |
| 重命名标签页 | `r` |
### 窗格
| 操作 | 快捷键 |
|--------|---------|
| 进入窗格模式 | `Ctrl+p` |
| 移动焦点 | `h/j/k/l` (或方向键) |
| 切换全屏 | `f` |
### 滚动
| 操作 | 快捷键 |
|--------|---------|
| 进入滚动模式 | `Ctrl+s` |
| 滚动 | `↑/↓` 或 `PgUp/PgDn` |
| 在输出中搜索 | `s` (然后输入) |
## Shell 设置
将以下别名和函数添加到你的 `.zshrc` 或 `.bashrc`:
### 别名
```
# Zellij
alias z='zellij'
# Layouts (使用命名会话)
alias zp='zellij --session claude --layout claude-projects'
alias zo='zellij --layout project options --default-cwd'
alias zdk='zellij --session docker --layout docker options --default-cwd ~/docker'
alias zpt='zellij --session pentest --layout pentest options --default-cwd ~/ops/pentest'
alias zma='zellij --session malware --layout malware-analysis options --default-cwd ~/ops/malware'
alias zos='zellij --session osint --layout osint options --default-cwd ~/ops/osint'
# Session management
alias zls='zellij list-sessions'
alias za='zellij attach'
alias zks='zellij kill-session'
alias zka='rm -rf ~/.cache/zellij'
```
### 每次任务函数
这些函数创建新目录并一步启动命名会话:
```
# zpt-new acme → ~/ops/pentest/acme, session "pt-acme"
# zma-new emotet → ~/ops/malware/emotet, session "ma-emotet"
# zos-new corp → ~/ops/osint/corp, session "os-corp"
# zdk-new stack → ~/docker/stack, session "dk-stack"
# zp-new my-app → ~/projects/my-app, session "my-app"
zpt-new() {
[[ -z "$1" ]] && { echo "Usage: zpt-new "; return 1; }
mkdir -p "$HOME/ops/pentest/$1"
zellij --session "pt-$1" --layout pentest options --default-cwd "$HOME/ops/pentest/$1"
}
zma-new() {
[[ -z "$1" ]] && { echo "Usage: zma-new "; return 1; }
mkdir -p "$HOME/ops/malware/$1"
zellij --session "ma-$1" --layout malware-analysis options --default-cwd "$HOME/ops/malware/$1"
}
zos-new() {
[[ -z "$1" ]] && { echo "Usage: zos-new "; return 1; }
mkdir -p "$HOME/ops/osint/$1"
zellij --session "os-$1" --layout osint options --default-cwd "$HOME/ops/osint/$1"
}
zdk-new() {
[[ -z "$1" ]] && { echo "Usage: zdk-new "; return 1; }
mkdir -p "$HOME/docker/$1"
zellij --session "dk-$1" --layout docker options --default-cwd "$HOME/docker/$1"
}
zp-new() {
[[ -z "$1" ]] && { echo "Usage: zp-new "; return 1; }
mkdir -p "$HOME/projects/$1"
zellij --session "$1" --layout project options --default-cwd "$HOME/projects/$1"
}
```
## 自定义 `claude-projects`
这是唯一的生成式布局。编辑 `generate-layout.sh` 中的 `projects` 数组:
```
projects=(
"my-app:🚀::logs/dev.log" # dirname:emoji:label:logfile
"api:🔌:backend-api:" # empty logfile → plain shell pane
)
```
格式:`"dirname:emoji:label:logfile"`
- `dirname` — `~/projects/` 下的子目录名
- `emoji` — 标签页图标
- `label` — 标签页显示名称(如为空则默认为 dirname)
- `logfile` — 相对于项目目录的尾部日志路径(如为普通 shell 则省略)
然后运行 `make install`。
## Make 目标
```
make # regenerate claude-projects.kdl
make install # lint + regenerate + install all layouts
make uninstall # remove installed layouts (keeps local files)
make clean # remove generated + installed files
make setup # create ~/ops/{pentest,malware,osint}
make lint # validate KDL brace balance
make list # show installed layouts
make help # show all targets
```
## 技巧
- **快捷键冲突?** 按 `Ctrl+g` 进入锁定模式 — 所有按键直接传递给应用(例如 Claude Code)。再次按 `Ctrl+g` 解锁并使用 Zellij 快捷键。
- **重新附加,不要重新启动。** 运行两次 `zpt` 会重新附加到现有的 "pentest" 会话 — 它不会创建重复项。
- **全屏窗格** 使用 `Ctrl+p f` 当你需要更多空间,然后再次按 `Ctrl+p f` 恢复。
- **回滚** 使用 `Ctrl+s` — 对于阅读长命令输出很有用。在滚动模式下按 `s` 进行搜索。
- **重命名标签页** 使用 `Ctrl+t r` — 对于安全布局中每次任务的标签页很方便。
- **浮动窗格** 使用 `Ctrl+p w` — 在顶部生成临时窗格而不改变你的布局。
- **同步窗格** — `Ctrl+t s` 切换同步模式:在一个窗格中输入,它会回显到标签页中的所有窗格。非常适合在多个 shell 中运行相同的命令。
- **复制模式** — `Ctrl+s` 然后用方向键选择文本 + `Enter`。无需鼠标即可工作。
- **管道窗格输出** — `zellij pipe` 允许你将窗格输出发送到外部脚本。
## 资源
- [Zellij GitHub](https://github.com/zellij-org/zellij)
- [KDL 语言规范](https://kdl.dev)
- [Zellij 布局文档](https://zellij.dev/documentation/layouts)
- [Zellij 快捷键](https://zellij.dev/documentation/keybindings)
- [Zellij 插件系统](https://zellij.dev/documentation/plugins)
标签:Cutter, DAST, Docker工作流, ESC4, KDL, OSINT, SecOps, Tmux替代品, Zellij, 云安全架构, 多项目管理, 安全运营, 布局配置, 开发环境, 恶意软件分析, 扫描框架, 生产力工具, 终端分屏, 终端复用, 自动化布局, 配置模板