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

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

新規登録して質問してみよう
ただいま回答率
85.48%
bash

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

Linux

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

UNIX

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

Q&A

解決済

5回答

5887閲覧

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

re97

総合スコア208

bash

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

Linux

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

UNIX

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

0グッド

1クリップ

投稿2016/04/24 10:52

編集2016/04/24 10:58

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ベストアンサー

よろしければ過去の質問に私が答えた回答もご覧ください。
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 12:06

編集2016/04/24 20:52
unau

総合スコア2468

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

re97

2016/04/24 12:40 編集

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

2016/04/24 21:07

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

2016/04/28 11:56 編集

・コメントありがとうございました >(zsh) の方が高機能でユーザフレンドリーで道具(Linux コマンド) に頼らずに自分自身でできちゃうこと(組み込みコマンド)も多くて、柔軟に対応してくれるんですね ・初めて知りました ・「ドラえもんの例え」については全体的な関係が大まかにでも分かったので良かったです ・特に「対話モード」と「シェルスクリプト」の説明は分かりやすかったです ・参考になりました
guest

0

シェル(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 12:24

sharow

総合スコア1149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

re97

2016/04/24 12:45

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

2016/04/24 13:24

その・・MS-DOSという単語は忘れてください。そんなものは存在しません!!(暴言) 「シェルの組み込みコマンド」と外部の「その他のコマンド(Linux含む)」の違いは、シェルから見て外部のコマンドかそうでないかです。例えばディレクトリを変更するcdは、外部コマンドとして提供するには無理があります。
unau

2016/04/24 20:53 編集

横から失礼します。 「MS-DOSという単語は忘れてください。そんなものは存在しません!!」、ウケました。でも、ほんとそうですね。そういう古い記事がヒットしてしまうのがググって勉強するリスクですね。 シェルをドラえもんだとすると、何か頼んだときにドラえもん自身が対処してくれるのが組み込みコマンドで、四次元ポケット(ファイルシステム)から何か取り出して対処してくれるのが Linux コマンドです。ドラえもん (bsh) もそこそこ便利ですが、ドラミちゃん (zsh) はさらに高機能かつユーザフレンドリーで、ドラえもんが道具(Linux コマンド (外部コマンド)) に頼らなければならないことが、ドラミちゃんは道具なしで(組み込みコマンドだけで)できちゃったりします。
sharow

2016/04/25 02:14

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

2016/04/28 12:04

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

0

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

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

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

投稿2016/04/24 11:15

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

re97

2016/04/24 12:31

・回答ありがとうございました ・内容難しかったです ・「シェルの組み込みコマンド」って何でしょうか? ・「シェルがLinuxコマンドの部分集合」であるなら、「シェルの組み込みコマンド」は、「シェル専用のコマンド」ということでしょうか? Linuxコマンドではない?
otn

2016/04/24 13:28 編集

> ・内容難しかったです bash や tcsh はLinuxコマンドです。 bash や tcsh はシェルです。 cp 等はLinuxコマンドですが、シェルでは無いです。 > ・「シェルの組み込みコマンド」って何でしょうか? read とかですね。echo や [ のように同名の外部コマンド(/bin/echo /usr/bin/[)があるが速度向上のために同機能の組み込みコマンドを用意しているケースもあります。 echo と書くと、Bash組み込みコマンドのechoが動き、 /bin/echo と書くと、外部コマンドのechoが動きます。 > 「シェルの組み込みコマンド」は、「シェル専用のコマンド」ということでしょうか? そうです。 外部の実行ファイルを呼び出さないコマンドです。 > Linuxコマンドではない? それは、「Linuxコマンドとは何か」の定義によります。「シェルから使えるコマンド」という意味ならLinuxコマンドの一種でしょう。「PATHのディレクトリに含まれる実行ファイル」であれば違う。
re97

2016/04/28 11:51

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

0

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

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

投稿2016/04/24 11:42

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

re97

2016/04/24 12:31

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

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 11:11

yoshi777

総合スコア674

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

re97

2016/04/24 12:23 編集

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

2016/04/24 13:19

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

2016/04/28 11:49

・コメントありがとうございました >ターミナルを起動した(ログインした)時点で自動的にshellは起動しています。 >ログイン時に自動的に起動するshellはログインシェル(login shell)と言います ・初めて知りました >shellを介してLinuxコマンドを打ったことになります ・そういう意味なんですね ・大変参考になりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問