第12回【とあるサーバの下学上達〜サイエンスプログレンス〜】

3月13日分のustream放送が録画できていなかったようです。申し訳ありません。
ちょっとずつ思い出しながら書いていこうと思います。
今回は、

コマンドの用法を知る
コマンド名 –help
例えば、lsコマンドのコマンド用法を知りたいとき、
toarusabanokagakujoutatsu-no-MacBook-701:~ kozue$ ls –help
ls: illegal option — –
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file …]

usageの所に、lsコマンドで使えるオプションが表示されます。fileを見るときにも使いますと表示されています。
ちなみに、-?でも同じような結果がでます。
toarusabanokagakujoutatsu-no-MacBook-701:~ kozue$ ls -?
ls: illegal option — ?
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file …]

例えば、cdコマンドの使い方を知りたいとき、はこんなかんじに使います。
toarusabanokagakujoutatsu-no-MacBook-701:~ kozue$ cd –help
-bash: cd: –: invalid option
cd: usage: cd [-L|-P] [dir]

次に、オンラインマニュアルを表示するmanコマンド
man [オプション] コマンド名、ファイル名など
例えば、
toarusabanokagakujoutatsu-no-MacBook-701:~ kozue$ man -f cat
cat(1) – concatenate and print files
git-cat-file(1) – Provide content or type and size information for repository objects
fc-cat(1) – read font information cache files

man 章番号 コマンド名
で、オンラインマニュアルの章ごとに表示できます。コントロール+Dで終了できますので、ぜひやってみてください。

マニュアルの日本語表示と英語表示を選択できます。
macだと対応がありませんでした!残念です…
ちなみに、こんなかんじで使います。
toarusabanokagakujoutatsu-no-MacBook-701:~ kozue$ echo $LANG

ユーザーを変更するsuコマンド
一時的にスーパーユーザになります
終了するときは(元のユーザに戻る)exitもしくは、コントロール+Dです。

別のユーザーになってコマンドを実行する sudo
sudo コマンド
sudo -u ユーザー名 コマンド
とかあります。
現在のユーザー情報を知る id
toarusabanokagakujoutatsu-no-MacBook-701:~ kozue$ id
uid=502(kozue) gid=20(staff) groups=20(staff),102(com.apple.sharepoint.group.2),101(com.apple.sharepoint.group.1),402(com.apple.sharepoint.group.3),12(everyone),33(_appstore),61(localaccounts),79(_appserverusr),80(admin),81(_appserveradm),98(_lpadmin),100(_lpoperator),204(_developer),401(com.apple.access_screensharing)
ちなみに、whoamiだと、ユーザー名を表示されます
toarusabanokagakujoutatsu-no-MacBook-701:~ kozue$ whoami
kozue
ちなみに、groupsだと、自分がどのグループにいるか表示されます。
toarusabanokagakujoutatsu-no-MacBook-701:~ kozue$ groups
staff com.apple.sharepoint.group.2 com.apple.sharepoint.group.1 com.apple.sharepoint.group.3 everyone _appstore localaccounts _appserverusr admin _appserveradm _lpadmin _lpoperator _developer com.apple.access_screensharing

こんなかんじです!
ustream放送がないのでぬけぬけでごめんなさい!

Emacsで読み取り専用で開いてしまったファイルを無理矢理書き込む方法

Emacsで読み取り専用で開いてしまったファイルを無理矢理書き込む方法。

こんにちは。岡田洋一です。春分の日も過ぎだんだんと春の訪れを感じるようになりました。皆さんはいかがお過ごしでしょうか。

さて私岡田洋一は、高城梢さんと拙いながらサーバ勉強会なるものを開催しております。最近はその中でEmacsについて取り扱いました。エディタは様々なものがありますが、サーバ管理者にとってのエディタはプログラマのそれと様相が違います。その違いとは何よりCUIで動くこと、ですね。ですのでvi系やemacs、BSD系での伝統的な(?)eeや最近ではnanoが用いられますね。

そんなemacsですがサーバ勉強会で偉そうにも教える側として、実はこっそりEmacsについて勉強してみました。
今回はその中で知った事についてメモしたいと思います。

