sshdが起動しない

AWS EC2において表題の件に陥った。

■ 環境

  • AWS EC2
  • Amazon Linux

■ 接続できない

「SSHで接続できなくなった」

と相談を受けた。話を聞いてみると「/var を全て削除した」という事をやったらしい。状況がおかしいのでManagementConsoleからインスタンスを再起動してみたりもした。とのこと。

該当のインスタンスを停止し、EBSをデタッチ。別途復旧用のインスタンスを起動し、デタッチしたEBSを復旧用のインスタンスにアタッチ。復旧用インスタンスにSSHでアクセスし、アタッチしたEBSを`mount`する。そして中を確認した。

ログファイル等を見ているとsshdが起動した形跡がない。”/var/log/secure“が空っぽのままであったので”/etc/init.d/sshd“にログを仕込む。先ほどの手順を逆に行い、該当のインスタンスを起動してみるも、やはり`ssh`での接続はできなかった。

再度復旧用のインスタンスでEBSを`mount`して仕込んだログを見ると下記のメッセージが出力されていた。

failed to run commands: exit status 255
Missing privilege separation directory: /var/empty/sshd

とりあえず該当のディレクトリを作成し、再度インスタンスを起動したところ`ssh`での接続ができるようになった。

念のため、”openssh-server“を入れ直すことにしたのだが、”/var“を削除したことによって`yum`のデータベースも削除されてしまったのだろうエラーとなる。ので見た目だけではあるがインストールした。

$ sudo yum install openssh-server

他にもエラーが残っている気がするが、とりあえずの復旧としては終了。

以上。

apt-get upgradeできない

表題の通り。

■ 環境

  • Ubuntu 16.04

■ apt-get upgrade

とある環境で、下記のようなメッセージが出力された。

$ sudo apt-get upgrade
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
$

誰かが実行したのか?不明だが確認することに。

プロセスを確認したところ、過去に実行されたまま放置されているプロセスが存在した。

$ ps -ef | grep apt
root       654 31494  0 11:19 pts/1    00:00:00 grep --color=auto apt
root     23198     1  0 Nov15 ?        00:00:00 sudo apt-get upgrade -y
root     23199 23198  0 Nov15 ?        00:02:39 apt-get upgrade -y
$
$ sudo kill 23198
$

プロセスを`kill`し再度実行。

$ sudo apt-get upgrade
E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.
$

出力されたメッセージの通り実行すると、過去の実行したまま入力待ちの状態であったようだ。

$ sudo dpkg --configure -a

最後に再度`upgrade`を実行する。

$ sudo apt-get upgrade

以上。

デスクトップの表示オプション

Macにおいて知らなかったのでメモ。

■ 環境

  • Mac OSX El Capitan

■ 表示オプション

デスクトップで右クリックをすると、下図のようなデスクトップの表示オプションが表示される。

アイコンのサイズやグリッドの間隔、文字の大きさ等を変えられる。自身の場合は上図のように設定してみた。デスクトップは作業中の一時的な場として使用しているので、普段からそれほど使用していないのだが、新たにファイルを置いたりした場合にグリッドからズレているので「整頓」したりしなければいけないのが面倒であったのだが、この「表示順序: グリッドに沿う」を選択したら幸せになれた。

以上。

Posted in: Mac | Tagged:

cutで変数から切り出す

shellスクリプトにおいて表題の通り。

■ 環境

  • sh
  • Linux

■ cut

shellスクリプト内で変数の一部を切り出したい。”.“や”“などデリミタがはっきりしている変数の内容であれば楽なのだが今回は「3文字目から2文字」を抜き出したい。いわゆる”substr“的なことをやりたかった。`cut`でできるようだ。

$ echo "123456789" | cut -c '7-8'
78
$

上記のように切り出すことができる。

$ echo "123456789" | cut -c '3-7'
34567
$

下記のようなことも可能である。

$ echo "123456789" | cut -c '3'
3
$ echo "123456789" | cut -c '3,6'
36
$

以上。

ファイルが0byteでないかチェック

shellスクリプトにおいて表題を行いたい。

■ 環境

  • Linux

■ if

スクリプトの中で、ファイルが”0byte“であるかどうかチェックを行いたい。普段使う`if`での条件には、対象がファイルやディレクトリかであるのチェックである”-f“とか”-d“といったものを使っていたのだが、対象のファイルが存在しかつ”0byte“ではない、ということをチェックしたかった。`man`で見ると下記の通り。

$ man test
  :
       -s FILE
              FILE exists and has a size greater than zero
$

やりたいことそのままのオプションがあった。

以上。