起動中のサービス確認
systemctl list-units
でsystemdが管理するユニットを表示する。--type
にはservice
のほかにsocket
, mount
, device
を指定できる。
systemctl list-units --type=service
ファイルの文字コード変換
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 -print0
、xargs -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