内容についてのコメント
提供: Linux標準教科書シリーズ/ Linux Standard Text series
1章 Linuxとは -- 1
1.4.2でrpmに関する説明が入っていますが、"RedHat Package Manager"は「当時は」レベルで、今は"RPM Package Manager"となっています(開発・管理を外部にしたからみたい)。 補足するか変更するなりを検討したほうがいいかもしれません。
> このコメントはTrackerに転記しました。http://www.lpi.or.jp/linuxtext/wiki/index.php?%E8%AA%A4%E6%A4%8D%E3%81%AA%E3%81%A9%E3%81%AE%E5%A0%B1%E5%91%8A%28Ver1.0.1%29%2F5 --kimura
GPLの説明の所で、ちょっと引っかかった所を。 >改変内容の公開の保証(改変はしていい、しかし、改変した内容は必ず公開すること!) >ただライセンス上、改変したとき(要求があったら)必ずその内容を公開しなくてはいけない、という条件がありました。
GPLを書くとそれだけで1冊の本になってしまうので、どこまで書くかだとは思いますが、この表記だと、「個人的もしくは社内だけで使うための改変も、必ず全ての人に公開しなくてはならない」と誤解されてしまうのではないでしょうか。 「改変したら→公開の義務」ではなく、「改変物を公開したら→ソース開示の義務」といったニュアンスの方が誤解が少ないと思います。
-- 括弧の部分は不要かもしれませんね。--kimura 2009-12-24 (木) 12:19:25
2章 基本的なコマンド -- 11
- ワイルドカードの初出が2.4.1 findですが、2.1.2 lsで取り上げて欲しいです。 -- horihori 2009-09-08 (火) 21:07:52 - 2.1.4 mvコマンドの実習は、まず移動、そしてファイル名の変更の順が説明しやすいです。 -- horohori 2009-09-08 (火) 20:39:10 - ワイルドカードやmv以外にも手直しが必要そうですね。演習の流れがスムーズにできるように工夫した方が良いですし、ファイルのディレクトリツリーの構造が理解できていないと理解が難しいように思います。-- kimura 2009-11-19 (木) 21:37:13
コマンドの実行結果が正常か異常かを判断するため、リターンコードを
確認する方法を記載すると有益と思います。
■コマンドの実行結果の確認
実行したコマンドが正常に終了したか、何らかの異常で終了したのかを識別できるよう、 コマンドの終了状態がシェル変数?に格納されます。 一般的にコマンドが正常終了した場合は0が、異常終了した場合にはそれ以外の値が格納 されます。終了状態は、シェル変数?をechoすることで参照可能です。 $ ls Desktop $ echo $? 0 lsの実行結果が正常終了であったため、終了状態に0が格納されました。 $ $ ls -O ls: オプションが違います -- O 詳しくは `ls --help' を実行して下さい. $ echo $? 2 lsにありえないオプションを付与したため、終了状態に2(異常)が格納されました。 $ コマンドによっては、マニュアルに詳細なコードと意味が記載されている場合もあります。 $ man zip : :省略 : DIAGNOSTICS The exit status (or error level) approximates the exit codes defined by PKWARE and takes on the following values, except under VMS: 0 normal; no errors or warnings detected. 2 unexpected end of zip file. 3 a generic error in the zipfile format was detected. :
3章 正規表現とパイプ -- 37
3.2.1 出力のリダイレクト -- 39
リダイレクト(>)に加えて、出力先のファイルの末尾に追加していくアペンド(>>)についても記載してはいかがでしょうか。
3.3 標準エラー出力 -- 41
シェルスクリプトをクーロンから実行するような場合など、標準出力も標準エラー出力も表示したくない場合には、
nullデバイスファイル(/dev/null)にリダイレクトさせる手法をよく用いますので、記載があると有益かと思います。
実行例
$ ls -l tekitou > /dev/null 2>&1
(標準出力とエラー出力をnullデバイスにリダイレクト。結果としてどこにも出力されない)
3.5.1 grep コマンド -- 44
grepでよく使うオプションを説明に追加してはいかがでしょうか。
-e 文字列
文字列を検索パターンとして扱う。複数の検索対象文字列をOR条件で比較する場合に使う。
例:/etcディレクトリにあるファイルでaaaまたはbbbという文字列を含むもの
$ grep -e aaa -e bbb /etc/*
-i
検索パターンと入力ファイルの双方で、英大文字と小文字の区別を行わない。
例:/etcディレクトリにあるファイルでaaaまたはAAAという文字列を含むもの
$ grep -i aaa /etc/* (パターン部はaaaでもAAAでも、aAaのように大文字・小文字が混在していてもかまわない)
-v 文字列
検索条件として、文字列を含まない
例:/etcディレクトリにあるファイルでaaaという文字列を含まないもの
$ grep -v aaa /etc/*
4章 基本的なコマンド2 -- 49
4.1 ファイルのタイムスタンプの変更(touch) -- 50
オプションなしだとtouchコマンドを実行した時間に変更されますが、例えばログファイルのガベージ動作の確認を
行いたい場合など、故意に過去の時間にしたい場合があります。
”-t MMDDhhmm”オプションで指定の時間に変更(または作成)されることの説明があれば有益かと思います。
[オプション]
-t 時間(MMDDhhmm形式) 最終修正時間を指定した時間に設定します。
[実習:最終修正時間を任意の時間に設定する]
$ ls -l hosts.bak -rw-r--r-- 1 okada okada 198 4月 9 12:42 hosts.bak $ touch -t 03091015 hosts.bak $ ls -l hosts.bak -rw-r--r-- 1 okada okada 198 3月 9 10:15 hosts.bak
5章 エディタの使い方 -- 63
- 5.1.2 実習の説明が中途半端なので、もう少し丁寧に説明して欲しいです。 そもそも、この説明では、文字列を入力できないのでは?-- horihori 2009-09-09 (水) 21:26:33
6章 管理者の仕事 -- 89
6.1.2 ユーザの作成 -- 90
ユーザを作成した時点ではパスワードが設定されておらず、ログインユーザとして使用できません。
ログインユーザとして使用する場合は、引き続き「6.2 パスワードとパスワードファイル」で
パスワードを作成する旨を記載したほうが間違いがないかと思います。
6.1.4 ユーザの削除 -- 92
ユーザの削除時、ホームディレクトリも合わせて削除するオプションについての説明があると
便利かと思います。
[オプション]
-r ユーザのホームディレクトリ及びその中のファイルも同時に削除します。
7章 ユーザ権限とアクセス権 -- 109
- 「パーミッション」という言葉の初出が、7.3 演習です。まずは本文で説明すべきです。 -- horihori 2009-09-09 (水) 21:31:59
7.2.3 ファイル作成のモード -- 117
umaskの変更は、umaskコマンドを実効したシェル内でのみ有効であり、
別のシェルではデフォルトのマスク値に戻っている旨を記載したほうが
誤解がないかと思います。
またその場合、デフォルトのマスク値はbashrc等のログインスクリプト
にて設定される旨も合わせて記載するとよいと思います。
また、umaskコマンドに-Sオプションをつけると、8進数ではなく人間に
わかりやすい形式を扱えるので、初心者にはわかりやすいと思います。
[オプション]
-S [マスク値] モードを表示または設定するとき、8進数ではなく人間にわかりやすい 形式を使用します。
例:現在のマスク値を表示する
$ umask -S
u=rwx,g=rwx,o=rx
例:マスク値を変更する(その他をrwxとする)
$ umask -S o=rwx
u=rwx,g=rwx,o=rwx
8章 シェルスクリプト -- 123
8.3.2 変数 -- 127
高度なプログラミングになってきますと配列変数を使うこともあるので、bashで使用できる配列変数についての説明もあるとよいかと思います。
8.3.X 配列変数
bashでは1次元の配列変数を使うことができます。配列変数はインデックスを角括弧[]で囲います。配列変数を参照するには波括弧{}で変数名全体を囲います。なお、他の変数同様、C言語における変数のように事前に宣言する必要はありません。
実習:配列変数への代入と参照
$ a[0]=aaa (配列変数aの0番目に文字列aaaを代入する) $ a[1]=bbb (配列変数aの1番目に文字列bbbを代入する) $ echo ${a[0]} (配列変数aの0番目を参照する) aaa $ echo ${a[1]} (配列変数aの0番目を参照する) bbb $ index=0 (配列変数の参照にインデックス用の変数を使用する) $ echo ${a[$index]} aaa $ index=1 $ echo ${a[$index]} bbb $
8.3.6 シェルスクリプトのオプション -- 130
一行が長くなる場合、途中で\(バックスラッシュ)を行末に入れて折り返す
ことで、見やすくすることができることを記載すると有益かと思います。
■長い行の折り返し
一行が長くなる場合、途中で\(バックスラッシュ)を行末に入れて折り返す
ことで、見やすくできます。
実習:折り返し行の確認
$ cat linefeed.sh #!/bin/sh echo "一行が長い場合は\ バックスラッシュで\ 折り返すことができます" $ ./linefeed.sh 一行が長い場合はバックスラッシュで折り返すことができます $
8.4.1 if文 -- 133
whichコマンドは、以下の様にパスがわからないコマンドのパーミッションを確認する場合等によく使用しますので、別途2章(基本的なコマンド)辺りに項目を起こして説明してもよいかと思います。
# ls -l `which ifconfig` -rwxr-xr-x 1 root root 71528 May 25 2008 /sbin/ifconfig
2.2.X コマンドのパスを表示
PATH環境変数に含まれるディレクトリ配下に存在するコマンドのパスを表示します。
[書式]
which コマンド名
[実習]
catコマンドのパスを確認してみます。 $ which cat /bin/cat $
コマンドが存在するディレクトリがPATH環境変数に含まれていないと、whichコマンドの結果はエラーとなります。例えば管理者権限でないと使用できないコマンドへのパスは一般ユーザでは設定されていないため、そのようなコマンドはwhichでは確認できません。
$ which ifconfig /usr/bin/which: no ifconfig in (/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/ldapreplica/bin)
PATH環境変数の内容を確認するには、envコマンドを用います。
$ env | grep PATH PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/ldapreplica/bin
8.4.2 一対多の条件分岐 -- 135
case文におけるC言語で言うところのdefaultルートに価する記述は、
値に*(アスタリスク)を用いることを記載すると有益と思います。
例:
$ cat default_root.sh #!/bin/bash case $1 in 1) echo "引数に1が入力されました" ;; 2) echo "引数に2が入力されました" ;; *) echo "1,2以外が入力されました" ;; esac $ ./default_root.sh 1 引数に1が入力されました $ ./default_root.sh 2 引数に2が入力されました $ ./default_root.sh 0 1,2以外が入力されました $
8.5.2 while/until文 -- 137
コメント1:
シェルでC言語で言うところのforループ文を実現するには、exprコマンドを用いてカウンタ変数を
インクリメント(またはデクリメント)しながらwhile/until文で評価する記法となる旨の説明が
必要かと思います。
例:処理を10回繰り返す
$ cat roop.sh #!/bin/bash count=1 while [ $count -le 10 ] do echo "この処理は$count回実行されました" count=`expr $count + 1` done $ ./roop.sh この処理は1回実行されました この処理は2回実行されました この処理は3回実行されました この処理は4回実行されました この処理は5回実行されました この処理は6回実行されました この処理は7回実行されました この処理は8回実行されました この処理は9回実行されました この処理は10回実行されました $
コメント2:
breakとcontinueを用いて、while/until文の中でさらに条件によりループの制御ができることについて
説明が必要かと思います。
break文を用いると、無条件にその繰り返しを終了します。
ループがネストしているとき、breakの後にネスト番号を指定すると、そのネストに制御が戻ります。
continue文を用いると、無条件にその繰り返しの先頭に制御が戻ります。
ループがネストしているとき、continueの後にネスト番号を指定すると、そのネストに制御が移ります。
実行例:
while true do echo "Continue? (y/n)" read input case $input in n) break ;; y) continue ;; *) echo "Please input y or n." ;; esac done
これを実行すると、
$ sample.sh Continue? (y/n) y yを入力 Continue? (y/n) 繰り返しの先頭に戻る a y,n以外を入力 Please input y or n. Continue? (y/n) n nを入力 $ 繰り返しを終了する
8.7 実際のシェルスクリプト -- 140
43行目exit 0の説明にて、exitに与える引数を変えることにより、シェル
スクリプトの終了状態を変更できることの説明を追記すると有益かと思います。
exitコマンドに続いて引数を付与することにより、スクリプトに終了状態を設定 することができます。 exitコマンドを省略した場合、またはexitコマンドに続く引数を省略した場合は、 スクリプト内で最後に実行したコマンドの実行結果が設定されます。
9章 ネットワークの設定と管理 -- 145
- 9.1.1 で WAN の説明のところで「ワイドエリアネットワークはインターネットとも呼ばれ」とありますが WAN = Internet ではないですよね? --kimura 2009-11-19 (木) 21:32:05
- 9.1.8 の traceroute コマンドの実習で、
traceroute to lpi.org (24.214.XXX.XXX), 30 hops max, 38 byte packets
の説明で lpi.org まで 30 台経由となっているのは 最大で30台先までの経路を表示すると言う意味のようです。 --kimura 2009-11-26 (木) 17:59:13
- 9.20 で TCPラッパーの解説をしていますが、簡潔すぎて 9.3の章末テスト5の設問は無理でしょう。また9.2演習の4の設問は許可or禁止か曖昧です。 -- y_nomura 2011-08-18 (木) 17:00:59
9.1.12 IPアドレスの設定ファイル(GNU Debian/Linux) -- 154
- 章のタイトル
坂口たかお@長野県 (2008-09-30 (火) 17:51:33)
目次 9章
9.1.12IPアドレスの設定ファイル(GNU Debian/Linux) ↓ 9.1.12IPアドレスの設定ファイル(Debian GNU/Linux)
9.1.19 ネットワークセキュリティの設定 -- 161
ネットワークのセキュリティとして、ファイヤーウォール(iptables)についても記載したほうがよいと思います。
特に10章のネットワークサービスで使用されるポートは、デフォルトではポートが開いてないため、サービスを許容
する設定を入れないとクライアントからアクセスできません。
iptablesにてポートを開ける方法は、iptablesコマンドを直接実行してもよいですが、システムを再起動すると設定
がリセットされるので、RedHat系のディストリビューションであれば/etc/sysconfig/iptablesを編集してiptablesを
再起動する方法が便利と思います。
例:Apacheをデフォルトのポート(80)で実行する場合のファイヤーウォールの解除
管理者権限にて/etc/sysconfig/iptablesを編集し、以下の1行を追加する。 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT ※追加する位置は、以下の行より上にすること -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT 追加後、iptablesを再起動する。 # service iptables restart iptables: ファイアウォールルールを消去中: [ OK ] iptables: チェインをポリシー ACCEPT へ設定中filter [ OK ] iptables: モジュールを取り外し中: [ OK ] iptables: ファイアウォールルールを適用中: [ OK ] iptables: 追加のモジュールを読み込み中:nf_conntrack_netbios[ OK ] # iptablesの再起動後、追加したサービスが許容されていることを確認する。 # iptables -L | grep http ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http #
10章 ネットワークサービス -- 165
- 思い切って、10章全体を削除し、サーバー教科書へマージしてはいかがでしょうか? -- horihori 2009-09-15 (火) 20:46:37 - 10.1.3 表10-1 は、httpd.conf に出てくる順番に書いた方がわかりやすいです。 -- horihori 2009-09-15 (火) 20:50:15
11章 X Window System -- 193
12章 ハードウエア -- 203
13章 ファイル管理 -- 215
- 13.2.1 実習の画面ですが、普通にインストールすると、swapは無いです。 -- horihori 2009-09-10 (木) 21:45:31 - 13.3 ファイルシステムの表にEXT4も追加して欲しいです。 -- horihori 2009-09-10 (木) 21:55:02
Linux標準教科書 -- 246
- サーバー教科書の2.2と2.3と同じものを、巻末資料として追加して欲しいです。 -- horohori 2009-09-07 (月) 21:12:14
- 前提となる実習環境を、もう少し詳しく記載して欲しいです。例えば、X Window をインストールしているとか。 -- horihori 2009-09-10 (木) 22:21:32
- ランレベルという言葉が何度も出ているが、それが何であるかの説明がどこにも無い。13.2.3 では説明になってない。 -- horihori 2009-09-10 (木) 22:27:24
- 内容がスカスカなので理解するためには内容を充実させる必要があります。 -- abe 2010-07-29 (木) 01:32:19
- コマンドオプション: 私はcp -aとよく使います。-aは属性も階層も含めたすべてをコピーします。 -- abe 2010-07-29 (木) 01:33:53
- chmod: ファイルの属性には他にsetuid、setgid、sticky bit等があります。 -- abe 2010-07-29 (木) 01:35:55
- シェルスクリプト:優れている点はunixコマンドとの親和性です。なのでsed、awk等も含めるべきです。 -- abe 2010-07-29 (木) 01:37:40
- 最後に複数行コメントが書けると書き込むユーザにとって負担がへり助かると思います。有難うございました -- abe 2010-07-29 (木) 01:42:04
- 追加:セキュリティでiptablesの知識もかなり基本部分に含まれます。 -- abe 2010-07-29 (木) 01:43:56
遅レスすいません。複数行のコメントでしたら直接編集されてしまって構いません。sed,awk を含めるのは現状では難しいと執筆者の方々は判断されているようです。--kimura 2010-09-29 (水) 14:53:16
- 「Linux標準教科書」をLaTeXで是非,組み直したい.今のは見た目がやや汚い気がする. -- ut 2011-02-17 (木) 01:31:20
- 「cat は”接続”」というコラムで、「cat は、conCATenate(接続) という意味で、「FILE1 の内容と”標準出力と”を接続する」」と説明してますが、これは間違いで「cat は、複数ファイルを連結(conCATenate)して標準出力に出力する。」という意味ではないでしょうか? -- meme 2011-03-31 (木) 10:52:08
- 2.1.3のcpの書式で cp src-file dst-file となっているが、他の書式と合わせて cp コピー元ファイル コピー先ファイル とした方が良いかと思います -- kamaga 2011-06-24 (金) 13:49:23