シェルスクリプトマガジン

test

フルスクラッチから1日でCMSを作る シェルスクリプト高速開発手法入門

投稿日:2016.07.26 | カテゴリー: 推薦図書

本書ではUNIXのシェルスクリプトを用いて、Webサイトを作成して、Twitterにツイートしたりログを集計したり、WordPressからデータを抜き取ったりするなど、実用的なアプリケーションを短時間に開発する手法を解説します。
PCやOS、サーバ等の設定や、Open usp Tukubaiコマンドのインストール方法なども詳しく書かれ、非常に実践的な内容です。
※本書は、2014年7月にアスキー・メディアワークス(現KADOKAWA)より出版されたものです。

目次

第1章 はじめに

  1.1 経緯と対応、起こった問題
  1.2 シェルスクリプトで解決を図る
  1.3 本書のねらい
  1.4 対象となる読者・レベル
  1.5 本書の背景・周辺
  1.6 補足
  1.7 本書の構成
 

第2章 環境の準備

  2.1 構成の概要
  2.2 使うマシン(環境)選びと環境の設定
  2.3 通信の諸設定
  2.4 ドメインの取得・ホスト名の設定
  2.5 コマンドまわりの整備
  2.6 補足
 

第3章 文章管理の仕組みを作る

  3.1 データの整理の前に頭を整理する
  3.2 データ構造を作る
  3.3 便利コマンドを作る・使う(その1)
  3.4 便利コマンドを作る・使う(その2)
  3.5 補足
 

第4章 ウェブサイトを作る

  4.1 Apacheを設定してCGIシェルスクリプトを動かす
  4.2 記事の表示
  4.3 ログを記録する
  4.4 記事の選択機能をつける
  4.5 パスを書き換える
  4.6 前後の日記記事に移動できるようにする
  4.7 記事の属性を埋め込む
  4.8 体裁を整える
  4.9 ナビゲーション機能を強化する
  4.10 プレビュー機能をつける
  4.11 処理時間を計測してみましょう
  4.12 補足
 

第5章 ウェブサイトを外部とつなぐ

  5.1 タイトルに記事名を入れる
  5.2 RSSを作成する
  5.3 ソーシャルボタン・広告を表示する
  5.4 シェルスクリプトでTwitterに記事のタイトルとURLをツイート
 

第6章 シェル芸でログの集計

  6.1 logrotateの設定
  6.2 ログを眺める
  6.3 日付の変換
  6.4 主要な指標を端末で取得
  6.5 もっと凝った出力を作る
  6.6 補足
 

第7章 おわりに

 

付録A WordPress(MySQL)からデータを抜き取る

  A.1 mysqlコマンドを使う
  A.2 SQLではなくてシェルスクリプトでデータを整理
  A.3 画像等を記事ディレクトリに放り込む
  A.4 htmlファイルのリンクを修正
  A.5 カテゴリを抜き出す
  A.6 記事ディレクトリに時刻を入れる
  A.7 アップロードと確認

シェルプログラミング実用テクニック

投稿日:2016.04.19 | カテゴリー: 推薦図書

Linux/UNIXのコマンドは単独で使うよりも、複数のコマンドを組み合わせてこそ真価を発揮します。テキストデータの検索/置換/並べ替え、ファイルのバックアップや削除、数値や日付の計算など活用範囲は無限大。端末にコマンドを入力してすぐに実行できるのも良いところ。その場かぎりの作業にこそ、シェルプログラミングが使えると便利です。
本書のいくつもの実例を順に見ていけば、コマンドを自在に組み合わせるために必要なシェルの機能と考え方が身につきます。
※本書はSoftwareDesign誌(技術評論社刊)の連載記事「開眼シェルスクリプト」を大幅に加筆修正し、同社から発行されたものです。

目次

第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.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 ハト語に変換する(シグナル処理)

すべてのUNIXで20年動くプログラムはどう書くべきか

投稿日:2016.04.19 | カテゴリー: 推薦図書

プログラミング上よくある課題を、極力POSIXの範囲で、かつUNIX哲学的アプローチで解決したシェルスクリプトを多数例示し、高い可搬性・可用性を実現しつつ実用的なプログラムを書く方法を紹介しています。

下記のような内容を満載しています。

環境に依存せず、長持ちするプログラムの書き方(環境依存を引き起こす落とし穴)
環境に依存しない正規表現の書き方
シェルスクリプトで処理を行うための、たくさんの小技(レシピ)
シェルスクリプトは意外に速くて機能も豊富という事実
プログラム制作で参考になるUNIX哲学

