Hatena::ブログ(Diary)

Magical Diary このページをアンテナに追加 RSSフィード

2011年02月13日

(新人向け) Unixオペレーションの注意点

主に新人向けとして、Unixサーバで作業をする際の注意点を書いておく。

ここに書いてある内容は絶対的なものではないし、会社や現場ごとにルールがあるので、適宜ルールに合わせて実践すれば良い。

ログを取れ

何をやったか、何をやらなかったか、というエビデンスのためにログは必ず残しておく。SSHクライアントによっては毎回自動的にログ取得する設定が可能なので、設定しておくと良いだろう。

f:id:hirata_yasuyuki:20110213210741p:image

作業後に問題が発生した場合に作業内容を確認するためにも使うため、必ずログは取得しておくこと。

(追記) 当たり前だが、コマンドとその出力をペアで取ることに意味がある。

set -x (set verbose) しろ

ログを取得しても、コマンドライン編集した際には以下のように非常に見づらいものとなってしまう。(がんばれば解析することは出来るが…)

ESC[0mESC[27mESC[24mESC[JESC[1myasu@kiki:~%ESC[0m cat /etc/ESC[Kpa^M
ESC[1mCompleting fileESC[0m
ESC[Jpam.dESC[27m/ESC[27m  ESC[27m  ESC[27mESC[JpasswdESC[27m  ESC[27m  ESC[27m
ESC[JpathsESC[27m   ESC[27m  ESC[27mESC[Jpaths.dESC[27m/ESC[27mESC[JESC[AESC[A
ESC[0mESC[27mESC[24mESC[0mESC[27mESC[24m^MESC[13Ccat /etc/paESC[KESC[0mESC[27m
ESC[24msswd^M
ESC[J##

set -x (bsh系)、set verbose (csh系) を実行することで、コマンド実行時には以下のように出力されるため、作業内容を確実に記録することが出来る。ただし、ワイルドカードの展開結果がそのまま表示されるため、実際に入力したコマンドそのものではない点には注意。

 +zsh:2> cat /etc/passwd

最初にやること

hostname

対象のホストであるか確認する。対象のサーバを間違えることは無いだろうと思いがちだが、ホスト間違いのオペレーションミスは意外に多い。特に本番機・検証機の両方にアクセス可能場合や、ホスト名が類似している場合 (ペアになっていて、www01, www02など) には要注意。

ifconfig | grep inet

少々特種な事例だが、同一ホスト名で他のサーバ (IPアドレス) に移転した (またはする可能性がある) 場合には、旧サーバで作業しているつもりで新サーバを変更してしま可能性がある。IPアドレスも確認することでこのようなミスを避けられる。

date

確認と言うよりは作業開始時刻を記録する目的ログを確認する場合にも役立つので、ログアウト直後にも打っておくと良い。

都度確認すること

pwd

破壊的な作業かつ相対パスで指定する場合など、作業ディレクトリ重要場合には、必ずカレントディレクトリを確認する。

date; command...; date

時間かかるコマンドの前後でdateを打っておくとログから実績時間が分かるため、後々役立つこともある。

バックアップを取れ

何かしらの変更をする際には、必ずバックアップを取得してから行う。

ファイル場合:

cp -p named.conf named.conf.20110101
ls -ltr named.conf*

crontabの場合:

crontab -l > crontab.20110101

会社や現場によってはバージョン管理システムを利用するなどのルールがあると思うので、その場合はそれに従えば良い。

diffを取れ

編集した内容はdiffを取り、意図した編集けが行われているか確認する。ログ上に変更点を明示的に残す目的もある。

例:

diff -u named.conf.20110101 named.conf

バージョン管理システムを利用している場合は、rcsdiff, svn diffなど適当な手段を使うこと。

同一性を確認しろ

データを他から移動する際には、破損の可能性を考慮して同一性を確認する。(FTPでうっかりASCIIモード転送してしまうというのは良くあることだ。)

md5 (md5sum), sha1 (sha1sum), sha256 (sha256sum) などの高度なハッシュ値を求めるコマンドが利用できればそれを使えば良いが、無ければcksumでも構わない。(オペレーションミスを防ぐレベルなら十分。) なお、cksumはその名前に反して単純なチェックサムではなくCRC値を求める。

右クリックペーストするな

TeraTermPuTTYなど、Windows用のSSHクライアントでは右クリックペーストすることが出来るが、この機能は避けた方が良い。右クリックをする際に誤ってマウスを動かしてしまうと、思わぬところをコピーペーストしてしまからだ。

右クリックによるペースト機能は向こうにしておいて、Shift+Insペーストするのが一番安全だ。

f:id:hirata_yasuyuki:20110213210742p:image

万全を期すなら、クリップブックでクリップボードの内容を常時表示させておくと良い。クリップブックは Win+R → clipbrd で起動することが出来る。

追記

右クリック

以前はTeraTerm右クリックしたままマウスを動かすと、そのときに選択された領域がコピーペーストされて大惨事… だったが、今は "Select only by L button" がデフォルトなので以前ほどの危険ではないようだ。(それでも、右クリックを避けた方が良いのには変わらないが。)

"hostname" or "uname -n"

ブックマークでも指摘を頂いた通り、一般ユーザならどちらでも良いが、rootなら "uname -n" の方が安全。"hostname" コマンドだと、オペレーションミスホスト名を変更してしま可能性がある。

クリップブック

Vista以降には無いらしい。適当なフリーソフト探すしかないのか… (thanks id:migimigi, id:nomber3)

ブックマークに反応

(id:pratto) hostname,date,whoamiはプロンプトに出していても、オペレータには作業前に打たせてる。打たせて、出力した文言を確認させてる。そこまでが手順。奴ら、プロンプトなど見ないし、そういう意味なことすら理解できないし。

pwd を打たせるのはこれと同様で、意識して確認するという動作が重要から。指差し確認・声に出すのも効果あり。

(id:dekaino) history知らないのかな? GNU screenも知らないんだろうな

こういう的外れなことを言われても困るのだが、historyで間に合うような用途ならそれを使えばいいし、GNU screenインストールして良いならそうすれば良い。まずはもう一度、最初段落を読んで欲しい。(想像出来ないかも知れないが、世の中にはGNU screenが入っていないシステムも、インストールが許されないシステムもあるのだ。)

nisshisannisshisan 2011/02/14 18:43 次年度からUnixでの開発に回るかもしれないんで・・メモφ(`д´)

laclefdorlaclefdor 2011/02/15 02:12 ログは個人で取るよりシステム側で対応すべき。もともと危険な作業はsudoしなきゃ出来ないようにして、sudoの記録をログサーバーへ送る。

あと、大規模環境ではhistoryはあえて取らない。そもそも数が多すぎて、どこのサーバーで何をやったかなんてホスト毎にトラックすること自体が無理。それに、他人にhistoryを閲覧される危険性もある。

dekainodekaino 2011/02/15 08:27 GNU screenがインストールできないシステムより、SSHクライアントをインストールできないWindowsマシンの方が容易に想像できるので…
TratermとかPuTTYとかのインストールが許されるゆるい環境なのにGNU screenだけNGとか不思議なポリシーを持ち出されてもねえ。

汎用性を言うなら、コンソールから直接ログインした場合で使えない、windowsからsshログインするように特殊条件でのみ可能な解決手段を提示するのは筋悪いと思うし。
的外れついでの老婆心ながら「lastcommコマンドも知らないんだろうな」というのも付け加えておきます。

rok-sanrok-san 2011/02/15 17:54 ログは script(1) で取ればいいのでは。 バックアップとか差分とかは、作業ファイルが対象なら rcs(古っ!) とかバージョン管理システムに頼った方がいいよね。

nsymtksnsymtks 2011/02/16 22:25 idを叩くのも必須ですかね。特にsuした後とか。

mitsuki0820mitsuki0820 2011/02/18 02:43 hostnameはホスト名を変えてしまう危険があるので止めたほうが良いかと。
uname -nですね。

mitsuki0820mitsuki0820 2011/02/18 02:44 ごめんなさい、書いてました。

minus_zerominus_zero 2011/06/18 07:25 いまさらすみませんが、GNU screenがインストールできないシステムのほうが、SSHクライアントをインストールできないWindowsマシンより容易に想像できます。
というかSHHクライアントは個人が勝手にインストールするのではなく、業務のために予めインストールされているものですし・・
(unix構築を生業にしているのに、会社間の柵でwindowsプリインストールマシンしかクライアントの選択肢が無いというのはごく当たり前ですから)
お客さんの本番環境とか、それを想定したテスト環境とかにscreen勝手に入れるの?そもそも組み込みとかscreen入れる云々以前でしょうに何を言っているのだろうか?

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。