---
name: "checksec"
section: "1"
platform: "linux"
package: "checksec"
version: "3.2.0-2"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/checksec"
---

# checksec(1)

check executable and kernel security properties

## NAME

**checksec** – check executable and kernel security properties

## SYNOPSIS

**checksec** \[**--help**\] \[**--version**\] \[**--output** *table\|xml\|json\|yaml*\] \[**--libc** *path*\] \[**--no-banner**\] \[**--no-headers**\] \[**--no-warnings**\] \[**--color** *auto\|always\|never*\] *command* \[*command-options*\]

## DESCRIPTION

**checksec** is a Go implementation of the checksec utility. It inspects ELF binaries and the running kernel for common hardening features such as RELRO, NX, PIE, RPATH/RUNPATH, stack canaries, Clang CFI hints, and fortify-able libc usage. Results can be printed as a table or serialized for machine consumption.

## GLOBAL OPTIONS

- **-h**, **--help**

  Display help and exit.

- **-v**, **--version**

  Show version and exit.

- **-o**, **--output**=*table\|xml\|json\|yaml*

  Set output format. Default is **table**.

- **-l**, **--libc**=*path*

  Set libc location (useful for **fortify** checks on offline/embedded filesystems).

- **--no-banner**

  Disable the startup banner.

- **--no-headers**

  Disable table headers.

- **--no-warnings**

  Suppress warning messages (e.g., missing libc, unreadable symbol tables).

- **--color**=*auto\|always\|never*

  Control color output. Default is **auto** (color when writing to a terminal). Use **always** to preserve color through pipes.

## COMMANDS

- **file** *path*

  Inspect a single ELF file.

- **dir** *directory*

  Inspect all ELF files in a directory. Use **-r**, **--recursive** to recurse into subdirectories.

- **fortifyFile** *path*

  Report fortified/fortifiable libc calls in a file.

- **fortifyProc** *pid*

  Report fortified/fortifiable libc calls for a running process ID.

- **kernel** \[*config*\]

  Inspect kernel hardening via */proc/config.gz* , */boot/config-\<release\>* , or a supplied config path.

- **proc** *pid*

  Inspect the executable of a running process ID.

- **procAll**

  Inspect all running processes. Kernel threads and processes without readable */proc/\<pid\>/exe* are skipped.

## COMPATIBILITY NOTES

- The legacy v2/bash options such as **--file**, **--dir**, and **--proc-all** are not the primary v3 interface.

- Use v3 subcommands instead (for example, **checksec** **file** **/path/to/bin** or **checksec** **procAll**).

- If you want compact output similar to older invocations, use **--no-banner** (and optionally **--no-headers**).

## EXAMPLES

-

  **checksec** **file** **/bin/ls**

-

  **checksec** **--no-banner** **--no-warnings** **file** **/bin/ls**

-

  **checksec** **--color=always** **file** **/bin/ls** \| **grep** **RELRO**

-

  **checksec** **--output** **json** **dir** **/usr/bin**

-

  **checksec** **dir** **/usr/bin** **--recursive**

-

  **checksec** **proc** **1**

-

  **checksec** **kernel**

-

  **checksec** **kernel** **/path/to/config**

## DIAGNOSTICS

Most commands exit non-zero on fatal errors (e.g., unreadable files). The **procAll** command skips processes it cannot read and continues.

## SEE ALSO

[hardening-check(1)](/hardening-check/1.md), [feature\_test\_macros(7)](/feature_test_macros/7.md), [gcc(1)](/gcc/1.md), [ld(1)](/ld/1.md)

## HISTORY

**checksec** was originally written by Tobias Klein. The current project is maintained by Brian Davis ⟨*slimm609@gmail.com*⟩.
