Macのターミナルで私がよく使っているコマンド、忘れやすい点についてメモ的に記載しました。なお、MacはBSD系なのでGNU/LinuxやCygwinには適用できない可能性があります。また、MacPorts、HomeBrew等によりGNU系をインストールすることも可能です。
MacのファイルにはExtended Attributes(拡張ファイル属性)と呼ばれる、ファイルタイプやアイコン情報などから成るメタ情報が付けられている。FTPでアップロードしたりWindows等に送ったりする際にファイルサイズが異なる原因である。ls
コマンドを使うと、EAの付加されたファイルには@が表示される。
拡張ファイル属性 | 摘要 |
---|---|
com.apple.TextEncoding | QuickLook等へ文字コード通知。 |
com.apple.ResourceFork | サイズが数kbyteまで膨らむ。 |
com.apple.FinderInfo | 付いていない場合が多い。 |
com.apple.metadata:~ | ~にメタデータ名が入る。 |
ls -l@ filePath
xattr -d metadata name filePath
xattr -cr 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へ上書き変換するシェルスクリプト。nkfはインストールされていないのでiconvとtrを使った。また変更日時を読み取らせるようにすれば、複数ファイルの一括変換に書き換えも可能。
#!/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、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
サブフォルダ内も含め、フォルダ内にある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はMacでUnix系アプリケーションを使用する際のパッケージ管理システムであり、https://www.macports.orgで入手してインストールする。
項目 | コマンド等 |
---|---|
port自身のアップデート | sudo port selfupdate |
アプリケーションの検索 | port search 検索文字列 |
アプリケーションのインストール | sudo port install 名称 |
インストール済分のアップデート | sudo port upgrade installed |
中間データを破棄(掃除) | sudo port clean --all all |
古いアプリを破棄(掃除) | sudo port uninstall inactive |
Mac OS Xは最初からApacheもインストールされているので、普通のApacheと同様に設定して起動するだけで使える。MacPortsから別途入手したり他のサイトからインストールすることも可能。
コマンド | 摘要 |
---|---|
apachectl start | Apacheの起動 |
apachectl stop | Apacheの停止 |
apachectl restart | Apacheの再起動 |
apachectl configtest | Apacheの設定ファイル検証 |
各種設定に必要なファイルは、基本的に下記のとおりディレクトリにある。GUIでは不可視で管理者権限で書込制限も受けているので、Vimやnanoといったエディタで編集する。なお、編集に用いるエディタもプリインストールされている。
/etc/apache2/httpd.conf
/etc/apache2/extra/httpd-vhosts.conf
/etc/hosts
httpd.conf
において、プリインストールのままだとかなり多くのDSOが読込対象だが、実は結構な数が対象外にできる。当サイトの試験用には下記のみで対応可能。なお、連動する設定ファイルの読込も併せて停止/読込すること。また、Apache 2.4以降はorder
が非推奨なのでRequire
にする。
モジュール名 | 機能の概要 |
---|---|
alias_module | Redirect |
authz_core_module | アクセス制御(コア) |
authz_host_module | アクセス制御 |
autoindex_module | ディレクトリインデックス生成 |
deflate_module | gzip圧縮送信(圧縮) |
dir_module | Index, Redirect |
expires_module | Expires HTTPヘッダ |
filter_module | gzip圧縮送信(ファイル指定) |
log_config_module | アクセスログの収集 |
mime_module | MIME TYPEの設定 |
headers_module | HTTPヘッダ |
negotiation_module | Content Negotiation |
rewrite_module | Rewriteモジュール設定 |
unixd_module | User, Groupなど |
vhost_alias_module | Virtual host |
Webサイト公開フォルダの配置はhttpd.conf
で直接設定するよりも、vhosts.conf
で設定する方が安全である。
httpd.conf
における設定の上書きを可能にする。
<Directory />
Allowoverride All
Require all granted
</Directory>
httpd.conf
のvhost_alias_module
とhttpd-vhosts.conf
を有効にする。httpd-vhosts.conf
で公開フォルダのroot
を定め, Directory
のAllow
等を設定する。
<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>