Linux学習についてのまとめ 02 GNU/Linux

こんにちは。22年度入社の中島です。

現在、私はLinuCの101試験に合格するためにLinuxの学習を進めています。特にGNUに関する内容を理解することが重要であると感じ、これらの知識をブログとしてまとめました。この記事を通じて、GNU/Linuxの基本的な歴史やリチャード・ストールマンの貢献、さらにはLinuxのテキストフィルタコマンドについて共有します。

1. GNUの歴史について

GNUは「GNU’s Not Unix!」の略で、Unix互換のオペレーティングシステムを開発するために1983年にリチャード・ストールマンによって開始されたプロジェクトです。当時、ほとんどのソフトウェアがプロプライエタリ(専用)であり、ソースコードが公開されていませんでした。ストールマンは、ソフトウェアの自由な使用、改変、再配布を可能にすることを目指してGNUプロジェクトを立ち上げました。

GNUプロジェクトの最も重要な成果の一つは、GPL(GNU General Public License)です。GPLは、フリーソフトウェアに特化したライセンスであり、ユーザーにソフトウェアの自由を保障します。このライセンスは、ソフトウェアを自由に使用し、改変し、再配布することを許可しますが、改変や再配布されたソフトウェアも同様にGPLの下で公開される必要があります。この仕組みを「コピーレフト」と呼びます。コピーレフトは、ソフトウェアの自由を保護するための強力な手段であり、オープンソースソフトウェアの普及に大きく寄与しました。

コピーレフトの理念は、ソフトウェアが自由であるべきという考え方に基づいており、ユーザーがソフトウェアを制限なく利用できるようにすることを目的としています。このため、GPLはフリーソフトウェア運動の基盤となり、オープンソースコミュニティにも大きな影響を与えました。

GNUプロジェクトは、Unixと同様の機能を持つ多くのソフトウェアを開発しました。これらのソフトウェアには、コンパイラ(GCC)、テキストエディタ(Emacs)、シェル(Bash)などが含まれます。これらのツールは、現在も多くのユーザーに利用され、Linuxを含むさまざまなオペレーティングシステムで使用されています。

2. リチャード・ストールマンについて

リチャード・ストールマンは、フリーソフトウェア運動の先駆者であり、GNUプロジェクトの創始者です。1985年にフリーソフトウェア財団を設立し、ソフトウェアの自由を擁護する活動を続けています。彼の主張は、ソフトウェアがユーザーに自由を与えるべきであり、そのためにはソースコードが自由にアクセスできる状態でなければならないというものです。ストールマンの理念は、多くのフリーソフトウェアのライセンス(例:GPL)に反映されており、今日のオープンソースコミュニティに大きな影響を与えています。

3. GNUから生まれたLinux

GNUプロジェクトは多くのツールを開発しましたが、オペレーティングシステムの核となるカーネルは開発されていませんでした。1991年、リーナス・トーバルズによってLinuxカーネルが発表されました。GNUツールとLinuxカーネルを組み合わせることで、現在の多くのGNU/Linuxシステムが形成されました。このように、LinuxはGNUプロジェクトと密接に関連していますが、GNUそのものとは別の存在です。

4. GNU/Linuxのテキストフィルタコマンド

GNUシステムの基本コンポーネントには、GCC(コンパイラ)、glibc(ライブラリ)、Coreutils(コマンド)、GDB(GNUデバッガ)、Bashシェルなどが含まれています。
Coreutils(GNU Core Utilities)の中でも特徴的なのが、テキストデータを加工するコマンド群になります。シェル上でこれらのコマンドを組み合わせることで強力なデータ処理が可能です。

これらのテキストフィルタコマンドは、データ処理や分析において非常に役立つツールであり、試験勉強の一環として理解を深めることで、実際の業務でも役に立つと思いました。
業務で使うシーンを想定しながら、今回はそのコマンドと例文の一部をまとめようと思います。

