{"id":"l-aws-1-4","courseId":"aws-cloud-foundations","lang":"en","kind":"lesson","summary":"Install the AWS CLI v2, sign in with short-term credentials using aws login, check who you are with aws sts get-caller-identity, and shape output with --query and --output.","html":"<p>You have a safe account and an admin identity. Clicking through the console works for a first look, but Lantern’s maintainers want something they can repeat, paste into a runbook and review in a pull request. Every console button calls an AWS API, and the <strong>AWS CLI v2</strong> lets you call the same APIs from your terminal.</p>\n<h2 id=\"sec-1\" tabindex=\"-1\">Console or CLI?</h2>\n<p>Use the <strong>console</strong> to explore, read dashboards, and do one-off tasks you want to see visually, such as the first look at a bill. Use the <strong>CLI</strong> for anything you will do twice, anything a colleague should review, and anything you want to undo exactly. A command in a script is documentation; a sequence of clicks is a memory.</p>\n<p>If you can’t install anything, <strong>AWS CloudShell</strong> gives you a browser terminal in the console with the CLI already installed and signed in as your console identity.</p>\n<h2 id=\"sec-2\" tabindex=\"-1\">Install and check the version</h2>\n<p>Install from the official package for your system. On Linux x86-64:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"bash\" data-index=\"0\"><div class=\"code-head\"><span class=\"code-title\">Terminal</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"Copy code\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>Copy</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">curl</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> \"https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip\"</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> -o</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> \"awscliv2.zip\"</span></span>\n<span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">unzip</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> awscliv2.zip</span></span>\n<span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">sudo</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> ./aws/install</span></span>\n<span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">aws</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --version</span></span></code></pre></div>\n<p>On macOS, AWS publishes a <code dir=\"ltr\">.pkg</code> installer, and on Windows an <code dir=\"ltr\">.msi</code>. Whichever you use, <code dir=\"ltr\">aws --version</code> should print <code dir=\"ltr\">aws-cli/2.</code> followed by a version number. You need <strong>2.32.0 or later</strong> for the sign-in command below; if you have an old version 1 install, remove it first, because the two behave differently.</p>\n<h2 id=\"sec-3\" tabindex=\"-1\">Sign in without access keys</h2>\n<p>The old way was <code dir=\"ltr\">aws configure</code>, pasting a long-term access key ID and secret into <code dir=\"ltr\">~/.aws/credentials</code>. Those keys never expire, and they leak through backups, screenshots and Git commits. Today you sign in with your console identity instead:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"bash\" data-index=\"1\"><div class=\"code-head\"><span class=\"code-title\">Terminal</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"Copy code\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>Copy</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">aws</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> login</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --profile</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> lantern-admin</span></span></code></pre></div>\n<p>The CLI asks for a default Region the first time (enter Lantern’s), opens your browser, and after you sign in with your password and MFA it stores <strong>short-term credentials</strong> that refresh automatically for up to 12 hours. Your <code dir=\"ltr\">~/.aws/config</code> gains a profile like this, and notice there is no secret in it:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"ini\" data-index=\"2\"><div class=\"code-head\"><span class=\"code-title\">~/.aws/config</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"Copy code\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>Copy</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">[profile lantern-admin]</span></span>\n<span class=\"line\"><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">login_session</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\"> = arn:aws:iam::111122223333:user/amara</span></span>\n<span class=\"line\"><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">region</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\"> = eu-west-1</span></span></code></pre></div>\n<p>An IAM user needs permission to use this flow; the <code dir=\"ltr\">AdministratorAccess</code> policy from the last lesson already includes it, and for narrower users AWS provides the <code dir=\"ltr\">SignInLocalDevelopmentAccess</code> managed policy. Teams that use IAM Identity Center sign in with <code dir=\"ltr\">aws configure sso</code> and <code dir=\"ltr\">aws sso login</code> instead, which you meet in section two. When you are finished, <code dir=\"ltr\">aws logout --profile lantern-admin</code> deletes the cached credentials.</p>\n<h2 id=\"sec-4\" tabindex=\"-1\">Who am I?</h2>\n<p>The most useful command in AWS is also the most boring:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"bash\" data-index=\"3\"><div class=\"code-head\"><span class=\"code-title\">Terminal</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"Copy code\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>Copy</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">aws</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> sts</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> get-caller-identity</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --profile</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> lantern-admin</span></span></code></pre></div>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"json\" data-index=\"4\"><div class=\"code-head\"><span class=\"code-title\">JSON</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"Copy code\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>Copy</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">{</span></span>\n<span class=\"line\"><span style=\"color:#116329;--shiki-dark:#7EE787\">  \"UserId\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">: </span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">\"AIDAEXAMPLEUSERID1234\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"color:#116329;--shiki-dark:#7EE787\">  \"Account\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">: </span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">\"111122223333\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"color:#116329;--shiki-dark:#7EE787\">  \"Arn\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">: </span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">\"arn:aws:iam::111122223333:user/amara\"</span></span>\n<span class=\"line\"><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<p>It needs no permissions and changes nothing, so even a brand-new identity with no policies attached can run it. If it fails, the problem is your credentials, not your permissions: expired session, wrong profile name, or no network. It tells you which <strong>account</strong> and which <strong>identity</strong> every following command will use. Run it before anything destructive, and in scripts, check that <code dir=\"ltr\">Account</code> is the one you expect before going further.</p>\n<aside class=\"callout callout-mistake\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/></svg><span><span class=\"callout-kind\">Common mistake</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>Running against the wrong account</span></p>\n<p>With several profiles, it is easy to run a cleanup script in production when you meant the test account. The CLI picks credentials from <code dir=\"ltr\">--profile</code>, then the <code dir=\"ltr\">AWS_PROFILE</code> environment variable, then <code dir=\"ltr\">default</code>. Avoid a <code dir=\"ltr\">default</code> profile that points at production, and put a <code dir=\"ltr\">get-caller-identity</code> check at the top of every script.</p>\n</aside>\n<h2 id=\"sec-5\" tabindex=\"-1\">Shaping the output</h2>\n<p>Responses are JSON by default, and often long. Two global options help:</p>\n<ul>\n<li><code dir=\"ltr\">--output</code> picks the format: <code dir=\"ltr\">json</code>, <code dir=\"ltr\">text</code>, <code dir=\"ltr\">table</code> or <code dir=\"ltr\">yaml</code>.</li>\n<li><code dir=\"ltr\">--query</code> filters the response with a JMESPath expression <strong>on your machine</strong> before printing.</li>\n</ul>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"bash\" data-index=\"5\"><div class=\"code-head\"><span class=\"code-title\">Terminal</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"Copy code\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>Copy</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">aws</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> s3api</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> list-buckets</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --profile</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> lantern-admin</span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --query</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> \"Buckets[].Name\"</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --output</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> text</span></span></code></pre></div>\n<p>That prints only the bucket names, tab-separated, ready for a shell loop. Because <code dir=\"ltr\">--query</code> runs locally, it does not reduce what AWS returns or what the call costs; it only reduces what you have to read.</p>\n<aside class=\"callout callout-tip\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\"/><path d=\"M9 18h6\"/><path d=\"M10 22h4\"/></svg><span><span class=\"callout-kind\">Tip</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>Two small settings that save frustration</span></p>\n<p>The CLI pipes long output through a pager. In scripts, add <code dir=\"ltr\">--no-cli-pager</code> or set <code dir=\"ltr\">AWS_PAGER=&quot;&quot;</code> so commands never wait for a keypress. And <code dir=\"ltr\">aws s3 help</code> (or <code dir=\"ltr\">aws s3 cp help</code>) shows the full reference for any command offline.</p>\n</aside>\n<p>That closes section one: you know where AWS runs things, who secures what, and how to drive the account safely. Section two looks inside IAM, the system that decides whether each of those other calls is allowed. (<code dir=\"ltr\">get-caller-identity</code> is the one exception: it works even when a policy denies it.)</p>\n","toc":[{"id":"sec-1","text":"Console or CLI?","level":2},{"id":"sec-2","text":"Install and check the version","level":2},{"id":"sec-3","text":"Sign in without access keys","level":2},{"id":"sec-4","text":"Who am I?","level":2},{"id":"sec-5","text":"Shaping the output","level":2}],"takeaways":["The console and the CLI call the same APIs; use the console to explore and the CLI for anything you will repeat or review.","<code dir=\"ltr\">aws login</code> turns your console sign-in into short-term CLI credentials that refresh automatically, so no long-term access keys sit on your laptop.","<code dir=\"ltr\">aws sts get-caller-identity</code> shows the account and identity your commands run as; run it before anything destructive.","Named profiles plus <code dir=\"ltr\">--profile</code> or <code dir=\"ltr\">AWS_PROFILE</code> keep work in different accounts apart.","<code dir=\"ltr\">--query</code> filters the JSON response on your machine and <code dir=\"ltr\">--output</code> changes its format; neither changes what AWS does."],"further":[{"title":"Installing or updating to the latest version of the AWS CLI","url":"https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html"},{"title":"Login for AWS local development using console credentials","url":"https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sign-in.html"},{"title":"Filtering output in the AWS CLI","url":"https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html"},{"title":"get-caller-identity (AWS CLI Command Reference)","url":"https://docs.aws.amazon.com/cli/latest/reference/sts/get-caller-identity.html"}],"quiz":[{"q":"<p>You are about to delete an S3 bucket from your terminal and you have profiles for a test account and Lantern’s production account. What should you run first?</p>","options":[{"text":"<code dir=\"ltr\">aws s3 ls</code> to see the bucket list","why":"It lists buckets for whichever identity is active, but it does not tell you which account that is. Two accounts can have similar bucket names."},{"text":"<code dir=\"ltr\">aws configure</code> to re-enter your credentials","why":"Re-entering credentials changes your setup rather than checking it, and it writes long-term keys you should not need."},{"text":"<code dir=\"ltr\">aws sts get-caller-identity</code> to see which account and identity the command will run as","why":"Correct. It returns the account ID and ARN of the identity in use, which is exactly what you need to check before a destructive command."}],"answer":2},{"q":"<p>Which is the main security advantage of <code dir=\"ltr\">aws login</code> over pasting an access key into <code dir=\"ltr\">aws configure</code>?</p>","options":[{"text":"It gives you more permissions than an access key would.","why":"Permissions come from the identity’s policies, not from how you sign in. <code dir=\"ltr\">aws login</code> grants nothing extra."},{"text":"The credentials are short-term and refreshed for you, so there is no long-lived secret in a file on your laptop.","why":"Correct. A leaked access key works until someone deletes it. Login credentials expire within hours."},{"text":"It stops anyone from reading your <code dir=\"ltr\">~/.aws/config</code> file.","why":"The config file is a plain text file and is still readable. The benefit is that it holds no long-term secret."},{"text":"It works without an internet connection.","why":"Every AWS CLI call goes over the network to an AWS API, and signing in needs a browser flow too."}],"answer":1},{"q":"<p>What does this command print?</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"bash\" data-index=\"0\"><div class=\"code-head\"><span class=\"code-title\">Terminal</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"Copy code\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>Copy</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">aws</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> ec2</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> describe-availability-zones</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --region</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> eu-west-1</span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --query</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> \"AvailabilityZones[].ZoneName\"</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --output</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> text</span></span></code></pre></div>\n","options":[{"text":"The zone names on one line, separated by tabs, such as <code dir=\"ltr\">eu-west-1a  eu-west-1b  eu-west-1c</code>","why":"Correct. <code dir=\"ltr\">--query</code> keeps only the ZoneName values and <code dir=\"ltr\">--output text</code> prints them tab-separated without JSON brackets."},{"text":"The full JSON response, because <code dir=\"ltr\">--query</code> only works with <code dir=\"ltr\">--output json</code>","why":"<code dir=\"ltr\">--query</code> works with every output format. It runs on your machine before formatting."},{"text":"An error, because the query must start with a dollar sign","why":"The AWS CLI uses JMESPath, which starts from the top-level keys of the response, with no dollar sign."}],"answer":0}],"exercise":{"kind":"fill","language":"bash","template":"# 1. Sign in with your console identity (short-term credentials)\naws {{0}} --profile lantern-admin\n\n# 2. Confirm which account and identity you are using\naws {{1}} get-caller-identity --profile lantern-admin\n\n# 3. List bucket names only, as plain text, in Lantern's Region\naws s3api list-buckets --profile lantern-admin \\\n  --{{2}} eu-west-1 \\\n  --query \"Buckets[].Name\" --output {{3}}","blanks":[{"answers":["login"]},{"answers":["sts"]},{"answers":["region"]},{"answers":["text"]}],"title":"Your first three CLI commands","prompt":"<p>Complete Lantern’s start-of-day routine with the AWS CLI v2. Step 1 signs in without access keys, step 2 proves which account you are in, and step 3 lists bucket names as plain tab-separated text in Lantern’s Region (<code dir=\"ltr\">eu-west-1</code>).</p>\n","hints":["The sign-in command is a single word and needs CLI 2.32.0 or later.","<code dir=\"ltr\">get-caller-identity</code> belongs to the Security Token Service.","The global option that overrides the profile’s Region is <code dir=\"ltr\">--region</code>; the plain-text output format is the one that suits shell loops."],"explanation":"<p><code dir=\"ltr\">aws login</code> creates short-term credentials from your console sign-in, so no secret access key is stored. <code dir=\"ltr\">aws sts get-caller-identity</code> returns the account ID and the ARN of the identity in use, which you check before doing anything that changes resources. <code dir=\"ltr\">--region</code> overrides the Region stored in the profile for a single command, and <code dir=\"ltr\">--output text</code> prints the values selected by <code dir=\"ltr\">--query</code> without JSON brackets, one tab between each name.</p>\n","checkLabels":{}},"words":695,"readMinutes":3}