sysx-cli 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sysx_cli-1.0.0/LICENSE +21 -0
- sysx_cli-1.0.0/PKG-INFO +258 -0
- sysx_cli-1.0.0/README.md +223 -0
- sysx_cli-1.0.0/pyproject.toml +56 -0
- sysx_cli-1.0.0/setup.cfg +4 -0
- sysx_cli-1.0.0/sysx.py +897 -0
- sysx_cli-1.0.0/sysx_cli.egg-info/PKG-INFO +258 -0
- sysx_cli-1.0.0/sysx_cli.egg-info/SOURCES.txt +11 -0
- sysx_cli-1.0.0/sysx_cli.egg-info/dependency_links.txt +1 -0
- sysx_cli-1.0.0/sysx_cli.egg-info/entry_points.txt +2 -0
- sysx_cli-1.0.0/sysx_cli.egg-info/requires.txt +4 -0
- sysx_cli-1.0.0/sysx_cli.egg-info/top_level.txt +1 -0
- sysx_cli-1.0.0/tests/test_sysx.py +443 -0
sysx_cli-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 maoxian3824
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
sysx_cli-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: sysx-cli
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: 轻量级系统信息与开发辅助 CLI 工具,纯标准库实现,零第三方依赖
|
|
5
|
+
Author-email: maoxian3824 <maoxian3824@users.noreply.github.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/maoxian3824/sysx
|
|
8
|
+
Project-URL: Repository, https://github.com/maoxian3824/sysx
|
|
9
|
+
Project-URL: Documentation, https://github.com/maoxian3824/sysx#readme
|
|
10
|
+
Project-URL: Changelog, https://github.com/maoxian3824/sysx/blob/master/CHANGELOG.md
|
|
11
|
+
Project-URL: Issues, https://github.com/maoxian3824/sysx/issues
|
|
12
|
+
Keywords: cli,system,monitoring,devops,procfs,sysinfo,console
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Intended Audience :: System Administrators
|
|
17
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
18
|
+
Classifier: Operating System :: MacOS
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
25
|
+
Classifier: Topic :: System :: Monitoring
|
|
26
|
+
Classifier: Topic :: System :: Systems Administration
|
|
27
|
+
Classifier: Topic :: Utilities
|
|
28
|
+
Requires-Python: >=3.8
|
|
29
|
+
Description-Content-Type: text/markdown
|
|
30
|
+
License-File: LICENSE
|
|
31
|
+
Provides-Extra: dev
|
|
32
|
+
Requires-Dist: build>=1.0; extra == "dev"
|
|
33
|
+
Requires-Dist: twine>=5.0; extra == "dev"
|
|
34
|
+
Dynamic: license-file
|
|
35
|
+
|
|
36
|
+
# sysx
|
|
37
|
+
|
|
38
|
+
> 轻量级系统信息与开发辅助 CLI 工具 — 纯 Python 标准库实现,零第三方依赖。
|
|
39
|
+
|
|
40
|
+
[](https://github.com/maoxian3824/sysx/actions/workflows/test.yml)
|
|
41
|
+
[](https://pypi.org/project/sysx-cli/)
|
|
42
|
+
[](https://www.python.org/)
|
|
43
|
+
[](LICENSE)
|
|
44
|
+
[](#)
|
|
45
|
+
|
|
46
|
+
`sysx` 把日常排查系统状态时零散用到的 `top`、`df`、`free`、`ip`、`ss` 等命令,
|
|
47
|
+
收敛成一套统一、可读、支持 JSON 输出的子命令集。适合放进 CI 脚本、容器镜像,
|
|
48
|
+
或者单纯想少记几个命令参数的时候。
|
|
49
|
+
|
|
50
|
+
## 特性
|
|
51
|
+
|
|
52
|
+
- **零依赖** — 只用 Python 标准库,`pip install` 不需要拉任何第三方包
|
|
53
|
+
- **JSON 输出** — 每个子命令都支持 `-j`,方便喂给 `jq` 或脚本解析
|
|
54
|
+
- **自动配色** — 输出到终端时着色;重定向到文件或管道时自动禁用
|
|
55
|
+
- **只读安全** — 全部操作仅读取 `/proc`、`/sys`,不做任何修改
|
|
56
|
+
- **跨平台降级** — Linux 下功能最全,macOS / Windows 下优雅降级不报错
|
|
57
|
+
|
|
58
|
+
## 安装
|
|
59
|
+
|
|
60
|
+
> **包名 vs 命令名**:PyPI 发行名是 `sysx-cli`(`sysx` 已被占用),
|
|
61
|
+
> 但安装后的运行命令仍是 `sysx`。
|
|
62
|
+
|
|
63
|
+
### 方式一:pip 安装(推荐)
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
pip install sysx-cli
|
|
67
|
+
sysx info
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 方式二:直接运行单文件(无需安装)
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
curl -LO https://raw.githubusercontent.com/maoxian3824/sysx/master/sysx.py
|
|
74
|
+
python3 sysx.py info
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 方式三:从源码
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
git clone https://github.com/maoxian3824/sysx.git
|
|
81
|
+
cd sysx
|
|
82
|
+
python3 sysx.py info
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 方式四:从 GitHub Release 安装
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
curl -LO https://github.com/maoxian3824/sysx/releases/latest/download/sysx_cli-1.0.0-py3-none-any.whl
|
|
89
|
+
pip install sysx_cli-1.0.0-py3-none-any.whl
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## 使用
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
sysx <命令> [选项]
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 子命令一览
|
|
99
|
+
|
|
100
|
+
| 命令 | 说明 |
|
|
101
|
+
|---|---|
|
|
102
|
+
| `info` | 系统概览:OS、内核、CPU、内存、运行时长、负载 |
|
|
103
|
+
| `mem` | 内存与交换分区使用情况(带进度条) |
|
|
104
|
+
| `disk` | 磁盘挂载点与使用率(按使用率排序) |
|
|
105
|
+
| `proc` | 占用最高的进程,可按 CPU / 内存排序 |
|
|
106
|
+
| `net` | 网络接口、MAC、链路状态、本机 IP、DNS |
|
|
107
|
+
| `ports` | 监听中的 TCP 端口 |
|
|
108
|
+
| `env` | 相关环境变量(Shell、语言工具链、容器等) |
|
|
109
|
+
| `uptime` | 运行时长与 1/5/15 分钟负载 |
|
|
110
|
+
| `doctor` | 开发环境体检:工具链、网络、磁盘余量 |
|
|
111
|
+
|
|
112
|
+
### 示例
|
|
113
|
+
|
|
114
|
+
**系统概览**
|
|
115
|
+
|
|
116
|
+
```console
|
|
117
|
+
$ sysx info
|
|
118
|
+
16b3429714a6
|
|
119
|
+
|
|
120
|
+
项目 值
|
|
121
|
+
-------------- -------------------------------
|
|
122
|
+
操作系统 Ubuntu 24.04.3 LTS
|
|
123
|
+
内核版本 6.6.117-45.11.6.tl4.x86_64
|
|
124
|
+
架构 x86_64
|
|
125
|
+
CPU AMD EPYC 9K84 96-Core Processor
|
|
126
|
+
CPU 核心 32
|
|
127
|
+
Python 3.11.1 (CPython)
|
|
128
|
+
运行时长 1h 41m 33s
|
|
129
|
+
启动时间 2026-10-06 17:45:39
|
|
130
|
+
负载 (1/5/15m) 2.78 / 2.16 / 2.24
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**内存**
|
|
134
|
+
|
|
135
|
+
```console
|
|
136
|
+
$ sysx mem
|
|
137
|
+
|
|
138
|
+
▸ 内存
|
|
139
|
+
总量 123.3 GB
|
|
140
|
+
已用 16.5 GB ████░░░░░░░░░░░░░░░░░░░░░░░░░░ 13.4%
|
|
141
|
+
可用 106.8 GB
|
|
142
|
+
缓存 97.0 GB
|
|
143
|
+
缓冲 1.4 GB
|
|
144
|
+
|
|
145
|
+
▸ 交换分区
|
|
146
|
+
未启用交换分区
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**进程(按 CPU 排序)**
|
|
150
|
+
|
|
151
|
+
```console
|
|
152
|
+
$ sysx proc -n 5
|
|
153
|
+
PID 名称 状态 CPU 内存 内存占比
|
|
154
|
+
---- --------------- -- ---- -------- -----
|
|
155
|
+
1323 envd S 8.0% 15.9 MB 0.01%
|
|
156
|
+
62 supervisord S 0.0% 13.8 MB 0.01%
|
|
157
|
+
91 node S 0.0% 55.7 MB 0.04%
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**开发环境体检**
|
|
161
|
+
|
|
162
|
+
```console
|
|
163
|
+
$ sysx doctor
|
|
164
|
+
✓ Python 3.11.1 (/usr/bin/python3)
|
|
165
|
+
✓ git /usr/bin/git
|
|
166
|
+
✓ docker /usr/local/bin/docker
|
|
167
|
+
✗ tmux 未安装
|
|
168
|
+
✓ root 权限 当前是 root
|
|
169
|
+
✓ DNS 解析 example.com → 172.66.147.243
|
|
170
|
+
✓ 外网连通 可访问 8.8.8.8:53
|
|
171
|
+
✓ 根分区余量 254.0 GB 可用 (99.2%)
|
|
172
|
+
|
|
173
|
+
18/19 项通过
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**JSON 输出(配合 jq)**
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
# 内存占用百分比
|
|
180
|
+
sysx mem -j | jq '.percent'
|
|
181
|
+
|
|
182
|
+
# 找出最占内存的 3 个进程名
|
|
183
|
+
sysx proc -j -n 3 -s mem | jq -r '.[].name'
|
|
184
|
+
|
|
185
|
+
# 列出所有监听端口号
|
|
186
|
+
sysx ports -j | jq -r '.[].port'
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## 选项
|
|
190
|
+
|
|
191
|
+
| 选项 | 适用命令 | 说明 |
|
|
192
|
+
|---|---|---|
|
|
193
|
+
| `-j, --json` | 全部 | 以 JSON 格式输出 |
|
|
194
|
+
| `-n, --limit N` | `proc` | 显示条数(默认 10) |
|
|
195
|
+
| `-s, --sort {cpu,mem}` | `proc` | 排序依据(默认 cpu) |
|
|
196
|
+
| `-V, --version` | 全局 | 显示版本号 |
|
|
197
|
+
| `-h, --help` | 全局 | 显示帮助 |
|
|
198
|
+
|
|
199
|
+
## 环境变量
|
|
200
|
+
|
|
201
|
+
| 变量 | 作用 |
|
|
202
|
+
|---|---|
|
|
203
|
+
| `NO_COLOR` | 设置后禁用彩色输出(遵循 [no-color.org](https://no-color.org/) 约定) |
|
|
204
|
+
|
|
205
|
+
## 实现说明
|
|
206
|
+
|
|
207
|
+
`sysx` 不依赖 `psutil` 等第三方库,直接解析内核暴露的接口:
|
|
208
|
+
|
|
209
|
+
| 数据 | 来源 |
|
|
210
|
+
|---|---|
|
|
211
|
+
| 内存 | `/proc/meminfo` |
|
|
212
|
+
| 运行时长 | `/proc/uptime` |
|
|
213
|
+
| 负载 | `/proc/loadavg` |
|
|
214
|
+
| 进程列表 | `/proc/<pid>/stat` |
|
|
215
|
+
| CPU 占用率 | 两次采样 `/proc/stat` 计算增量 |
|
|
216
|
+
| 磁盘挂载 | `/proc/mounts` + `shutil.disk_usage` |
|
|
217
|
+
| 网络接口 | `/sys/class/net/*` |
|
|
218
|
+
| DNS | `/etc/resolv.conf` |
|
|
219
|
+
| 监听端口 | `/proc/net/tcp`、`/proc/net/tcp6` |
|
|
220
|
+
|
|
221
|
+
**关于 CPU 占用率**:直接读 `/proc/<pid>/stat` 只能拿到进程的累计 CPU 时间,
|
|
222
|
+
除以总和会得出错误结果(长运行进程会被严重高估)。`sysx` 采用两次采样(间隔 250ms)
|
|
223
|
+
计算增量占比,结果与 `top` 一致。
|
|
224
|
+
|
|
225
|
+
**容器环境适配**:在 Docker / Kubernetes 中,`/proc/mounts` 会包含大量 bind mount,
|
|
226
|
+
同一块设备重复出现几十次。`sysx` 按设备去重并过滤快照层挂载点,输出干净的磁盘列表。
|
|
227
|
+
|
|
228
|
+
## 兼容性
|
|
229
|
+
|
|
230
|
+
| 平台 | 状态 |
|
|
231
|
+
|---|---|
|
|
232
|
+
| Linux | 完整支持 |
|
|
233
|
+
| macOS | 部分支持(无 `/proc`,`info`/`disk`/`doctor` 可用) |
|
|
234
|
+
| Windows | 基础支持(`info`/`doctor` 可用) |
|
|
235
|
+
|
|
236
|
+
## 开发
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
# 运行测试套件(46 个用例,纯标准库 unittest)
|
|
240
|
+
python3 -m unittest discover -s tests -v
|
|
241
|
+
|
|
242
|
+
# 严格模式:资源泄漏视为错误
|
|
243
|
+
python3 -W error::ResourceWarning -m unittest discover -s tests
|
|
244
|
+
|
|
245
|
+
# 构建并校验
|
|
246
|
+
python3 -m build
|
|
247
|
+
python3 -m twine check dist/* # PyPI 元数据校验
|
|
248
|
+
python3 scripts/check_no_deps.py # 零依赖校验
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
CI 在 Python 3.8 – 3.12 矩阵及 macOS 上自动运行上述检查,
|
|
252
|
+
详见 [.github/workflows/test.yml](.github/workflows/test.yml)。
|
|
253
|
+
|
|
254
|
+
发布到 PyPI 的完整流程见 [PUBLISHING.md](PUBLISHING.md)。
|
|
255
|
+
|
|
256
|
+
## License
|
|
257
|
+
|
|
258
|
+
MIT
|
sysx_cli-1.0.0/README.md
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# sysx
|
|
2
|
+
|
|
3
|
+
> 轻量级系统信息与开发辅助 CLI 工具 — 纯 Python 标准库实现,零第三方依赖。
|
|
4
|
+
|
|
5
|
+
[](https://github.com/maoxian3824/sysx/actions/workflows/test.yml)
|
|
6
|
+
[](https://pypi.org/project/sysx-cli/)
|
|
7
|
+
[](https://www.python.org/)
|
|
8
|
+
[](LICENSE)
|
|
9
|
+
[](#)
|
|
10
|
+
|
|
11
|
+
`sysx` 把日常排查系统状态时零散用到的 `top`、`df`、`free`、`ip`、`ss` 等命令,
|
|
12
|
+
收敛成一套统一、可读、支持 JSON 输出的子命令集。适合放进 CI 脚本、容器镜像,
|
|
13
|
+
或者单纯想少记几个命令参数的时候。
|
|
14
|
+
|
|
15
|
+
## 特性
|
|
16
|
+
|
|
17
|
+
- **零依赖** — 只用 Python 标准库,`pip install` 不需要拉任何第三方包
|
|
18
|
+
- **JSON 输出** — 每个子命令都支持 `-j`,方便喂给 `jq` 或脚本解析
|
|
19
|
+
- **自动配色** — 输出到终端时着色;重定向到文件或管道时自动禁用
|
|
20
|
+
- **只读安全** — 全部操作仅读取 `/proc`、`/sys`,不做任何修改
|
|
21
|
+
- **跨平台降级** — Linux 下功能最全,macOS / Windows 下优雅降级不报错
|
|
22
|
+
|
|
23
|
+
## 安装
|
|
24
|
+
|
|
25
|
+
> **包名 vs 命令名**:PyPI 发行名是 `sysx-cli`(`sysx` 已被占用),
|
|
26
|
+
> 但安装后的运行命令仍是 `sysx`。
|
|
27
|
+
|
|
28
|
+
### 方式一:pip 安装(推荐)
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
pip install sysx-cli
|
|
32
|
+
sysx info
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### 方式二:直接运行单文件(无需安装)
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
curl -LO https://raw.githubusercontent.com/maoxian3824/sysx/master/sysx.py
|
|
39
|
+
python3 sysx.py info
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 方式三:从源码
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
git clone https://github.com/maoxian3824/sysx.git
|
|
46
|
+
cd sysx
|
|
47
|
+
python3 sysx.py info
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 方式四:从 GitHub Release 安装
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
curl -LO https://github.com/maoxian3824/sysx/releases/latest/download/sysx_cli-1.0.0-py3-none-any.whl
|
|
54
|
+
pip install sysx_cli-1.0.0-py3-none-any.whl
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## 使用
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
sysx <命令> [选项]
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 子命令一览
|
|
64
|
+
|
|
65
|
+
| 命令 | 说明 |
|
|
66
|
+
|---|---|
|
|
67
|
+
| `info` | 系统概览:OS、内核、CPU、内存、运行时长、负载 |
|
|
68
|
+
| `mem` | 内存与交换分区使用情况(带进度条) |
|
|
69
|
+
| `disk` | 磁盘挂载点与使用率(按使用率排序) |
|
|
70
|
+
| `proc` | 占用最高的进程,可按 CPU / 内存排序 |
|
|
71
|
+
| `net` | 网络接口、MAC、链路状态、本机 IP、DNS |
|
|
72
|
+
| `ports` | 监听中的 TCP 端口 |
|
|
73
|
+
| `env` | 相关环境变量(Shell、语言工具链、容器等) |
|
|
74
|
+
| `uptime` | 运行时长与 1/5/15 分钟负载 |
|
|
75
|
+
| `doctor` | 开发环境体检:工具链、网络、磁盘余量 |
|
|
76
|
+
|
|
77
|
+
### 示例
|
|
78
|
+
|
|
79
|
+
**系统概览**
|
|
80
|
+
|
|
81
|
+
```console
|
|
82
|
+
$ sysx info
|
|
83
|
+
16b3429714a6
|
|
84
|
+
|
|
85
|
+
项目 值
|
|
86
|
+
-------------- -------------------------------
|
|
87
|
+
操作系统 Ubuntu 24.04.3 LTS
|
|
88
|
+
内核版本 6.6.117-45.11.6.tl4.x86_64
|
|
89
|
+
架构 x86_64
|
|
90
|
+
CPU AMD EPYC 9K84 96-Core Processor
|
|
91
|
+
CPU 核心 32
|
|
92
|
+
Python 3.11.1 (CPython)
|
|
93
|
+
运行时长 1h 41m 33s
|
|
94
|
+
启动时间 2026-10-06 17:45:39
|
|
95
|
+
负载 (1/5/15m) 2.78 / 2.16 / 2.24
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**内存**
|
|
99
|
+
|
|
100
|
+
```console
|
|
101
|
+
$ sysx mem
|
|
102
|
+
|
|
103
|
+
▸ 内存
|
|
104
|
+
总量 123.3 GB
|
|
105
|
+
已用 16.5 GB ████░░░░░░░░░░░░░░░░░░░░░░░░░░ 13.4%
|
|
106
|
+
可用 106.8 GB
|
|
107
|
+
缓存 97.0 GB
|
|
108
|
+
缓冲 1.4 GB
|
|
109
|
+
|
|
110
|
+
▸ 交换分区
|
|
111
|
+
未启用交换分区
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**进程(按 CPU 排序)**
|
|
115
|
+
|
|
116
|
+
```console
|
|
117
|
+
$ sysx proc -n 5
|
|
118
|
+
PID 名称 状态 CPU 内存 内存占比
|
|
119
|
+
---- --------------- -- ---- -------- -----
|
|
120
|
+
1323 envd S 8.0% 15.9 MB 0.01%
|
|
121
|
+
62 supervisord S 0.0% 13.8 MB 0.01%
|
|
122
|
+
91 node S 0.0% 55.7 MB 0.04%
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**开发环境体检**
|
|
126
|
+
|
|
127
|
+
```console
|
|
128
|
+
$ sysx doctor
|
|
129
|
+
✓ Python 3.11.1 (/usr/bin/python3)
|
|
130
|
+
✓ git /usr/bin/git
|
|
131
|
+
✓ docker /usr/local/bin/docker
|
|
132
|
+
✗ tmux 未安装
|
|
133
|
+
✓ root 权限 当前是 root
|
|
134
|
+
✓ DNS 解析 example.com → 172.66.147.243
|
|
135
|
+
✓ 外网连通 可访问 8.8.8.8:53
|
|
136
|
+
✓ 根分区余量 254.0 GB 可用 (99.2%)
|
|
137
|
+
|
|
138
|
+
18/19 项通过
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**JSON 输出(配合 jq)**
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
# 内存占用百分比
|
|
145
|
+
sysx mem -j | jq '.percent'
|
|
146
|
+
|
|
147
|
+
# 找出最占内存的 3 个进程名
|
|
148
|
+
sysx proc -j -n 3 -s mem | jq -r '.[].name'
|
|
149
|
+
|
|
150
|
+
# 列出所有监听端口号
|
|
151
|
+
sysx ports -j | jq -r '.[].port'
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## 选项
|
|
155
|
+
|
|
156
|
+
| 选项 | 适用命令 | 说明 |
|
|
157
|
+
|---|---|---|
|
|
158
|
+
| `-j, --json` | 全部 | 以 JSON 格式输出 |
|
|
159
|
+
| `-n, --limit N` | `proc` | 显示条数(默认 10) |
|
|
160
|
+
| `-s, --sort {cpu,mem}` | `proc` | 排序依据(默认 cpu) |
|
|
161
|
+
| `-V, --version` | 全局 | 显示版本号 |
|
|
162
|
+
| `-h, --help` | 全局 | 显示帮助 |
|
|
163
|
+
|
|
164
|
+
## 环境变量
|
|
165
|
+
|
|
166
|
+
| 变量 | 作用 |
|
|
167
|
+
|---|---|
|
|
168
|
+
| `NO_COLOR` | 设置后禁用彩色输出(遵循 [no-color.org](https://no-color.org/) 约定) |
|
|
169
|
+
|
|
170
|
+
## 实现说明
|
|
171
|
+
|
|
172
|
+
`sysx` 不依赖 `psutil` 等第三方库,直接解析内核暴露的接口:
|
|
173
|
+
|
|
174
|
+
| 数据 | 来源 |
|
|
175
|
+
|---|---|
|
|
176
|
+
| 内存 | `/proc/meminfo` |
|
|
177
|
+
| 运行时长 | `/proc/uptime` |
|
|
178
|
+
| 负载 | `/proc/loadavg` |
|
|
179
|
+
| 进程列表 | `/proc/<pid>/stat` |
|
|
180
|
+
| CPU 占用率 | 两次采样 `/proc/stat` 计算增量 |
|
|
181
|
+
| 磁盘挂载 | `/proc/mounts` + `shutil.disk_usage` |
|
|
182
|
+
| 网络接口 | `/sys/class/net/*` |
|
|
183
|
+
| DNS | `/etc/resolv.conf` |
|
|
184
|
+
| 监听端口 | `/proc/net/tcp`、`/proc/net/tcp6` |
|
|
185
|
+
|
|
186
|
+
**关于 CPU 占用率**:直接读 `/proc/<pid>/stat` 只能拿到进程的累计 CPU 时间,
|
|
187
|
+
除以总和会得出错误结果(长运行进程会被严重高估)。`sysx` 采用两次采样(间隔 250ms)
|
|
188
|
+
计算增量占比,结果与 `top` 一致。
|
|
189
|
+
|
|
190
|
+
**容器环境适配**:在 Docker / Kubernetes 中,`/proc/mounts` 会包含大量 bind mount,
|
|
191
|
+
同一块设备重复出现几十次。`sysx` 按设备去重并过滤快照层挂载点,输出干净的磁盘列表。
|
|
192
|
+
|
|
193
|
+
## 兼容性
|
|
194
|
+
|
|
195
|
+
| 平台 | 状态 |
|
|
196
|
+
|---|---|
|
|
197
|
+
| Linux | 完整支持 |
|
|
198
|
+
| macOS | 部分支持(无 `/proc`,`info`/`disk`/`doctor` 可用) |
|
|
199
|
+
| Windows | 基础支持(`info`/`doctor` 可用) |
|
|
200
|
+
|
|
201
|
+
## 开发
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
# 运行测试套件(46 个用例,纯标准库 unittest)
|
|
205
|
+
python3 -m unittest discover -s tests -v
|
|
206
|
+
|
|
207
|
+
# 严格模式:资源泄漏视为错误
|
|
208
|
+
python3 -W error::ResourceWarning -m unittest discover -s tests
|
|
209
|
+
|
|
210
|
+
# 构建并校验
|
|
211
|
+
python3 -m build
|
|
212
|
+
python3 -m twine check dist/* # PyPI 元数据校验
|
|
213
|
+
python3 scripts/check_no_deps.py # 零依赖校验
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
CI 在 Python 3.8 – 3.12 矩阵及 macOS 上自动运行上述检查,
|
|
217
|
+
详见 [.github/workflows/test.yml](.github/workflows/test.yml)。
|
|
218
|
+
|
|
219
|
+
发布到 PyPI 的完整流程见 [PUBLISHING.md](PUBLISHING.md)。
|
|
220
|
+
|
|
221
|
+
## License
|
|
222
|
+
|
|
223
|
+
MIT
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
# PyPI 上的发行包名。运行命令仍是 sysx(见 [project.scripts])。
|
|
7
|
+
# 注意:PyPI 上 sysx / systools / systool 均已被占用,故使用 sysx-cli。
|
|
8
|
+
name = "sysx-cli"
|
|
9
|
+
version = "1.0.0"
|
|
10
|
+
description = "轻量级系统信息与开发辅助 CLI 工具,纯标准库实现,零第三方依赖"
|
|
11
|
+
readme = "README.md"
|
|
12
|
+
requires-python = ">=3.8"
|
|
13
|
+
license = "MIT"
|
|
14
|
+
license-files = ["LICENSE"]
|
|
15
|
+
authors = [
|
|
16
|
+
{ name = "maoxian3824", email = "maoxian3824@users.noreply.github.com" },
|
|
17
|
+
]
|
|
18
|
+
keywords = ["cli", "system", "monitoring", "devops", "procfs", "sysinfo", "console"]
|
|
19
|
+
classifiers = [
|
|
20
|
+
"Development Status :: 5 - Production/Stable",
|
|
21
|
+
"Environment :: Console",
|
|
22
|
+
"Intended Audience :: Developers",
|
|
23
|
+
"Intended Audience :: System Administrators",
|
|
24
|
+
"Operating System :: POSIX :: Linux",
|
|
25
|
+
"Operating System :: MacOS",
|
|
26
|
+
"Programming Language :: Python :: 3",
|
|
27
|
+
"Programming Language :: Python :: 3.8",
|
|
28
|
+
"Programming Language :: Python :: 3.9",
|
|
29
|
+
"Programming Language :: Python :: 3.10",
|
|
30
|
+
"Programming Language :: Python :: 3.11",
|
|
31
|
+
"Programming Language :: Python :: 3.12",
|
|
32
|
+
"Topic :: System :: Monitoring",
|
|
33
|
+
"Topic :: System :: Systems Administration",
|
|
34
|
+
"Topic :: Utilities",
|
|
35
|
+
]
|
|
36
|
+
dependencies = []
|
|
37
|
+
|
|
38
|
+
[project.optional-dependencies]
|
|
39
|
+
dev = [
|
|
40
|
+
"build>=1.0",
|
|
41
|
+
"twine>=5.0",
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
[project.scripts]
|
|
45
|
+
# 运行命令保持 sysx,与发行包名解耦
|
|
46
|
+
sysx = "sysx:main"
|
|
47
|
+
|
|
48
|
+
[project.urls]
|
|
49
|
+
Homepage = "https://github.com/maoxian3824/sysx"
|
|
50
|
+
Repository = "https://github.com/maoxian3824/sysx"
|
|
51
|
+
Documentation = "https://github.com/maoxian3824/sysx#readme"
|
|
52
|
+
Changelog = "https://github.com/maoxian3824/sysx/blob/master/CHANGELOG.md"
|
|
53
|
+
Issues = "https://github.com/maoxian3824/sysx/issues"
|
|
54
|
+
|
|
55
|
+
[tool.setuptools]
|
|
56
|
+
py-modules = ["sysx"]
|
sysx_cli-1.0.0/setup.cfg
ADDED