よいしょ
$ R
a,b,cのオブジェクトをつくります
> a <- 1
> b <- 2
> c <- 3
生成したオブジェクトの確認
> ls()
[1] "a" "b" "c"
まずは、入力したコマンドの保存
の前に、
入力したコマンドの一覧
> history()
a <-1
a <-2
b <- 3
c<-3
ls()
history()
では、入力したコマンドの保存
> savehistory("test.txt")
ではでは、生成したオブジェクトの保存は save(オブジェクト名, file="a.Rdata")
だが、すべてのオブジェクトを保存するときには、
> save(list=ls(), file="test.Rdata")
です。
> q()
では、R
を立ち上げて
よいしょ
$ R
> ls()
character(0)
よし、わくわく。
オブジェクトをロードしてみます。
> load("test.Rdata")
> ls()
[1] "a" "b" "c"
完璧だ。
医療系の仕事をしています。生命の尊さ、美しさがどのようなメカニズムで生じるのかに興味があります。科学の方法論を用いて、このような問いに応えたい、私はこう思って医学生物学の基礎研究のトレーニングを受けてきました。生命を科学的手法を用いて理解を試みる上で、genomeを始めとした種々の大量データの処理が必要不可欠であることを痛感しました。また、生命科学が物理学、数学、統計学、有機化学などの種々の学問と深い関わりを持つことを実感しました。そのため、このブログは広範囲の学問領域に関しての記事を載せています。日々の学習内容を文書に書き残し、それを読み返すことによって、体系化された知識を身に付けることを目標としています。どうぞよろしくお願いします。
コンパイルの一連の流れ
gccのオプションをフル活用して、C言語のソースコードをコンパイルして実行ファイルを生成するまでの一連の流れについて書いてみます。
普段、何気なくhello,worldのコードをコンパイルするときは
$ gcc hello.c
$ ls
a.out hello.c
とやります。(-oをつけれれば実行ファイル名を指定できますが。。)
a.outは
「assembler output」
の略だそうです。
ではassemblerとは何なのでしょうか。このあたりをきちんと理解するためには、しっかりとコンパイルの流れを理解しなくてはいけないようです。
コンパイルの厳密な流れを追ってみます。
1:ソースファイルの作成
vimでもemacでも何でもいいので、テキストエディタでソースコードを編集します。
2:プリプロセサを用いて、/usr/include以下においてあるソースファイルにヘッダファイル(インクルードファイル)をインクルードする。
$ gcc -E hello.c > hello.i
これにより生成したhello.iはさまざまな関数の定義がインクルードされているため、900行近いコードとなっている。
3:コンパイラによって、プリプロセッサによってヘッダファイルをインクルードされた状態のソースコードをコンパイルして、アセンブラプログラムを生成する。アセンブラプログラムとは、機械語と1対1で対応した最も低級な言語のことを言う。狭義にコンパイルという場合、このアセンブルコードを生成する過程のことをコンパイルと呼ぶ。
$ gcc -S hello.i
これによりたった20行からなるアセンブラコードが生成するわけである。
4:アセンブラ言語で書かれたアセンブラコードをアセンブルして、機械語(オブジェクトファイル。まだ、実行ファイルとは呼べない。)に翻訳する。
$ gcc -c hello.s
これにより、オブジェクトファイルhello.oが生成される。
5:最後はオブジェクトファイル同士をリンクさせる必要がある。c言語は関数の塊である。インクルードファイルでインクルードされるのはあくまで関数の宣言のみであり、関数本体のオブジェクトファイルはlibc.aというオブジェクファイルの中に書いてある。4で生成したオブジェクトファルhello.oの中には、main関数は記述してあるが、printf()関数本体の記述がないため、libc.a内に書いてあるprintf()本体の機械語による記述をhello.oと”リンク”させてあげる必要がある。(#このように頻繁に使用する関数を標準関数とよび、結局最初からアセンブルされて機械語の形式でリンク待ちになっているわけですね。いちいちアセンブルするのは二度手間、三度手間、百度手間ですからね)
$ gcc hello.o
ちなみに、libc.aの置いてある場所は、
$ locate libc.a | grep libc.a
/usr/lib/i386-linux-gnu/libc.a
/usr/lib/i386-linux-gnu/xen/libc.a
である。
6:このような一連のプリプロセス、コンパイル、アセンブル、リンクの過程を経て生成したのが、a.outとう実行ファイルである。これを実行するには、フルパスで指定してあげればよく(カレントディレクトリのパスが通っていることはまずないだろうから)
$ /a.out
Hello, world!!
以上がソースコードから実行ファイルができるまでの一連の流れである。
この流れが理解できれば、分割コンパイルの仕組みも比較的容易に理解できると思う。
普段、何気なくhello,worldのコードをコンパイルするときは
$ gcc hello.c
$ ls
a.out hello.c
とやります。(-oをつけれれば実行ファイル名を指定できますが。。)
a.outは
「assembler output」
の略だそうです。
ではassemblerとは何なのでしょうか。このあたりをきちんと理解するためには、しっかりとコンパイルの流れを理解しなくてはいけないようです。
コンパイルの厳密な流れを追ってみます。
1:ソースファイルの作成
vimでもemacでも何でもいいので、テキストエディタでソースコードを編集します。
2:プリプロセサを用いて、/usr/include以下においてあるソースファイルにヘッダファイル(インクルードファイル)をインクルードする。
$ gcc -E hello.c > hello.i
これにより生成したhello.iはさまざまな関数の定義がインクルードされているため、900行近いコードとなっている。
3:コンパイラによって、プリプロセッサによってヘッダファイルをインクルードされた状態のソースコードをコンパイルして、アセンブラプログラムを生成する。アセンブラプログラムとは、機械語と1対1で対応した最も低級な言語のことを言う。狭義にコンパイルという場合、このアセンブルコードを生成する過程のことをコンパイルと呼ぶ。
$ gcc -S hello.i
これによりたった20行からなるアセンブラコードが生成するわけである。
4:アセンブラ言語で書かれたアセンブラコードをアセンブルして、機械語(オブジェクトファイル。まだ、実行ファイルとは呼べない。)に翻訳する。
$ gcc -c hello.s
これにより、オブジェクトファイルhello.oが生成される。
5:最後はオブジェクトファイル同士をリンクさせる必要がある。c言語は関数の塊である。インクルードファイルでインクルードされるのはあくまで関数の宣言のみであり、関数本体のオブジェクトファイルはlibc.aというオブジェクファイルの中に書いてある。4で生成したオブジェクトファルhello.oの中には、main関数は記述してあるが、printf()関数本体の記述がないため、libc.a内に書いてあるprintf()本体の機械語による記述をhello.oと”リンク”させてあげる必要がある。(#このように頻繁に使用する関数を標準関数とよび、結局最初からアセンブルされて機械語の形式でリンク待ちになっているわけですね。いちいちアセンブルするのは二度手間、三度手間、百度手間ですからね)
$ gcc hello.o
ちなみに、libc.aの置いてある場所は、
$ locate libc.a | grep libc.a
/usr/lib/i386-linux-gnu/libc.a
/usr/lib/i386-linux-gnu/xen/libc.a
である。
6:このような一連のプリプロセス、コンパイル、アセンブル、リンクの過程を経て生成したのが、a.outとう実行ファイルである。これを実行するには、フルパスで指定してあげればよく(カレントディレクトリのパスが通っていることはまずないだろうから)
$ /a.out
Hello, world!!
以上がソースコードから実行ファイルができるまでの一連の流れである。
この流れが理解できれば、分割コンパイルの仕組みも比較的容易に理解できると思う。
テキストモードでログイン時の文字化けを直す(debian)
環境変数のLANGをC(英語モード)に変更すればいい
# export LANG=C
設定を固定したければ
/etc/environment
/etc/default/locale
のファイルに
LANG=C
とかくこと
# export LANG=C
設定を固定したければ
/etc/environment
/etc/default/locale
のファイルに
LANG=C
とかくこと
CentOSの導入 ーその10ー
CentOSサーバに固定のプライベートIPを設定したら、外部のネットワークに接続できなくなるという現象に直面しました。
復旧に向けたチェック項目をメモしておきます。
まず、第一に、IPアドレスを静的に割り当てるには、以下のファイルをマニュアル設定する必要がある。
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network
/etc/hosts
/etc/resolv.conf
○/etc/conf.confについて
DHCPで起動したときは、以下のような内容になっています。
# Generated by NetworkManager
nameserver yyy.yyy.yy.1
静的にIPを設定するときも、このときの値を使用すればよいです。(今回はルータのアドレス)
だから、たった一行だけ
nameserver yyy.yyy.yy.1
と書いておしまい。
○/etc/hostsについて
今現段階の認識では、自分(サーバーマシン)が他者(LAN内のクライアントPC)をどうやって認識するかについての設定ファイルだと思ってます。
ですので、これを設定すれば、前項で書いたように、他のクライアントにドメインネームやホストネームでリモートアクセスできるようになります。でも、今回はあまり関係が深くはないのではと思っています。
○/etc/sysconfig/network-scripts/ifcfg-eth0について
以下の項目が大切
DEVICE=eth0
BOOTPROTO=static
BROADCAST=yyy.yyy.yy.255
HWADDR=xx:xx:xx:xx:xx:xx
IPADDR=192.168.11.200
IPV6INIT=no
IPV6_AUTOCONF=no
NETMASK=255.255.255.0
NETWORK=yyy.yyy.yy.0
ONBOOT=yes
TYPE=Ethernet
○/etc/sysconfig/networkについて
このファイルのゲートウェイ設定はかなり大事
以下の3項目を書いておく
NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=yyy.yyy.yy.1
以上です。
各々の設定を変更する度に、
#/etc/rc.d/init.d/network restart
でネットワークを再構築すると変更内容が反映させる。
最後に、ゲートウェイの設定がうまくいっているかどうかを確認するために、以下のコマンドを実行します。
# /sbin/route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
yyy.yyy.yy.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 yyy.yyy.yy.1 0.0.0.0 UG 0 0 0 eth0
これの三行目が表示されていれば設定は終了です。
実際に外部のサーバーと通信ができるかどうかテストしてみます。
# ping google.com
でいけます。
network is unrechable
とエラーが出ずに、きちんと交信が続くならば、設定成功です。
復旧に向けたチェック項目をメモしておきます。
まず、第一に、IPアドレスを静的に割り当てるには、以下のファイルをマニュアル設定する必要がある。
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network
/etc/hosts
/etc/resolv.conf
○/etc/conf.confについて
DHCPで起動したときは、以下のような内容になっています。
# Generated by NetworkManager
nameserver yyy.yyy.yy.1
静的にIPを設定するときも、このときの値を使用すればよいです。(今回はルータのアドレス)
だから、たった一行だけ
nameserver yyy.yyy.yy.1
と書いておしまい。
○/etc/hostsについて
今現段階の認識では、自分(サーバーマシン)が他者(LAN内のクライアントPC)をどうやって認識するかについての設定ファイルだと思ってます。
ですので、これを設定すれば、前項で書いたように、他のクライアントにドメインネームやホストネームでリモートアクセスできるようになります。でも、今回はあまり関係が深くはないのではと思っています。
○/etc/sysconfig/network-scripts/ifcfg-eth0について
以下の項目が大切
DEVICE=eth0
BOOTPROTO=static
BROADCAST=yyy.yyy.yy.255
HWADDR=xx:xx:xx:xx:xx:xx
IPADDR=192.168.11.200
IPV6INIT=no
IPV6_AUTOCONF=no
NETMASK=255.255.255.0
NETWORK=yyy.yyy.yy.0
ONBOOT=yes
TYPE=Ethernet
○/etc/sysconfig/networkについて
このファイルのゲートウェイ設定はかなり大事
以下の3項目を書いておく
NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=yyy.yyy.yy.1
以上です。
各々の設定を変更する度に、
#/etc/rc.d/init.d/network restart
でネットワークを再構築すると変更内容が反映させる。
最後に、ゲートウェイの設定がうまくいっているかどうかを確認するために、以下のコマンドを実行します。
# /sbin/route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
yyy.yyy.yy.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 yyy.yyy.yy.1 0.0.0.0 UG 0 0 0 eth0
これの三行目が表示されていれば設定は終了です。
実際に外部のサーバーと通信ができるかどうかテストしてみます。
# ping google.com
でいけます。
network is unrechable
とエラーが出ずに、きちんと交信が続くならば、設定成功です。
CentOSの導入 ーその9ー
今日は、サーバーマシーンに、「固定のプライベートIPアドレス」を当てて、さらにルータの方のポート番号も設定してみた。
1:
サーバマシンに固定のプライベートIPアドレスを当てる。
インストールの時はDHCPでインストールしたので、ルータとLANケーブルでつなげば、ネットにつながります。この状態で、
# ifconfig
Link encap:Ethernet HWaddr xx:xx:xx:xx:xx
inet addr:yyy.yyy.yy.3 Bcast:yyy.yyy.yy.255 Mask:255.255.255.0
(以下略)
となっていることが確認できます。
ここで、このマシンンを上記のように固定プライベートアドレスをyyy.yyy.yy.200に固定してみます。
それには、ただ単に/etc/sysconfig/network-scripts/ifcfg-eth0ファイルの内容を以下のように書き換えるだけです。
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static ここはもとはdhpcになっている
BROADCAST=yyy.yyy.yy.255
HWADDR=xx:xx:xx:xx:xx
IPADDR=yyy.yyy.yy.200
IPV6INIT=no
IPV6_AUTOCONF=no
NETMASK=255.255.255.0
NETWORK=yyy.yyy.yy.0
ONBOOT=yes
GATEWAY=yyy.yyy.yy.1
あとはネットワークの再起動をすればよいです。
# service network restart
2:
ルータの設定
ルータのDHCPサービスは変更せずに、応用設定で特定のプライベートアドレスに対して、ポート設定をします。
まずは、GATEWAY=yyy.yyy.yy.1だったので、これがルータの内向きIPアドレスであるので、
このLAN内の別のパソコンからchrome等のWebブラウザに
http://yyy.yyy.yy.1
と入力する。
すると、ルータに対する接続が成功し、ユーザ名とパスワードが要求される。(BaffaloのAirStationならば、デフォルトで管理者名がroot、パスワードは設定なしである)。これでログインに成功すると晴れて設定ができる。
#豆知識だが、BaffaloのAirStationの場合、
無線設定 -> AOSS -> 現在のセキュリティ情報 から「暗号化レベル」「SSID」「暗号化キー」の各項目がチェックできる。特に暗号化キーがわかれば、別に手元の無線LANパソコンにBaffaloのドライバが入っていなくても、無線ランをつなげることができるわけです!!!!!!!てっきり、baffaloの子機をかって、Windowsしか対応してないかの有名なドライバを付属CDでインストールしてしか方法がないと思ってました。だから、自宅ではLinuxの入ったパソコンでの無線lanをあきらめていました。しかし、これにより、無事無線lanの接続ができることとなりました。
AirStationならば
ネットワーク設定 -> アドレス変換 -> ポート変換テーブルの編集
で、2点の追加項目を書き加えて、新規ポートを設定する。
1 TCP/UDP ポート
任意のTCPポート 80 (TCPポートが80とういうのは80のポートをhttpのサービスに指定するということ)
2 LAN側Ipアドレス
手動設定 yyy.yyy.yy.200
最後に「新規追加」をクリックすれば、TCPポート80(httpサービス)のポートが設定されたことになる。
どうようの作業を
FTP 20
FTP 21
SSH 22
について行った。
以上の方法で、ローカルな内向きの設定(サーバ、ルータ)が終了した。
最後に設定が上手くいっていることを確認するために、sshコマンドをもちいて、他のクライアントPCからサーバにアクセスしてみる。
# ssh username@yyy.yyy.yy.200
パスワードを入力してログインできたらOK
WindowsマシーンでもSSHを利用したリモート接続しよう賭する場合は、PuTTYというアプリケーションをダウンロードしてくる必要があります。
実行ファイルが一つダウンロードされるだけなので、デスクトップ等アクセスしやすい場所におくか、Program fileのディレクトリにおいておいてリンクをつくることをおすすめします。
puttyを実際に開いたら、まず、translation(変換の意味)をクリックして、文字コードをUTF-8に設定してあげます。つぎに、左側のsessionをクリックして、Default Settingsをクリックして、右のsaveをクリックします。
最後に、hostnameをyyy.yyy.yy.20, portを22,接続タイプをSShにしてやって、Openをクリックするとシェルが起動して、LinuxサーバにWindowsクライアントからでもアクセスができます。
あとちなみに、
クライアントLinuxマシーンにおいて、
/etc/hostsファイルを下記のように設定すると、完全修飾ドメイイン名やホスト名でログインができるようになる。
/etc/hosts
# Do not remove the following lines, or arious progarams
# that require network functionality will fail.
yyy.yyy.yy.200 serverusername.localdomain serverusername
このようにyyy.yyy.yy.200にkappa.localdomainというドメイン名を割り当てた後に、
$ ssh serverusername@serverusername.localdomain
ないしは
$ ssh serverusername@serverusername
とすれば、アクセスできるようになる。
1:
サーバマシンに固定のプライベートIPアドレスを当てる。
インストールの時はDHCPでインストールしたので、ルータとLANケーブルでつなげば、ネットにつながります。この状態で、
# ifconfig
Link encap:Ethernet HWaddr xx:xx:xx:xx:xx
inet addr:yyy.yyy.yy.3 Bcast:yyy.yyy.yy.255 Mask:255.255.255.0
(以下略)
となっていることが確認できます。
ここで、このマシンンを上記のように固定プライベートアドレスをyyy.yyy.yy.200に固定してみます。
それには、ただ単に/etc/sysconfig/network-scripts/ifcfg-eth0ファイルの内容を以下のように書き換えるだけです。
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static ここはもとはdhpcになっている
BROADCAST=yyy.yyy.yy.255
HWADDR=xx:xx:xx:xx:xx
IPADDR=yyy.yyy.yy.200
IPV6INIT=no
IPV6_AUTOCONF=no
NETMASK=255.255.255.0
NETWORK=yyy.yyy.yy.0
ONBOOT=yes
GATEWAY=yyy.yyy.yy.1
あとはネットワークの再起動をすればよいです。
# service network restart
2:
ルータの設定
ルータのDHCPサービスは変更せずに、応用設定で特定のプライベートアドレスに対して、ポート設定をします。
まずは、GATEWAY=yyy.yyy.yy.1だったので、これがルータの内向きIPアドレスであるので、
このLAN内の別のパソコンからchrome等のWebブラウザに
http://yyy.yyy.yy.1
と入力する。
すると、ルータに対する接続が成功し、ユーザ名とパスワードが要求される。(BaffaloのAirStationならば、デフォルトで管理者名がroot、パスワードは設定なしである)。これでログインに成功すると晴れて設定ができる。
#豆知識だが、BaffaloのAirStationの場合、
無線設定 -> AOSS -> 現在のセキュリティ情報 から「暗号化レベル」「SSID」「暗号化キー」の各項目がチェックできる。特に暗号化キーがわかれば、別に手元の無線LANパソコンにBaffaloのドライバが入っていなくても、無線ランをつなげることができるわけです!!!!!!!てっきり、baffaloの子機をかって、Windowsしか対応してないかの有名なドライバを付属CDでインストールしてしか方法がないと思ってました。だから、自宅ではLinuxの入ったパソコンでの無線lanをあきらめていました。しかし、これにより、無事無線lanの接続ができることとなりました。
AirStationならば
ネットワーク設定 -> アドレス変換 -> ポート変換テーブルの編集
で、2点の追加項目を書き加えて、新規ポートを設定する。
1 TCP/UDP ポート
任意のTCPポート 80 (TCPポートが80とういうのは80のポートをhttpのサービスに指定するということ)
2 LAN側Ipアドレス
手動設定 yyy.yyy.yy.200
最後に「新規追加」をクリックすれば、TCPポート80(httpサービス)のポートが設定されたことになる。
どうようの作業を
FTP 20
FTP 21
SSH 22
について行った。
以上の方法で、ローカルな内向きの設定(サーバ、ルータ)が終了した。
最後に設定が上手くいっていることを確認するために、sshコマンドをもちいて、他のクライアントPCからサーバにアクセスしてみる。
# ssh username@yyy.yyy.yy.200
パスワードを入力してログインできたらOK
WindowsマシーンでもSSHを利用したリモート接続しよう賭する場合は、PuTTYというアプリケーションをダウンロードしてくる必要があります。
実行ファイルが一つダウンロードされるだけなので、デスクトップ等アクセスしやすい場所におくか、Program fileのディレクトリにおいておいてリンクをつくることをおすすめします。
puttyを実際に開いたら、まず、translation(変換の意味)をクリックして、文字コードをUTF-8に設定してあげます。つぎに、左側のsessionをクリックして、Default Settingsをクリックして、右のsaveをクリックします。
最後に、hostnameをyyy.yyy.yy.20, portを22,接続タイプをSShにしてやって、Openをクリックするとシェルが起動して、LinuxサーバにWindowsクライアントからでもアクセスができます。
あとちなみに、
クライアントLinuxマシーンにおいて、
/etc/hostsファイルを下記のように設定すると、完全修飾ドメイイン名やホスト名でログインができるようになる。
/etc/hosts
# Do not remove the following lines, or arious progarams
# that require network functionality will fail.
yyy.yyy.yy.200 serverusername.localdomain serverusername
このようにyyy.yyy.yy.200にkappa.localdomainというドメイン名を割り当てた後に、
$ ssh serverusername@serverusername.localdomain
ないしは
$ ssh serverusername@serverusername
とすれば、アクセスできるようになる。
CentOSの導入 ーその8ー
SSHの設定をしてみました。
現段階では家のLANは一つのルータに複数のパソコンがダイナミックにプライベートIPアドレスが割り当てられている状態です。
いま、LANの中の二つのパソコン(一台はクライアント、他方はサーバマシン)を起動して、クライアントからサーバにリモートアクセスができるようにしてみます。
まずは、sshdの設定ファイルの中身を編集します。
# vim /etc/ssh/sshd_config
vimの / を用いた検索機能を用いて
1:
#Protocol
Protocol 2
2:
#LoginGraceTime 2m
PermitRootLogin no
3:
#PermitEmptyPasswords no
PasswordAuthentication yes
4:
# override default of no subsystems
Subsystem sftp /usr/libexec/openssh/sftp-server
AllowUsers username
のように設定します。
次に、今現在のサーバーマシンのプライベートIPアドレスを調べます。
サーバーマシンで
# ifconfig
eth0 Link encap:Ehernet HWaddr xx:xx:xx:xx:xx:xx
inet addr:yyy.yyy.yy.51 Bcast:yyy.yyy.yy.255 Mask:255.255.255.0
(以下省略)
それではクライアント側から接続してみる。
$ ssh username@yyy.yyy.yy.51
いろいろ警告がでるがyesと入力してEnterを押せば、ログインパスワードを求められる。これに答えればログインが可能になる。
なお、rootログインはできないようにしてあるので、
管理者になりたいときはsuコマンドで昇格する必要がある。
現段階では家のLANは一つのルータに複数のパソコンがダイナミックにプライベートIPアドレスが割り当てられている状態です。
いま、LANの中の二つのパソコン(一台はクライアント、他方はサーバマシン)を起動して、クライアントからサーバにリモートアクセスができるようにしてみます。
まずは、sshdの設定ファイルの中身を編集します。
# vim /etc/ssh/sshd_config
vimの / を用いた検索機能を用いて
1:
#Protocol
Protocol 2
2:
#LoginGraceTime 2m
PermitRootLogin no
3:
#PermitEmptyPasswords no
PasswordAuthentication yes
4:
# override default of no subsystems
Subsystem sftp /usr/libexec/openssh/sftp-server
AllowUsers username
のように設定します。
次に、今現在のサーバーマシンのプライベートIPアドレスを調べます。
サーバーマシンで
# ifconfig
eth0 Link encap:Ehernet HWaddr xx:xx:xx:xx:xx:xx
inet addr:yyy.yyy.yy.51 Bcast:yyy.yyy.yy.255 Mask:255.255.255.0
(以下省略)
それではクライアント側から接続してみる。
$ ssh username@yyy.yyy.yy.51
いろいろ警告がでるがyesと入力してEnterを押せば、ログインパスワードを求められる。これに答えればログインが可能になる。
なお、rootログインはできないようにしてあるので、
管理者になりたいときはsuコマンドで昇格する必要がある。
CentOSの導入 ーその7ー
不要なデーモンの停止
Linux初学者の身としてましては、わけもわからずデーモンをがんがん止めてしまうと、後々困ることが予想されるので、あまりデーモンは停止しません。
調べたメモだけ。
しかし、不要なデーモンを停止させることは、Unixのサービスの意味を調べる事にもなるのでスキルアップにも大変重要なことだと思う。さらに、不要なデーモンを停止させることはクラックな方達にバックドアを作らせないことにもなり、自ホストのセキュリティアップにも繋がる。このようなことから、ここではLinux起動時に立ち上がっているだろうサービスがどんな物かを説明して、必要か必要でないか。を判断出来るようにしたい。
# chkconfig プログラム名 off
起動中のデーモンのリストを調べるには、
# chkconfig --list
Linux初学者の身としてましては、わけもわからずデーモンをがんがん止めてしまうと、後々困ることが予想されるので、あまりデーモンは停止しません。
調べたメモだけ。
しかし、不要なデーモンを停止させることは、Unixのサービスの意味を調べる事にもなるのでスキルアップにも大変重要なことだと思う。さらに、不要なデーモンを停止させることはクラックな方達にバックドアを作らせないことにもなり、自ホストのセキュリティアップにも繋がる。このようなことから、ここではLinux起動時に立ち上がっているだろうサービスがどんな物かを説明して、必要か必要でないか。を判断出来るようにしたい。
# chkconfig プログラム名 off
起動中のデーモンのリストを調べるには、
# chkconfig --list
CentOSの導入 ーその6ー
各種開発環境をインストールしてみる。
yumによるパッケージ管理システムを利用する。
まずは、gropuinstallのリストを確認する。
# yum grouplist | less
そして、この中にある"Development Tool”のグループをインストールする。
# yum groupinstall "Development Tool"
yumによるパッケージ管理システムを利用する。
まずは、gropuinstallのリストを確認する。
# yum grouplist | less
そして、この中にある"Development Tool”のグループをインストールする。
# yum groupinstall "Development Tool"
CentOSの導入 ーその5ー
時計を設定します。
日本標準時プロジェクトのntpサーバのntp.nict.jpに同期させてみます。
# yum install -y ntp
# ntpdate ntp.nict.jp
時計を確認するには
# date
以上です。
日本標準時プロジェクトのntpサーバのntp.nict.jpに同期させてみます。
# yum install -y ntp
# ntpdate ntp.nict.jp
時計を確認するには
# date
以上です。
CentOSの導入 ーその4ー
デスクトップ環境をGNOMEよりも軽量なKDEに変更する。
やはりGNOMEではロースペックなマシーンでは重すぎます。GUI操作が要求されたときに困りますのでここでKDEに変更しておきます。
まずはKDEデスクトップ環境に関係するプログラムの一括インストール
yum groupinstall "KDE (K Desktop Environment)"
次に設定ファイル /etc/sysconfig/desktopを編集する。
# vim /etc/sysconfig/desktop
デフォルトでは何も書いていないファイルだと思います。
それの一行目に、
DESKTOP="KDE"
と追加して終わりです。
X windowシステムを立ち上げてみるとKDEが立ち上がり、ちょっとした感動を覚えます。
# startx
やはりGNOMEではロースペックなマシーンでは重すぎます。GUI操作が要求されたときに困りますのでここでKDEに変更しておきます。
まずはKDEデスクトップ環境に関係するプログラムの一括インストール
yum groupinstall "KDE (K Desktop Environment)"
次に設定ファイル /etc/sysconfig/desktopを編集する。
# vim /etc/sysconfig/desktop
デフォルトでは何も書いていないファイルだと思います。
それの一行目に、
DESKTOP="KDE"
と追加して終わりです。
X windowシステムを立ち上げてみるとKDEが立ち上がり、ちょっとした感動を覚えます。
# startx
CentOSの導入 ーその2ー
yumによるパッケージ管理の設定
# /etc/rc.d/init.d/yum-updatesd stop yum-updatestは評判が悪いのでデーモンから外す。
# chkconfig yum-updatesd off
# yum -y update yumのパッケージをアップデート
# yum -y install yum-cron インストール済みのパッケージを自動更新してくれるyum-cronをインストール
# /etc/rc.d/init.d/yum-cron start yumm-cronを起動
# chkconfig yum-cron on yum-cronをデーモンとして常駐
# chkconfig --list デーモンのリストの表示
# /etc/rc.d/init.d/yum-updatesd stop yum-updatestは評判が悪いのでデーモンから外す。
# chkconfig yum-updatesd off
# yum -y update yumのパッケージをアップデート
# yum -y install yum-cron インストール済みのパッケージを自動更新してくれるyum-cronをインストール
# /etc/rc.d/init.d/yum-cron start yumm-cronを起動
# chkconfig yum-cron on yum-cronをデーモンとして常駐
# chkconfig --list デーモンのリストの表示
CentOSの導入 ーその3ー
ランレベルをデフォルトの5から3に変更をします
これによりデフォルトでCUIの起動が可能になります。
作業は簡単で
# vim /etc/inittab
id:5:initdefault:
の行を
id:3:initdefault:
とすればよい。
これによりデフォルトでCUIの起動が可能になります。
作業は簡単で
# vim /etc/inittab
id:5:initdefault:
の行を
id:3:initdefault:
とすればよい。
DHCPクライアント・ぷろぐらむ(dhclient)が動いていることを確認する
DHCPを利用している場合、OSが起動するときに、ネットワーク上に構築されたDHCPサーバーから自分が利用するネットワーク情報を受け取る。
psを使ってプロセスを取得するとともに、パイプを用いて、grepに投げて、"dhclient"を含む行を表示させる。
psの-efは、プロセスのプログラムをフルパスで表示させるオプション
# ps -ef | grep dhclient
root 2275 1 0 21:27 ? 00:00:00 /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient-eth0.leases -pf /var/run/dhclient-eth0.pid eth0
root 3777 1 0 21:48 ? 00:00:00 dhclient
root 3945 3450 0 21:57 pts/0 00:00:00 grep dhclient
psを使ってプロセスを取得するとともに、パイプを用いて、grepに投げて、"dhclient"を含む行を表示させる。
psの-efは、プロセスのプログラムをフルパスで表示させるオプション
# ps -ef | grep dhclient
root 2275 1 0 21:27 ? 00:00:00 /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient-eth0.leases -pf /var/run/dhclient-eth0.pid eth0
root 3777 1 0 21:48 ? 00:00:00 dhclient
root 3945 3450 0 21:57 pts/0 00:00:00 grep dhclient
Cent OS 6.0 をテキストモードで起動する方法
1 まずは、パソコンの電源を入れてGUIで起動。
2 次に、シェルを開きます。
3 ルートユーザーになります。
$ su
xxxxxxxxx
#
4 設定ファイルの「/etc/inittab」の編集をします。
# vim /etc/inittab
5 id:5:initdefault:って書いてあるところをid:3:initdefault:と書き換える。5から3にするだけね。
6 :wqで書き換えた内容を保存してvimを終了したらOK!
7 コンピュータを再起動するだけ。
# shutdown -r now
あるいは、
# reboot
8 おそらくCUIで起動すると思います。
9 GUIが恋しくなったらstartxコマンドでGUIを起動してください。
$ startx
2 次に、シェルを開きます。
3 ルートユーザーになります。
$ su
xxxxxxxxx
#
4 設定ファイルの「/etc/inittab」の編集をします。
# vim /etc/inittab
5 id:5:initdefault:って書いてあるところをid:3:initdefault:と書き換える。5から3にするだけね。
6 :wqで書き換えた内容を保存してvimを終了したらOK!
7 コンピュータを再起動するだけ。
# shutdown -r now
あるいは、
# reboot
8 おそらくCUIで起動すると思います。
9 GUIが恋しくなったらstartxコマンドでGUIを起動してください。
$ startx
slaxで無線lan(wpa/wpa2)
slaxにアプリケーションを追加する。
addusrとusraddの違い
addusrは対話形式により懇切丁寧にユーザー情報の細部までもれなく設定できます。
一方、usraddの場合はただユーザーが新しく追加されるだけなので、ホームディレクトリをはじめとした様々な情報を手動で追加する必要があります。
現段階で、usraddで追加したユーザーは、x windowがうまく起動しません。おそらく何かの設定を追加しなくてはいけないのでしょう。
一方、usraddの場合はただユーザーが新しく追加されるだけなので、ホームディレクトリをはじめとした様々な情報を手動で追加する必要があります。
現段階で、usraddで追加したユーザーは、x windowがうまく起動しません。おそらく何かの設定を追加しなくてはいけないのでしょう。
userの追加、パスワードの設定、ホームディレクトリの設定
# useradd hoge
# passwd hoge
xxxxxxxx
# mkdir /home/hoge
# usermod -d /home/hoge
# passwd hoge
xxxxxxxx
# mkdir /home/hoge
# usermod -d /home/hoge
fdiskの使い方の詳細 ー SLAX 6.1.2のインストールを例にして ー
##slaxをCDブートする。
##パソコンの内臓ハードディスクに対してfdiskによる処理を行う。
The number of cylinders for this disk is set to 7296.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Disk /dev/hda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0005fe81
Device Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 7296 58500697+ 82 Linux swap
Command (m for help): p
Disk /dev/hda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0005fe81
Device Boot Start End Blocks Id System
/dev/hda2 14 7296 58500697+ 82 Linux swap
Command (m for help): p
Disk /dev/hda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0005fe81
Device Boot Start End Blocks Id System
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-7296, default 1): 1
Last cylinder, +cylinders or +size{K,M,G} (1-7296, default 7296): +512M
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (67-7296, default 67):67
Last cylinder, +cylinders or +size{K,M,G} (67-7296, default 7296):7296
Command (m for help): p
Disk /dev/hda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0005fe81
Device Boot Start End Blocks Id System
/dev/hda1 1 66 530113+ 83 Linux
/dev/hda2 67 7296 58074975 83 Linux
Command (m for help): l #既定のパーティションIDを調べる。
Command (m for help): t #/dev/hda1のパーティションIDを82に変更(Linux swap用)
Partition number (1-4): 1
Hex code (type L to list codes): 82
Changed system type of partition 1 to 82 (Linux swap)
Command (m for help): p
Disk /dev/hda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0005fe81
Device Boot Start End Blocks Id System
/dev/hda1 1 66 530113+ 82 Linux swap
/dev/hda2 67 7296 58074975 83 Linux
Command (m for help): p
Disk /dev/hda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0005fe81
Device Boot Start End Blocks Id System
/dev/hda1 1 66 530113+ 82 Linux swap
/dev/hda2 * 67 7296 58074975 83 Linux
Command (m for help): w #/dev/hda全体にパーティションテーブルの内容を書き込んで終了。
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: デバイスもしくはリソースがビジー状態です.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
##パソコンの内臓ハードディスクに対してfdiskによる処理を行う。
root@slax:~# fdisk /dev/hda
The number of cylinders for this disk is set to 7296.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): p ##パーティショニングする前の設定を表示
Disk /dev/hda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0005fe81
Device Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 7296 58500697+ 82 Linux swap
Command (m for help): d ##パーティションの削除
Partition number (1-4): 1Command (m for help): p
Disk /dev/hda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0005fe81
Device Boot Start End Blocks Id System
/dev/hda2 14 7296 58500697+ 82 Linux swap
Command (m for help): d ##パーティションの削除
Selected partition 2Command (m for help): p
Disk /dev/hda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0005fe81
Device Boot Start End Blocks Id System
Command (m for help): n #swap領域のためのパーティションの作成
Command actione extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-7296, default 1): 1
Last cylinder, +cylinders or +size{K,M,G} (1-7296, default 7296): +512M
Command (m for help): n #ext3ファイルシステム用のパーティションの作成
Command actione extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (67-7296, default 67):67
Last cylinder, +cylinders or +size{K,M,G} (67-7296, default 7296):7296
Command (m for help): p
Disk /dev/hda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0005fe81
Device Boot Start End Blocks Id System
/dev/hda1 1 66 530113+ 83 Linux
/dev/hda2 67 7296 58074975 83 Linux
Command (m for help): l #既定のパーティションIDを調べる。
0 Empty 1e Hidden W95 FAT1 80 Old Minix bf Solaris
1 FAT12 24 NEC DOS 81 Minix / old Lin c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 82 Linux swap c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 83 Linux c6 DRDOS/sec (FAT-
4 FAT16 <32m 40 Venix 80286 84 OS/2 hidden C: c7 Syrinx
5 Extended 41 PPC PReP Boot 85 Linux extended da Non-FS data
6 FAT16 42 SFS 86 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS 4d QNX4.x 87 NTFS volume set de Dell Utility
8 AIX 4e QNX4.x 2nd part 88 Linux plaintext df BootIt
9 AIX bootable 4f QNX4.x 3rd part 8e Linux LVM e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 93 Amoeba e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi ee GPT
f W95 Ext'd (LBA) 54 OnTrackDM6 a5 FreeBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a6 OpenBSD f0 Linux/PA-RISC b
11 Hidden FAT12 56 Golden Bow a7 NeXTSTEP f1 SpeedStor
12 Compaq diagnost 5c Priam Edisk a8 Darwin UFS f4 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor a9 NetBSD f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys ab Darwin boot fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT
Partition number (1-4): 1
Hex code (type L to list codes): 82
Changed system type of partition 1 to 82 (Linux swap)
Command (m for help): p
Disk /dev/hda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0005fe81
Device Boot Start End Blocks Id System
/dev/hda1 1 66 530113+ 82 Linux swap
/dev/hda2 67 7296 58074975 83 Linux
Command (m for help): a #/dev/hda2に1ブートフラグを立てる
Partition number (1-4): 2Command (m for help): p
Disk /dev/hda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0005fe81
Device Boot Start End Blocks Id System
/dev/hda1 1 66 530113+ 82 Linux swap
/dev/hda2 * 67 7296 58074975 83 Linux
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: デバイスもしくはリソースがビジー状態です.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
# shutdown -r now ##再起動
# mkfs -t ext3 /dev/hda2 ##slaxのインストール先をext3でフォーマット
# mkswap /dev/hda1 ##/dev/hda1をswap領域として確保
# swapon /dev/hda1 ##swap領域を有効化する。
##CDの内容をすべて/dev/hda2/にコピーする。ただし、/dev/hda2は、/mnt/hda2にマウントされていることに注意。
# cp -Rp /mnt/hdb/* /mnt/hda2/
## liloinst.shを実行してslaxをインストール
# /mnt/hda2/boot/lioinst.sh
##PCをシャットダウン
# shutdown -h now
# mkfs -t ext3 /dev/hda2 ##slaxのインストール先をext3でフォーマット
# mkswap /dev/hda1 ##/dev/hda1をswap領域として確保
# swapon /dev/hda1 ##swap領域を有効化する。
##CDの内容をすべて/dev/hda2/にコピーする。ただし、/dev/hda2は、/mnt/hda2にマウントされていることに注意。
# cp -Rp /mnt/hdb/* /mnt/hda2/
## liloinst.shを実行してslaxをインストール
# /mnt/hda2/boot/lioinst.sh
##PCをシャットダウン
# shutdown -h now