IT・WEB・ゲーム業界の転職に強いR-Stone

転職コラム

Linuxのシェル(Shell)とは?種類と使い方・シェルスクリプトをわかりやすく解説【2026年版】

Linuxの「Shell」とは?

Linuxサーバーの管理に興味がありますか?サーバーの操作にはシェルの操作やシェルスクリプトの作成は欠かせません。

Shellは貝殻ではありませんが、Linux系OSの中核(カーネル)から見るとShellの名前にふさわしい役割を持っています。

シェルとシェルスクリプトの違いや、いろいろなシェルの種類、シェルの基本コマンドの使い方、スクリプトの作成方法も分かりやすく解説します。

Linuxのシェル(Shell)とは?

Linuxを管理する際、ユーザーとOSの間を仲介するのがシェル(Shell)と呼ばれるプログラムです。基本を見ていきましょう。

シェル(Shell)の意味と仕組み

シェルは、ユーザーが入力した文字やファイル内のテキストを解釈してOSに伝え、OSからの応答も文字で返すプログラムの総称です。

WindowsやmacOSが標準とするGUI(マウスでアイコンを操作する方式)と異なり、文字ベースでやりとりするのが特徴で、LinuxなどサーバーOSで広く使われます。

Linux系OSの中核は、起動時に最初に読み込まれるカーネルです。カーネルはメモリ・CPU・キーボードなどのハードウェアを制御するOSの心臓部で、その外側でユーザーからの操作を受け付ける窓口がシェルです。

「Shell」は英語で貝殻や殻を意味しますが、まさにカーネルを包み込む”殻”としてユーザーとOSを仲介するソフトウェアです。

ラーメン店に例えると、厨房(=カーネル)が鍋やコンロ(=ハードウェア)で調理をおこない、注文を取って料理を運ぶ従業員(=シェル)が客(=ユーザー)との橋渡しをするイメージです。

シェルとシェルスクリプトの違い

混同されがちですが、シェルはOSとの仲介をするソフトウェア、シェルスクリプトはシェルに入力するコマンドを記録したテキストファイルです。

サーバー運用では、定期的なバックアップや不要ファイルの削除など、繰り返し発生する作業があります。毎回手入力してもよいですが、複数コマンドを正確に、しかも深夜に実行したい場合はシェルスクリプトの出番です。

たとえば5つのコマンドを5行のテキストファイルに保存するだけでシンプルなシェルスクリプトになります。

「my-backup.sh」に保存:

シェルスクリプトを実行する前の準備

シェルスクリプトは作成しただけでは動かないことが多く、実行前に最低限おさえておきたい3つのポイントがあります。

① シバン(Shebang)を先頭に記載する

スクリプトの1行目に、どのシェルで実行するかを指定する「シバン」を記述します。

#!/bin/bash

シバンがあることで、ファイル単体で実行しても正しいシェルで解釈されます。Bash向けなら#!/bin/bash、POSIX準拠のshで動かすなら#!/bin/shが一般的です。

② 実行権限を付与する

作成直後のスクリプトには実行権限がないため、そのままでは起動できません。chmodコマンドで実行可能にします。

$ chmod +x my-backup.sh

③ 実行方法の違いを理解する

シェルスクリプトの実行方法は大きく2種類あります。

  • ./my-backup.sh ……シバンで指定されたシェルで実行される。実行権限が必要。
  • bash my-backup.sh ……明示的にbashで実行する。実行権限がなくても動く。

日常運用やcronからの自動実行では、./ を使う形式が標準的です。

対話型と非対話型の違い

