先のFreeBSD 9.0 をインストールしてみたからの続きの記事になります。
FreeBSDのインストールを終えたら、最初になにをやっておいた方が良いかを簡単に解説したものです。
さくらのVPSなどのレンタルサーバーで利用している場合、インストール完了時点で、サーバーが公開されていますから、十分な注意が必要です。
( 本記事は、FreeBSDのバージョン 8.x / 9.x に対応しています。)
基本的にやることは、Linux系の以下の記事で書いている内容と、大差ありません。
[ CentOS版 ]
・yum を使って システムアップデートを行う (自動化も)
・評判のさくらのVPSを使うときに最初にやっておきたいこと(CentOS編)
[ CentOS版(CloudCoreバージョン) ]
・評判のCloudCore VPSを使うときに最初にやっておきたいこと(CentOS編)
[ Scientific Linux版 ]
・評判のさくらのVPSを使うときに最初にやっておきたいこと(Scientific Linux編)
さくらインターネットのVPS ( さくらのVPS )を試してみたい方は、さくらのVPS ページ
※お試し期間中は、OP25B設定、データ転送帯域に制約がありますから注意してください。
FreeBSDで最初にやっておきたいこと
さくらのVPSなどのレンタルサーバーでFreeBSDを利用する場合、自宅サーバーと違って、既に外部に直接つながった状態ですから、まず、セキュリティ面の強化とサーバー設定をする必要があります。
ここでは、FreeBSDの初期状態から、各サーバー系をインストールする手前までにやることを記述してみます。
FreeBSDを最新にアップデートする。
さくらのVPSなどのレンタルサーバーで提供されているFreeBSDは、最新版では無いことが多いです。
( 現在(2012.02.02)、さくらのVPSで提供しているFreeBSD のバージョンは、8.1 (64bit版) となります。)
ここでは、FreeBSD 8.1 がインストールされているものとして最新バージョン 9.0 へアップデートしてみます。
まずは、FreeBSD 8.1 に対して提供されているパッチをすべてインストールします。( つまり、8.1を8.1での最新版にします。 )
$ freebsd-update fetch
...
$ freebsd-update install
...
$ |
続けて、FreeBSD 9.0 へ メジャーバージョンアップ します。
RHEL5 (Fedora Core 6 ) → RHEL6 (Fedora 12/13 ) と、ベースのFedoraのバージョンがあがり、yumによるアップデートじゃできなくなったようですね。
Fedaaは、多少の問題はあれ、
Fedora Core 6 → Fedora 7 → Fedora 8 → Fedora 9 → Fedora 10 → Fedora 11 → Fedora 12
とアップグレードできたみたいですから、できなくはないのかもしれませんが、CentOSでも警告しているように、かなりリスキーのようです。
$ freebsd-update -r 9.0-RELEASE upgrade Looking up update.FreeBSD.org mirrors... 4 mirrors found. ... The following file could not be merged automatically: /etc/hosts Press Enter to edit this file in vi and resolve the conflicts manually... # ここでEnterを入力するとviが開きます。マージできなかった/etc/hostsの内容を確認することができます。 # viを終了すると、以下のメッセージが表示されます。 Does this look reasonable (y/n)? y ... # 以降もアップグレードによる自動更新できないファイルについて確認のメッセージが表示されます。 # ほとんどは、各サービスの設定ファイルでしょう。問題となりそうなファイルがあれば、そのファイル名を控えておくようにしましょう。 ... $ freebsd-update install Installing updates... ... Kernel updates have been installed. Please reboot and run "/usr/sbin/freebsd-update install" again to finish installing updates. # ここで、システムリブートして、再度、freebsd-update installを実行してください。。。というメッセージです。 # 問題なければ、すぐにrebootします。 $ reboot ... # システムリブート後、ログインし、再度、freebsd-update installを実行します。 ... $ freebsd-update install Installing updates... Completing this upgrade requires removing old shared object files. Please rebuild all installed 3rd party software (e.g., programs installed from the ports tree) and then run "/usr/sbin/freebsd-update install" again to finish installing updates. # 最後にバージョンの確認です。 $ uname -a FreeBSD hoge.example.com 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Tue Jan 3 07:15:25 UTC 2012 root@obrian.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386 |
ここでは、まず、現在のCentOSのバージョンを確認した後、yum updateでシステムのアップデートを実施しています。
アップデート完了後、再度、現在のCentOSのバージョンを確認し、更新されていることを確認しています。
もし、/var のパーティションに空きがない場合で、別のパーティションに空きがあるなら、ディレクトリを指定すればOKです。
$ freebsd-update -r 9.0-RELEASE upgrade -d /tmp/updadate |
SSHでログインするためのユーザを追加する。
ここでは、SSHで唯一ログインを許可するようにしたhogeユーザを追加してみましょう。
$ adduser -v Username: hoge Full name: hoge Uid (Leave empty for default): Login group [hoge]: Login group is hoge. Invite hoge into other groups? []: wheel Login class [default]: Shell (sh csh tcsh nologin) [sh]: tcsh Home directory [/home/hoge]: Home directory permissions (Leave empty for default): Use password-based authentication? [yes]: Use an empty password? (yes/no) [no]: Use a random password? (yes/no) [no]: Enter password: Enter password again: Lock out the account after creation? [no]: Username : hoge Password : ***** Full Name : hoge Uid : 1002 Class : Groups : hoge wheel Home : /home/hoge Home Mode : Shell : /bin/tcsh Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (hoge) to the user database. Add another user? (yes/no): no Goodbye! |
adduserで、hogeというユーザを追加しています。
グループは、hogeとwheelに参加させています。
ログイン時のShellを tcsh としています。
登録したユーザを削除するには、rmuser を使います。
また、パスワードのみの変更なら、passwordを使います。
ここで、wheelのグループに属していない場合は、suでスーパーユーザになれません。 セキュリティ上、wheelには属さない方が良いと思いますので、その際は、すくなくともsudo が使えるようにしておきましょう。
ipfw , vimをインストールする。
ipfw は、Linuxでいうところのiptablesに相当します。そもそもUNIXでは、IPマスカレードおよびパケットフィルタリングを実施するソフトウェアとしてipfwが利用されていました。現在でも利用されているのは、BSD系のOS、Mac OS などに組み込まれています。
カーネルに組み込まれているので、FreeBSDをインストールすれば、ipfw もインストールされているはずです。
もしも、ipfw が動作しない場合は、カーネルを再構築する必要があります。(通常インストールされていないことはないと思いますが、再構築する場合は、FreeBSDでファイアウォール(ipfw) を参照してください。)
動作するかどうか確認するには、以下のように入力してみてください。
$ /sbin/ipfw -h ipfw syntax summary (but please do read the ipfw(8) manpage): ... |
vim は、多言語に対応した テキストエディタ ( vi ) です。
標準のviエディタでも良いのですが、日本語の入力が楽な面もありますし、使い勝手は間違いなく良いですから、インストールしておきます。
ここでは、pkg_add を使ってバイナリインストールしてみます。
( pkg_add は、CentOSでいうところのyumに相当します。 )
# 一般的なvimをインストールすると、GUI関連のパッケージまでインストールしてしまいます。 # ここでは、必要最小限にしたいので、vim-liteをインストールします。 $ pkg_add -r vim-lite Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-9.0-release/Latest/vim-lite.tbz... Done. SECURITY NOTE: The VIM software has had several remote vulnerabilities discovered within VIM's modeline support. It allowed remote attackers to execute arbitrary code as the user running VIM. All known problems have been fixed, but the FreeBSD Security Team advises that VIM users use 'set nomodeline' in ~/.vimrc to avoid the possibility of trojaned text files. # vimのインストールを終えたら、vimrc (vimの基本設定ファイル) のサンプルをrootのホームへコピーします。 $ cp /usr/local/share/vim/vim73/vimrc_example.vim ~root/.vimrc # ~/.vimrc を編集して、vimの日本語環境を設定します。 # 以降の赤文字部分を最後に追記します。 $ vi ~root/.vimrc ... set encoding=utf-8 set termencoding=utf-8 set fileencoding=utf-8 set fileencodings=ucs-bom,euc-jp,cp932,iso-2022-jp set fileencodings+=,ucs-2le,ucs-2,utf-8 # 編集を終えたら、vimrc を各ユーザのホームへコピーします。 $ cp ~root/.vimrc ~hoge/.vimrc $ chown hoge ~hoge/.vimrc $ chgrp hoge ~hoge/.vimrc # ハッシュを更新して、vimへのパスをとおします。 $ rehash # 最後にvimがちゃんと動作するか確認しています。 $ vim ~/.vimrc ... $ |
これで、インストール完了です。
絶対パスで指定していないコマンドをシェル内でタイプされた時、シェルは実行可能ファイルを見つけるために参照するハッシュテーブルを再構築するコマンドです。
実際に、シェルで全体パスで指定していないコマンド実行する場合、毎回 PATH で指定されたディレクトリを検索するわけではありません。既にハッシュテーブルに登録されている実行可能なコマンドを検索し、ヒットしたパスをもとに実行する仕組みになっています。
そのため、新しくパッケージをインストールした場合、PATHで設定されているディレクトリへインストールされたとしてもrehashでハッシュテーブルを再構築しないかぎり、絶対パスで指定していないコマンドを実行できません。
ログイン環境を編集する。
vimを標準のエディタとして使うために、vi のaliasとして登録しておきます。
先にhogeは、tcsh をログイン時に利用するように設定したので、ここでは、.cshrc を編集します。
$ vi ~hoge/.cshrc # $FreeBSD: release/9.0.0/share/skel/dot.cshrc 170119 2007-05-29 22:07:57Z dougb $ # # .cshrc - csh resource script, read at beginning of execution by each shell # # see also csh(1), environ(7). # alias h history 25 alias j jobs -l alias la ls -a alias lf ls -FA alias ll ls -lA # A righteous umask umask 22 set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin $HOME/bin) alias ls ls -G set prompt = '[%n@%m:%~$] ' set autolist=ambiguous #setenv EDITOR vi alias vi vim alias view vim -R setenv EDITOR vim setenv PAGER more setenv BLOCKSIZE K if ($?prompt) then # An interactive shell -- set some stuff up set filec set history = 100 set savehist = 100 set mail = (/var/mail/$USER) if ( $?tcsh ) then bindkey "^W" backward-delete-word bindkey -k up history-search-backward bindkey -k down history-search-forward endif endif |
alias ls ls -G : lsコマンドで常に色つきの出力を有効にします。
set prompt = ‘[%n@%m:%~$] ‘ : プロンプトの表示を ユーザ@ホスト:ディレクトリ名 とします。
set autolist=ambiguous’ : コマンド入力をTABキーで補間します。
alias vi vim : viコマンドは、常にvimに置き換えます。
alias view vim -R : viewコマンドは、常にvimの読み込み専用に置き換えます。
setenv EDITOR vim : デフォルトのエディタをvimにします。
$ source ~hoge/.cshrc |
SSHのポートを変更する。
まずは、SSHのポートを変更して、簡単にアタックされないようにしておきます。指定するポート番号は、10000以降の適当なポート番号を割り当てましょう。
$ vi /etc/ssh/sshd_config # ポート番号を 22 (デフォルト)から10022へ変更する #Port 22 Port 10022 : # SSHのプロトコルをSSH2のみ対応とする Protocol 2 : # rootでのログインを不可とする PermitRootLogin no : # パスワードでのログインを許可する PasswordAuthentication yes : # パスワードなしでのログインを不可とする PermitEmptyPasswords no : # hoge というユーザだけログインを許可する AllowUsers hoge : |
ここでは、ポート番号、SSHプロトコル、rootでのログイン不可、ログイン可能なユーザ名を指定しています。
(後でhogeというユーザを追加しています。)
また、ログインするIPアドレスが決まっているなら、許可するIPアドレスも指定した方がより良いです。
設定を終えたら、sshd の設定ファイル再読み込みを実施します。
$ /etc/rc.d/sshd reload |
この状態で、上記の例で言うと、
ユーザ : hoge
ポート番号 : 10022
でログインできるか確認しましょう。
ログインできればOKです。
できない場合は、設定を再度見直しましょう。
とりあえず、再読み込みの場合は、現在SSHで接続しているクライアントには影響ありません。そのため、もしも設定に誤りがあった場合に、再編集することができます。
sshd を再起動してしまうと、現在接続しているクライアントは解放されてしまうので注意が必要です。
ファイアウォール(ipfw)の設定を行う。
ここでは、単純にipfwを使っていないポートを外部に非公開とするようにします。
( ここでの例として 80(http),10022(ssh) 以外をすべて非公開にします。 )
シェルファイルを作成して、一気にやってしまいます。
そのため、ipfwを実行しようとすると以下のようなエラーが発生します。
$ ipfw -q add 10 allow all from any to any via lo0 ipfw: getsockopt(IP_FW_ADD): Protocol not available |
ただし、デフォルトのままipfwを有効にしてしまうと、リモートからのアクセスが一切できなくなりますので、十分、注意が必要です。
( もちろん、ローカルコンソールは使えます 。 )
firewall_enable="YES" |
- ファイアウォール設定用スクリプトファイルを作成する。
ファイアウォール設定用スクリプトファイルを、ここでは、例として、/etc/rc.firewall_local として作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
#! /bin/sh # ipfw -q -f flush IPF="ipfw -q add" #loopback $IPF 10 allow all from any to any via lo0 $IPF 20 deny all from any to 127.0.0.0/8 $IPF 21 deny all from 127.0.0.0/8 to any $IPF 22 deny all from any to 172.16.0.0/12 $IPF 23 deny all from 172.16.0.0/12 to any $IPF 24 deny all from any to 192.168.0.0/16 $IPF 25 deny all from 192.168.0.0/16 to any $IPF 30 deny tcp from any to any frag # statefull $IPF 50 check-state $IPF 60 allow tcp from any to any established $IPF 70 allow all from any to any out keep-state $IPF 80 allow icmp from any to any # open port http (80) $IPF 100 allow tcp from any to any 80 in $IPF 101 allow tcp from any to any 80 out # open port ssh (10022) $IPF 110 allow tcp from any to any 10022 in $IPF 111 allow tcp from any to any 10022 out # deny and log everything $IPF 999 deny log all from any to any
4行目 : すべてのルールを削除します。(65535 だけは消せません)
24行目 : pingを受け付けます。
10 – 16行目 : ループバック、プライベートIPアドレス(10.x.x.x,172.16.x.x,192.168.x.x)は、すべて拒否してます。
26 – 34行目 : 10022(SSH),80(HTTP)の2つのポートのみを公開し、それ以外をすべて非公開にします。
上記は、必要最小限のポートしか開いていません。pop3やmailなどの必要なポートは、27 , 28行目を真似て開くと良いでしょう。
- ファイアウォールを有効にする。
以下のように /etc/rc.confを編集 ( 赤文字部分 ) することで、 ファイアウォールを有効にし、先に作成した設定用スクリプトファイル( ここでは、例として、/etc/rc.firewall_local ) をファイアウォールのスクリプトファイルとして設定します。
$ vim /etc/rc.conf ... firewall_enable="YES" firewall_script="/etc/rc.firewall_local"
- ファイアウォールを実行する。
上記の入力に誤りがないことを十分に確認の上、以下のようにファイアウォールの有効化を実施します。
$ /etc/rc.d/ipfw start Firewall rules loaded.
- ファイアウォールが正しく設定されているか確認する。
最後に、ipfw listコマンドを実行し、ファイアウォールが正しく設定されているか確認します。
正しく設定されているなら、最初に作成したファイアウォール設定用スクリプトファイルの内容が、そのまま表示されるはずです。$ ipfw list 00010 allow ip from any to any via lo0 00020 deny ip from any to 127.0.0.0/8 00021 deny ip from 127.0.0.0/8 to any 00022 deny ip from any to 172.16.0.0/12 00023 deny ip from 172.16.0.0/12 to any 00024 deny ip from any to 192.168.0.0/16 00025 deny ip from 192.168.0.0/16 to any 00030 deny tcp from any to any frag 00050 check-state 00060 allow tcp from any to any established 00070 allow ip from any to any out keep-state 00080 allow icmp from any to any 00100 allow tcp from any to any dst-port 80 in 00101 allow tcp from any to any dst-port 80 out 00110 allow tcp from any to any dst-port 10022 in 00111 allow tcp from any to any dst-port 10022 out 00999 deny log ip from any to any 65535 deny ip from any to any
誤ってSSHのポートを閉じてしまうと、二度とアクセスできなくなります。 さくらのVPSでは、リモートコンソールが提供されていますので、最悪の場合は、リモートコンソールからのアクセスで修正することができます。
不要なサービス(デーモン)を停止する。
最後に、無駄に動作しているプロセスを停止するようにします。
ただ、CloudCore VPS の場合、無駄なプロセスは無いと思います。
デフォルトで動作している全プロセスは、以下のとおりです。
$ ps aux USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND root 11 200.0 0.0 0 16 ?? RL 8:48PM 123:26.78 [idle] root 0 0.0 0.0 0 72 ?? DLs 8:48PM 0:00.03 [kernel] root 1 0.0 0.1 8032 536 ?? ILs 8:48PM 0:00.06 /sbin/init -- root 2 0.0 0.0 0 8 ?? DL 8:48PM 0:00.02 [fdc0] root 3 0.0 0.0 0 8 ?? DL 8:48PM 0:00.00 [sctp_iterator] root 4 0.0 0.0 0 8 ?? DL 8:48PM 0:00.00 [xpt_thrd] root 5 0.0 0.0 0 8 ?? DL 8:48PM 0:00.01 [pagedaemon] root 6 0.0 0.0 0 8 ?? DL 8:48PM 0:00.00 [vmdaemon] root 7 0.0 0.0 0 8 ?? DL 8:48PM 0:00.00 [pagezero] root 8 0.0 0.0 0 8 ?? DL 8:48PM 0:00.01 [bufdaemon] root 9 0.0 0.0 0 8 ?? DL 8:48PM 0:00.01 [vnlru] root 10 0.0 0.0 0 8 ?? DL 8:48PM 0:00.00 [audit] root 12 0.0 0.0 0 136 ?? WL 8:48PM 0:02.92 [intr] root 13 0.0 0.0 0 24 ?? DL 8:48PM 0:00.33 [geom] root 14 0.0 0.0 0 8 ?? DL 8:48PM 0:00.16 [yarrow] root 15 0.0 0.0 0 32 ?? DL 8:48PM 0:00.05 [usb] root 16 0.0 0.0 0 8 ?? DL 8:48PM 0:00.06 [syncer] root 17 0.0 0.0 0 8 ?? DL 8:48PM 0:00.02 [softdepflush] root 124 0.0 0.2 9532 948 ?? Is 8:48PM 0:00.00 adjkerntz -i root 633 0.0 0.5 12128 2576 ?? Is 8:48PM 0:00.00 /sbin/devd root 779 0.0 0.3 9612 1380 ?? Ss 8:48PM 0:00.04 /usr/sbin/syslogd -s root 1018 0.0 0.8 13064 3808 ?? Is 8:48PM 0:00.02 /usr/sbin/sshd root 1025 0.0 0.7 11324 3404 ?? Ss 8:48PM 0:00.08 sendmail: accepting conn smmsp 1029 0.0 0.7 11324 3476 ?? Is 8:48PM 0:00.01 sendmail: Queue runner@0 root 1035 0.0 0.3 9644 1428 ?? Ss 8:48PM 0:00.04 /usr/sbin/cron -s root 1093 0.0 0.4 10124 1932 v0 Is 8:48PM 0:00.02 login [pam] (login) root 1116 0.0 0.5 9956 2464 v0 I+ 8:50PM 0:00.05 -csh (csh) root 1094 0.0 0.2 9616 1196 v1 Is+ 8:48PM 0:00.00 /usr/libexec/getty Pc ttyv1 root 1095 0.0 0.2 9616 1196 v2 Is+ 8:48PM 0:00.00 /usr/libexec/getty Pc ttyv2 root 1096 0.0 0.2 9616 1196 v3 Is+ 8:48PM 0:00.00 /usr/libexec/getty Pc ttyv3 root 1097 0.0 0.2 9616 1196 v4 Is+ 8:48PM 0:00.00 /usr/libexec/getty Pc ttyv4 root 1098 0.0 0.2 9616 1196 v5 Is+ 8:48PM 0:00.00 /usr/libexec/getty Pc ttyv5 root 1099 0.0 0.2 9616 1196 v6 Is+ 8:48PM 0:00.00 /usr/libexec/getty Pc ttyv6 root 1100 0.0 0.2 9616 1196 v7 Is+ 8:48PM 0:00.00 /usr/libexec/getty Pc ttyv7 root 1347 0.0 0.2 9680 1168 0 R+ 9:50PM 0:00.00 ps aux |
インストールするディストリビューションでMinimalを選択した時は、上記のような感じだと思います。
ここで不要なのは、仮想コンソール( /usr/libexec/getty Pc ttyvX ) ぐらいでしょうか。
( sendmailも不要といえば不要ですが、後々、必要になるので、これはそのままにしておきます。)
とりあえず、ここでは、仮想コンソールを使わないようにしてみます。
簡単にいうと、 ネットワークや X ウィンドウシステム を動かすなどの複雑なことをおこなわずに、 いくつかのセッションを同時におこなうことを可能にします。
つまり、GUIを使わないような場合は、それほど重要なものでもありませんから、ここでは、仮想コンソールを使わないようにします。
- /etc/ttys を編集し、仮想コンソールを無効にします。
以下の赤文字部分が編集箇所です。( “on” → “off” へ変更しています。 )
$ vi /etc/ttys ... console none unknown off secure # ttyv0 "/usr/libexec/getty Pc" xterm on secure # Virtual terminals ttyv1 "/usr/libexec/getty Pc" xterm off secure ttyv2 "/usr/libexec/getty Pc" xterm off secure ttyv3 "/usr/libexec/getty Pc" xterm off secure ttyv4 "/usr/libexec/getty Pc" xterm off secure ttyv5 "/usr/libexec/getty Pc" xterm off secure ttyv6 "/usr/libexec/getty Pc" xterm off secure ttyv7 "/usr/libexec/getty Pc" xterm off secure ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure # Serial terminals # The 'dialup' keyword identifies dialin lines to login, fingerd etc. ttyu0 "/usr/libexec/getty std.9600" dialup off secure ttyu1 "/usr/libexec/getty std.9600" dialup off secure ttyu2 "/usr/libexec/getty std.9600" dialup off secure ttyu3 "/usr/libexec/getty std.9600" dialup off secure # Dumb console dcons "/usr/libexec/getty std.9600" vt100 off secure ...
- 仮想コンソールの再起動を行います。
もしも X ウィンドウシステムを起動しているなら終了させて、以下のコマンドを実行します。
$ kill -HUP 1
最後に仮想コンソールのプロセスがないか確認しておいてください。
$ ps aux|grep tty root 1404 0.0 0.2 9748 1212 0 RL+ 10:13PM 0:00.00 grep tty
上記のようにすべての仮想コンソールのプロセスがなくなりました。
ここに書いているのは、あくまで必要最小限としての記載ですので、ユーザによっては、もっと、セキュリティ面で強化を図ることもできると思います。
また、日本語環境もできていません。ここまでの設定を終えたら、UTF8による日本語環境を整えてみてください。
( 参照 : FreeBSDで日本語環境(UTF-8対応)を整える )
さくらのVPSでは、FreeBSDをカスタムOSとして提供しています。(コントロールパネルからインストールして利用することができます)
さくらインターネットのVPS ( さくらのVPS )を試してみたい方は、http://vps.sakura.ad.jp/
※お試し期間中は、OP25B設定、データ転送帯域に制約がありますから注意してください。
FreeBSDで日本語環境(UTF-8対応)を整える
FreeBSDでSSHを使えるようにする でSSHでログインまでできるようになりました。
さて、現状では、FreeBSDは、すべてが英語で ...
TeraTerm ( ssh接続 ) でカラー表示ができなかったので対応してみた
FreeBSDでは、デフォルトのコンソールからは、文字色がカラーで表示させることができます。
そのため、lsコマンドのオプション-Gを指定する ...
csh (tcsh) を日本語化(UTF8)してもエラー出力は英語のままなので日本語化してみた
FreeBSDのデフォルトのシェルはtcshです。その親とも言うべきシェルがCシェルと呼ばれる csh です。
そのcshのユーザーインタ ...
コメントを投稿するには、JavaScriptを有効にしてください。