it-swarm-tr.com

Windows'tan Linux'a geçiş

Bu 2 gerçeği uzlaştırmam gerekiyor:

  1. Linux üzerinde çalışırken rahat hissetmiyorum;
  2. Linux için yazılım geliştirmem gerekiyor.

Bazı arka plan: Windows'ta 10 yılı aşkın bir programlama deneyimim var (neredeyse sadece C/C++, ancak bazı .NET de), yaklaşık 3 yıl boyunca evde FreeBSD'nin bir kullanıcısıydım (sonra geri dönmek zorunda kaldım) Windows) ve Linux ile hiç bu kadar şanslı olmamıştım. Ve şimdi Linux için yazılım geliştirmem gerekiyor. Bir plana ihtiyacım var.

Windows'da, sadece bir programlama dili, kodladığınız bir API, IDE (VisualStudio) ve sorun giderme için bazı temel araçları (Depends, ProcessExplorer, DebugView, Diğer her şey doğal olarak gelir.

Linux'ta bu çok farklı bir hikaye. Firefox eklentisinden bağlanırsam ne DLL (üzgünüm, Paylaşılan Nesne) yükleneceğini nasıl bilebilirim? __Asm int 3/DebugBreak () eklemenin Linux eşdeğeri nedir? kaynak ve programı çalıştırmak ve sonra işletim sistemi bir hata ayıklayıcı çağırmak izin? Neden cehennem sürümleri appLoader denilen bir şey kullanır, hata ayıklama yapıları bir şekilde farklı çalışır? Hepsinden kötüsü: nasıl Linux geliştirme ortamı sağlamak için?

Yani, nefretin genellikle yeterince bilmemekle ilişkili olduğunu göz önünde bulundurarak, ne önerirsiniz? Emacs ve GCC ile iyiyim. Kendimi bir Linux yöneticisi/kullanıcısı olarak eğitmem gerekiyor ve uygun sorun giderme araçlarını (strace cool, btw), yukarıda bahsettiğim şeylere eşdeğer öğrenmem gerekiyor.

Scratch'tan Linux yapmam gerekir mi? Yoksa sadece bazı kitapları okumam gerekiyor mu (Kernighan'ın “UNIX programlama ortamı” nı ve Stevens'ın “Gelişmiş Programlama ...” nı okudum, ama daha pratik bir şey öğrenmem gerekiyor)? Yoksa ev bilgisayarımda Linux dağıtımı yapmam gerekiyor mu?

57
rincewind

Her bir işletim sisteminin nasıl dinamik bağlantı yaptığını açıklayan Linux ve Windows'da Dinamik Bağlantı makalesini bulabilirsiniz. Paylaşılan Kitaplık Arama Yolları makalesi, kitaplıkların nasıl bulunduğunu açıklar. Ayrıca Statik, Paylaşılan Dinamik ve Yüklenebilir Linux Kütüphaneleri çok iyi. Linux kütüphaneleri ile ilgili güzel bir şey, bir kütüphanenin Windows sürümüne göre sürümlendirilmesi ve birkaç sürümüne sahip olması için daha iyi bir desteğe sahip olmalarıdır (AFAIK, Windows yapmıyorum). Bunun için Solaris ve Linux'ta Kütüphane Arayüz Sürümü Oluşturma konusuna bakın. Bu makaleler sizi gerçekten kütüphanelerle örtüştürebilmelidir.

GDB çok güçlü, iyi bir tanıtım muhtemelen RMS'nin gdb Eğitimi . Koşullu kesme noktalarını okumak isteyebilirsiniz. __asm(int 3) eşdeğeri için --- sorusuna bakın Linux'ta gdb için C veya C++ kodunda kesme noktasını program olarak ayarlayın .

Marc Rochkind'in Advanced Unix Programming kitabı okunması gereken bir IMHO. Çok sayıda örneğe sahiptir ve tüm POSIX/SUS konularını çok iyi açıklanmış bir şekilde kapsar. Bu konuyla ilgili şimdiye kadar okuduğum en iyi kitap.

Ancak hayatınızı kolaylaştırmak için aslında Qt gibi sizin için bir şeyler özetleyen yüksek düzeyli bir API kullanmanızı öneririz. Ayrıca, platformlar arası yazmayı çok daha kolay hale getirir.

