質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.49%

  • Linux

    3888questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • bash

    666questions

    bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

  • UNIX

    387questions

    UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

cpはbash? sh? shell? Linuxコマンド?

解決済

回答 5

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,670

re97

score 195

bash、sh、シェルスクリプト、shell、Linuxコマンドの違いが分からないのですが
・shellはLinuxコマンドの一部?
・bashとshは兄弟みたいな関係でshellの一部?
・シェルスクリプトは、bashやshの組み合わせ?

・下記のような階層でしょうか?
Linuxコマンド
┗shell
  ┣bash
  ┗sh

・cpコマンドは、bashで使用できて、shでも使用できて、shellであって、Linuxコマンドでもある、ということですか?
・cpコマンド1つだけでは、シェルスクリプトとは言わない? あるいはバッチ処理として動かせばそれはもうシェルスクリプト?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

checkベストアンサー

+1

よろしければ過去の質問に私が答えた回答もご覧ください。
bashを使っているのにecho 'PATH="/usr/local/heroku/bin:$PATH"' >> ~/.zshrcでパスを通せた理由がわかりません - teratail

cp や ls なんかも Linux のコマンドです。これをファイルシステムから読み込んでプロセスを生成して、というのを直接やるのは大変なので、シェルを使うわけです。ユーザがコマンドを入力すると、シェルが何か処理して表示する、というのは、対話的シェルとか対話モードのシェルと言います。
これに対し、あれをやってこれをやって、というのをあらかじめファイルに用意しておき、それを実行することもできます。この台本 (= script) となるファイルがスクリプトファイルです。スクリプトファイルを実行するのが python インタプリタなら pyhton スクリプトであるように、シェルで実行するスクリプトなのでシェルスクリプト、と言います。
ですので、シェルスクリプトは(通常)ファイルの形状をしています。cp /dev/null /tmp/test.txt 一行だけだとしても、ファイルに記述してあり、これをシェルで実行するならシェルスクリプトです。他方、対話シェルでも

[takeyuki@jupiter ~]$ while sleep 1
> do echo .
> done


とかやると、制御構造も書けるし複数行入力もできますが、これはシェルスクリプトとは呼ばないと思います(while を書くと、do ~ done までのブロックを書き終えるまで入力を促される。 はそのときシェルから出力されるプロンプト)。


追記

sharow さんの回答のところにコメントでちょっと書きましたが、シェルはドラえもんと考えるといいかもです。
ドラえもんって便利ですけど、本当に便利なのは四次元ポケットの中(ファイルシステム)にあるさまざまな道具(Linux コマンド)なんですよね。でも、四次元ポケットから適切な道具を取り出すのは素人には困難なので、ドラえもん(bsh)を使うわけです。ドラミちゃん (zsh) の方が高機能でユーザフレンドリーで道具(Linux コマンド) に頼らずに自分自身でできちゃうこと(組み込みコマンド)も多くて、柔軟に対応してくれるんですね。ドラえもんやドラミちゃんも実は道具(Linux コマンド)なので、ドラえもん (bsh) に対して「ドラミちゃん (zsh) を呼び出して」と頼んで、以降、ドラミちゃんにいろいろお願いすることも可能です。
ドラえもんと向かい合っているときに「あれやって」「こういう道具出して」と対話的にお願いすることもできます(対話モード)し、手紙にやってほしいことを書いて(シェルスクリプト)、「これよろしく!」と頼むこともできます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/24 21:40 編集

    ・回答ありがとうございました

    ・「Linux コマンド」と「シェル」は異なるが、台本 (= script) となるスクリプトファイルに書いて実行すれば、何れも「シェルスクリプト」と呼ばれる、ということでしょうか?

    キャンセル

  • 2016/04/25 06:07

    ドラえもんについて追記しました。

    キャンセル

  • 2016/04/28 20:55 編集

    ・コメントありがとうございました

    >(zsh) の方が高機能でユーザフレンドリーで道具(Linux コマンド) に頼らずに自分自身でできちゃうこと(組み込みコマンド)も多くて、柔軟に対応してくれるんですね
    ・初めて知りました

    ・「ドラえもんの例え」については全体的な関係が大まかにでも分かったので良かったです
    ・特に「対話モード」と「シェルスクリプト」の説明は分かりやすかったです

    ・参考になりました

    キャンセル

+1

