文芸船

Mac向けコマンド・メモ

Macのターミナルで私がよく使っているコマンド、忘れやすい点についてメモ的に記載しました。なお、MacはBSD系なのでGNU/LinuxやCygwinには適用できない可能性があります。また、MacPorts、HomeBrew等によりGNU系をインストールすることも可能です。

拡張ファイル属性

MacのファイルにはExtended Attributes(拡張ファイル属性)と呼ばれる、ファイルタイプやアイコン情報などから成るメタ情報が付けられている。FTPでアップロードしたりWindows等に送ったりする際にファイルサイズが異なる原因である。lsコマンドを使うと、EAの付加されたファイルには@が表示される。

拡張ファイル属性摘要
com.apple.TextEncodingQuickLook等へ文字コード通知。
com.apple.ResourceForkサイズが数kbyteまで膨らむ。
com.apple.FinderInfo付いていない場合が多い。
com.apple.metadata:~~にメタデータ名が入る。
EAの内容一覧
ls -l@ filePath
EAの削除
xattr -d metadata name filePath

文字列の検索・置換(基本)

小説の推敲時、誤りやすい内容を正規表現でまとめて検査してやると効率が良い。とくに過去作品をまとめて修正等する際に便利。但し各コマンドの正規表現やオプションは、GNUと細かい箇所が違うので注意。

sed -e 's/置換前/置換後/g' filePath > filePath2

エスケープの必要な文字

正規表現ながらも処理系によって違う場合もあるから注意。また、余計なものをエスケープすると、意図しないエラー発生の原因にもなりえる。

\ ¥ . * + ? / { } [ ] ( ) ^ $ | ' "

感嘆符等のスペース検出

日本語の小説等で感嘆符又は疑問符の直後は、カッコ又はスペースを置くべきなので、そのケアレスミスを検査。

grep '[!?][^ 」』)(/>)]' filePath

文章内の半角数字検出

文芸作品では一般に半角数字を使わないので、そのケアレスミスを検査。

grep '^<p.*>.*[0-9].*</p>' filePath

複数ファイルの文字列置換(上書き)

GNU/Linuxと違ってBSD系なので、sed -iの後ろに''が無いとエラーになる。

