Linux

linuxコマンド備忘録

ファイルの文字コード変換

iconvコマンドを使うやり方。オプションは、-fが元の文字コード、-tが変換する文字コード、-oが出力するファイル名。
ex.) example.txtをsjisからutf-8にする。

$ iconv -f sjis -t utf-8 example.txt -o example.txt

xargsの引数の場所を指定する

通常はコマンドの最後の引数になるが、-iオプションを使うと、{}に引数を割り当てられる。
ex.)パスにoriginalを含むファイルを../bkにコピー。

$ find . -type d | grep original | xargs -i mkdir -p ../bk/{}
$ find . -type f | grep original | xargs -i cp -p {} ../bk/{}

空白を含むファイルのfind

findの結果に対してxargsで処理をさせるときに、ファイル名に空白を含む場合、エラーが発生する。
(空白を複数ファイルの区切り文字として扱うため)
オプションでfind -print0xargs -0とすると、区切り文字を空白でなく、\0で扱うため、問題を回避できる。

$ find . -type f -print0 | xargs -0 md5sum | sort

コマンド繰り返し

コマンドをsleep秒ごとに繰り返す。
ctl + cで終了。

$ while true; do [コマンド]; sleep 1; done;

cronでsudoを許可

デフォルトは、cronの処理中でのsudoは許可されていない。
Defaults requirettyをコメントにすると、許可される。

$ sudo visudo

#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
#         You have to run "ssh -t hostname sudo <cmd>".
#
#Defaults    requiretty

psからプロセスをkill

ex.) tomcatをkill
pgrep:プロセスidをかえす
--no-run-if-empty:引数がない場合、実行しない

$ pgrep -f tomcat | xargs --no-run-if-empty kill -9

psの結果からgrepを除く

ex.) tomcatプロセスだけを表示

$ ps -ef | grep tomcat | grep -v grep

公開鍵作成

ex.) rsa方式暗号方式で鍵を作成

$ ssh-keygen -t rsa

公開鍵は認証側サーバのauthorized_keysに追加。
.sshは権限700、authorized_keysは権限600とする。
バッチ処理等でssh接続を使う場合、パスフレーズの入力を求められて動かなくなるので、特別な理由がない限り、設定しないほうがいいと思う。

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ cat id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

ホストキーの削除

sshログインするとき、接続先サーバのホストキー(公開鍵のフィンガープリント)を保存し、照合するので、接続先サーバのIPアドレスが変わったりすると、不一致になり、sshログインできなくなる。
そんなときは、ホストキーを削除すると、再度ログイン可能になる。

$ ssh-keygen -R [ホスト名]

ディレクトリを再帰的にgrep

ex.) カレントディレクトリ以下のディレクトリのファイル「*.html」から文字列「height」を含むファイルを探す

$ find . -name "*.html" | xargs grep height