目次
第1章 準備運動
- 1.1 UNIXとは何者なのか?
- 1.1.1 McIlroyによるパイプの提案
- 1.1.2 grep,sedの誕生
- 1.1.3 「ソフトウェアツール」という言葉の誕生
- 1.1.4 考えられた「もう1つの選択肢」
- 1.1.5 GancarzのUNIX哲学
- 1.2 OSや環境について
- 1.2.1 想定する利用シーン
- 1.2.2 Ubuntu 14.04 LTS
- 1.3 基本操作
- 1.3.1 端末とシェルを開く
- 1.3.2 シェルにコマンドを入力する
- 1.3.3 manを使う
- 1.3.4 ファイルやコマンドの出力を眺める
- 1.3.5 ディレクトリを理解する
- 1.3.6 ディレクトリを移動する
- 1.3.7 ワイルドカードで一度に複数ファイルを指定する
- 1.3.8 パイプでコマンドをつなぐ
- 1.3.9 シェルスクリプトを書いて実行する
- 1.3.10 ファイルを読み書きする
- 1.3.11 出力を捨てる
- 1.3.12 日本語と英語を切り替える(ロケール)
- 1.3.13 パーミッションを理解する
- 1.3.14 制御構文を使う
- 1.3.15 その他の文法
- 1.4 AWKとsed
- 1.4.1 AWKを使う
- 1.4.2 sedを使う
- 1.5 使用するコマンドのインストール
- 1.5.1 GNU Awkの確認/インストール
- 1.5.2 Open usp Tukubaiのインストール
- 1.6 本書におけるPOSIXに対する立場
第2章 不定型な文章や設定ファイルの検索と加工
- 2.1 テキストの検索
- 2.1.1 文字列を検索する
- 2.1.2 複数のファイルから検索する
- 2.1.3 調査したいファイル一覧を作ってから検索する
- 2.1.4 ファイル名を検索する
- 2.1.5 検索対象の前後の行を抽出する
- 2.1.6 検索語句を含むファイルのリストを作る
- 2.2 単語や文字の数え上げ
- 2.2.1 文字数を数える
- 2.2.2 単語や語句を数える
- 2.2.3 文字の出現頻度を数える
- 2.2.4 斉藤さんの数を数える
- 2.3 テキストの比較
- 2.3.1 2つのテキストファイルを比較する
- 2.3.2 ディレクトリのファイルを比較する
- 2.3.3 ファイルが同じだったら/違ったら××する
- 2.4 文章の校正
- 2.4.1 特定の語句を置き換える
- 2.4.2 複数のファイルで特定の語句を置き換える
- 2.4.3 表記揺れや記号の不統一をチェックする
- 2.4.4 スペルチェックを行う
- 2.4.5 変なバイナリが混入していないか調査する
- 2.4.6 長い行を折り返す
- 2.4.7 不必要なマークアップ/コメント/スペースを消す
- 2.4.8 マークアップ/スペースをあとから差し込む
- 2.4.9 特定のフォーマットにデータを流し込む
- 2.5 その他テキストを扱うときの小技
- 2.5.1 Vimでコマンドを使う
- 2.5.2 カタカナや数字の全角/半角を相互変換する
第3章 ファイルの取り扱いとシステムの操作
- 3.1 バックアップ/同期
- 3.1.1 ディレクトリをバックアップする
- 3.1.2 2つのディレクトリを同期する
- 3.1.3 最新ファイルを古いファイルで上書きしないように同期を行う
- 3.2 圧縮されたファイルの操作
- 3.2.1 gzip圧縮されたファイルを圧縮されたまま使う
- 3.2.2 アーカイブの中から特定のファイルだけを抜き出す
- 3.3 ファイルの整理
- 3.3.1 重複したファイルを消す
- 3.3.2 ディレクトリの古いファイルを整理する
- 3.3.3 複数のテキストファイルを圧縮しないで1つにまとめる
- 3.4 ファイルの暗号化
- 3.4.1 ファイルを公開鍵暗号方式で暗号化する
- 3.4.2 パスワード方式の暗号化を行う/破る
- 3.5 自動化
- 3.5.1 プログラムを定期的に自動実行する
- 3.5.2 ファイルが変更されたらアクションを起こす
- 3.5.3 service(1)で自作のプログラムを起動/停止する
- 3.5.4 OS起動時に自作のプログラムを走らせる
- 3.6 ログからの情報抽出と活用
- 3.6.1 検索する
- 3.6.2 日付を正規化する
- 3.6.3 Apacheのログ(不定長データ)をスペース区切りに整形する
- 3.6.4 データをキーバリュー形式に整形する
- 3.7 プロセスに関する注意点
- 3.7.1 多数のプロセスから1つのファイルにレコードを書き込む
- 3.7.2 制御構文が動作するプロセスについて
第4章 ファイルシステムをデータベースにする
- 4.1 データの置き方
- 4.1.1 RDBで言うところのテーブルを作る
- 4.1.2 テキスト以外のデータの置き方を決める
- 4.1.3 データに対するテストを書く
- 4.2 データの連結や集計
- 4.2.1 マスタとトランザクションを結合する
- 4.2.2 集計する
- 4.3 データの更新
- 4.3.1 レコードを手動/半自動で追加する
- 4.3.2 レコードを自動で追加する(排他処理を行う)
- 4.3.3 レコードを変更する
- 4.4 データの印刷/アウトプット
- 4.4.1 住所録を印刷用にフォーマットする
- 4.4.2 バーコード/QRコードを印刷する
- 4.5 補足
- 4.5.1 ダミーデータを作る
- 4.5.2 別のデータの持ち方を検討する
第5章 大きなデータを処理する
- 5.1 マシンスペックの調査
- 5.1.1 CPUの周波数や個数などを調査する
- 5.1.2 DRAMの量と読み書きの速度を調査する
- 5.1.3 HDDの容量と読み込み速度,その他の情報を調査する
- 5.2 マルチスレッド/マルチプロセス
- 5.2.1 sortを使いこなす
- 5.2.2 パイプで並列計算する
- 5.2.3 バックグラウンド処理で並列化する
- 5.2.4 xargsで並列化する
- 5.3 計算の効率化
- 5.3.1 GNU grepに仕事をさせる
- 5.3.2 ページキャッシュを有効利用する
- 5.3.3 並列処理時のページキャッシュの効果
- 5.3.4 圧縮してキャッシュにのせて処理する(場合によっては有効)
- 5.3.5 ファイルを分割しておく
第6章 画像,表計算ソフト,その他特殊なデータを扱う
- 6.1 バイナリの読み書き
- 6.1.1 バイナリを閲覧する
- 6.1.2 バイナリを編集する
- 6.2 画像処理
- 6.2.1 画像のデータ形式/サイズ/向きを変える
- 6.2.2 アニメーションGIFを作る
- 6.2.3 画像をテキストにして正規化する
- 6.2.4 画像の一部分を切り出す
- 6.2.5 ネガを作る
- 6.2.6 画像を合成する
- 6.2.7 画像の情報を調査する
- 6.2.8 SVG画像を作る
- 6.3 フォーマットの変換
- 6.3.1 CSVをパースして読み込む
- 6.3.2 CSVをパースしないで読み込む
- 6.3.3 固定長のデータをスペース区切り(SSV)にする
- 6.3.4 PDFファイルを端末で読む
- 6.4 オフィススイートとの連携
- 6.4.1 Excelファイルからデータを抽出する
- 6.4.2 Word,PowerPointのデータを抽出する
- 6.4.3 Excel,Word,PowerPointファイルの中を検索する
- 6.4.4 少しずつ違うWordファイルを大量生成する
第7章 CLI的インターネットとの付き合い方
- 7.1 Webサイトの活用
- 7.1.1 Web APIを使う
- 7.1.2 Webサイトを丸ごとダウンロードする
- 7.2 HTML文書の加工
- 7.2.1 HTMLをパースせずに特定の要素を抜き出す
- 7.2.2 マークアップの重複がないかを確認する
- 7.2.3 リンク切れを見つける
- 7.3 サーバをまたいだ処理
- 7.3.1 ポートを操作する
- 7.3.2 鍵認証でsshを使う
- 7.3.3 ログインせずにリモートのコンピュータを操作する
- 7.3.4 リモートの計算リソースを利用する
- 7.3.5 sshを使わないでデータをやりとりする
- 7.4 電子メールの活用
- 7.4.1 電子メールの原本を読む
- 7.4.2 ファイル名から受信処理時間を抽出する
- 7.4.3 添付ファイルを抽出する
- 7.5 IPアドレスの取り扱い
- 7.5.1 IPv6のIPアドレスを処理する
- 7.5.2 IPv4のIPアドレスをソートする
第8章 計算
- 8.1 基本的な計算
- 8.1.1 端末を電卓代わりにする
- 8.1.2 文章の中から数字を抽出して計算する
- 8.1.3 「桁落ち」「丸め誤差」を気にしながら計算する
- 8.1.4 n進数とm進数を変換する
- 8.2 日付の計算
- 8.2.1 各月の最終日を求める
- 8.2.2 2つの日付の差を計算する
- 8.2.3 その年の第何週かを求める
- 8.2.4 n営業日後の日付を求める
- 8.2.5 西暦/和暦を変換する
- 8.3 科学計算
- 8.3.1 一様乱数を作る
- 8.3.2 ガウス分布に従う乱数を作る
- 8.3.3 数値積分を行う
- 8.3.4 数列を作る
- 8.4 実験データの処理
- 8.4.1 データのばらつきを評価する
- 8.4.2 最小二乗法でデータに直線を当てはめる
- 8.4.3 相関係数を求める
- 8.4.4 グラフを描く
付録
- A.1 Upstart
- A.2 Ubuntuの設定メモ
- A.2.1 日本語パッケージをインストールする
- A.2.2 wkhtmltopdfをインストールする
- A.3 cgroupsの設定
- A.4 いたずら
- A.4.1 見かけよりも大きなファイルを作る(疑似デバイスを使う)
- A.4.2 他人の端末に字を送り込む(デバイスファイルを使う)
- A.4.3 どうでもよいファイルをダウンロードさせる(拡張子について)
- A.4.4 きわどい名前のファイルやディレクトリを作る(ミスでできたファイルの二次被害防止)
- A.4.5 ハト語に変換する(シグナル処理)