{"id":431,"date":"2026-10-14T09:01:09","date_gmt":"2026-10-14T09:01:09","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2015\/09\/20\/chef-commands-line-reference\/"},"modified":"2026-10-14T09:01:09","modified_gmt":"2026-10-14T09:01:09","slug":"chef-commands-line-reference","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/chef-commands-line-reference\/","title":{"rendered":"Chef Command-Line Reference: Essential chef-solo, chef-client, and Knife Workflows"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>Originally published on 2015-09-20; fully revised and updated.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This page is a practical <strong>Chef CLI quick reference<\/strong> for DevOps engineers who need common commands in one place. It covers local recipe execution, cookbook generation, cookbook distribution, node bootstrap, and routine Knife operations, with notes where version differences can affect syntax.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Chef command families at a glance<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Tool\/command family<\/th><th>Primary purpose<\/th><th>Typical use case<\/th><\/tr><\/thead><tbody><tr><td>chef-solo<\/td><td>Run a recipe without Chef Server<\/td><td>Local or standalone execution from a solo.rb config<\/td><\/tr><tr><td>chef-apply<\/td><td>Apply a single recipe file directly<\/td><td>Quick local tests on one machine<\/td><\/tr><tr><td>chef-client &#8211;local-mode<\/td><td>Converge locally using a run list<\/td><td>Test cookbook behavior without full server workflow<\/td><\/tr><tr><td>knife cookbook *<\/td><td>Create\/download\/upload cookbooks<\/td><td>Manage cookbook lifecycle between local repo and server<\/td><\/tr><tr><td>knife bootstrap<\/td><td>Register and provision a node<\/td><td>Initial onboarding of a target machine<\/td><\/tr><tr><td>knife node *<\/td><td>Inspect and edit node metadata\/run lists<\/td><td>Operational node management<\/td><\/tr><tr><td>knife ssh<\/td><td>Run remote commands on selected nodes<\/td><td>Trigger chef-client runs across nodes<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Generate cookbook structure and files<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use these commands to scaffold a new cookbook and add template files. The examples below preserve the command intent from the original post.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css language-bash\"><span class=\"hljs-selector-tag\">chef<\/span> <span class=\"hljs-selector-tag\">generate<\/span> <span class=\"hljs-selector-tag\">cookbook<\/span> <span class=\"hljs-selector-tag\">learn_chef_httpd<\/span>\n<span class=\"hljs-selector-tag\">knife<\/span> <span class=\"hljs-selector-tag\">cookbook<\/span> <span class=\"hljs-selector-tag\">create<\/span> <span class=\"hljs-selector-tag\">smartmontools<\/span> <span class=\"hljs-selector-tag\">-r<\/span> <span class=\"hljs-selector-tag\">md<\/span>\n<span class=\"hljs-selector-tag\">chef<\/span> <span class=\"hljs-selector-tag\">generate<\/span> <span class=\"hljs-selector-tag\">template<\/span> <span class=\"hljs-selector-tag\">learn_chef_httpd<\/span> <span class=\"hljs-selector-tag\">index<\/span><span class=\"hljs-selector-class\">.html<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Run recipes and cookbooks locally<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">These commands are commonly used during development and troubleshooting before deploying to managed nodes.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript language-bash\">chef-solo -c \/opt\/chef\/repo\/config\/solo.rb -o <span class=\"hljs-string\">'my_cookbook::recipe'<\/span>\nchef-apply hello.rb\nsudo chef-client --local-mode --runlist <span class=\"hljs-string\">'recipe&#91;learn_chef_httpd]'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Download and upload cookbooks<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use Knife cookbook commands to fetch cookbook artifacts and publish local cookbooks to Chef Server.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs language-bash\">knife cookbook site download learn_chef_httpd\nknife cookbook site install learn_chef_httpd\nknife cookbook upload learn_chef_httpd\nknife cookbook upload -a<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Bootstrap nodes and manage run lists with Knife<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The following examples show common node onboarding and day-2 operations. Replace hostnames, usernames, and credentials with your environment values.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript language-bash\">knife bootstrap ADDRESS --ssh-user USER --ssh-password <span class=\"hljs-string\">'PASSWORD'<\/span> --sudo --use-sudo-password --node-name node1 --run-list <span class=\"hljs-string\">'recipe&#91;learn_chef_apache2]'<\/span>\nknife bootstrap uvo1t75faaktzc532w6.vm.cld.sr -x root -P Br356YS0iy --sudo --node-name firefox\nknife bootstrap <span class=\"hljs-number\">123.45<\/span><span class=\"hljs-number\">.6<\/span><span class=\"hljs-number\">.789<\/span> -x username -P password --sudo<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\">knife node <span class=\"hljs-keyword\">list<\/span>\nknife node show node1\nknife node edit name_of_node\nknife node run_list add C2445575914.domain <span class=\"hljs-string\">'recipe&#91;hptrain]'<\/span>\nknife node run_list set test-node <span class=\"hljs-string\">'recipe&#91;iptables]'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\">knife ssh ADDRESS <span class=\"hljs-string\">'sudo chef-client'<\/span> --manual-<span class=\"hljs-keyword\">list<\/span> --ssh-user USER --ssh-password <span class=\"hljs-string\">'PASSWORD'<\/span>\nssh username@ipaddress -i mycredentials.pem sudo chef-client<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Typical Chef workflow<\/h2>\n\n\n\n<pre class=\"mermaid\">\nflowchart LR\n    A[Generate cookbook] --> B[Add recipe and template]\n    B --> C[Run local converge]\n    C --> D[Download dependencies]\n    D --> E[Upload cookbook]\n    E --> F[Bootstrap node]\n    F --> G[Run chef-client on node]\n    G --> H[Validate node state]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Reference link preserved from the original post<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The original page included a YouTube API-key troubleshooting reference: <a href=\"https:\/\/www.youtube.com\/watch?v=ZCfrNvu6nMc\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.youtube.com\/watch?v=ZCfrNvu6nMc<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Best practices and common pitfalls<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Prefer SSH keys over plaintext passwords in bootstrap and remote execution commands.<\/li><li>Run local convergence first (chef-apply, chef-solo, or local-mode) before server upload.<\/li><li>Keep run lists explicit and review node state after every run-list change.<\/li><li>Validate command flags against your installed Chef Infra\/Knife version, especially on older tutorials.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>A task-oriented reference for frequently used Chef and Knife commands, from cookbook scaffolding to node bootstrap and run-list management. Includes workflow guidance and copy-ready command examples.<\/p>\n","protected":false},"author":1,"featured_media":3356,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[88],"tags":[1385,407,1493,1495,1488,1491,1492,1489,1490,1494,1496,333,824],"class_list":["post-431","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chef","tag-cheatsheet","tag-chef","tag-chef-commands","tag-chef-commands-guide","tag-chef-commands-line","tag-chef-commands-line-guide","tag-chef-commands-line-help","tag-chef-commands-line-reference","tag-chef-commands-line-tutorial","tag-chef-commands-reference","tag-chef-commands-tutorials","tag-command","tag-command-line"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/431","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=431"}],"version-history":[{"count":5,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/431\/revisions"}],"predecessor-version":[{"id":79306,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/431\/revisions\/79306"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/3356"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=431"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}