私は長年Linuxユーザーでした。最近は毎日使っています。メディアの提案を探しています。商用書籍、無料情報、オンライン動画など、OSをより深いレベルで理解するのに役立ちます。あなたの提案をお願いします。
私は長年Linuxユーザーでした。最近は毎日使っています。メディアの提案を探しています。商用書籍、無料情報、オンライン動画など、OSをより深いレベルで理解するのに役立ちます。あなたの提案をお願いします。
回答:
Linux Documentation Projectのガイドページにいくつかの無料ガイドがあります。これは私がそこから選んだ短いリストですが、ページをスクロールして必要なものを見つける必要があります。
興味のあるトピックの特定のHOWTOを探す必要があります。別の日付でソートされたHOWTOリスト。
Linuxのレビューの初心者ページには、いくつかの初心者がいます。
最後に、これはオンラインで入手できる小さな本です-Linux Kernel in a Nutshell。2007年版のPDF形式です。
これらの参照は、必要なものを自分で検索するための触覚としてのみ使用してください。
Linuxを理解するための最良の方法は、Linuxをひどく壊して修正することです。
あなたが「より深いレベル」と言ったとき、コマンドラインをより深く理解することについて話しているのか(あなたが想像できるなら、ディストリビューションに付属している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を扱う多くのことを行うので、それが「コールド」であることは簡単です。
一言で言えば、魔法の本や本、「マスター」が学んだ超秘密のビデオはないと思いますが、それにこだわって恐れていなければ、何を学ぶことにも限界はありません。手を汚します。
個々のコンポーネントで遊んだわずか数年の経験で、深い理解が得られます。そうは言っても、Orelyly Pressの本の大部分は、もしあなたがダミーでなくて24時間以上あれば、本当に上手く書かれていて完璧です。:)
Linux From Scratchと呼ばれるプロジェクトがあり、これはLinuxディストリビューションをゼロから構築する方法を示しています。あなたは一度行うことは教育的であるかもしれません。ソースからすべてをコンパイルする必要があり、最後にすべて破棄するので、時間がかかります。
私が見つけLWN.net物事がハイレベルでカーネル内でどのように機能するかに追いつい用のカーネルページ貴重を。
毎日それを使用する以外に(すばらしいことだと思います!)、Linuxボックスでネットワークに実装できるサービスについて考え始めることをお勧めします。Linuxサービスに基づいて設計を開始し、準備ができたら調査して実装します。プロセスに間違いがあり、その経験はOSをより深いレベルで理解するのに役立ちます。
一般的なUnixの哲学とコマンドラインへの優れた導入については、Brian KernighanとRob Pikeの古典的なThe Unix Programming Environmentがあります。
また、IBMのDeveloperWorks WebサイトのLinuxセクションには、900以上の記事があります。興味のあるトピックの記事リストを閲覧できます。
最後に、要点を把握する準備が整ったら、ソースに移動します。kernel.orgで使用しているカーネルバージョンのソースコードを入手し(ディストリビューションにはインストール可能なカーネルソースパッケージも含まれます)、Documentationディレクトリを確認してください。カーネルの内部と構成設定に関する多くの参考資料が見つかります。
学校。Linuxシステムを本当に理解するには、幅広いコンピュータサイエンスシステムの背景が必要です。コンパイラ、コンピュータアーキテクチャ、およびオペレーティングシステム。そして、あなたは何が重要であるかをあなたに示し、あなたが持っているか形成した誤解を修正できるガイドが必要です。
最新のプロセッサがどのように機能し、Cコンパイラがそれらを活用するかを理解したら、Minix 3のような本に飛び込むことができます。
これは、Linuxカーネルの作者であるTorvaldsが(大まかに)彼の研究に基づいた本の最新版です。オペレーティングシステムの基本的なコンポーネントとアルゴリズム、およびそれらを正確に実装する方法について学習します。テキストには、参照と説明の目的で、ソースコードがMinixにほぼ完全に印刷されています。割り込みハンドラーをチェックして、システムがどのように機能し、どこに制御が流れるかを完全に理解してください。
また、学校やコンピュータサイエンスで侮辱する前に、オペレーティングシステムに求められる仕事は一般にNP完全であることに注意することが重要です。したがって、証明可能な最適アルゴリズムは存在しないため、利用可能なさまざまなアルゴリズムを理解することは、パフォーマンスの調整に不可欠です。
カーネルに加えて、他にもいくつかの領域があります。Linuxはオープンソースであるため、これは学術的な金鉱です。DebianやUbuntuのようなシステムはソースを利用できるようにし、それは非常に簡単です:
apt-get source package-name
多くのアップストリームもリビジョン管理でコードをホストしているため、プログラムのソースの最新バージョンを読んだり、数年前にどのようにビルドされたかを確認したりすることもできます。
ソース。
もちろん、もしあなたがカーネルを意味するなら。
カーネルとAPIの上のシステムを学習しようとしている場合は、古い学校の学習から始めUnix
ます。FreeBSD / OpenBSD / NetBSD / DragonflyBSDを試してみてください。小さなMinixも役に立ちます。次に、Slackware、Arch、Debian、Gentooに移動します。彼らはすべて異なっている(と 来る と 素晴らしい ドキュメント)、およびそれらのdiferenciesで、あなたの好奇心は、あなたがそれがそうである理由、あなたは、技術的な商業、政治的、歴史的な多くの知識を得ることができます検索するようになります。
もう1つの方法は/etc
、古いUnixマニュアル、そしてもちろんGoogleで掘り下げることです。
Linuxを最初から作成することは、learning
GNU / Linuxの優れた方法です。
独自のディストリビューションを構築するだけです。私はあなたのためにそれをしました、そしてあなたは何を知っていますか?4か月後、10年以上Linuxを使用している周りの人よりも、Linuxの内部について知っていることに費やしました。
* nix環境のいずれかで学習することは、全体的なアプローチです。一連のひらめきと経験が含まれます。これは偶然ではありません。元の環境はコンピュータープログラマー向けに設計されているため、設計の意図的な副産物です。また、ユーザーエクスペリエンスではなく技術的な側面に重点が置かれているため、最大の欠点でもあります。それは「サービスなしで100年続く頑丈なフレームのある家ですが、そのサイディングは無計画で、塗装は明らかに無視されています」。
これを、この哲学の鏡像であるWindowsと比較してください。ユーザーに具体的な体験を提供するが、物事の内部の働きからユーザーを保護する何かを行います。それは「美しいトリムとペイントのある家ですが、複数の回避策で数回建てられた基礎」です。
実際に学習を開始するには、ハードウェアに固有のオプションを持つカスタムカーネルイメージを構築し、必要なオプションを使用してそれらをインストールすることをお勧めします。何かがどこかで壊れて、「正常」に戻すことができる場合とできない場合があることを十分に理解する必要があります。これはその学習プロセスの通常の部分であり、問題が発生する場合と同様にアプローチする必要があります(つまり、これをプライマリインストールにせず、別のドライブまたは仮想マシンなどを使用します...)
私は同様の質問に答えを出したので、入力を減らすためにここでそれをクロスリンクします。また、このページの最初のいくつかの段落を読むと、目的がよくわかります。
内のファイルを読み取り/ cat'ing開始/proc
と/etc
-あなたは、単にファイルを読み込むことによって損傷を行うことはありません、それはヒトであり、多くのの(あなたが猫のバイナリ情報を生成したファイルならば、多分あなたの端末/ sshを-接続を台無しに保存)読みやすい。「sysctl -a
」の出力も金鉱山です。あなたが面白いものを見つけたとき、グーグルまたはそれ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ベース / etc / sysconfig#redhatベース
ヒント-/ procの一部の出力はNULで区切られているため、読みにくいです。'tr'を使用してNULを改行に変換します。例:
sudo cat / proc / 1 / environ | tr '\ 0'、 '\ n'
Linuxやその他のオペレーティングシステムについて学ぶべきことがたくさんあります。1つの種類の学習は、「詳細」学習と呼ばれるものです。これは、カーネルがどのように動作するか、どのような仮定があるか、さまざまなビットが互いにどのように通信するか、ハードウェアをどのように扱うかを見つけることです。それはカーネルに関するものです。そのようなものは、オペレーティングシステムがそのように壊れた理由を解明するのに非常に役立ちます。実際、Karl Katzkeと同じように学んだ。私は何かを壊し、それをより良くしました。
この種の知識については、Linuxは非常に簡単です。それはすべて多くの場所で文書化されています。同じことができないことは非常にそれのためにそこにドキュメントの多くはまだあるものの、Windows用と述べました。
次に、「OS内を移動する」学習があります。この学習では、bash / sed / awk / regexやその他すべての知識が役立ちます。事実なので、最近のオペレーティングシステムはカーネルよりもはるかに優れています。ベンダー提供のドライバーblobがあります。この特定のディストリビューションが起動スクリプトをどのようにパッケージ化しているかがわかります。さまざまなパッチ/更新メカニズムがあります。誰もが必要とするシステムデーモンがありますが、カーネルではありません。
これは、単純なkernel-fuよりもはるかに幅広い知識です。ディストリビューターによって異なるため、Red Hatでの動作はSlackwareでは同じに動作しない場合があります。ファイルの保存場所はさまざまです。彼らが「vi」を置き換えるために選んだものと同様に。
「Linuxの学習」は、単純なオペレーティングシステムというよりも、エコシステム全体の学習に重点を置いています。
「Linuxを学ぶ」という本よりもOSについて多くを学ぶことができる「Linuxプログラミング」という本を持っていました。ISBN番号があればよかったのですが、すばらしかったです。それは、「方法」だけでなく、「理由」のプログラミングにも入ったからです。
全体として、私の学習のほとんどは正直にそれを壊して修正することでした。それはゆっくりと起こり、私は12年経ってもまだ新しいことを学んでいます。
それは間違いなくプロセスです。重要なのは、非常に好奇心が強いことです。なじみのないものに出会ったときは、それに慣れてください。どのようにそしてなぜそれがカチカチ音をたてるのかについての知識を求め、基礎となる技術も学びましょう。
本に関して言えば、私はO'Reillyが好きなので、「Essential System Administration Pocket Reference」と「Linux System Administration」が出発点になる可能性があります。
私のTCP / IPネットワーク管理のコピーは古いものであり、しばらく使用していませんが、何が起こっているのかをより深く理解するのに非常に役立ちます。
Linuxを通常のデスクトップとして使用することで、すでに最初のステップを実行しています。
すべてのパーツがどのように結合して構成されているかを理解したい場合は、Gentooを実行することをお勧めします。通常のstage3インストールから、独自のカーネルをコンパイルし、すべてのサービスをインストールして(すぐに使えるSSHを除く)、Xを自分でビルドして構成する必要があります。そうすると、最終的にはバイナリLinuxインストールに含まれるすべてのビットについての理解が深まります。Gentooが私が見つけたすべてのDistroの最も優れたドキュメントを持っていることや、Portageが非常に強力で柔軟なパッケージマネージャーであることも害にはなりません。
これは「必読」として強くお勧めします。
Unixプログラミング環境-ブライアンW.カーニハン/ロブパイク
ISBN 0-13-937681-X
http://www.amazon.com/Unix-Programming-Environment-Prentice-Hall-Software/dp/013937681X
他の誰かがこれについて言及しましたが、それが私がさまざまなLinuxフレーバーを使用するのに最も役立ったと思います。Linuxを適切に処理していると思われる場合は、open / net / freebsdの使用を開始してください。
理由については、私がこれまでに取り組んだほとんどのLinux関係者は、1つまたは2つのLinuxディストリビューションを使用している可能性があります。確かに、彼らのほとんどは手の甲のようなそれらのディストロを知っていたが、彼らはそれでも、特定の事柄に関して警戒すべき根拠に驚かされる可能性がある。私は(炎戦を開始するのではなく)BSDが組み立てられる方法は、物事が行われる方法の「なぜ」を発見するのが少し簡単だと思います(さらに、bsdメーリングリストに潜んでいると、「なぜ」死ぬのかを説明します)。それはあなたの視点を変えることにかかっています、誰かが完全に異なる方法でそれを行うまで、特定のものがなぜ彼らがそうであるかを尋ねることは決してあなたには起こりません。
Stackoverflowへのこの投稿には、この主題に関する標準的な作業のほとんどを含む、Unix / Linuxリソースの大きなリストがあります。
Linuxが舞台裏で動く理由を学ぶもう1つの方法は、Linux From Scratch(http://www.linuxfromscratch.org/)を通して作業することです。これは基本的に、Linuxシステムのさまざまなコンポーネントを手動でインストールおよび構成する一連の演習であり、基本的な知識を習得するための非常に優れた入門書です。