【Linux】1つのターミナル内で複数ターミナルを操作できるtmux

最近までしらなかったけど、こんなに便器なソフトがあるんですね。
・ターミナル上でターミナルを起動するから、セッションが切れても処理が続行
・めちゃくちゃ機能が豊富
・セッションを保存できるので、再接続時に作業をそのまま続行できる

viのイメージと近くて、コンソール操作モードとコマンドモードを行き来する感じ。
コマンドモードへは「Ctrl+B」で移行する。tmux自体を抜けるときは「Ctrl+D」で復帰は「fg」。
初心者のぼくでも便利に扱うことができる最低限覚えておくと便利なコマンドをご紹介しますネ。

・セッション開始

・セッション一覧

・作業中セッションを開始

・コマンドモード「Ctrl+B」になってから

キー操作 説明
? ヘルプ
: コマンド入力モード
$ セッション名変更
下方向に画面分割
% 右方向に画面分割
:set synchronize-panel on ブロードキャスト操作ON
:set synchronize-panel off ブロードキャスト操作OFF
矢印キー ペイン移動
{ 操作対象ペイン閲覧
スペース ペイン整列
z 操作対象ペインの最大化(戻るのも同じ)
{ 前方向ペインと入れ替え
後方向ペインと入れ替え

いままで、複数コンソールを1つ1つ立ち上げてたけど、もうそんなことはしない!

【Postfix】「postfix[13057]: fatal: parameter inet_interfaces: no local interface found for ::1」エラーでPostfixが起動しない

新しいサーバに正常起動しているPostfixのmain.cfを移植してきたがPostfixが起動しない・・・

interfaceにまつわる設定が怪しいらしい

localhostなので、hostsを見てみる。

そういえばこいつはipv6を無効にしていたんだっけか

hostsのipv6の行をコメントアウトしてみる。

無事起動した!

【Linux】nfsサーバのhardマウントとsoftマウント

nfsサーバのマウント時の方式として、hardマウントとsoftマウントがある。
デフォルトはhardマウント。ちょっと違いを整理したよ。

マウント方式 特徴
hard
intrオプションなし
・nfsサーバが応答するまで待つ。例えば、nfsサーバ通信段時に、dfコマンドを実行するとコマンドが返ってこなくなる。
・アプリケーションなどから、nfsマウント領域に対して、I/Oを発生させる仕組みがある場合、ハングしているように見える。
hard
intrオプションあり
・基本的に上記と同様
・ハング時に、SIGHUP、SIGINT、SIGQUITシグナルを送ることで、I/Oを中断できる。(Ctrl+Cで抜けれる)
soft ・nfsサーバが応答しない場合、タイムアウト時にエラーとなる。
・タイムアウト値は、timeoオプションで指定する

・基本的には、データ不整合を防ぐため、hardマウントが推奨される
・softマウントの場合、例えば、アプリケーションでDBに書きつつ、nfs領域にファイルライトがある処理があるとすると、DBには書いたけど、nfs領域にはファイル書けなかったという、不整合状態が起きてしまう(それを考慮されてアプリならOK)
・デフォルトはhard

【Linux】yumコマンドでバージョン指定してインストール

例えば、MySQLをインストールしたいときに、以下の場合だとマイナーバージョン22がインストールされる。
でも、バージョン21をインストールしたいときとかあると思う。そんなときの方法

【Linux】コマンド結果を改行させない

例えば、コマンド実行結果を「時間 結果」みたいな出力方法をしたいとき、こんな感じだとちょっとカッコ悪いし、後から整理しにくかったり。

trコマンドで改行コード\nを置換することでいい感じになるよ。

echoの改行なしは、-nオプションで。

こっちの方がスマートかも。

【Ubuntu】Ubuntu18.04にdjango環境をインストール

最近、pythonの勉強をし始めました。
ぼくは、Windows10のWSLをインストールしてそこを開発環境にしてたりするよ。

ブラウザで「http://localhost:8080/admin」へアクセス

createsuperuserで作成したユーザでログイン

【Linux】公開鍵認証のしくみ

いままでなんとなくだったものをちゃんと知識として定着させようシリーズ。
(公開鍵認証ってなんだっけなんていまさら言えないし・・・)


まず事前準備として、クライアントにてキーペアを作成し、サーバへ公開鍵を送る
クライアントでssh-keygenをして、サーバのauthorized_keysに公開鍵を登録してあげるイメージ


① クライアントはサーバに対して、ログインを要求する
② サーバは乱数を生成し、クライアントの公開鍵で暗号化する
③ ②と同時に、サーバは乱数からハッシュ値を生成する
④ サーバは暗号化データをクライアントへ送信する
⑤ クライアントは暗号化データを自身の秘密鍵で復号する
⑥ クライアントは復号した乱数からハッシュ値を生成する
⑦ クライアントはハッシュ値をサーバへ送信
⑧ サーバは自身が生成したハッシュ値とクライアントから送られてきたハッシュ値とを比較
⑨ ⑧がOKであれば、ログイン要求を許可し、接続が確立

やっぱ、めんどくさくても絵描かないとダメだね。

【Linux】シェルにてスペースが含まれている文字列を1行として扱う

以下のようなファイルがあるとすると

シェル内でスペース区切り文字を読み込むとスペースで区切られてしまう

IFS(Internal Field Separator)の環境変数に区切り文字を指定する。
環境変数設定前に現在の状態を保存し、処理終了後に元に戻す。

という感じで。

【Linux】ログローテーションを手動実行

テスト実行

手動実行

※この方法の場合、/etc/logrotate.confで定義したオプションは無視される compless、dailyなど

【Linux】while read lineでsshコマンドを実行するとループしない

5行のファイルを読み込んでecho出してみると普通にいける

ssh経由でechoしてみると5行読み込んでいるはずが、1行だけ読み込んで抜けてしまっている

対処法其の一 「for line in cat readfile」でよみこむ

対処法其の二 「ssh -n」オプション(バックグラウンド実行)を使う

どうやら、sshコマンド実行時に標準入力が切り替わり、ローカルホストからの標準入力を停止し、リモートホストからの標準入力を受け付けるみたい。
while read line実行時は、ループ処理開始前にファイルを読み込み、その中でsshコマンドを実行、その後再びreadコマンドを実行する際にファイルが既に閉じられているからループを抜けてしまうみたい。

参考
http://www.m-bsys.com/error/whileread-ssh