シェルスクリプトマガジン

test

第5回 Chromeブラウザを導入する

投稿日:2020.07.20 | カテゴリー: 記事

 インターネットのWebサイトへのアクセスや、インターネットサービスの利用が最近のパソコンの使い道です。Linuxパソコンでもそれは変わりません。しかし、WindowsやMacと違い、インターネットで提供されているサービスのほとんどがLinuxをサポートしていません。そのため、何か問題が発生した場合は自力で解決しなくてはいけません。また、Linux自体が原因の場合、問題を解決できないこともあります。できるだけそのようなことが起きないように、WindowsやMacに提供されているツールと同じものを使います。

 インターネットへのアクセスには「Webブラウザ」を使います。これはLinuxでも同じです。本連載で利用しているLubuntuにはWebブラウザとして「Mozilla Firefox」がインストールされています。ただし、バージョンが古かったり、Linux版Mozilla Firefoxだと一部の機能が使えなかったりします。WindowsとMacと同じとは言い難いです。

 そこで、Linuxで最もお薦めなWebブラウザは「Google Chrome」です(図1)。公式サイトから入手してインストールする必要がありますが、米Google社がLinux向けに無償で提供していてWindows版やMac版のGoogle Chromeと同じように動作します。

図1 Lubuntu上でGoogle Chromeを動作させたところ

 ちなみに、Lubuntuでは、Google Chrome(以下、Chrome)のオープンソース版である「Chromium」なら標準でインストールできます。ただし、ChromiumにはFlash Playerが同こんされないなど、いくつかの違いがあるのであまりお薦めはできません(Flash Playerは2020年12月31日に提供終了予定)。

第4回 日本語入力を可能にする

投稿日:2020.07.6 | カテゴリー: 記事

 前回は、パソコンにLubuntuをインストールしました。Lubuntuのインストール時に、利用地域やタイムゾーンで日本(Aisa/Tokyo)を選んでいるので、英語が一部残っているものの、メニューなどは日本語で表示されています。そのため、Linux(Lubuntu)パソコンを日本語で使う環境が整っているように見えますが、日本語の入力ができません。

 Windowsパソコンと同様に、キーボードの[半角/全角]キーを押したら、日本語入力へ切り替えられるようにします(図1)。

図1 [半角/全角]キーを押して日本語入力と英語(半角英数)入力に切り替え

日本語入力システムが必要

 Lubuntuで日本語入力を可能にするには、インプットメソッドフレームワークと、そのフレームワークに対応した日本語入力システム(インプットメソッド)が必要です。インプットメソッドとは、パソコンなどのコンピュータ上で文字を入力するためのソフトウエア、インプットメソッドフレームワークとは、インプットメソッドと他のアプリケーションを結び付けるための機能やライブラリを含んでいるソフトウエアです。

 Lubuntuでは、「Fcitx」というインプットメソッドフレームワークと、それに対応した日本語入力システムの「Mozc」を使います。Mozcは米Google社が開発した「Google日本語入力」のオープンソース版です。Google日本語入力は、WindowsやmacOS、Android向けにも用意されていて、とても評判が高いソフトウエアです。Mozcでは一部の機能が提供されていないものの、便利に使えます。

 Fcitxは、すでにLubuntuにインストールされています。Fcitx対応のMozcは、Lubuntuにインストールしてすぐに実行できる形式の「パッケージ」としてインターネット上で配布されています。パッケージについては、別の回に詳しく紹介する予定ですが、ここでは「apt」というコマンドで、パッケージのインストール(導入)やアンインストール(削除)、アップデート(更新)ができることだけを覚えておいてください。この後で、aptコマンドを使って、Fcitx対応のMozcをインストールします。

第3回 Lubuntuをインストールする

投稿日:2020.06.22 | カテゴリー: 記事

 前回、パソコンの内蔵ストレージを丸ごとバックアップしてLinuxをインストールする準備をしました。今回は、内蔵ストレージをすべて消去し、いよいよLinuxをインストールします。インストールするLinuxディストリビューションは、第1回で決定した「Lubuntu 20.04 LTS」です(図1)。

図1 Lubuntu 20.04 LTSのデスクトップ画面

Lubuntuをライブ起動する

 前回と同様に、Linuxのメディアとして作成したUSBメモリーからLubuntuをライブで起動しましょう。手順は、前回を参照してください。最初に図2の画面が開くので「Start Lubuntu」が選ばれた状態でキーボードの[Enter]キーを押します。そのまま待っても構いません。

図2 「Start Lubuntu」が選ばれた状態で[Enter]キーを押す

 しばらくするとLubuntuのデスクトップ画面が開きます(図3)。

図3 Lubuntuのデスクトップ画面が開く

ネットワークに接続する

 まずは、Lubuntuからインターネットへアクセス可能にします。こうしておくと、日本という利用地域や時間の基準となる「タイムゾーン」を自動で取得できます。また、インストール後に自動でネットワークに接続され、後述するLubuntuを構成するソフトウエアのアップデートもスムーズに行えます。なお、有線LANで接続している場合は、基本的にインターネットにアクセスできる状態になっているので、以下の設定は不要です。無線LANの場合にのみ設定してください。

デスクトップ画面の右下にある、ディスプレイのようなアイコンをクリックします(図4)。

図4 ディスプレイのようなアイコン(赤枠)をクリック

無線LANのSSID(Service Set IDentifier)一覧が表示されます。一覧の中から自分が利用しているブロードバンドルーターのSSIDを探して、それをクリックします(図5)。

図5 SSIDを選択する図5 SSIDを選択する

 通常、WPA2-PSKなどの認証および暗号化を利用しているので、パスワードの入力ダイアログが表示されます(図6)。ブロードバンドルーターに設定されている無線LANへの接続パスワードを入力します。

図6 パスワードを入力する

 パスワードが正しければ、右上に無線LANへの接続メッセージが表示されます(図7)。

図7 無線LANに接続された旨を示すメッセージ

第2回 パソコンのストレージをバックアップする

投稿日:2020.05.18 | カテゴリー: 記事

 Linuxをパソコンにインストールする前に、元の状態に戻せるようにパソコンの内蔵ストレージ(ハードディスクやSSD)を丸ごとバックアップします。Windows 10の場合、回復ドライブを使ってイメージファイルとして丸ごとバックアップできますが、少々手順が面倒です。

 そこで、Linuxをライブで起動して「dd」コマンドを使ってイメージファイルとしてバックアップします。ddは、ストレージの書き込まれているデータを「ブロック」という単位でコピーできるコマンドです(図1)。

図1 丸ごとバックアップ

 ddコマンドなら、ストレージの一部が壊れていて読みだせないファイルも、読み出せるブロックだけを取り出してバックアップできます。そして、バックアップ時に1行のddコマンドを実行すればよく、復元時も、指定する入出力の引数が変わるだけで、同じ1行のddコマンドを実行するだけです。

第1回 Linuxのメディアを作成する

投稿日:2020.05.4 | カテゴリー: 記事

 Linuxとは、OS(基本ソフト)のコア(核)となるソフトウエア(カーネル)の名前です。WindowsやmacOSのようにパソコン上で動作させるには、このカーネルと、各種のツールやユーティリティ、ライブラリなどのソフトウエアをソースコードからビルド(コンパイル)して組み合わせる必要があります。
 ソースコードのほとんどは無償で公開されているので、それなりの知識があれば自らビルドして組み合わせることも可能です。ただし、すでにOSとして動作する状態して配布されている「Linuxディストリビューション」があります。Linuxを使いたいだけなら、こちらのLinuxディストリビューションを用います。

Linuxディストリビューションの選択方法

 Linuxディストリビューションは、一つではありません。DebianやUbuntu、Fedora、CentOSなどの複数の種類があります。これは、異なる団体が自分たちが決めたポリシーに従って構成するソフトウエアを決定し、それらをソースコードからビルドして組み合わせて配布しているからです。
 個々のLinuxディストリビューションによって、それぞれ特徴が違います。ノートパソコンやデスクトップパソコンに導入して使うなら、次の五つを満足するものがよいでしょう。

  1. 簡単に導入や削除ができるアプリケーションが豊富に存在する
  2. インターネット上に多数の情報が掲載されている
  3. 不具合対処やセキュリティ対策のソフトウエアアップデートが長期に提供される
  4. 日本語が使える
  5. デスクトップ画面が快適に操作できる


連載 ノートやデスクトップでLinuxを始めよう

投稿日:2020.05.1 | カテゴリー: 記事

 テレワークや在宅勤務というビジネススタイルが広がってきています。職場と同じように自宅で効率良く仕事をこなすためには、ある程度性能の高いパソコンが不可欠です。また、カメラやマイク付きのノートパソコンなら、そのままテレワークに使えます。これらの理由から、自宅で使っていたパソコンを買い替えた人も多いでしょう。
 買い替えによって、今まで使っていたパソコンが不要になります。それを予備機として使い続けるのもよいですが、この機会にLinuxに入れ替えて、快適で十分実用に耐え得るパソコンとして復活させてみましょう。
 本連載では、WindowsがインストールされたノートパソコンやデスクトップパソコンにLinuxを導入し、普段使えるパソコンに仕立てていきます。

第1回 Linuxのメディアを作る 
第2回 パソコンのストレージをバックアップする
第3回 Lubuntuをインストールする
第4回 日本語入力を可能にする
第5回 Chromeブラウザを導入する
第6回 外付けストレージを利用する 諸事情により公開延期

最終回 不正アクセスを通知する

投稿日:2020.01.30 | カテゴリー: 記事

 ログの情報を分析して、管理者に警告メッセージを送信するのは、サーバーの運用管理ではよく使う手法です。インターネット側からアクセスできるようにしたサーバーの場合は、特にセキュリティ関連の通知ができると便利です。

 そこで、暗号化通信の「SSH」(Secure SHell)による、Linuxサーバーへのログイン認証のログを監視して、リモートログインや、不正(らしき)アクセスを検知したときにSNSに通知するシェルスクリプトを作成します(図1)。

図1 ログを解析して通知をSNSに送信するシェルスクリプト

第12回 コマンドを作る

投稿日:2019.11.19 | カテゴリー: 記事

 前回、「日本語の文字列をURLエンコーディング」できる適当なコマンドがなく、プログラミング言語「Python」でURLエンコーディングの処理を記述しました。シェルスクリプト内に別のプログラミング言語の記述があるのは、違和感があり、またコードも読みにくいでしょう。

 そこで、URLエンコーディングの処理をコマンド化し、シェルスクリプトと別の言語のプログラムを混在させないようにします(図1)。このように、よく使う処理をコマンド化することで、別のシェルスクリプトからも利用できます。

図1 よく使う処理をコマンド化

第11回 大切なメールだけをチャットルームに送る

投稿日:2019.10.22 | カテゴリー: 記事

 SNS(ソーシャルネットワークサービス)やチャットサービスが広がったおかげで、電子メールがあまり利用されなくなってきています。スマートフォンやインターネットサービスなどを利用するために電子メールのアドレスを持っていても、メールを使わない、メールを見ない人も多いでしょう。
 そこで、受信メッセージから重要な通知のみを取り出してSNSやチャットルームにメッセージとして転送するシェルスクリプトを作成します(図1)。

図1 重要な受信メッセージをSNSやチャットルームに転送するシェルスクリプト

第10回 写真から場所を調べる

投稿日:2019.08.20 | カテゴリー: 記事

 スマートフォンで撮影した写真が増えてくると、いつどこで撮影したものなのかが分からなくなることもあるでしょう。ただし、心配は無用です。スマートフォンの多くは「GPS」(全地球測位システム)の半導体(チップ)を内蔵しています。この半導体から取得した位置(緯度・経度)および、撮影日などの情報を、写真データと一緒に保存しています。その情報を調べれば、いつどこで撮影されたものなのかがすぐに分かります。

 そこで今回は、写真データから撮影の日時や場所の情報を取り出して表示するシェルスクリプトを作成します(図1)。

図1 GPSから取得した位置情報を取り出して表示

仕様やロジックを考える

 それでは、仕様やロジックを考えていきましょう。写真データのファイルには「Exif」(Exchangeable image file format)という形式のメタデータ(データに付属するデータ)で、写真データのサイズ、撮影の日時や場所、撮影時のカメラの設定などの情報が保存されています。このExifデータは、端末などから画像データを操作できるソフトウエア「ImageMagick」の「identify」コマンドで取り出せます。

 例えば、図2の写真(IMG_0001.JPG)の撮影場所が分からないとします。

図2 iPhoneで撮影したどこかの池の写真(IMG_0001.JPG)

第9回 グローバルIPアドレスを通知する

投稿日:2019.07.30 | カテゴリー: 記事

 自宅のネットワークにリモートからアクセスしたい人もいるでしょう。その場合、自宅ネットワークの入り口に配置しているルーターに割り振られた「グローバルIPアドレス」を知らなくてはいけません。

 グローバルIPアドレスは、自宅内から次のコマンドを実行すれば確認できます。

 表示されたIPアドレスでアクセスすればよいのですが、常に同じIPアドレスとは限りません。通常、このIPアドレスは動的に変更されます。

 「ダイナミックDNS」というサービスを利用すれば、動的にIPアドレスが変わっても自宅ネットワークへ「ドメイン名」(ドメイン付きホスト名)でアクセスできます。ダイナミックDNSに関しては、Web連載「UbuntuではじめるLinuxサーバー」の「第10回 インターネットに公開する」を参照してください。ダイナミックDNSを使えば解決しますが、作業が面倒です。また、サーバーをインターネットに公開しているわけではないので特定のドメイン名を付ける必要はありません。

 そこで、ダイナミックDNSを使わずに自宅内からグローバルIPアドレスを監視して更新されたら通知するシェルスクリプトを作成します(図1)。

図1 グローバルIPアドレスを通知する

第8回 自動でアーカイビングする

投稿日:2019.07.16 | カテゴリー: 記事

 大容量のハードディスクやSSD(Solid State Drive)が安価に購入できても、パソコンやコンピュータ内のファイル整理は重要です。しかし、いざファイルを整理しようとして削除してもよいかどうか迷うものも多数あるでしょう。とりあえずは、まとめて圧縮することでアーカイブ(書庫)化して取っておくのがよいでしょう。

 そこで今回は、ファイルを自動でまとめて圧縮するアーカイビングのシェルスクリプトを作成します(図1)。

図1 ファイルをフォルダごとアーカイビング

第7回 DMを自動送信する(STARTTLS編)

投稿日:2019.07.2 | カテゴリー: 記事

 第6回では、「ダイレクトメール」(DM)を送信するときにメールサーバーへ接続するプロトコルとして「SMTPS」(SMTP over SSL/TLS)を用いました。もう一つ、安全にメールサーバーにメッセージを送信する著名なプロトコルとして「SMTP STARTTLS」があります。これは、完全に通信が暗号化されたSMTPSと違い、最初は平文で途中から暗号化するという通信方法が可能です。ちなみに、SMTPSでは「465」番のTCPポートを、SMTP STARTTLSでは「587」番のTCPポートを使用します。

 SMTP STARTTLSの場合、SMTPSとはアクセス方法が異なるので、シェルスクリプトの書き方が違います。そこで今回は、SMTP STARTTLSを対応したメールサーバーからDMを自動送信するシェルスクリプトを作成します(図1)。

図1 SMTP STARTTLS対応のメールサーバーからDM送信

第6回 DMを自動送信する(SMTPS編)

投稿日:2019.06.18 | カテゴリー: 記事

 電子メールで大量の「ダイレクトメッセージ」(DM)を送りたい場合、手作業よりも自動化しておくとよいでしょう。特に、相手ごとにメッセージの内容を少し変えて送信したいときには、自動化が不可欠です。

 そこで今回は、DMを自動送信するシェルスクリプトを作成します(図1)。

第5回 文書をPDF化する

投稿日:2019.06.4 | カテゴリー: 記事

 Microsoft OfficeやLibreOfficeなどのオフィスソフトで作成した文書を皆で閲覧可能にする場合、「PDF」(Portable Document Format)形式に変換しておけばよいでしょう。誤って書き換えてしまったりすることがなく、コメントなども付与できて便利です。最近のオフィスソフトには、PDFファイルへ変更する機能があります。また、印刷するときにPDFファイルに保存することも可能です。ただし、これらは自ら操作しなくてはいけません。

 そこで今回は、オフィス文書をPDF形式のファイルに自動変換するシェルスクリプトを作成します(図1)。

図1 オフィス文書をPDFファイルに変換

第4回 ファイルサーバーを作る

投稿日:2019.05.21 | カテゴリー: 記事

 インターネット上にあるサーバー以外で、最も利用されているのが「ファイルサーバー」です。「NAS」(Netowork Attached Storage)や「ネットワーク対応HDD」「ネットワークハードディスク」などとも呼ばれています。このファイルサーバーですが、Linuxパソコンがあれば比較的簡単に構築できます。
 そこで今回は、Linux上にファイルサーバーを構築するシェルスクリプトを作成しましょう(図1)。