Emacsでは読み込み専用ファイルを開くと、ミニバッファ上部のステータス表示部分が変化します。Screen Shot 2013-03-22 at 20.03.44

ファイルの変更を表す部分、通常は—と表されておりファイルの内容に変更があると**-となる部分ですね、ここが%%-となります。これは読み込み専用モードでファイルを開いている事を意味します。

Emacsで現在開いているバッファの読み込み専用モードか、書き込み可能なモードかを切り替えるには “C-w C-q” を使います。既に書き込みモードで開いている場合には読み込み専用モードに切り替えます。また読み込み専用モードであれば書き込み可能モードになります。

さて、通常Emacsでファイルを開いたときには書き込み可能モードで開きます。でも読み込み専用モードで開いてしまうことがあるるんですね。それはパーミッションが無い場合です。

  1. 対象のファイルを所有しているけれどuserのwが無い場合 ( 400 r–r–r– など)
  2. 対象のファイルのグループに属しているけれどwが無い ( 644 rw-r–r– など)
  3. 人のファイル全般 ( 600 rw—– など)

こういった場合にはEmacsは読み込み専用モードで開いてしまいます。
こういった場合、今まで自分が取ってきた手段というのは

shell> chmod u+w hoge; emacs hoge; chmod u-w;

というワンライナーでファイルを編集することでした。最後に再度パーミッションを落としているのは、そういうことが要求されるファイルがある、ということです。例えばsudoersファイルは440でなければならない、といった具合です。(とはいえsudoersであれば環境変数のEDITORをemacsにしてvisudoを用いる、というのが正攻法だったりします)
これは結構面倒だったので、今後は C-x C-q をする事で書き込み可能にすることができます。とても便利ですね。

ちなみにrootのファイルを一般ユーザで開いてしまった場合にはどうにもできません。こちらはこちらでプロセスの所有者を変える、ということができれば対処できそうですね。それについても分かる日が来れば良いですね。

NIS, LDAPを用いた複数の環境でログインシェルを変更する

NIS, LDAPを用いた複数の環境でログインシェルを変更したかった。

現在自分の環境ではLDAPを利用している。ログイン情報をLDAPサーバに集約できるので非常に便利。LDAPではログイン時にユーザ名、パスワード(ハッシュ)などの情報を各ホストに提供するのだけれど、その中にはログインシェルも含まれる。

ログインシェルといえばUNIX系でよく使われるcsh, tcsh、Linux系でよく使われるbash、また高機能シェルとして名高いksh, zshなどがある。自分はzshをメインのシェルとしているのだけれど、LDAPのログインシェルの情報をzshに変更するだけでは問題がある。

まず一つ目はフルパス表記での問題だ。
ログインシェルは通常フルパスで表記される。これはシェルの初回立ち上げ時に~/.cshrc, ~/zshrcといった環境ファイルを読み込ませ、その段階でパスがセットされるからだ。つまりログインシェルの情報を取得して起動させる段階ではパスが通っていないことが想定される。そしてこのフルパス表記がOS毎に違ってくる可能性がある、ということが問題の核だ。
このシェルの実体、バイナリの実体が配置される場所は大まかに以下のようになる。Linux系ではrpm, yum, aptなどのパッケージ管理ツールでインストールした場合の/usr/bin/、デフォルトで配置される/bin/、ソースからインストールされた/usr/local/binである。
対してFreeBSDの場合、tcshやcsh, shなどの元々インストールされているバイナリは/bin/sh, /bin/tcshなどに配置されるが、後から手動でインストールされたバイナリは/usr/local/binに配置される。zshやbash(FreeBSDではbashがデフォルトで入ってこない)は/usr/local/binに置かれている訳だ。
この問題に関して言えば、インストール時にバイナリの配置場所を/usr/bin, /bin, /usr/local/binのいずれかに統一してしまう、若しくはシンボリックリンクを統一された場所に配置する、という解決方法が考えられる。でもこれらの作業をそれぞれのホストでいちいち実行するのは億劫だ。

