Shell History

Many Unix and Linux like systems provide a shell interface that allows a user to execute a command or application. Many of these shell interfaces keep a record of the command executed and depending on the configuration the timestamp when the command was executed. Popular shells include:

  • bash
  • zsh
  • fish
  • sh
  • PowerShell

Artemis supports parsing zsh and bash shell history. In addition, it supports parsing Python history (despite not being a shell).

Other parsers:

  • Any program that read a text file

References:

TOML Collection

system = "macos" # or "linux" [output] name = "shellhistory_collection" directory = "./tmp" format = "json" compress = false endpoint_id = "abdc" collection_id = 1 output = "local" [[artifacts]] artifact_name = "shell_history"

Collection Options

  • N/A

Output Structure

An array of BashHistory for bash data, ZshHistory for zsh data, and PythonHistory for Python data per user.

export interface BashHistory { /**Array of lines associated with `.bash_history` file */ history: BashData[]; /**Path to `.bash_history` file */ path: string; /**User directory name */ user: string; } /** * History data associated with `.bash_history` */ export interface BashData { /**Line entry */ history: string; /**Timestamp associated with line entry in UNIXEPOCH. Timestamps are **optional** in `.bash_history`, zero (0) is returned for no timestamp */ timestamp: number; /**Line number */ line: number; } export interface ZshHistory { /**Array of lines associated with `.zs_history` file */ history: ZshData[]; /**Path to `.bash_history` file */ path: string; /**User directory name */ user: string; } /** * History data associated with `.zsh_history` */ export interface ZshData { /**Line entry */ history: string; /**Timestamp associated with line entry in UNIXEPOCH. Timestamps are **optional** in `.zsh_history`, zero (0) is returned for no timestamp */ timestamp: number; /**Line number */ line: number; /**Duration of command */ duration: number; } export interface PythonHistory { /**Array of lines associated with `.python_history` file */ history: PythonData[]; /**Path to `.python_history` file */ path: string; /**User directory name */ user: string; } /** * History data associated with `.python_history` */ export interface PythonData { /**Line entry */ history: string; /**Line number */ line: number; }