図1 シェルスクリプトでファイルサーバーを構築

第3回 写真を整理する

投稿日:2019.05.7 | カテゴリー: 記事

 スマートフォンならいつでもどこでも気軽に写真を撮影できます。ただ、その気軽に撮った写真データのせいでスマートフォンのストレージ容量の空き容量が少なくなることがあります。また、新しいスマートフォンを買い換えるときは、多量にある写真データを移し変えることは困難です。これらの場合、写真データをパソコンなどにバックアップする人も多いでしょう。バックアップの際、ファイル名を書き換えることができると便利です。

 そこで今回は、パソコンに保存した写真データのファイル名を書き換えるシェルスクリプトを作成します。

第2回 コメント行を削除する

投稿日:2019.04.16 | カテゴリー: 記事

 LinuxやUnix系OSの設定ファイルを見てみると、「#」で始まる行が説明が書かれた「コメント」になります。ドキュメントを見なくても設定が記述できるように、複数行にわたったコメントを使って詳細に説明が書かれていることもあります。
 コメントはとても便利です。しかし、コメントとコメントの間にデフォルト(初期状態)の設定が書き込まれている場合、コメントが邪魔になることもあります。そこで、今回はデフォルトの設定をすぐに確認するための、コメント行を取り除くシェルスクリプトを作成します。

仕様やロジックを考える

 LinuxやUnix系OSの設定ファイルの多くは「/etc」ディレクトリの下に保存されています。いくつかの設定ファイルを開いてみると、前述したように先頭に「#」が付いた行がコメントになっています。よって、今回のシェルスクリプトでは、行頭が「#」を見つけて、その行を削除すればよいわけです。
 また、設定ファイルによっては空白行も残さない方が見やすい場合もあります。そこで、空白行を残す場合と残さない場合の両方の処理ができるようにします。

第1回 Amazonの商品ページURLをきれいにする

投稿日:2019.04.2 | カテゴリー: 記事

 シェルスクリプトなどのプログラムを作成する上で、とても重要なのは「ロジック」を考えることです。簡潔で最適なロジックを思いつくのは重要ですが、シェルスクリプトの場合は、いろいろ悩まずにLinux/Unix系OSのコマンドリファレンスなどを見ながらロジックが浮かんだら、すぐに書いてみることです。
 自分が使えればよいので、知っているコマンドを組み合わせるだけで構いません。無駄が多かったり、不思議な処理になっていたりしても正しく動けば問題ありません。とりあえず、完成させることが重要です。
 本連載で紹介するシェルスクリプトの例もその前提で記述しています。後からもっと簡単に書ける方法が思いついてもそのままにしています。

最終回 大切なデータを守る(ディレクトリーの暗号化)

投稿日:2019.02.5 | カテゴリー: 記事

 社内に設置したサーバーでは、ストレージやマシン自体の盗難に遭うこともあります。大切なデータを保存しているのなら、保存先のディレクトリーごと暗号化しておくのがお勧めです (図1) 。

図1 暗号化していれば中身が見られない

第27回 電源障害からサーバーを守る(UPS)

投稿日:2018.12.14 | カテゴリー: 記事

社内サーバーなどの運用管理で見落としがちなのが「電源」に対する保護です。安定した電圧や電流を常に供給しなければ、サーバーが不安定になって停止や故障しかねません。
安定した電源を確保するための重要なハードウエアが「無停電電源装置」(UPS:Uninterruptible Power Supply)です。UPSを用いると、電圧値や電流値が低下したときに補えたり、電源断が発生したときに自動シャットダウンでサーバーを安全に停止させたり、雷などによる異常な高電圧を防いだりできます(図1)。

図1 電源を保護する無停電電源装置(UPS)

今回は、このUPSをサーバーにつないでサーバーの電源を制御する方法を紹介します。管理するサーバーには、Ubuntu Server 16.04 LTSがインストールされているものとします。

第26回 アクセスを制限する(AppArmor)

投稿日:2018.11.30 | カテゴリー: 記事

コンピュータを守るセキュリティの仕組みとして「強制アクセス制御」(Mandatory Access Control)があります。強制アクセス制御では、「パーミッション」などで定められているOSの標準的な制限ではなく、ユーザーや実行プログラムに対してより厳しい制限を設定できます。

例えば、あるプログラムに対して、参照しかしないファイルへの書き込み、利用するはずがないファイルへのアクセス、関係がない別のプログラムの呼び出しを禁止できます(図1)。

図1 強制アクセス制御による制限

このような強制アクセス制御をLinuxで実現できるソフトウエアには、いくつかあります。Ubuntu Serverでは「AppArmor」というソフトウエアが標準で導入されていて、有効になっています。このAppArmorは、Linux OSの核となる「カーネル」のセキュリティフレームワーク「Linux Security Modules」(LSM)を使って実装しています。

第25回 アクセスを制限する(ACL)

投稿日:2018.11.16 | カテゴリー: 記事

一般的に、ファイルやディレクトリーへのアクセス制限には「パーミッション」を利用します。このパーミッションでは「所有者」「所有グループ」「その他のユーザー」に対して「読み出し」「書き込み」「実行」の権限(許可/禁止)しか設定できません。日々のサーバー運用管理において、もっと柔軟にアクセス制限を設定したい場合もあります。

ext4やXFSなどのファイルシステムには「ACL」(Access Control List)と呼ばれる、ユーザーやグループ単位でアクセスを制限する仕組みが用意されています(図1)。それを使うと、柔軟にアクセス制限を設定できます。

図1 パーミッションとACL

第24回 定期的にジョブを実行する(cron)

投稿日:2018.11.2 | カテゴリー: 記事

日々のサーバーの運用管理として、決まった時間、決まった曜日、決まった日にちに、ある処理(ジョブ)を実行するという作業はよくあります。Linuxには、そのような時間、曜日、日付を指定してジョブを自動実行するための仕組みの「cron」(クローンまたはクーロン)があります。

今回は、このcronを紹介します。cronでは、あらかじめ実行日時や曜日、ジョブとして実行するためのコマンドを記したファイルを用意しておきます。そのファイルの内容に従って、常駐プログラム(デーモン)「crond」が決められた日時や曜日に、指定されたコマンドを実行します(図1)。

図1 決まった日時や曜日にジョブを自動実行する「cron」

第23回 バックアップを取得する(増分と差分)

投稿日:2018.10.19 | カテゴリー: 記事

前回は「tar」コマンドによる基本的なバックアップ方法を紹介しました。紹介した方法は、バックアップ対象となるすべてのファイルやディレクトリーをアーカイブ化して一つのファイルに保存する「フルバックアップ」です。このフルバックアップは、毎日実施するバックアップには向きません。バックアップに時間がかかりますし、日々のアーカイブファイルには重複するファイルやディレクトリーが数多く含まれてバックアップデータが肥大化する恐れがあるからです。

日々のサーバー運用管理では、フルバックアップだけでなく、「差分バックアップ」(Partial backup)または「増分バックアップ」(Incremental backup)を併用します。それにより、バックアップ時間を短く、バックアップ保存先の容量を無駄なく抑えられます(図1)。

図1 日々のバックアップ

第22回 バックアップを取得する(tarコマンド)

投稿日:2018.10.12 | カテゴリー: 記事

サーバーの運用管理で日々のバックアップは重要な作業です。第7回第12回で説明したRAID(Redundant Arrays of Inexpensive/Independent Disks)のよるデータ保護では、操作ミスや不正アクセス、ウイルスなどによる、データの変更(改ざん)や消去を防げません(図1)。バックアップを併用することで、大切なデータがすべてなくなってしまう最悪の事態を避けられます。

図1 データの変更(改ざん)や消去に有効なのはバックアップ

サーバーのバックアップツールには、さまざまなものがあります。また、第6回で説明した、Linuxなどのストレージを柔軟に管理する仕組み「LVM」(Logical Volume Manager)のスナップショット機能を用いればバックアップの取得が可能です。

ただし、専用のバックアップツールを導入していない、LVMを利用していない環境でもバックアップを取得できるように、まずはLinuxが標準で備える「tar」コマンドによるバックアップ取得方法を知っておきましょう。

第21回 ログを収集する(rsyslogによる一元管理)

投稿日:2018.10.5 | カテゴリー: 記事

カーネルやシステムに関連するログを収集・制御するソフトウエア「rsyslog」は、1台のサーバーで複数のサーバーのログを一元的に管理する機能を備えています(図1)。

図1 複数のサーバーのログを一元管理

今回は、3台のサーバーを用意し、その中の1台をログ管理サーバーとしてログを一元的に管理してみます。なお、いずれのサーバーもOSとしてUbuntu Server 16.04 LTSが稼働しているものとします。

番外編2 Webブラウザーからサーバーへリモートアクセス

投稿日:2018.09.28 | カテゴリー: 記事

連載「UbuntuではじめるLinuxサーバー」の第4回で紹介しましたが、サーバーにリモートからアクセスする場合、アクセスする側のパソコンやMacに「SSHクライアントソフト」が必要です。主要なLinuxディストリビューションやmacOSなら、SSHクライアントとなる「ssh」コマンドが標準で導入されています。それを使えばよいでしょう。

しかし、Windowsでは「Tera Term」などのSSHクライアントソフトを導入しなくてはいけません。WindowsでもSSHクライアントソフトを導入せずにSSHクライアントソフトが使えると便利です。

そこで今回は、Webブラウザー「Google Chrome」の拡張機能として提供されているSSHクライアントの「Secure Shell Extension」を導入して、サーバーにリモートからアクセスする環境を構築します(図1)。

図1 Google Chromeの「Secure Shell Extension」によるリモートアクセス

Google Chrome(以下、Chrome)に一度だけこの拡張機能を導入・有効しておけば、Google Chromeを導入している別のパソコンからもサーバーへリモートアクセスがすぐにできます。

第20回 ログを収集する(rsyslogのログメッセージ)

投稿日:2018.09.21 | カテゴリー: 記事

前回は、カーネルやシステムに関連するログを収集・制御するソフトウエア「rsyslog」によって、Ubuntu Server 16.04 LTSではどのような種類のログが取得されているのかを確認しました。また、rsyslogでログを取得して処理するためのルールの書き方も簡単に説明しました。
今回は、rsyslogによって出力されるログメッセージのフォーマットについて解説します。このフォーマットは「テンプレート」を使って、サーバー管理者が自由に変更できます。

図1 カーネル関連のログメッセージ

第19回 ログを収集する(rsyslogの設定)

投稿日:2018.08.31 | カテゴリー: 記事

前回は、カーネルやシステムに関連するログを収集・制御しているソフトウエア「rsyslog」の概要を紹介しました。その中で、「/etc/rsyslog.d/50-default.conf」の設定ファイルに、カーネルやシステムに関するログ出力のための設定が書き込まれていると説明しました。

今回は、このデフォルトで用意されている/etc/rsyslog.d/50-default.confの内容から、Ubuntu Server 16.04 LTSでは、どのようなログが取得されているのかを確認します(図1)。

図1 デフォルトのログ設定を確認する

第18回 ログを収集する(rsyslogの概要)

投稿日:2018.08.24 | カテゴリー: 記事