二つ目の問題はデフォルトでインストールされるシェルが少ないことだ。自分の環境では主にFreeBSD、またDebian系(Ubuntu)、RHEL系(CentOS)、さらにはMac OS Xと数種類のOSを利用している。その中でデフォルトでインストールされるシェル、となると実は結構少ない。FreeBSDではcsh若しくはtcshをデフォルトシェルにする事が多い。対してLinuxではbashがデフォルトシェルとなることがおおい。そして残念な事にはFreeBSD/Linuxに於いては(t)csh/bashがお互いにデフォルトでインストールされていない。
ということはbashならbashをLDAPのデフォルトシェルにしてしまって、bashの環境ファイルである.bashrcなどでzshを呼び出す、という事ができない。

以上の点を踏まえながら試行錯誤していった結果、「UNIX/Linuxの両方に入っているシェルを使ってログイン時にzshにしてしまう」という方法にたどり着いた。ちなみにそのUNIX/Linuxの各種OSの最大公約数と言うべきシェルはsh。
shとはThompson shellを意味し、bashの前身となったシェルだ。過去にはバックスペースすら無かった気もするけれど、カーソルキーで入力位置を変更できない、コマンド履歴が使えないというシェルの基本的な機能のみしか持っていない素朴なシェルだ。
(とは言え、過去のbashも同様でデフォルトではコマンド履歴なども使えなかった気がしてbashとshのデフォルト状態での違いがあまり無いような状態だったんだけれど、最近のbashは使いやすいシェルっぽくなってる)
さてLDAPではこのshをデフォルトシェルにし、shが立ち上がった後にzshを呼び出すようにしてみる。

shでログインされた際に呼ばれる環境ファイルは “.profile”ファイルである。”.login”かと思ったんだけれどこれはshだと実行されないしcsh系だった気がする。つまりsh系ではダメということ。
この.profileファイルには直接shに実行して欲しいことを記述する。以下に例を示す。

[ -x /usr/local/bin/zsh ] && exec /usr/local/bin/zsh
[ -x /bin/zsh ] && exec /bin/zsh

shらしい記述で条件式を書き、それぞれのバイナリが存在し実行可能であればexecしてやる。execでシェルを呼び出せばログインシェルが切り替わった動作になるのでCtrl+Dなどでシェルを抜けたときにzshを支えているshも一緒にexitしてくれる。つまりログインシェルがzshになったようにみえてshを意識することが無い。

以上で思っていたようなzshなどのパスが違う環境でログインシェルを統一する、ということが可能になった。

めでたしめでたし。

第11回【とあるサーバの下学上達〜サイエンスプログレンス〜】

こんばんは、高城梢です。
来週平成25年3月6日の放送はお休みとなります。ちょっと海外に行って参ります。

平成25年2月27日の放送は「diff,echo,umask,chmod」です。

diffコマンド
ファイル内容の相違を調べる
diff -i ファイル1 ファイル2
ファイル1とファイル2の何が違うのかを調べる
例えば、

