すべての異なるLinuxディストリビューションに同じコマンドラインがありますか?私が知りたいのは、同じコマンドラインがすべての種類のLinuxディストリビューション(CentOS、Fedora、Ubuntuなど)で機能するか、それらすべてに異なるコマンドラインがあるかどうかです。
この質問を、さまざまなLinuxディストリビューション間でのコマンドとシェルの移植性に関する質問として解釈することにします。 「コマンドライン」は、「シェルプロンプトで記述されたコマンド」と「シェル自体」の両方を意味する場合があります。うまくいけば、この回答は「コマンドライン」のこれらの両方の解釈に対処します。
ほとんどのUnixシステムは、シェルプロンプトで作業するための同じ基本ユーティリティを提供します。これらのユーティリティは標準化されているため、ほとんど同じように機能します。また、シェルコマンドの記述に使用される構文は標準化されています(ループ、リダイレクト、パイプ、バックグラウンドプロセス、変数の割り当て、引用など)。標準はPOSIXと呼ばれ、 ここにあります (「シェル&ユーティリティ」セクション)。
ほとんどのUnices(特に何らかの理由でLinuxの場合)では、標準ユーティリティが追加機能で拡張されていますが、POSIX標準で説明されている機能を使用する必要があります実装されました。標準ユーティリティがPOSIX標準に準拠していない場合は、おそらくこれに関するバグレポートを提出する必要があります。
特に、シェル自体が拡張されて、より便利なインタラクティブなエクスペリエンスを提供したり、より高度なシェルプログラミング機能を提供したりできるようになります。シェルは他のアプリケーションと同様に、さまざまなフレーバー(実装)があり、bash
はLinuxシステムで最も人気があります(ただし、macOSなどのデフォルトシェルとしても利用でき、任意のUnixにインストールできます) )。 zsh
シェルとksh
シェルも人気があり、さまざまな拡張セットを提供しますが、すべてが少なくともできるはずです共通の構文を使用してPOSIX標準で述べられていることをおおむね行う(特殊なタイプの配列やファイル名パターンマッチングのより洗練された形式などの拡張機能を使用する場合を除く)。
POSIX標準でカバーされていない特定のタスクを実行するためのツール(データベースとの通信やモニターの輝度レベルの調整など)や、特定のLinuxディストリビューションに固有の非標準ツール(おそらくパッケージ管理を行うため)、特定のLinuxディストリビューションのバージョン、または特定のハードウェアアーキテクチャなどに対して、コマンドの移植性は、その使用をサポートするシステムにインストールされているツールの正しいバリアントとバージョンに依存します。ツール。
さまざまなLinuxディストリビューション全体で、利用可能なツールとユーティリティの種類はかなり均質であり、移植性は一般に良好です(ディストリビューションとアーキテクチャ固有のツールが異なるか欠落している可能性があることに注意してください)。他の種類のUnixシステムで動作するスクリプトの使用と記述を検討する場合、GNU/Linuxのバリエーションのツールとユーティリティに固有の拡張機能、および「一般的な」で動作することが期待できる機能について知ることがより重要になります。 POSIX/Unixシステム」。
Linuxは単なるカーネルであり、OSではありません。コマンドやGUIプログラム、または美しいデスクトップのように直接使用するものは、カーネルではなく、OSとともに配布されるユーザーランドコンポーネントによって提供されます。
シェルで使用したコマンドは、シェルの組み込み関数または外部ソフトウェアパッケージからのものです。インストールしたソフトウェアに応じて、同じものでも異なるものでもかまいません。シェルでは常にコマンドを使用しますが、実際にはシェルとはほとんど何の関係もありません(これはWindows/OS X/* BSDにも当てはまります)、シェルのしくみについて学んでください。
それは、いくつかのディストリビューションがデフォルトでいくつかの一般的なソフトウェアをインストールするだけなので、いくつかの一般的なコマンドを利用できます。ほとんどすべてのディストリビューションでls
を使用できるように、ほとんどすべてのディストリビューションがlinux-utils
ソフトウェアをインストールしているからです。
一部のディストリビューションでは、必要なパッケージをより自由に選択できます。その場合、linux-utils
またはこのコマンドを提供できるソフトウェアのインストールを拒否すると、ls
を利用できない場合があります。また、同じ名前のコマンドを提供する場合、異なるソフトウェアパッケージが互いに競合する可能性があることに注意してください。
コマンドラインがどのように解釈されるかは、実行中の Shell と、呼び出されたプログラムがその引数をどのように解釈するかによって異なります。
いくつかの異なるシェルがあり、1つのシェルの特定の機能を使用するコマンドラインは、別のシェルでは機能しない場合があります。
つまり、一般的に、さまざまなLinuxディストリビューションにはすべて同じ基本シェルが少なくとも含まれているため、同じシェルを実行していることを確認できれば、同じコマンドラインを使用できます。 (そのため、シェルスクリプトでは通常、必要なシェルを最初の行に配置します)。
編集
シェルスクリプトを見てください。古いスタイルの/etc/init.d
、そしてそれらのそれぞれは
#!/bin/sh
したがって、これらは何らかの標準シェルを期待しています。 Debianではdash
が提供しています。比較のために、私が自分用に作成したシェルスクリプトは、
#!/bin/bash
bash
拡張機能を使用することがあるからです。他にもたくさんのシェルがあります。 ここ