※本書は同人誌として発行されたものを、再編集してC&R研究所より出版されたものです。

目次

序章 POSIX原理主義:その本質と可能性、実践方法を理解する

第1章 どの環境でも使えるシェルスクリプトを書く …… 文法・変数編

1-1 環境変数などの初期化
1-2 シェル変数
1-3 スコープ
1-4 正規表現
1-5 文字クラス
1-6 乱数
1-7 ロケール
1-8 $(( 式 ))
1-9 case文/if 文
1-10 local修飾子
1-11 PIPESTATUS変数

第2章 どの環境でも使えるシェルスクリプトを書く …… 正規表現編

2-1 知っておくべきメタ文字セットは3つ
2-2 BRE(基本正規表現)メタ文字セット
2-3 ERE(拡張正規表現)メタ文字セット
2-4 AWKで使えるメタ文字セット

第3章 どの環境でも使えるシェルスクリプトを書く …… コマンド編

3-1 「[」コマンド
3-2 AWKコマンド
3-3 dateコマンド
3-4 duコマンド
3-5 echoコマンド
3-6 execコマンド
3-7 foldコマンド
3-8 grepコマンド
3-9 headコマンド
3-10 ifconfigコマンド
3-11 killコマンド
3-12 mktempコマンド
3-13 nlコマンド
3-14 printfコマンド
3-15 psコマンド
3-16 readlinkコマンド
3-17 sedコマンド
3-18 sortコマンド
3-19 tacコマンド/tailコマンド+ -rオプションによる逆順出力
3-20 test([)コマンド
3-21 trコマンド
3-22 trapコマンド
3-23 whichコマンド
3-24 xargsコマンド
3-25 zcatコマンド

第4章 Hors d’oeuvre:ちょっとうれしいレシピ

4-1 sedによる改行文字への置換を、キレイに書く
4-2 grepに対するfgrepのような素直なsed
4-3 mkfifoコマンドの活用
4-4 一時ファイルを作らずファイルを更新する
4-5 テキストデータの最後の行を消す
4-6 改行なしの終端テキストを扱う
4-7 IPアドレスを調べる(IPv6も)
4-8 YYYYMMDDhhmmssを年月日時分秒に簡単分離する
4-9 祝日を取得する
4-10 ブラックリスト入りした100件を1万件の名簿から除去する

第5章 POSIX原理主義テクニック

5-1 PIPESTATUSさようなら
5-2 Apacheのcombined形式ログを扱いやすくする
5-3 シェルスクリプトで時間計算を一人前にこなす
5-4 findコマンドで秒単位にタイムスタンプ比較する
5-5 CSVファイルを読み込む
5-6 JSONファイルを読み込む
5-7 XML、HTMLファイルを読み込む
5-8 全角・半角文字の相互変換
5-9 ひらがな・カタカナの相互変換
5-10 バイナリデータを扱う
5-11 ロック(排他・共有)とセマフォ
5-12 デバッグってどうやってるの?

第6章 POSIX原理主義テクニック …… Web編

6-1 URLデコードする
6-2 URLエンコードする
6-3 Base64エンコード・デコードする
6-4 CGI変数の取得(GETメソッド編)
6-5 CGI変数の取得(POSTメソッド編)
6-6 Webブラウザーからのファイルアップロード
6-7 Ajaxで画面更新したい
6-8 シェルスクリプトでメール送信
6-9 メールマガジンを送る
6-10 HTMLテーブルを簡単キレイに生成する
6-11 シェルスクリプトおばさんの手づくりCookie(読み取り編)
6-12 シェルスクリプトおばさんの手づくりCookie(書き込み編)
6-13 シェルスクリプトによるHTTPセッション管理

第7章 知らないとハマるさまざまな落とし穴

7-1 名前付きパイプからリダイレクトするときの落とし穴
7-2 全角文字に対する正規表現の扱い
7-3 sortコマンドの基本と応用と落とし穴
7-4 sedのNコマンドの動きが何かおかしい
7-5 標準入力以外からAWKに正しく文字列を渡す
7-6 AWKの連想配列が読み込むだけで変わる落とし穴
7-7 whlie readで文字列が正しく渡せない
7-8 あなたはいくつ問題点を見つけられるか?

付録 レシピを駆使した調理例

郵便番号から住所欄を満たすアレをシェルスクリプトで

-->