no-MacBook-701:mydir kozue$ diff -i file3 file4.txt
9,13d8  行数を表している。dはデリートのd 左のファイルの9〜13行目と8行目をデリート処理しなさいということを示しています。
< aaaaa < bbbbb < aiueo < aiueo < -f  < これは、左のファイルから9〜13行目のこれらを省けば、一致しますということ。 それか、8行目を削除すれば一致しますということ。 diff -u ファイル1 ファイル2 ユニファイド形式というもの。マイナスはfile3のことプラスはfile4のことを指している。 toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ diff -u file3 file4.txt --- file3 2013-02-27 21:17:04.000000000 +0900 +++ file4.txt 2013-02-27 21:17:11.000000000 +0900 @@ -6,8 +6,4 @@ 前後の文字も表示してくれる マイナス(file3)を6行目からスタートして8行表示してます プラス(file4.txt)を6行目からスタートして4行表示してます asdjfkalfjgjeirow,f -aaaaa -bbbbb -aiueo -aiueo -f \ No newline at end of file マイナスとプラスで所属を示している ここでは、file3にaaaa〜fが所属しており、file4.txtに足りないということ toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ diff -u file3 file4.txt --- file3 2013-02-27 21:17:04.000000000 +0900 +++ file4.txt 2013-02-27 21:21:54.000000000 +0900 @@ -6,8 +6,6 @@ asdjfkalfjgjeirow,f -aaaaa bbbbb -aiueo -aiueo +hahihuheho -f \ No newline at end of file これだと、file3,file4.txtの両方にbbbbbがあることがわかる +hahihuhehoはfile3にはない diff ディレクトリ1 ディレクトリ2 ディレクトリの中を比較する 例えば、 -no-MacBook-701:nanaly kozue$ diff mydir mydir2 Only in mydir2: file1 Only in mydir2: file10.txt Only in mydir2: file11 Only in mydir2: file2.txt diff mydir/file3 mydir2/file3 11,13d10 < aiueo < aiueo < -f Only in mydir2: file3.txt Only in mydir2: file5.txt Only in mydir2: file6.txt Only in mydir2: file7.txt Only in mydir2: file8.txt Only in mydir2: file9.txt Only in mydir2: filex Only in mydir2: newfile only in は、このディレクトリにしかその(ここでは、ファイル)ものがありません < は上記と同じ ここでは、mydirのfile3の11行目〜13行目からこれらを削除する もしくはmydir2のfile3の10行目を削除する echoコマンド テキストをエコー表示する toarusabanokagakujoutatsu-no-MacBook-701:nanaly kozue$ echo this is sample this is sample echo 文字 > ファイル名
ファイル名に文字を追記できる
toarusabanokagakujoutatsu-no-MacBook-701:nanaly kozue$ echo abcde >file1

;を使うことで、ワンライナーできる(一行で複数のことができる)
toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ echo aaaa ; echo bbbb
aaaa
bbbb
fileの内容も変更できる
toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ echo aaa > file3 ; cat file3
aaa

umaskコマンド
パーミッションマスク値の設定
最初の設定のマスク値
toarusabanokagakujoutatsu-no-MacBook-701:nanaly kozue$ umask
0022
頭の0は考えないでOK
パーミッション777(読み書き実行全て許可)から022を引いたものがマスク値

ディレクトリが777ファイルは666から022を引いたものがマスク値
なので、ディレクトリが755 ファイルは644とデフォルトで設定される

umaskを変更してみる
toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ umask 021
これで変更される。試しに、echoコマンドでファイルを作成してみる
toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ echo abcde > file1
toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ ls -l
total 24
-rw-r–rw- 1 kozue staff 6 Feb 27 21:43 file1
-rw-r–r–@ 1 kozue staff 4 Feb 27 21:31 file3
-rw-r–r–@ 1 kozue staff 75 Feb 27 21:21 file4.txt
file1のパーミッションが変更された
オーナーの読み書き許可、実行不可、グループの読み許可、書き実行不可、そのほかのユーザーの読み書き許可、実行不可になる

先ほど設定したので、マスク値が変更されているのがわかる
toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ umask
0021
例えば、マスク値を444にしてみる
toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ umask 444
toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ echo abcde > file2
toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ ls -l
total 32
-rw-r–rw- 1 kozue staff 6 Feb 27 21:43 file1
–w–w–w- 1 kozue staff 6 Feb 27 21:45 file2
-rw-r–r–@ 1 kozue staff 4 Feb 27 21:31 file3
-rw-r–r–@ 1 kozue staff 75 Feb 27 21:21 file4.txt
file2のパーミッションが変更されたことがわかる。
全て、書きだけ許可で、読みも実行も不可
ちなみに、普通にクリックで開こうとすると注意がでて開けない
書き込み権限はあるので、追記してみる
toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ echo bbb >> file2
これで、追記完了
toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ ls -l
total 32
-rw-r–rw- 1 kozue staff 6 Feb 27 21:43 file1
–w–w–w- 1 kozue staff 10 Feb 27 21:47 file2
-rw-r–r–@ 1 kozue staff 4 Feb 27 21:31 file3
-rw-r–r–@ 1 kozue staff 75 Feb 27 21:21 file4.txt
file2のバイト数が増えているので追記が変更されていることがわかる。
このあと、マスク値を元に戻してもfile2のパーミッションは変更されない