find directory/* -name *.html|xargs sed -i '' 's/置換前/置換後/g'

Perl、PHP、Python等も最初からインストール済みなので、上記と同じ作業をPerlで行うと下記のとおり。なお文字列を改行コードに置換する場合、sedはトリッキーな手法が必要だが、Perlなら\nで容易にできる(逆ならsedでも可)。

find directory/* -name *.html|xargs perl -pi -e 's/置換前/置換後/g'

文字列の検索・置換(応用)

 出来合いのアプリなどをダウンロードしたり PerlやPHPなどを使わなくても、簡単なマークアップ自動化はシェルスクリプトでも可能である。

Windows-Macのテキスト変換

 変更日時を維持した上で文字コードをWindowsからMacへ上書き変換するシェルスクリプト。nkfはインストールされていないのでiconvとtrを使った。また変更日時を読み取らせるようにすれば、複数ファイルの一括変換に書き換えも可能。

  1. Shift-JIS(厳密にはcp932)からUTF-8へ変換し、改行コードのCRを削除してファイル出力する。
  2. touchコマンドにより、入力した変更日時に書き換える。
  3. mvコマンドにより変換後ファイルを変換前フォルダに移動して上書きする。
#!/bin/bash
cat "Documents/$1.txt" | iconv -f cp932 -t utf-8 | tr -d "\r" > "$1.txt"
touch -t $2 "$1.txt"
mv "$1.txt" "Documents/$1.txt"

テキストファイルの簡易HTML化

テキスト文章を簡易なHTMLに変換するシェルスクリプト。あとはhtml、body、title等を加えれば完成。Linux(Ubuntu)を使っていた際はもう少し簡単な書き方をしていたが、エラーが出たので下記の内容に書き換えた。

#!/bin/bash
cat << EOF > $1.html
<!DOCTYPE html>
<html>
<head><title>`sed -n 1p $1.txt`</title></head>
<body>
`sed -e '1s/^/<h1>/;1s/$/<\/h1>/;2,$s/^/<p>/g;2,$s/$/<\/p>/g' -e 's/<p><\/p>/<hr\/>/g' $1.txt`
</body>
</html>
EOF

Googleのsitemap.xml生成

サブフォルダ内も含め、フォルダ内にあるhtmlファイルを全部、Google用のsitemap.xmlに書き込む。

#!/bin/bash
cd $(dirname $0)
cat << EOF > sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
`find . -name "*.html"| sed -e 's/^\./<url><loc>Top URI<\/loc><\/url>/g' | sort`
</urlset>
EOF

MacPorts関係

MacPortsはMacでUnix系アプリケーションを使用する際のパッケージ管理システムであり、https://www.macports.orgで入手してインストールする。

MacPortsの基本コマンド
項目コマンド等
port自身のアップデートsudo port selfupdate
アプリケーションの検索port search 検索文字列
アプリケーションのインストールsudo port install 名称
インストール済分のアップデートsudo port upgrade installed
中間データを破棄(掃除)sudo port clean --all all
古いアプリを破棄(掃除)sudo port uninstall inactive

MacPortsでインストールできる便利ツール

JShint
JavaScript用のLint(誤り等検出ソフト)であり、設定ファイルにより検査項目を調整できる。
linkchecker
HTML内のリンク切れURIを一括検出するソフト。リンク先のHTMLも一括チェック可能。

Apache(テスト用サーバ)

Mac OS Xは最初からApacheもインストールされているので、普通のApacheと同様に設定して起動するだけで使える。MacPortsから別途入手したり他のサイトからインストールすることも可能。

Apacheの基本コマンド
コマンド摘要
apachectl startApacheの起動
apachectl stopApacheの停止
apachectl restartApacheの再起動
apachectl configtestApacheの設定ファイル検証

各種設定ファイル

各種設定に必要なファイルは、基本的に下記のとおりディレクトリにある。GUIでは不可視で管理者権限で書込制限も受けているので、Vimやnanoといったエディタで編集する。なお、編集に用いるエディタもプリインストールされている。

  1. /etc/apache2/httpd.conf
  2. /etc/apache2/extra/httpd-vhosts.conf
  3. /etc/hosts

httpd.confにおいて、プリインストールのままだとかなり多くのDSOが読込対象だが、実は結構な数が対象外にできる。当サイトの試験用には下記のみで対応可能。なお、連動する設定ファイルの読込も併せて停止/読込すること。また、Apache 2.4以降はorderが非推奨なのでRequireにする。

モジュール名機能の概要
authz_core_moduleアクセス制御(コア)
authz_host_moduleアクセス制御
deflate_modulegzip圧縮送信(圧縮)
filter_modulegzip圧縮送信(ファイル指定)
log_config_moduleアクセスログの収集
mime_moduleMIME TYPEの設定
expires_moduleExpires HTTPヘッダ
headers_moduleHTTPヘッダ
unixd_moduleUser, Groupなど
vhost_alias_moduleVirtual host
negotiation_moduleContent Negotiation
dir_moduleIndex, Redirect
alias_moduleRedirect
rewrite_moduleRewriteモジュール設定
php7_modulePHPの使用

Web公開フォルダの指定

Webサイト公開フォルダの配置はhttpd.confで直接設定するよりも、vhosts.confで設定する方が安全である。

  1. httpd.confvhost_alias_modulehttpd-vhosts.confを有効にする。
  2. httpd-vhosts.confで公開フォルダのrootを定める(下記を参照)。
  3. vhosts.confDirectoryAllow等を設定する。
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/Users/*****"
    ServerName dummy-host2.example.com
    ErrorLog "/private/var/log/apache2/dummy-host.example.com-error_log"
    CustomLog "/private/var/log/apache2/dummy-host.example.com-access_log" common
</VirtualHost>
<Directory /Users/*****>
    Options FollowSymlinks Includes
    AllowOverride All
    Require all granted
</Directory>
文芸船profile & mail