対話型シェル(インタラクティブシェル)は、ユーザーがコマンドを入力するたびにプロンプト($や#などの記号)を表示し、即座に結果を返します。

一方、非対話型(バッチ処理)は、あらかじめ作成したスクリプトファイルを使用し、処理を自動実行します。

対話型は試行錯誤しながらの作業や学習に適しており、非対話型は定期的な自動処理や大量のデータ処理に向いています。

シェルの特徴とメリット

シェルはLinux系OSの管理をテキスト入力でおこなえるほか、シェルスクリプトを用意して業務を自動化できます。詳しく見ていきましょう。

コンパイル不要ですぐ実行できる

シェルのコマンドをテキスト形式のファイルに保存しておけば、シェルスクリプトとして実行できます。

C言語やJavaのようにコンパイル(テキスト形式で書かれたプログラムを機械語に翻訳する手順)は不要なので、テキストエディタがあれば簡単にスクリプト内容の変更や加筆ができ、OSを問わずスクリプトをやりとりできるため再利用性が高いのが特徴です。

基本操作(ファイル/ディレクトリの操作)が可能

シェルを使えば、ファイルの作成・表示・コピー・移動・削除などの基本操作を、短いコマンドひとつで実行できます。

GUIでは何度もクリックが必要な操作も、シェルなら一行で完結するのが利点です。

例えば「先週以降に更新された.logファイルだけをバックアップ用フォルダにコピーする」など条件付きの作業も、コマンドの組み合わせで数秒で処理できます。

さらに、操作の手順がすべてテキストとして残るため、実施内容の記録・再現・共有が容易な点もGUIにはない大きな強みです。

作業の自動化と定型処理の省力化

シェルスクリプトを作成しておけば、同じコマンドを繰り返し実行できます。

例えば定期的にデータベース(MySQLまたはMariaDBで作成したもの)をバックアップする必要があるとします。

繰り返しのバックアップを自動化するシェルスクリプトを作成できます。例えば以下のようになります。

シェルスクリプトを定期的に実行するには、多くのLinux系OSに含まれるcronソフトウェアが役立ちます。cronは指定のタイミングでシェルスクリプトや指定のプログラムを実行できます。

上記スクリプトを保存し、cronの設定ファイルを作成すれば、例えば毎晩3:50からバックアップを開始するよう設定できます。

開発・運用の効率が大幅に向上

複雑な手順の操作はシェルスクリプトにしておけば間違えずに実行できます。サーバー管理では、一台一台異なるサーバーのセッティングに対して、状況に応じたさまざまな操作を求められるため、カスタマイズしやすいシェルスクリプトは役立ちます。

perl・Ruby・Pythonのようなスクリプト言語を組み合わせて、より高度で大規模な業務手順をスクリプトとして作成・展開もできます。

また、gitやdockerなどのツールを導入しておくことで、開発やテストの工程でおこなわれる複雑な手順もカバーできるため、作業時間を短縮できます。

シェルを活用した業務の自動化や作業の効率化の技術を身に着けることで、インフラエンジニアとしての転職を考える際に希望の企業の面接で評価が高くなる可能性も十分にあります。

シェルの種類

シェルはOSとユーザーをつなぐ基本ソフトですが、WEBブラウザでFirefoxやChromeを選べるように、目的に応じて種類を切り替えられます。

主要なシェルを紹介します。

Bash(Bourne Again Shell)

BashはBourne Again Shell(ボーン・アゲイン・シェル)の略で、Bourne Shell(sh)の後継として開発されました。

1980年代後半、ブライアン・フォックス氏とGNUプロジェクトがshのフリーな代替として開発。shとの後方互換性を保ちつつ、コマンド履歴・タブ補完・エイリアスなど使い勝手を高める機能を加え、多くのLinuxディストリビューションで標準シェルとして採用されました。macOSでも2019年のCatalinaまで長らくデフォルトでした(以降はzshが標準)。

圧倒的なシェアを誇り、クラウド・VPS・レンタルサーバーを問わずほぼ確実に使えるため、シェルスクリプトを学ぶならまずBashが汎用性・学習効率ともに最適です。

sh(Bourne Shell)

shは1977年、AT&Tのスティーブン・ボーン氏が開発したUNIX向けシェルで、他のシェルの元祖にあたります。

POSIX規格の基準シェルでもあり、「どの環境でも動くスクリプト」を書きたい場合や、容量が限られる組み込み系Linuxで採用されることが多いシェルです。

Zsh(Z Shell)

Zshはshを改良したシェルで、他シェルの機能を積極的に取り入れつつ独自機能も備えます。

プラグインやテーマをサポートしておりカスタマイズ性が高く、2019年のmacOS Catalina以降で標準シェルに採用されました。Oh My ZshなどのプラグインでUI・補完機能を強化でき、開発者のローカル環境の定番となっています。

csh(C Shell)

cshは1970年代、カリフォルニア大学のビル・ジョイ氏が開発したUNIX向けシェルです。sh系とは異なる系統で、名前のとおりC言語に似た文法の制御構造を備えるのが特徴。

現在は新規採用が少なく、BSD系や古いUNIX環境で目にする程度ですが、C言語経験者には馴染みやすい構文です。

ksh(Korn Shell)

kshは1980年代後半、ベル研究所のデビッド・コーン氏が開発したシェルで、shとの後方互換性とPOSIX準拠をうたいます(POSIXはOS間の互換性を確保する規格)。

コマンドライン編集・ジョブ制御・C言語風の制御構造を備え、shより高速に動作。bashやzshほど一般的ではないものの、金融・通信・官公庁など大規模UNIXインフラでは今も現役で、企業系SI・インフラ案件で遭遇する場合があります。

Fish(Friendly Interactive Shell)

Fishは2005年登場の対話型シェルで、名前のとおり「親しみやすさ」を重視した設計です。

デフォルトでシンタックスハイライト・入力補完・履歴サジェストが有効で、設定なしで快適に使い始められます。Bashとは文法が異なるためBash向けスクリプトはそのまま動きませんが、対話操作の快適さから開発者の間で人気上昇中です。常用シェルはFish、スクリプト作成はBash、という使い分けもよく見られます。

シェルを使う環境

シェルを学習・実務で使うには動かせる環境が必要です。用途別に代表的な選択肢を紹介します。

WSL(Windows Subsystem for Linux)

Windows PCでLinuxシェルを学ぶなら、WSLは手軽な選択肢です。

Windows 10以降でMicrosoft Store経由でUbuntuなどをインストールするだけで、ネイティブに近い性能のLinux環境を構築できます。

仮想マシンより軽量で、Windows側のファイルとシームレスに連携できるのが魅力。近年はAI・機械学習フレームワークの導入先としても利用者が急増しています。

SSH経由でのリモートシェル操作

サーバー実務で頻繁に使うのがSSH(Secure Shell)によるリモート接続です。

手元のターミナルから ssh ユーザー名@サーバーアドレス と入力するだけで、遠隔のLinuxサーバーをローカル端末と同じ感覚で操作できます。AWS EC2やさくらのVPSなどクラウドサーバーの管理は、ほぼすべてSSH経由です。

公開鍵認証・configファイルの活用・多段接続などを使いこなすスキルは、インフラエンジニアの必須スキルのひとつです。

PowerShellとの違い

PowerShellはMicrosoftがWindows管理向けに開発したシェルで、現在はLinux・macOSにも対応しています。

Linuxのシェルがテキストベースで処理するのに対し、PowerShellは「オブジェクトベース」で扱う点が大きな違いです。Windowsサーバー・Active Directory・Azureの管理で威力を発揮しますが、Linuxサーバーの現場ではBashやzshが主流です。

「Windows系ならPowerShell、Linux系ならBash」と整理すれば、学習やキャリア選択で迷いません。

なぜシェルは重要なのか

GUIはマウスで直感的に操作できますが、サーバー実務ではシェルによる文字ベース操作に多くの利点があります。設定内容を文書化しやすく、同僚への共有も容易です。

シェルは、ユーザーが端末(ターミナル)に入力した文字をOSが理解できる形に変換し、応答をテキストで返すソフトウェアです。

Linuxサーバーの管理は、シェルへのコマンド入力と結果確認の繰り返しが基本となります。

シェルとOSの橋渡し機能

通常、OSの機能を直接操作するにはシステムコールという複雑な命令が必要ですが、シェルがあることで ls や cp など分かりやすいコマンドでファイル操作やプロセス管理を実行できます。

さらに環境変数の管理、標準入出力の制御、パイプやリダイレクト機能も提供するため、複数プログラムの連携や処理結果のファイル保存など、柔軟な処理が可能です。

実務でのシェルの使用例

シェルは幅広い業務で活用されています。

  • サーバー管理……CPU・メモリ使用率を定期監視し、異常値でアラート送信
  • データ処理……ログファイルの解析やデータベースの定期バックアップを自動化
  • CI/CDパイプライン……テストやデプロイ作業の自動化
  • インフラ運用……定期メンテナンス・システム監視・障害対応の効率化

AIとLinuxシェルの親和性

ChatGPTやGitHub Copilotなど生成AIは、シェルコマンドを日常的に提案するようになりました。

しかしAIの提案を安全に使うには、シェルの基礎知識が不可欠です。誤ったコマンドを実行するとファイル削除やサーバー設定の破損につながるからです。

また、AI・機械学習の開発環境はLinuxサーバーが主流で、GPUクラスターへのジョブ投入、Dockerコンテナの起動・管理、ライブラリのインストールはすべてシェル操作でおこないます。

GitHub ActionsなどCI/CDパイプラインでもシェルスクリプトが広く使われています。

シェルの習得は、AIを「使う側」から「作る・管理する側」へ進むための基礎体力になります。

参考:【入門】Dockerとは?使い方やコンテナについてもわかりやすく解説

シェルコマンドの使い方と一覧

シェルを効率的に使いこなすために、基本的なコマンドをご紹介します。

よく使うコマンドの種類と使い方

サーバーOSの管理ではさまざまな操作が必要となりますが、よくおこなわれるのは、各種の記録を参照したり作成したりする操作です。

具体的には、WEBサーバーのログファイルを参照したり、バックアップの実施記録をつけたりしますが、いずれも基本的にはテキスト形式のファイルを操作すれば達成できます。

基本的な働きのコマンドをシェルの働きで組み合わせることで、利用者の必要とする複雑な条件での加工や抽出ができるのがシェルによる操作の特徴となっています。

例えば、テキストファイルを表示したり連結するには、次のコマンドが使用できます。

  • ・cat……ファイルの中身を表示します。
  • ・head……テキストファイルの冒頭の数行を表示します。
  • ・tail……テキストファイルの末尾の数行を表示します。

必要な箇所を抽出するには、次のコマンドを使用できます。

  • ・grep……ファイル内で特定のパターンに合う部分を抽出します。
  • ・cut……ファイル内の指定した列やフィールドを抽出します。
  • ・sort……ファイル内の行を昇順または降順で並び替えます。
  • ・uniq……ファイル内の連続する重複行を除去します。
  • ・split……ファイルを指定したサイズで分割します。

他の加工や変換は、次のコマンドがよく使用されます。

  • ・sed……ファイル内のテキストを変換します。文字列置換や行の削除など。
  • ・awk……ファイル内の指定フィールドを抽出したり、集計したりします。
  • ・tr……ファイル内の文字を置き換えます。

各コマンドの使用例は以下のとおりです。

コマンド説明
$ cat error.logerror.logファイルの内容を(すべて)表示します。
$ head access.logaccess.logファイルの冒頭10行を表示します。
$ tail -n 50 error.logerror.logファイルの末尾50行を表示します。
$ grep -E ‘https?://’ error.logURLのような文字列を含む行を表示します。
$ cut -f 2-3 data.tsvタブ区切りテキストファイルdata.tsvの2、3列目を表示します。
$ sort -n -r id.txt各行に数値が記載されたid.txtファイルの行を大きい順に並び替えて表示します。
$ uniq id.txtid.txtファイルに連続した同じ内容の行があれば1行のみ、他はそのまま表示します。
$ split -l 10000 access.logaccess.logを1万行毎に分割したファイルを作ります。
$ sed ‘100,200s/foo/bar/’ in.txtin.txtの100から200行目にある文字列fooをbarに置き換えて表示します。
$ awk ‘$5 >= 10000’ dir-list.txtdir-list.txtのスペースで区切られた5番目の列が1万以上の行を表示します。
$ tr ‘a-z’ ‘A-Z’ < english.txtenglish.txtの小文字のアルファベットを大文字に置き換えて表示します。

変数の使い方

シェルでは変数を使用して値を保存し、再利用できます。

変数には現在のシェルでのみ有効なローカル変数と、子プロセスにも引き継がれる環境変数があります。 環境変数を設定する場合はexportコマンドを使用します。

csh・tcshでは下記のようにします。

コマンドの実行結果を変数に格納する場合は、コマンド置換$()を使用します。

条件分岐の基本構文

if文を使用して条件に応じて異なる処理を実行できます。

複数の条件を判定する場合はelifを使用し、どの条件にも該当しない場合はelseで処理を記述します。

条件式では下記の判定ができます。

複数の選択肢から条件を判定する場合はcase文が便利です。

まとめ

Linuxのシェルは、OSとユーザーの橋渡しをする重要なプログラムです。基本コマンドの習得からシェルスクリプトの作成まで、業務の自動化や効率化を実現できます。

まずは基本的なコマンドから始めて、実際のLinux環境でシェル操作を体験してみましょう。WSLやVPSを利用すれば、Windows PCからでも短時間で学習環境を用意できます。

また、LinuxのShellスキルは、AI開発・運用の現場でも欠かせない武器になります。

クラウドインフラの構築・運用を担うインフラエンジニア・SRE・MLOpsエンジニアの求人では、シェルスクリプトの記述力は必須のスキルです。

AIを「使う側」で終わらせず、モデルを動かすサーバーを「作る・管理する側」へのステップアップを目指す方にとって、シェルの習得は有力な選択肢といえるでしょう。

Linux関連エンジニア【厳選求人】はこちらから