{
  "schemaVersion": "1.0",
  "item": {
    "slug": "linux",
    "name": "Linux",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/ivangdavila/linux",
    "canonicalUrl": "https://clawhub.ai/ivangdavila/linux",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/linux",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=linux",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/linux"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/linux",
    "agentPageUrl": "https://openagent3.xyz/skills/linux/agent",
    "manifestUrl": "https://openagent3.xyz/skills/linux/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/linux/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Permission Traps",
        "body": "chmod 777 fixes nothing, breaks everything — find the actual owner/group issue\nSetuid on scripts is ignored for security — only works on binaries\nchown -R follows symlinks outside target directory — use --no-dereference\nDefault umask 022 makes files world-readable — set 077 for sensitive systems\nACLs override traditional permissions silently — check with getfacl"
      },
      {
        "title": "Process Gotchas",
        "body": "kill sends SIGTERM by default, not SIGKILL — process can ignore it\nnohup doesn't work if process already running — use disown instead\nBackground job with & still dies on terminal close without disown or nohup\nZombie processes can't be killed — parent must call wait() or be killed\nkill -9 skips cleanup handlers — data loss possible, use SIGTERM first"
      },
      {
        "title": "Filesystem Traps",
        "body": "Deleting open file doesn't free space until process closes it — check lsof +L1\nrm -rf /path / with accidental space = disaster — use rm -rf /path/ trailing slash\nInodes exhausted while disk shows space free — many small files problem\nSymlink loops cause infinite recursion — find -L follows them\n/tmp cleared on reboot — don't store persistent data there"
      },
      {
        "title": "Disk Space Mysteries",
        "body": "Deleted files held open by processes — lsof +L1 shows them, restart process to free\nReserved blocks (5% default) only for root — tune2fs -m 1 to reduce\nJournal eating space — journalctl --vacuum-size=500M\nDocker overlay eating space — docker system prune -a\nSnapshots consuming space — check LVM, ZFS, or cloud provider snapshots"
      },
      {
        "title": "Networking",
        "body": "localhost and 127.0.0.1 may resolve differently — check /etc/hosts\nFirewall rules flushed on reboot unless saved — iptables-save or use firewalld/ufw persistence\nnetstat deprecated — use ss instead\nPort below 1024 requires root — use setcap for capability instead\nTCP TIME_WAIT exhaustion under load — tune net.ipv4.tcp_tw_reuse"
      },
      {
        "title": "SSH Traps",
        "body": "Wrong permissions on ~/.ssh = silent auth failure — 700 for dir, 600 for keys\nAgent forwarding exposes your keys to remote admins — avoid on untrusted servers\nKnown hosts hash doesn't match after server rebuild — remove old entry with ssh-keygen -R\nSSH config Host blocks: first match wins — put specific hosts before wildcards\nConnection timeout on idle — add ServerAliveInterval 60 to config"
      },
      {
        "title": "Systemd",
        "body": "systemctl enable doesn't start service — also need start\nrestart vs reload: restart drops connections, reload doesn't (if supported)\nJournal logs lost on reboot by default — set Storage=persistent in journald.conf\nFailed service doesn't retry by default — add Restart=on-failure to unit\nDependency on network: After=network.target isn't enough — use network-online.target"
      },
      {
        "title": "Cron Pitfalls",
        "body": "Cron has minimal PATH — use absolute paths or set PATH in crontab\nOutput goes to mail by default — redirect to file or /dev/null\nCron uses system timezone, not user's — set TZ in crontab if needed\nCrontab lost if edited incorrectly — crontab -l > backup before editing\n@reboot runs on daemon restart too, not just system reboot"
      },
      {
        "title": "Memory and OOM",
        "body": "OOM killer picks \"best\" victim, often not the offender — check dmesg for kills\nSwap thrashing worse than OOM — monitor with vmstat\nMemory usage in free includes cache — \"available\" is what matters\nProcess memory in /proc/[pid]/status — VmRSS is actual usage\ncgroups limit respected before system OOM — containers die first"
      },
      {
        "title": "Commands That Lie",
        "body": "df shows filesystem capacity, not physical disk — check underlying device\ndu doesn't count sparse files correctly — file appears smaller than disk usage\nps aux memory percentage can exceed 100% (shared memory counted multiple times)\nuptime load average includes uninterruptible I/O wait — not just CPU\ntop CPU percentage is per-core — 400% means 4 cores maxed"
      }
    ],
    "body": "Linux Gotchas\nPermission Traps\nchmod 777 fixes nothing, breaks everything — find the actual owner/group issue\nSetuid on scripts is ignored for security — only works on binaries\nchown -R follows symlinks outside target directory — use --no-dereference\nDefault umask 022 makes files world-readable — set 077 for sensitive systems\nACLs override traditional permissions silently — check with getfacl\nProcess Gotchas\nkill sends SIGTERM by default, not SIGKILL — process can ignore it\nnohup doesn't work if process already running — use disown instead\nBackground job with & still dies on terminal close without disown or nohup\nZombie processes can't be killed — parent must call wait() or be killed\nkill -9 skips cleanup handlers — data loss possible, use SIGTERM first\nFilesystem Traps\nDeleting open file doesn't free space until process closes it — check lsof +L1\nrm -rf /path / with accidental space = disaster — use rm -rf /path/ trailing slash\nInodes exhausted while disk shows space free — many small files problem\nSymlink loops cause infinite recursion — find -L follows them\n/tmp cleared on reboot — don't store persistent data there\nDisk Space Mysteries\nDeleted files held open by processes — lsof +L1 shows them, restart process to free\nReserved blocks (5% default) only for root — tune2fs -m 1 to reduce\nJournal eating space — journalctl --vacuum-size=500M\nDocker overlay eating space — docker system prune -a\nSnapshots consuming space — check LVM, ZFS, or cloud provider snapshots\nNetworking\nlocalhost and 127.0.0.1 may resolve differently — check /etc/hosts\nFirewall rules flushed on reboot unless saved — iptables-save or use firewalld/ufw persistence\nnetstat deprecated — use ss instead\nPort below 1024 requires root — use setcap for capability instead\nTCP TIME_WAIT exhaustion under load — tune net.ipv4.tcp_tw_reuse\nSSH Traps\nWrong permissions on ~/.ssh = silent auth failure — 700 for dir, 600 for keys\nAgent forwarding exposes your keys to remote admins — avoid on untrusted servers\nKnown hosts hash doesn't match after server rebuild — remove old entry with ssh-keygen -R\nSSH config Host blocks: first match wins — put specific hosts before wildcards\nConnection timeout on idle — add ServerAliveInterval 60 to config\nSystemd\nsystemctl enable doesn't start service — also need start\nrestart vs reload: restart drops connections, reload doesn't (if supported)\nJournal logs lost on reboot by default — set Storage=persistent in journald.conf\nFailed service doesn't retry by default — add Restart=on-failure to unit\nDependency on network: After=network.target isn't enough — use network-online.target\nCron Pitfalls\nCron has minimal PATH — use absolute paths or set PATH in crontab\nOutput goes to mail by default — redirect to file or /dev/null\nCron uses system timezone, not user's — set TZ in crontab if needed\nCrontab lost if edited incorrectly — crontab -l > backup before editing\n@reboot runs on daemon restart too, not just system reboot\nMemory and OOM\nOOM killer picks \"best\" victim, often not the offender — check dmesg for kills\nSwap thrashing worse than OOM — monitor with vmstat\nMemory usage in free includes cache — \"available\" is what matters\nProcess memory in /proc/[pid]/status — VmRSS is actual usage\ncgroups limit respected before system OOM — containers die first\nCommands That Lie\ndf shows filesystem capacity, not physical disk — check underlying device\ndu doesn't count sparse files correctly — file appears smaller than disk usage\nps aux memory percentage can exceed 100% (shared memory counted multiple times)\nuptime load average includes uninterruptible I/O wait — not just CPU\ntop CPU percentage is per-core — 400% means 4 cores maxed"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/ivangdavila/linux",
    "publisherUrl": "https://clawhub.ai/ivangdavila/linux",
    "owner": "ivangdavila",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/linux",
    "downloadUrl": "https://openagent3.xyz/downloads/linux",
    "agentUrl": "https://openagent3.xyz/skills/linux/agent",
    "manifestUrl": "https://openagent3.xyz/skills/linux/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/linux/agent.md"
  }
}