Linux'u Scratch'tan Yapmak, bir Linux sisteminin nasıl oluştuğunu anlamanıza yardımcı olur, ancak bence bu konu hakkındaki bilginizi geliştiriciler açısından geliştirmez. Linux ortamında hangi parçaların bulunduğunu (ve kısmen de neden ) öğrendiğiniz için Linux ile daha rahat olmanızı sağlar. Linux From Scratch ile çalıştıktan sonra bir Linux sizin için büyük bir kara kutu olmayacak.

62
DarkDust

strace 'ı beğendiyseniz, unutmayın ltrace : kütüphane çağrıları için eşdeğer.
Ayrıca, evet, tavsiye ederim Scratch'tan Linux . İşletim sisteminin temel öğelerini ve bunların nasıl bir araya geldiğini anlamak için iyi bir egzersizdir.
Modern, eksiksiz bir sistem programlama referans tedavisi için Linux Programlama Arayüzü almanızı öneririm.

16
entropo

Mac OS X bir Mercedes gibidir; en güzel ve temiz ama maliyeti çok yüksek. Windows bir Toyota gibidir; seni oraya götürecek.

Linux bir hot rod gibidir; İnsanların Kazması ve parçalanması ve tekrar bir araya getirmesi. Linux sadece bilgisayarı kullanmak isteyen biri için değildir; bilgisayarları seven insanlar içindir. Bilgisayarları sevmeyen insanlar bilgisayardan uzak durmalıdır.

Windows'da öğrendiğiniz şeyler çok iyi tercüme edilmez, hayır. Ama iç kısımları görüp motorun çalışmasını izliyorsunuz.

Linux'u oynayabileceğiniz ve içine girip neler olup bittiğini görebileceğiniz yeni bir oyuncak olarak almaya çalışın. Windows'da kolay olan şeyler Linux'ta daha zordur; Windows'da imkansız olan şeyler Linux'ta mümkündür.

Bilgisayarları seviyorsanız Linux'u da sevebilirsiniz; bilgisayarları sevmiyorsanız neden programlama yapıyorsunuz?

12
Andy Canfield

Monodevelop ile Mono'da gelişmeye ne dersiniz? Bu, .NET'teki deneyiminizi yeniden kullanarak kolayca başlamanıza yardımcı olur.

9
Johann Blais

Başından itibaren baktığınızda göz korkutucu (tıpkı bir Windows geliştirmesi yapmakla görevlendirilmiş bir Linux geliştiricisiymiş gibi). Bu bir problemi bir seferde çözerdim.

  • Önce ortam kurulumunuzu alın (derleyici, IDE - evet var, Netbeans/Eclipse vb.)
  • Sonra daha yüksek seviye apis yüklü olsun (boost/Qt vb)
  • Çözülecek acil bir sorun varsa yavaşça başlayın, kod derleme alın (veya sıfırdan yazmaya başlayın) Herhangi bir geliştirme projesinde olduğu gibi, önce çalıştığını bildiğiniz şeyleri alın (yani işletim sistemine özgü olmayan şeyler) etkileşim), ve sonra bir engel arama - vurduğunuzda, eminim orada biri daha önce aynı sorunla karşılaştı ve çözdü ..

En önemlisi, tüm öznel görüşlerinizi kapıda bırakın. Ve hayır, Linux'ta gelişmek için bir guru olmanıza gerek yok, etrafta dolaşacak kadar biliyorum, her şeyi değil - ama bundan rahatım ...

8
Nim

Sanırım soruya sorunuzu cevapladınız:

"Windows'da, yalnızca bir programlama dili, kodladığınız bir API, IDE (VisualStudio) ve sorun giderme için bazı temel araçları (Depends, ProcessExplorer, DebugView) bilmekten kurtulabilirsiniz. Diğer her şey doğal olarak geliyor. "

Linux'ta sadece bir programlama dili, bir API (veya bir çift) bilmekle kaçabileceğinizi tahmin eder, IDE (Eclipse veya NetBeans, hatta Geany, Emacs veya vim) gibi) ve sorun giderme için bazı temel araçlar (gdb, izleme araçları, tiftik, htop, ps).

