Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
用户注销后自动清理敏感临时数据应优先通过pam模块在session close阶段触发,覆盖所有登录场景;辅以systemd用户服务兜底,并配置systemd-tmpfiles实现自动过期清理。

用户注销后自动清理敏感临时数据,核心是确保清理动作在会话真正结束时触发,且只影响当前用户归属的文件,不干扰系统或其他用户。靠~/.bash_logout不可行——它只对交互式 Bash 终端有效,图形界面、SSH 非交互式连接、崩溃断连等场景完全失效。
用 PAM 模块实现全场景登出清理(推荐)
PAM 在每次会话关闭(session close)阶段都会调用指定脚本,覆盖 TTY、X11、Wayland、SSH 所有登录方式,可靠性最高。
- 编辑
/etc/pam.d/common-session(Debian/Ubuntu)或/etc/pam.d/system-auth(RHEL/CentOS),在末尾添加一行:
session optional pam_exec.so /usr/local/bin/clean-user-sensitive.sh
- 脚本必须以
#!/bin/sh开头,不能用#!/usr/bin/env bash;PAM 环境中 PATH 极简,env常不可用 - 不要依赖
$HOME——登出时该变量常为空,改用getent passwd "$PAM_USER" | cut -d: -f6获取家目录 - 只清理明确属于当前用户的路径:
/tmp/$PAM_USER-*、/tmp/user-$(id -u "$PAM_USER")、~/.cache/*(跳过.cache/fontconfig、.cache/abrt等需长期保留项) - 加
set -e让脚本遇错即停;日志写入/var/log/user-clean.log(避免写进刚删的目录)
配合 systemd 用户服务兜底执行
当 PAM 因权限或配置异常未触发时,systemd --user 服务可作为第二道防线,尤其适合 GNOME/KDE 等桌面环境。
- 在
$HOME/.config/systemd/user/下创建clean-on-logout.service:
[Unit]<br>Description=Clean sensitive temp data on logout<br>After=multi-user.target
[Service]<br>Type=oneshot<br>ExecStart=/bin/sh -c 'rm -rf "$XDG_RUNTIME_DIR"/tmp-* "$XDG_CACHE_HOME"/session-* 2>/dev/null'<br>RemainAfterExit=yes
[Install]<br>WantedBy=default.target
- 启用服务:
systemctl --user enable clean-on-logout.service - 确保 linger 开启:
sudo loginctl enable-linger $USER(否则用户登出后服务无法运行)
让系统自动管理生命周期,减少“手动清理”依赖
比登出时扫一遍更安全的方式,是让临时目录本身具备自动过期能力:
- 为用户专属临时区配置
systemd-tmpfiles:在/etc/tmpfiles.d/user-temp.conf中写入
q /tmp/$USER-* 1777 $USER $USER 1hq /var/tmp/$USER-* 1777 $USER $USER 7d
- 运行
systemd-tmpfiles --clean /etc/tmpfiles.d/user-temp.conf验证无误后,该规则即生效 - 所有
/tmp/username-xxx类文件,1 小时无访问即被定时服务自动清理,无需登出钩子
关键注意事项
- 别碰
/tmp和/var/tmp根目录——普通用户无权删除他人文件,应只操作自己命名空间下的子路径 - 清理
~/.cache前加sleep 0.5,避开 Firefox、VS Code 等应用正在写缓存的瞬间 - 敏感数据若需防恢复,用
shred -u替代rm,但仅限小文件;大目录仍用rm -rf+ tmpfs 内存盘更高效 - 所有清理脚本首次部署前,先在测试账户中手动运行并检查日志,确认路径、权限、归属全部正确