代表的なテキストフィルタコマンド
コマンド説明
grepテキスト検索ツールで、指定したパターンに一致する行を抽出します。
例: grep -i ’error’ application.log
application.logファイル内で ‘error’ (大文字小文字区別なし)に一致する行を検索して表示します。
sedストリームエディタで、テキストの置換や削除、挿入を行います。
例:sed ‘s/localhost/127.0.0.1/g’ /etc/hosts
ホスト名をIPアドレスに置き換えます。設定ファイルを一括して修正する際に役立ちます。
awkテキスト処理言語で、テキストのパターンマッチングと処理が可能です。
例:awk ‘$3 == “root” {print $1}’ /etc/passwd
/etc/passwdファイルからrootユーザーのユーザー名を抽出します。
sortテキストデータをソート(並べ替え)します。
例: sort -k3,3 -t, data.csv
CSVファイルの3列目(例: 売上データ)を基準にしてソートします。
uniq重複する行を削除します(通常はsortと組み合わせて使用されます)。
例: sort access.log | uniq -c
アクセスログの重複するエントリを集計し、一意のリクエスト数を数えることができます。
cutテキストの特定のフィールドを抽出します。
例: cut -d ‘:’ -f 1 /etc/passwd
/etc/passwdファイルからユーザー名のみを抽出します。
tr文字の変換や削除を行います。
例: echo ‘abc123’ | tr ‘a-z’ ‘A-Z’
出力結果の小文字を大文字に変換します。

これらのコマンドを使いこなすことで、テキストデータの効率的な処理と分析が可能になります。

おわりに

今回の記事では、LinuC101試験に向けての学習の一環として、GNU/Linuxの歴史やリチャード・ストールマンの貢献、そしてテキストフィルタコマンドについてまとめました。これらの知識を深めることで、Linuxシステムの理解がさらに深まったと感じています。特に、シェルスクリプトの作成や自動化されたデータ処理、システム管理業務において、これらのコマンドの組み合わせが強力なツールとなることを理解しました。また、実際の業務でのデータ処理や、エラーの迅速な検出・修正など、より効率的なシステム運用に役立つ点も大いに学ぶことができました。

今回はここまで
最後までご覧いただきありがとうございました!

ITパスポートの試験を受けました!紙屋04

お疲れ様です!
’23年度入社の紙屋です!
12月に入り本当に寒くなってきました。
こんな季節は温泉にゆっくりつかって、コタツで丸くなりたいですね!

さて、この業種について9か月が経とうとしています。
未経験で入社し、外部研修や日々の学習や課題をこなしてきました。今もOJTとして少しずつ実際の案件に携わらせてもらっています。
分からないことの方が多く、教えていただいてもなかなか理解ができないことの方が多い毎日です。
なので、基礎知識の学習という意味でもITパスポート試験を受けることにしました。

ITパスポート試験とは何か?

ITを利活用するすべての社会人・これから社会人となる学生が備えておくべき、ITに関する基礎的な知識が証明できる国家試験

https://www3.jitec.ipa.go.jp/JitesCbt/html/about/about.html

とのことです。
確かに、前職は全く違う分野でしたが、ITなくして業務は成り立ちませんでした。
基礎的知識を学ぶためにもちょうどよい機会かなと思い、チャレンジしました!

内容は、新しい技術(AI、IoT など)や手法に関する知識、経営全般の知識、IT(セキュリティ、ネットワークなど)の知識、プロジェクトマネジメントの知識など幅広い分野にわたります。

実際の試験は100問(/120分間)あり、ストラテジ系、マネジメント系、テクノロジ系と3分野に分かれ、合格基準点は3分野それぞれ300/1000点以上正答し、合計で600/1000点以上あれば良いとのこと。

勉強期間は約2か月間。
最初はテキストの内容をまとめ、各章末問題を解き、試験前は過去問をひたすら解きました。
広く知識を求められ、テキストを通るだけでもかなりのボリュームがありました。
適宜まとめた内容を上長へレビューいただきましたが、広い分野に対しても必ずコメントをいただき、アドバイスもいただいて、その知識量に逆に怖くなりました(笑)

どれも知らない知識ばかりで、特にストラテジ系とテクノロジ系が難しかったです。
3,4文字のアルファベットの略語は暗号にしか思えず、関数の条件式を問うような問題ではまず問題文の理解に苦しみました…
過去問で類似問題を数回解くことでなんとか少しずつ覚えていきました。

過去問を解き始めたころは5,6割の正答率でした。過去問を数回解くことで正答率は7,8割まで安定してきたので、「よし!いける!」と自信満々で試験を受けに行きました。
今までも国家試験を受けてきたので特に緊張はしませんでした。
受験者の中には管理職ぐらいの年代の方から小学生までいて驚きました!