数学の集合の言葉を使うと、
シェル(注1)はLinuxコマンドの部分集合。bash sh はシェルの要素(当然、Linuxコマンドの要素でもある)。
cpコマンドはLinuxコマンドの要素だが、シェルの要素ではない。

シェルスクリプトは、シェルが読み込んで実行するファイルのこと。ファイルの中には、シェルの組み込みコマンドや、Linuxコマンドが書いてある。

注1:シェル(shell)とは殻という意味の一般の英単語なので、当然ここで述べている以外の意味もあります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/24 21:31

    ・回答ありがとうございました
    ・内容難しかったです

    ・「シェルの組み込みコマンド」って何でしょうか?
    ・「シェルがLinuxコマンドの部分集合」であるなら、「シェルの組み込みコマンド」は、「シェル専用のコマンド」ということでしょうか? Linuxコマンドではない?

    キャンセル

  • 2016/04/24 22:14 編集

    > ・内容難しかったです

    bash や tcsh はLinuxコマンドです。
    bash や tcsh はシェルです。
    cp 等はLinuxコマンドですが、シェルでは無いです。

    > ・「シェルの組み込みコマンド」って何でしょうか?

    read とかですね。echo や [ のように同名の外部コマンド(/bin/echo /usr/bin/[)があるが速度向上のために同機能の組み込みコマンドを用意しているケースもあります。
    echo と書くと、Bash組み込みコマンドのechoが動き、
    /bin/echo と書くと、外部コマンドのechoが動きます。

    > 「シェルの組み込みコマンド」は、「シェル専用のコマンド」ということでしょうか?

    そうです。
    外部の実行ファイルを呼び出さないコマンドです。

    > Linuxコマンドではない?

    それは、「Linuxコマンドとは何か」の定義によります。「シェルから使えるコマンド」という意味ならLinuxコマンドの一種でしょう。「PATHのディレクトリに含まれる実行ファイル」であれば違う。

    キャンセル

  • 2016/04/28 20:51

    ・コメントありがとうございました

    >echo や [ のように同名の外部コマンド(/bin/echo /usr/bin/[)があるが速度向上のために同機能の組み込みコマンドを用意しているケースもあります。
    >echo と書くと、Bash組み込みコマンドのechoが動き、/bin/echo と書くと、外部コマンドのechoが動きます
    ・初めて知りました

    ・参考になりました

    キャンセル

+1

シェル(bash/sh/...)を中心にして他を捉えたほうが分かりやすいんじゃないでしょうか。

シェルから使うコマンドは組み込みコマンドとその他のコマンドに分けられます。私の環境のbashではexitコマンドなどはシェルの組み込みコマンド(built-in command)です。zshだとechoまでも組み込みコマンドになっていますが、何が組み込みであるかはシェルの種類によって異なります。もし/usr/binなどにあるコマンドを(組み込みでないから)Linuxコマンドと呼ぶのなら、組み込みコマンド以外はLinuxコマンド、と言うことができます。これは$PATHがちゃんと設定されていればwhich command-nameというコマンドで調べられます。例えばシェルスクリプトのifなどで使われる[は意外にもLinuxコマンドです(/usr/bin/[という実行ファイルがあります)。

なお、ifやforは組み込みコマンドではなくシェルの予約語という扱いのようです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/24 21:45

    ・回答ありがとうございました
    ・内容難しかったです

    ・「Linuxコマンド」と「シェルの組み込みコマンド」の違いが分かりませんでした

    ・ネットで検索してみたのですが、
    >Linuxで使用可能なコマンドは、/binや/sbin、/usr/binなどのディレクトリに収められているプログラムのほかに、シェル組み込みのコマンドがある。MS-DOSの外部コマンド、内部コマンドと同じような位置付けだ

    >MS-DOSの外部コマンド、内部コマンド???

    キャンセル

  • 2016/04/24 22:24

    その・・MS-DOSという単語は忘れてください。そんなものは存在しません!!(暴言)

    「シェルの組み込みコマンド」と外部の「その他のコマンド(Linux含む)」の違いは、シェルから見て外部のコマンドかそうでないかです。例えばディレクトリを変更するcdは、外部コマンドとして提供するには無理があります。

    キャンセル

  • 2016/04/25 05:39 編集

    横から失礼します。
    「MS-DOSという単語は忘れてください。そんなものは存在しません!!」、ウケました。でも、ほんとそうですね。そういう古い記事がヒットしてしまうのがググって勉強するリスクですね。

    シェルをドラえもんだとすると、何か頼んだときにドラえもん自身が対処してくれるのが組み込みコマンドで、四次元ポケット(ファイルシステム)から何か取り出して対処してくれるのが Linux コマンドです。ドラえもん (bsh) もそこそこ便利ですが、ドラミちゃん (zsh) はさらに高機能かつユーザフレンドリーで、ドラえもんが道具(Linux コマンド (外部コマンド)) に頼らなければならないことが、ドラミちゃんは道具なしで(組み込みコマンドだけで)できちゃったりします。

    キャンセル

  • 2016/04/25 11:14

    シェルの説明にMS-DOSが出てくると、MS-DOSを知ってる前提があるので、ちょっとどうかなぁと思わないでもありません。個人でやってる説明ページだったりしますから、口出しできる筋合いではないんですけどもね・・。

    キャンセル

  • 2016/04/28 21:04

    ・コメントありがとうございました

    >zshだとechoまでも組み込みコマンドになっていますが、何が組み込みであるかはシェルの種類によって異なります
    >もし/usr/binなどにあるコマンドを(組み込みでないから)Linuxコマンドと呼ぶのなら、組み込みコマンド以外はLinuxコマンド、と言うことができます。これは$PATHがちゃんと設定されていればwhich command-nameというコマンドで調べられます
    ・参考になりました

    ・シェルには色々な種類があることを知り、奥が深そう(大変そうだけどちょっと面白そう)だと思いました…

    キャンセル

0

・shellはLinuxコマンドの一部? 

shell(bashとかsh)はLinuxコマンドの一部です。

・bashとshは兄弟みたいな関係でshellの一部? 

shellの一部というわけではなくてshellのいくつかの種類のうちの一つです。

・シェルスクリプトは、bashやshの組み合わせ?

シェルスクリプトは、bashやshの組み合わせではなく、コマンドやshell の組み込みコマンドの組み合わせです。

・下記のような階層でしょうか? 
Linuxコマンド 
┗shell 
  ┣bash 
  ┗sh

shell はLinuxコマンドの中の一つです。
bash、sh は shell のいくつかの種類の中の一つです。
同じ、配下にあっても少し意味合いが違うような気もします。

・cpコマンドは、bashで使用できて、shでも使用できて、shellであって、Linuxコマンドでもある、ということですか? 

cpコマンドはLinuxコマンドです。shellではありません。
cpに限らず一般的にコマンドはshell(bashでもshでも)で使えます。

・cpコマンド1つだけでは、シェルスクリプトとは言わない? あるいはバッチ処理として動かせばそれはもうシェルスクリプト?

別にコマンド一つでもシェルスクリプトです。
バッチ処理(バックグランドという意味で)とか動かし方は関係ありません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/24 21:22 編集

    ・回答ありがとうございました
    ・内容難しかったです

    >cpコマンドはLinuxコマンドです。shellではありません。
    >cpに限らず一般的にコマンドはshell(bashでもshでも)で使えます
    ・例えば、ターミナルソフトを起動してcpコマンドを打った場合、shellを起動せずLinuxコマンドを直接打ったことになるのでしょうか?
    ・それとも、shell(bashでもshでも)を介してLinuxコマンドを打ったことになるのでしょうか?

    キャンセル

  • 2016/04/24 22:19

    shellを介してLinuxコマンドを打ったことになります。
    ターミナルを起動した(ログインした)時点で自動的にshellは起動しています。
    $ などのプロンプトは shell が出しています。
    ログイン時に自動的に起動するshellはログインシェル(login shell)と言います。

    キャンセル

  • 2016/04/28 20:49

    ・コメントありがとうございました

    >ターミナルを起動した(ログインした)時点で自動的にshellは起動しています。
    >ログイン時に自動的に起動するshellはログインシェル(login shell)と言います
    ・初めて知りました

    >shellを介してLinuxコマンドを打ったことになります
    ・そういう意味なんですね
    ・大変参考になりました

    キャンセル

0

シェルスクリプトはシェルにまとめて指示を与えるテキストファイルです。

だいぶ混乱されているようですが、まあ実際のところ(極端なことを言えば)
どれも同じような「実行ファイル」ですからねえ。しょうがないかも。
とりあえず【なにか】がやりたいから質問してるんですよね?
次回からは、そのへんをまとめてみたらどうでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/24 21:31

    回答ありがとうございました

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Linux

    3888questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • bash

    666questions

    bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

  • UNIX

    387questions

    UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。