Software Design plusシリーズ1日1問、半年以内に習得 シェル・ワンライナー160本ノック
2021年9月27日紙版発売
2021年9月22日電子版発売
上田隆一,山田泰宏,田代勝也,中村壮一,今泉光之,上杉尚史 著
B5変形判/488ページ
定価3,520円(本体3,200円+税10%)
ISBN 978-4-297-12267-6
書籍の概要
この本の概要
シェルのワンライナー(その場かぎりの1行プログラム)は,LinuxやMacのコマンドラインインターフェースを立ち上げたら,すぐにプログラムを書いて即実行できます。ちょっとした作業を手っ取り早く片付けるのに向いています。大量のデータ処理,繰り返し処理ほどその効果は絶大です。本書は,そんなシェル・ワンライナーを身につけるためのトレーニング本です。大量の問題を繰り返し解くことで,実務でワンライナーを活用できるようになることを目指します。 第1部でシェルによるデータ加工の定石を学び,第2部でとっさの閃きと柔軟な発想力を養い,第3部で実務にありそうな問題に取り組むことで応用力を鍛えます。実務でワンライナーを役立てるには,OS(Linux),シェル,スクリプト言語,正規表現,文字コード,画像データ,日付や時間データ,通信プロトコルなどの幅広い知識が必要となります。本書では,まず[練習問題]でそのような事前知識を解説し理解を含め,[問題]で力試しを行うという構成になっています。
こんな方におすすめ
- シェル・ワンライナー(シェル芸)を習得したい人
- Linux、Unixを使いこなしたい人
- システム管理者、サーバ・ネットワーク管理者、インフラエンジニア
- 大学や企業・研究機関の研究者
この書籍に関連する記事があります!
- 雑務をこなすうちにLinuxに習熟できるかも!? シェル・ワンライナーをお勧めする理由
- コンピュータは便利ですが,それでも手間のかかる作業は多々あります。とくにGUIのソフトウェアで次のような作業をやらないといけないとしたら,面倒そうだと思いませんか?
本書のサンプル
本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。
目次
第1部 シェルとコマンドに親しむ
第1章 Linux環境
- 1.1 環境を準備する
- 1.2 端末,シェル,コマンド,ファイルの関係を理解する
- 練習1.2.a 端末を使う
- 練習1.2.b コマンドの止め方
- 練習1.2.c 1+1の計算
- 練習1.2.d ファイルへの保存
- 練習1.2.e ファイルとディレクトリの操作
- 練習1.2.f ファイルのパーミッション
- 練習1.2.g コマンドの調査
- 1.3 頻出コマンドを覚える
- 練習1.3.a sedによる置換の練習
- 練習1.3.b grepによる検索の練習
- 練習1.3.c grepによる検索&切り出しの練習
- 練習1.3.d awkによる検索と計算の練習
- 練習1.3.e sortとuniqによる集計
- 練習1.3.f xargsによる一括処理
- 練習1.3.g bashによるメタプログラミング
- 1.4 ファイルを操作する
- 練習1.4.a GitHubからリポジトリをクローン
- 問題1 ファイル名の検索
- 問題2 画像ファイルの一括変換
- 問題3 ファイル名の一括変更
- 問題4 特定のファイルの削除
- 1.5 もっとawkとsedに慣れる
- 問題5 設定ファイルからの情報抽出
- 問題6 端末に模様を描く
- 問題7 消費税
- 問題8 ログの集計
- 問題9 ログの抽出
- 問題10 見出しの記法の変換
- 問題11 議事録の整理
第2章 シェルの基本
- 2.1 変数と制御構文,コマンドの入出力操作を把握する
- 練習2.1.a 標準入出力・標準エラー出力
- 練習2.1.b シェルと変数
- 練習2.1.c 文字列の連結と置換
- 練習2.1.d 変数を使った計算
- 練習2.1.e クォートと変数
- 練習2.1.f Bashの配列と連想配列
- 練習2.1.g 繰り返しと終了ステータス
- 練習2.1.h 条件分岐
- 問題12 変数の読み込み
- 問題13 存在しないファイルの初期化
- 問題14 さまざまなループ
- 問題15 文字種の変換
- 2.2 プロセスを意識してシェルを操作する
- 練習2.2.a プロセスを知る
- 練習2.2.b プロセスの親子関係を知る
- 練習2.2.c ビルトインコマンドと外部コマンドを意識する
- 練習2.2.d サブシェルを使う
- 練習2.2.e コマンド置換とプロセス置換を使う
- 問題16 変数のローカル化
- 問題17 コマンドが使えないときのコピー
- 問題18 シェルのビルトインだけでの集計
- 問題19 シェルの機能を利用したファイルの上書き
- 2.3 ブレース展開とファイルグロブを使いこなす
- 練習2.3.a ブレース展開
- 練習2.3.b ワイルドカードとファイルグロブ
- 問題20 lsの出力をシェルの機能で
- 問題21 条件がややこしいファイルの一覧の作成
- 問題22 ダミーのFQDNの生成
- 2.4 シグナルを理解してあやつる
- 練習2.4.a シグナルの操作
- 練習2.4.b シグナルの種類
- 問題23 別のシェルにシグナルを飛ばす
- 問題24 exit時にファイルを消す
- 問題25 pipefail時の困りごと
- 問題26 18時を過ぎたら帰りましょう
- 2.5 シェルやコマンドを扱う際の微妙な挙動や機能に触れる
- 問題27 引数を変えてコマンドを再実行
- 問題28 変な名前のディレクトリの扱い
- 問題29 シェルスクリプトのエラーチェック
- 問題30 前方一致する変数名
第2部 発想力を鍛える
第3章 文章と文字の扱い
- 3.1 テキストの扱いを遊んで理解する
- 練習3.1.a Perl,Rubyワンライナー
- 練習3.1.b Pythonワンライナー
- 練習3.1.c 正規表現の種類
- 練習3.1.d Perlを使った置換
- 問題31 大文字への変換
- 問題32 回文の検出
- 問題33 回文かどうかの判定
- 問題34 漢字の後ろにふりがなを入れる
- 問題35 5文字以上のカタカナ言葉を使ったらアウト
- 問題36 括弧の対をチェック
- 3.2 文章を調査・加工する
- 練習3.2.a 行またぎの検索と置換
- 練習3.2.b ひらがなとカタカナの変換
- 練習3.2.c 漢字と読みの変換と日本語と英語の翻訳
- 練習3.2.d フォーマットの変換
- 問題37 コピペミスの検出
- 問題38 込み入った文字実体参照の解決
- 問題39 文章の折り返し
- 問題40 雑多な変換
- 問題41 注釈のチェック
- 問題42 順序付きリストの整形
- 問題43 文献リストのソート
- 問題44 行またぎの検索
- 問題45 複数行にわたる重複の検索
- 問題46 ルビを付ける
第4章 データの管理,集計,変換
- 4.1 表形式のデータを扱う
- 練習4.1.a 表計算
- 練習4.1.b データの連結
- 問題47 前月比データの付加
- 問題48 CPU負荷の調査1
- 問題49 CPU負荷の調査2
- 問題50 売り上げの集計
- 問題51 テストの得点一覧の出力
- 問題52 集計形式の変換
- 問題53 欠損値の補完
- 4.2 ややこしいフォーマットのデータを扱う
- 練習4.2.a JSONとjq
- 練習4.2.b エスケープの入ったCSVの扱い
- 問題54 JSONファイルからの抽出
- 問題55 JSONログの比較
- 問題56 非正規データ同士の結合
- 問題57 テーブルのレイアウトの整形
- 問題58 CSVファイルの数字の集計
- 問題59 CSVの列数の調査
- 4.3 日付や時間を扱う
- 練習4.3.a 日付や時刻の計算をする
- 問題60 プレミアムフライデー
- 問題61 先週のファイル
- 問題62 休日の突き合わせ
- 問題63 第5週が存在する月の調査
- 問題64 第三火曜日の列挙
- 問題65 各月の休日数
- 問題66 リスケジュール
- 問題67 曜日別に分割
- 問題68 Unix時刻の限界
- 問題69 うるう秒
第5章 文字コードとバイナリ
- 5.1 文字コードに親しむ
- 練習5.1.a n進数
- 練習5.1.b ASCIIコード
- 練習5.1.c UnicodeとUTF-8
- 練習5.1.d 文字コードと改行記号の変換
- 問題70 Excel方眼紙
- 問題71 文字のバイト数の調査
- 問題72 絵文字
- 問題73 展開後文字化けしたファイル名の修正
- 問題74 未確定の元号
- 問題75 絵文字を除去したい
- 問題76 少し前のMacでできたファイルのリスト
- 問題77 異なる文字コードのファイルの一括検索
- 問題78 常用漢字でない漢字の検出
- 問題79 文字コードの特定
- 5.2 バイナリをあやつる
- 練習5.2.a 文字列のバイナリ解析とバイトオーダ
- 練習5.2.b バイナリファイル調査用のコマンド
- 問題80 2進数から文字列を復元
- 問題81 BOMの識別
- 問題82 画像の分割
- 問題83 Shift_JISをそのままechoするシェルスクリプト
- 問題84 改行コードの識別と集計
- 問題85 文字のバイナリの平均をとる
- 問題86 分数の計算
- 問題87 odの出力の復元
- 問題88 電子透かしの解読
- 問題89 CTF
第6章 パズル
- 6.1 数学で遊ぶ
- 練習6.1.a 正確な計算
- 練習6.1.b 素数
- 練習6.1.c 組み合わせの生成
- 問題90 n進数の計算
- 問題91 組み合わせの抽出
- 問題92 指数の計算
- 問題93 最初に素数になる年月日時分秒
- 問題94 ラグランジュの四平方定理の部分的な検証
- 問題95 交番二進符号
- 6.2 雑多な問題を片付ける
- 問題96 日程調整
- 問題97 縦読みの文字列の検出
- 問題98 レコードの振り分け
- 問題99 ポーカーの役
- 問題100 しりとり順に並べる
- 問題101 連続するアルファベットの検出と略記
- 問題102 クワイン
第3部 応用する
第7章 Linux環境の調査,設定と活用
- 7.1 ファイル,ディレクトリを調査・操作する
- 練習7.1.a 各種ファイルの置き場所
- 練習7.1.b ファイルシステム
- 練習7.1.c iノード
- 問題103 ls -lの出力の2列目
- 問題104 ファイル名の長さの限界は?
- 問題105 ディスク使用量の集計
- 問題106 特殊なパーミッション
- 問題107 何回rootになった?
- 問題108 トラブルを起こしたプロセスの解析
- 問題109 中身が同じファイルの検索
- 問題110 複数のディレクトリ内のファイル数をカウント
- 7.2 疑似ファイルシステムを利用する
- 練習7.2.a 疑似ファイルシステム
- 練習7.2.b プロセス置換とファイル
- 問題111 ロードアベレージの調査
- 問題112 日付の取得
- 問題113 カレントディレクトリの調査
- 問題114 共有ライブラリの検索
- 問題115 USBメモリのアンマウント
- 問題116 デバイスの番号調査
- 問題117 USBの抜き差しの監視
- 問題118 プロセスが開いているファイルの調査
- 問題119 メモリマップの表示
- 問題120 謎のデータの調査
- 7.3 システムコールを追いかける
- 練習7.3.a straceを使う
- 問題121 ファイルパスの抽出
- 問題122 使ったプロセス数のカウント
- 問題123 計算時間の解析
- 7.4 雑多な調査と設定を片付ける
- 問題124 ネットワークデバイス一覧
- 問題125 IPアドレスの追加
- 問題126 Bashのバージョンと変数
- 問題127 端末エミュレータのウィンドウサイズ
- 問題128 grepの挙動の違いの正体を突き止めろ
- 問題129 実行ファイルから文字列を抜き取る
- 7.5 ワンライナーでサービスをしかける
- 問題130 即席のWebサーバ
- 問題131 メールの通知を投げる
- 問題132 ログの監視&アラート
- 問題133 システムを自動でシャットダウンする
第8章 ソフトウェア開発中に繰り出すワンライナー
- 8.1 ソースコードやスクリプトを調査・整形する
- 問題134 Pythonのインデントの確認
- 問題135 Lispの括弧の整合性の確認
- 問題136 関数の位置の入れ替え
- 問題137 コードの整形
- 8.2 データを生成する
- 練習8.2.a ダミーデータの生成
- 問題138 テストケースの作成
- 問題139 URLの列挙
- 問題140 Webサイトの構造からアクセスログを生成
- 問題141 テーブル情報からのダミーデータ生成
- 問題142 ビットスクワッティング
- 8.3 Gitのリポジトリを調査・操作する
- 練習8.3.a リポジトリの用意
- 練習8.3.b 変更されたファイルの確認
- 練習8.3.c コミット済みの情報を利用する
- 練習8.3.d ブランチとマージ
- 問題143 条件にあうファイルだけをコミット
- 問題144 条件にあうファイルだけをもとに戻す
- 問題145 コミットの頻度を調べる
- 問題146 ずっとマージされていないブランチを調べる
第9章 インターネットと通信
- 9.1 インターネットから情報を取得する
- 練習9.1.a HTML文章の処理
- 問題147 単語の出現頻度
- 問題148 駅名のリストの作成
- 問題149 天気情報の取得
- 問題150 複数ページのスクレイピング
- 問題151 複数サイトの情報の連携
- 9.2 通信関係の調査や操作を行う
- 練習9.2.a 名前解決
- 練習9.2.b HTTPステータスコード
- 問題152 ネットワーク監視
- 問題153 telnetコマンドでHTTP通信
- 問題154 /etc/hostsの使用調査
- 問題155 不正なContent-Length
- 問題156 複数IPのアドレスが登録されているドメイン
- 問題157 pingのパケット解析
- 問題158 パケットを使ったOSの推定
- 問題159 複数のドメインのチェック
- 問題160 SSL証明書の調査
この本に関連する書籍
-
[改訂第3版]シェルスクリプト基本リファレンス ──#!/bin/shで、ここまでできる
定番の1冊『シェルスクリプト基本リファレンス』の改訂第3版。シェルスクリプトの知識は,プログラマにとって長く役立つ知識です。本書では,複数のプラットフォームに...
-
シェルプログラミング実用テクニック
月刊誌『Software Design』の2012年1月号~2013年12月号で連載していた「開眼シェルスクリプト」の内容を大幅に加筆/修正し,書籍にまとめました。 LinuxやUNIXのコマ...