試験の方は、苦手分野のストラテジ系でさらに新しい単語が出題され、とても焦りました…(汗)
利益やコストの計算や関数の条件式を問う問題など、計算問題が過去問より多く、それでも焦りました…(汗)
残り時間20分ぐらいでやっと一通り解答できましたが、見直ししたい問題が多すぎて「詰んだー」と焦りました…(汗)

試験後はすぐに解答され、ギリギリ基準点は満たすことができて一安心。
覚えも悪くなってきているなと痛感した1日でした。
今回の勉強の熱が冷めないうちに、勉強を続けてさらなる挑戦に挑みたいと思います。
また何か動きがあれば決意表明をしたいと思います!
では、また次回!!

LinuCの試験について

こんにちは。22年度入社の中島です。

この間、Linux資格のLinuCを受験しました。
今回私が受けたのは、LinuCレベル1(101試験)になります。
この試験は、101試験と102試験があり、認定されるためには2試験を(片方を合格していたら5年以内に)合格する必要があります。

今回は、LinucCレベル1 101試験を受けた感想や試験の内容を簡単に書いていこうと思います。

Linux技術者認定「LinuC(リナック)」とは
クラウドやDX時代のITエンジニアに求められるシステム構築から運用管理に必要なスキルを証明できる技術者認定です。

・受験動機
この試験を受ける理由は、仕事に対する自信につなげられるようにするためと、これからの業務の役に立つと思い受験しました。

・予約と受験方法、前日までの準備について
今回はオンラインでの受験だったので、テストセンターでいかなくてよかったのですが、
試験を受けるにあたっての、本人確認書類の用意、受験スペース準備や規則などが大変でした。

・試験対策と試験概要
対策として、テキストでの学習や過去問を解くなどをしていました。一日に学習する範囲を決めてやったり、章まとめの問題集を何回も解きなおしていました。

LinuCレベル1(101試験)は試験時間は85分で出題数は60問でした。
以下は試験囲です。

第1章: Linuxのインストールと仮想マシン・コンテナの利用
第2章: ファイル・ディレクトリの操作と管理
第3章: GNUとUnixのコマンド
第4章: リポジトリとパッケージ管理
第5章: ハードウェア、ディスク、パーティション、ファイルシステム

・勉強してみた感想
Linuxのことを何もわからない状態からのスタートだったので、なんとなく理解するのにも時間がかかりました。
特にコマンドとそのオプションを覚えきれず、とても苦労しました。

・結果と感想
結果は残念ながら不合格でした。
1~5章の全範囲まんべんなく出ていたので、全体的に復習が必要だと思いました。
受験した感想といたしましては、どのような形で問題が出されるのかわからず、緊張して問題とくペース配分がうまくいかず、時間が掛かりました。
それによって見直しを行う時間がありませんでした。
また、第3章、第4章のコマンドを忘れていたり、コマンドは合っているのにオプションを間違えてるなどのミスが目立ちました。

今回の試験で自分の努力不足をとても感じました。次回受験する際には過去問やりこみ、解くスピードを上げて見直しをする時間を作りたいと思います。模擬試験で正解8割を安定して出せるようになってから再度、受験したいと思います。

現在は、ping-tというサイトを使って過去問を解いています。
このサイトは、試験範囲・問題数・出題形式まで自由に決めることができて便利です。
間違ってもわかりやすい解説があるので、おすすめです。(アカウント登録が必要です。)

https://mondai.ping-t.com/users/sign_in

いかがでしたでしょうか。

久しぶりのブログでしたが、よいネタを見つけたら投稿していきたと思います。

最後までご覧いただきありがとうございました!

PHPUnit_その3(データプロバイダ)

福岡拠点の永嵜です。

前回に引き続きPHPUnitの機能を紹介します。

今回はデータプロバイダ機能を紹介します。
データプロバイダ機能とは、テストメソッドに任意の引数を渡せる機能です。
データプロバイダを使用すると同じテストメソッドで様々なテストができる利点があります。

データプロバイダ機能


例題を示しながら説明します。
前回使用したテストケースにデータプロバイダを追加します。

■テストケース

