web-dev-qa-db-ja.com

Linuxを深く理解するための最良のリソースは何ですか

私は長年Linuxユーザーでした。最近は毎日使っています。メディアの提案を探しています。商用書籍、無料の情報、オンラインビデオなど、OSをより深いレベルで理解するのに役立ちます。あなたの提案をお願いします。

10
Stuart Woodward

Linux Documentation Project guides page にいくつかの無料のガイドがあります。これは私がそこから選んだ短いリストですが、ページをスクロールして必要なものを見つける必要があります。

  • Linux入門-実践ガイド; 2008年6月
  • Linux on the Road; 2005年11月
  • Linuxシステム管理者用ガイド; 2005年7月
  • Advanced Bash-Scripting Guide; 2009年3月(そう、これはLinuxの理解にも役立ちます)

興味のあるトピックについては、特定の HOWTOs を探す必要があります。 別の日付でソートされたHOWTOリスト

Linuxのレビューの初心者ページ には、いくつかの初心者がいます。

最後に、これはオンラインで入手できる小さな本です- Linux Kernel in a Nutshell 。そのPDF 2007年版の形で。

これらの参照は、必要なものを自分で検索するための触覚としてのみ使用してください。

6
nik

Linuxを理解する最良の方法は、Linuxをひどく壊して修正することです。

16
Karl Katzke

個々のコンポーネントで遊んだわずか数年の経験で、深い理解が得られます。とはいえ、オレイリープレスの本の大部分は、あなたがダミーでなく24時間以上いる場合は、本当によく書かれていて完璧です。 :)

Linux From Scratch というプロジェクトがあります。これは、Linuxディストリビューションをゼロから構築する方法を示しています。あなたは一度行うことは教育的であるかもしれません。ソースからすべてをコンパイルする必要があり、最後にすべてを捨てるので、時間がかかります。

私は LWN.net のカーネルページが、カーネルでの動作方法を高レベルで追跡するために非常に貴重であると思います。

10
David Pashley

あなたが「より深いレベル」と言ったとき、コマンドラインをより深く理解することについて話しているのか(あなたがそれを想像できるなら、ディストリビューションに付属しているGUIを離れない人もいます)、または本当にカーネルドライバーの作成など、低レベルの粗雑なもの。前者の方が後者よりも多いと思います。

LinuxおよびLinuxで実行されているアプリケーションを使用して実行したいこと(Webサーバーの実行、Windowsホストへのファイルの提供、DHCPの提供、グラフィカルデスクトップの実行など)について、合理的な目標を設定することをお勧めします。あなたが「やっている」ときだけ学ぶことは私の固い信念です。目標を思いついたら、それを追求してください。つまり、manページ(たくさんのmanページ)、「HOWTO」ドキュメント、メーリングリストのアーカイブ、ランダムなブログ投稿、そしてもちろん、インストールまたはコンパイルして実行するさまざまなプログラムに付属するドキュメントを読むことです。ボックス。

教室ベースのIT認定コースを数年間教えてきたので、ある程度の権威があれば、自分が最も進歩していると思った生徒は、自分のデザインのクレイジーなプロジェクトを行っていて、席で学習している生徒だと言えると思いますズボンの。

