WindowsからLinuxへの移行[終了]


57

これら2つの事実を調整する必要があります。

  1. Linuxでの作業に不安を感じています。
  2. Linux用のソフトウェアを開発する必要があります。

ある程度のバックグラウンド:私はWindowsで10年以上のプログラミング経験があり(ほぼ排他的にC / C ++ですが、.NETも同様です)、自宅でFreeBSDを約3年間使用していました(その後に戻る必要がありました) Windows)、そして私はLinuxでそれほど運がなかった。そして今、Linux用のソフトウェアを開発する必要があります。計画が必要です。

Windowsでは、プログラミング言語、コーディング対象のAPI、IDE(VisualStudio)、およびトラブルシューティング用の非常に基本的なツール(Depends、ProcessExplorer、DebugView、WinDbg)を知っているだけで済みます。他のすべては自然にやってくる。

Linuxでは、これは非常に異なる話です。Firefoxプラグインからリンクする場合、どのDLL(申し訳ありませんが、共有オブジェクト)がロードされるのか、どうしてわかりますか?Linuxでソースに__asm int 3 / DebugBreak()を挿入してプログラムを実行し、OSにデバッガーを呼び出させることと同等の機能は何ですか?なぜ地獄リリースビルドはappLoaderと呼ばれるものを使用するのに、デバッグビルドは何らかの方法で動作するのですか?最悪なのは、Linux開発環境をプロビジョニングする方法ですか?

それでは、憎しみは通常、十分な知識がないことに関連していることを考慮して、あなたは何をお勧めしますか?EmacsとGCCで大丈夫です。Linuxの管理者/ユーザーとして自分自身を教育する必要があり、適切なトラブルシューティングツールを学ぶ必要があります(straceはかっこいいです、ところで)。

最初からLinuxを実行する必要がありますか?または、単に本を読む必要があります(Kernighanの「UNIXプログラミング環境」とStevensの「Advanced Programming ...」を読みましたが、もっと実用的なことを学ぶ必要があります)。または、自宅のコンピューターにLinuxディストリビューションを用意する必要がありますか?


73
Windowsについても同じことを感じる

15
あなたがより快適な別の仕事を得ることを考えましたか?

3
ユニックスでmanはあなたの友達です。私はman nm、そしてman ld出発点として。
-Dietbuddha

1
Windowsの使用を開始してください;)
ジガージョシ

1
「他のすべては自然に来る」?もちろん、それは当然のことですが、あなたはそれを10年間やっています。Linuxは悪くはありませんが、その違いは異なります。そして今、あなたは10歳になったので、脳は以前ほど簡単に新しいことを学ぶことができず、異なるものはすべてあなたが学ばなければならないものになります。「Linux sucks」ですべてに近づくと、あなたの人生は悲惨なものになります。
JesperE

回答:


62

LinuxおよびWindowsでのダイナミックリンクの記事では、各OSがどのようにダイナミックリンクを行うかを説明しています。ライブラリの検索方法については、記事「共有ライブラリの検索パス」で説明しています。また、動的共有およびロード可能なLinuxのライブラリは、スタティック非常に良いです。Linuxライブラリの良い点は、バージョン管理のサポートが優れていることと、Windowsよりもライブラリのいくつかのバージョンを持っていることです(私はWindowsをしていません)。それについては、SolarisおよびLinuxでのライブラリインターフェイスのバージョン管理を参照してください。これらの記事は本当にあなたをライブラリでカバーするはずです。

GDBは非常に強力であり、おそらくRMSのgdbチュートリアルが良い紹介です。条件付きブレークポイントを調べたい場合があります。同等物があるために__asm(int 3)、質問を参照Linux上のgdbのためのプログラムでCまたはC ++コードでのブレークポイントを設定します

Marc Rochkind の書籍Advanced Unix Programmingは必読の本です。多くの例があり、すべてのPOSIX / SUSトピックを非常によく説明された方法でカバーしています。これは私が今まで読んだこのトピックに関する最高の本です。

しかし、あなたの人生を楽にするために、Qtのようなものを抽象化する高レベルのAPIを使用することを実際にお勧めします。また、クロスプラットフォームの作成がはるかに簡単になります。

Linuxをゼロから作成することは、Linuxシステムがどのように構成されているかを理解するのに役立ちますが、開発者の観点から見ると、Linuxシステムに関する知識はそれほど向上しないと思います。ただし、Linux環境にはどの部分が存在する(および部分的にはなぜか)を学習するので、Linuxをより快適に使用できます。Linux From Scratchを使用して作業した後、Linuxは大きなブラックボックスにはなりません。


