{"componentChunkName":"component---src-templates-post-template-js","path":"/posts/what-is-executing-a-command-on-bash","result":{"data":{"markdownRemark":{"id":"c36125f7-2fcc-5015-9aa2-fc13018215ac","html":"<p>慣れてくると当たり前になる概念も、しっかり説明しようとすると意外と難しいことがあります。</p>\n<p>例えば、「Bash でコマンドを実行する」ということを説明しようとすると、実は結構難しいのではないでしょうか。</p>\n<p>この記事では、「Bash でコマンドを実行する」ということを少しだけ掘り下げてみます。</p>\n<ul>\n<li>コマンドとは何か、コマンドをどうやって探すのか</li>\n<li>実行可能なファイルとは何か、どんな流れで実行されるのか</li>\n</ul>\n<p>という順で書いていきます。</p>\n<h2 id=\"まず一歩掘り下げる\" style=\"position:relative;\"><a href=\"#%E3%81%BE%E3%81%9A%E4%B8%80%E6%AD%A9%E6%8E%98%E3%82%8A%E4%B8%8B%E3%81%92%E3%82%8B\" aria-label=\"まず一歩掘り下げる permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>まず一歩掘り下げる</h2>\n<p>掘り下げのまず一歩目として、コマンドを実行するときの基本的な概念について書いていきます。</p>\n<p>プログラミングの入門などでも遭遇する話題で、なるべく早くに理解しておきたい内容です。</p>\n<h3 id=\"コマンドとは何か\" style=\"position:relative;\"><a href=\"#%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8B\" aria-label=\"コマンドとは何か permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>コマンドとは何か</h3>\n<p>例えば、Bash で</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ cat hello.txt world.txt</code></pre></div>\n<p>と入力して実行するとき、「cat」がコマンド名で、「hello.txt」と「world.txt」はそのコマンドに与える引数です。</p>\n<p>引数という概念自体は、プログラミングで登場する関数の引数と同じなので、理解できている方が多いと思います。</p>\n<p>では、「cat」のようなコマンドは一体なんなのでしょうか？</p>\n<p>実は、<strong>Bash で実行できるコマンドには、「組み込みコマンド」と「外部コマンド」の 2 種類があります</strong>。</p>\n<h3 id=\"組み込みコマンドとは？\" style=\"position:relative;\"><a href=\"#%E7%B5%84%E3%81%BF%E8%BE%BC%E3%81%BF%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A8%E3%81%AF%EF%BC%9F\" aria-label=\"組み込みコマンドとは？ permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>組み込みコマンドとは？</h3>\n<p>組み込みコマンドというのは、Bash 自体に実装されているコマンドです。</p>\n<p>Bash のソースコードのどこかに書いてあるようなイメージで大丈夫です。</p>\n<p>あるコマンドが組み込みコマンドかどうかは、type などで確認できます。</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ type alias\nalias is a shell builtin</code></pre></div>\n<h3 id=\"外部コマンドとは？\" style=\"position:relative;\"><a href=\"#%E5%A4%96%E9%83%A8%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A8%E3%81%AF%EF%BC%9F\" aria-label=\"外部コマンドとは？ permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>外部コマンドとは？</h3>\n<p>では、Bash に組み込まれていないコマンドである「外部コマンド」とはなんでしょうか。</p>\n<p><strong>外部コマンドの実体は、ただの「実行可能なファイル」です</strong>。</p>\n<p>例えば cat は外部コマンドなのですが、以下のように特定のディレクトリに置いてあるただのファイルです。</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ type cat\ncat is /bin/cat\n$ ls -l /bin/cat\n-rwxr-xr-x  1 root  wheel  23648  5  4  2019 /bin/cat</code></pre></div>\n<p>この cat ファイルの中身は、ざっくり言うと機械語にコンパイル済みのプログラムです。</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ file /bin/cat\n/bin/cat: Mach-O 64-bit executable x86_64</code></pre></div>\n<p>Bash は <code class=\"language-text\">cat hello.txt world.txt</code> という入力を受け取ったとき、このファイルを探し出して実行しているのです。</p>\n<p>ls コマンドも同じようにただのファイルですし、ruby コマンド、python コマンドなどもただのファイルです。</p>\n<p>なので、<strong>例えば新しく php コマンドを実行できるようにしたい場合は、めちゃくちゃ単純化して言うと、php というファイルをダウンロードしてきて置いておけば OK です</strong>。</p>\n<h3 id=\"パス\" style=\"position:relative;\"><a href=\"#%E3%83%91%E3%82%B9\" aria-label=\"パス permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>パス</h3>\n<p>といっても、たくさんディレクトリがある中でどこに置いてもいいということではありません。</p>\n<p>それでは Bash が実行するファイルを探すときに困ってしまうのです。</p>\n<p>ここで パス (PATH) という設定が関係してきます。</p>\n<p><strong>Bash が外部コマンドを探すときは、「パス」という設定に登録されたディレクトリを探します</strong>。</p>\n<p>パスは <code class=\"language-text\">echo $PATH</code> などで確認できます。</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ echo $PATH\n/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</code></pre></div>\n<p>もしパスがこのように設定されている場合、<code class=\"language-text\">cat hello.txt world.txt</code> と入力すると、Bash は</p>\n<ul>\n<li>/usr/local/bin</li>\n<li>/usr/bin</li>\n<li>/bin</li>\n<li>/usr/sbin</li>\n<li>/sbin</li>\n</ul>\n<p>というディレクトリを順番に見ていって、「cat」というファイルを探します。</p>\n<p>そこで「cat」というファイルが見つかれば、それを実行してくれるのです。</p>\n<h3 id=\"1-ファイルで動くとは限らない\" style=\"position:relative;\"><a href=\"#1-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A7%E5%8B%95%E3%81%8F%E3%81%A8%E3%81%AF%E9%99%90%E3%82%89%E3%81%AA%E3%81%84\" aria-label=\"1 ファイルで動くとは限らない permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1 ファイルで動くとは限らない</h3>\n<p>こういった仕組みで「cat」や「php」などの外部コマンドが実行されるわけですが、実は、「php」ファイルをダウンロードしてきて、パスが通った場所に置いておけば大丈夫とは限りません。</p>\n<p>実行可能ファイルは、そのファイル 1 つで実行可能とは限らないのです。</p>\n<p>実行時に必要とされるライブラリ (ダイナミックリンクライブラリ) は、例えば以下のように確認できます。</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ otool -L /usr/bin/php\n/usr/bin/php:\n        /usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 1.0.0)\n        /usr/lib/libcrypto.35.dylib (compatibility version 36.0.0, current version 36.0.0)\n        /usr/lib/libssl.35.dylib (compatibility version 36.0.0, current version 36.0.0)\n    :</code></pre></div>\n<p>このように、php コマンドひとつとっても、実は他のファイル (ライブラリ) に依存していたりするのです。</p>\n<p>依存しているライブラリが不足していると、実行時にエラーになります。</p>\n<p>この依存関係にあるファイルを手作業で 1 つ 1 つ探してダウンロードしてくるのは大変なので、yum や apt といった便利なツール (これもただの外部コマンド) を使ってインストールしたりするのです。</p>\n<h2 id=\"もう一歩掘り下げる\" style=\"position:relative;\"><a href=\"#%E3%82%82%E3%81%86%E4%B8%80%E6%AD%A9%E6%8E%98%E3%82%8A%E4%B8%8B%E3%81%92%E3%82%8B\" aria-label=\"もう一歩掘り下げる permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>もう一歩掘り下げる</h2>\n<p>実行可能なファイルを実行するとはどういうことか、もう少しだけ掘り下げてみます。</p>\n<p>ここからは初心者向けではなく、アプリケーションエンジニアであれば知らない方も少なくないと思います。</p>\n<h3 id=\"実行可能なファイルとは？\" style=\"position:relative;\"><a href=\"#%E5%AE%9F%E8%A1%8C%E5%8F%AF%E8%83%BD%E3%81%AA%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A8%E3%81%AF%EF%BC%9F\" aria-label=\"実行可能なファイルとは？ permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>実行可能なファイルとは？</h3>\n<p>この記事の最初の方で、Bash は実行可能なファイルを探して実行すると書きました。</p>\n<p>Bash で実行可能なファイルには</p>\n<ul>\n<li>バイナリ実行形式 (機械語のプログラム)</li>\n<li>シバン付きのスクリプト (#!/bin/bash や #!/usr/bin/ruby などで始まるスクリプト)</li>\n<li>シバンのない Bash スクリプト</li>\n</ul>\n<p>の 3 種類があります。</p>\n<h3 id=\"bash-が実行可能なファイルを実行する流れ\" style=\"position:relative;\"><a href=\"#bash-%E3%81%8C%E5%AE%9F%E8%A1%8C%E5%8F%AF%E8%83%BD%E3%81%AA%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E6%B5%81%E3%82%8C\" aria-label=\"bash が実行可能なファイルを実行する流れ permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Bash が実行可能なファイルを実行する流れ</h3>\n<p>Bash が実行可能なファイルを実行するとき、内部的には OS の中心である「カーネル」に対し、大きく 2 つの処理をお願いします。</p>\n<p>1 つ目は、Bash の子プロセスを作ること (fork) です。</p>\n<p>2 つ目は、作った子プロセスで、コマンドを実行すること (execve) です。</p>\n<p>ちなみに、このようにカーネルに処理をお願いする方法を「システムコール」と言います。</p>\n<h3 id=\"execve-での実行の流れ\" style=\"position:relative;\"><a href=\"#execve-%E3%81%A7%E3%81%AE%E5%AE%9F%E8%A1%8C%E3%81%AE%E6%B5%81%E3%82%8C\" aria-label=\"execve での実行の流れ permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>execve での実行の流れ</h3>\n<p>Bash は、fork というシステムコールで子プロセスを作ったあと、execve というシステムコールを使って、カーネルにファイルの実行を依頼します。</p>\n<p>execve は、</p>\n<ul>\n<li>バイナリ実行形式 (機械語のプログラム)</li>\n<li>シバン付きのスクリプト (#!/bin/bash や #!/usr/bin/ruby などで始まるスクリプト)</li>\n</ul>\n<p>のどちらでも実行してくれます。</p>\n<p>バイナリ実行形式 (機械語のプログラム) の場合は、そのまま実行していきます。</p>\n<p>シバン付きのスクリプトの場合は、シバンで指定した実行可能なファイルに、Bash 上で指定したファイルを引数として与えらて実行します。</p>\n<p>参考</p>\n<ul>\n<li><a href=\"https://linuxjm.osdn.jp/html/LDP_man-pages/man2/execve.2.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Man page of EXECVE</a></li>\n</ul>\n<h3 id=\"シバンのない-bash-スクリプトはなぜ実行されるのか\" style=\"position:relative;\"><a href=\"#%E3%82%B7%E3%83%90%E3%83%B3%E3%81%AE%E3%81%AA%E3%81%84-bash-%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AF%E3%81%AA%E3%81%9C%E5%AE%9F%E8%A1%8C%E3%81%95%E3%82%8C%E3%82%8B%E3%81%AE%E3%81%8B\" aria-label=\"シバンのない bash スクリプトはなぜ実行されるのか permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>シバンのない Bash スクリプトはなぜ実行されるのか</h3>\n<p>シバンのない Bash スクリプトは、execve では実行されません。</p>\n<p>execve が失敗した後、Bash がテキストファイルなのかを判断した上で実行することになります。</p>\n<p>ちなみに、このときは fork によって子プロセスが作られることはなく、既存の Bash プロセス上で実行されます。</p>\n<p>参考</p>\n<ul>\n<li><a href=\"https://github.com/bminor/bash/blob/ce23728687ce9e584333367075c9deef413553fa/execute_cmd.c#L5425\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Bash のソースコードの該当箇所</a></li>\n</ul>","fields":{"slug":"/posts/what-is-executing-a-command-on-bash","tagSlugs":["/tag/bash/","/tag/linux/"],"autoRecommendPosts":["what-is-installation","where-are-c-header-files","udemy-linux-reintroduction","udemy-crafting-shell"]},"frontmatter":{"date":"2021-05-15T14:01:06.462Z","description":"慣れてくると当たり前になる概念も、しっかり説明しようとすると意外と難しいことがあります。\n例えば、「Bash でコマンドを実行する」ということを説明しようとすると、実は結構難しいのではないでしょうか。\nこの記事では、「Bash でコマンドを実行する」ということを少しだけ掘り下げてみます。","tags":["bash","linux"],"title":"「Bash でコマンドを実行する」を少しだけ掘り下げてみる","socialImage":null,"recommendPosts":["https://www.kanzennirikaisita.com/posts/linux-next-step-books","https://www.kanzennirikaisita.com/posts/4839975868","https://www.kanzennirikaisita.com/posts/software-developer-books-index"]}}},"pageContext":{"slug":"/posts/what-is-executing-a-command-on-bash"}},"staticQueryHashes":["251939775","3942705351","401334301"]}