traiangleProviderメソッドがデータプロバイダになります。
[4, 2, 4]、 [4, 2, 10※1]がテストメソッドに渡す引数になります。
[横、縦、想定値]のデータをテストメソッドに渡します。
配列一つが1テスト用のデータになります。

※1  今回データプロバイダの説明のために想定値に誤った値を設定してテスト失敗を発生させています。

データプロバイダのデータにラベルを付けることができます。
(‘ok pattern’/’ng pattern’)
ラベルを付けることによってテスト失敗時にどのデータで失敗しているかを確認しやすくなります。
データプロバイダからデータを受け取るにはテストメソッドに@dataProviderアノテーションを付けます。

■実行

‘ng pattern’のデータでテスト失敗となりました。

また、実行時にfilterオプションを使用すると実行したいテストデータだけテストすることができます。

■データ指定(ok pattern)で実行

 

最後に

前回、今回、PHPUnitの概要を説明しましたが、PHPUnitには
コマンドオプション、アノテーション、アサーションなど他にも便利な機能があるので詳細を知りたい方は下記をチェックしてみてください。

PHPUnit マニュアル

https://phpunit.readthedocs.io/ja/latest/index.html

PHPUnit_その2(実行手順)

福岡拠点の永嵜です。

前回に引き続き、PHPUnitを紹介します。
今回はPHPUnitの実行手順を紹介します。実行環境は前回 Composer を使用してインストールした環境で行います。

PHPUnitの実行


PHPUnitでは理解するべき3つの要素があります。

①テスト対象クラス
ユニットテストを行うテスト対象のクラスです。

②テストケースクラス
テストケースは原則としてテスト対象クラスに対して1つ作成します。テストケース は、PHPUnit\Framework\TestCase※1 を継承して作成します。一般的にテストするクラス名の末尾に「Test」という文字列を付与したものをテストケース名とします(ファイル名はテストケースクラス名.php)。

    • テストケースクラス名 : 「[テストするクラス名]Test」
    • ファイル名 : テストケースクラス名.php

※1:vendorフォルダー配下にあります。

③テストメソッド
テストケース内に記述するメソッドです。実際にテストをする単位となります。
テストメソッドの名称は「test」で始まる文字列にする必要があります。
※@testアノテーションを使用する場合は、「test」でなくてもよいです。

では実際にテストケースを作成し、実行してみましょう。

まず、開発用ディレクトリにテスト対象クラスを格納する src ディレクトリとテストケースクラスを格納する test ディレクトリを作成します。

■テスト対象作成

テスト対象となるクラスを用意します。

引き数で横、高さを受け取り三角形の面積を返すクラスです。

■テストケースとテストメソッド作成

テスト対象が完成したらテストケースとテストメソッドを作成します。
test ディレクトリに AreaCalcTest.php ファイルを作成し、次のように記入します。

このテストケースでは、$width(横)と $height(高さ)で計算した面積が正しいかをテストしています。テストメソッドではアサーションと呼ばれる結果判定メソッドを使用します。今回の例ではassertEqualsがアサーションメソッドになります。
ちなみにassertEqualsは2 つの引数が等しくない場合エラーとするメソッドです。
$expectedに想定値、$actualに実測値を設定しassertEqualsで判定しています。

図1

図1のように開発用ディレクトリ(Sample)内にテスト対象(AreaCalc)とテストケース(AreaCalcTest)を配置しています。

■実行

phpunit コマンドを実行してユニットテストを行います。
phpunitはPHPUnitをインストールしたディレクトリのvendor\binフォルダ配下にシンボリックリンクがあります。

全てのテストケースの実行、特定のテストケースだけ実行どちらもできます。
今回はテストケースが1つですが①の方法で実行します。

①テストケースを全て実行する場合
・vendor\bin\phpunit  テストケース保存フォルダ
⇒例:vendor\bin\phpunit  test\

②テストケースを指定して実行する場合
・vendor\bin\phpunit  テストケース指定
⇒例:vendor\bin\phpunit  test\AreaCalcTest

※上記方法以外にもコマンドオプションで制御する方法があります。詳しくは PHPUnitマニュアルをご確認ください。

コマンドプロンプトを開き次のように入力します。
test ディレクトリ内のファイルをテストケースとしてテストが実行されます。

