ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何查看电脑使用记录:Windows与macOS系统日志、浏览器历史与文件痕迹排查指南

如何查看电脑使用记录:Windows与macOS系统日志、浏览器历史与文件痕迹排查指南 简介这份doc文档面向需要了解电脑使用痕迹的普通用户与办公人员系统梳理了查看电脑使用记录的常见途径涵盖开机记录、文档操作记录与上网记录三大方向适合希望掌握基础排查方法、了解系统日志与历史记录存放位置的读者。资源包内含1个doc文件约30KB以图文步骤说明为主轻量易读无需额外工具即可对照操作。目前已有6304人学习下载说明该主题在日常电脑管理与维护中需求较高。文档具体展开的内容包括通过计划任务日志与事件查看器定位开关机时间借助Prefetch目录、Recent文件夹及History记录还原程序运行与文件打开历史以及利用Temporary Internet Files与IE历史记录查看上网痕迹并附有cmd下systeminfo等快捷查询方式。读者可据此快速建立一套查看电脑使用记录的完整思路用于个人设备自查、家庭电脑管理或基础运维场景。1. 如何查看电脑使用记录从开机到关机一台机器到底留下了多少痕迹很多人第一次认真想“如何查看电脑使用记录”都不是为了查别人而是自己踩了坑。比如笔记本借给同事用了半天回来发现浏览器里多了一堆陌生站点、某个软件被装到了 D 盘、系统设置被改得面目全非又或者家里孩子趁你不在用你的账号登录了游戏平台充值记录藏在某个你根本想不到的角落。这时候你才意识到Windows 和 macOS 其实一直在默默记账只是账本分散在事件日志、注册表、浏览器数据库、文件系统时间戳这些地方没有一个“一键查看全部”的按钮。这篇文章面向的是需要做本机使用痕迹排查的普通用户和一线运维你可能要确认一台公用电脑最近被谁动过也可能只是想知道自己昨天到底把文件存哪了。我会按“系统级日志 → 应用级痕迹 → 文件级证据”的顺序把 Windows 和 macOS 两条线都讲清楚每一步都给可复制的命令或路径并告诉你哪些记录默认关闭、哪些会被自动清理、哪些参数改了会翻车。看完你至少能独立完成一次完整的本机使用记录梳理而不是对着“事件查看器”里几万条日志发呆。2. Windows 系统级记录事件日志、开关机与登录审计怎么查Windows 的使用记录最权威的来源是事件查看器但它默认只保留有限类别很多关键审计项需要提前开启。这一章先把系统层面的记录讲透包括开关机时间、登录类型、程序执行痕迹以及怎么用命令行快速导出而不是在 GUI 里一页页翻。2.1 用 wevtutil 和 PowerShell 导出开关机与登录记录图形界面的事件查看器适合浏览但要做时间线梳理命令行效率高得多。下面这条 PowerShell 命令把系统日志里最近 7 天的开关机事件导成 CSV方便你用 Excel 排序# 导出最近7天的系统启动/关闭事件ID 6005 启动, 6006 关闭, 6008 异常关机 $start (Get-Date).AddDays(-7) Get-WinEvent -FilterHashtable { LogNameSystem ID6005,6006,6008 StartTime$start } | Select-Object TimeCreated, Id, Message | Export-Csv -Path $env:USERPROFILE\Desktop\boot_shutdown.csv -NoTypeInformation -Encoding UTF8逻辑说明Get-WinEvent的FilterHashtable比Where-Object过滤快一个数量级尤其在日志几十万条时差别明显。ID6005表示事件日志服务启动即开机6006表示正常关机6008表示上次关机异常。参数上StartTime建议不要超过 30 天否则单次查询可能卡住十几秒如果机器日志被循环覆盖过更早的记录根本不存在查了也是空。登录记录在安全日志里默认只有登录失败4625和部分成功登录4624会被记录且需要本地安全策略开启“审核登录事件”。查最近登录# 查询安全日志中的登录事件需要管理员权限运行 Get-WinEvent -FilterHashtable { LogNameSecurity ID4624,4625 StartTime(Get-Date).AddDays(-3) } -MaxEvents 200 | Select-Object TimeCreated, Id, {nUser;e{$_.Properties[5].Value}}, {nLogonType;e{$_.Properties[8].Value}} | Format-Table -AutoSizeLogonType是关键参数2 表示本地交互登录3 表示网络登录10 表示远程桌面。如果你只关心“有没有人坐在这台机器前用过”过滤LogonType2即可10则说明有人从别处连过来这个区别在排查时经常被忽略。2.2 程序执行痕迹Prefetch、UserAssist 与最近打开的文件事件日志不一定记录每个程序的启动但 Windows 为了加速启动会在C:\Windows\Prefetch下留下.pf文件文件名就是可执行程序名修改时间接近最后一次运行时间。直接看目录# 列出 Prefetch 目录中最近修改的 20 个执行痕迹 Get-ChildItem C:\Windows\Prefetch\*.pf | Sort-Object LastWriteTime -Descending | Select-Object -First 20 Name, LastWriteTime, Length注意Prefetch 默认开启但 SSD 上部分系统会关闭它以延长寿命如果目录为空不代表没人运行过程序只代表这项记录没开。另一个来源是注册表里的 UserAssist它记录通过资源管理器启动过的程序及运行次数路径在HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist键名是 ROT13 编码的需要解码才能读。常见做法是用 PowerShell 解码# 读取 UserAssist 并解码 ROT13 键名 $base HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist Get-ChildItem $base | ForEach-Object { $guid $_.PSChildName Get-ItemProperty $base\$guid\Count -ErrorAction SilentlyContinue | Get-Member -MemberType NoteProperty | Where-Object { $_.Name -notmatch ^PS } | ForEach-Object { $decoded -join ($_.Name.ToCharArray() | ForEach-Object { if ($_ -match [A-Za-z]) { [char](([int][char]$_ - 13)) } else { $_ } }) [PSCustomObject]{ Program $decoded } } } | Select-Object -First 30这段代码的坑在于 ROT13 只对字母生效路径里的数字和反斜杠要原样保留否则解码出来是乱码。UserAssist 只记录通过 Explorer 启动的程序命令行直接跑cmd再执行 exe 不会进这个列表所以它只能作为辅助证据不能当唯一依据。2.3 最近访问文件与跳转列表的读取边界Windows 的“最近使用的文件”存在%APPDATA%\Microsoft\Windows\Recent快捷方式文件名就是原文件名但指向路径需要解析.lnk。用 PowerShell 调 WScript.Shell 可以批量解析# 解析 Recent 目录下所有快捷方式的目标路径 $shell New-Object -ComObject WScript.Shell Get-ChildItem $env:APPDATA\Microsoft\Windows\Recent\*.lnk | ForEach-Object { $target $shell.CreateShortcut($_.FullName).TargetPath [PSCustomObject]{ Shortcut $_.Name; Target $target; LastWrite $_.LastWriteTime } } | Format-Table -AutoSize参数上没什么可调的但要注意如果用户用了清理工具或手动清空“最近使用”这个目录会空另外 OneDrive 同步的文件可能只留一个云占位符TargetPath会指向本地缓存路径而不是真实云端路径。跳转列表Jump List存在%APPDATA%\Microsoft\Windows\Recent\AutomaticDestinations是二进制格式普通用户不建议硬解用工具如 JumpLister 更稳但本文不展开第三方工具只讲系统自带可查的部分。3. 浏览器与应用层痕迹历史记录、账号活动与缓存数据库系统日志告诉你“什么时候有人用了电脑”浏览器和应用数据才告诉你“他看了什么、登了什么”。这一章覆盖 Chrome/Edge 的 History 数据库、Windows 活动历史以及常见办公软件的最近文档记录。3.1 直接读 Chrome/Edge 的 History SQLite 数据库Chrome 和 Edge 都把浏览历史存在 SQLite 文件里路径分别是Chrome%LOCALAPPDATA%\Google\Chrome\User Data\Default\HistoryEdge%LOCALAPPDATA%\Microsoft\Edge\User Data\Default\History如果浏览器正在运行文件会被锁定直接复制会失败。常见做法是先复制到临时目录再查# 在 PowerShell 中复制并查询 Chrome 历史记录需先关闭浏览器或复制副本 $src $env:LOCALAPPDATA\Google\Chrome\User Data\Default\History $tmp $env:TEMP\chrome_history_copy Copy-Item $src $tmp -Force # 使用 sqlite3 查询如果没有 sqlite3 可用 Python 的 sqlite3 模块 sqlite3 $tmp SELECT datetime(last_visit_time/1000000-11644473600,unixepoch,localtime) AS visit_time, title, url FROM urls ORDER BY last_visit_time DESC LIMIT 50;这里的关键参数是 Chrome 的时间戳它用 1601-01-01 起的微秒数所以要除以 1000000 再减去 11644473600 秒才能转成 Unix 时间。很多人直接拿这个数字当 Unix 时间戳结果查出来是 1600 多年这就是翻车点。如果没有 sqlite3 命令用 Python 三行就能替代import sqlite3, datetime conn sqlite3.connect(rC:\Users\你的用户名\AppData\Local\Google\Chrome\User Data\Default\History) for row in conn.execute(SELECT last_visit_time, title, url FROM urls ORDER BY last_visit_time DESC LIMIT 20): ts datetime.datetime(1601,1,1) datetime.timedelta(microsecondsrow[0]) print(ts, row[1], row[2])注意如果用户开了“无痕模式”这些记录不会写入 History如果用了多用户配置文件Default只是其中一个Profile 1、Profile 2要分别查。3.2 Windows 活动历史与时间线默认保留多久Windows 10/11 的“活动历史”记录你在哪些应用里打开了哪些文件路径在%LOCALAPPDATA%\ConnectedDevicesPlatform下的数据库但微软从某个版本起默认只保留本机活动且不跨设备同步。查看入口是“设置 → 隐私和安全性 → 活动历史”但更直接的是查注册表# 查看活动历史相关策略是否开启 Get-ItemProperty HKCU:\Software\Microsoft\Windows\CurrentVersion\ActivityHistory -ErrorAction SilentlyContinue如果这个键不存在或EnableActivityFeed为 0说明活动历史没开时间线里也不会显示。很多用户以为“时间线”一定在记录其实默认可能只保留 30 天且可被清理所以查不到不代表没发生只代表记录被关了或过期了。3.3 Office 最近文档与微信/QQ 文件接收记录Office 的最近文档存在%APPDATA%\Microsoft\Windows\Recent和注册表HKCU\Software\Microsoft\Office\16.0\Word\File MRU等处版本号 16.0 对应 Office 2016 及以上。直接读注册表# 读取 Word 最近文档列表 Get-ItemProperty HKCU:\Software\Microsoft\Office\16.0\Word\File MRU | Get-Member -MemberType NoteProperty | Where-Object { $_.Name -match ^Item } | ForEach-Object { $_.Name (Get-ItemProperty HKCU:\Software\Microsoft\Office\16.0\Word\File MRU).($_.Name) }微信和 QQ 的接收文件默认在Documents\WeChat Files和Documents\Tencent Files下按账号分目录文件修改时间就是接收时间。这里没有数据库可查只能靠文件系统时间戳所以如果用户手动改过系统时间时间戳就不可信——这是所有基于时间戳排查的共同边界。4. macOS 使用记录统一日志、知识库与终端历史macOS 的记录方式和 Windows 差异很大它更依赖log命令和~/Library下的知识库文件。这一章按“系统日志 → 应用痕迹 → 终端命令历史”的顺序讲命令都可以直接在终端里跑。4.1 用 log show 查开关机、登录与进程启动macOS 从 10.12 起用统一日志系统log show是主要查询工具。查最近一天的开关机事件# 查询最近24小时的开关机与登录相关日志 log show --last 24h --predicate eventMessage CONTAINS login OR eventMessage CONTAINS shutdown OR eventMessage CONTAINS boot --style compact参数说明--last 24h可以换成--start 2025-01-01 00:00:00指定时间范围--predicate是过滤表达式支持AND、OR但写得太宽会输出几万行建议先用--style compact减少字段。注意统一日志默认只保留几天到几周具体取决于磁盘空间和系统版本查太久之前的记录会提示无数据。4.2 知识库文件应用使用、下载与 Wi-Fi 连接记录macOS 把很多使用痕迹存在~/Library/Application Support/Knowledge/knowledgeC.db这是一个 SQLite 数据库记录应用启动、文件打开等事件。查询前先复制一份避免锁库# 复制知识库并查询最近的应用使用记录 cp ~/Library/Application\ Support/Knowledge/knowledgeC.db /tmp/knowledgeC_copy.db sqlite3 /tmp/knowledgeC_copy.db SELECT datetime(ZSTARTDATE978307200,unixepoch,localtime) AS start_time, ZVALUESTRING FROM ZOBJECT WHERE ZSTREAMNAME/app/usage ORDER BY ZSTARTDATE DESC LIMIT 30;这里的时间戳转换是 macOS 知识库的经典坑它用 2001-01-01 起的秒数所以要加 978307200 才能转成 Unix 时间。如果不加查出来是 2001 年附近的日期。ZSTREAMNAME还可以换成/app/activity、/display/isBacklit等分别对应不同事件类型但字段结构不固定建议先.schema ZOBJECT看列名再写查询。Wi-Fi 连接记录在/Library/Preferences/SystemConfiguration/com.apple.wifi.plist和com.apple.wifi-networks.plist里用plutil转成可读格式# 查看已知 Wi-Fi 网络列表 plutil -p /Library/Preferences/SystemConfiguration/com.apple.wifi.plist | grep -A2 SSID注意新版 macOS 对这些文件权限收紧普通用户可能读不了需要sudo而且系统可能把部分记录迁移到其他地方查不到时不要死磕这一个文件。4.3 终端历史与 shell 记录.zsh_history 的读取与限制macOS 默认 shell 是 zsh命令历史在~/.zsh_history但默认可能只记录部分命令且带时间戳格式。直接看# 查看 zsh 历史带时间戳 cat ~/.zsh_history | tail -50如果历史文件里出现: 1672531200:0;ls -la这种格式说明开了EXTENDED_HISTORY冒号中间的数字是 Unix 时间戳。如果没开就只有命令没有时间。另外如果用户在命令前加了空格且设置了HIST_IGNORE_SPACE这条命令不会进历史history -c也会清空当前会话记录。所以终端历史只能作为参考不能当作完整审计。5. 避坑与排查查不到记录时先看这 5 个地方这一章集中讲实际排查中最容易翻车的 5 种情况每条按“现象 → 原因 → 解决”写都是我在帮人看机器时反复遇到的。现象一事件查看器里安全日志是空的一条登录记录都没有。原因Windows 默认不审核登录事件安全日志只记录系统自带的部分事件4624/4625 需要本地安全策略开启“审核登录事件”。 解决运行secpol.msc→ 本地策略 → 审核策略 → 审核登录事件勾选“成功”和“失败”然后重启或等策略生效。已经过去的时间段不会补录只能从开启之后开始记。现象二Chrome 历史数据库复制出来是 0 字节或打不开。原因浏览器正在运行SQLite 文件被独占锁定Copy-Item有时会复制出一个空文件而不报错。 解决先完全退出 Chrome/Edge检查任务管理器里有没有残留进程或者用sqlite3的只读模式直接打开原文件sqlite3 file:...History?modero SELECT ...但只读模式在文件被锁时也可能失败最稳的还是复制副本。现象三Prefetch 目录是空的但明明有人运行过程序。原因SSD 上部分 Windows 版本默认关闭 Prefetch或者被优化工具清理过另外服务器版系统默认也不开。 解决检查注册表HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters下的EnablePrefetcher值为 0 表示关闭。如果关了只能靠事件日志里的程序启动记录或 UserAssist 补但两者覆盖范围都有限。现象四macOS 的 log show 查不到一周前的记录。原因统一日志有保留策略默认按磁盘空间滚动通常只留几天到几周旧日志会被自动删除。 解决如果提前知道要排查可以调整/etc/asl.conf或使用log config修改保留策略但已经删掉的无法恢复。日常排查建议把时间范围先设成--last 3d查不到再往前推不要一上来就--last 30d那样输出量太大反而看不清。现象五文件时间戳和实际使用时间对不上。原因用户手动改过系统时间、文件被复制时保留了原时间戳、或者云同步工具重写了修改时间。 解决不要只信一个时间戳交叉比对创建时间、修改时间、访问时间以及事件日志里的对应时间点。如果系统时间被改过事件日志里的时间也会跟着偏这时候只能靠外部证据比如网络登录记录、打印机日志来校准。6. 把零散记录串成时间线一个可复用的排查习惯查使用记录最怕的不是没数据而是数据太多、时间对不上。我自己的习惯是先把所有来源的时间统一成一张表按时间排序再挑出异常点。具体做法用 PowerShell 或 Python 把事件日志、浏览器历史、Recent 文件、Prefetch 的修改时间都导出成时间, 来源, 描述三列合并后按时间排序。下面是一个最小示例把 Chrome 历史和 Recent 文件合并import sqlite3, datetime, os, glob events [] # Chrome 历史 conn sqlite3.connect(rC:\Users\你的用户名\AppData\Local\Google\Chrome\User Data\Default\History) for ts, title, url in conn.execute(SELECT last_visit_time, title, url FROM urls): t datetime.datetime(1601,1,1) datetime.timedelta(microsecondsts) events.append((t, Chrome, url)) # Recent 快捷方式 for f in glob.glob(os.path.expanduser(r~\AppData\Roaming\Microsoft\Windows\Recent\*.lnk)): t datetime.datetime.fromtimestamp(os.path.getmtime(f)) events.append((t, Recent, os.path.basename(f))) # 按时间排序输出 for t, src, desc in sorted(events): print(t.strftime(%Y-%m-%d %H:%M:%S), src, desc[:80])这段代码的价值在于把不同时间基准统一成 Python 的 datetime避免手动换算出错。参数上唯一要改的是用户名和浏览器配置文件路径如果 Chrome 有多个 Profile把每个 History 都加进去。跑完你会得到一张按时间排列的列表哪段时间密集、哪段时间空白一眼就能看出来。验证方法拿一个你确定发生过的时间点比如你记得某天下午装了个软件看它有没有出现在合并后的时间线里。如果没出现说明对应来源没记录或时间偏了再单独去查那个来源。这个交叉验证习惯比任何单一工具都可靠。最后说个我自己的教训早期我帮人查记录只看了浏览器历史就下结论结果漏了系统日志里明显的远程登录记录差点误判。从那以后我固定按“系统日志 → 应用痕迹 → 文件时间戳”三层过一遍哪怕多花十分钟也比返工强。希望帮到你。本文还有配套的精品资源点击获取
返回列表