確かに、プロセスが既にデバッグされている場合、 32ビットシステムでは、この割り込みはデバッガーに侵入します。私が質問している場合、これはこれです。Windowsでは、トラップの発生にデバッガーを接続できます。いくつかのシナリオでは、これは非常に便利です。そしてリンクに感謝します!
rincewind

6
素晴らしい答えです!gdbチュートリアルでは、RMSは「Richard M. Stallman」ではなく「Ryan M. Schmidt」であることに注意してください。(ストールマンがGDBの原作者だったので重要な注意)
エントロポ

Windowsでは、サイドバイサイド(msdn.microsoft.com/en-us/library/ms229072(v=vs.80).aspx)ライブラリのロードが約12年間サポートされていました。あなたはバージョン管理に関してかなり間違っています。
クラウスヨルゲンセン

16

必要であればstrace、忘れないでくださいltrace:ライブラリー呼び出しに相当します。
また、はい、Linux From Scratchをお勧めします。これは、OSのコア要素とそれらがどのように適合するかを理解する上で良い練習です。
最新の完全なシステムプログラミングのリファレンストリートメントとして、The Linux Programming Interfaceを取り上げることをお勧めします。


12

Mac OS Xはメルセデスのようなものです。最もきれいできれいですが、コストがかかります。Windowsはトヨタのようなものです。そこに戻って行きます。

Linuxはホットロッドのようなものです。それは人々が掘り下げて分解し、再び元に戻すことです。Linuxは、コンピューターを使いたいだけの人向けではありません。コンピューターが大好きな人向けです。コンピューターを愛していない人は、コンピューターに近づかないでください。

Windowsで学んだことはあまりうまく翻訳されません。しかし、内部構造を確認し、エンジンの実行を監視できます。

Linuxを新しいおもちゃとして使用してみてください。Linuxで遊んで、クロールして、何が起こっているのかを確認できます。Windowsでは簡単なことは、Linuxではより困難です。Windowsでは不可能なことは、Linuxでは可能です。

コンピューターを愛しているなら、Linuxを愛することができます。もしあなたがコンピューターを愛していないなら、なぜあなたはまったくプログラミングしているのですか?


13
+1、「Windowsで簡単なことはLinuxで難しく、Windowsで不可能なことはLinuxで可能です」。「Windowsは口の中で消化済みの食べ物をプッシュしますが、Linuxでは料理をすることができます。これに対する報酬は、好きなものを食べることができるということです」...もちろん、それが食用かどうか...あなたはどのように良いシェフに大きく依存します
アランPannetier

14
@アンディ:「Windowsはトヨタのようなものです。トヨタの品質はWindowsよりもはるかに優れています。
モニカの復元

4
@ SK-logic、正確に。さらに別の宗教戦争に関与することなく、以下を考慮してください。単なる戦略的および財務的な理由から、MSは可能な限り多くのユーザーをターゲットにしています。コンピューターを認識しているユーザーが制御できるようにしたい技術的なものは、ジョーンズが問題に陥らないように、見えないところに埋もれています。DEP、GPO、「信頼できるインストーラー」、プライベートまたは非表示のAPI、「自己修復ブート」など、至る所でレッドテープが作成されます。ギークはWindowsを修正せず、オプトアウトします。Linuxには同じ覇権的な目標はありません。ユーザーのためにユーザーによって行われます。それが全体のポイントです。
アラン・パネティエ

3
@ SK-logic-「Windowsのソースがある場合」... :
ロリーオルソップ

3
「「Windowsでは不可能」と「Linuxで可能」といういくつかの名前を付けてください。Linuxシステムスクリプトでバグを見つけて修正しました。Windowsでバグを見つけましたが、修正できませんでした。ディスクファイルにISO(CD)イメージがあります; Linuxでドライブとしてマウントできます; Windowsでそれを実行できますか?Linuxのほぼすべてが無料であり、Windowsのほぼすべてが高価な専用アプリケーションを必要とすることを忘れないでください。
アンディキャンフィールド

9

Monodevelopを使用してMonoで開発するのはどうですか?これにより、.NETでの経験を再利用して、非常に簡単に始めることができます。


私は最近これを試しました-もちろんVisual Studioとの違いはいくつかありますが、夕方には稼働していました。これは優れた移行パスです。
-JBRウィルキンソン

