fuuengineerのブログ

エンジニアになります。

コマンド実行の仕組み【Linux】

ここでは例として、Dateコマンドの実行で説明します。

Dateコマンドの実行

$ date   
2021年 9月18日 土曜日 22時04分45秒 JST  

ターミナルで、dateコマンドを実行した際の仕組みを解説します。まずはシェルがdateコマンドを解釈し、dateというコマンドを探します。シェルとは、LinuxCLI(キーボードからコマンドを入力し、文字列として結果を出力するインターフェース)を提供するソフトウェア。見つかった後に、Linuxカーネルにdateコマンドを実行してと伝えます。カーネルとは、OSの中核となるソフトウェアのこと。そしてLinuxカーネルは実行し、その実行結果をシェルが受け取り、画面を表示させるという仕組みです。 こちらが基本的なコマンド実行の仕組みです(図1)。

f:id:fuuengineer:20211002202142p:plain
図1 シェルとLinux カーネルの関係

ここで、そもそもLinuxとは何なのかについて説明したいと思います。

Linuxとは

LinuxはOSの一種で、コンピュータを動かすための基本ソフトのことです。OSにはWindows, Mac OSX, Android, Linux等、様々なものがあります。Linuxは現在、サーバー、組み込み、デスクトップといった幅広い用途で使われています。Linuxは世界中で使われており、信頼性が高く、品質の高いソフトウェアが利用できます。また、自動化するための仕組みもあり、サーバーの運用が行いやすいという利点があります。欠点もあり、画像、音楽、動画などのマルチメディア系ファイルを編集するのが苦手です。また日本語対応されていない部分が多いのも欠点です。

Linuxは技術が枯れている!?

これは多くのユーザーに使われて、検証された結果、大きく変更する必要がなくなっているということです。一度習得してしまえば、何年経っても使えるという利点があります。

そして、先程少し登場したCLIについて言及します。また、最近ではGUIという言葉の方が聞くかもしれません。この二つの違いについて説明していきます。

CLIGUIの違いとは

先ほど説明したように、CLIとはキーボードを使い、コマンドを入力して動作をコンピュータに指示するという感じです。Macのターミナルを操作するようなイメージです。一方、GUIとはマウスを操作してアイコンをクリックし、あらかじめセットされたプログラムが作動するような形です。GLIはアイコンをクリックしたらどのようなことが起こるか想像しやすく、直感的に使え、我々にとって、馴染みやすいものと考えます。しかしながら、開発者は CUIを好んで活用します。この理由を以下に箇条書きします。 - 処理の自動化がしやすい - テキストデータのため、コピペして複数人で共有しやすい - 操作の記録を残しやすい - テキストのため、容量が軽い 実際に開発者がLinuxを使う理由もこういうところにあります。新しいテーマを開発する際や、既存のテーマのバグ修正をする際など、複数の開発者で作業することが多々あると思います。こういう時にCUIを使うことで、間違いが減ったり、効率的になります。

ここで、Linuxにおける標準入出力について説明していきたいと思います。

標準入出力

図2をご覧ください。

f:id:fuuengineer:20210930211117p:plain
図2 標準入出力
標準入力では、プログラムの標準の入力、キーボードが主に使われます。標準出力では、プログラムの標準の出力、ディスプレイが通常は使われます。標準エラー出力では、プログラムのエラーメッセージを出力し、ディスプレイが通常では使われます。ここで実際にリダイレクト(入力先を変更する機能)のコマンド操作を具体的に見ていこうと思います。

  • 入力のリダイレクト
    キーボードの代わりにファイルから入力する機能
$cat < /etc/hosts

1 127.0.0.1 localhost

2 ::1 localhost6
  • 出力のリダイレクト
    コマンドの実行結果を画面に表示するのではなく、ファイルに保存する機能
$ls > output.txt

$cat > output.txt
  • エラー出力のリダイレクト
    エラー結果を画面に表示するのではなく、ファイルに保存する機能
$ls /hoge 2> error.txt

$cat error.txt

ls: /hogeにアクセスできません

ここで出てきた2という数字はOSが認識するために用いる識別子で、標準エラー出力の際には用いなければコマンドを実行することはできません。標準入力の際には0、標準出力の際には1の識別子がありますが、省略可能です。

参考文献 : 山浦 清透. もう怖くないLinuxコマンド。手を動かしながらLinuxコマンドラインを5日間で身につけよう. 

https://www.udemy.com/course/unscared_linux/

(2021年9月18日閲覧)