1日1問、半年以内に習得 シェル・ワンライナー160本ノック

書籍情報

発売日 : 2021年09月27日

著者/編集 : 上田 隆一/山田 泰宏

出版社 : 技術評論社

発行形態 : 単行本

書籍説明

内容紹介

ひたすら基本解説&演習。本当に習得したい人向けの技術書。あらゆる種類(ビジネス文書、表計算、システム情報、ソースコード、インターネット)のあらゆるデータ(テキスト(CSV、JSON)、数値、日付、文字コード、画像、バイナリ)のあらゆる作業(加工、調査、一括処理、自動化)をLinuxターミナルで即興で片付ける。

目次

第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証明書の調査

著者情報

上田 隆一
「シェル芸」という言葉を作った人。本業はプログラミングの得意(自称)なロボット工学の研究者。ロボットサッカーの競技者で某国立大の教員だったが、現場経験がないとプログラミングは語れないと思って(あと、大学がいろいろ面倒くさいと思って)研究を中断し、4年半、ロボットとは無関係の企業システムを手がける企業に勤務。現在は千葉工業大学の教員。企業時代から執筆活動を始めてシェル芸と本業両方で著書多数。GitHub(https://github.com/ryuichiueda)では自作のシェルやBash製のCMS、ワンライナー用のPythonラッパーであるopy、その他ロボット用のプログラムを公開している。
上田, 隆一, 1978-
山田 泰宏
シェル芸のコミュニティでは「ぐれさん」の愛称で呼ばれているIT技術者。海外から本書の執筆に参加。GitHub(https://github.com/greymd)ではojichatの作者として知られるほか、tmuxのペイン分割を楽にするtmux-xpanes、本書でも利用されているteipやCureutilsなど有用なCLIツールをメンテナンスしている。
山田, 泰宏
田代 勝也
プログラミング挫折経験ありの福岡在住IT系エンジニア。プログラミングの練習は、RubyのpryなどREPL環境で対話的に試行錯誤するのが好き。システムのさまざまな調査やデータ処理など、シェル芸を武器に日々格闘しつつもKOされる事多し?
田代, 勝也
中村 壮一
シェル芸勉強会の大阪サテライトの発起人。Web系エンジニアのような何か。最近はVR空間内でビジュアルプログラミングをするのにハマりつつある。
中村, 壮一
今泉 光之
古き良きUnixライフが好きなおじさん(本人談)。
今泉, 光之
上杉 尚史
都内のセキュリティ企業に勤務している人。ターミナルのプロンプトが独特。昔は家にサーバラック(24U)がいた。たまにブログ(https://orebibou.com)も書いている。GitHub(https://github.com/blacknon)ではTUIのGo言語製sshクライアントなど、仕事で使えそうなツールを公開している。
上杉, 尚史