■テスト結果

テストが実行されるとテスト結果ステータス(4行目)が表示されます。
AreaCalcは正しい結果を返す状態なので( $width = 4、 $height = 2を引数で与えると4が返ってくる)テスト成功.(ドット)となっています。

他のステータス表示は以下のようになります。

ステータス 意味
.(ドット) テスト成功
F テスト失敗
E テストが危険としてマーク
S テストをスキップした
I テストが未実装

以上がPHPUnitによる一連のテスト手順となります。

次回は今回実行したサンプルプログラムに手を加え、
データプロバイダ機能について説明したいと思います。

PHPUnit_その1(インストール)

福岡拠点の永嵜です。

PHPUnitを使用する機会があったのでPHPUnitの使い方を紹介します。

本ブログでは下記の流れで説明していきます。
・PHPUnitの概要
・PHPUnit のインストール
・PHPUnitの実行

PHPUnitの概要


■PHPUnit
PHPで実装されたプログラムのユニットテスト(単体テスト)※1を自動化するためのテスティングフレームワークです。

※1:ユニットテスト
ユニットテストとはクラスや関数などプログラムを構成する小さな単位(ユニット)で個々の動作を確認するためのテストです。

PHPUnit のインストール


■PHPUnit のインストール
PHPUnitを使用するためにPHPUnitのインストールを行います。
インストールは下記方法があります。
・公式サイトから直接ダウンロードする。
・Composer を利用する

今回はComposerを利用した手順でインストールを行います。

①開発用ディレクトリに composer.json を設置し、次のように記入します。

②コマンドプロンプトで下記コマンドを実施します。

③インストール結果を確認します。
・開発用ディレクトリにcomposer.lock ファイルと vendor ディレクトリが生成されます。
・下記コマンドを開発用ディレクトリにで実行しPHPUnitが実行できることを確認します。
実行ができたらインストールしたPHPUnitのバージョンが表示されます。

以上がPHPUnitのインストール手順となります。

次回はPHPUnitを実行する手順について説明したいと思います。

Jmeterログを攻略する

福岡拠点の野田です。
最近ひさしぶりにJmeterを使って負荷テストをしました。

Jmeterから実行結果をログに出力することができますが、XMLかCSVかjmeter.propertiesで選ぶことができます。

XMLは、ページアクセスに起因する問合せをすべて記録することができます。一方、CSVにおいては、画像、CSS、JSなど付随情報は、明示してシナリオを作成していない限りログに記録することができません。そのため、出力はXMLで出力していたほうが広くログを残すことができます。ここは迷わずXMLを指定してください。

付随する関連ログをすべて残すためには、以下のsubresultsをtrueで指定します。

実行コマンドの例を提示します。

HTMLのみのログに残すためには以下のような処理で加工することができます。

※個別ログのtestResult+必要なXMLタグで含まれる範囲で絞り込み。その後、css/jpg/png/js/svg/gif/icoを排除。

ここまでは、XML最高!なのですが、実は大きな欠点があります。実は、XMLログからはHTMLレポートが作成できません。

そんなときどうしたらいいか。

XMLからCSVを作ればオッケーです。そこで使えるのが、XSLT。

jmeter_xml2csv.xslt

XMLからCSVを変換するコマンド例は以下。

XMLからCSVに変換したファイルを使って、以下のコマンドで晴れてレポートを作れるようになりました。

他にもコマンドラインからプラグインを呼び出すことも簡単にできます。
元のログから集計結果を得たいときは以下。

※利用にあたって、標準プラグインと呼ばれるjarライブラリをlib/ext 以下に配置する必要があります。
https://jmeter-plugins.org/downloads/old/

こちらもご参考まで。

apache-loggenでダミーアクセスログの生成

はじめまして、福岡拠点の宮里です。
今後ともよろしくお願いします。

先日、アパッチのアクセスログをアーカイブして一定期間保存する作業を行いました。その一定期間を「過ぎた」「過ぎていない」の判定のテストに、アクセスログのダミーデータをたくさん使いたかったので、Rubyで動く「apache-loggen」というツールを使用してダミーデータを作成しました。

また使用する機会がありそうなので、備忘録として記事に残します。

前準備

local環境
CentOS6.9

まずは、Apache-2.4からインストールしていきました。

