The n98 magerun CLI Tools provides some handy tools to work with Magento / Mage-OS / Adobe Commerce from command line.
The swiss army knife for Magento developers, sysadmins and devops
Latest Release | |
---|---|
Development Branch |
Development is done in develop branch.
This software is only running with Magento 2.
If you use Magento 1 please use another stable version (https://github.com/netz98/n98-magerun).
The tools will automatically be tested for multiple PHP versions. It's
currently running in various Linux distributions and Mac OS X. Microsoft
Windows is not fully supported (some Commands like db:dump
or install
are excluded).
We support the following Magento Versions:
2.4.x Open Source/Commerce
2.3.x Open Source/Commerce (last compatible n98-magerun2 version is v5.2.0)
2.2.x Open Source/Commerce (last compatible n98-magerun2 version is v3.2.0)
We support the following PHP Versions:
PHP 8.3
PHP 8.2
PHP 8.1
PHP 7.4
PHP 7.3 (last compatible version is v6.1.1)
PHP 7.2 (last compatible version is v4.7.0)
There are three ways to install the tools:
Download the latest stable n98-magerun phar-file from the file-server:
wget https://files.magerun.net/n98-magerun2.phar
or if you prefer to use Curl:
curl -O https://files.magerun.net/n98-magerun2.phar
Verify the download by comparing the SHA256 checksum with the one on the website:
shasum -a256 n98-magerun2.phar
It is also possible to verify automatically:
curl -sS -O https://files.magerun.net/n98-magerun2-latest.phar curl -sS -o n98-magerun2-latest.phar.sha256 https://files.magerun.net/sha256.php?file=n98-magerun2-latest.phar shasum -a 256 -c n98-magerun2-latest.phar.sha256
If it shows the same checksum as on the website, you downloaded the file successfully.
Now you can make the phar-file executable:
chmod +x ./n98-magerun2.phar
The base-installation is now complete and you can verify it:
./n98-magerun2.phar --version
The command should execute successfully and show you the version number of N98-Magerun like:
n98-magerun2 version 4.8.0 by valantic CEC
You now have successfully installed Magerun! You can tailor the installation further like installing it system-wide and enable autocomplete - read on for more information about these and other features.
If you want to use the command system wide you can copy it to/usr/local/bin
.
sudo cp ./n98-magerun2.phar /usr/local/bin/
We offer a special dist package to install the phar file via Composer. See https://packagist.org/packages/n98/magerun2-dist for more details. The main advantage of the dist package is that there are no package dependencies.
The installation via Composer is not recommended, because it's impossible to be compatible with all project and Magento core dependencies. Please use the phar file instead of the Composer version. We are not able to provide compatibility to all Magento versions anymore.
There is a self-update
command available. This works only
for phar-distribution.
./n98-magerun2.phar self-update [--dry-run]
With --dry-run
option it is possible to download and test
the phar file without replacing the old one.
Files for autocompletion with Magerun can be found inside the folderres/autocompletion
, In the following some more information
about a specific one (Bash), there are more (e.g. Fish, Zsh).
Bash completion is available pre-generated, all commands and their
respective options are availble on tab. To get completion for an option
type two dashes (--
) and then tab.
To install the completion files, copy n98-magerun2.phar.bash
to your
bash compatdir folder for autocompletion.
On my Ubuntu system this can be done with the following command:
sudo cp res/autocompletion/bash/n98-magerun2.phar.bash /etc/bash_completion.d/
The concrete folder can be obtained via pkg-config:
pkg-config --variable=compatdir bash-completion
Detailed information is available in the bash-completions FAQ: https://github.com/scop/bash-completion#faq
NOTE There are more commands available as documented here. Please use the list command to see all.
All commands try to detect the current Magento root directory. If you have multiple Magento installations you must change your working directory to the preferred installation.
You can list all available commands by:
n98-magerun2.phar list
If you don't have the .phar file installed system wide you can call it with the PHP CLI interpreter:
php n98-magerun2.phar list
Global config parameters:
Parameter | Description |
---|---|
--root-dir | Force Magento root dir. No auto detection. |
--skip-config | Do not load any custom config. |
--skip-root-check | Do not check if n98-magerun2 runs as root. |
--skip-core-commands | Do not include Magento commands. |
--skip-magento-compatibility-check | Do not check Magento version compatibility. |
The tool can be used to run core Magento commands. We provide a internal Proxy Command which calls
the original Magento command via bin/magento
.
All options and arguments are passed to the original command.
If you do not want to use the proxy command you can disable it with the --skip-core-commands
option.
One of the big advantages of the proxy command is that you can run any command without having to change the working
directory to the Magento root directory
or to specify the path to bin/magento
if your current working directory is inside the Magento installation.
If you are outside the Magento root directory you can run any command by specifying the Magento root directory with
the --root-dir
option.
That is very useful if you have multiple Magento installations or if it is used in some kind of automation.
For core commands we filter environment variables to avoid problems with enabled xdebug extension.
n98-magerun2.phar open-browser [store]
Loads basic customer info by email address.
n98-magerun2.phar customer:info [email] [website]
Creates a new customer/user for shop frontend.
n98-magerun2.phar customer:create [email] [password] [firstname] [lastname] [website]
Example:
n98-magerun2.phar customer:create [email protected] password123 John Doe base
You can add additional any number of custom fields, example:
n98-magerun2.phar customer:create [email protected] passworD123 John Doe base taxvat DE12345678 prefix Mrs.
List customers. The output is limited to 1000 (can be changed by overriding config). If search parameter is given the customers are filtered (searchs in firstname, lastname and email).
n98-magerun2.phar customer:list [--format[="..."]] [search]
n98-magerun2.phar customer:change-password [email] [password] [website]
Website parameter must only be given if more than one websites are available.
n98-magerun2.phar customer:token:create <email>
n98-magerun2.phar customer:delete [-f|--force] [-a|--all] [-r|--range] [--fuzzy] [--id=ID] [--website=ID] [--email=EMAIL] [--firstname=STRING] [--lastname=STRING]
Examples:
n98-magerun2.phar customer:delete --id 1 # Will delete customer with Id 1n98-magerun2.phar customer:delete --fuzzy --email=test # Will delete all customers with email like "%test%"n98-magerun2.phar customer:delete --all # Will delete all customersn98-magerun2.phar customer:delete --range # Will prompt for start and end Ids for batch deletion
Deletes customer(s) by given id or a combination of the website id and email or website id and firstname and lastname. In addition, you can delete a range of customer ids or delete all customers.
n98-magerun2.phar customer:add-address [email] [website] [--firstname=STRING] [--lastname=STRING] [--street=STRING] [--city=STRING] [--country=STRING] [--postcode=STRING] [--telephone=STRING] [--default-billing] [--default-shipping]
Examples:
n98-magerun2.phar customer:add-address [email protected] base --firstname="John" --lastname="Doe" --street="Pariser Platz" --city="Berlin" --country="DE" --postcode="10117" --telephone="1234567890" # add address of brandenburger tor to customer with email "[email protected]" in website "base"n98-magerun2.phar customer:add-address [email protected] base --firstname="John" --lastname="Doe" --street="Pariser Platz" --city="Berlin" --country="DE" --postcode="10117" --telephone="1234567890" --default-billing --default-shipping # add address of brandenburger tor to customer with email "[email protected]" in website "base" as default billing and shipping
Downloads Composer (if not already installed)
Downloads Magento 2.
Tries to create database if it does not exist.
Installs Magento sample data.
Starts Magento installer
Sets rewrite base in .htaccess file
Interactive installer:
n98-magerun2.phar install
Unattended installation:
n98-magerun2.phar install [--magentoVersion[="..."]] [--magentoVersionByName[="..."]] [--installationFolder[="..."]] [--dbHost[="..."]] [--dbUser[="..."]] [--dbPass[="..."]] [--dbName[="..."]] [--installSampleData[="..."]] [--useDefaultConfigParams[="..."]] [--baseUrl[="..."]] [--replaceHtaccessFile[="..."]]
Example of an unattended Magento CE 2.0.0.0 dev beta 1 installation:
n98-magerun2.phar install --dbHost="localhost" --dbUser="mydbuser" --dbPass="mysecret" --dbName="magentodb" --installSampleData=yes --useDefaultConfigParams=yes --magentoVersionByName="magento-ce-2.0.0.0-dev-beta1" --installationFolder="magento2" --baseUrl="http://magento2.localdomain/"
Additionally, with --noDownload
option you can install Magento working
copy already stored in --installationFolder
on the given database.
Provides infos like the edition, version or the configured cache backends, amount of data or installed packages.
n98-magerun2.phar sys:info
Options:
Option | Description |
---|---|
--sort | Sort table by name |
Lists all store views.
n98-magerun2.phar sys:store:list [--format[="..."]]
Lists all websites.
n98-magerun2.phar sys:website:list [--format[="..."]]
Lists all cronjobs defined in crontab.xml files.
n98-magerun2.phar sys:cron:list [--format[="..."]]
Runs a cronjob by code.
n98-magerun2.phar sys:cron:run [job]
If no job
argument is passed you can select a job from a list.
See it in action: http://www.youtube.com/watch?v=QkzkLgrfNaM
If option schedule is present, cron is not launched, but just scheduled immediately in magento crontab.
n98-magerun2.phar sys:cron:kill [--timeout <seconds>] [job_code]
If no job is specified a interactive selection of all running jobs is shown. Jobs can only be killed if the process runs on the same machine as n98-magerun2.
Default timeout of a process kill is 5 seconds.
Last executed cronjobs with status.
n98-magerun2.phar sys:cron:history [--format[="..."]] [--timezone[="..."]]
Create env file interactively.
If can also update existing files.
To update a single value you can use the command config:env:set
.
n98-magerun2.phar config:env:create
Set a single value in env.php by providing a key and an optional value. The command will save an empty string as default value if no value is set.
Sub-arrays in config.php can be specified by adding a "." character to every array.
n98-magerun2.phar config:env:set <key> [<value>]
You can also choose to provide a json text argument as value, by using the optional --input-format=json
flag.
This will allow you to add values that aren't a string but also other scalar types.
Examples:
n98-magerun2.phar config:env:set backend.frontName mybackend n98-magerun2.phar config:env:set crypt.key bb5b0075303a9bb8e3d210a971674367 n98-magerun2.phar config:env:set session.redis.host 192.168.1.1 n98-magerun2.phar config:env:set 'x-frame-options' '*'n98-magerun2.phar config:env:set --input-format=json queue.consumers_wait_for_messages 0 n98-magerun2.phar config:env:set --input-format=json directories.document_root_is_pub truen98-magerun2.phar config:env:set --input-format=json cron_consumers_runner.consumers '["some.consumer", "some.other.consumer"]'
Remove a configuration from the env.php file by providing a key.
Sub-arrays in config.php can be specified by adding a "." character to every array.
n98-magerun2.phar config:env:delete <key>
Examples:
n98-magerun2.phar config:env:delete system n98-magerun2.phar config:env:delete cache.frontend.default.backend n98-magerun2.phar config:env:delete cache.frontend.default.backend_options
n98-magerun2.phar config:env:show [options] [<key>]
If no key is passed, the whole content of the file is displayed as table.
Examples:
n98-magerun2.phar config:env:show # whole contentn98-magerun2.phar config:env:show backend.frontName n98-magerun2.phar config:env:show --format=json n98-magerun2.phar config:env:show --format=csv n98-magerun2.phar config:env:show --format=xml
Search in the store config meta data (labels). The output is a table with id, type and name of the config item.
Type can be one of:
section
group
field
n98-magerun2.phar config:search [--format[="..."]] <search>
n98-magerun2.phar config:store:set [--scope[="..."]] [--scope-id[="..."]] [--encrypt] path value
Arguments:
path - The config path value The config value
Options:
Option | Description |
---|---|
--scope | The config value's scope (default: default ). Can be default , websites , stores ) |
--scope-id | The config value's scope ID (default: 0 ) |
--encrypt | Encrypt the config value using crypt key |
n98-magerun2.phar config:store:get [--scope="..."] [--scope-id="..."] [--decrypt] [--format[="..."]] [path]
Arguments:
path - The config path
Options:
Option | Description |
---|---|
--scope | The config value's scope (default , websites , stores ) |
--scope-id | The config value's scope ID or scope code |
--decrypt | Decrypt the config value using crypt key defined in env.php |
--update-script | Output as update script lines |
--magerun-script | Output for usage with config:store:set |
--format | Output as json , xml or csv |
Help:
If path is not set, all available config items will be listed. path may contain wildcards (*
)
Example:
n98-magerun2.phar config:store:get web/* --magerun-script
n98-magerun2.phar config:store:delete [--scope[="..."]] [--scope-id[="..."]] [--all] path
Arguments:
path - The config path
Options:
Option | Description |
---|---|
--scope | The config value's scope (default, websites, stores) |
--scope-id | The config value's scope ID |
--all | Delete all entries by path |
n98-magerun2.phar config:data:acl
Help:
Prints acl.xml data as table
n98-magerun2.phar config:data:di <type>
Arguments:
type - Type (class)
Options:
Option | Description |
---|---|
--scope -s | Config scope (global , adminhtml , frontend , webapi_rest , webapi_soap , ...) (default: global ) |
Print the data of all merged mview.xml files.
n98-magerun2.phar config:data:mview [options]
Options:
Option | Description |
---|---|
--scope -s | Config scope (global , adminhtml , frontend , webapi_rest , webapi_soap , ...) (default: global ) |
--tree -t | Print data as tree |
--format | Output as json , xml or csv |
Print the data of all merged indexer.xml files.
n98-magerun2.phar config:data:indexer [options]
Options:
Option | Description |
---|---|
--scope -s | Config scope (global , adminhtml , frontend , webapi_rest , webapi_soap , ...) (default: global ) |
--tree -t | Print data as tree |
--format | Output as json , xml or csv |
n98-magerun2.phar cache:list
Cleans expired cache entries.
If you would like to clean only one cache type:
n98-magerun2.phar cache:clean [code]
If you would like to clean multiple cache types at once:
n98-magerun2.phar cache:clean [code] [code] ...
If you would like to remove all cache entries use cache:flush
Run cache:list
command to see all codes.
n98-magerun2.phar cache:flush [code]
Keep in mind that cache:flush
cleares the cache backend,
so other cache types in the same backend will be cleared as well.
The command is not checking if the cache id exists. If you want to check if the cache id exists
use the cache:remove:id
command with the --strict
option.
n98-magerun2.phar cache:remove:id [options[--strict] <id>
n98-magerun2.phar cache:list [--format[="..."]]
n98-magerun2.phar cache:disable [code]
If no code is specified, all cache types will be disabled. Runcache:list
command to see all codes.
n98-magerun2.phar cache:enable [code]
This command let you investigate what's stored inside your cache. It prints out a table with cache IDs.
n98-magerun2.phar cache:report [-t|--tags] [-m|--mtime] [--filter-id[="..."]] [--filter-tag[="..."]] [--fpc]
Prints stored cache entry by ID.
n98-magerun2.phar cache:view [--unserialize] [--decrypt] [--fpc] id
If value is serialized you can force a pretty output with --unserialize
option.
Some entries are encrypted and can be decrypted with --decrypt
option.
The command uses the core cache by default.
If the FPC cache should be used, the --fpc
option can be used.
Removes pre-generated catalog images and triggers clean_catalog_images_cache_after
event which
should invalidate the full page cache.
n98-magerun2.phar cache:catalog:image:flush
If no code is specified, all cache types will be enabled. Runcache:list
command to see all codes.
n98-magerun2.phar admin:user:list [--format[="..."]]
n98-magerun2.phar admin:user:change-password [username] [password]
n98-magerun2.phar admin:user:delete [email|username] [-f]
ID can be e-mail or username. The command will attempt to find the user
by username first and if it cannot be found it will attempt to find the
user by e-mail. If ID is omitted you will be prompted for it. If the
force parameter -f
is omitted you will be prompted for confirmation.
n98-magerun2.phar admin:token:create <username>
n98-magerun2.phar db:query <sql-query>
Example:
n98-magerun2.phar db:query "select * from store"
n98-magerun2.phar db:console [options]
Options:
Option | Description |
---|---|
--use-mycli-instead-of-mysql | Use mycli as the MySQL client instead of mysql |
--no-auto-rehash | Same as -A option to MySQL client to turn off auto-complete (avoids long initial connection time). |
--connection=CONNECTION | Select DB connection type for Magento configurations with several databases (default: default ) |
Dumps configured Magento database with mysqldump
.
Requires MySQL CLI tools
Arguments:
filename - Dump filename
Options:
Option | Description |
---|---|
--add-routines | Include stored routines in dump (procedures & functions). |
--add-time suffix | Adds time to filename (only if filename was provided). Requires value [suffix, prefix, no] |
--compression -c | Compress the dump file using one of the supported algorithms |
--dry-run | Do everything but the actual dump. Useful to test. |
--exclude | Tables to exclude entirely from the dump (including structure) |
--force -f | Do not prompt if all options are defined |
--git-friendly | Use one insert statement, but with line breaks instead of separate insert statements. |
--human-readable | Use a single insert with column names per row. |
--include | Tables to include entirely to the dump (default: all tables are included) |
--keep-definer | Do not replace DEFINER in dump with CURRENT_USER |
--keep-column-statistics | Retains column statistics table in mysqldump |
--no-single-transaction | Do not use single-transaction (not recommended, this is blocking) |
--no-tablespaces | Use this option if you want to create a dump without having the PROCESS privilege. |
--only-command | Print only mysqldump command. Does not execute. |
--print-only-filename | Execute and prints not output except the dump filename |
--set-gtid-purged-off | Adds --set-gtid-purged=OFF to mysqlqump |
--stdout | Dump to stdout |
--strip | Tables to strip (dump only structure of those tables) |
n98-magerun2.phar db:dump
Only the mysqldump command:
n98-magerun2.phar db:dump --only-command [filename]
Or directly to stdout:
n98-magerun2.phar db:dump --stdout
Use compression (gzip cli tool has to be installed):
n98-magerun2.phar db:dump --compression="gzip"
Dumps your database and excludes some tables. This is useful for development or staging environments where you may want to provision a restricted database.
Separate each table to strip by a space. You can use wildcards like *
and ?
in the table names to strip multiple
tables.
In addition, you can specify pre-defined table groups, that start with an @ sign.
Example: dataflow_batch_export unimportant_module_* @log
n98-magerun2.phar db:dump --strip="@stripped"
Available Table Groups:
Table Group | Description |
---|---|
@2fa | 2FA tables. These tables are used for storing 2FA information for admin users. |
@admin | Admin users, roles, sessions, etc. |
@aggregated | Aggregated tables used for generating reports, etc. |
@dotmailer | Dotmailer data(email_abandoned_cart email_automation email_campaign email_contact ). |
@customers | Customer data (and company data from the B2B extension). |
@development | Removes logs, sessions, trade data and admin users so developers do not have to work with real customer data or admin user accounts. |
@dotmailer | Dotmailer module tables |
@ee_changelog | Changelog tables of new indexer since EE 1.13 |
@idx | Tables with _idx suffix and index event tables. |
@klarna | Klarna tables containing information about klarna payments and their quotes/orders. |
@log | Log tables. |
@mailchimp | Mailchimp tables. |
@newrelic_reporting | New Relic reporting tables. These tables provide production metric data for New Relic. |
@oauth | OAuth sessions, tokens, etc. |
@quotes | Cart (quote) data and B2B quotes. |
@replica | Replica tables, these are generated from Magento Staging functionality. |
@sales | Sales data (orders, invoices, creditmemos etc). |
@search | Search related tables (catalogsearch_). |
@sessions | Database session tables. |
@stripped | Standard definition for a stripped dump (logs and sessions). |
@trade | Current trade data (customers, orders and quotes). You usually do not want those in developer systems. |
@temp | Indexer __temp tables. |
Requires MySQL CLI tools
Arguments:
filename - Dump filename
Options:
Option | Description |
---|---|
--connection=CONNECTION | Select DB connection type for Magento configurations with several databases |
-c , --compression=COMPRESSION | The compression of the specified file |
--drop | Drop and recreate database before import |
--drop-tables | Drop tables before import |
--force | Continue even if an SQL error occurs |
--only-command | Print only mysql command. Do not execute |
--only-if-empty | Imports only if database is empty |
--optimize | Convert verbose INSERTs to short ones before import (not working with compression) |
--skip-authorization-entry-creation | Add default entry to authorization_role and authorization_rule tables. |
n98-magerun2.phar db:import
If you run db:dump
with stripped option and @admin
group, the authorization_rule and authorization_role tables are
empty.
This blocks the creation of admin users.
You can re-create the default entries by running the command:
n98-magerun2.phar db:add-default-authorization-entries
If you are using the db:import
command to import the stripped SQL dump, then this command will be implicitly called.
n98-magerun2.phar dev:asset:clear [--theme="..."]
Options:
Option | Description |
---|---|
--theme | The specific theme(s) to clear |
To clear assets for all themes:
n98-magerun2.phar dev:asset:clear
To clear assets for specific theme(s) only:
n98-magerun2.phar dev:asset:clear --theme=Magento/luma
n98-magerun2.phar dev:theme:list
Creates an empty module and registers it in current Magento shop.
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="n98-magerun2.phar dev:module:create [-m|--minimal] [--add-blocks] [--add-helpers] [--add-models] [--add-setup] [--add-all] [-e|--enable] [--modman] [--add-readme] [--add-composer] [--add-strict-types] [--author-name [AUTHOR-NAME]] [--author-email [AUTHOR-EMAIL]] [--description [DESCRIPTION]] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [--root-dir [ROOT-DIR]] [--skip-config] [--skip-root-check] [--skip-core-commands