コマンドラインから複数のファイルの文字列を置換(mac)

複数のファイルをコマンドで一括置換をする方法。

[shell] $ grep -l ‘置換前文字列’ 対象のファイル | xargs sed -i ” ‘s/置換前文字列/置換後文字列/g'[/shell]

macではsedがBSD版のため、sedのiオプションに空文字を渡す必要がある。これはバックアップ用拡張子で、例えば[shell] sed -i ‘.bak'[/shell]とすると 対象ファイル.bak というバックアップファイルが作成される。iオプションにから文字を渡すことで、既存のファイルに上書きさせることができる。

参考

vimのカラーを変更

vimのカラースキームの変更方法

vimでコマンドからカラースキームを変更します。

・カラースキームの変更
color-nameの部分をカラースキームの名称に置き換え。

:colorscheme color-name

・背景色の変更

:set background=light
:set background=dark

 

ssh-agent でよく使うコマンド

ssh-agentで使用するコマンドを忘れるのでメモ。

秘密鍵の登録一覧をみる

[shell]
$ ssh-add -l
[/shell]

秘密鍵の登録

[shell]
$ ssh-add hoge
[/shell]

秘密鍵を引き継いでssh接続

[shell]
$ ssh -A hoge@huga
[/shell]

macでkeychainに登録

[shell]
$ ssh-add -K hoge
[/shell]
macOSでは ~/.ssh/configに以下を追記。
[shell]
AddKeysToAgent yes
UseKeychain yes
[/shell]

その他

[shell]
$ ssh-add -l
Could not open a connection to your authentication agent.
[/shell] って怒られる。
ssh-agenが起動していない可能性。

[shell]
$ eval `ssh-agent`
[/shell]
で起動。

参考

  • https://h2ham.net/macos-sierra-use-keychain
  • https://qiita.com/isaoshimizu/items/84ac5a0b1d42b9d355cf

コマンドラインから.htpasswdを作成

htpasswdコマンドを使って.htpasswdファイルやパスワードを作成できる。

[shell]
// パスワードを標準出力。.htpasswdにコピペで使用可。
$ htpasswd -bn username password

// 既存の.htpasswdに追記。
$ htpasswd -b /path/to/.htpasswd username password

// 新規で.htpasswdを作成。
$ htpasswd -bc /path/to/.htpasswd username password
[/shell]

CentOS6のcron設定

自動で任意のプログラムを起動させるcronの設定方法。

cronの起動と確認

crondが起動しているか確認。
[shell]
$ service crond status
crond (pid 18963) is running… // 起動中
[/shell]
起動していなかったら起動させる
[shell]
$ sudo service crond start
[/shell]

システム起動時にcrondが自動起動するか確認
[shell]
$ chkconfig –list crondcrond
0:off 1:off 2:on 3:on 4:on 5:on 6:off
[/shell]

cronの設定

以下のコマンドを叩くと現在のユーザーのcron設定編集画面が開く。
[shell]
$ crontab -e
[/shell]
※ crontab -e を使用すると crontab -r(設定を全て消す)と誤打するからダメという意見もあるけどお好みで。http://d.hatena.ne.jp/ozuma/20120711/1342014448

cron設定編集画面
[shell]
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

* * * * * command
* * * * * command
[/shell]

基本的には上記のように書いて行く。

SELL: cronで使用するSHELL
PATH: コマンドに通すPATH
MAILTO: cronが動作した場合に送るメールアドレス。””にしておくとどこにも飛ばさない。
HOME: コマンドを動作させるディレクトリ。
ここまでは /etc/crontab に書かれている設定を引き継ぐため、不要なら書かなくてもOK。

* * * * *: 分 時 日 月 曜日 の順で設定。*は全て。
command: 起動するコマンド。複数指定する場合は;で区切る。
例えば
[shell]
00 12 * * 2 php hoge.php
[/shell]

MAILTO、HOMEなどの設定はどこにでも記述ができて、それ以下のコマンドに反映されるため以下のようにしておくと18時の実行結果のみメールで送られてくる。
[shell]
MAILTO=””
00 12 * * * php hoge.php
MAILTO=test@example.com
00 18 * * * php hoge.php
[/shell]

cronでコマンドが実行されない

ログを確認
[shell]
$ less /var/log/cron
[/shell]
cronが実行されるごとに最終行に追記されて行く。ただしここに書かれているのはcronがコマンドを叩いたかのみで、ちゃんと実行されたかどうかやプログラムがエラーを吐いた等は記載されない。
※ /etc/rsyslog.conf でcronがコメントアウトされている場合はログが吐かれないので注意。

プロブラムのエラーを確認したい場合はcrontabで以下のように任意のファイルに出力を保存させる。
[shell]
00 12 * * 2 php hoge.php >> /tmp/crontest.txt 2 >> /tmp/crontest.txt
[/shell]
コマンド 1 >> ファイル名 でコマンドの標準出力をファイルに追記する。1は省略可能。2 >> ファイル名とした場合は標準エラー出力を保存。ちなみに コマンド> ファイル名 とすると追記ではなく上書きになるので注意。コマンド 2>&1 >> ファイル名 とすれば標準出力とエラー出力を合わせてファイルに保存できるので記述が冗長にならない。

コマンドは起動していたがcronでの動作時のみエラーが出る

先日これでとてもハマった。crontabに記載したコマンドをターミナルから叩くと無事に動作するが、cronで起動するとエラーが出る。
このときはnodeでSelenium+PhantomJSを動かすプログラムを実行していたのだけれど、原因は PhantomJS にパスが通っていないことだった。
解決法は
[shell]
$ echo $PATH
[/shell]
で現在反映されているのPATHを出力して、cronの設定のPATHの項目にまるっとコピーした。

今回はこれで解決したが、他にも標準出力が上限に達してエラーがでることもあるらしい。
https://kamiclog.wordpress.com/2012/08/17/cron%E3%81%8C%E9%80%94%E4%B8%AD%E3%81%A7%E6%AD%A2%E3%81%BE%E3%82%8B/

参考