8

最初から見ると気が遠くなります(Windows開発を任されているLinux開発者のように)。一度にこの1つの問題に取り組みます。

  • 最初に環境設定を取得します(コンパイラー、IDE-はい、Netbeans / Eclipseなど)
  • 次に、より高いレベルのAPIをインストールします(boost / Qtなど)
  • すぐに解決する問題がある場合は、ゆっくりと開始し、コードのコンパイルを取得します(または、ゼロから書き始めます)。開発プロジェクトに取り組む場合と同様に、最初に動作することがわかっているもの(つまり、OS固有のものを必要としないもの)を取得しますインタラクション)、そしてあなたが思わぬ障害にぶつかったとき-検索、私はそこにいる誰かが以前に同じ問題に出くわし、それを解決したと確信しています。

最も重要なことは、すべての主観的な意見をドアに置いておくことです。そしていや、Linuxで開発するのに第一人者である必要はありません。すべてではなく、十分なことを知っています。しかし、私はそれに満足しています...


1
+1ニム:StackExchangeには、ここに膨大な量の事前情報があります。私はUnixのフレーバーに最も慣れていますが、現在はWindows開発環境で作業しており、SEの検索は非常に短い時間でほとんどすべてのクエリに答えています。
ロリーオルソップ

6

The success or failure of many thing in life comes down to our attitude, looking for positives and keeping your mind focused on the positives will do more to adide you as you start down this new interesting adventure.

Windows環境での作業に習熟するのにどれくらい時間がかかりましたか。始めたばかりで簡単だったと言うかもしれません。しかし、あなたはそれ以前にウィンドウを使って数年働いていました。最初のプログラムを作成する前にウィンドウを使用していた期間。今ではほぼ5年間Linuxを独占的に使用していますが、私にとっては8年でした。今では、WindowsよりもLinuxの方が上手です。新しいシステムに慣れるには、少なくともその時間を自分に与える必要があります。

Windows以外では使用できないアプリケーションのリストから始めて、* nixの世界で代替手段を探してください。http://alternativeto.net/およびWikipediaの詳細なセクションがここで役立ちます。

これは非常に有用であることが証明できる代替ソフトウェアのリストです。ここに、あなたが言及したことに対するいくつかの代替案があります。

あるシステムから別のシステムに移動する際のその他の有用なリソース

より優れたパワーユーザーまたは管理ユーザーになることについては、これらのリソースをご覧ください。

また、* nixの世界を見てからしばらく経っているようです。fedorasusedebian、または私の好みのワークステーションUbuntuからの新しいディストリビューションのリリースをお勧めします。

おそらく、システムの内部を知らずに、Windowsのように基本的なことだけで逃げることができます。私はただ最小限で逃げようとしません。Linuxを、開発を実際に支援するツールと見なし、開発用のオペレーティングシステムではない場合は役立ちます。

Linux From Scratchは、Linux向けに特別に開発することが非常に具体的で技術的な意味を持つ場合に、はるかに重要になります。IEをカーネル用に開発するか、Linuxを実行するスーパーコンピューターにプログラムを移植します。それでもなお、非常に便利です。おそらく、Ubuntuを使い始めようとしている間、数か月間はそのままにしておくことができると思います。Ubuntuは、MacとWindowsの世界で機能するものに近いものになるでしょう。


1
Debianはまったく新しいディストリビューションではありません。:-Pそれでも良い選択です。
スティーブS

SuSEもFedoraも... SuSEは現在15歳ですが、Fedoraは確かに8歳の「若い」ディストリビューションの1つです。それでも、+ 1。
ダークダスト

1
@Darkdust @ Steve-s最新リリースのように新しい
nelaaro

6

あなたは質問であなたの質問に答えたと思います:

「Windowsでは、プログラミング言語、コーディング対象のAPI、IDE(VisualStudio)、トラブルシューティング用の非常に基本的なツール(Depends、ProcessExplorer、DebugView、WinDbg)を知っているだけで十分です。 」

Linuxでは、プログラミング言語、API(またはカップル)、IDE(EclipseまたはNetBeans、Geany、Emacs、またはvimでさえも)とトラブルシューティング用の基本ツール( gdb、トレースツール、lint、htop、ps)。