Windows programlama ekosistemine çok fazla bilginiz var. Bunların çoğu (umarım), farklı araçlarda hız kazandıktan sonra kolayca çeviri yapacak soyut bir bilgidir (bir derleyici, bir hata ayıklayıcı, paylaşılan bir kütüphane, bir süreç, bir iplik? Ne yaparlar?). Bazıları etki alanına özgüdür (Bir projeye X eklediğimde ne DLL bağlanır?), Ancak Windows içinde bir dil sınıfından diğerine geçmek bile yeni bir öğrenme gerektirir.

Bir VM'de Ubuntu veya Fedora'yı yükleyin, Eclipse veya NetBeans öğreticilerinde bazı C++ Hello World ve Eclipse/NetBeans öğreticilerinde bazı hata ayıklamalarını okuyun ve beyninizin doğal adaptasyon yeteneğini devralmasına izin verin. Eğer rahatlar ve işe koyarsanız sizin için fikirleri tercüme edecektir.

6
Justin

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.

Bir pencere ortamında çalışma konusunda yetkin olmanız ne kadar sürdü. Yeni başlamanın kolay olduğunu söyleyebilirsin. Ama bundan birkaç yıl önce pencerelerle çalıştınız. Yumruk programınızı yazmadan önce ne kadar zamandır pencere kullanıyorsunuz. Benim için 8 yıl oldu, şimdi Linux'u neredeyse sadece 5 yıldır kullanıyorum. Artık Linux ve pencerelerde daha yetkinim. Yeni bir sisteme aşina olmak için kendinize en az o kadar zaman vermelisiniz.

Windows'da dışarıda yaşayamayacağınız uygulama listesiyle başlayın ve * nix dünyasında alternatifler arayın. http://alternativeto.net/ ve Wikipedia'daki diğer okuma bölümleri burada yardımcı olabilir.

İşte size çok faydalı olabilecek alternatif yazılımların bir listesi. Bahsettiğiniz şeylere bazı alternatifler.

Bir sistemden diğerine geçişte diğer faydalı kaynaklar

Daha güçlü bir kullanıcı veya yönetici kullanıcı olma hakkında bu kaynaklara göz atın

Ayrıca, * nix dünyasına baktığınızdan bu yana bir süre geçmiş gibi görünüyor. Fedora , suse , debian veya tercih edilen iş istasyonum bunt 'dan yeni dağıtımların bazılarını öneriyorum .

Muhtemelen sistemin iç kısımlarını ve sadece pencerelerde olduğu gibi temel bilgileri bilmeden kurtulabilirsiniz. Ben sadece asgari ile kurtulmaya çalışmak olmazdı. Linux'u, yalnızca geliştirdiğiniz bir işletim sistemi değil, gelişiminize yardımcı olan bir araç olarak görürseniz, bu yardımcı olacaktır.

Linux için Scratch'tan Linux, özellikle Linux için çok özel ve teknik anlamda geliştiriyorsanız çok daha önemli olacaktır. I.E. çekirdek için geliştirmek istediğiniz veya Linux çalıştıran bir süper bilgisayara programladığınız bağlantı noktası. Asla daha az faydalı olmazdı. Bence sadece Ubuntu'ya gitmeye çalışırken birkaç aylığına bırakabilirsin. Ubuntu şeyler sadece mac ve windows dünyası dünyasına yakın olacak.

6
nelaaro

Unix'i genel olarak adam sayfalarını okuyarak öğrendim. En azından onları gözden kaçırmalısın. Evet, hepsini kastediyorum. Ben man sayfa dizinleri cd cd ve onlara her seferinde bir bölüm saldırı yöntemini.

Bunu kullanıyorum:

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

... . 1 değerini okumakta olduğunuz bölümün numarası ile değiştirerek, .2, .3, vb. Döngüden çıkmak için ctrl-Z ctrl-C tuşlarına basın. Linux dağıtımınız işleri farklı şekilde saklarsa, örneğin cmdname.1.gz olarak değil, kilometre performansı değişebilir.

Açıklamaları gözden geçirin ve ilginç bir şey varsa daha fazlasını yapın. Bölüm 1, 2 ve 3 bir programcı için en önemlisidir. 1, derleme araçlarınızı içeren genel kullanıcı komutlarını ve çeşitli adli tıp hizmetlerini kapsar. 2 sistem çağrısı, 3 kütüphane çağrısıdır.

3
Hack Saw

Kendinizi sevmediğiniz bir şey yapmaya zorlamayın. Windows'u geliştirme ortamınız olarak kullanın, taşınabilir bir kod yazın, Linux için çapraz derleyin ve yalnızca zaman zaman bir VM'de test edin.