makeに必要なライブラリをyumでインストール。

次に、aprをwgetしたソースからインストール。

apr-utilもソースからインストール。

ライブラリが揃ったので、httpdをwgetしてソースからインストール。

ここからいろいろ設定を記述して、無事アパッチの起動が確認できました。
ブラウザからlocalhostにアクセスすると、しっかりアクセスログが作成されています。

apache-loggenでダミーアクセスログの生成

「apache-loggen」を動かすのにRubyが必要なので、
またyumで必要なライブラリを追加インストールします。

Rubyの最新安定版をwgetしてソースからインストール。

Rubyのインストールが完了したので、pathを通して、やっとgem install。

「apache-loggen」が/usr/local/bin/へインストールされます。
必要であればpathを通します。

これで準備は完了です。

うっかりapache-loggenと叩くと、
apache-loggen
ドキドキしました。
こうならないためにオプションでダミーデータの生成件数と、秒あたりの生成件数、必要であれば件数でローテート(区切り)も指定して、出力先を指定します。

あとは、一万件/1日のダミーログを30日分を生成するスクリプトで、

ダミーデータがたくさん生成されてほくほくです。
ありがとうございました。

[PHP]Seleniumを使ってみよう(2)

福岡拠点の野田です。
前回「Seleniumを使ってみよう(1)」では、Selenium サーバーを立ち上げるところまで実施しました。
https://blog-s.xchange.jp/?p=418

今回はその続きです。
弊社では、PHPを使うことが多いので、その例を紹介します。
PHPがローカル環境にない方は、さくっとインストールしてください(環境変数にパスを通すのも忘れずお願いします)。
http://www.php.net/downloads.php

composerが入っていなかったら、インストールします。
https://getcomposer.org/doc/00-intro.md#installation-windows

任意のフォルダにcomposer.jsonを配置します。

facebook/webdriverは、curl関数を使うため、php_curlのエクステンションを有効にします。ほかにスクリーンショットの編集等でgdライブラリを使う場合がありますので、php_gd2のエクステンションを有効にします。

ちなみに php.ini のある場所は、php -i で表示することができます。

cmd でDOSのターミナルを開いてcomposer.jsonを配置したフォルダでcomposer update を実行してください。必要なライブラリをインストールします。これでSeleniumを使ってテストを実行する準備が整いました。

サンプルコードを以下にアップしています。

https://github.com/nodat/php-selenium-tools

processor.php と scenario.yaml を composer.json のフォルダに配置してください。

以下のようなバッチを作成して実行することで動きます。

まだまだ粗削りですが、scenario.yaml を作りこんでいくことで E2E のテストを実現することができます(適宜、バージョンアップしていきます)。
細かい処理については、ソースコードを解析して見てください。

[PHP]Seleniumを使ってみよう(1)

福岡拠点の野田です。今回は、Seleniumを使った自動テストをやろうということでSeleniumの環境構築まで紹介しようと思います。

SeleniumはJavaで動かすことができます。Javaがインストールされていない環境では、JRE(ランタイム、単体実行向け)もしくはJDK(開発者向け)をインストールする必要があります。

Java SE Runtime Environment 8 Downloads
http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html

各環境にあったファイルをダウンロードしてインストールしてください。

続いてSeleniumサーバーをダウンロードします。

https://www.seleniumhq.org/download/

Seleniumはサーバーとブラウザを操作するWEBドライバーの組み合わせ動きます。

まずは、Selenium Standalone Serverをダウンロードします。ダウンロードしたファイルを任意のフォルダに配置します。

あとは以下のドライバーをダウンロードして、上記と同じフォルダに放り込みます。

The Internet Explorer Driver Server (IEを操作。IEDriverServer.exe)
※SeleniumのサイトよりDL

Mozilla GeckoDriver (Firefox を操作。geckodriver.exe)
https://github.com/mozilla/geckodriver/releases

Google Chrome Driver (Chromeを操作。chromedriver.exe)
https://sites.google.com/a/chromium.org/chromedriver/

起動するには、仮に server.bat として以下のような内容でバッチを作成します。

※上記は、IE + Chrome を指定する例

server.bat をダブルクリックするとSeleniumサーバーを起動することができます。

続き:https://blog-s.xchange.jp/?p=424