オープンソースカンファレンス2022
Fukuoka セミナープログラム
2022/11/26 14:00 〜 14:45

業務ですぐ役立つ！
Linuxのテキスト処理の実例
インターノウス株式会社（LPI-Japanアカデミック認定校）

竹本 季史© LPI-Japan / EDUCO all rights reserved.

会社紹介、自己紹介◼会社紹介：インターノウス株式会社⚫人材紹介サービス、人材派遣/SESサービス、IT未経験者の教育及び就職支援
サービス、法人研修サービス⚫未経験からインフラエンジニアやプログラマーになりたい方へ、無料で研修と就職支援サービスを行っています。
https://engineercollege.jp/lp/◼自己紹介：竹本 季史(たけもと ときふみ)⚫IT業界で約10年間勤務後、インターノウス株式会社エンジニアカレッジ講師。
⚫これまで約800人を未経験者からエンジニアに養成。Linuxサーバー(メール、OpenSSH、シェルスクリプト、DB、監視、演習)を担当。
⚫LinuCレベル1バージョン10.0の差分教材で「仮想マシン・コンテナの概念と利用」を執筆。
© LPI-Japan all rights reserved.

2

LinuCレベル１／レベル２ Version10.0とは⚫ LinuCとはクラウド時代の即戦力エンジニアであることを証明するLinux技術者認定✓現場で「今」求められている新しい技術要素に対応• オンプレミス／仮想化・コンテナを問わず様々な環境下でのサーバー構築• 他社とのコラボレーションの前提となるオープンソースへの理解• システムの多様化に対応できるアーキテクチャへの知見✓全面的に見直した「今」身につけておくべき技術範囲を網羅
今となっては使わない技術やコマンドの削除、アップデート、新領域の取り込み✓Linuxの範疇だけにとどまらない領域までカバー
セキュリティや監視など、ITエンジニアであれば必須の領域もカバー© LPI-Japan all rights reserved.

3

クラウドを活用できるITエンジニアに必須の技術がまとまっている
AWSなどのパブリッククラウドを活用するための技術

AWSなどのパブリッククラウドを活用するための技術間が欠けている状態

仮想マシン／コンテナ技術、クラウドセキュリティ、アーキテクチャ、ほかオンプレミスのサーバーサイドLinux技術

オンプレミスのサーバーサイドLinux技術【今まで／その他】

Version10.0© LPI-Japan all rights reserved.

4

本セミナーについて⚫ 伝えたいこと：テキスト処理をイメージでとらえる⚫ 目次⚫ ①テキスト処理とは？

⚫ ②テキストストリームとは何か？
⚫ ③リダイレクトとパイプの使い分け⚫ ④テキスト処理の実践⚫ 対象者：LinuCレベル1を受験予定の方、Linuxを業務で使用する方© LPI-Japan all rights reserved.

5

①テキスト処理とは？
⚫ テキスト処理とは大きく以下２つのこと⚫ コマンドの実行結果を画面以外にもファイルに出力したり、パイプを通じて他のコマンドに渡す⚫ パイプを使うことで複数のコマンド実行が必要なものを1行でまとめて実行できる⇒後ほど詳しく説明© LPI-Japan all rights reserved.

6

①テキスト処理とは？
⚫ LinuC試験範囲から見たテキスト処理の出題範囲⚫ 1.03.2 フィルタを使ったテキストストリームの処理⚫ 1.03.3 ストリーム、パイプ、リダイレクトの使用⚫ 1.03.4 正規表現を使用したテキストファイルの検索⇒以上を広い意味で「テキストストリームの処理」として扱う© LPI-Japan all rights reserved.

7

②テキストストリームとは何か？
⚫ テキストストリームとは？？

⚫ テキストストリームとはデータの入出力の流れのこと© LPI-Japan all rights reserved.

8

②テキストストリームとは何か？
⚫ 理解が難しいものは、図でイメージしてみる⚫ 文字（テキスト）データが水に流れる(ストリーム)の様子をイメージ© LPI-Japan all rights reserved.

9

②テキストストリームとは何か？
⚫ コマンドの実行結果は通常画面に出力される（標準出力）

cat test.txt
出力コマンド

testtest

画面© LPI-Japan all rights reserved.

10

②テキストストリームとは何か？
⚫ リダイレクト：画面に流す代わりにファイルへ出力

cat test.txt

>
出力

コマンド

testtest

file1
出力

リダイレ
クト＞

testtest

ファイル© LPI-Japan all rights reserved.