Windowsプログラミングエコシステムに投資した多くの知識があります。その多くは(できれば)抽象的知識(コンパイラー、デバッガー、共有ライブラリー、プロセス、スレッドとは何ですか?それらは何をしますか?)であり、さまざまなツールに慣れると簡単に翻訳されます。ドメイン固有のものもあります(Xをプロジェクトに追加するとリンクされるDLLは何ですか?)が、Windows内である言語のクラスから別のクラスに移動する場合でも、新しい学習が必要になります。

UbuntuまたはFedoraをVMにインストールし、EclipseまたはNetBeansのチュートリアルでC ++ Hello Worldを、Eclipse / NetBeansのチュートリアルでデバッグを読んで、脳の自然な適応能力を引き継いでください。リラックスして機能させると、アイデアが翻訳されます。


3

私は、一般的にマニュアルページを読むことでUnixを学びました。少なくともそれらをスキムする必要があります。はい、私はそれらすべてを意味します。私がそれを使用してmanページのディレクトリにcdし、一度に1セクションずつ攻撃する方法。

私はこれを使用します:

for i in *; do f=`basename $i .gz`; man `basename $f .1` ; done

.... 1を読んでいるセクションの番号、.2、.3などに置き換えます。ctrl-Zctrl-Cを押してループから抜けます。Linuxディストリビューションがcmdname.1.gzとしてではなく、物事を異なる方法で保存している場合、走行距離は異なる場合があります。

単に説明を読んで、それが何か面白いものである場合はそれ以上を読んでください。セクション1、2、および3は、プログラマーにとって最も重要です。1は、コンパイルツールやさまざまなフォレンジックユーティリティを含む一般的なユーザーコマンドをカバーしています。2はシステムコール、3はライブラリコールです。


2
xmanもっと「使いやすい」インターフェースとして起動することをお勧めします。セクションを選択し、manページをクリックして読んでください。すすぎ、繰り返します。
ΤΖΩΤΖΙΟΥ

私はそのようなことを忘れていました。無料のOSの土地でのドキュメントの状態は理想的とは言えません。また、ツールが悪化することが多いため、使用をやめました。私は彼らが少し良くなったと推測できますか?
ハックを見た

3

あなたが好きではないことを強制することはしないでください。開発環境としてWindowsを使用し、移植可能なコードを記述し、Linux用にクロスコンパイルし、VMでときどきのみテストします。


2

プラットフォームで動作するかどうかはわかりませんが、プログラミング言語では、自分が得意な言語に慣れて快適になったことを考え、自分の目的のためにそれらの経験と活動を再現しようとするのが役立つことがわかりました学習しようとしています。

おそらくそれらの行に何か?

しかし一般的に言えば、GNU / Linuxに対する私の関心と自信は、Windowsよりもはるかにいじくりやすい(そして初期のいじくりを必要とする)ことによってもたらされました。私は物事を機能させるために多くのものをいじる必要があり、それは私が多くのものを学ぶのを助けました。物事は今ではずっと良くなっていますが、それらの時間はすべて役に立ちました。


2

私は似たような、しかし異なる何かを任された2人のうちの1人でした。私は幼稚園から高校までの学区で働いており、ビジネスシステム(HR、財務など)はHP3000 / TurboImage dbからLinux / MS SQLプラットフォームに移行しています。私はMS SQL側に満足しています。しかし、Linux側ではありません。私たち2人は、プログラミング側ではなく、管理者側にいます。プログラミングは外部で行われます-K-12組織用のサードパーティのビジネスアプリ。

週末に5週間のLinux入門(Redhat)クラスを受講しました-ほとんどがコマンドラインモードで行われましたが、Linuxのやり方を簡単に試すための時間として価値がありました。明らかにクラス/教師に応じてYMMV。

「最悪なのは、Linux開発環境をプロビジョニングする方法ですか?」すでにWindowsに精通しているので、vmWare Workstationのコピーを入手することを強くお勧めします。これにより、Windowsをワークステーションとして保持し、Linuxをゲストシステムとしてインストールできます。必要に応じて削除、すすぎ、繰り返しを行います。適切なセットアップを取得したら、スナップショットを作成できると思いますが、どのバージョンがスナップショットの機能を備えているかを確実に言うことはできません。また、vmWare Workstationのルートを使用して複数の開発セットアップを有効にすると、間違いなくメモリを増やすことができます。

また、ゲスト用のLinux OSとしてCentOSを使用することをお勧めします。私の理解では、ブランディングやセールスピッチ、サポートコストのないRedHatのようなものです。私は他のLinuxフレーバーに精通していないので、それらに関する情報を提供することはできません。

グレッグ


1

