{
  "slug": "path-resolution",
  "term": "Path resolution",
  "aliases": [
    "pathname resolution",
    "pathname lookup"
  ],
  "definition": "Path resolution interprets a pathname's components to select the filesystem object or creation location addressed by an operation.",
  "note": "On Linux, an absolute path normally starts at the process root; a relative path starts at the working directory or the directory descriptor supplied to an *at() API. Intermediate components require directory lookup and search permission. Final-component treatment depends on the operation. [linux-path-resolution-7]\n\nFor open(), O_NOFOLLOW controls only the final component. Earlier directory symlinks may still be followed. O_PATH with O_NOFOLLOW can instead obtain a descriptor for the final link itself. [linux-open-2]\n\nFor openat2(), RESOLVE_NO_SYMLINKS blocks symlink traversal throughout the path and implies RESOLVE_NO_MAGICLINKS. It does not alone confine lookup beneath a directory. RESOLVE_BENEATH or RESOLVE_IN_ROOT supply different containment policies; RESOLVE_NO_XDEV separately blocks mount traversal, including bind mounts. These controls apply to that open, not a later pathname operation. [linux-openat2-2]",
  "advantages": [],
  "limitations": [
    "Resolving a name does not freeze its contents or provide a snapshot of later namespace changes."
  ],
  "related": [
    "symbolic-link",
    "inode",
    "hard-link",
    "open-file-description",
    "atomic-rename"
  ],
  "status": "shipping",
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "updated": "2026-11-03",
  "citations": [
    {
      "id": "linux-path-resolution-7",
      "title": "Linux man-pages: path_resolution(7), lookup start and component handling",
      "url": "https://man7.org/linux/man-pages/man7/path_resolution.7.html",
      "accessed": "2026-11-03"
    },
    {
      "id": "linux-open-2",
      "title": "Linux man-pages: open(2), O_NOFOLLOW and O_PATH",
      "url": "https://man7.org/linux/man-pages/man2/open.2.html",
      "accessed": "2026-11-03"
    },
    {
      "id": "linux-openat2-2",
      "title": "Linux man-pages: openat2(2), resolve flags and their scope",
      "url": "https://man7.org/linux/man-pages/man2/openat2.2.html",
      "accessed": "2026-11-03"
    }
  ],
  "provenance": [
    "API review scoped to Linux; path-resolution flags are separate from persistence, application authorization and multi-operation concurrency protocols."
  ]
}