11

②テキストストリームとは何か？
⚫ パイプ：画面に流す代わりに次のコマンドへ入力

cat test.txt

|
出力

コマンドA

testtest

wc -l
入力

パイプ|testtest

コマンドB© LPI-Japan all rights reserved.

12

②テキストストリームとは何か？
⚫ tee：パイプと一緒に使用して、画面とファイル両方に出力（先が二股のパイプをイメージ）

cat test.txt

| tee

file2

出力

出力testtest

画面

testtest

コマンド

パイプ|teeファイル© LPI-Japan all rights reserved.

13

③リダイレクトとパイプの使い分け⚫ ファイルtest.txtから文字列testを含む行を数えたい場合⚫ リダイレクトを使う場合の実行例⚫ grep test test.txt > result.txt⚫ wc -l result.txt⚫ 出力ファイルresult.txtをその後も使用する場合はリダイレクト© LPI-Japan all rights reserved.

14

③リダイレクトとパイプの使い分け⚫ パイプを使う場合の実行例⚫ grep test test.txt | wc -l⚫ 出力ファイルが不要な場合はパイプが便利© LPI-Japan all rights reserved.

15

④テキスト処理の実践⚫ テキスト処理の実践例
1. 一度に複数のユーザーを作成する
2. ログインに失敗したユーザー名を調べる
3. サーバーの設定ファイルをviを使わずに編集する© LPI-Japan all rights reserved.

16

一度に複数のユーザーを作成する⚫ useraddコマンドは引数を1つしかもたない⇒一度に一人のユーザーしか作成できない⚫ 一度に複数のユーザーを作成したい場合は、パイプとxargsコマンドを組み合わせる⚫ xargs：コマンドAの出力をパイプを通じてコマンドBの引数に使用⚫ echo "userA userB userC" | xargs -n 1 useradd
コマンドA

コマンドB
© LPI-Japan all rights reserved.

17

ログインに失敗したユーザー名を調べる⚫ lastb：ログインに失敗したユーザーを表示する⚫ cut：区切り文字で区切られた列を抜き出す⚫ sort：昇順に並べ替える⚫ uniq：重複行を削除する(先にsortを実行)⚫ lastb -w | cut -f1 -d " " | sort | uniq
1列目 スペース
区切り© LPI-Japan all rights reserved.

18

ログインに失敗したユーザー名を調べる（応用例）⚫ lastb -w | cut -f1 -d " " | sort | uniq > result.txt
ログインに失敗したユニークユーザー名を調べてファイル出力する⚫ lastb -w | cut -f1 -d " " | sort | uniq | wc -l
ログインに失敗したユニークユーザー数を調べる⚫ lastb -w | cut -f1 -d " " | sort | uniq | grep '^mine'
ログインに失敗したユニークユーザーの中で先頭がmineであるユーザーが存在するかを調べる© LPI-Japan all rights reserved.

19サーバーの設定ファイルをviを使わずに編集する⚫ 設定ファイルをviで編集すると、思わぬ操作ミスの可能性がある
全角の引用符、全角の空白、コメントの削除、行の削除など⚫ sed（Stream EDitor）：読み込んだテキストをスクリプトに従って編集し、標準出力に書き出すコマンド⚫ sed 's/abc/def/' test2.txt
置換 abcをdefに置換⚫ sedコマンドとパイプ＋teeで画面で確認しながらファイル編集する© LPI-Japan all rights reserved.

20

サーバーの設定ファイルをviを使わずに編集する
centosplusリポジトリを使用可能にする(CentOS7.9で実行)# cd /etc/yum.repos.d/# ls -l# cat CentOS-Base.repo# mv CentOS-Base.repo CentOS-Base.repo.org（ファイル名を変更しておく）# sed 's/enabled=0/enabled=1/' CentOS-Base.repo.org | tee CentOS-Base.repo（sedで置換した結果をパイプでteeへ渡して、画面に出力＋ファイル出力する）# ls -l# diff -U 0 CentOS-Base.repo.org CentOS-Base.repo（sedで編集前と編集後の差分を確認）© LPI-Japan all rights reserved.

21

まとめ⚫ テキストストリームは、文字データが水の流れに乗って、パイプを通って加工される様子をイメージする⚫ 最終的にどのような形のテキストが欲しいのかを決める⚫ 欲しいテキストの形が決まったら、コマンド同士をパイプで接続して加工する（試行錯誤が必要）© LPI-Japan all rights reserved.

22