3
SK-logic

Benzer, fakat farklı bir şeyle görevlendirilmiş iki kişiden biriydim. Bir K-12 okul bölgesinde çalışıyorum ve iş sistemi (İK, finans vb.) HP3000/TurboImage db'den Linux/MS SQL platformuna geçiyor. MS SQL tarafında rahatım. Ama Linux tarafı değil. İkimiz yönetici tarafındayız, programlama tarafında değil. Programlama dışında yapılır - K-12 orgs için 3. taraf iş uygulaması.

Hafta sonları 5 hafta sonu Linux'a Giriş (Redhat) dersi aldım - çoğunlukla komut satırı modunda yapıldı - ve bir şeyler yapmanın Linux yoluna hızlı bir başlangıç ​​olarak benim için zaman ayırmaya değerdi. Açıkçası YMMV, sınıfa/öğretmene bağlı.

'Hepsinden kötüsü: Linux geliştirme ortamı nasıl sağlanır?' Windows'a zaten aşina olduğunuzdan, vmWare Workstation'ın bir kopyasını almanızı şiddetle tavsiye ederim. Bununla, Windows'u iş istasyonunuz olarak tutabilir ve Linux'u konuk sistemleri olarak yükleyebilirsiniz - gerektiği gibi silin, durulayın ve tekrarlayın. İyi bir kurulum yaptığınızda, anlık görüntü oluşturabileceğinize inanıyorum, ancak hangi sürümlerin anlık görüntü özelliğine sahip olduğundan emin olamıyorum. Ve birden fazla geliştirme kurulumunu etkinleştirmek için vmWare Workstation yoluna giderseniz - belleği kesinlikle artırın.

Ayrıca konuklar için CentOS Linux işletim sistemi olarak kullanmanızı tavsiye etmiyorum. Anladığım kadarıyla, marka ve/veya satış konuşması ve/veya destek maliyetleri olmadan RedHat gibi. Diğer Linux lezzetlerine aşina değilim, bu yüzden bunlara girdi veremem.

Greg

2
Gregory Thomson

Platformlar için çalıştığından emin değilim, ancak programlama dilleri için, iyi olduğum kişilere nasıl tanıdık ve rahat olduğumu düşünmeyi ve bu deneyimleri ve etkinlikleri benim öğrenmeye çalışıyorum.

Belki de bu çizgilerdeki bir şey?

Genel olarak konuşursak, GNU/Linux ile olan ilgim ve güvenim, Windows'dan çok daha fazla düşünülebilir (ve ilk günlerde tinkering gerektiriyor) oldu. İşleri yürütmek için bir çok şeyle uğraşmak zorunda kaldım ve bu da çok şey öğrenmeme yardımcı oldu. Şimdi işler çok daha iyi, ancak tüm bu saatler yardımcı oldu.

2
Noufal Ibrahim

Şunu düşünün: Bir zamanlar Windows hakkında hiçbir şey bilmiyordunuz, ancak öğrendiniz ve zamanla onunla rahatlaştınız.

Daha sonra MS, hangi programlama sistemini .NET'e dönüştürdüğünüzü değiştirdi ve artık DLLS, COM hakkında hiçbir şey bilmiyordunuz ve neyse, derlemeler, GAC, uygulama alanları gibi şeyleri öğrenmek zorunda kaldınız. Bunları iyi öğrendiniz.

Peki neden şimdi aynı şeyi Linux ile yapmaktan endişeleniyorsunuz?

