はじめに
この記事は、僕がやらかしたミスと、それをどう解決したか書いたものです。
やらかしたミスは、タイトルのとおりです。
環境
OS: Linux Mint 20.2
ことの発端
僕「MATEパネルに『コマンドアプレット』ってものがあるのか」
僕「さっそく使ってみよう」
僕「なるほど、コマンドを設定するとそのコマンドを一定間隔で実行して、その結果を表示してくれるのか」
僕「……」
僕「これ、 shutdown コマンドを設定したらどうなるんだろう?」
僕「試してみよう」
アプレットの設定のコマンド ❎ |
---|
コマンド: shutdown
|
僕「あれ?何も表示されない」
僕「さすがにシャットダウンはできないようになってるのかな?」
アプレットの設定のコマンド ❎ |
---|
コマンド: shutdown now
|
PC「プツンッ」
僕「あ」
僕「…………」
僕「そういえば、アプレットって電源落としても残ってるよな……」
(やらかしに気づき冷や汗が湧き出る)
僕「と、とりあえず起動してみよう」
(ログイン)
PC「プツンッ」
僕「あ(絶望)」
状況
コマンドアプレットに shutdown
を設定したときに何も表示されなかったのは、 shutdown コマンドのメッセージが標準エラー出力に出力されていたからであり、アプレットに表示されないだけでしっかり機能していました。つまり、この時点で、ログイン1分後に自動でシャットダウンされる爆弾は完成していたのです。
しかし、そんなことは露ほども考えなかった僕は、コマンドに now
を追加してしまい、1分のわずかな猶予すら消え失せ、ログイン直後にシャットダウンを開始する悪魔が誕生してしまいました。そして、ログイン不可能な状態に陥ってしまったのです。
解決
とりあえずGoogleで検索してみましたが、有力な情報は見つかりませんでした。こんな馬鹿なことをしている人は、他にいないのでしょう。
誰かに聞くのも恥ずかしいので、自力での解決を試みます。
1. 他のユーザを経由してログイン
MATEパッドのアプレットはユーザごとに設定する機能なので、他のユーザでならログインできます。
ログインできたら、シェルを起動して、 su コマンドで問題のユーザにログインします。
他のユーザ:~$ su - 問題のユーザ
パスワード:
問題のユーザ:~$
他のユーザがなければ、 Ctrl
+Alt
+F1
を押して、仮想コンソールからログインしてもいいかもしれません。
要は、GUIでログインしなければいいのです。
2. grepで検索
次に、 grep コマンドで問題の原因となっている shutdown now
を検索します。
すると、次のようになりました。
問題のユーザ:~$ grep 'shutdown now' -rl . # -r: 各ディレクトリ下を再帰的に検索, -l: ファイル名のみ出力
./.bash_history
./.config/dconf/user
問題のユーザ:~$
2つのファイルで検出されました。
.bash_history はBashの履歴ファイルなので、 ~/.config/dconf/user にコマンドアプレットに設定したコマンドが保存されていると考えられます。
3. お好きなエディタで shutdown now
を削除
あとは、見つけたファイルから shutdown now
の部分を削除すれば解決です。
僕は Vim を使って編集しました。
問題のユーザ:~$ vim ~/.config/dconf/user -c 's/shutdown now/echo nyaaan/' -c wq
問題のユーザ:~$
結果
おそるおそるログインしてみると……
うまく変更されていました。
やったね。
まとめ
気軽に shutdown コマンドを打たないようにしましょう!
おわりに
とほほ…
もう shutdown コマンドはこりごりなーん…