前に述べたように、manページ、「HOWTO」ドキュメント( http://tldp.org/docs.html 、および 'ネット上の他の多くの場所)とメーリングリストのアーカイブは友達です。少なくともこの段階では、カーネルの内部について述べている本はすべて避けます。始めるのにそのような深い知識は必要ありません。

他の人と話す。サーバー障害は、良いアドバイスを得るのに最適な場所であることが判明しているようです。ここで質問してください。あなたがそうするのが愚かに見えるとは思わないでください。 Linuxに精通している人たちと「面談」をすることができるなら、それを試してください。 (私はあなたが意見を事実から分離することをお勧めしますが、Linuxコミュニティでは、他のコミュニティと同じように物事を行う方法の異なる意見を巡る「聖戦」がたくさんあります。 。)

LinuxのUnix遺産についての「深い」知識を得るには、古いUnix固有の管理マニュアルやリファレンスマニュアルが必要になる場合があります。私はこれらを早期に回避します(少なくとも、Unix由来のオペレーティングシステムの一部と比較して、Linuxで「取られないパス」の歴史的な性質を理解できるまで)。

あなたの全体的なスキルレベルが何であるかがわからないので、私は本に叫び声を上げます。 「TCP/IP Illustrated」を強くお勧めします( http://www.Amazon.com/Illustrated-Volumes-Addison-Wesley-Professional-Computing/dp/0201776316 )。これはLinux固有のものではありませんが、TCP/IPを扱う多くのことを行うので、それが「コールド」であることは簡単です。

一言で言えば、魔法の本や本、「マスター」が学んだ超秘密のビデオはないと思いますが、それにこだわって恐れていなければ、何を学ぶことにも限界はありません。手を汚します。

10
Evan Anderson

毎日それを使用する以外に(すばらしいことだと思います!)、Linuxボックスでネットワークに実装できるサービスについて考え始めることをお勧めします。 Linuxサービスに基づいて設計を開始し、準備ができたら調査して実装します。プロセスに間違いがあり、その経験はOSをより深いレベルで理解するのに役立ちます。

7
l0c0b0x

一般的なUnixの哲学とコマンドラインの優れた紹介については、Brian KernighanとRob Pikeの古典的な The Unix Programming Environment があります。

また、IBMの DeveloperWorks WebサイトのLinuxセクションには、900以上の記事があります。興味のあるトピックの記事リストを閲覧できます。

最後に、要点を把握する準備が整ったら、ソースに移動します。 kernel.org で使用しているカーネルバージョンのソースコードを入手し(ディストリビューションにはインストール可能なカーネルソースパッケージも含まれます)、Documentationディレクトリを確認してください。カーネルの内部と構成設定に関する参考資料がたくさんあります。

5
Ben Williams

ソース

もちろん、もしあなたが kernel を意味するなら。

カーネルとAPIの上のシステムを学習しようとしている場合、私は古い学校 Unix の学習から始めます。多分いくつか FreeBSD / OpenBSD / NetBSD / DragonflyBSD を試してみてください。少し Minix も役立ちます。次に SlackwareArchDebian および Gentoo に移動します。それらはすべて異なっています( andcomewithgreatdocumentation )、そしてそれらの中で違い、あなたの好奇心はあなたがそれがそうである理由をあなたに探させます、あなたは多くの技術的、商業的、政治的、歴史的知識を得るでしょう。

別の方法は、/etc、古いUnixマニュアル、そしてもちろん Google

LinuxのスクラッチlearningGNU/Linuxの優れた方法です。

3
voyager

独自のディストリビューションを構築するだけです。私はあなたのためにそれをしました、そしてあなたは何を知っていますか? 4か月後、10年以上Linuxを使用している周りの人よりも、Linuxの内部について知っていることに費やしました。

* nix環境のいずれかでの学習はholisticアプローチです。一連のエピファニーと経験が含まれます 。これは偶然ではありません。元の環境はコンピュータープログラマー向けに設計されているため、これは設計の意図的な副産物です。また、ユーザーエクスペリエンスではなく技術的な側面に重点が置かれているため、最大の欠点でもあります。それは「サービスなしで100年続く頑丈なフレームのある家ですが、そのサイディングは無計画でペイントは明らかに無視されています」。

これを、この哲学の鏡像であるWindowsと比較してください。ユーザーに具体的な体験を提供するが、物事の内部の働きからユーザーを保護する何かを行います。それは「美しいトリムとペイントのある家ですが、複数の回避策で何度も建てられた基盤」です。

実際に学習を開始するには、ハードウェアに固有のオプションを持つカスタムカーネルイメージを構築し、必要なオプションを使用してそれらをインストールすることをお勧めします。何かがどこかで壊れて、「正常」に戻すことができる場合とできない場合があります。これはその学習プロセスの通常の部分であり、問​​題が発生するかのようにアプローチする必要があります(つまり、これをプライマリインストールにせず、別のドライブまたは仮想マシンなどを使用してください...)

私は 同様の質問 で回答を行ったので、入力を減らすためにそれをクロスリンクします ここ 。また、最初のいくつかの段落 このページ を読むこともお勧めします。これにより、より良いfeelが得られます。のためにです。

3
Avery Payne

/proc/etcのファイルの読み取り/カタログ化を開始します-単にファイルを読み取るだけでは何の損害も発生しません(生成するファイルをcatする場合は、ターミナル/ ssh接続を台無しにしないでください)バイナリ情報)、そしてその多くは人間が読める形式です。 「sysctl -a」の出力も金鉱山です。面白いものを見つけたら、googleまたはmanで詳細を確認してください。

カーネルとOSがこのように機能する方法についてのいくつかの本物の宝石を見つけることができます。

いくつかのクイックポインタ:

/etc/inittab 
/etc/rcS.d 
/etc/rc2.d 
/etc/crontab 
/proc/1/environ 
/proc/filesystems 
/proc/meminfo 
/proc/cpuinfo 
 sysctl -a | grep vm.swappiness 
/etc/default#debian-based 
/etc/sysconfig#redh​​at-based 

ヒント-/ procの一部の出力はNULで区切られているため、読みにくいです。 'tr'を使用してNULを改行に変換します。例:

 Sudo cat/proc/1/environ | tr '\ 0'、 '\ n' 
2
Mike Pountney

Linuxやその他のオペレーティングシステムについて学ぶべきことがたくさんあります。 1つの種類の学習は、[〜#〜] i [〜#〜]が「深層」学習を呼び出し、カーネルがどのように動作するかを見つけることです、それが行う仮定、さまざまなビットが互いにどのように通信するか、およびハードウェアをどのように処理するか。それはカーネルに関するものです。そのようなものは、オペレーティングシステムがそのように壊れた理由を解明するのに非常に役立ちます。実際、私はそれを同じように学んだ Karl Katzke がした。私はものを壊して、それをより良くしました。

この種の知識については、Linuxは非常に簡単です。それはすべて多くの場所で文書化されています。同じことはWindowsに対してquiteと言うことはできませんが、そのためのドキュメントはまだたくさんあります。

次に、「OS内を移動する」学習があります。これは、bash/sed/awk/regexやその他すべての知識が役立つ場所です。事実なので、最近のオペレーティングシステムはカーネルよりもはるかに優れています。ベンダー提供のドライバーblobがあります。この特定のディストリビューションが起動スクリプトをどのようにパッケージ化しているかがわかります。さまざまなパッチ/更新メカニズムがあります。誰もが必要とするシステムデーモンがありますが、カーネルではありません。

これは、単純なkernel-fuよりもはるかに幅広い知識です。 Red Hatでの動作はディストリビューターによって異なるため、Slackwareでは同じように動作しない場合があります。ファイルの保存場所はさまざまです。彼らが「vi」を置き換えるために選んだものと同様に。

「Linuxの学習」は、シンプルなオペレーティングシステムではなく、エコシステム全体の学習に重点を置いています。

2
sysadmin1138

Linux、FreeBSD、OpenBSD、Solaris、さらには他のさまざまなLinuxディストリビューションも、Linuxについて多くを学ぶ良い方法です。それが物事をどのように異なる方法でしたかについて。自分がどこにいるのかを知るよりも、他の場所を訪れている間、自分の故郷について多くを学びます。

1
Kyle Hodgson

本に関して言えば、私はO'Reillyが好きなので、「Essential System Administration Pocket Reference」と「Linux System Administration」が出発点になる可能性があります。

私の TCP/IPネットワーク管理 のコピーは古いものであり、しばらく使用していませんが、何が起こっているのかをより深く理解することは非常に便利です。

Linuxを通常のデスクトップとして使用することで、すでに最初のステップを実行しています。

すべてのパーツがどのように接続されて構成されているかを理解したい場合は、 Gentoo を実行することをお勧めします。通常のstage3インストールから、独自のカーネルをコンパイルし、すべてのサービスをインストールし(ボックスにあるSSHを除く)、Xを自分でビルドして構成する必要があります。そうしていると、最終的にはバイナリLinuxインストールに含まれるすべてのビットについての理解が深まります。 Gentooが私が見つけたDistroの最高のドキュメントを持っていることや、Portageが素晴らしく強力で柔軟なパッケージマネージャーであることも害にはなりません。

1
Ophidian

このStackoverflowへの投稿 には、主題に関する正規の作業のほとんどを含む、Unix/Linuxリソースの大きなリストがあります。

Linuxが舞台裏で動く理由を学ぶもう1つの方法は、Linux From Scratch( http://www.linuxfromscratch.org/ )を使用することです。これは基本的に、Linuxシステムのさまざまなコンポーネントを手動でインストールおよび構成する一連の演習であり、基本的な知識を習得するのに非常に適しています。

これは「必読」として強くお勧めします。

Unixプログラミング環境-ブライアンW.カーニハン/ロブパイク

ISBN 0-13-937681-X

http://www.Amazon.com/Unix-Programming-Environment-Prentice-Hall-Software/dp/013937681X

1
KPWINC

私は「Linuxプログラミング」という本を持っていて、「Linuxを学ぶ」という本よりもOSについて詳しく教えてくれました。 ISBN番号があればよかったのですが、すばらしかったです。それは、「方法」だけでなく、「理由」のプログラミングにも関わっていたからです。

全体として、私の学習のほとんどは正直にそれを壊して修正することでした。それはゆっくりと起こり、私は12年経ってもまだ新しいことを学んでいます。

それは間違いなくプロセスです。重要なのは、非常に好奇心が強いことです。なじみのないものに出会ったときは、それに慣れてください。どのように、そしてなぜそれがカチカチ音をたてるのかについての知識を求め、基礎となるテクノロジーも学びます。

1
Matt Simmons

他の誰かがこれについて言及しましたが、それがさまざまなLinuxフレーバーを使用する上で私を最も助けたものだと思います。 Linuxを適切に処理していると思われる場合は、open/net/freebsdの使用を開始してください。
理由として、私が一緒に働いたほとんどのLinuxの人々は、他とそれほど違っていない1つまたは2つのLinuxディストリビューションを使用しているかもしれません。確かに、彼らのほとんどは手の甲のようなそれらのディストロを知っていたが、彼らはそれでも、特定の事柄で驚くべきことに驚かれる可能性がある。私は(炎戦を開始するのではなく)BSDが組み立てられる方法は、物事が行われる方法の「なぜ」を発見するのが少し簡単だと思います(さらに、bsdメーリングリストに潜んでいると、「なぜ」死ぬのかを説明します)。それはあなたの視点を変えることにかかっています、誰かが完全に異なる方法でそれをするまで、特定のものがなぜ彼らがそうであるのかを尋ねることは決してあなたには起こりません。

1
D.F.