差分

移動先: 案内検索

システム環境を考えてみる

902 バイト追加, 2022年2月17日 (木) 05:18
/* 新たなユーザアカウントを加える場合 */
=== 環境を考えてみる ===
もしubuntu、Fedora、 KNOPPIX、あるいはVine Linuxのようなデスクトップ向けGNU/Linuxを使っているのでしたら、使い勝手はいわゆるパソコンと変わらないでしょう。Webブラウザ、ワードプロセッサ、プレゼンテーション、あるいはメールを出すにしてもWindows XPやMacOS Xの上で提供されているのと同じようなアプリケーションスイート(Application suite ) [http://www.openoffice.org/ OpenOffice]があります。[[image:Desktop_knoppix.png||thumb|280px360px|Knoppix Desktop]]
もし[http://www.ubuntu.com/ Ubuntu]、 [https://getfedora.org/ Fedora]、 [https://www.centos.org/ CentOS]、 [https://www.debian.org/ Debian]あるいは[http://vinelinux.org/ Vine Linux]のようなデスクトップ向けGNU/Linuxを使っているのでしたら、使い勝手はいわゆるパソコンと変わらないでしょう。Webブラウザ、ワードプロセッサ、プレゼンテーション、あるいはメールを出すにしてもWindows XPやMacOS Xの上で提供されているのと同じようなアプリケーションスイート(Application suite ) [http://www.openoffice.org/ OpenOffice] / [http://www.libreoffice.org/ LibreOffice] があります。  「[[オペレーティングシステムとは何か]]」のページで説明した通り、カーネルと、その上にあるミドルウェア、そしてアプリケーションは独立した存在です。ミドルウェアにしてもアプリケーションにしてもソフトウェアは利用目的あるいは好みによって入れ換えることができます。たとえば多くのGNU/Linuxディストリビューションのデスクトップ環境を変更することができます。デスクトップ環境は、そのコンピュータの使い勝手と印象を決める重要なミドルウェアですが、それであってもGNOME、KDE、xfce、などを好みで入れ替えることができる選択肢が用意されています。Linuxディストリビューションのデスクトップ環境を変更することができます。デスクトップ環境は、そのコンピュータの使い勝手と印象を決める重要なミドルウェアですが、それであっても[https://www.gnome.org/ GNOME]、[https://www.kde.org/ KDE]、[http://www.xfce.org/ xfce]などを好みで入れ替えることができる選択肢が用意されています。
過去においてはGUIとCUIの両方が用意されていてもCUIを選ぶユーザも多かったというのは事実です。なぜかというとGUIを使ってUNIXをきちんと走らせようとすると、高速で高価なハードウェアが必要だったからです。
別の言い方をすると、GUIのために計算機の資源を割くといったことよりも、そのための資源をたとえばコンパイルとか本来処理すべきものに使っていたといえるでしょう。近年になりデスクトップパソコンレベルでもCPUの処理速度が劇的に速くなり、ハードディスクの容量も格段に大きくなり、大量のメモリを搭載したものが出回るようになって、やっとGUIを使うのが一般的になりました。別の言い方をすると、GUIのために計算機の資源を割くといったことよりも、そのための資源をたとえばコンパイルとか本来処理すべきものに使っていたといえるでしょう。近年になりデスクトップパソコンレベルでもCPUの処理速度が劇的に速くなり、ハードディスクの容量も格段に大きくなり、大量のメモリを搭載するようになり、性能の高いグラフィックチップを使うのが一般になり、[https://www.youtube.com/watch?v=PerCs2r8WIA GUIを使うのがあたりまえ]の時代になりました。 
今やGNU/Linux環境は他のパソコンとかわらないグラフィカルなユーザインタフェース
<ref>
[http://www.compiz-fusion.org/ Compiz fusion] のように高性能グラフィックボードと前提としたOpenGLベースのGUIがもたらす視覚効果はさらにその先を進んでいます。
</ref>
を提供しています。既にエンドユーザ市場のために、いわゆるパソコンと呼ばれるコンシューマー向けデスクトップ環境を持つPCハードウェアのセット<ref>国内では2008年10月にDELL Dell™ Inspiron™ Mini 9ベーシックパッケージ(Ubuntu対応)が販売されています。ASUS Eee PCの海外版は[Xandros http://xandros.com]が搭載されています。 </ref>も存在しています。
今日においては、MacやWindowsと同じような使い勝手のパソコンとして販売されるレベルになっています。
=== 携帯からスーパーコンピューターまで スマートフォンからスーパーコンピューターまで ===
GNU[[image:OSFamily2017Nov.png||thumb|300px|Top500のリストより (2017/Linuxは、Googleが携帯電話用OSとして作ったAndroid11)]] [[image:IDC-Smartphone-OS-share.png||thumb|300px|IDCのスマートフォンOS市場占有率の資料 (2017/5)]] Linuxカーネルは、GoogleがスマートフォンOSとして作ったAndroid
<ref>
What is Android? http://code.google.com/android/what-is-android.html
</ref>
Apple社のiPhone、iPod touch、iPadに使われているiOS
<ref>
[http://developer.apple.com/library/ios/#documentation/Miscellaneous/Conceptual/iPhoneOSTechOverview/IPhoneOSOverview/IPhoneOSOverview.html About iOS Development]
</ref>
からIBM からIBM @server zSeries のようなメインフレームまで基本的には同じ構造のものが動いています。もちろん必要とされるミドルウェアやアプリケーション、カーネルのコンフィグレーションは携帯電話とメインフレームでは異なってくるのは当然ですが、やはりどちらもGNU<ref>Linux on z Systems empowers your developers https:/Linuxと呼ばれるべきものです。またGNU/Linuxはたくさんのコンピュータをつないたクラスターコンピュータとしても使われています。2008年において世界のスーパーコンピュータTop500の中で最も使われているのはGNUyoutu.be/Linuxです。Operating System share for 06ZnP5OnpOxWI </2008 (2008年6月版)<ref>httpのようなメインフレームまで基本的には同じ構造のものが動いています。もちろん必要とされるミドルウェアやアプリケーション、カーネルのコンフィグレーションはスマートフォンとメインフレームでは異なってくるのは当然ですが、やはりどちらもLinuxと多くの[https://www.top500gnu.org/statssoftware/listGNUコマンドやライブラリ]から成り立っているのでGNU/31Linuxと呼ばれるべきものです。またGNU/osLinuxはたくさんのコンピュータをつないたクラスターコンピュータのシステムとしても使われています。もちろん80%弱という数字にはSuseやRedhatもGNU/Linuxとしてカウントされている。Androidはスマートフォンのプラットホームとして常に81~87パーセント(2016-2017)のシェアを占めています。さらにUNIXとして考えるならiOSもUNIXとして分類出来ますから、2017年第1四半期ではスマートフォン市場の99.8パーセントがUNIXということになります。</ref>においては80%弱がGNU/Linuxで占めていることが見て取れます。[[image:Top500_200811.png||thumb|250px|Top500のリスト HPC分野(2008スーパーコンピュータ)では広く使われていたGNU/11)]]Linuxですが2017年11月期発表のTop500ではOperating System FamilyはLinuxのみになりました。
* [http://www.ibm.com/developerworks/linux/linux390/ IBM メインフレーム] / [https://www-603.ibm.com/jpsystems/serversz/eserveros/zserieslinux/ Linux OS on IBM メインフレームz Systems]
* [http://www.android.com/ Android]
* * スマートフォン・マーケットにおける[http://developerwww.appleidc.com/libraryprodserv/ios/#documentation/Miscellaneous/Conceptual/iPhoneOSTechOverview/IPhoneOSOverview/IPhoneOSOverviewsmartphone-os-market-share.html iOSjsp Androidのシェア](最新版)* [http://www.top500.org/ 世界のスーパーコンピュータTop500世界の HPC Top500]  GNU/Linuxの「何でもできる」というのは醍醐味の一つでもあるのですが、しかし、何でもできるといってもGNU/Linuxを手に入れた初心者がスーパーコンピュータを操れるわけもありません。そしてまた、本当のGNU/Linuxの能力の全容を理解しようとすると、本質的には携帯電話 からスーパーコンピュータまでのコンピューティングを知ることになります。手に入ることと、使いこなせることとを混同してしまうあたりが"UNIX(GNU/Linux)は難しい"という部分につながっているのではないかと筆者は想像しています。本書では、そこまで突っ込むことはなく、基本的なUNIX的な考え方(使うことではなくて)を示していければと考えています。 
; 調べてみよう : 最新の[http:GNU/Linuxの「何でもできる」というのは醍醐味の一つでもあるのですが、しかし、何でもできるといってもGNU/www.top500.orgLinuxが搭載されたスーパーコンピュータを手に入れた初心者がスーパーコンピュータの計算能力をフルに発揮するような操作が出来るわけではありません。そしてまた、本当のGNU/ Supercomputing Top500]の中でGNULinuxの能力の全容を理解しようとすると、本質的にはスマートフォン からスーパーコンピュータまでのコンピューティングを知ることになります。手に入ることと、使いこなせることとを混同してしまうあたりが"UNIX(GNU/Linuxベースなシステムは、どれぐらいのパーセンテージを占めているのであろうか。Linux)は難しい"という部分につながっているのではないかと筆者は想像しています。しかし最も大切なのはUNIX的な考え方(使うことではなく)を理解することではないでしょうか。
=== GNU/Linuxの何を学ぶべきなのか ===
「GNU/Linuxでもワードプロセッサのアプリケーションが動きます」というレベルで満足であれば、この先を読み進める必要はありません。このテキストではGNU/LinuxをベースにしてUNIX的な考え方を学ぶというのがテーマです。残念ながらGNU/LinuxやUNIXのHOWTOではありません。アプリケーションレベルでのハウツー本が欲しいのであればインプレス社の「LinuxやUNIXのHOWTOではありません。アプリケーションレベルでのハウツー本が欲しいのであれば[httphttps://dekirugoo.impress.co.jpgl/index.htm できるシリーズik1LUf Amazonにたくさんの入門本が出ています]」などをお勧めします。ので、自分にあった本を選んで、手元において読んだ方がいいでしょう。
==== 新たなユーザアカウントを加える場合 ====
 
最初はインストール時に設定したユーザ名だけですが、
さらにユーザが必要な場合、adduserコマンドや、あるいはGUIツールを使って新しいユーザを加えることができます。さらにユーザが必要な場合、 adduser コマンドや、あるいは GUI ツールを使って新しいユーザを加えることができます。
ここではadduserコマンドを使う場合を説明しましょう。[[image:Gnome-UserSetting.png|right|500px|Gnome ユーザ設定]]  しかし、ここでは基本中の基本である adduser コマンドを使う場合を説明しましょう。
<ref>
KDEやGnome環境でもGUIを使ったツールは用意されていますが、ここではすべての環境に共通な基本的コマンドを使っての説明を行います。[[image:KDE や Gnome-UserSetting.png||thumb|300px|Gnome ユーザ設定]]環境でも GUI を使ったツールは用意されていますが、ここではすべての環境に共通な基本的コマンドを使っての説明を行います。
</ref>
新しいユーザを加えるにはroot権限を使う必要があります。ここではログインすることなく、sudoを使いコマンドをroot権限で実行します。adduserコマンドを使いユーザのアカウントを造り、パスワードを設定し、ホームディレクトリを作成します。アカウント下はhironobuというアカウントを作る例です。おおよそGNU新しいユーザを加えるには root 権限を使う必要があります。ここではログインすることなく、 '''sudo''' を使いコマンドを root 権限で実行します。adduser コマンドを使いユーザのアカウントを造り、パスワードを設定し、ホームディレクトリを作成します。アカウント下は hironobu というアカウントを作る例です。adduserもsudoもPOSIX定義のコマンドではありませんが<ref>POSIXで定義しているコマンドユーティリティは次のページで参照できます。http:/Linuxシステムと呼ばれるものであれば、スーパーコンピュータだろうが、サーバだろうが、デスクトップだろうがこのような基本的なコマンドは同じものが使えます。/pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html</ref>、GNU/Linuxであればスーパーコンピュータであろうが、サーバであろうが、デスクトップであろうがこれらの基本コマンドは同じものが用意されています。 いま作った hironobu というアカウントよりログインするとユーザ hironobu の権限でプログラムが動きます。ユーザの持っているユーザIDやグループID がユーザ権限であり、その権限の範囲でファイルなどへのアクセスなどが出来ます。唯一 root 権限だけが(原則)すべてのファイルにアクセスできます。 
<PREpre class="bash">
$ sudo adduser hironobu
[sudo] password for foo:
Other []:
Is the information correct? [y/n] y
</PREpre>   ログインすれば、あとは何かプログラムを起動すると、ログインしたユーザの権限でプログラムが動き始めます。ユーザの持っているユーザIDやグループID が動作時の権限となり、その情報によりファイルへのアクセス等が制限されます。
=== コマンドを動かす ===
を表示するオプションです。
 
<pre class="bash">
% ls -F /
bin/ cdrom/ etc/ home/ lib/ mnt/ proc/ sbin/ usr/
boot/ dev/ floppy/ initrd/ lost+found/ opt/ root/ tmp/ var/
</pre>
 
短く説明すると、この表示されている範囲では/bin、/sbin が、あと /usr/bin、/usr/sbin にコマンドが入っています。binは通常使うコマンド、sbin はシステム管理に使うコマンドが入っています。/var はログデータファイルや一時的に保管しているデータファイルを集めているディレクトリです。/dev はデバイスファイルが入っているディレクトリです。/proc は実際のファイルが入っているわけはなく、カーネルなどの情報をファイルの形で見せているインタフェースです。
 
<pre class="bash">
% pwd
/home/hironobu
</pre>
 
pwd は自分がどこのディレクトリにいるか表示するコマンドです。
 
<pre class="bash">
% mkdir desk
% cd desk
</pre>
 
mkdir はディレクトリを作るコマンドで、今"desk"という名前のディレクトリを作りました。cd は現在いるディレクトリであるカレントディレクトリを移動するコマンドです。もう一度pwdをしてみるとわかります。
 
<pre class="bash">
% pwd
/home/hironobu/desk
</pre>
 
自分の現在使っている環境より派生しているプロセスをpsコマンドを使って表示させてみましょう。今のシェルを含めて表示されます。
 
<pre class="bash">
$ ps
PID TTY TIME CMD
516 pts/1 00:00:00 bash
937 pts/1 00:00:00 ps
</pre>
 
PIDはプロセスID、TTYはターミナル名、TIMEは今までにプロセスが消費したCPU時間、CMDはコマンド名です。では、今、このコンピュータ上で動いているプロセスは全部でいくつあるでしょうか。-Aオプションを使うと、すべてのプロセスが表示されます。
 
<pre class="bash">
$ ps -A
</pre>
 
端末を流れていった行まで戻って数えるのは大変そうです。1行に1プロセスが表示されているのでwcを使ってカウントすれば簡単に数えることができます。パイプ | を使いpsの出力をwcの入力にしてしまいます。行数だけ数えて表示させるにはwcの-lオプションを使います。
 
<pre class="bash">
$ ps -A | wc -l
46
</pre>
 
;補足: 自分自身のプロセスつまりps -Aのプロセスとwc -lのプロセスをカウントいることを注意してください。
今度は、どんなプロセスがあるのか見てみます。画面を一定量スクロールさせるコマンドmoreを使います。moreで止まっている画面を先に進める時はスペースを入力します。
 
<pre class="bash">
$ ps -A | more
</pre>
 
一番最初に見出し行がついているのを忘れていました。先ほどのプロセス数は1つ多いことになります。それでは見出し行を出力しないにはどうしたら良いでしょうか?
オプション "--no-headers" も同様に見出し行を出力しない時に使うこともわかりました。
 
<pre class="bash">
$ ps h -A | wc -l
45
</pre>
 
このパイプで送るというのはUNIXが生み出したアイデアです。ps はプロセスを表示するという機能moreやwcは表示のみ、入力された文字数、単語数、行数を数えるのみの、いわば専門の機能を提供するツールです。psにプロセス数を数える機能や、画面で表示した時に画面のサイズに合わせて一旦停止するといった機能をくわえるという発想も可能でしょう。しかし、そうするとpsのプログラムサイズがどんどん大きくなっていきます。またmoreやwcの機能は別にpsに限らず、他のツールでも同様に必要になります。ならばmoreやwcを独立して作
り、他のツールでも組み合わせれるように共通化してしまえば、システム全体としてみた場合、さらにコンパクトになります。これがUNIX的な発想です。この背景はソフトウェア工学的な機能分割によるツールの再利用性向上と組合せによるソフトウェア生産性の向上という共通理解
<ref>
''ソフトウェア作法 '' , Brian W.Kernighan (著), P.J.Plauger (著), 木村 泉 (翻訳), 共立出版 (1981/05), ISBN-10: 4320021428
</ref>
があります。
<pre class="bash">
$ cat /etc/passwd
</pre>
<pre class="bash">
$ sed -e 's/.*/&/' /etc/passwd
</pre>
<pre class="bash">
$ sed -e 's/.*/&/' /etc/passwd > /tmp/i
</pre>
<pre class="bash">
$ sed -e 's/.*/&/' < /etc/passwd > /tmp/i
</pre>
<pre class="bash">
$ diff /etc/passwd /tmp/i
</pre>
次のように実行すると、0 (変更なし)、1(差分あり)、2(異常終了した)が表示されます。
 
<pre class="bash">
$ diff foo bar > /dev/null ; echo $?
</pre>
 ;調べてみよう: 他にファイルの中身を表示させる方法には、どんな方法があるだろうか。少なくともあと2つは考えてみよう。
=== グラフィカルなデスクトップ環境 ===
GnomeやKDEといったグラフィカルなデスクトップ環境をGNU/Linuxは用意しています。
今やGNU/LinuxのGUI環境はMacOSやWindowsといった身近なパソコン環境にひけをとりません。
GNU/Linuxの用意している3Dグラフィック環境 compiz fusionなどはWindows Vista Aero の機能以上にギミックな機能を兼ね備えています。fusionなどは視覚的なギミック(あまり意味はないが、派手に見せて驚かせる)な機能を兼ね備えています。意味があるかどうかは別としてGUI環境をカスタマイズしてMac OSのように見せることもやろうと思えばできます。   * Customize Ubuntu 18.04 : how to fully customize GNOME 3 | Make Ubuntu 18.04 look like Mac Os <youtube>sfsKwzElxQg</youtube>    
Ubuntu 9* Linux Mint 17.10 3D Desktop<youtube>lYgWE6Svpag</youtube>1 Cinnamon Edition - A Quick Look
<youtube>K6pmKJ_-nFQ</youtube>
* Linux Mint 13 maya Compiz Fusion17.2 Rafaela Cinnamon Edition - See What's New<youtube>r37kz4bg9bABUrgsngJMVo</youtube>
1980年代UNIX上では、数多くのウインドウシステムが作られ、そして淘汰されていきました。
米SUN社は独自のウインドウシステムであるSunViewやNeWS を持っていましたし、日本で作られたGMWなどもありました。を持っていましたし、日本で作られたGMW<ref>京都大学、オムロン、アステックが共同で開発</ref>などもありました。
それらの中で今日まで生き残ったのがMITのProject Athenaで作られたX Window Systemです。
またネットワーク透過を前提としているので、
ハードウェアコントロールとウィンドウシステムと独立している設計のため特別にハードウェアを意識するようなプロトコルではありません。
しかし今日においては、これらの課題はCPU/GPUの高速化、あるいはツール・ライブラリ類の充実化により差がわからない程度にまでなっています。  たぶん一番の弱点はデバイスドライバのサポートです。たとえば高価なグラフィックボードのデバイスドライバは、まず最初にメーカーからプロプライエタリなソフトウェア<ref>たとえばnvidia社 GeForce シリーズのGNU/Linux用デバイスドライバは[http://www.nvidia.co.jp/Download/index.aspx nvidia社のサイト]から無料でダウンロードできますし、またubuntuでも「制限のあるソフトウェア」としてダウンロードできますが、それはフリーソフトウェアの意味する自由ではないことに注意してください。</ref>の形で供給されるため、フリーソフトウェアとしてGNU/Linuxのデバイスドライバ<ref>Linuxカーネルの統括責任者ともいえるLinus Torvaldsが2012年6月の [http://youtu.be/O0r6Pr_mdio 講演で示した態度で] を見ると大体の想像はつくと思います。</ref>として入手するまでには時間がかかります。その意味においては「最新のグラフィックボード」の提供するすべての機能を、すぐに'''自由'''には使えないといえるでしょう。GPUの高速化、あるいはツール・ライブラリ類の充実化、実装技法の向上により他のウィンドウシステムと遜色のないものとなっています。
== 脚注 ==
----
[[目次]]へ
 
[[Category:UNIXオペレーティングシステム|3]]