私は両方のプラットフォームが好きで、ユーザーインターフェイスと開発エコシステムのすべての違いについて、それらはカバーされているものよりも似ていると思います。実際、ほとんどのWindowsの概念では、インターネットを検索するだけで、同等のLinuxの概念を見つけることができます。

そうは言っても、「Unixの方法」で物事を行う方法を学ぶことを強くお勧めします。バグのあるGUIフロントエンドではなくコマンドラインを使用します(ここでは主にgdbについて説明しています)。IDEを探すのではなく、代わりに一連の専用ツールを使用する方法を学んでください。優れたエディター(vimを指す)を選び、それをよく学んでください。make専門家になる予定がない場合でも、どのように機能するかをお読みください。Linuxが好きになるかもしれません。オタクにやさしく、楽しく遊ぶことができます。


1

これを考慮してください。あなたはかつてWindowsについて何も知らなかったが、あなたはそれを学び、やがてWindowsに慣れてきた。

その後、MSは使い慣れたプログラミングシステムをすべて.NETに変更し、DLLS、COM、その他何も知らなくなったため、アセンブリ、GAC、アプリドメインなどを学ぶ必要がありました。わかったよ。

では、なぜLinuxで同じことをするのが心配なのですか?

あらゆる種類のプログラミング環境向けに、Web上に「はじめに」のチュートリアルがたくさんあります。さて、あなたはGCCと言うので、C ++開発を想定します。Eclipseを入手し、Eclipseプラットフォームの上にCDT(c dev tools)をインストールします(Eclipseは多目的IDEです。C++、PHP、Javaなどに使用できますが、言語に合わせてツールをインストールする必要があります)あなたは本当にVSのようにすべてを事前にインストールしたくないので、インストールに3日かかります:))

Webには使いやすいチュートリアルがあります。IBMには、非常に包括的なものがあります。

デバッグツール... eclipseには組み込みツールがあります(チュートリアル)が、言及したツールのようなツールを多数見つけることができ、Webを検索するだけで多くのオプションを見つけることができます。コアダンプの読み方を理解するには少し時間がかかります(たとえば、Windowsのユーザーダンプとは対照的に)。

また、ブログをあなたの経験から始める価値があるかもしれません。あなたがやったことを思い出せるようになるだけでなく(例えば、日食を好きなように設定したり、年の時間)が、それはあなたの状況で他の人を助けるでしょう。


0

Linuxをゼロから作成する必要はないと思います。もし私があなたなら、Ubuntuに行きます。より快適で、debianに基づいているため、利用可能な技術資料がたくさんあります。

もしあなたがLinuxをもっと先に飛びたいなら、Gentooは良い選択肢です。構成とカーネルについて非常に多くを読む必要がありますが、afで動作するための非常に機能的なシステムも提供します


0

Google「Unixプログラミングの技術」を読んでください。IMO、あなたの主な困難は異なる哲学であり、その本はこのための優れた読書です。

また、* n * xとWindowsシステムとの間の明白ではないが技術的に非常に重要な違いも紹介します。これらは、Linuxで別の方法を行うことが理にかなっている理由を理解するための鍵です。


1
...また、Linuxで使用する多くのツールとテクニックも紹介します。

0

私が尋ねる最初の質問は、あなたが開発したいものは何ですか?GUIベースのアプリケーションの場合、カーネル拡張のようなものを記述する必要がある場合とは異なる場合があります。

guiアプリの場合、最も簡単な方法は、独自の開発環境(Qt-Creator)を持ち、クロスプラットフォームであるQtを使用することです。Windows/ Linuxで使用できるAPIを1つだけ学習できます/ OSX、さらにはモバイル開発。WindowsのビジュアルスタジオやOSXのXCodeのように、グラフィカルエディターからウィンドウとアイテムを作成およびレイアウトできます。APIは、サンプルアプリケーションのロードで簡単に選択できます。

さらに低レベルを取得する必要がある場合は、コマンドラインでLinuxを使用する方法を理解したら、ディレクトリを走査する方法、ファイルを操作する方法、アクセス権を理解する方法などを理解してから、gccを使用して簡単なプログラムをコンパイルする方法を読み始めるか、ファイルをリンクして実行可能ファイルを実行する方法と、gdbでデバッグする方法。

あるいは、それが少し面倒だと思われる場合は、Eclipseまたは別のIDEをダウンロードできますが、コマンドラインに時間と労力をかけることで、長期的にはLinuxにはるかに慣れるでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.