サーバーの運用管理で各種ログを収集することは重要です。Linuxでは「rsyslog」(https://www.rsyslog.com/)というソフトウエアでカーネルやシステムに関連するログを収集・制御しています(図1)。今回から、このrsyslogについて解説します。

図1 rsyslogによるログ収集

このrsyslogは、UNIXやLinux標準のログ転送およびログ取得の規格「syslog」に準拠しています。そのため、多くのLinuxディストリビューションで利用されています。

第17回 ネットワークの可用性を高める(チーミング)

投稿日:2018.08.10 | カテゴリー: 記事

複数のネットワークインタフェースを束ねて、一つのネットワークインタフェースとして扱う技術に「チーミング」(または「ボンディング」)があります。このチーミングには、帯域幅を広げる効果と、冗長化により可用性を向上させる効果があります(図1)。後者の可用性向上は、RAIDと同様にLinuxサーバーでは重要です。サーバーの運用管理の一つとして、チーミング方法を覚えておきましょう。

図1 チーミングの利点

ネットワークのプロトコルには「IPv4」と「IPv6」がありますが、広く利用されているIPv4でチーミングを設定する方法を紹介します。
今回もUbuntu Server 16.04 LTSをインストールしたサーバーを例にします。チーミングのためにネットワークインタフェースカードを二つ追加し、三つのネットワークインタフェースを搭載した状態としました。

第16回 複数のユーザーを効率良く管理する(有効期限の制御)

投稿日:2018.08.3 | カテゴリー: 記事

前回は、複数のユーザーを一括登録する方法を紹介しました。ユーザーの管理は、登録だけではありません。パスワードを頻繁に変えさせたり、ユーザーの利用期限を設定したり、一時的にログインを不可にしたりなど、登録後のユーザー管理の方が重要です(図1)。

そこで、今回は既存ユーザーに関する管理について紹介します。

図1 既存ユーザーの管理

第15回 複数のユーザーを効率良く管理する(ユーザー登録)

投稿日:2018.07.27 | カテゴリー: 記事

複数のユーザーでLinuxサーバーを共用する場合、個々のユーザーを効率良く管理することが重要です(図1)。ユーザーの一括登録、パスワード変更の義務付け、退社や退会などによるログイン自動停止などができると便利です。

図1 Linuxサーバーの運用管理としてユーザー管理は重要

そこ、Linuxサーバーにおけるユーザー管理方法を解説します。今回は、ユーザーの一括登録を紹介します。ここでも「Ubuntu 16.04 LTS」を例にします。

シェルスクリプトマガジンvol.55 Web掲載記事まとめ

投稿日:2018.07.25 | カテゴリー: 記事

シェルスクリプトマガジン Vol.55のWeb掲載部分まとめです。

プレゼント&アンケートページはこちら

シェルスクリプトマガジンvol.55は以下リンク先でご購入できます。

004 レポート テキストエディタ「Vim 8.1」公開
005 レポート トークイベント「TechLI ON」開催
006 NEWS FLASH
008 特集1 Linuxサーバー構築/麻生二郎 コード掲載
032 姐のNOGYO
033 特集2 IBM Cloud Functions を試す/小薗井康志、岸田吉弘、十川恵美、佐藤光太
048 特集3 GitHubの使い方/松浦隼人、水谷翔、鈴木順子
056 特別企画 仮想通貨マイニング/末安泰三 コード掲載
066 ラズパイ入門ボードで学ぶ電子回路の制御/米田聡 コード掲載
070 Node.js/Expressで楽々Webアプリ開発/しょっさん コード掲載
078 RESEARCHES FOR FUTURE/中村聡史
080 中小企業手作りIT化奮戦記 菅雄一
086 それプロのエバンジェリストから愛をこめて/山本美穂
088 漢のUNIX/後藤大地 コード掲載
098 人間とコンピュータの可能性/大岩元
100 バーティカルバーの極意/飯尾淳
106 法林浩之のFIGHTING TALKS/法林浩之
108 アジャイル開発 Let’s Practice!/熊野憲辰
112 機械学習のココロ/石井一夫
117 スズラボ通信/すずきひろのぶ
120 円滑コミュニケーションが世界を救う!/濱口誠
122 香川大学SLPからお届け!/山田昂平
128 ユニケージ新コードレビュー/伊藤和正 コード掲載
134 雲/桑原滝弥・イケヤシロウ
136 Techパズル/gori.sh
138 コラム「オールマイティーさを身に付けよう」/シェル魔人

第14回 ストレージの使用量を制限する(クオータの設定2)

投稿日:2018.07.20 | カテゴリー: 記事

前回は、ルートファイルシステム以外のファイルシステム(/home)に対して、ユーザーやグループのストレージ使用量を制限する「クオータ」の設定方法を紹介しました。今回は、ルートファイルシステムに対するクオータの設定です(図1)。ルートファイルシステムの場合、クオータが使えるようにするオプション、ユーザーやグループの設定ファイルの作成方法が異なります。今回も「Ubuntu Server 16.04 LTS」を例にします。

図1 ルートファイルシステムにクオータを設定する

第13回 ストレージの使用量を制限する(クオータの設定1)

投稿日:2018.07.13 | カテゴリー: 記事

Linuxサーバー上で複数のユーザーが作業することもあります。通常、各ユーザーには、作業場所として「/home」ディレクトリーの下に自分の名前と同じ「ホームディレクトリー」が割り当てられています。自分のホームディレクトリー内なら自由にファイルを保存できます。

ただし、自由に保存できるからといって、一人のユーザーが多くのストレージ容量を使うと、システムや他の人が使用できる領域を圧迫しかねません。よって、ユーザーや、ユーザーが所属するグループごとにファイルシステム単位でストレージの使用容量を制限するための「クオータ」(Quota)機能が用意されています(図1)。そのクオータの設定方法を紹介します。今回も「Ubuntu Server 16.04 LTS」を例にします。

図1 ユーザーやグループごとにストレージの使用量を制限する

第12回 ストレージの可用性を高める(RAIDの復旧)

投稿日:2018.07.6 | カテゴリー: 記事

前回は、RAIDの運用管理における監視方法を紹介しました。RAIDの障害を検出したら、次の障害が発生する前に完全復旧させましょう。
完全復旧作業の手順は図1のようになります。

図1 RAIDアレイの完全復旧手順

まず、障害が発生したストレージをRAIDアレイから切り離します。そして、サーバーマシンから故障したストレージを抜き取り、新しいストレージを交換します。「ホットスワップ」または「ホットプラグ」に対応したベイまたはケースなら電源を入れたまま抜き差しできますが、大抵はホットスワップに対応していません。サーバーマシンをシャットダウンして電源をオフにしてからストレージを交換してください。
交換を終えたら、サーバーマシンの電源をオンにします。サーバーが起動したら、新しいストレージに物理ボリュームを作成します。作成したら、RAIDアレイに追加します。これで完全復旧の完了です。

第11回 ストレージの可用性を高める(RAIDの運用管理)

投稿日:2018.06.29 | カテゴリー: 記事

3回にわたって、Ubuntu Server 16.04 LTSにおけるRAIDアレイ(ソフトウエアRAID)の構築方法を紹介しました。複数のストレージを使ってRAIDを構成したことで、可用性を高めることができました。しかし、安心はできません。ストレージの故障から復旧するまでの間は、高可用性を確保できないからです。

常にRAIDの状態を監視し、ストレージの故障を発見したときはすぐに新しいストレージを割り当て完全復旧しなくてはいけません(図1)。よって、今回はRAIDの運用管理方法について解説します。

図1 RAIDアレイの監視

第10回 ストレージの可用性を高める(ソフトウエアRAIDの構築3)

投稿日:2018.06.22 | カテゴリー: 記事

前回と前々回で、Ubuntu Server 16.04 LTSのインストーラーを使った、ソフトウエアRAIDの構築方法を解説しました。今回は、既に動かしているUbuntuサーバーにRAID構成にしたストレージ(RAIDアレイ)を追加します(図1)。

図1 ソフトウエアRAIDによるRAIDアレイを追加

今回も扱うRAIDは「ソフトウエアRAID」です。LinuxにはソフトウエアRAIDを構築・管理する「mdadm」コマンドが用意されています。

第9回 ストレージの可用性を高める(ソフトウエアRAIDの構築2)

投稿日:2018.06.15 | カテゴリー: 記事

前回は、「BIOS」のファームウエアを搭載するマシンで、Ubuntu Server 16.04 LTSのインストーラーを使ったソフトウエアRAID(RAID 1、RAID 5、RAID 6)を構築する手順を解説しました。今回は、ファームウエアが「UEFI」のマシンでの手順を紹介します(図1)。

図1 ファームウエアが「UEFI」のマシンでUbuntu ServerのインストーラーによるRAID構築

前回も少し触れましたが、「EFIシステムパーティション」への障害対策が必要です。EFIシステムパーティションはRAID構成にできませんが、起動時にしか使いません。そこで、別のストレージを用意してその中に作成し、バックアップしておきます。

第8回 ストレージの可用性を高める(ソフトウエアRAIDの構築1)

投稿日:2018.06.8 | カテゴリー: 記事

前回は「RAID」(レイド、Redundant Arrays of Inexpensive/Independent Disks)の概要、「RAID 0」「RAID 1」「RAID 5」「RAID 6」「RAID 0+1」「RAID 1+0」の構成、「ハードウエアRAID」と「ソフトウエアRAID」などの種類を紹介しました。今回から数回にわたって、Ubuntu Server 16.04 LTSのストレージをRAID構成にする方法、RAIDの監視やストレージの障害検出、障害からの復旧方法を解説します。

今回は、Ubuntu Server 16.04 LTSのインストーラーを使った、ソフトウエアRAIDによるRAID 1、RAID 5、RAID 6を構築する手順です。マシンのファームウエアが「BIOS」なら、Ubuntu Serverのインストーラーからシステムで利用しているストレージを簡単にRAID構成にできるので、それから始めましょう(図1)。

図1 Ubuntu Server 16.04 LTSのインストーラーによるRAID構築

ちなみに、ファームウエアが「UEFI」の場合、ストレージの先頭にある、OS起動用のソフトなどを格納する「EFIシステムパーティション」への障害対策が必要です。このパーティションを含むストレージに障害が発生した状態で、サーバーを再起動すると起動しないことがあり得ます。UEFIのマシンにおけるシステム全体のRAID構築方法は、次回以降に解説します。

第7回 ストレージの可用性を高める(RAIDの概要)

投稿日:2018.06.1 | カテゴリー: 記事

「可用性」(Availability)とは、システム稼働を継続できる能力のことです。この可用性を向上するには、障害に対して強いシステムを構築できるかどうかにかかっています。
サーバーには、ソフトウエアによる障害以外にハードウエアによる障害もあります。ハードウエアの中で最も壊れやすいのが、機械部品(モーター)で動作する「ハードディスク」(HDD)です。HDDの経年劣化による故障は避けられません。一部のデータが読み出しにくかったり、読み出せなかったりと、部分的に故障するので、とてもやっかいです。
このように壊れやすいにもかかわらず、HDDはサーバー内の大切なデータを保存しています。大切なデータが失われてしまうと、システム稼働を継続できません。逆にいえば、HDDが故障しても大切なデータを失うことがなければ、システム稼働を継続できます。その方法として有効なのが「RAID」(レイド、Redundant Arrays of Inexpensive/Independent Disks)です。RAIDは、複数のストレージを組み合わせて、1台(または2台)のストレージが故障しても他のストレージによってデータを消失させない仕組みです(図1)。複数のストレージに同じデータを保存したり、データを修復するための「パリティー」を生成・保存したりして、データ消失を防ぎます。

図1 RAID(Redundant Arrays of Inexpensive/Independent Disks)

第6回 ストレージを柔軟に管理する(LVMの操作3)

投稿日:2018.05.25 | カテゴリー: 記事

第5回に引き続き、Linuxなどのストレージを柔軟に管理する仕組み「LVM」(Logical Volume Manager)の利点を紹介します。今回は「スナップショット」です。
このスナップショットは、LVMの「論理ボリューム」を瞬時にバックアップできるとても便利な機能です(図1)。スナップショット作成時の論理ボリューム(LV)の状態を維持でき、それを「dump」や「rsync」などのコマンドで簡単に取り出せます。

図1 スナップショット機能

シェルスクリプトマガジンvol.54 Web掲載記事まとめ

投稿日:2018.05.25 | カテゴリー: 記事

 

シェルスクリプトマガジンvol.54のWeb掲載部分まとめです。

プレゼント&アンケートページはこちら!

シェルスクリプトマガジンvol.54は以下リンク先でご購入できます。

04  レポート Ubuntu最新版18.04 LTSが登場 FoundationDBのオープンソース化

06  NEWS FLASH

08  特集1 Node.js/Express入門/しょっさん  コード掲載

29  縁の木、育てよう/白羽玲子

30  特集2 シェルスクリプトスニペット集/今泉光之  コード掲載

41  姐のNOGYO

42  特集3 Kubernetesを知る/福田潔  コード掲載

52  特別企画 Alexaカスタムスキル開発入門/岡本秀高 コード掲載

60  ラズパイ入門ボードで学ぶ電子回路の制御/米田聡  コード掲載

64  スズラボ通信/すずきひろのぶ

72  アジャイル開発 Let’s Practice!/熊野憲辰

76  円滑コミュニケーションが世界を救う! /濱口誠一

78  中小企業手作りIT化奮戦記/菅雄一

84  RESEARCHES FOR FUTURE/伊藤貴之

86  香川大学SLPからお届け! /楠目幹  コード掲載

92  法林浩之のFIGHTING TALKS/法林浩之

94  それプロのエバンジェリストから愛をこめて/山本美穂

98  人間とコンピュータの可能性/大岩元

100  バーティカルバーの極意/飯尾淳  コード掲載

106  雲/桑原滝弥・イケヤシロウ

108  漢のUNIX/後藤大地  コード掲載

116  ユニケージ新コードレビュー/大内智明  コード掲載

120  Techパズル/gori.sh

122  コラム「人間がボトルネックになる時代」/シェル魔人

番外編1 長期サポート版のUbuntu Server 18.04 LTS

投稿日:2018.05.18 | カテゴリー: 記事

2018年4月26日に「Ubuntu 18.04 LTS」がリリースされました(図1)。今まで連載で紹介してきた「Ubuntu 16.04 LTS」に代わる長期サポート版(LTS)です。Ubuntu 18.04 LTSでは、カーネルを含む多くのソフトウエアが更新されました。

図1 Ubuntu 18.04 LTSのリリースノート(https://wiki.ubuntu.com/BionicBeaver/ReleaseNotes)

サーバー版の「Ubuntu Server 18.04 LTS」では、ネットワークユーティリティーとして「NetPlan」が採用され、ネットワーク設定は「systemd-networkd」というデーモンで管理されています。また、デフォルトのインストーラーが「Subiquity」となり、九つのステップで簡単にインストール可能になりました。

今回は、このUbuntu Server 18.04 LTSをSubiquityでインストールする方法と、ストレージを柔軟に管理する仕組み「LVM」(Logical Volume Manager)を設定したインストール方法を紹介します。Subiquityでは、インストールが簡単になった分、LVMが設定できません。

第5回 ストレージを柔軟に管理する(LVMの操作2)

投稿日:2018.05.11 | カテゴリー: 記事

前回は、Linuxなどのストレージを柔軟に管理する仕組み「LVM」(Logical Volume Manager)の利点として、論理ボリュームを拡張してファイルシステムの容量を増やす方法を紹介しました。今回は、残っている利点の一つとして論理ボリュームの縮小を解説します。
ルートファイルシステムなどに必要以上の容量を割り当ててしまっても、LVMならその容量を減らして減らした容量を別の用途に利用できます(図1)。

図1 論理ボリュームの縮小

第4回 ストレージを柔軟に管理する(LVMの操作1)

投稿日:2018.04.27 | カテゴリー: 記事

前回は、Linuxなどのストレージを柔軟に管理する仕組み「LVM」(Logical Volume Manager)の利点と、Ubuntu ServerのストレージをLVMで管理する方法を紹介しました。今回は、LVMの特長である、論理ボリュームを拡張してファイルシステムの容量を増やす方法を、Ubuntu Serverを使って実際に試しながら紹介します(図1)。

図1 論理ボリュームを拡張する

ルートファイルシステムを拡張する

物理ディスクを追加し、それを使ってUbuntu Serverのルートファイルシステムを拡張します。第3回「ストレージを柔軟に管理する(LVMの導入)」で解説した手順で、Ubuntu ServerのストレージをLVMに設定してインストールしておいてください。
いったんシャットダウンして電源を切り、ハードディスクなどの物理ディスクを増設します。増設したら、電源を投入してUbuntu Serverを起動します。ここでは、1Tバイトの新品ハードディスクを追加しました。

追加ディスクのデバイスファイル名を確認する

「parted」コマンドと「grep」コマンドで、追加したハードディスクのデバイスファイル名を調べます。「[sudo] taro のパスワード:」のように表示されたら、自分のパスワードを入力します。

基本的に、Ubuntu Serverをインストールしているストレージには「/dev/sda」のデバイスファイル名が割り当てられます。/dev/sda以外の「ディスク」から始まる行を確認します。容量から、追加したハードディスクのデバイスファイル名は「/dev/sdb」と分かります。

第3回 ストレージを柔軟に管理する(LVMの導入)

投稿日:2018.04.20 | カテゴリー: 記事

第1回から2回にわたって、パーティションの分割方法を紹介しました。いくつかのディレクトリーに別々のパーティションを割り当てると、他のディレクトリーから容量の圧迫などの影響を受けることがなくなります。
しかし、容量不足によるシステムやサーバーアプリの停止は免れても、容量不足に陥っているディレクトリーのサイズを簡単に増やせるわけではありません。新しいハードディスク(HDD)などを追加してより大きなサイズのパーティションを作成し、そのパーティションにディレクトリーの中身を丸ごとコピーした上で割り当てし直す作業が必要です。

柔軟なストレージ管理ができるLVM

Linuxには「LVM」(Logical Volume Manager)という仕組みがあります。LVMでは、HDDなどのストレージ内を物理的な区画(物理ボリューム)に分けて、それをいくつか束ねて論理的なストレージとなる「ボリュームグループ」を作成します(図1)。このボリュームグループから必要な容量だけを「論理ボリューム」に割り当てられます。この論理ボリュームは、パーティションと同様に扱えます。

図1 LVM(Logical Volume Manager)の構成

ボリュームグループや論理ボリュームの容量の増減は容易です。容量を増やしたいなら、ボリュームグループに物理ボリュームを追加し、追加したボリュームから必要な容量だけを論理ボリュームに割り当てます。逆に減らしたいなら、論理ボリュームからボリュームグループに容量を戻します。
また、LVMには「スナップショット」という便利な機能があります。ある時点のLVM上にあるデータの状態を瞬時に保存できます。バックアップ用途にも利用できるのでとても重宝します。
今回は、Ubuntu Server上でLVMを扱う方法を紹介します。

第2回 パーティションを分割する(Ubuntu Serverで実施)

投稿日:2018.04.13 | カテゴリー: 記事

前回、別々のパーティションに分けたいディレクトリーを示しました。「/boot」「/home」「/var」の3種類です。今回は、実際にUbuntu Serverのパーティションを分割し、それぞれのディレクトリーに割り当てます(図1)。

図1 パーティションを分割して個々のディレクトリーに割り当てる

分割は、Ubuntu Sertverのインストール時に実施するのが簡単です。そこで、Ubuntu Serverのインストールから始めましょう。以前の連載「UbuntuではじめるLinuxサーバー」の第1回で紹介した方法でインストールメディアを作成してください。そして、同じ連載の第2回で解説した手順でインストールを進めます。図2画面になったら、「手動」を選んでパーティションを手作業で作成します。

図2 パーティションの作成方法を選択する画面

インストール対象のマシンに内蔵または接続されているストレージが自動認識されます。「iSCSIボリュームの設定」と「パーティションへの変更を元に戻す」の間に、そのストレージが表示されるのでそれを選択します(図3)。

図3 Ubuntu Serverをインストールするディスクを選択

ここでは何も書き込まれていないハードディスク(HDD)を利用しているので、最初にディスクの先頭にパーティション情報を保存するためのテーブルを作成します。図4の画面で「はい」を選びます。

図4 パーティションテーブルの作成

第1回 パーティションを分割する(ディレクトリー構成)

投稿日:2018.04.6 | カテゴリー: 記事

Linuxが使用するディスク容量が不足すると、リモートからアクセスできなかったり、サーバーが正しく稼働しなくなったりするなど、重大な問題が起こりかねません。サーバーを安定的に運用するには、何らかの対策が必要です。ディスク容量が足りなくなる前に増設することも一つの方法ですが、まずはLinuxの特徴を生かした対策を施しておきましょう。
Linuxでは、ディレクトリーごとに別々のパーティション(ディスク内の区画)を割り当てられます。パーティションを分けておけば、あるパーティションが容量不足になっても他のパーティションへの影響はありません。よって、システムやサーバーの稼働に重要なファイルを格納しているディレクトリーと、容量が肥大化しやすいディレクトリーを、あらかじめ別々のパーティションに分けておくことで、最悪の事態を回避できます(図1)。

図1 システムのパーティションを分けておく

はじめてのLinuxサーバー運用管理

投稿日:2018.04.6 | カテゴリー: 記事

正常に、安全にLinuxサーバーを稼働させるには、日々の運用管理が重要です。Linux(Ubuntu)サーバーの運用管理に役立つ内容を紹介します。

第1回 パーティションを分割する(ディレクトリー構成)
第2回 パーティションを分割する(Ubuntu Serverで実施)
第3回 ストレージを柔軟に管理する(LVMの導入)
第4回 ストレージを柔軟に管理する(LVMの操作1)
第5回 ストレージを柔軟に管理する(LVMの操作2)
番外編1 長期サポート版のUbuntu Server 18.04 LTS
第6回 ストレージを柔軟に管理する(LVMの操作3)
第7回 ストレージの可用性を高める(RAIDの概要)
第8回 ストレージの可用性を高める(ソフトウエアRAIDの構築1)
第9回 ストレージの可用性を高める(ソフトウエアRAIDの構築2)
第10回 ストレージの可用性を高める(ソフトウエアRAIDの構築3)
第11回 ストレージの可用性を高める(RAIDの運用管理)
第12回 ストレージの可用性を高める(RAIDの復旧)
第13回 ストレージの使用量を制限する(クオータの設定1)
第14回 ストレージの使用量を制限する(クオータの設定2)
第15回 複数のユーザーを効率良く管理する(ユーザー登録)
第16回 複数のユーザーを効率良く管理する(有効期限の制御)
第17回 ネットワークの可用性を高める(チーミング)
第18回 ログを収集する(rsyslogの概要)
第19回 ログを収集する(rsyslogの設定)
第20回 ログを収集する(rsyslogのログメッセージ)
番外編2 Webブラウザーからサーバーへリモートアクセス
第21回 ログを収集する(rsyslogによる一元管理)
第22回 バックアップを取得する(tarコマンド)
第23回 バックアップを取得する(差分と増分)
第24回 定期的にジョブを実行する(cron)
第25回 アクセスを制限する(ACL)
第26回 アクセスを制限する(AppArmor)
第27回 電源障害からサーバーを守る(UPS)
最終回 大切なデータを守る(ディレクトリーの暗号化)

written by シェルスクリプトマガジン編集部

最終回 グループウエアサーバーを作る(Joruri Gwの導入)

投稿日:2018.03.30 | カテゴリー: 記事

約7カ月間、「UbuntuではじめるLinuxサーバー」を連載してきました。今回は、その最後としてグループウエアサーバーを構築します。無料で使えるグループウエアサーバーソフトはいくつか存在します。ただし、日本で使うなら国産のグループウエアサーバーソフトがお薦めです。そこで、徳島県のサンブリッジが開発するオープンソースの「Joruri Gw」を使用します(図1)。

図1 グループウエアサーバーソフト「Joruri Gw」の掲示板を表示

Joruri GWは、プログラミング言語「Ruby」とフレームワーク「Ruby on Rails」で開発されています。Webサーバーソフト「Apache HTTP Server」(以下、Apache)、データベース管理システム(DBMS)「MySQL」、分散型メモリーキャッシュシステム「Memcached」と組み合わせて動作します。対応OSはCentOSですが、Ubuntu Server(16.04 LTS)上でも動きます。

シェルスクリプトマガジンvol.53 Web掲載記事まとめ

投稿日:2018.03.25 | カテゴリー: 記事

シェルスクリプトマガジンvol.53のWeb掲載部分まとめです。

プレゼント&アンケートページはこちら!

シェルスクリプトマガジンvol.53は以下リンク先でご購入できます。

008 特集1  9のステップでしっかりわかる Python入門/西川公一朗  コード掲載

024 特集2  このまま使える! ITエンジニアのための英文メール&チャット 20のポイント/甲斐荘秀生 監修 Paul McMahon  おまけ英文掲載

032 特集3  IBM Cloudで学ぶAI・機械学習・ディープラーニング/佐々木敦守、古川正宏、小薗井康志  コード掲載

049 姐のNOGYO

050 ラズパイ入門ボードで学ぶ電子回路の制御/米田聡  コード掲載

053 スズラボ通信「ネイキッドなGNU/Linuxマシン PocketBeagle」/すずきひろのぶ  リンク掲載

056 機械学習のココロ 「正則化とスパースモデリング」/石井一夫  訂正情報およびリンク掲載

060 バーティカルバーの極意/飯尾淳

066 それプロのエバンジェリストから愛をこめて/山本美穂

070 RESEARCHES FOR FUTURE 青山学院大学 社会情報学部 社会情報学科 伊藤研究室/伊藤一成

072 香川大学SLPからお届け! 「Play Frameworkでアプリケーション開発」/朝野有也 コード掲載

078 ITエンジニアのためのマーケティング入門/水間丈博

082 蛇/桑原滝弥・イケヤシロウ

084 法林浩之のFIGHTING TALKS/法林浩之

086 人間とコンピュータの可能性/大岩元

088 円滑コミュニケーションが世界を救う! /濱口誠一

090 中小企業手作りIT化奮戦記「使うと便利SQL」/菅雄一

095 漢のUNIX「XMLをJSONに変換するコードを書いてみよう」/後藤大地 コード掲載

104 アジャイル開発 Let’s Practice!「インセプションデッキ その1」/熊野憲辰

108 40歳から始める、オレとRubyプログラミング/しょっさん  コード掲載

118 コボラーによるコボラーのためのユニケージ入門「COBOLプログラムのマイグレーション」/野村祐三

126 Techパズル/gori.sh

128 コラム「自主的に考える力を持てるような教育を」/シェル魔人

第29回 バージョン管理システムを作る(GitBucketの使い方)

投稿日:2018.03.23 | カテゴリー: 記事

前回は、「GitBucket」を使ってソースコードやドキュメントのバージョンを管理できる共有サーバー(Gitサーバー)を構築しました。今回は、GitBucketの基本的な使い方を紹介します。

前回と同様に、次のコマンドを実行してGitBucketを起動します。

しばらく待ってから、リモートアクセス用パソコンのWebブラウザーで「http://Ubuntu ServerのIPアドレス:8080/」にアクセスし、GitBucketのトップページを開いてください(図1)。

図1 GitBucketのトップページ

第28回 バージョン管理システムを作る(GitBucketの導入)

投稿日:2018.03.16 | カテゴリー: 記事

ソフトウエア開発のための共有サービスとして「GitHub」を使っている人は多いでしょう。GitHubはソフトウエアのソースコードのみならず、各種文書のバージョン管理にも利用できます(図1)。そのため、会社やグループで自由に使えるGitHubを用意できればとても便利です。

図1 Gitサーバーによるバージョン管理システム

Linuxには、GitHubのようなサーバー(Gitサーバー)を構築できるソフトがいくつかあります。具体的には、GitHubと同様のサービス提供にも利用されている「GitLab」、日本人が開発者の「GitBucket」、Go言語で開発されている「Gogs」などです。今回は、これらの中からインストールが簡単なGitBucketをUbuntu Serverに導入します。

第27回 安全なFTPサーバーを作る(ProFTPDの設定)

投稿日:2018.03.9 | カテゴリー: 記事

前回構築した、ProFTPDによるFTPSサーバーをインターネットに公開します。インターネットへのサーバー公開については、連載第10回に2種類の方法を紹介しています。「DMZ」と「ポートフォワーディング」です。
DMZの場合、前回の設定のままFTPSサーバーをDMZに配置すれば、そのままインターネットに公開できます。ただし、セキュリティ上あまり好ましくありません。連載第21回で紹介したファイアウォールを自身のサーバー内に構築しましょう。なお、ファイアウォールを経由してFTPSサーバーをインターネットへ公開する場合、FTPSの通信を通過させるための設定が必要です。
ポートフォワーディングの場合も、ファイアウォールと同様にFTPSの通信を通過させる設定が設定が必要です。

アクティブとパッシブ

FTP/FTPSでは、二つのポートを利用して通信します。一つは「制御」用、もう一つは「データ転送」用です。どちらも通信を開始するときに、サーバーとクライアントの間で「コネクション」(接続)を確立します。
FTP/FTPSでは、このコネクション確立方法の違いで「アクティブ」と「パッシブ」という2種類のモードが用意されています。どちらもFTP/FTPSの通信を開始するのはクライアントからです。ただし、アクティブモードではFTPサーバーから、パッシブモードではFTPクライアントから、データ転送用のコネクションを確立しにいきます(図1)。

図1 アクティブとパッシブ

第26回 安全なFTPサーバーを作る(ProFTPDの導入)

投稿日:2018.03.2 | カテゴリー: 記事

今回は、インターネットからファイルをダウンロードしたり、アップロードしたりする「FTPサーバー」を構築します(図1)。LinuxでFTPサーバーを構築できるフリーソフトにはいくつかあります。ここでは、「ProFTPD」を用います。

図1 ファイルをダウンロード・アップロードできるFTPサーバー

なお、FTPサーバーの標準プロトコルである「FTP」(File Transfer Protocol)の場合、ユーザー名とパスワード、データがそのまま(平文で)ネットワークを流れます。インターネット上の通信で平文を使用するのはセキュリティ上好ましくありません。そこで、暗号化通信を用いたファイル転送プロトコルの「FTPS」(File Transfer Protocol over SSL/TLS)を利用します。

第25回 インターネットへのアクセスを制限する(Squidの設定)

投稿日:2018.02.23 | カテゴリー: 記事

前回は「Squid」を用いて、プロキシーサーバーを構築しました。今回は、インターネットへはプロキシーサーバー経由でしかアクセスできないように(ブロードバンド)ルーターを設定します。加えて、危険なサイトにアクセスできないようにしたりなど、アクセス制限の設定をSquidに追加します(図1)。

図1 プロキシーサーバーによるアクセス制限

なお、システム管理者などの別の人がルーターを管理している場合、ルーターの設定やプロキシーの設置はその人と相談してください。

第24回 インターネットへのアクセスを制限する(Squidの導入)

投稿日:2018.02.16 | カテゴリー: 記事

自宅や会社でインターネットへのアクセスを制限したい場合、「プロキシーサーバー」を構築するとよいでしょう。プロキシー(Proxy)とは、英語で「代理」の意味です。
LAN内のコンピュータやネットワーク機器がインターネットに直接アクセスできない環境では、インターネットにアクセスするためにプロキシーサーバーを設置します。プロキシーサーバーがそれらに代わってインターネットにアクセスし、その応答をアクセス元に返します(図1)。
通信がプロキシーサーバーを経由することで、通信内容を監視できます。それによって、アクセスを制限したりが可能です。

図1 プロキシーサーバー経由でアクセス

また、プロキシーサーバーは、アクセスしたデータを一時的に保持する「キャッシュ」機能を備えています。キャッシュ内にデータがあれば、インターネットへのアクセスが不要なるため、通信を高速化できます。
Linuxでプロキシーサーバーを構築できるソフトとして「Squid」があります。今回は、このSquidを導入して、LAN内のコンピュータやネットワーク機器がSquid経由でインターネットにアクセスできるように設定します。

第23回 フォトギャラリーを作る(Lychee)

投稿日:2018.02.9 | カテゴリー: 記事

Instagramなどの普及により、スマートフォンで撮影した写真がかなりたまっている人も多いでしょう。Linuxサーバーなら、そのような写真を整理して個人用のフォトアルバムを作成できます。
今回は、WebサーバーソフトのApache HTTP Server(以下、Apache)と、データベース管理システムのMariaDBを使って、写真管理ソフト「Lychee」を動作させ、自分だけのフォトギャラリーを作ります(図1)。

図1 フォトギャラリーのサーバーソフト「Lychee」(ライチ)

第22回 WebサーバーをHTTPSに対応させる(Let’s Encrypt)

投稿日:2018.02.2 | カテゴリー: 記事

Webサーバーのプロトコルとして「HTTP」(Hypertext Transfer Protocol)ではなく、「HTTPS」(Hypertext Transfer Protocol Secure)を利用するのが当たり前になりつつあります。HTTPSでは、SSL/TLS(Transport Layer Security/Transport Layer Security)による暗号化を施しています。
米Google社では、インターネット検索サービスのランキングでHTTPSに対応したWebサイトを優遇したり、Webブラウザー「Chrome」でHTTPSに対応したWebサイトをアクセスした場合に「保護された通信」や会社名を表示して安心感を与えたりするなど、HTTPS化を推進しています(図1)。

図1 HTTPSに対応しているWebサイトのアドレス表示例

Apache HTTP ServerNginxなどのWebサーバーソフトでHTTPSを有効にすることは、それほど難しいことではありません。ただし、HTTPSには「SSLサーバー証明書」が必要で、それが正式なものでないと、Webブラウザーに図2のようなメッセージが表示されます。そのサイトを例外などに加えないとアクセスできません。

図2 正式な証明書を持っていないWebサイトの閲覧例

そこで今回は、連載8回で構築したApache HTTP Server(以下、Apache)の通信のHTTPS化と、無料で正式なSSLサーバー証明書を入手・導入する方法を紹介します。

第21回 サーバーを守る(ファイアウォール)

投稿日:2018.01.26 | カテゴリー: 記事

不正なアクセスなどからサーバーやネットワークを守る仕組みとして「ファイアウォール」があります。ファイアウォールは、日本語で「防火壁」という意味です。ファイアウォールを通過する通信を監視し、サーバーやネットワーク内外への不適切な通信の遮断などに利用します(図1)。

図1 ファイアウォールによるアクセス制御

通常、インターネットの出入り口に配置される「ゲートウェイ」となるルーター(ブロードバンドルーター)がファイアウォールの機能を備えています。ただ、連載第10回で説明したDMZ(非武装地帯)に配置したサーバーの場合、内部にファイアウォールを設置して自らを守る必要があります。

シェルスクリプトマガジンvol.52 Web掲載記事まとめ

投稿日:2018.01.23 | カテゴリー: 記事

シェルスクリプトマガジンvol.52のWeb掲載部分まとめです。

プレゼント&アンケートページはこちら!

シェルスクリプトマガジンvol.52は以下リンク先でご購入できます。

4 レポート スマートスピーカーが相次いで登場

6 特集1 Dockerを使ってみよう/末安泰三

20 特集2 ラズパイ入門ボードの使い方/米田聡 コード掲載

30 RESEARCHES FOR FUTURE 千葉工業大学 先進工学部 未来ロボティクス学科 自律ロボット研究室/上田隆一

32 機械学習のココロ 丁半バクチで勝負する機械学習の世界(モンテカルロ法)/石井一夫 リンク掲載

39 姐のNOGYO 40 アジャイル開発 Let’s Practice! システム設計/熊野憲辰

44 中小企業手作りIT化奮戦記 第32回 眠れない地獄の夜/菅雄一

50 円滑コミュニケーションが世界を救う!/濱口誠一

52 縁の木、育てよう ゲスト エウレカ 森川託磨さん /白羽玲子

56 人と月/桑原滝弥・イケヤシロウ

58 コボラーによるコボラーのためのユニケージ入門 COBOLとユニケージの違い/野村祐三

64 漢のUNIX サードパーティ製ライブラリを使う/後藤大地 コード掲載

73 バーティカルバーの極意/飯尾淳

78 人間とコンピュータの可能性/大岩元

80 香川大学SLPからお届け!/花川直己、家平和輝、森田浩平

84 法林浩之のFIGHTING TALKS/法林浩之

86 40歳から始める、オレとRubyプログラミング/しょっさん コード掲載

96 ITエンジニアのためのマーケティング入門 第28回 デジタルマーケティング その4/水間丈博

100 Techパズル/gori.sh

102 1足す1は3にはならない/シェル魔人

第20回 オンラインストレージを作る(アプリ導入)

投稿日:2018.01.19 | カテゴリー: 記事

前回は「Nextcloud」のユーザー作成と基本操作を解説しました。今回は、Netcloudの機能を拡張するアプリについて紹介します。Netcloudの本体には、オンラインストレージに必要な最低限の機能しか組み込まれていません。Netcloudに組み込むことができるアプリを有効化することによって、Googleカレンダーや、Googleドライブのようなオンラインオフィス機能などを追加できます(図1)。

図1 アプリを有効にすることでNextcloudの機能拡張ができる

それでは、前回と同様にリモートアクセス用パソコンでWebブラウザーを起動して「http://Ubuntu ServerのIPアドレス:8080/」にアクセスします。ログイン画面から管理者アカウントでログインします。

第19回 オンラインストレージを作る(基本操作)

投稿日:2018.01.12 | カテゴリー: 記事

前回は「Nextcloud」を使ってオンラインストレージを構築しました。今回は、Netcloudのユーザー作成と基本的な使い方を紹介します。
前回と同様にリモートアクセス用パソコンでWebブラウザーを起動して、「http://Ubuntu ServerのIPアドレス:8080/」にアクセスします。ログイン画面から管理者アカウントでログインします(図1)。

図1 Nextcloudのログイン画面

Open USP Tukubaiシンプルレシピ Part1 テキスト編 (後半・ルービックキューブをつくる など)

投稿日:2018.01.9 | カテゴリー: 記事

Tukubai、それはシェルスクリプトの使い易さを加速させるコマンド群。
前号では、そのオープン版“Open usp Tukubai”を紹介したが、やり残したことがあった。
豊富なレシピの紹介である。
そこで今号と次号の二回に渡り、Tukubaiの、特に実際のコーディングスタイルが分かり易いレシピを特集する。
「シェルスクリプトとは、僅かなコマンドの追加で、こんなにも応用の効く言語になるのか!」と、あなたはきっと驚くことだろう。

written by USPマガジン編集部

本記事は、USP MAGAZINE vol.5(2012年夏号)掲載記事のWEB再録記事(後半部分)です。

前半はこちら→シェルスクリプトに何でもおまかせ Open USP Tukubaiシンプルレシピ Part1 テキスト編 (前半)

本記事掲載のUSP MAGAZINE vol.5は以下リンク先でご購入できます。

 

レシピ2 ルービックキューブを作る。

問題

Tukubai はシェルスクリプトをデータベース言語化させるためだけのコマンドセットではないというが、それならもっと一般的な例は無いのか。

数理的な操作の様子が伺えるコードが見てみたい。例えば、何らかの科学技術計算を行っているプログラムであれば、それがわかりやすいと思うのだが。

解答

実際に科学技術計算にも利用しているのだが、そのような例は専門分野の知識から解説しなければならない。

そこでここでは専門分野知識の解説が不要なゲームのレシピを紹介しよう。数学パズル的要素が強いゲームであれば、数理的な操作も見え易いからだ。

■ サンプルプログラム
そこでルービックキューブ(3 × 3 のオーソドックスなもの)を作ってみた。

ルービックキューブは、立方体の一面が一つの行列に対応した6 つの行列であると見なせる。キューブを動かすと、その行列のうちの一つで± 90°回転が発生し、それに伴って隣接する4 つの面に相当する行列の一部要素が、別の行列に移動する。この動きを、シミュレートしようというものである。

UECでの解説はこちら。

リスト3.rubik-cube.func : ルービックキューブプログラム(ファイル2・関数定義)

第18回 オンラインストレージを作る(Nextcloud)

投稿日:2017.12.29 | カテゴリー: 記事

ファイルの保存ややり取りに、GoogleドライブDropboxOneDriveなどの「オンラインストレージ」サービスを利用している人も多いでしょう。オンラインストレージは、インターネット上に配置されたファイル共有サーバーです。インターネットに接続できる環境があれば、いつでもどこでもその上に保存したファイルにアクセスできます。
今回は、このオンラインストレージをUbuntu Server上に構築します。オープンソースのオンラインストレージソフトとしては「Nextcloud」が有名です。ユーザーインタフェースの見た目もよく、パソコンやスマホ向けにファイル同期用の専用クライアントソフトが用意されています。
Nextcloudはプログラミング言語「PHP」で書かれています。動かすには、WebサーバーソフトのApache HTTP Server(以下、Apache)、データベース管理システムのMySQLまたはMariaDBが必要です(図1)。

図1 Nextcloudの動作環境

Open USP Tukubaiシンプルレシピ Part1 テキスト編 (前半・帳簿を作る)

投稿日:2017.12.26 | カテゴリー: 記事

Tukubai、それはシェルスクリプトの使い易さを加速させるコマンド群。
前号では、そのオープン版“Open usp Tukubai”を紹介したが、やり残したことがあった。
豊富なレシピの紹介である。
そこで今号と次号の二回に渡り、Tukubaiの、特に実際のコーディングスタイルが分かり易いレシピを特集する。
「シェルスクリプトとは、僅かなコマンドの追加で、こんなにも応用の効く言語になるのか!」と、あなたはきっと驚くことだろう。

written by USPマガジン編集部

本記事は、USP MAGAZINE vol.5(2012年夏号)掲載記事のWEB再録記事(前半部分)です。

後半は2018年1月9日に公開予定です。

本記事掲載のUSP MAGAZINE vol.5は以下リンク先でご購入できます。

準備 Tukubaiを知り、そして始める。

Tukubai は、シェルスクリプトをプログラム開発言語として本気で使うべく作られたコマンド集だ。これを制作したUSP 研究所は実際に、Tukubai を用いて様々な業務システムの開発や開発支援を行っている。
2012 年2 月、このうち使用頻度が高いもの中心に選ばれ、オープンソースとして公開された。それがOpen usp Tukubai である。

シェルスクリプトで開発するのはなぜか

■ なぜシェルスクリプト?
意外に思うかもしれないが、シェルスクリプトは上手に使えば、C 言語並のハイパフォーマンスなプログラムを、C 言語より遥かにラクに作れる。
ヒミツは、Unix システムコールやライブラリーの殆ど素の能力を、Unix シェル自身やコマンド(cat, sed, awk, grep 等々……の馴染みのもの)から直接使える点にある。
Unix システムコールやライブラリーはカーネルに直結しており、コンピューターの本気の性能や堅牢性の恩恵に預かれるのだ。Unixシェルはいわばその上に被さる薄い皮。だから、使わない手はない。

■ なぜTukubai?
しかし、実際の業務アプリケーションやWeb アプリケーションを作ろうとすると、そこで頻出する処理を簡単にやってくれるコマンドがなかなか無い。一般的にシェルスクリプトが開発言語として利用されない理由もここにある。そこを補うべく作られたものがTukubai というわけだ。
本特集では、Tukubai を使うと、どんなことができて、それはどんなふうに書けるかということがわかるレシピを紹介しよう。

第17回 ブログサイトを作る(ユーザー追加と記事投稿)

投稿日:2017.12.22 | カテゴリー: 記事

今回は、WordPressで構築したブログサイトへのユーザー追加と記事投稿の方法を紹介します。ユーザーの種類(ロール、役割)は「購読者」「寄稿者」「投稿者」「編集者」「管理者」の5種類に分かれています(図1)。

図1 WordPressのユーザーロール

それぞれのユーザーは、自分専用の管理画面を持つことができ、それぞれの権限においてプロフィールの変更、記事の投稿、寄稿記事の査読や公開、システムの運用管理などが可能です。

第16回 ブログサイトを作る(メール配信)

投稿日:2017.12.15 | カテゴリー: 記事

前回は、オープンソースのブログソフト「WordPress」をインストールしてブログサイトを構築しました。このWordPressでは、メールを使って各種情報を通知します。そこで使い始める前に、Ubuntu ServerにSMTP(Simple Mail Transfer Protocol)サーバーをインストールして、米Google社のフリーメールサービス「Gmail」経由で通知メッセージを配信する環境を構築します(図1)。

図1 メール配信機能を追加する

第15回 ブログサイトを作る(WordPress)

投稿日:2017.12.8 | カテゴリー: 記事

今回は、今まで紹介したWebサーバーソフト「Apache HTTP Server」(以下、Apache)とデータベース管理システム(DBMS)「MariaDB」、フリーのブログソフト「WordPress」を組み合わせてブログサイトを構築します(図1)。

図1 WordPressでブログサイトを構築する

WordPressは人気が高い、フリーのブログソフトです。プログラミング言語の「PHP」で開発されています。サードパーティー製など、さまざまなプラグイン(アドオンソフト)が提供されていて、機能拡張が簡単にできます。実は、シェルスクリプトマガジンのサイトもWordPressを使っています。ここでは2017年11月21日に公開されたバージョン4.9ではなく旧版を利用していますが、バージョン4.9でも手順は同じです。

第14回 データベースを作る(権限)

投稿日:2017.12.1 | カテゴリー: 記事

前回は、データベース管理システム(DBMS)「MariaDB」のデータ操作方法を紹介しました。今回はユーザーを登録し、そのユーザーに対してデータベースやテーブルの各種操作権限を設定します。
MariaDBの初期状態では、管理者となる「root」しか登録されていません。このrootユーザーならMariaDBのすべての操作が可能ですが、rootだけでMariaDBを運用するのはセキュリティ上問題です。
MariaDBには、Ubuntu ServerなどのOSに関係ない専用のユーザーを複数登録できます。このユーザーごとに、データベースやテーブルへの各種操作に対する許可や禁止を設定できます(図1)。

図1 データベースやテーブルに対してユーザーごとに各種操作権限を設定できる

シェルスクリプトマガジンvol.51 Web掲載記事まとめ

投稿日:2017.11.24 | カテゴリー: 記事

 

シェルスクリプトマガジンvol.51のWeb掲載部分まとめです。
アンケートページはこちら!
06 特集 シェルスクリプトではじめるRaspberry Pi電子工作入門/麻生二郎  コード掲載
20 法林浩之のFIGHTING TALKS/法林浩之
22 TechLION再録「セキュリティエンジニアっておいしいの?」/ゲスト:辻伸弘、根岸征史、piyokango MC:法林浩之、馮富久
27 姐のBENTO
28 コボラーによるコボラーのためのユニケージ入門 COBOLからの移行/野村祐三
34 中小企業診断士が解説する、超実践的な会話術! 円滑コミュニケーションが世界を救う! /濱口誠一
36 香川大学SLPからお届け! マイコンボードArduinoで鉄道模型を動かしてみる/太田圭祐   コード掲載
40 人間とコンピュータの可能性/大岩元
42 アジャイル開発 Let’ Practice! スプリントビュー/熊野憲辰
46 中小企業手作りIT化奮戦記 TCP/IP通信の仕組み・ルーティング/菅雄一
54 バーティカルバーの極意 ハノイの塔をシェルスクリプトで解く/飯尾淳 コード掲載
58 ライブラリ/桑原滝弥・イケヤシロウ
60 機械学習のココロ ベイズモデリング入門/石井一夫
65 スズラボ通信 Raspberry Pi 3で湿温度計サーバを作ってみた/すずきひろのぶ コード掲載
70 ITエンジニアのためのマーケティング入門 デジタルマーケティング その3/水間丈博
74 それプロのエバンジェリストから愛をこめて/山本美穂
77 漢のUNIX テストフレームワークkyua その3/後藤大地  コード掲載
86 ユニケージ開発手法コードレビュー/鮎瀬伊矩磨  コード掲載
92 40歳から始める、オレとRubyプログラミング/しょっさん  コード掲載
100 Techパズル/gori.sh
102 IT業界の悪しき慣習/シェル魔人

シェルスクリプトマガジンvol.51は以下リンク先でご購入できます。

第13回 データベースを作る(データの操作)

投稿日:2017.11.24 | カテゴリー: 記事

前回は、データベース管理システム(DBMS)「MariaDB」内にデータベースとテーブルを作成しました。今回は問い合わせ言語「SQL」を使って、テーブル内にデータを挿入し、検索、削除、更新をするデータ操作方法を紹介します(図1)。前回作成した「personal」データベースと「roster」テーブルを引き続き利用します。

図1 データベースの操作

第12回 データベースを作る(テーブル作成)

投稿日:2017.11.17 | カテゴリー: 記事

前回、Ubuntu Serverにデータベース管理システム(DBMS)「MariaDB」をインストールしました。今回は問い合わせ言語「SQL」などを使って、MariaDB内にデータベースやテーブルを作成する方法を紹介します。

データベースとテーブル

最初に「データベース」という器を用意します。その中に表形式でデータを格納する「テーブル」を作成します(図1)。これで、MariaDB内にデータを管理できる環境が整います。

図1 データベースとテーブル

データベースは目的やシステムごとに用意します。一つのMariaDB内に複数のデータベースを作成できます。テーブルは、Microsoft Excelで作った表のように管理するデータ単位で用意します。データベース内には複数のテーブルを配置できて、それらを関連付けることができます。
それでは、データベースとテーブルを作りましょう。例として、一つのテーブルで氏名、フリナガ、年齢のデータを管理する個人情報データベースを構築します。

第11回 データベースを作る(MariaDB)

投稿日:2017.11.10 | カテゴリー: 記事

コンピュータでデータを管理する仕組みとして「データベース」があります。サーバー内にデータベースを構築すれば、大量のデータを蓄積してその中から必要なデータだけを検索して容易に取り出すことができます(図1)。

図1 データを蓄積・管理できる「データベース」

今回は、このデータベースを管理するソフトウエア「データベース管理システム」(DataBase Management System、DBMS)をUbuntu Serverに導入します。

vol.50 掲載「中小企業手作りIT化奮戦記」訂正情報

投稿日:2017.11.7 | カテゴリー: 記事

本誌40ページの以下の写真に関して「10Base5規格のLAN」として紹介しましたが、正しくは「10Base2規格のLAN」でした。

この場にて訂正させていただくとともに、読者の皆様には謹んでお詫びいたします。

 

シェルスクリプトマガジン編集部

 

第10回 インターネットに公開する

投稿日:2017.11.2 | カテゴリー: 記事

Linuxで構築できるサーバーの多くは、インターネットに公開することを前提としています。ただ、通常の企業ではシステム管理者が社内のネットワークを管理していてセキュリティなどの理由から簡単にサーバーを公開させてくれません。自宅でもセキュリティは重要ですが、それさえ注意すればブロードバンドルーターの設定を変更して比較的簡単にサーバーをインターネットに公開できます。
そこで、今回は自宅のLAN環境でサーバーをインターネットに公開する方法を紹介します。

2種類のインターネット公開方法

自宅内に設置したサーバーをインターネットに公開する場合、外部からブロードバンドルーター(以下、ルーター)経由でサーバーにアクセスできるように設定します。その設定は、2種類存在します。「DMZ」と「ポートフォワーディング」を利用する方法です。

DMZとは

DMZは「DeMilitarized Zone」(非武装地帯)の略で、ルーターで守られていない領域です。通常インターネットからのアクセスは、ルーター内側のネットワーク機器への応答でない限り、ルーターの入り口で遮断されます。そのため、サーバーに届けることはできません。
DMZにサーバーを配置すると、それらのアクセスはすべてサーバーに届けられます(図1)。このようにしてサーバーをインターネットに公開します。

図1 DMZによるサーバー公開

なお、さまざまなアクセスがサーバーにそのまま届くので、サーバー自身でセキュリティ対策をしっかりとしておかないといけません。サーバーの運用管理としてはとても勉強になりますが、セキュリティ対策に詳しくないと危険です。最低限のセキュリティ対策だけ施してすぐにサーバーを公開したい場合は次のポートフォワーディングを利用するのがよいでしょう。

ポートフォワーディングとは

ポートフォワーディングは、インターネット側の特定ポートを、ルーター内側のネットワーク機器のポート(任意)に割り当てる機能です。そのポートへアクセスされた場合、ルーターがそれをサーバーに転送します(図2)。サーバーソフトごとに利用するポートが決まっていますので、公開前にあらかじめポート番号を調べておきます。

図2 ポートフォワーディングによるサーバー公開(80番ポートのみ)

ポートフォワーディングでは、サーバー自体はルーターが守りますから、セキュリティ対策はアクセスを許可しているサーバーソフトに対してだけで構いません。

第9回 Webサーバーを作る(アプリを動かす)

投稿日:2017.10.27 | カテゴリー: 記事

前回は、WebサーバーソフトのApache HTTP Server(以下、Apache)をインストールし、動作に重要なファイルやディレクトリーの役割を説明しました。今回は、簡単なWebアプリケーションを作成して、Apache上で動かしてみます。

Webアプリケーションについて

インターネットで動いているほとんどのWebサイトでは、動的にページを生成するためのWebアプリケーションが動作しています。このWebアプリケーションはさまざまな言語で作成できます。また、動かす方法もたくさん用意されています。
古くからある、Webアプリケーションを動かす仕組みとして「CGI」(Common Gateway Interface)があります。CGIなら、特別な仕組みを必要とせずにApacheでWebアプリケーションを動作できます(図1)。

図1 CGIプログラムならApacheだけでWebアプリが動く

ちなみに、CGIを利用するプログラムを「CGIプログラム」と呼んでいます。インターネット上ではPerlで記述したCGIプログラムをよく見かけますが、標準入出力や環境変数などを利用できるプログラミング言語ならどのようなものでも構いません。本連載では、シェルスクリプトでCGIプログラムを記述します。

会社の価値を生むのは、外注先ではなくて会社自身! 「システム内製化シンポジウム」 レポート

投稿日:2017.10.20 | カテゴリー: 記事

システム内製化を推進・検討している企業を対象にした「システム内製化シンポジウム」が、2017年10月18日にユニバーサル・シェル・プログラミング研究所主催で開催された。

システム内製化シンポジウムの講演風景

デジタル化時代を迎えた現在、ITシステムに求められるものは時代のニーズに俊敏に応え、ビジネスPDCAを回せるシステムである。この要請に応えられるITシステム開発のキーとなる「内製化」について、トレンド研究や事例を通して共に考えていくシンポジウムとなった。

 

最初の講演は、元日経コンピュータ編集長であり現日経BP総合研究所・主席研究員の谷島宣之氏による「なぜ今システム内製か ~損得と実現性をとことん考える~」。

IT関係者に広く読まれてきた連載「動かないコンピュータ」を長年担当し、動かないコンピュータ撲滅のための10カ条をまとめるなど、ITシステム開発に造詣の深い谷島氏は、システム内製の「得」として、

・企業優位につながり、状況に応じて業務とシステムを改善し続けられる高い価値

・業務を知っている人の参画による低コスト

・自分の業務が自分で改善できる楽しさ

を挙げた。

第8回 Webサーバーを作る(Apache)

投稿日:2017.10.20 | カテゴリー: 記事

今回はインターネットの定番といえるWebサーバーを構築します。Linuxで動作するWebサーバーソフトはいくつかあります。最もシェアが大きく多機能な「Apache HTTP Server」、低リソースでも高速に動作する「nginx」(エンジンエックス)、HTTP/2のプロトコルに標準対応した「H2O」などです。ここでは、これらの中からApache HTTP Server(以下、Apache)を扱います(図1

図1 Apache HTTP ServerによるWebサーバー

第7回 ファイルサーバーを作る(Samba)

投稿日:2017.10.13 | カテゴリー: 記事

今回からいくつかのサーバーを構築していきます。まずは、最も身近なファイルサーバーです。ファイルサーバーを構築するソフトとしては「Samba」があります(図1)。

図1 Sambaによるファイルサーバー

このSambaは、Windowsのファイルサーバーと互換性があり、NTドメインやActive Directoryにも対応しています。手早く使いたいなら、ワークグループのファイルサーバーとして動かすとよいでしょう。

第6回 リモートアクセス環境の構築(ホストベース認証)

投稿日:2017.10.6 | カテゴリー: 記事

前回はリモートアクセス環境でファイルを簡単にやり取りする方法を説明しました。今回は、リモートアクセス環境の最後として、特定のパソコンのみリモートアクセスを可能にする方法を紹介します。

ホストベース認証を利用する

ネットワークにつながったどのパソコンからでもユーザー名とパスワードだけでサーバーにリモートでアクセスできると便利です。しかし、多くのユーザーが接続されたネットワーク環境の場合はセキュリティ上不安です。特にインターネットからリモートアクセスを許可するには、第三者からの不正侵入などに備えなくてはいけません。
そこで「ホストベース認証」という方法を用います。連載第4回でSSHでは公開鍵暗号の方式を利用していると説明しました。サーバー側の公開鍵をリモートアクセス用パソコンが受け取り、その鍵と、ペアとなる鍵(秘密鍵)を使ってお互い暗号化することで通信できると解説しました。ホストベース認証では、パソコン側に秘密鍵、サーバー側にペアとなる公開鍵を配置します。パソコン側の鍵がサーバー側の公開鍵とペアでない限り、アクセスが許可されません(図1)。

図1 ホストベース認証によるアクセス許可/禁止

第5回 リモートアクセス環境の構築(ファイルの送受信)

投稿日:2017.09.29 | カテゴリー: 記事

前回はUbuntu Serverにリモートからアクセスする環境を構築しました。これでコマンドによる操作が可能になりました。今回は、Ubuntu Serverとリモートアクセス用パソコンとの間でファイルをやり取りする方法を紹介します。

SFTPやSCPでファイルを送受信する

Ubuntu Server内でSSHサーバーが稼働していれば、ファイル転送の「SFTP」(Ssh File Transfer Protocol)や、ファイルコピーの「SCP」(Secure CoPy)でファイルを送受信できます。ただし、リモートアクセス用のパソコン側にSCPやSFTPに対応したクライアントソフトが必要です。
Tera TermもSCPに対応しているため、SCPによるファイルの送受信ができますが使いやすいとはいえません。Windowsの場合、「WinSCP」という無料ソフトがあります。このソフトだと、ファイルやフォルダーをドラック&ドロップするだけで送受信が可能です。
WinSCPの公式サイトにあるダウンロードページの「Installation package」リンクをクリックし、WinSCPのインストーラーファイル(2017年9月28日時点の最新版は「WinSCP-5.9.6-Setup.exe」)を入手して導入してください(図1)。

図1 WinSCPのインストーラー画面

シェルスクリプトマガジンvol.50 Web掲載記事まとめ

投稿日:2017.09.25 | カテゴリー: 記事

 

シェルスクリプトマガジンvol.50のWeb掲載部分まとめです。

04 コボラーによるコボラーのためのユニケージ入門「COBOL入門」/野村祐三
12 TechLION再録「愛されコミュニティの作り方」/ゲスト 小島英揮・牧大輔・星野邦敏・平井則輔 MC 法林浩之・馮富久
18 アジャイル開発 Let’ Practice! 「アジャイル開発の本質」/熊野憲辰
22 スズラボ通信「Raspberry Pi 3 で湿温度計サーバを作ってみた」/すずきひろのぶ コード掲載
28 法林浩之のFIGHTING TALKS/法林浩之
30 機械学習のココロ「Scikit-learnを使ってみよう」/石井一夫
35 中小企業手作りIT化奮戦記「MACアドレス、データリンク層とデフォルトゲートウェイ」/菅雄一 訂正情報
42 人間とコンピュータの可能性/大岩元
44 漢のUNIX「テストフレームワークkyua その2」/後藤大地 コード掲載
52 姐のBENTO
54 中小企業診断士が解説する、超実践的な会話術! 円滑コミュニケーションが世界を救う! /濱口誠一
56 それプロのエバンジェリストから愛をこめて「WSL秋の更新をチェック! 」/山本美穂
60 ITエンジニアのためのマーケッティング入門「デジタルマーケティング その2」/水間丈博
65 ユニケージ開発手法コードレビュー/湯本豊 コード掲載
70 バーティカルバーの極意/飯尾淳 コード掲載
78 詩「たっちすくりーん」/桑原滝弥・イケヤシロウ
80 香川大学SLPからお届け! 「フレームワークPhoenixを触ってみる 後編」/清水赳(香川大SLP) コード掲載
84 40歳から始める、オレとRubyプログラミング #20/しょっさん コード掲載
92 UNIXネイティブの電子工作塾/大野浩之 コード掲載
96 Techパズル/gori.sh
98 幼稚さと甘やかしからの脱却は可能か/シェル魔人

 

シェルスクリプトマガジンvol.50は以下リンク先でご購入できます。

第4回 リモートアクセス環境の構築(SSHとターミナルマルチプレクサー)

投稿日:2017.09.22 | カテゴリー: 記事

前回サーバーの初期設定までを終えたので、今回は普段使っているパソコンからUbuntu Serverを操作するためのリモートアクセス環境を構築します。リモートアクセスの通信には「SSH」(Secure Shell)を利用します。このSSHではクライアントとサーバー間で通信内容を暗号化できます。そのため、盗聴などを防ぐことが可能です(図1)。

図1 SSHによる暗号化通信

SSHサーバーを導入・起動する

本連載でインストールしたUbuntu Serverには、SSHサーバーが導入されていません。Ubuntu Serverをインストールしたパソコンの電源を投入してログインしたら、次のコマンドを実行します。

最初の二つは前回も実行しましたが、英語表示に切り替えるコマンドと、パッケージ情報を更新するコマンドです。最後がSSHサーバーを含む関連パッケージをインストールするコマンドになります。
インストール完了後に、SSHサーバーが自動で起動します。これでリモートからの操作が可能になり、少し使いづらかったUbuntu Serverの(端末)画面を直接操作せずに済みます。

第3回 Ubuntuの導入(アップデートと初期設定)

投稿日:2017.09.15 | カテゴリー: 記事

パソコンの電源を投入して、前回インストールしたUbuntu Serverを起動します。インストール時に設定したユーザー名とパスワードを入力してログインします(図1)。ログインできたら、Ubuntu Serverのアップデートと初期設定を実施しましょう。

図1 ログインした画面

日本語の文字化けを直す

図1のログインした画面を見てみると、「◆」になっている箇所があります。これは日本語が正しく表示されていないのが原因です。次のコマンドを実行して、一時的に英語表示に変更します。一時的にした理由は、次回説明するリモートアクセス環境なら日本語を正しく表示できるからです。

上のコマンドでは「LANG」という言語の環境変数に、デフォルトのロケール(言語や地域を表すもの)である「C」を代入しています。デフォルトのロケールは英語圏なので英語表示に切り替わります。「export」はコマンドで、プロンプトから実行するすべてのコマンドに対してこの環境変数を適用します。

もしインターネットの1秒が1年だったら 第3回(vol.49掲載)

投稿日:2017.09.12 | カテゴリー: 記事

written by hakatashi・Mine02C4

編注:本記事は「SunPro 2016 技術書典」で発表された記事に説明・イラストを追加し、シェルマガvol.49に掲載したものです。
以下リンク先で、オリジナル版の全文が公開されています。
https://sunpro.io/techbookfest/

インターネットが日本中のあらゆる人間に行き渡るようになってから、すでに10年単位の時間が経過しています。今日においてインターネットを支えるネットワーク技術が重要であることは言うまでもありませんが、実際にネットワークでどのタイミングで何が起こり、どれくらいの時間が費やされるのかということを身を持って体感している人は、たとえネットワークに精通している人でも少ないのではないでしょうか? この記事では、1 秒というわずかな時間を1年にまで拡大し、ネットワーク上で何が起こっているかを人間スケールでざっくりと解説していきます。

はじめに

こんにちは。博多市(@hakatashi) です。前回、前々回に引き続き、2016年の技術書典にて発表した「インターネットの1 秒がもし1 年だったら」という記事を、シェルスクリプトマガジン向けに再構成してお届けします。この記事は、インターネット通信においてクライアントがサーバーとコミュニケーションする様子を、1秒を1年というスケールに引き伸ばし、クライアントとサーバーをそれぞれ「クライアントちゃん」と「サーバーちゃん」として、人間スケールに置き換えて順に見ていこうという企画です。
前回まで記事では、長くて面倒なTLSハンドシェイクの手続きを終え、サーバーちゃんとクライアントちゃんの間で暗号通信を行うための準備が完了しました。これで本題となる通信の内容を送るための用意は終了し、いよいよインターネットを通した2人の文通が始まります。クライアントちゃんにとっては100日以上も待ち続けた念願のやり取りです。果たして2人は無事に文通を行い、そして年内に終了することができるのでしょうか。引き続きお楽しみください。

サーバーちゃん   クライアントちゃん

HTTPリクエストとレスポンス

4月19日 午前9時26分 HTTPリクエスト送信

1ヶ月半に渡るやりとりによって、サーバーちゃんとクライアントちゃんとの間で暗号通信を行う準備が整いました。もはや2 人の世界を妨げるものは何もありません。これで少々神経過敏なクライアントちゃんも安心してサーバーちゃんに質問を投げかけることができます。
HTTPは、原則としてクライアントがサーバーに対してリクエストを投げて、サーバーがそれに対する応答を返すという、先程までのTCPハンドシェイクやTLSと比べてシンプルな仕組みで動作します。ネットワークの中でもかなり高レイヤーなプロトコルなので、リクエストの内容やヘッダーはプレーンテキストで表現され、人間が見てそのまま理解しやすいようになっています。
今回はクライアントアプリケーションとしてcURLを用いたので、HTTPバージョン1.1のシンプルなGETリクエストでパケットを送信しました。
クライアントちゃんは勇気を振り絞って、年が明けてからずっと聞きたかったことを質問しました。その内容はヘッダも含めて4行、文字数に直すと99バイトですが、TLSで暗号化することによって130バイト、イーサネットフレーム全体では184バイトと、実際に転送される情報としては倍近くになりました。ハガキは裏面しか使えませんからね。

 

4月28日 午前9時27分 HTTPリクエスト受信

クライアントちゃんから暗号化された秘密の手紙が届きました。サーバーちゃん側から見ても、最初にSYNパケットを受け取ってから2ヶ月という時間が経過しています。その間、Webサーバーとしての諸々の雑務をこなしながら、クライアントちゃんからの手紙を待ち続けていました。HTTPリクエストを受け取ったサーバーは、その内容を元にリクエストの解釈を行い、文脈に応じて何らかの適切な応答を返します。今回の測定ではデフォルトのApacheへのリクエストだったので、GETリクエストはシンプルにファイルの内容を取得するという処理となります。 手紙の内容を見て、さっそくサーバーちゃんは部屋の中(=ファイルシステム) から目的のデータを探し始めました。サーバーちゃんはファイルサーバーなので、探しものはお手のものです。

「アレでもない、コレでもない。どこいったの?!」

第2回 Ubuntuの導入(Ubuntu Serverのインストール)

投稿日:2017.09.8 | カテゴリー: 記事

まず、サーバーに利用するパソコンを用意します。Linuxサーバーを試すだけなら、高機能なものは必要ありません。メモリーが1Gバイト、ハードディスクドライブ(HDD)などの内蔵ストレージが100Gバイト程度搭載していればよいでしょう。なお、内蔵ストレージの中身が消えてしまっても構わないパソコンにしてください。
前回DVD-RやUSBメモリーで作成したインストールメディアを、用意したパソコンに挿入する前に、パソコンのファームウエアでDVD-Rの場合は光学ドライブから、USBメモリーの場合はUSBデバイスから優先的に起動するように設定しておきます。

Ubuntu Serverのインストール

パソコンにインストールメディアを挿入し、ネットワークケーブルを接続してインターネットにつなげられる状態にしたら、パソコンの電源を投入します。パソコンのファームウエアがBIOSとUEFIでは起動画面が異なります。BIOSの場合は、図1の言語選択画面になります。カーソルキーと[Enter]キーを使って「日本語」を選んでください。

図1 言語選択画面(BIOSの場合)

図2の画面で「Ubuntu Serverをインストール」を選択してインストーラーを起動します。

図2 インストーラーを起動する(BIOSの場合)

シェルスクリプトマガジンvol.47 Web掲載記事まとめ

投稿日:2017.09.5 | カテゴリー: 記事

シェルスクリプトマガジンvol.47のWeb掲載部分まとめです。

4 バーティカルバーの極意/飯尾淳 コード掲載
8 もしインターネットの1秒が1年だったら/hakatashi・Mine02C4 本文掲載
16 UNIXネイティブの電子工作塾 e-Badge篇/大野浩之
22 逆に、Tukubaiコマンドをシェルスクリプトで実装してみる/今泉光之 本文掲載
28 中小企業診断士が解説する、超実践的な会話術! 円滑コミュニケーションが世界を救う!/濱口誠一
30 中小企業手作りIT化奮戦記/菅雄一
36 アジャイル開発 Let’s Practice!/熊野憲辰
40 法林浩之のFIGHTING TALKS/法林浩之
42 それプロのエバンジェリストから愛をこめて/山本美穂
46 縁の木、育てよう/白羽玲子
50 スズラボ通信/すずきひろのぶ
53 姐のBENTO
54 ITエンジニアのためのマーケティング入門/水間丈博
57 lookup ~見上げる~/桑原滝弥
52 人間とコンピュータの可能性/大岩元
60 技術者哲学 ピリカのつくりかた 本文掲載
66 ユニケージ開発手法コードレビュー/岡田健 コード掲載
74 香川大学SLPからお届け!/石井怜央(香川大学SLP) コード掲載
78 漢のUNIX/後藤大地 コード掲載
92 40歳から始める、オレとRubyプログラミング/しょっさん コード掲載
100 Tech数独
102 ソースとコード/シェル魔人

シェルスクリプトマガジンvol.47は以下リンク先でご購入できます。

シェルスクリプトマガジンvol.48 Web掲載記事まとめ

投稿日:2017.09.5 | カテゴリー: 記事

シェルスクリプトマガジンvol.48のWeb掲載部分まとめです。

4 スズラボ通信/すずきひろのぶ
8 法林浩之のFIGHTING TALKS/法林浩之
10 UNIXネイティブの電子工作塾 e-Badge篇/大野浩之 コード掲載
17 ITエンジニアのためのマーケティング入門/水間丈博 本文掲載
20 逆に、Tukubaiコマンドをシェルスクリプトで実装してみる/今泉光之 本文掲載
28 アジャイル開発 Let’s Practice!/熊野憲辰
32 ユニケージ開発手法コードレビュー/新美勇一 コード掲載
42 姐のBENTO
44 それプロのエバンジェリストから愛をこめて/山本美穂
48 中小企業診断士が解説する、超実践的な会話術! 円滑コミュニケーションが世界を救う!/濱口誠一
50 漢のUNIX/後藤大地 コード掲載
58 香川大学SLPからお届け!/石井怜央(香川大学SLP)
62 40歳から始める、オレとRubyプログラミング/しょっさん コード掲載
72 TechLION再録「エンジニアの生存戦略」
78 国際化と標準化/桑原滝弥・イケヤシロウ
80 もしインターネットの1秒が1年だったら/hakatashi・Mine02C4 本文掲載
88 バーティカルバーの極意/飯尾淳 コード掲載
94 中小企業手作りIT化奮戦記/菅雄一
100 人間とコンピュータの可能性/大岩元
102 Tech数独/gori.sh
104 ユニケージの目指すところ/シェル魔人

シェルスクリプトマガジンvol.48は以下リンク先でご購入できます。

第1回 Ubuntuの導入(インストールメディアの作成)

投稿日:2017.09.1 | カテゴリー: 記事

Linuxには「ディストリビューション」と呼ばれる複数の種類があります。ディストリビューションによって操作方法が少し異なりますので、Linuxサーバーを構築する第一歩としてディストリビューションの選定から始めましょう。

サーバーに最適なディストリビューション

LinuxサーバーのOSとして利用するディストリビューションの場合、以下の四つを満足するものがよいでしょう。

これらのことから、Linuxでは人気が高いディストリビューション「Ubuntu」のサーバー版「Ubuntu Server」を選択します。このUbuntuは、インターネット上に存在するサーバーのOSとして多くのユーザーに利用されています。そのため、情報が豊富です。また、多くのアプリケーションが「パッケージ」と呼ばれる形式で用意されています。このパッケージなら導入も簡単です。
Ubuntuには、最初のリリースから5年間のサポートが付いた「LTS」(Long Term Support)というバージョンがあります。ここでいうサポートとは、主に不具合対処やセキュリティ対策用の更新ソフトウエアの提供のことです。2017年9月1日時点において、LTSの付いた最新Ubuntuのサーバー版は「Ubuntu Server 16.04.3 LTS」です。最初のリリースは2016年4月21日なので、2021年4月まで安心して使えます。
Ubuntu Serverは、サーバーOSとして動作させるために最低限必要なソフトだけを導入した状態でインストールできます。そのため、不要なアプリが導入されたり、必要のないサービスが動作していたりすることはほとんどありません。

特集 無いものは作れTukubai 流コマンド自作文化(後半・本誌vol.7掲載)

投稿日:2017.08.22 | カテゴリー: 記事

 

各地でOpen usp Tukubai を紹介すると、多くの人にとても興味を引かれることがある。

それは、Unix コマンドを自ら作っていくと言う習慣だ。
コマンドを作るということは、他言語で考えればifやfor等の予約語を追加するようなものかもしれない。そう考えると確かに興味深い。
だが、Unix の世界ではそれが当初のやり方だった。
コマンドを自作する文化。
この素晴らしさを、改めて伝えたい。

written by USPマガジン編集部

本記事は、USP MAGAZINE vol.7(2013年冬号)掲載記事のWEB再録記事(後半部分)です。

記事前半はこちら!

本記事掲載のUSP MAGAZINE vol.7は以下リンク先でご購入できます。

 

第三章 道具を夢見たコマンドたち

USP 研究所は、前時代を含めてこれまで2000 個にも及ぶコマンドを作ってきたという。多い日は1 日で10 個作ったこともあったのだとか。しかしそれら大半のコマンドが淘汰されていったことは、今のOpen usp Tukubai のコマンドの数を見れば容易に想像がつく。
「道具とは何たるか」などと偉そうなことを語っておきながらこれは一体どういうことか!とツッコミを入れたくなるところではあるが、そういう歴史があるからこそ道具の本質を見極め、そしてTukubai の思想を確立させられたのだろう。
そこでこの章では、そんな道具を夢見て生み出されながら淘汰されていったコマンドや、これから道具として活躍する可能性を秘めたコマンドなど、いくつか紹介していこう。

その1.yuniq コマンド

uniq コマンドの横方向版「横uniq」ということで登場したコマンドだ。その名のとおり、横方向にuniq がなされる。

スペース区切りで、同じ綴りの文字列が連続してるとそれを一つに集約する。ただし、連続せずに出現したものに関しては集約されない。このあたりの仕様はuniq コマンドと同様に作られている。

ソースコード

以下に全体を掲載する。勿論cc でコンパイル可能だ。

 

道具になれなかった理由とは

yuniq 無しに横方向uniq をせよ、と言われたらどうやる だろうか。Tukubai コマンドを使えば次のように書ける。

つまり、単語を一旦縦に並べてソートして、横に並べ直せばいいというわけだ。
横方向uniq の使用頻度がそう高くなかったために、ユニケージエンジニア達もこのコマンドを覚える機会がなかったうえ、たまに横方向uniq が必要になった時もtarr → uniq → yarr の組み合わせで事足りてしまったためにいつしか忘れ去られてしまった。

特集 無いものは作れTukubai 流コマンド自作文化(前半・本誌vol.7掲載)

投稿日:2017.08.8 | カテゴリー: 記事

各地でOpen usp Tukubai を紹介すると、多くの人にとても興味を引かれることがある。

それは、Unix コマンドを自ら作っていくと言う習慣だ。
コマンドを作るということは、他言語で考えればifやfor等の予約語を追加するようなものかもしれない。そう考えると確かに興味深い。
だが、Unix の世界ではそれが当初のやり方だった。
コマンドを自作する文化。
この素晴らしさを、改めて伝えたい。

written by USPマガジン編集部

本記事は、USP MAGAZINE vol.7(2013年冬号)掲載記事のWEB再録記事(前半部分)です。

後半部分はこちら

本記事掲載のUSP MAGAZINE vol.7は以下リンク先でご購入できます。

第一章 共通部品でない、道具を作るということ

Open usp Tukubai は、何のために生まれたか

2012 年の今年、USP 研究所はOpen usp Tukubai と名付けたUnix シェル向け追加コマンドセット(通称Tukubai コマンド)をリリースした。

名称の一部となっている“Tukubai” は、このコマンドセットに付けた単なる名前ではない。オープンソースやオープンプラットフォームの「ソース」や「プラットフォーム」などと同様に、ある一つの概念を指し示す用語なのだ。この「ある一つの概念」を端的に言い表す用語というものが存在しなかったため、USP 研究所がコマンドセットのリリースに合わせて新たに定義したものなのである。
本誌もこれまでこの語を度々用いてきたが、ここで改めてTukubai の意味を記すことにする。

Tukubai とは

Unix 哲学や“Software Tools”(B.W.Kernighan、P.J.Plauger著)等の作法を忠実に受け継ぎ、進化させたシステム構築法。同音である蹲(蹲踞とも記す)という道具が用いられる茶道の精神に通じるものがあることからこの名を付けた。

“Software Tools” の邦訳版「ソフトウェア作法」(共立出版)。30 年以上発行され続けている名書である。

 

つまりTukubai は一種の思想であり、その源流は、Unix を生み出した先人たちの哲学にある。そしてこの哲学を受け継ぎ、進化させ、USP 研究所なりに具現化したものがOpen usp Tukubai なのだ。将来Tukubai という語が一般化し、Tukubai の思想に基づいてある人Xがコマンドセットをリリースするなら、それはOpen XTukubai と呼ぶべき存在になるかもしれない。
従ってTukubai コマンドは、実はその表面的な姿(書式や仕様、種類)が重要なのではない。重要なのは、コマンドセット全体としてどんな役割を果たしているかである。そしてTukubai コマンドが果たすべき役割とは、ソフトウェア開発における「道具」になることである。

「道具とは何か」を理解する

Tukubai が指し示す「道具」は、共通部品とは明確に区別される。では、共通部品ではない道具とは何なのか。まず道具が持ち合わせるべき三つの性質を記す。

一、 単機能であって汎用性がある。
二、 インターフェースが決まっているが、逆にそれさえ守っていれば他には一切の制約がない。
三、 同じものを発明する気を起こさせない。

更に付け加えるなら、「作ってみればあって当たり前の存在」、「何処の誰もが使えるもの」などとも言いたいところだ。
これらの性質を満たしているものは、世の中の様々な分野において、作業を効率的に熟こなすうえで必要不可欠なものに成り得る。勿論、ソフトウェアの世界においても例外ではない。
身近にある道具と呼ばれるものを色々思い浮かべてもらいたい。それらがこの三つの性質を満たしているかどうか考えてみれば、ここで言わんとしている道具がどういうものであるかが見えてくるだろう。

身の回りにある例

例えば西洋料理を食す際に使うナイフやフォーク、スプーンの類。これは道具であろう。西洋料理を食す時は誰もが使うし、同種のものを発明する気も起らない。インターフェースについて考えてみても、どれも片手で持って使うようにできているし、皆棒状の形で大きさや重さ等も概ね揃えられている。もし違っていたら、揃えるべく、きっと誰かが同じ類のものを発明しているに違いない。
一方で共通部品的な物とは、複数の道具をくっつけてみたり、よくある道具の形をちょっとだけ変形してみたり、といった俗に言うアイデア商品の大部分のものではないだろうか。
それらは特定の作業には驚く程の利便性を発揮するが、汎用性が乏しいために歴史の一部となるほどには普及しない。そして似たようなものが再発明されたりもする。

ソフトウェアにおける例

そして、ソフトウェアにも道具的なものと共通部品的なものがある。ある程度汎用性があり、再利用可能なコードを集めたものとされるライブラリーは、その両方を持ち得る。例えば、Microsoft Visual C++ には通称MFC と呼ばれるクラスライブラリーがある。これはC++ によるWindows プログラミングを容易にするためのものであり、数百個ものクラスが用意されている。しかしそれらを全てを把握して使いこなしている人は恐らく少数だろう。その一方で、C 言語の文字列変数の扱いづらさを補完するCString のように、MFCを利用する人の大多数が利用するクラスもある。このような違いというのも、先に記した三つの性質の有無によるところが大きい。

ユーティリティー、アプリケーション

類似の用語に、ユーティリティー、アプリケーションといったものがあるが、これらもここで言う道具とは違う。ユーティリティーは例えば、バックアップソフトとかテキストエディターといった物を指すが、単機能とは限らないし、インターフェースも様々だし、同様のものが様々作られる。アプリケーションはさらに複合的な機能を有する物を指し、それ単体の使用で大きな目的を達成できる。これらも勿論有用なものだが、単体では目的を達成できない代わりに組み合わせ次第で如何なる目的にも対応できる道具とは方向性の違うものだ。
道具とは何か、ご理解いただけただろうか。これが道具であるかどうかという上記の例は、明確な基準に基づいたものではないため、あまり心地良いものではないかもしれない。
しかし確実に言えることは、三つの性質を満たしていると思える人が多くいるかどうかだ。多くの人が支持するからこそ物は道具になれる。逆に、それは見る立場によって判断が分かれ得るものであるから、特定の地域や時代、或いは特定の分野でのみ道具として認知されるものもある。

Unix における道具とは

既に述べたとおり、Tukubai コマンドは道具としての役割を果たすべく作られたものである。しかしそれ以前に、Unixシェルに用意されている標準コマンドには、先に記した三つの性質を満たす道具的なものが数多くある。
例えばテキストフィルターに分類されるAWK, grep, sed,tr などは道具的であると言えるだろう。一方で、パスワードを設定するpasswd コマンドやテキストエディターである
vi*1 といったコマンドは誰もが使うところであるが、使い方が既に決められていて汎用性は無く、インターフェースが決まっているかという性質に照らし合わせてみても当てはまり難い。これらはむしろユーティリティーと呼ぶべきものであろう。

*1 vi は好みが別れそうだが、何らかのテキストエディターは使うだろう。

このようにUnix のコマンドにおいても、道具的なものとユーティリティー・アプリケーション的なものがある。そして、道具的と呼ぶべきUnix コマンドは、どれも共通した下記の作法を概ね守っている。

◆データのやりとりに標準入出力を使う
◆入出力データをテキストデータとする

道具は、組み合わせて使うことで真価が発揮される。従って、組み合わせて使えるようにすべく、このような作法が生まれたのではないだろうか。Unix において偉大な発明の一つであるパイプ(パイプライン)も、そのような背景から生まれたに違いない。
そしてUnix シェルやシェルスクリプトも上記の作法を守るうえで実に適した仕様になっている。道具たるコマンドを予約語のような感覚で呼び出せ、組み合わせられる。時には“if [” などのように、予約語とコマンドが密接に結び付くこともある。
こういった仕様は、Unix 発明者達の思想の表れであって、「道具をもってして問題を解決するのがUnix シェル」ということを言わんとしているのではないだろうか。

道具に類する用語の整理。ユーティリティー、アプリケーションと呼ばれるものになるに従って、汎用的な用途から専門的な用途へと変化する。ライブラリーは部品であるが、汎用的なものもあれば専門的なものもある。

ITエンジニアのためのマーケティング入門 第25回 (vol.49掲載)

投稿日:2017.08.1 | カテゴリー: 記事

Written by 水間 丈博

本記事掲載のシェルスクリプトマガジンvol.49は以下リンク先でご購入できます。

昔システム会社の役員をやっていたらしい。好奇心旺盛で意外とモノ知り。趣味は音楽(クラシックからJPOPまで!)と囲碁(有段者)。ちょっとした丘の上に住んでいるので「おか爺」と呼ばれている。やや奇怪な老人。

工業大学でITを学び、小さなIT会社に就職したITエンジニアの卵。社長に「マーケティングを学んでおけ」と言われている。近くにある母方の祖父、おか爺の家に時々遊びに行く。趣味はサイクリング。まだ彼女はいない。

タケシの後輩。大学では文学部で日本史を学ぶ。会社では広報部に配属された。

 

第25回 デジタルマーケティング その1

前回までのあらすじ

エンジニアのタケシは、社長からマーケティングを学ぶように言われ、会社の後輩カンナちゃんと一緒に近くに住む祖父「おか爺」の家に通い、マーケティングについていろいろ知識を吸収しています。これまでマーケティングの基本と実践方法を学んできました。今回から「デジタルマーケティング」がテーマです。

さて、今回から「デジタルマーケティング」の話に入っていこうかの。
「デジタルマーケティング」って最近よく聞くけど、今までのマーケティングとどう違うんだろう?
「デジタルマーケティング」とは、要するに「IT技術をマーケティングに取り入れること」じゃよ。
えーっ、それだけ?でも「デジタル」って言うけど、昔からあった電子メールとかもホントはデジタルだよね?
ハッハッハ、その通りじゃ。インターネットは、登場してすぐに広告で使われるようになったんじゃが、これまでは「オンラインマーケティング」とか「WEBマーケティング」と呼ばれていたものが、2013年ごろを境に「デジタルマーケティング」と呼ばれ出したんじゃ。
なぜ今さら「デジタル」って言い始めたのかしら?
それは一つには、スマホに代表されるデジタルデバイスの急激な普及と大いに関係がある。
スマホで、ネットショップでの注文とかクーポンが使えるようになったからかな?
そうじゃな、それは前からも使えたんじゃが、スマホの普及でますます便利になったのが大きい。2008年には世界で1億台以下だったスマホが今年15億台以上も出荷されると予測されておる。

もう一つ、アドテクノロジーの急激な発達がある。
アドテクノロジーって、オンラインで広告が出されることって聞いたことあるわ。
まぁそうなんじゃ、その仕組みも含めた言葉じゃの。これはちょっと前の状況なんじゃが、アドテクノロジーの全体概要図になるの。


Display Advertising Technology Landscape
出典:Jp chaosmap Hiroshi Kondo
http://www.slideshare.net/HiroshiKondo/jp-chaosmap-20142015

ちょっと複雑だけど、よく見ると知ってる会社やよく使うサイトとかもありますね。
中央上の「DSP(Demand Side Platform)」というのがオンライン広告の広告主側のプラットフォーム群(サーバ)、右端の「SSP(Supply Side Platform)」は広告を配信するメディア側のプラットフォーム群、この間にある「RTB(Real Time Bitting)」はこの両者を取り持つオークション事業者の役割で、一番高値を付けた広告主が広告を配信できるという広告入札の仕組みなんじゃ。例えば、消費者がPCやらスマホで画面を開いた瞬間にどのような広告を掲示するか、オークションで決めておるんじゃな。この取引が成立して広告が視聴者に表示されて完結するまで、その間50ms(1/20秒)といわれておる。
へーっ!なんか難しい言葉が出てきたけど、ボクがポータルサイトを開いたときに出てくる広告を出す仕組みはこうなってるのか?
DSPの下にある「DMP(Data Management Platform)」というのが、広告を見る人のネットアクセス履歴や嗜好性などのデータベースで、「デモグラ」という世代や性別ごとの一般的な特徴も含まれておる。これを拠り所に、見ている人への最適な広告を選択するサポートをしているんじゃな。
だから、ボクがPS4を買った直後にゲームの広告が増えたりするのかー。
私がネットを見ていると「若い女性向け」の広告が目につくけど、これもDMPが活躍しているためなんですね。
そうじゃ。現在のオンライン広告はDisplay広告といって、そのほとんどが視聴者個人の特性に応じて出し分けられておるんじゃよ。これを「パーソナライズ」といったりするんじゃ。
ネットを見た履歴からその人の興味や関心が把握されてるってことなんですね。ちょっとコワイ気もするけど……
ここのところ静止画よりは動画が多くなったが、この仕組みは2008年のリーマンショックの後に、ウォール街の金融業界にいた大勢の優秀なエンジニアが広告業界に移って金融取引の仕組みを広告に応用した成果といわれておる。
そうなんだー。
この、いかにもITテクノロジーを駆使した画期的な仕組みが日本にも導入されて、あっという間に広まったんじゃ。今はスマホ向けだけで年間3000億円の市場規模があるとされているんじゃが、広告主と消費者(視聴者)の間に様々なプレイヤーがおって、それぞれITを駆使して役割分担しつつデータを複雑にやり取りしておるんじゃ。
ホント様々な事業者が見えないところで仕組みを支えてるんですね。
だからこの図は別名「混沌マップ(ChaosMap)」とも呼ばれておる。プレイヤーの参入や脱落が多いんで日々変わることから名付けられたんじゃよ。
新しい業界の特徴なのかもねー。
さて話が長くなったが、アドテクノロジーをはじめとして、ここ3?4年の間にIT技術を駆使してマーケティングに活用しようとする動きが大変活発になったんで「デジタルマーケティング」と言われるようになったんじゃ。
ナルホドね。
といったわけなので、「デジタルマーケティング」には適切な定義もないし、国によって認識も違う。米国では今でも「オンラインマーケティング」と呼ばれているし、イタリアでは「WEBマーケティング」と同義で使われているらしい。しかし最近「デジタルビジネス」とかも言われ始めているから流行り言葉ではあるな。
「デジタル」という本来の意味を超えて使われ始めた感じですねー。
デジタルマーケティングが発展してきた背景をここで整理しておこう。要するにマーケティングにIT技術が用いられ出したのには社会的背景の変化が大きく影響しているんじゃ。

①スマホ・タブレットなどのデジタルメディアの普及:
消費者がこれらの道具を常時持ち歩くようになったことで、メディアや企業と直接に繋がるようになった
②新たな顧客への情報到達手段:
企業にとっては従来型到達手段(4大メディア広告、PCへのメール、PC向けディスプレイ広告、動画広告)に加えて、新たにスマホ、タブレット向けの到達手段が増えた
③即時性の進化:
今までは、“TVを見ている時”(CM、通販番組など)やPCの前に座っている時だけ、情報伝達や消費者アクションが実行されたが、それが消費者側の意思でいつでも好きな時に可能になった
④消費者が発信する情報のマーケティング活用:
ネットの視聴履歴や購買履歴、ソーシャルネットワーク、GPS情報などが発信されることによって、個客の興味や嗜好に関するデータをマーケティングに活用できるようになった

「リアルタイム」というのがキーポイントになったよね。スマホで簡単に商品を比較して、その時一番安いお店で注文できちゃうから、お店の競争も大変になったんだろうな。
そうね、TVと違ってどこでも好きな時にネットショッピングできるようになったし、SNSで発信することもできるから、以前よりも格段に双方向性が増したという点も大きいんじゃないかしら。
そうじゃな。まとめると、消費者つまりお客さんを取り巻く「ネット社会・到達手段(消費者の武器)・リアルタイム性・消費者発信情報」の環境が変わったことに対する、サービス提供者側のマーケティング実行方法の変化が「デジタルマーケティング」を生み出したともいえるんじゃな。
そうか、お客さんの環境変化が必然的にデジタルマーケティングに向かわせているのかー。
現在は「リアル(店舗)」や4大広告メディアだけでは競合が多い世の中で戦っていけないからの。
最近はテレビを見ない人も増えたって言いますよねー。
そうじゃ、既に20代以下ではTVよりネット視聴時間の方が多くなっておる。
そう言えば、私も最近TVはドラマしか見てないかも。

シェルスクリプトマガジンvol.49 Web掲載記事まとめ

投稿日:2017.07.25 | カテゴリー: 記事

シェルスクリプトマガジンvol.49のWeb掲載部分まとめです。

現在、コード掲載記事のコード部分をshell-mag.comに掲載しています。

4 機械学習のココロ/石井一夫
8 縁の木、育てよう/白羽玲子 ゲスト:門脇明日香
12 Doorkeeper Paul McMahonに訊く、技術者哲学/シェルスクリプトマガジン編集部
18 中小企業手作りIT化奮戦記/菅雄一
24 人間とコンピュータの可能性/大岩元
26 香川大学SLPからお届け!/清水赳(香川大学SLP) コード掲載
30 ユニケージ開発手法コードレビュー/大内智明 コード掲載
40 アジャイル開発 Let’s Practice!/熊野憲辰
44 漢のUNIX/後藤大地 コード掲載
52 もしインターネットの1秒が1年だったら/hakatashi・Mine02C4
60 バーティカルバーの極意/飯尾淳 コード掲載
68 スズラボ通信/すずきひろのぶ コード掲載
72 法林浩之のFIGHTING TALKS/法林浩之
74 ITエンジニアのためのマーケティング入門/水間丈博 本文掲載
78 妹のBENTO
80 それプロのエバンジェリストから愛をこめて/山本美穂
84 中小企業診断士が解説する、超実践的な会話術!円滑コミュニケーションが世界を救う!/濱口誠一
86 40歳から始める、オレとRubyプログラミング/しょっさん コード掲載
94 回帰テスト~regression testing~/桑原滝弥・イケヤシロウ
96 Tech数独/gori.sh
98 ユニケージの目指すところ/シェル魔人

 

シェルスクリプトマガジンvol.49は以下リンク先でご購入できます。

もしインターネットの1秒が1年だったら 第2回(vol.48掲載)

投稿日:2017.07.18 | カテゴリー: 記事

written by hakatashi・Mine02C4

編注:本記事は「SunPro 2016 技術書典」で発表された記事に説明・イラストを追加し、シェルマガvol.48に掲載したものです。
以下リンク先で、オリジナル版の全文が公開されています。
https://sunpro.io/techbookfest/

インターネットが日本中のあらゆる人間に行き渡るようになってから、すでに10年単位の時間が経過しています。今日においてインターネットを支えるネットワーク技術が重要であることは言うまでもありませんが、実際にネットワークでどのタイミングで何が起こり、どれくらいの時間が費やされるのかということを身を持って体感している人は、たとえネットワークに精通している人でも少ないのではないでしょうか? この記事では、1 秒というわずかな時間を1年にまで拡大し、ネットワーク上で何が起こっているかを人間スケールでざっくりと解説していきます。

はじめに

こんにちは。博多市(@hakatashi) です。前回に引き続き、2016年の技術書典にSunProとして発表した「インターネットの1秒がもし1年だったら」という記事を、シェルスクリプトマガジン向けに再構成してお届けします。この記事は、インターネット通信においてクライアントがサーバーとコミュニケーションする様子を、1秒を1年にというスケールに引き伸ばし、クライアントとサーバーをそれぞれ「クライアントちゃん」と「サーバーちゃん」として、人間スケールに置き換えて順に見ていこうという企画です。
前回の記事では、クライアントがサーバーと通信するための前段階として、サーバーの住所を調べる、つまりIPアドレスを問い合わせる名前解決までの処理を解説しました。3回のDNSリクエストの末にサーバーちゃんの住所をゲットしたクライアントちゃんは、いよいよサーバーちゃんとの直接の通信を行っていきます。果たしてサーバーちゃんとクライアントちゃんの文通の行方はどうなるのでしょうか。引き続きお楽しみください。

サーバーちゃん   クライアントちゃん

 

TCP接続ハンドシェイク

2月19日 午後3時27分 TCPハンドシェイク+SYNパケット送信

各地のネームサーバーの協力を得て、無事サーバーちゃんの住所を入手したクライアントちゃんですが、お淑やかなクライアントちゃんはいきなり本題の手紙を送りつけるような真似はしません。まずはサーバーちゃんにご挨拶をします。
 TCP上の通信では、データ伝送を行う前にコネクションの確立という処理を行う必要があります。これは、相手のサーバーが通信可能な状態であることを保証したり、以降のデータが正しい順序で到着することを保証するためのシーケンス番号を互いに交換したりするためです。
 シーケンス番号とは、現在のパケットが送信しているデータが、全体のデータのうちのどの部分に該当するのかを示す値であり、ハンドシェイクで最初にランダムな値にセットされ、以降データを送信するごとに増加していく値です。TCPは双方向通信なので、このシーケンス番号はサーバーとクライアントで別々の値を保持しています。
 クライアントちゃんはランダムに生成したシーケンス番号を端に添えて、サーバーちゃんに文通してよいかを問う内容の手紙を作りました。色よい返事が返ってくることを期待して、再びポストに投函しました。手紙はいよいよ石狩に向かいます。
 ところで、サーバーちゃんの住所が判明してから最初にサーバーちゃんにコンタクトをとるまで9日もかかっています。
きっとバのつくイベントで忙しかったのでしょう。妬ましい。

*1 実際の理由はおそらくローカルホストのDNSサーバーからアプリケーション(curl)にDNS情報を受け渡す際にオーバーヘッドが発生するためです。

2月27日  午後6時30分 TCPハンドシェイク+SYNパケット受信

北海道――新千歳空港から車で50分の石狩の大地に、目的のデータセンターは存在します。冬の北海道の空気は冷たく厳しく、この時期の気温は昼間でも0度を上回ることはありません。この冷涼な外気がサーバールームから効率的に排熱するのです。
すぐ脇を通る道は国道337号線です。地元ではかつて天売島に住んでいた鳥の名前からとって「オロロンライン」と呼ばれるこの道は、眼前に手稲山を望むゆったりとした広い道路です。小樽からこの道を進んで左手側、空港のターミナルを髣髴とさせる白い横長な建物が石狩データセンターです。
この場所でサーバーちゃんは他のサーバーと肩を並べて*2、静かに443番ポートを開けて待ち続けています。  今回キャプチャしたパケットの中で最も数が多かったのはARPのパケットでした。512台*3近い数のサーバーがARPで常に囁きあい、互いの居場所を確認しあっている状態といえるかもしれません。
そんな退屈な生活の中で、サーバーちゃんはクライアントちゃんからの手紙を受け取りました。
クライアントちゃんが手紙を投函してから8日目のことです。伝送には22ミリ秒かかりました。
冒頭では東京と石狩の物理的な片道時間は5.9ミリ秒と述べましたが、当然これは理想的な通信のことであり、実際には無線通信やルーティングなどにおけるオーバーヘッドによってそれ以上の時間がかかります。
受け取った手紙は一般的なTCPハンドシェイクでした。手紙にはシーケンス番号が添えられています。クライアントちゃんからの久しぶりの手紙に喜んだサーバーちゃんは、喜んで通信を受け入れました。

*2 もちろんVPSなので物理的なサーバーマシンとして存在しているわけではありませんが。
*3 今回使用したサーバーはサブネットマスク23ビットという中途半端な値のネットワークに繋がっていました。今回も、クライアントちゃんとサーバーちゃんの通信の始まりです。

 

2月27日  午後8時11分 TCPハンドシェイクSYN+ACKパケット送信

サーバーはTCPによる通信を受け入れた証として、クライアントからのSYNパケットに対する応答を返します。サーバーはクライアントから受け取ったシーケンス番号を認識し、これに1を加えた値を返答パケットに記して送ります。シーケンス番号は送信するデータの先頭バイトを表すので、本来はデータを送信しない段階では加算しないのですが、ハンドシェイクにおいてはパケットを正しく受け取った印として特別に1を加算します。

同時に、サーバー側でもシーケンス番号を生成して返信用のパケットに記します。これでサーバーとクライアントの間で一対のランダムなシーケンス番号が初期化されます。

サーバーちゃんはクライアントちゃんに向けて通信可能な旨を記した手紙を書きました。クライアントちゃんからの手紙と同じく、隅っこにシーケンス番号を記しておきます。このパケットはSYNとACKのフラグが立てられているため、SYN+ACKパケットなどと呼ばれます。

3月9日  午前3時43分 TCPハンドシェイクSYN+ACKパケット受信

今度は石狩から東京へと手紙が運ばれます。配達にはふたたび10日近い時間を要しました。
クライアントちゃんにとってはサーバーちゃんからの初めての手紙です。だいぶ非常識な時間に配達された手紙ですが、クライアントちゃんは飛び起きて、サーバーちゃんからの手紙をじっくり読み、さっそく返事に取りかかりました。
クライアントは、サーバーからのハンドシェイクを受け取ると、先ほど説明したシーケンス番号の他に、Window Size  ValueやMaximum Segment SizeなどのTCP通信に必要な値を確認し、記録しておきます。

3月 9日 午前4時5分 TCPハンドシェイクSYN+ACKパケット送信

サーバーちゃんからの手紙で、サーバーちゃんが手紙を出せる状態であることを確認したクライアントちゃんは、その手紙に問題がないことを伝えるため、ハンドシェイクを完了させる手紙を送ります。
クライアントもサーバーと同じく、シーケンス番号を認識した証として、サーバーから送られたシーケンス番号に1を加えて返答します。このパケットにより両者の間でそれぞれのシーケンス番号が共有され、お互いにデータを送り合う事ができるようになります。

3月16日  午後3時21分 TCPハンドシェイクSYN+ACKパケット受信

ふたたび手紙は東京から石狩へ。サーバーちゃんはクライアントちゃんからちゃんと返事が届いたことにほっと安心しました。これで、いつでも通信を受け入れることができます。
このように、TCPのハンドシェイクでは通信路を3 回通る必要があるため、3ウェイ・ハンドシェイクとも呼ばれます。

TSLハンドシェイク

 

TLSハンドシェイクが終わって、クライアントちゃんとサーバーちゃんは無事通信が開始できるようになりました。クライアントちゃんはさっそく本題の質問を投げかけようと思ったのですが、ここでふと思ったことがあります。
クライアントちゃんとサーバーちゃんは、ハガキを使って互いにやり取りをしています。ハガキには特に何も細工をしていないので、書いている内容は周りの人には丸見えです。クライアントちゃんがポストに投函しに行くまではいいとしても、そこから先、ルーターから先のことに関しては何も保証できません。実はポストの中に盗撮カメラが仕掛けてあるかもしれませんし、郵便局員がハガキの内容をチラ見するかもしれませんし、サーバーちゃんの上司に内容を検閲されているかもしれません。
これは困ります。花も恥じらう乙女であるところのクライアントちゃんは、サーバーちゃん以外の誰にも手紙の内容を知られたくありません。クライアントちゃんはサーバーちゃんとのやり取りを暗号化するため、TLS(Transport Layer Security)を使用することにしました。
TLSは、TCPのようなコネクションの上で暗号技術を使って通信の機密性や完全性を確保するための仕組みです。公開鍵暗号を用いて安全に交換した鍵を使って共通鍵暗号を行い、暗号化されたコネクションをアプリケーションに提供します。
この記事は暗号理論の説明はいたしません。ちょこちょこ出てくる用語の説明はほとんどしていません。なので、やり取りする情報のさらなる意味を知りたい方は、ぜひ他の専門書を参照してください。

 

ぼくらがシェルで生きる理由 (Web版独自記事)

投稿日:2017.07.11 | カテゴリー: 記事

written by 松浦智之(シェルスクリプトマガジン編集部)

シェルスクリプトは何に使う言語なのか?残念ながら、作業の自動化やサーバー管理に使うものだと捉えている方が多い。私が、「いや、システム開発のためにこそ使うものだ」といっても、冗談あるいは曲芸の類にしか見てもらえないことが多い現状は、シェルスクリプトマガジン編集者としては悔しいものだ。
大手雑誌でシェルスクリプトが特集されることはあっても、データ管理術を手解きする特集で使われている道具はMySQL……。そこでもやはりシェルスクリプトが利用されるまでに、世の中のイメージを変えたい、というのが私の夢である。

そこで今回の記事では、私が実装したシェルスクリプト製「郵便番号から住所を補完するボタン」を紹介する。これを通じて、シェルスクリプトの実力、そして我々シェルプログラマーの愉しみを見てもらいたい。
なお、実際にシェルスクリプトによる業務システム開発を行っているUSP研究所では有償コマンド(usp Tukubai)を用いていて、「それがあるから実用的なものが作れるんでしょ?」と思うかもしれないが、そんなことはない。誰でも入手できるごくありふれたUNIXコマンドだけでここまでできる!ということが、今回の記事を通じてわかってもらえればと思う。

実は「速い!」「色々できる!」シェルスクリプト

世間では未だに「シェルスクリプトなんて遅くて使えない」という偏見が根強い。いやいや「ちょっと待ったー!」と言いたい。

シェルスクリプトはグルー言語。シェルスクリプト自身でこなそうとせずに、コマンドを呼んでそれらに任せればいいのだ。コマンドを呼べば、シェルスクリプトはそのコマンドの終了を待つだけになる。UNIX標準コマンドたちはC言語で書かれているため、この仕組みを理解した上で組まれたシェルスクリプトなら、殆どCプログラムの速さで動くことになる。

また、データが100万行、1000万行におよんでも、データの持たせ方の工夫次第で処理速度は改善できる。例えば後述の郵便番号の例なら、前3桁ごとにファイル分割して持てばいいのだ。頭の3桁の検索は、OSがファイルシステムのハッシュテーブルを使って高速に行ってくれるので、わざわざ自力で高速検索アルゴリズムを組む必要は無い。

シェルスクリプトには他の言語みたいに豊富なライブラリーもないからたいしたことができない、という意見も根強いが、これも工夫次第で想像以上にいろんなことができる。

例えば今回紹介するデモでは、CSVやJSON、XMLテキストの解析をさせている。たしかにそんなことをしてくれるコマンドは無かったが、シェルスクリプトとsedやAWKやgrep、trなど、どれも見慣れた構文やコマンドでできている。 難しいことも、簡単なことの組み合わせで実現できるのがシェルスクリプトの強み であり(マイクガンカーズのUNIX哲学定理6,7あたり) 、シェルプログラミングの愉しみはこのような「工夫」にこそあるはずだ。

「じゃあ、Webアクセスは?」

……それもデモで示すとおり、curlやwgetコマンドを使えばOK。

「メールは?」

……それは/usr/sbin/sendmailを使えば大丈夫、受信ならfetchmailコマンドとか。

「でも、本格的なRDB操作はさすがに無理でしょ」

……いやいや、 POSIX標準コマンドでjoinってのがあって これやsort、AWKなど使えば、テキストファイルでも相当本格的な操作が可能。

このようにUNIX標準コマンドには、様々な用途に利用できる必要十分なコマンドがそろっている。あとは我々シェルプログラマーがこれらをどう使うか、だ。

ネット通販によくあるアレくらい、/bin/shでだって作れるもん!

というわけで、シェルスクリプトの実力を示すべく、ネット通販の注文画面なんかでよく見かける 「郵便番号から住所を補完するボタン」 をシェルスクリプトで実装してみた。

もっと見る

  • カテゴリー 記事 のアーカイブを表示しています。

  • -->