Web'de her türlü programlama ortamı için bir sürü 'başlangıç' eğitimi vardır. Şimdi GCC diyorsunuz, bu yüzden C++ gelişimini üstleneceğim. Eclipse'i edinin, Eclipse platformunuzun üstüne CDT (c dev tools) yükleyin (Eclipse çok amaçlı bir IDE'dir, C++ için kullanabilirsiniz , PHP, Java, ne olursa olsun - ancak VS gibi önceden yüklenmiş olmasını istemediğiniz ve yüklemeniz 3 gün sürdüğü için dilinizi kullanmanız gerekir :))

Web'in her yerinde kullanımı kolay öğreticiler vardır. IBM'in burada bir tane var oldukça kapsamlı.

Hata ayıklama araçları ... Eclipse gömülüdür ( tutorial ), ancak bahsettikleriniz gibi birçok araç bulabilirsiniz, sadece web'de arama yapın ve birçok seçenek bulacaksınız. Bir çekirdek dökümü (örneğin, bir windows kullanıcı dökümü yerine) nasıl okunacağını anlamanız biraz zaman alacaktır, ancak oraya ulaşacaksınız.

Deneyimlerinizle bir blog başlatmak da faydalı olabilir, sadece yaptığınız şeyi kendinize hatırlatmanıza izin vermekle kalmayacak (örneğin Eclipse'i nasıl istediğiniz gibi ayarlayacağınız), ancak bu durum sizin durumunuzda başkalarına yardımcı olacaktır.

1
gbjbaanb

Her iki platformu da seviyorum ve kullanıcı arayüzü ve dev eko-sistemindeki tüm farklılıklar için, bunları farklı alt kapaklardan daha benzer buluyorum. Aslında, çoğu Windows konsepti için sadece İnternet'te arama yaparak eşdeğer bir Linux bulabilirsiniz.

Bunu söyledikten sonra, "Unix yolu" nun nasıl yapılacağını öğrenmenizi şiddetle tavsiye ediyorum. Buggy GUI ön uçları yerine komut satırı kullanın (burada çoğunlukla gdb hakkında konuşuyorum); IDE aramayın ve bunun yerine bir dizi özel araç kullanmayı öğrenin. İyi bir editör seçin (vim'i işaret edin) ve iyi öğrenin. Uzman olmayı planlamasanız bile make'ın nasıl çalıştığını okuyun. Belki Linux'tan bile hoşlanıyorsunuzdur. Bu geek dostu ve oynamak için eğlenceli.

1

Scratch'tan Linux yapman gerektiğini sanmıyorum. Ben olsaydım Ubuntu'ya giderdim. Daha rahattır ve debian'a dayanarak, bol miktarda teknik malzeme mevcuttur.

Linux'a ilk önce bir dalış yapmak istiyorsanız, Gentoo iyi bir seçenektir. Konfigürasyon ve çekirdekler hakkında çok fazla şey okumanızı gerektirir, ancak aynı zamanda af içinde çalışmak için oldukça işlevsel bir sistem sağlar.

0
anders.norgaard

Sorduğum ilk soru ne geliştirmek istediğinizdir? GUI tabanlı bir uygulama ise, çekirdek uzantısı gibi bir şey yazmaktan farklı olabilir.

Bir gui uygulaması durumunda, en kolay yöntem, kendi geliştirme ortamına (Qt-Creator) sahip olan ve çapraz platform olan Qt'yi kullanmaktır, Windows/Linux için kullanılabilecek tek bir API öğrenmenizi sağlar/OSX ve hatta mobil geliştirme. Windows'daki görsel stüdyo veya OSX'teki XCode gibi, grafik düzenleyiciden pencereler ve öğeler oluşturabilir ve düzenleyebilirsiniz ve API bir sürü örnek uygulama ile almak çok kolaydır.

Daha düşük seviyeye ihtiyacınız varsa, komut satırında linux'da yolunuzu öğrendikten sonra, dizinleri nasıl geçeceğinizi, dosyaları nasıl değiştireceğinizi, izinleri anlayacağınızı vb. Öğrenin, ya da gcc ile basit bir programın nasıl derleneceğini okumaya başlayın, nasıl dosyaları bağlamak ve çalıştırılabilir çalıştırmak ve sonra nasıl gdb ile hata ayıklama.

Alternatif olarak, bu biraz göz korkutucu görünüyorsa, Eclipse veya başka bir IDE'yi indirebilirsiniz, ancak önce zaman ve çaba komut satırına koyarsanız, muhtemelen uzun vadede Linux ile daha rahat edersiniz.

0
TheDarkKnight

Google "Unix programlama sanatı" ve okuyun. IMO, ana zorluğunuz farklı felsefe ve bu kitap bunun için mükemmel bir okuma.

Ayrıca, * n * x ve Windows sistemleri arasındaki bazı belirgin olmayan ancak teknik olarak çok önemli farklılıkları da tanıtır - bunlar, şeyleri başka bir şekilde yapmanın neden Linux'ta mantıklı olduğunu anlamanın anahtarıdır.

0
user59625