差分
/* 新たなユーザアカウントを加える場合 */
今日においては、MacやWindowsと同じような使い勝手のパソコンとして販売されるレベルになっています。
=== 携帯からスーパーコンピューターまで スマートフォンからスーパーコンピューターまで ===
[[image:Top500 OSFamily 2014-JunOSFamily2017Nov.png||thumb|300px|Top500のリストより (20142017/06)]][[image:Top500_os_family_2012_06.png||thumb|200px|Top500のリストより (2012/0611)]]
[[image:IDC-Smartphone-OS-share.png||thumb|300px|IDCのスマートフォンOS市場占有率の資料 (2017/5)]]
<ref>
What is Android? http://code.google.com/android/what-is-android.html
</ref>、
<ref>
[http://developer.apple.com/library/ios/#documentation/Miscellaneous/Conceptual/iPhoneOSTechOverview/IPhoneOSOverview/IPhoneOSOverview.html About iOS Development]
</ref>
* [http://www.ibm.com/developerworks/linux/linux390/ IBM メインフレーム] / [https://www-03.ibm.com/systems/z/os/linux/ Linux OS on IBM z Systems]
* [http://www.android.com/ Android]
** スマートフォン・マーケットにおける[http://www.idc.com/prodserv/smartphone-os-market-share.jsp Androidのシェア](最新版)* [http://www.top500.org/ 世界のスーパーコンピュータTop500世界の HPC Top500]
GNU/Linuxの「何でもできる」というのは醍醐味の一つでもあるのですが、しかし、何でもできるといってもGNU/Linuxを手に入れた初心者がスーパーコンピュータを操れるわけもありません。Linuxが搭載されたスーパーコンピュータを手に入れた初心者がスーパーコンピュータの計算能力をフルに発揮するような操作が出来るわけではありません。そしてまた、本当のGNU/Linuxの能力の全容を理解しようとすると、本質的には携帯電話 Linuxの能力の全容を理解しようとすると、本質的にはスマートフォン からスーパーコンピュータまでのコンピューティングを知ることになります。
手に入ることと、使いこなせることとを混同してしまうあたりが"UNIX(GNU/Linux)は難しい"という部分につながっているのではないかと筆者は想像しています。
しかし最も大切なのはUNIX的な考え方(使うことではなく)を理解することではないでしょうか。
=== GNU/Linuxの何を学ぶべきなのか ===
「GNU/Linuxでもワードプロセッサのアプリケーションが動きます」というレベルで満足であれば、この先を読み進める必要はありません。このテキストではGNU/LinuxをベースにしてUNIX的な考え方を学ぶというのがテーマです。残念ながらGNU/LinuxやUNIXのHOWTOではありません。アプリケーションレベルでのハウツー本が欲しいのであれば
[httphttps://astoregoo.amazon.co.jpgl/linux-beginners-22 Amazonにたくさん初心者向けの本が出ていますik1LUf Amazonにたくさんの入門本が出ています]ので、自分にあった本を選んで、手元において読んだ方がいいでしょう。
==== 新たなユーザアカウントを加える場合 ====
最初はインストール時に設定したユーザ名だけですが、
<ref>
</ref>
いま作った 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を独立して作
<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>
<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]]