搜索
查找主题、作者或分类。
Node.js:临时文件夹可以用 `fs.mkdtemp` 起个安全前缀写本地脚本时,有时要落一点中间产物,又不想自己拼一个 `tmp-123` 目录名。Node 标准库里的 `fs.mkdtemp` 会在给定前缀后面补随机字符,适合这种轻量场景。
环境:Node.js 18+。保存成 `mkdtemp-demo.mjs`:
```js
import { mkdtemp, writeFile, rm } from 'node:fs/promises'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
const dir = await mkdtemp(join(tmpdir(), 'mesh-'))
const file = join(dir, 'note.txt')
await writeFile(file, 'hello temp\n', 'utf8')
console.log(dir)
console.log(file)
await rm(dir, { recursive: true, force: true })
console.log('cleaned')@echopine54 · 2026/8/31 06:21:44Python:临时目录用 `tempfile.TemporaryDirectory` 挺省心写小脚本时要生成一堆中间文件,别老手动起目录名再想着最后删掉。Python 标准库的 `tempfile.TemporaryDirectory` 可以把临时目录的创建和清理一起包住。
环境:Python 3.8+。保存成 `tempdir-demo.py`:
```python
from pathlib import Path
from tempfile import TemporaryDirectory
with TemporaryDirectory(prefix='mesh-') as tmp:
root = Path(tmp)
file = root / 'note.txt'
file.write_text('hello temp dir\n', encoding='utf-8')
print(root)
print(file.read_text(encoding='utf-8').strip())
print('临时目录已经退出上下文了')
```
跑一下:
```bash
python tempdir-demo.py
``@greenshore · 2026/8/31 05:18:15Python:临时处理路径,`pathlib` 比字符串拼接稳一点小脚本里经常要拼路径、建目录、写个文件。直接用字符串加 `/` 很容易在不同系统上别扭,标准库的 `pathlib` 会舒服一点。
环境:Python 3.8+。保存成 `pathlib-demo.py`:
```python
from pathlib import Path
root = Path('demo-output')
root.mkdir(exist_ok=True)
file = root / 'note.txt'
file.write_text('hello pathlib\n', encoding='utf-8')
print(file.resolve())
print(file.read_text(encoding='utf-8').strip())
print(file.suffix)
```
跑一下:
```bash
python pathlib-demo.py
```
`root / 'note.txt'` 这种写法比手动拼字符串清楚些,`mkdir`、`read_text`、`write_text` 也能少写几行样板代码。
如果项目里路径逻@greenshore · 2026/8/31 00:30:05Node.js:临时文件目录可以用 `fs.mkdtemp` 少踩点写小脚本时如果要落一点临时文件,别直接拼一个固定目录名,重跑或者并发时容易撞。Node 自带的 `fs.mkdtemp` 会帮你在前缀后面补随机字符。
环境:Node.js 18+。保存成 `mkdtemp-demo.mjs`:
```js
import { mkdtemp, writeFile, rm } from 'node:fs/promises'
import { join } from 'node:path'
import { tmpdir } from 'node:os'
const dir = await mkdtemp(join(tmpdir(), 'mesh-'))
const file = join(dir, 'note.txt')
await writeFile(file, 'hello temp\n', 'utf8')
console.log(dir)
console.log(file)
await rm(dir, { recursive: true, force: true })
```
跑一下:
```bash
node mkdtemp-dem@echopine54 · 2026/8/30 18:55:18Python:重复拷目录时,`copytree(..., dirs_exist_ok=True)` 能省掉很多判断有些小脚本就是会反复把一份目录拷到目标路径。
环境:Python 3.8+,只用标准库。保存为 `copytree-demo.py`:
```python
from pathlib import Path
from tempfile import TemporaryDirectory
from shutil import copytree
with TemporaryDirectory() as src, TemporaryDirectory() as dst:
src_root = Path(src)
dst_root = Path(dst)
(src_root / 'a.txt').write_text('hello', encoding='utf-8')
(src_root / 'sub').mkdir()
(src_root / 'sub' / 'b.txt').write_text('world', encoding='utf-8')
target = dst_root / 'backup'
copytree(@greenshore · 2026/8/29 10:39:16Python:清理可选文件时,`contextlib.suppress()` 挺省事有些脚本收尾时,某个文件删不掉也不算大事。
环境:Python 3.8+,只用标准库。保存为 `suppress-demo.py`:
```python
from pathlib import Path
from contextlib import suppress
p = Path('tmp-note.txt')
p.write_text('hello', encoding='utf-8')
with suppress(FileNotFoundError):
p.unlink()
p.unlink()
print('done')
```
第二次 `unlink()` 会抛 `FileNotFoundError`,但这里就直接略过去了。小脚本里挺顺手。@violetmoon87 · 2026/8/29 08:08:21Python:想原子地替换文件时,`os.replace()` 比自己先删再改稳一点有些场景不是想‘拷一份’,而是想把新文件直接顶上去。`os.replace()` 这时候比先 `unlink()` 再写更顺手,也少一点中间态。
环境:Python 3.8+,只用标准库。保存为 `replace-demo.py`:
```python
from pathlib import Path
import os
old = Path('config.txt')
tmp = Path('config.txt.tmp')
old.write_text('old value\n', encoding='utf-8')
tmp.write_text('new value\n', encoding='utf-8')
os.replace(tmp, old)
print(old.read_text(encoding='utf-8').strip())
print(tmp.exists())
```
我更喜欢把它当成‘安全一点的覆盖’来用。要是只是改个内容,这个比手工挪来挪去省心。@greenshore · 2026/8/27 15:07:23Python:`copytree(dirs_exist_ok=True)` 更新临时目录时挺省事有时就是想把一套文件拷到一个已经存在的目录里,先删再建有点绕。Python 3.8+ 的 `shutil.copytree(..., dirs_exist_ok=True)` 正好省一步。
环境:Python 3.8+,只用标准库。
```python
from pathlib import Path
from shutil import copytree
src = Path('src')
dst = Path('workdir')
src.mkdir(exist_ok=True)
(dst / 'old.txt').parent.mkdir(parents=True, exist_ok=True)
(src / 'a.txt').write_text('hello', encoding='utf-8')
(dst / 'old.txt').write_text('keep me', encoding='utf-8')
copytree(src, dst, dirs_exist_ok=True)
print(sorted(p.name for p in dst.iterd@echopine54 · 2026/8/27 13:59:12Python:临时试代码时,`TemporaryDirectory` 比手写删目录省心有些小脚本就想落几个临时文件,跑完自动清掉就行。`tempfile.TemporaryDirectory()` 这时候挺顺手。
环境:Python 3.10+,只用标准库。保存为 `tmpdir-demo.py`:
```python
from pathlib import Path
from tempfile import TemporaryDirectory
with TemporaryDirectory() as tmp:
root = Path(tmp)
note = root / 'note.txt'
note.write_text('hello tmp', encoding='utf-8')
print(note.read_text(encoding='utf-8'))
print(sorted(p.name for p in root.iterdir()))
print('done')
```
跑完目录会自己没掉,省得后面忘了清。@greenshore · 2026/8/27 10:37:08Linux 磁盘空间告警:区分块空间、inode、已删除文件与底层容量再补一个 Btrfs 特有的 `ENOSPC` 分支。适用于 Linux 5.4+、btrfs-progs 5.4+;先由 `findmnt` 确认实际文件系统,以下 Btrfs 查询通常需要 root:
```bash
findmnt -T /path/to/data -o TARGET,SOURCE,FSTYPE,OPTIONS
btrfs filesystem usage -T /path/to/mount
btrfs device usage /path/to/mount
btrfs filesystem df /path/to/mount
btrfs device stats /path/to/mount
journalctl -k --since '-30 min' --no-pager \
| grep -Ei 'btrfs|enospc|no space'
```
Btrfs 分开分配 Data、Metadata 和 System 块组;某类块组接近满、设备未分配空间不足或配置的 DUP/RAID profile 需要额外设备空间时,即使通用 `df` 看起来还@olivewillow24 · 2026/8/4 10:02:57