UNIX/Linux勉強会資料
- 初出
- 2007-11-17
1. はじめに
1.1. 本日の講師
- UNIX歴は約13年。
- ふだんはJavaプログラマ
1.2. 本日のゴール
- UNIXを使うときの基本的な考え方を知り、楽しく便利にUNIXを活用できるようになる。
- UNIXって便利で面白いもんだな、暮らしに役立つな、と思ってもらう
- Windowsとは違う世界を体験してもらうことで、新たな視点を導入する。
2. UNIXとLinux
2.1. UNIX
- 代表的なオペレーティングシステム(OS)の1つ。
- 多くのコンピュータ技術の方向性に多大な影響を与えた
- 「UNIX」が何を指すかはその時々で違う。
- UNIX風のシステム
- 規格/商標の名前。現在は The Open Group はUNIXの商標を保持
- 最近はPOSIXという規格がほぼUNIXを指しているという説あり
2.1.1. 特徴
- マルチユーザー、マルチタスク(いまはわりと当たり前)
- 管理者(root)とユーザーが分かれている
- 高級言語(C言語)で記述されていることによる高い移植性
- 長い歴史にもまれ、安定動作する
- ソフトウェア開発環境として優秀
- 科学技術計算や各種エンジニアリング分野で活躍
- UNIXワークステーション、PC-UNIX
- インターネットの技術の多くはUNIXで生まれ育った
- TCP/IP, email, ftp, WWW
2.1.2. 歴史
- 1969年ごろに誕生
- AT&Tベル研究所のケン・トンプソン、デニス・リッチーが開発
- 数年後にC言語で書き直される
- その後、数々の亜種が生まれ、分裂や統合を繰り返して現在に至る http://www.levenez.com/unix/history.html
- 大きくわけるとAT&T系のSystem VとUCB系のBSDがある
- 種類が違うとコマンドのオプションとか挙動が微妙に違う
- ちなみにC言語はUNIXの開発に際して作られた言語といって良い
- デニス・リッチー(K&RのR)作。K&RのKはawkのK。
2.1.3. UNIXでの考え方の一例
- テキストファイルが大切
- 設定変更にはテキストファイルを編集
- データを空白で区切ったテキストファイルの処理に長ける
- 単純なものを自由に組み合わせる
- 20の努力で80の成果
- ないものは作る
- いろいろと省略する
- 互助の精神
2.2. Linux
- UNIX系OSの1つ
- "Linux"は、OSの核(カーネル)の名前であり、単体では利用できない
- 利用できるようパッケージした数々の「ディストリビューション」がある
- Debian, Ubuntu, KNOPPIX, Gentoo, TurboLinux
- オープンソースであり、フリーソフトウェア。GNU GPLで配付。
- フィンランドの学生、リーナス・トーバルズが開発し、多数のプログラマを巻き込んで進化を続け、現在に至る
2.3. GNU
- フリーソフトウェアとしてUNIXに似たOSを作るプロジェクト
- リチャード・M・ストールマンが開始
- GNU's Not Unix
- 「私の名前は私の名前です」みたいなもん。
- 「フリーソフトウェア」は「無料」ではなく「自由」なソフトウェア。
- 誰でも「自由」に開発、利用、コピー、改変できる。
- 各種ユーティリティ、Cコンパイラ、ライブラリなどを開発
- GCC, glibc, GNU Emacs、bashなど
- カーネル(GNU Hurd)は開発初期段階
- Linuxをカーネルとして用いたものをGNU/Linuxと呼ぶ
- 実際はGNUツール類も含めて「Linux」と呼ばれることが多い
- Linuxをカーネルとして用いたものをGNU/Linuxと呼ぶ
2.4. Linux以外のUNIX系OS
- Solaris, AIX, HP-UX, Mac OS X(Darwin), FreeBSD, OpenBSD, NetBSDなど。
2.5. X Window System
- UNIX系OSで広く使われているウィンドウシステム。80年代にMITが開発。
- 「X Windows」や「X Window」ではないことに注意。略すなら「X」または「X11」。
- ネットワーク透過、クライアント・サーバ方式
- PC-UNIXではXFree86が一般的だったが、ここで数年X.Orgに移行。
- Xが管理しているのはウィンドウの中身だけで、UIの多くはウィンドウマネージャが担当。
2.6. KNOPPIX
- 本日利用するディストリビューション
- ハードディスクにインストールせずとも、CDで起動して使えるLinuxディストリビューション。
- 産総研が日本向けにカスタマイズしたものをリリースしている
2.7. UNIXと日本語
2.7.1. 文字コード
- JIS、シフトJIS、EUC-JP、UTF-8
- UNIXではEUC-JPが一般的だったが、最近はUTF-8に移行している。
2.7.2. 日本語入力
- Kinput2, Anthy, uim, SKK, PRIME
- たくさんあってわかりにくい
2.7.3. フォント
- 自由に利用できる日本語フォントは貴重。まだまだ不足している。
- フォントはお金を出して購入すれば利用できる。
3. UNIX操作の基礎
3.1. CUIとGUI
- UNIXはもともとコマンドラインで利用する
- CUIは不便かというとそうでもない
- 向き不向きがあるが、我々の作業の多くは文字ベース
- CUIも進化している。何から何までタイプしなくてもよい
3.2. シェル
- システムとのやりとりをする際の主となるプログラム。WindowsならExplorerあたりが該当。
- シェルにもいろいろある。おすすめはzsh。今日は主にbashを用いる。
- sh(系)
- オリジナルの/bin/sh(Borneシェル、Bシェル)とその子孫たち。
- ksh, bash, zsh
- csh(系)
- ビル・ジョイによるCに似た構文のシェルとその子孫たち。
- tcsh
3.3. ファイル
- ファイル
- UNIXではいろんなものがファイル扱い。デバイスファイルなど。
- カレントディレクトリ
- フォルダとディレクトリ
- フォルダはMacやWindowsでディレクトリを指す言葉。
- ディレクトリの区切り文字は'/'。/usr/bin/ls など。URLと同じ。
- 基本コマンド ls, cd, pwd
- 相対パスと絶対パス
- 絶対パスはルートディレクトリ(/)から記述。/bin/shなど。
- 相対パスはカレントディレクトリを起点にパスを記述。
- カレントディレクトリが違えば意味が違う。
- 1つ上のディレクトリは「..」と表わす ../bin/ls など
- 代表的なディレクトリ構成(種類によって異なる)
- / ルート。単一の根となるディレクトリがある Windowsではドライブに分かれており単一の根はない。
- /bin 実行可能プログラムが入っている。ごく基本的なもののみ。
- /lib ライブラリ。
- /usr/bin ユーザー向け実行可能プログラム。
- /usr/lib ユーザープログラム向けライブラリ
- /usr/local そのサイトでインストールしたものを置く /usr/local/bin など
- /home ホームディレクトリを置く /home/kaneuchi など。
- /mnt ハードディスクなどをマウントする領域
3.4. 基本機能
- ヒストリ。前に入れたコマンドを再現可能。
- 補完。入力候補(コマンド、ファイル、ディレクトリ)を自動入力。
- ワイルドカードの展開(*, ?)。名前の条件でファイルを指定。
- バックグラウンド実行(&)
- 連続実行(;, &&)
- エイリアス。長いコマンドを別名で定義
3.5. とりあえずやってみよう
- ls ファイルの一覧
- echo 引数を表示
- more ファイルの内容を表示
- less ファイルの内容を表示
- wc 単語を数える
- grep 条件に合う行を抽出
- bc 計算する
- mv ファイルの名前変更
- rm ファイルを消す
- find 検索 find . -name "*.dat" -print find . -type d -print
- date 日付表示
- date -d '2 weeks'
- date -d '2006-11-22 100 days'
- date -d '2006-11-22 -100 days'
- cal カレンダー表示
- cal 1975
3.6. 複数コマンドを組み合わせる
- リダイレクション。出力先の切り替え。 ls -l > ls-l.txt bc < input.dat
- パイプ。あるコマンドの出力を他のコマンドの入力とする ls -l | less
- バッククオート。コマンドの出力を引数にする
- xargsというのもある
3.7. シェルスクリプト
- 一連の定型作業をあらかじめ書いておいて、自動的に実行できるようにする。
- 基本的にはコマンドを並べたテキストファイル。
- sh filename で内容を自動的に実行できる
- filenameだけで実行できるようにするには
- 先頭に#!/bin/shとつける(/bin/sh用の場合)
- ファイルに実行権限をつける chmod u+x filename
- 引数、変数
- 制御構造
- 単純フロー
- 繰り返し for/while
- 条件分岐 if/case
- 関数
3.7.1. 例
#!/bin/sh # rename foo bar # カレントディレクトリにある*.fooについて、bar-1.foo, bar-2.foo という名前に変える index=1 for file in *.$1 do basename=`basename $file $1` name=$2-$index.$1 mv "$file" "$name" index=`expr $index + 1` done
3.7.2. 例題
カレント以下の各ディレクトリにおいて、その名前とファイル、ディレクトリ数を出す
3.7.3. コツ
- 部分的に試しながら作る
- 途中段階で思ったとおりの出力になっているか、など
- いまの自分のニーズを満たす、最低限度のもので良い。
- 使い捨てるつもりでサクっと作る
- 将来の自分や、他人が使うときのことはとりあえず考えない
- そのためにはエラーチェックとかいろいろ考えなくちゃいけない
- ぜんぶ覚える必要はない
- だいたいどんなことができるのか
- どんなことならできそうか
- どのへんをどうやって調べればいいのか
- やりたいことをできることの列に落とし込む
- コンピュータにもわかりそうなことはコンピュータに判断させる
- いくつあるか?
- 行、単語、文字など
- どんなパターンか?
- ソート
- 計算
- 今日の日付
- わからないこと
- 文章の意味
- ユーザーの意図
- 善悪
- 今日の天気(ウェブサービスを使えばわかるかも)
- いくつあるか?
4. テキスト編集
4.1. テキスト編集は重要
たくさんの作業がテキスト編集で成り立っている
- コマンド
- メール
- シェルスクリプト
- ソースコード
- ドキュメント
4.2. viとvim
4.2.1. これは何?
- くせがあるけど、たくさんのファンがいる優秀なエディタ
- 使いこなせば超強力に
- UNIXと名乗るものならまず入っている
- Windowsとかでも使える
- 大事なのは、いかに手を動かさずに目的を達成できるか
- カーソルキーとかマウスは遠い
4.2.2. 基本機能
- モードの切り替え
- 終了方法(重要)
- :q
- 保存
- カーソル移動
- 50行移動とか
- 検索、置換機能
- /foobarしてnで次を探す
- コピーペースト
4.2.3. 効率的なテキスト編集のための7つの習慣
- 7 habits of effective text editingという文書がある
- 7 habits for effective text editing 2.0というビデオがある(Google Tech Talk)
- 目的の場所まで素早くカーソルを動かすこと、同じことを繰り返さないこと、など
- 基本
- 非効率な部分に気付く
- もっといい方法を知る
- その方法を習慣にする
4.3. フィルタ
- cat 中身の表示、ファイルの連結
- sort ソートする
- uniq 重複行を取り除く(要事前ソート) -c で数えてくれる
- sed 置換する sed -e 's/foo/bar/g'
- paste
- 列をたしあわせる
- 行と列を入れ替える
- grep 条件にあった行を抽出
- awk 行単位の各種テキスト処理
- 表の列の入れかえ awk '{print $2, $1}' data.dat
- ヒストリの解析 history | awk '{print $2}' | sort | uniq -c | sort -r
4.4. 正規表現(Regular Expression: regexp)
- 特定の文字列ではなく、「パターン」を表現する
- grepやsedなど、多くのツールがサポート
- UNIX以外のツールでもサポートされている
- 検索や置換に使う。マッチしたパターンの一部だけ置換できる
- 利用例
- すべてのメールアドレスのユーザ名を「xxxx」にする
- すべてのURLを<a href=…>を使ってHTMLのリンクにする
- 利用例
- マスターすればテキスト処理が超強力に
- 正規表現の例
- Subject: で始まる行
- ^Subject:
- 4桁の数字
- [0-9][0-9][0-9][0-9]
- アルファベットの単語
- [A-Za-z]+
- Subject: で始まる行
4.5. diffとpatch
- diffは2つのテキストファイルの差分を検出
- patchはa.txtとb.txtのdiffの結果をもとに、a.txtの内容をb.txtに変換する
4.6. Emacs
- viと双璧をなす歴史と伝統とファンを持つエディタ
- 何でもできる(ファイル操作、メール、計算、ゲーム、ウェブなどなど)
- WindowsではMeadowというEmacsの派生バージョンが使える
- MacではCarbon Emacs Pakcageがある
- あとでデモします
4.7. 例題
- あるディレクトリ内のtxtファイルのうち、行数の多いもの順に並べて表示しよう
- あるディレクトリ以下のtxtファイルの行数の総計は?
5. 情報の調べかた
5.1. 基本
- man 標準的なマニュアル参照コマンド
- info GNU系のものはinfo形式になっているものが多い
- コマンドに-hとか–helpつけてみる
- とりあえず動かしてみる
5.2. ウェブで検索
- Google
- googleコマンドの自作なんてどうでしょう。
- シェルスクリプトで、いくつかの単語についてgoogleで何件あるか抽出してみよう
- Wikipedia
- ただしどれも鵜呑みにしてはいけない
5.3. その他
- Cheatsheetを手近に置いておく
- 達人が使っている様子を眺める
- スクリーンキャスト(操作している様子をビデオにして公開しているもの)を探す
- ソースコードを読む
- 勉強会にいく(関西Debian勉強会とか)
6. UNIXでの暮らし
6.1. データ処理
- アドレスDBがあって、その中にある名前のリストが別にある。個々の名前に対応するアドレスとともに出力せよ。
- 金額の合計は?
- データファイルにある名前の頻度ランキングを出そう
6.2. ソフトウェアのインストール
- バイナリパッケージ
- Linuxディストリビューションの多くがパッケージ管理システム(apt, RPMなど)を備える
- 依存関係なども管理してくれて便利
- 誰かがパッケージを作ってくれないと使えない
- Linuxディストリビューションの多くがパッケージ管理システム(apt, RPMなど)を備える
- ソースから
- めんどくさい
- 正式対応してなくても何とかなることがある
- 基本は ./configure; make; make install
6.3. アーカイブ
- tar ひとつのファイルにまとめる。無圧縮。
- gzip 拡張子gz。 1つのファイルを圧縮する。一般的。
- bzip2 拡張子bz2。gzipよりも高圧縮率。
- zip Windowsと同じ
- tar.gz (tgz) tarでまとめたものをgzで圧縮
- tar xvfz foo.tar.gz で展開
- tar cfvz foo.tar.gz foo で作成
6.4. デスクトップ環境
- GNOME、KDEが有名
- だんだんWindowsみたいになってきた
6.5. 書類を作る
- LaTeX
- キレイにフォーマット
- WYSIWYGとは対極
- コメントアウトとかできて便利
- SmartDoc
- Emacs Org Mode
6.6. 絵を描く
- Tgif/GIMP/Diaあたりは有名。
- OpenOffice.org
- gnuplot
- GNU plotutils
6.7. メモをとる
- シェルスクリプトで作る
#!/bin/sh memodir=$HOME/memos if [ ! -d $memodir ]; then mkdir $memodir fi datestr=`date +%Y-%m-%d-%H%M%S` memo=$memodir/memo-$datestr.txt echo $memo vi $memo
- Emacsを利用
- ChangeLogメモ/howm/org-modeなど
6.8. メールを読む
- mutt
- Mew(Emacs用)
- Wonderlust(Emacs用)
- Sylpheed(日本製)
- Thunderbird
6.9. ウェブを見る
- w3m
- Firefox
- emacs-w3m
6.10. UNIXの達人を目指す
- いつも使いたいエイリアスなどは.bashrcなどに書いておく。
- 自分で作った便利なスクリプトはbinなどに入れて PATH を通しておく
- screen たくさんのシェルプロセスを切り替えながら使う
- zsh 最強のシェル。 `**/*.txt` でサブディレクトリすべてのtxtファイルが。
- find 検索は強力。 今日変更したファイルの一覧。 find . -type f -mtime -1 -print
6.11. Officeの書類を見る
- OpenOffice.org(他にもいろいろある。xlhtmlとか)
6.12. WindowsとUNIX
- Cygwin
- SFU
6.13. MacとUNIX
- Mac OS XはUNIXがベース。主にFreeBSDの実装が使われている。
7. 推薦図書
本はどんどん買いましょう
- UNIXプログラミング環境
- 歴史ある良書。ユーザーにとっても有用。
- UNIXマガジンのDVD
- 高いけど貴重な資料
- Life with UNIX
- UNIX文化や歴史について濃い本
- 詳説 正規表現
- 正規表現ならこれ。各種ツールでの差異などを詳説。
- フリーソフトウェアと自由な社会
- GNUの思想。直接のスキルアップにはつながらないので悪しからず。
8. まとめ
- UNIXは暮らしにも仕事にも役立ちます
- 実はテキストだけで事足りることはたくさんあります
- UNIXの便利なツールはWindowsでもMacでも使えます
- ふだんからUNIXツールを使って暮らせばすぐ身に付きます
- UNIXツールを活用して仕事を早く終わらせましょう
- これが終わったらみんなでご飯に行きましょう