Skip to content

Commit 8bf4dcb

Browse files
committed
post: hk server ssh config
1 parent 113e4d7 commit 8bf4dcb

File tree

33 files changed

+2142
-112
lines changed

33 files changed

+2142
-112
lines changed
Lines changed: 203 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,212 @@
11
+++
22
date = '2025-10-30T8:00:00+08:00'
3-
draft = false
3+
draft = true
44
title = 'Python Standrad Library - Python Runtime Services - sys'
55
tags = ['Python']
66
+++
77

88
# sys - System-specific pararmeters and functions
99

1010
该模块提供解释器使用或报错的变量的访问,以及一些和解释器强互动的函数。
11+
12+
- `sys.abiflags`
13+
Python 解释器的 ABI (Application Binary Interface) 标志字符串,用于表示 Python 解释器的编译配置。
14+
15+
API 是应用程序二进制接口,定义了程序在二进制级别如何交互。
16+
17+
- `sys.addaudithook(hook)`
18+
将可调用的对象 hook 附加到当前(子)解释器的审计钩子 (Audit Hook) 列表中,用于监控和记录 Python 运行时的敏感操作。
19+
20+
这里的 hook 是一个回调函数 (Callback Function): 把一个函数作为参数传递给另一个函数,并在合适的时机”回头调用“它。
21+
22+
- `sys.argv`
23+
一个列表,其中包含了被传递给 Python 脚本的命令行参数。
24+
`argv[0]` 为脚本名称,如果通过命令参数 `-c` 执行,则 `argv[0]` 会被设置为字符串 `-c`
25+
如果没有脚本名,则为空字符串。
26+
27+
- `sys.audit(event, *args)`
28+
引发一个审计事件并触发任何激活的审计钩子。
29+
30+
- `sys.base_exex_prefix`
31+
32+
- `sys.base_prefix`
33+
34+
| 属性 | 系统 Python | 虚拟环境 | 说明 |
35+
| -------------------- | ----------- | ------------- | ---------------------------- |
36+
| sys.prefix | /usr/local | /path/to/venv | 当前环境的纯 Python 文件路径 |
37+
| sys.base_prefix | /usr/local | /usr/local | 原始安装的纯 Python 文件路径 |
38+
| sys.exec_prefix | /usr/local | /path/to/venv | 当前环境的二进制文件路径 |
39+
| sys.base_exec_prefix | /usr/local | /usr/local | 原始安装的二进制文件路径 |
40+
41+
- `sys.byteorder`
42+
本地字节顺序的指示符,在大端序(最高有效位有限)操作系统上值为 `'big'`,小端序操作系统为 `'little'`
43+
44+
- `sys.call_tracing(func, args)`
45+
在追踪函数内部,重新启用追踪,临时恢复追踪,用于调速器、性能分析工具、代码覆盖率工具等。
46+
当启动跟踪时,调用 `func(*args)`,跟踪状态码将被保留,并在以后恢复。
47+
48+
- `sys.copyright`
49+
字符串,包含了 Python 解释器相关的版权信息。
50+
51+
- `sys.breakpointhook()`
52+
本钩子函数由内建函数 breakpoint() 调用,默认情况下,会进入 pdb 调试器,可以将其修改为任何其他函数,已选择使用哪个调试器。
53+
54+
- `sys.dllhandle`
55+
指向 Python DLL 句柄的整数 (windows)。
56+
57+
- `sys.displayhook(value)`
58+
如果 value 不是 `None`,则将 `repr(value)` 打印至 `sys.stdout`,并将 value 保存在 `builtins._` 中。
59+
如果 `repr(value)` 无法用 `sys.stdout.errors` 错误处理方案编码为 `sys.stdout.encoding`,则用 `'backslashreplace'` 错误处理方案将其编码为 `sys.stdout.encoding`
60+
61+
- `sys.dont_write_bytecode`
62+
若为 true, 则 Python 导入源码模块时将不会尝试写入 `.pyc` 文件,该值会被初始化为 `True``False`,依据 `-B` 命令选项和 `PYTHONDONTWRITEBYTECODE` 环境变量,可以自行设置是否生成字节码文件。
63+
64+
- `sys.pycache_prefix`
65+
如果设置了该值 (不能为 None),Python 会将字节码缓存文件 `.pyc` 写入到以该值指定的目录为根的并行目录树中(并从中读取),而不是在源代码树的 `__pycache__` 目录下读写。
66+
67+
- `sys.excepthook(type, value, traceback)`
68+
本函数会将所有的回溯和异常输出到 `sys.stderr` 中。
69+
70+
- `sys.execption()`
71+
当此函数在某个异常处理器执行过程中被调用时,将返回被该处理器所捕获的异常实例。
72+
当有多个异常处理器嵌套时,只有最内层处理器所处理的异常可以被访问到。
73+
如果没有异常处理器在执行,此函数将返回 `None`
74+
75+
- `sys.exc_info()`
76+
此函数返回被处理异常的旧表示形式,如果异常 `e` 已被处理,则将返回元组。
77+
78+
- `sys.exec_prefix`
79+
一个字符串,提供特定领域的目录前缀
80+
81+
- `sys.executable`
82+
字符串,提供 Python 解释器可执行二进制文件的绝对路径。
83+
84+
- `sys.exit([arg])`
85+
引发一个 SystemExit 异常,表达打算退出解释器。
86+
87+
- `sys.flags`
88+
具名元组 flags 含有命令行标志的状态,这些属性只读。
89+
90+
- `sys.float_info`
91+
具名元组,存储浮点型相关数据。
92+
93+
- `sys.float_repr_style`
94+
字符串,反因 `repr()` 函数在浮点数上的行为。
95+
96+
- `sys.getalllocatedblocks()`
97+
返回当前解释器的内存块数量,无论其大小。
98+
99+
- `sys.getunicodeinternalsize()`
100+
返回已被处置的 unicode 对象数量
101+
102+
- `sys.getdefaultencoding()`
103+
返回 `'utf-8'`,默认字符编码的名称
104+
105+
- `sys.getfilesystemcoding()`
106+
获取文件系统编码格式:该编码格式与 文件系统错误处理器 一起使用以便在 Unicode 文件名和字节文件名之间进行转换。
107+
108+
- `sys.getfilesystemcodeerrors()`
109+
获取文件系统错误处理器:该错误处理器与 文件系统编码格式 一起使用以便在 Unicode 文件名和字节文件名之间进程转换。
110+
111+
- `sys.get_int_max_str_digits()`
112+
返回 整数字符串转换长度限制 的当前值。
113+
114+
- `sys.getrefcount(object)`
115+
获取 object 的引用计数,返回数量通常比预期多,因为它包括了作为 `getrefcount()` 参数在这一次引用。
116+
117+
- `sys.getrecursionlimit()`
118+
返回当前的递归限制,即 Python 解释器堆栈的最大深度。
119+
此限制可防止无限递归导致的 C 堆栈溢出和 Python 崩溃。
120+
121+
- `sys.getsizeof(object, [, default])`
122+
返回对象的大小(以字节为单位)。
123+
该对象可以是任何类型。
124+
所有内建对象返回的结果都是正确的,但对于第三方扩展不一定正确,因为这与具体实现有关。
125+
126+
- `sys.getswitchinterval()`
127+
返回解释器的以秒为单位的“线程切换间隔时间”
128+
129+
- `sys.getobjects(limit[, type])`
130+
此函数仅当 CPython 使用专门的配置选项 `--with-trace-refs` 构建时才存在。 它仅针对调试垃圾回收问题而设计。
131+
132+
- `sys.getprofile()`
133+
返回由 `setprofile()` 设置的性能分析函数。
134+
135+
- `sys.gettrace()`
136+
返回由 `settrace()` 设置的跟踪函数。
137+
138+
- `sys.get_coroutine_origin_tracking_depth()`
139+
获取由 `set_coroutine_origin_tracking_depth()` 设置的协程来源的追踪深度。
140+
141+
- `sys.hash_info`
142+
一个具名元组,给出数字类型的哈希的实现参数。
143+
144+
- `sys.hexversion`
145+
编码为单个整数的版本号。
146+
147+
- `sys.implementation`
148+
一个对象,该对象包含当前运行的 Python 解释器的实现信息。
149+
150+
- `sys.int_info`
151+
一个 具名元组,包含 Python 内部整数表示形式的信息。这些属性是只读的。
152+
153+
- `sys.intern(string)`
154+
将 string 插入 "interned" 字符串表,返回被插入的字符串。
155+
156+
- `sys.is_finalizing()`
157+
如果 Python 解释器 正在关闭 则返回 `True`,否则返回 `False`
158+
159+
- `sys.last_exc`
160+
该变量并非总是会被定义;当有未处理的异常时它将被设为相应的异常实例并且解释器将打印异常消息和栈回溯。
161+
它的预期用途是允许交互用户导入调试器模块并进行事后调试而不必重新运行导致了错误的命令。
162+
163+
- `sys.maxsize`
164+
一个整数,表示 Py_ssize_t 类型的变量可以取到的最大值。在 32 位平台上通常为 `2**31 - 1`,在 64 位平台上通常为 `2**63 - 1`
165+
166+
- `sys.maxunicode`
167+
一个整数,表示最大的 Unicode 码点值
168+
169+
- `sys.modules`
170+
这是一个字典,它将模块名称映射到已经被加载的模块。
171+
172+
- `sys.orig_argv`
173+
传给 Python 可执行文件的原始命令行参数列表。
174+
175+
- `sys.path`
176+
一个字符串组成的列表,用于指定模块的搜索路径。
177+
初始化自环境变量 PYTHONPATH,再加上一条与安装有关的默认路径。
178+
179+
- `sys.path_hooks`
180+
一个由可调用对象组成的列表,这些对象接受一个路径作为参数,并尝试为该路径创建一个查找器。
181+
如果成功创建查找器,则可调用对象将返回它,否则将引发 ImportError 异常。
182+
183+
- `sys.path_importer_cache`
184+
一个字典,作为 查找器 对象的缓存。
185+
186+
- `sys.platform`
187+
本字符串是一个平台标识符,该标识符可用于将特定平台的组件追加到 sys.path 中。
188+
189+
- `sys.prefix`
190+
一个指定用于安装与平台无关的 Python 文件的站点专属目录前缀的字符串。
191+
192+
- `sys.ps1`, `sys.ps2`
193+
字符串,用于指定解释器的首要和次要提示符,仅当交互模式时才有定义。
194+
初值为 `>>>``...`
195+
196+
- `sys.set_int_max_str_digits`
197+
设置解释器所使用的 整数字符串转换长度限制。
198+
199+
- `sys.setprofile(profilefunc)`
200+
设置系统的性能分析函数,该函数使得在 Python 中能够实现一个 Python 源码性能分析器。
201+
202+
- `sys.setrecursionlimit(limit)`
203+
将 Python 解释器堆栈的最大深度设置为 limit。
204+
此限制可防止无限递归导致的 C 堆栈溢出和 Python 崩溃。
205+
206+
- `sys.setswitchinterval(interval)`
207+
设置解释器的线程切换间隔时间(单位为秒)。
208+
该浮点数决定了“时间片”的理想持续时间,时间片将分配给同时运行的 Python 线程。
209+
210+
- `sys.settrace(tracefunc)`
211+
设置系统的跟踪函数,使得用户在 Python 中就可以实现 Python 源代码调试器。
212+
该函数是特定于单个线程的,所以要让调试器支持多线程,必须为正在调试的每个线程都用 `settrace()` 注册一个跟踪函数,或使用 `threading.settrace()`
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
+++
2+
date = '2025-11-05T8:00:00+08:00'
3+
draft = false
4+
title = 'PostgreSQL 01: Introduction'
5+
tags = ['PostgreSQL']
6+
+++
7+
8+
## PostgreSQL 的安装与配置
9+
10+
### 安装
11+
12+
brew 安装后 `brew services start postgresql@17` 可以启动服务,使用 `brew services list` 查看服务状态。
13+
也可以通过设定环境变量 `export PGDATA=/opt/homebrew/var/postgresql@17` 后使用命令 `initdb` 创建数据库簇,然后 `pg_ctl start -D $PGDATA` 启动。
14+
停止命令为 `pg_ctl stop -D $PGDATA [-m SHOWDOWN-MODE]`,其中 -m 是服务器停止方法:
15+
16+
- smart: 等所有连接终止后,关闭数据库。如果客户端连不上,则无法关闭数据库。
17+
18+
- fast: 快速关闭数据库,断开客户端连接,让已有的事务回滚,然后关闭数据库。相当于 Oracle 关闭时的 immediate 模式。
19+
20+
- immediate: 立即关闭数据库,相当于数据库进程立即停止,直接退出,下次启动数据库需要恢复。相当于 Oracle 关闭时的 abort 模式。
21+
22+
> PostgreSQL 数据库中的 immediate 关机模式相当于 Oracle 数据库中的 abort 关机模式,而 Oracle 中的 immediate 关机模式实际上对应的是 PostgreSQL 中的 fast 模式。
23+
24+
### 配置
25+
26+
PostgreSQL 数据库的配置主要通过修改数据目录下的 postgresql.conf 和 pg_hba.conf 文件来实现的。
27+
28+
pg_hda.conf 文件是一个很白名单的访问配置文件,可以控制允许哪些 IP 地址的机器访问数据库。
29+
默认数据库无法接受远程连接,因此默认情况下 pg_hba.conf 中没有对应的配置项,可以在文件中加入下面命令
30+
31+
```
32+
host all all 0/0 md5
33+
```
34+
35+
该命令允许任何用户远程连接到本地数据库,连接时需要提供密码。
36+
37+
#### IP 和 端口
38+
39+
postgresql.conf 可以修改监听的 IP 和端口,找到以下内容:
40+
41+
```
42+
# listen_address = 'localhost'
43+
# port = 5432
44+
```
45+
46+
其中,"listen_address" 默认监听 "localhost",如果要接受远程登陆,修改为 "\*" 表示在本地所有地址上监听。
47+
"port" 表示监听的数据库端口,默认 "5432"。
48+
49+
```
50+
listen_address = '*'
51+
port = 5432
52+
```
53+
54+
修改这两个参数要重启数据库才能生效。
55+
56+
#### 日志
57+
58+
日志收集一般需要打开(默认开启),日志目录一般使用默认值即可
59+
60+
```
61+
logging_collection = on
62+
log_directory = 'pg_log'
63+
```
64+
65+
日志切换和是否覆盖可以使用如下几种不同的方案:
66+
67+
1. 每天生成一个新的日志文件
68+
69+
```
70+
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
71+
log_truncate_on_rotation = off
72+
log_rotation_age = 1d
73+
log_rotation_size = 0
74+
```
75+
76+
2. 每当日志写满一定的大小,切换一个日志
77+
78+
```
79+
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
80+
log_truncate_on_rotation = off
81+
log_rotation_age = 0
82+
log_rotation_size = 10M
83+
```
84+
85+
3. 只保留最近 7 天的日志,进行循环覆盖(默认)
86+
87+
```
88+
log_filename = 'postgresql-%a.log'
89+
log_truncate_on_rotation = on
90+
log_rotation_age = id
91+
log_rotation_size = 0
92+
```
93+
94+
#### 内存参数
95+
96+
- shared_buffers: 共享内容的大小,默认 32MB
97+
- work_mem: 单 SQL 执行时,以及排序、Hash Join 时使用的内存,SQL 运行完毕后,该内存就会释放
98+
99+
#### 其他功能
100+
101+
- 数据块 checksum 功能
102+
对于一些数据可靠性很高的场景,例如金融领域,建议打开数据块校验功能
103+
```
104+
initdb -k
105+
```
106+
使用 `pg_checksums -c` 检查当前数据库是否打开了 checksum 功能 (需要关闭数据库),
107+
命令 `pg_checksums -e -P` 将数据库转换成具有 checksum 功能的数据库,其中 `-P` 参数是为了显示进度。

0 commit comments

Comments
 (0)