chmodコマンド
アクセス権を変更する
パーミッションのことをモードともいう
ユーザ uオーナ、gグループ、oその他のグループ、a全ユーザ
オペレータ +モード追加、−モード削除、=モード設定
モード r読み込み、w書き込み、x実行、s SUIDビットSGIDビット、t Stickyビット

例えば、o+w その他のグループに書き込み権限を許可する
toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ chmod o+w file2
toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ ls -l file2
–w–w–w- 1 kozue staff 10 Feb 27 21:47 file2
最初から出ていたので変化しませんでした
詳細を表示してくれる -v その他のグループから読み込みと書き込みを削除する
toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ chmod -v o-rw file2
file2
macだと-vしても詳細がでませんでした
toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ ls -l file2
–w–w—- 1 kozue staff 10 Feb 27 21:47 file2
その他のグループから書き込み権限がなくなりました
-vが使えなかったので、ワンライナーを使いました
toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ chmod 664 file2 ; ls -l file2
-rw-rw-r– 1 kozue staff 10 Feb 27 21:47 file2
グループとその他のグループを書き込み権限だけにする
toarusabanokagakujoutatsu-no-MacBook-701:mydir kozue$ chmod go=w file2 ; ls -l file2
-rw–w–w- 1 kozue staff 10 Feb 27 21:47 file2

今回の内容はこんなかんじでした。もうすぐサーバをたてるようです!楽しみですね。
次回は、平成25年3月13日になります。6日はお休みです。ご了承ください。
それでは、次回もよろしくお願いします。
ustreamの放送内容はこちら  http://www.ustream.tv/recorded/29601343

TeamSpeak3のサーバで仮想サーバを追加する方法

TeamSpeak3のサーバで仮想サーバを追加する方法について。

TeamSpeak3のサーバではvirtualserverと呼ばれる仮想サーバ機能がある。これは旧来のTeamSpeak2にもあった機能で仮想的にサーバを増やす方法だ。デフォルト状態では一つのプロセス(実行中のTeamSpeak3サーバプログラム)が一つのTeamSpeak3サーバを提供している。TeamSpeakサーバを運営しているとチャンネルが増えすぎたので二つ目が欲しいなぁ、パスワードが掛かったサーバが欲しいなぁ、という要望が出てきたりする。

そういうときに、じゃぁ新しいTeamSpeak3サーバのプロセスを立てようか、という考えもあるのだけれど別プロセスより仮想サーバで立てる方がメリット色々。
まずはプログラム+configの位置を分けなくて良い事。別プロセスで管理する場合にはconfigを新たに書いてそれを読ませる必要がある。となると起動スクリプト(rcスクリプト)に手を加えるか、rcスクリプトを複製する必要がある。この複製というのはあまり良いモノでは無くて変更があったときに同期をとってやらないといけないだとか、プロセス名が同じだったりするのでkillallやpsが使いにくくなったり、/var/dbなサーバ用の領域にも気を遣って分けてやる必要がある。

そこでデフォルトで提供される機能が仮想サーバ、というわけだ。

この仮想サーバ、正直それほど使い勝手が良いとは思ってない。むしろ少し面倒くさいぐらい。ただ現行のTeamSpeak3はクライアント側に色々とGUIで作業できるようになってきていて、おかげで仮想サーバの運用も楽ちん。今回はそのサーバの立て方をたどってみる。

まず管理者でtelnetログインする。やり方については過去の記事を参照。

ログインが完了したら下記のようなコマンドを入力してやる。

shell> telnet ts.l2tp.org 10011
Trying 192.168.1.1...
Connected to ts.l2tp.org.
Escape character is '^]'.
TS3
Welcome to the TeamSpeak 3 ServerQuery interface, type "help" for a list of commands and "help <command>" for information on a specific command.
login serveradmin ABcdEfG12345
error id=0 msg=ok
servercreate virtualserver_name=3rd server virtualserver_port=9989 virtualserver_maxclients=10
sid=8 token=Jadfafda9asdfaf1234xkppEQcxbDSDFAdaQQPJKn1Z2 virtualserver_port=9989

