Every command below comes from the Wazuh 5.0-beta documentation. The manager and Linux agent commands were run on a 5.0.0-beta5 lab stack, and the Windows agent commands on a Windows 11 endpoint enrolled against it. The macOS lines are documented rather than exercised. Manager tools live in /var/wazuh-manager/bin, agent tools in /var/ossec/bin on Linux, /Library/Ossec/bin on macOS. If you are still on 4.x, the paths differ and several of these tools do not exist yet or no longer exist; the ports and paths reference has both versions side by side.
Service control
All four components ship a systemd unit. Service names are unchanged from 4.x.
| Command | What it does |
|---|---|
systemctl start wazuh-indexer |
Starts the Wazuh indexer |
systemctl start wazuh-manager |
Starts the Wazuh manager |
systemctl start wazuh-dashboard |
Starts the Wazuh dashboard |
systemctl start wazuh-agent |
Starts the Wazuh agent |
systemctl status wazuh-manager |
Shows manager service state |
systemctl restart wazuh-indexer |
Restarts the indexer, needed after editing opensearch.yml |
systemctl enable wazuh-agent |
Starts the agent at boot |
systemctl disable wazuh-agent |
Stops the agent starting at boot |
systemctl daemon-reload |
Reloads unit files after installing the agent package |
Start order on a fresh install is indexer, then manager, then dashboard. The dashboard logs “Wazuh dashboard server is not ready yet” until the indexer answers on 9200.
Without systemd
| Command | What it does |
|---|---|
service wazuh-agent start |
SysV init equivalent on Debian and RPM systems |
chkconfig --add wazuh-agent |
Registers the agent service on RPM-based SysV systems |
update-rc.d wazuh-agent defaults 95 10 |
Registers the agent service on Debian-based SysV systems |
/var/ossec/bin/wazuh-control start |
Starts the agent where no service manager is present |
launchctl bootstrap system /Library/LaunchDaemons/com.wazuh.agent.plist |
Starts the agent on macOS |
NET START WazuhSvc |
Starts the agent from CMD on Windows |
Start-Service WazuhSvc |
Starts the agent from PowerShell on Windows |
Restart-Service WazuhSvc |
Restarts the Windows agent after a configuration change |
Get-Service WazuhSvc |
Shows the Windows agent service state |
The Windows service is WazuhSvc, display name Wazuh, start type Automatic, and the MSI leaves it stopped. Verified on 5.0.0-beta5: Get-Service *wazuh* returns that one service and nothing else. Beta documentation pages using Restart-Service -Name wazuh or net stop wazuh do not match the package.
Windows agent one-liners
| Command | What it does |
|---|---|
msiexec /i wazuh-agent-5.0.0-beta5.msi /q WAZUH_MANAGER="<IP>" WAZUH_REGISTRATION_PASSWORD="<PASSWORD>" |
Silent install with the two documented deployment properties |
msiexec.exe /x wazuh-agent-5.0.0-beta5.msi /qn |
Silent uninstall, with the original MSI in the working directory |
Get-AuthenticodeSignature .\wazuh-agent-5.0.0-beta5.msi |
Checks the package signature, which should be Valid and signed by CN="Wazuh, Inc" |
Select-String -Path 'C:\Program Files (x86)\ossec-agent\wazuh-agent.state' -Pattern "^status" |
Reads the agent connection state |
Get-Content 'C:\Program Files (x86)\ossec-agent\ossec.log' -Tail 20 |
Reads the agent log, including enrolment and clock skew lines |
Get-Content 'C:\Program Files (x86)\ossec-agent\VERSION.json' |
Prints version, stage and commit, the best detection target for Intune or SCCM |
Test-NetConnection -ComputerName <IP> -Port 1517 |
Tests the agent to manager path |
Manager process control: wazuh-manager-control
Replaces ossec-control and the manager side of wazuh-control. Path: /var/wazuh-manager/bin/wazuh-manager-control.
| Command | What it does |
|---|---|
wazuh-manager-control start |
Starts the manager services |
wazuh-manager-control stop |
Stops the manager services |
wazuh-manager-control restart |
Restarts the manager services |
wazuh-manager-control status |
Lists each manager daemon and whether it is running |
wazuh-manager-control info |
Prints version, stage and commit as JSON |
wazuh-manager-control info -v |
Prints the version, for example v5.0.0 |
wazuh-manager-control info -r |
Prints the package revision |
wazuh-manager-control info -t |
Prints the installation type |
wazuh-manager-control enable debug |
Puts every manager daemon into debug mode |
wazuh-manager-control disable debug |
Turns debug mode off again |
-j |
An option, not a command: adds it to a wazuh-manager-control call to get JSON output for monitoring scripts |
A healthy status on 5.0.0-beta5 lists eight daemons:
/var/wazuh-manager/bin/wazuh-manager-control status
wazuh-manager-clusterd is running...
wazuh-manager-modulesd is running...
wazuh-manager-monitord is running...
wazuh-manager-remoted is running...
wazuh-manager-analysisd is running...
wazuh-manager-db is running...
wazuh-manager-authd is running...
wazuh-manager-apid is running...
wazuh-manager-monitord is in that list. The GitHub migration guide says it is going and its work moves into the Task Manager inside modulesd; beta5 still ships it and still starts it, so count eight until a later build says otherwise. If one is missing, the reason is almost always in /var/wazuh-manager/logs/wazuh-manager.log.
info without a flag prints the build as JSON, which is the fastest way to record exactly what you are running:
{
"version": "5.0.0",
"stage": "beta5",
"commit": "49b96be"
}
Agent process control: wazuh-control
Path is /var/ossec/bin/wazuh-control on Linux and /Library/Ossec/bin/wazuh-control on macOS.
| Command | What it does |
|---|---|
wazuh-control start |
Starts the agent services |
wazuh-control stop |
Stops the agent services |
wazuh-control restart |
Restarts the agent services |
wazuh-control reload |
Reloads the agent configuration |
wazuh-control status |
Lists each agent daemon and whether it is running |
wazuh-control info -v |
Prints the agent version |
wazuh-control enable debug |
Debug mode for every agent daemon |
wazuh-control disable debug |
Turns agent debug mode off |
A healthy agent status lists five daemons, confirmed on a 5.0.0-beta5 Linux agent: wazuh-modulesd, wazuh-logcollector, wazuh-syscheckd, wazuh-agentd and wazuh-execd. grep ^status /var/ossec/var/run/wazuh-agentd.state is the companion check and reads status='connected' or status='pending'. If wazuh-agentd is the only one missing, read why the agent is disconnected.
Manager CLI tools
All of these live in /var/wazuh-manager/bin. That directory holds sixteen entries on 5.0.0-beta5, and the list is the authoritative answer to “does this tool still exist”:
ls /var/wazuh-manager/bin
agent_groups
agent_upgrade
cluster_control
rbac_control
verify-agent-conf
wazuh-manager-analysisd
wazuh-manager-apid
wazuh-manager-authd
wazuh-manager-clusterd
wazuh-manager-control
wazuh-manager-db
wazuh-manager-keystore
wazuh-manager-modulesd
wazuh-manager-monitord
wazuh-manager-remoted
wazuh-manager-service-control
Five administrative tools, eight daemons, plus wazuh-manager-control and wazuh-manager-service-control. No manage_agents, no agent-auth, no agent_control, no wazuh-logtest.
agent_groups
Groups must exist before an agent enrols into them, so this is the tool you reach for first.
| Command | What it does |
|---|---|
agent_groups -a -g <group> |
Creates a group |
agent_groups -a -i <agent_id> -g <group> |
Adds an agent to an existing group |
agent_groups -r -g <group> |
Removes a group |
agent_groups -r -i <agent_id> -g <group> |
Removes an agent from a group |
agent_groups -l |
Lists existing groups |
agent_groups -l -g <group> |
Lists the agents in a group |
agent_groups -s -i <agent_id> |
Shows the groups an agent belongs to |
agent_groups -c -g <group> |
Lists the configuration files of a group with their checksums |
agent_groups -f |
Forces an agent to belong to a single group |
agent_groups -q |
Silent mode, skips the confirmation prompt |
What creating and listing groups looks like on beta5:
$ /var/wazuh-manager/bin/agent_groups -a -g lab-linux -q
Group 'lab-linux' created.
$ /var/wazuh-manager/bin/agent_groups -l
Groups (2):
default (0)
lab-linux (0)
Unassigned agents: 0.
The number in brackets is the agent count in that group, and Unassigned agents is the one to watch after a rollout. More on the model in agent groups and centralised configuration.
agent_upgrade
| Command | What it does |
|---|---|
agent_upgrade -l |
Lists outdated agents with their current version |
agent_upgrade -a <agent_id> |
Upgrades one agent to the latest available version |
agent_upgrade -a <id> <id> ... |
Upgrades several agents in one call |
agent_upgrade -a <id> -v <version> |
Upgrades to a specific version |
agent_upgrade -a <id> -f <file.wpk> |
Installs a custom WPK package |
agent_upgrade -a <id> -F |
Forces the upgrade, skipping version validation |
agent_upgrade --package_type deb |
Chooses the Linux package type, rpm or deb |
agent_upgrade -r <repository> |
Uses an alternative package repository |
agent_upgrade -a <id> -s |
Suppresses output |
cluster_control
| Command | What it does |
|---|---|
cluster_control -l |
Lists cluster nodes with type, version and address |
cluster_control -a |
Lists every registered agent and the node it reports to |
cluster_control -i |
Shows cluster health |
cluster_control -fn <node> |
Filters the output by node name |
cluster_control -fs <status> |
Filters the agent list by agent status |
Every Wazuh 5.0 install is a cluster, even a single node, so this tool works on an all-in-one box. See cluster and distributed architecture.
rbac_control
| Command | What it does |
|---|---|
rbac_control change-password |
Changes the password of the default API users wazuh and wazuh-wui; a blank answer leaves one unchanged |
rbac_control factory-reset |
Wipes all custom RBAC users, roles, policies and rules; asks you to type RESET |
verify-agent-conf
| Command | What it does |
|---|---|
verify-agent-conf |
Validates every agent.conf in the shared configuration directory |
verify-agent-conf -f <path> |
Validates one agent.conf file |
Run it before you restart the manager after editing group configuration. A bad agent.conf is pushed to every agent in the group.
wazuh-manager-keystore
Stores credentials and connection settings outside the configuration file.
| Command | What it does |
|---|---|
wazuh-manager-keystore -f <column_family> -k <key> -v <value> |
Stores a value against a key |
wazuh-manager-keystore -f <column_family> -k <key> -vp <path> |
Reads the value from a single-line file |
wazuh-manager-keystore -h |
Prints usage |
Omit both -v and -vp and the tool reads the value from standard input, which keeps it out of shell history.
Installation utilities
Run before or during deployment, not from an installed manager.
| Command | What it does |
|---|---|
bash wazuh-install.sh -a |
All-in-one install of indexer, manager and dashboard |
bash wazuh-install.sh -a -id -d pre-release |
The beta form: installs dependencies and uses the pre-release repository |
bash wazuh-install.sh -wi <node> |
Installs only the indexer, for a distributed deployment |
bash wazuh-install.sh -wm <node> |
Installs only the manager |
bash wazuh-install.sh -wd <node> |
Installs only the dashboard |
bash wazuh-install.sh -g |
Generates wazuh-install-files.tar from config.yml |
bash wazuh-install.sh -s |
Initialises indexer cluster security settings |
bash wazuh-install.sh -o |
Overwrites an existing install, erasing configuration and data |
bash wazuh-install.sh -u |
Uninstalls all Wazuh components |
bash wazuh-install.sh -V |
Prints the script and package versions |
bash wazuh-certs-tool.sh -A |
Creates every certificate in config.yml plus the admin certificates |
bash wazuh-certs-tool.sh -ca |
Creates only the root CA |
bash wazuh-certs-tool.sh -wi <ca.pem> <ca.key> |
Creates indexer certificates from an existing CA |
bash wazuh-certs-tool.sh -wm <ca.pem> <ca.key> |
Creates manager certificates |
bash wazuh-certs-tool.sh -wd <ca.pem> <ca.key> |
Creates dashboard certificates |
bash wazuh-passwords-tool.sh -u <user> -p <password> |
Changes an indexer user password |
bash wazuh-passwords-tool.sh -A -au <api_user> -ap <api_pass> -u <user> -p <password> |
Changes an indexer user password and the matching API user |
The -d pre-release flag exists because 5.0 is still in beta. It drops at general availability. Walkthrough in installing Wazuh on Ubuntu.
Manager API one-liners
The manager API listens on 55000/TCP. Default credentials after an assisted install are wazuh:wazuh. Get a token first; it expires after 900 seconds by default.
TOKEN=$(curl -u <USER>:<PASSWORD> -k -X POST "https://<WAZUH_MANAGER_IP>:55000/security/user/authenticate?raw=true")
| Command | What it does |
|---|---|
curl -k -X GET "https://<IP>:55000/agents?pretty=true&sort=-ip,name" -H "Authorization: Bearer $TOKEN" |
Lists enrolled agents |
curl -k -X POST -d '{"name":"<AGENT_NAME>"}' "https://<IP>:55000/agents?pretty=true" -H "Content-Type:application/json" -H "Authorization: Bearer $TOKEN" |
Enrols an agent and returns its id and key |
curl -k -X GET "https://<IP>:55000/agents/<ID>/key?pretty=true" -H "Authorization: Bearer $TOKEN" |
Retrieves an existing agent’s client key |
curl -k -X POST "https://<IP>:55000/groups?pretty=true" -H "Content-Type: application/json" -d '{"group_id": "Linux"}' -H "Authorization: Bearer $TOKEN" |
Creates a group |
curl -k -X PUT "https://<IP>:55000/agents/<ID>/group/<GROUP>?pretty=true" -H "Authorization: Bearer $TOKEN" |
Assigns an agent to a group |
curl -k -X DELETE "https://<IP>:55000/agents/<ID>/group/<GROUP>" -H "Authorization: Bearer $TOKEN" |
Removes an agent from a group |
curl -k -X GET "https://<IP>:55000/groups/<GROUP>/agents?pretty=true&select=id,name" -H "Authorization: Bearer $TOKEN" |
Lists the agents in a group |
curl -k -X DELETE "https://<IP>:55000/agents?pretty=true&older_than=0s&agents_list=012,014&status=all" -H "Authorization: Bearer $TOKEN" |
Removes named agents |
curl -k -X DELETE "https://<IP>:55000/agents?pretty=true&older_than=21d&agents_list=all&status=never_connected,disconnected" -H "Authorization: Bearer $TOKEN" |
Removes agents that have been silent for 21 days |
The surviving endpoint families in 5.0 are /agents, /groups, /cluster, /mitre, /security and /overview. /manager, /rules, /decoders, /lists, /logtest, /syscheck, /rootcheck, /syscollector, /sca, /tasks and /active-response are not in the 5.0 API specification. Worked examples in the Wazuh API with Python, and the full list on the manager API reference.
Indexer API one-liners
The indexer API listens on 9200/TCP and is where state, events and findings now live.
| Command | What it does |
|---|---|
curl -k -u <USER>:<PASS> https://<INDEXER_IP>:9200 |
Checks the indexer answers and prints its version |
curl -k -u <USER>:<PASS> https://<INDEXER_IP>:9200/_cat/nodes?v |
Lists indexer cluster nodes |
curl -X GET <INDEXER_IP>:9200/_cat/indices?v |
Lists indices and backing indices with size and document count |
curl -sk -o /dev/null -w '%{http_code}\n' -u <USER>:<PASS> https://<INDEXER_IP>:9200/_cluster/health |
Returns just the HTTP status, handy for credential checks |
curl -fks https://localhost:9200/_plugins/_security/health |
Security plugin health, used by the Docker healthcheck |
curl -k -u <USER>:<PASS> "https://<INDEXER_IP>:9200/_nodes?filter_path=**.mlockall&pretty" |
Confirms memory locking is on |
curl -k -u <USER>:<PASS> "https://<INDEXER_IP>:9200/_nodes/stats/process?filter_path=**.max_file_descriptors&pretty" |
Checks the file descriptor limit |
curl -X POST "https://<INDEXER_IP>:9200/_flush" -u <USER>:<PASS> -k |
Flushes indices before a snapshot |
curl -X GET <INDEXER_IP>:9200/_index_template/ |
Lists index templates created by the Setup module |
curl -sk -u <USER>:<PASS> -X POST "https://<INDEXER_IP>:9200/_plugins/_content_manager/integrations" -H 'Content-Type: application/json' -d @integration.json |
Creates content. Collection endpoints under _content_manager are POST-only on beta5; a GET answers 405 with allowed: [POST] |
Search findings by any Wazuh Common Schema field:
curl -sk -u <USER>:<PASS> -X GET "https://127.0.0.1:9200/wazuh-findings-v5-*/_search" -H 'Content-Type: application/json' -d'
{
"query": {
"term": {
"wazuh.case.status": { "value": "acknowledged" }
}
}
}'
Content management, log test and space promotion all sit under /_plugins/_content_manager/, and detection under /_plugins/_security_analytics/. The indexer API reference lists every group.
Logs to tail
| Command | What it does |
|---|---|
tail -f /var/wazuh-manager/logs/wazuh-manager.log |
Manager log, including the generated enrolment password on first start |
tail -f /var/ossec/logs/ossec.log |
Agent log on Linux |
tail -f /Library/Ossec/logs/ossec.log |
Agent log on macOS |
tail -f /var/ossec/logs/active-responses.log |
Active response execution results on Linux |
tail -f /var/log/wazuh-indexer/wazuh-indexer.log |
Indexer log |
journalctl -u wazuh-dashboard |
Dashboard log; the dashboard does not write its own file by default |
cat /var/ossec/var/run/wazuh-agentd.state |
Agent connection statistics file |
cat /var/ossec/var/run/wazuh-logcollector.state |
Per-file log collection counters on the agent |
Get-Content 'C:\Program Files (x86)\ossec-agent\wazuh-logcollector.state' |
The same counters on Windows, as JSON, one entry per event channel or file |
curl -k -X GET "https://<IP>:55000/cluster/<NODE>/daemons/stats?daemons_list=wazuh-manager-analysisd" -H "Authorization: Bearer $TOKEN" |
Manager daemon statistics; replaces the removed wazuh-analysisd.state and wazuh-remoted.state files |
The manager no longer writes alerts.json or alerts.log. Everything goes to the indexer through the indexer connector, so the equivalent of “tail the alerts file” is now a query against wazuh-events-v5* or wazuh-findings-v5*. See reading your first findings.
Commands that no longer exist in 5.0
These are in the 4.x tools reference and not in the 5.0 one. If a blog post or an old runbook tells you to run one of them on a 5.0 manager, it predates the rewrite.
| 4.x command | Status in 5.0 | Use instead |
|---|---|---|
manage_agents |
Confirmed absent from /var/wazuh-manager/bin on beta5. Still present on the agent in /var/ossec/bin |
Manager API POST /agents, or agent_groups for group membership |
agent-auth |
Confirmed absent from /var/wazuh-manager/bin on beta5 |
Agent-side enrolment through <agent><manager> in ossec.conf |
agent_control |
Not in the 5.0 tools reference | cluster_control -a, or GET /agents |
wazuh-logtest |
Not in the 5.0 tools reference | Indexer API /_plugins/_content_manager/logtest/normalization and /logtest/detection |
wazuh-regex |
Not in the 5.0 tools reference | Decoders parse with logpar, not regex; see writing a custom decoder |
clear_stats |
Not in the 5.0 tools reference | Not documented in the beta |
fim_migrate |
Not in the 5.0 tools reference | Not applicable; FIM state lives in wazuh-states-fim-* |
update_ruleset |
Deprecated in 4.2, gone in 5.0 | Content Manager syncs standard content from Wazuh CTI |
wazuh-keystore |
Renamed | wazuh-manager-keystore |
ossec-control |
Renamed | wazuh-manager-control on the manager, wazuh-control on the agent |
Next: Wazuh ports, paths and log files reference.
Frequently asked questions
Where are the Wazuh command line tools installed?
On a Wazuh 5.0 manager they live in /var/wazuh-manager/bin. On a Wazuh agent they live in /var/ossec/bin on Linux, /Library/Ossec/bin on macOS, and the installation folder under Program Files on Windows. In Wazuh 4.x the manager tools were also in /var/ossec/bin, which is the single most common source of copied commands that no longer work.
Does manage_agents still exist in Wazuh 5.0?
Not on the manager. Listing /var/wazuh-manager/bin on a 5.0.0-beta5 manager returns sixteen tools and neither manage_agents nor agent-auth is among them. On the agent it survives: /var/ossec/bin on a 5.0 agent still ships manage_agents. Use the manager API or agent_groups for anything manager-side.
How do I restart Wazuh without systemd?
Run /var/wazuh-manager/bin/wazuh-manager-control restart on the manager and /var/ossec/bin/wazuh-control restart on a Linux agent. Both tools also take start, stop, status and info. The agent tool additionally accepts reload.