以上でおしまい。本当に簡単だ。
コマンドはservercreateを使う。オプションとして

  • virtualserver_name
  • virtualserver_port
  • virtualserver_maxclients

辺りを与えてやると良い。この辺りのオプションは後ほどGUIから変更することができるので神経質にならず簡単な数値を入力すれば良い。名前、maxclientsは後から変更できる。maxclientsは多すぎるとエラーを起こすので作成時には10とかの小さな値で着くって置いた方が安全。portはGUIクライアントから変更できないのでここで決めてしまおう。

ポート番号に関して、今回自分の環境では、1番目の仮想サーバをデフォルトポートとしていたので、2番目、3番目はそれぞれデフォルトのポート番号に1ずつ足していった。

サーバ ポート番号
1番目のサーバ 最初から存在するサーバ 9987 (デフォルト)
2番目のサーバ 9988
3番目のサーバ 9989
4番目のサーバ 9990
5番目のサーバ 9991

コマンドを入れたらエラーが出ていないか確認する。自分の環境ではmaxclientsが多すぎたのでエラーを起こしてしまった。

servercreate virtualserver_name=3rd virtualserver_port=9989 virtualserver_maxclients=100
error id=2817 msg=max\sslot\slimit\sreached

エラーメッセージが既に見にくいので敬遠してしまいそうだけど、見てみればサーバのスロット数の上限に達しました、と書いてある。一つのライセンスではスロット数の上限が512なので運用中のサーバと合わせてかずに注意したい。

なお成功した場合、tokenと呼ばれる文字列が発行される。次のステップではこれが重要になるので必ず消さずにメモしておくように。

servercreate virtualserver_name=3rd server virtualserver_port=9989 virtualserver_maxclients=10
sid=8 token=Jadfafda9asdfaf1234xkppEQcxbDSDFAdaQQPJKn1Z2 virtualserver_port=9989

サーバの作成が成功したらクライアントで接続してみる。
今回のTeamSpeak3クライアントはポート番号を入力するところがない。代わりにサーバアドレスにコロンでポート番号を追記してやるスタイルだ。例えば ts.l2tp.org サーバのポート番号9988に接続したい時には “ts.l2tp.org:9988” と入力する。これで繋がるはず。

初回接続時にはserveradminの管理付与を促される。serveradminはCUIでのログインに使ったりするキーワードなので混乱してしまうんだけれど、ココで言うadminとはvirtual serverの server admin の事。CUIのコマンドからでもいけるのだけれどここでは簡単にtokenを使って管理者権限を付与する。
初回に接続するとtokenを入力してくれ、という画面が出てくる。ここで先ほどメモして置いた、仮想サーバ作成時に発行されたtokenを入力すれば良い。成功するとユーザ名の右側に光り輝くSの文字が付くはず。これでひとしきりいろいろな事がTeamSpeak3クライアント側のGUIから行うことができる。
ちなみに初回起動時に出てくるtoken入力プロンプトなんだけれど、後から出すこともできる。メニューのPermissionから “Use privilege key”でプロンプトが出てくる。

キャプチャ

Serveradminの権限をもらったら仮想サーバ名、スロット数の変更を行った。
仮想サーバのチャンネル一覧の一番ルートのチャンネルを右クリックし、Edit virtual server。ここから出てくる画面でそれなりの設定ができる。

以上で仮想サーバの作成方法はおしまい。

今回はCUIをできるだけ使わずにGUIからできることはGUIでできるようにしてみた。やれることの幅からするとCUIの方が断然多いんだけれど、いかんせんCUIの使い勝手が悪くまたマニュアルの整備具合も良いとは言いがたい。(とはいえ、それなりの情報量をもったPDFファイルが一緒に付いてきててそれを読めばある程度は分かるんだけれど、目的からコマンドを探すのが大変だったりしてあと一歩及ばず。)
CUIは補完機能はもとより、入力履歴、入力済み文字の修正が不可と一世代前のシェル。それでもBackSpaceが使えるのはすごく便利。

最後に今回の作業で参考にした本家のフォーラム

[Mini Tutorials] Virtual Server Management

 

以上。