Apa yang harus diketahui pengembang tentang sistem berbasis UNIX?

8

Saya agak kagum bahwa ini belum ditanyakan oleh siapa pun, tetapi pada tingkat tinggi, apa yang harus diketahui setiap pengembang tentang bekerja dengan sistem berbasis UNIX?

Pengalaman * nix saya sangat terbatas, karena saya sama sekali tidak punya alasan untuk menggunakannya di Windows untuk keperluan saya sendiri, tetapi saya memiliki dua wawancara yang datang di mana perusahaan idealnya menginginkan seseorang dengan pengalaman * nix. Saya tidak punya masalah berkenalan dengannya jika mereka membuat penawaran yang ingin saya ambil, tetapi itu tidak sebanding dengan investasi ketika sebagian besar penawaran saya berhubungan dengan sistem Windows; semoga ini bisa dimengerti.

Alat apa yang harus saya ketahui? Adakah keanehan yang harus saya ketahui? Adakah sumber daya yang bagus dan singkat yang dapat dibaca dengan cepat untuk mendapatkan pemahaman yang luas?

rwar
sumber
Jenis pengembangan apa yang Anda lakukan? Untuk pemrograman tingkat tinggi, mengetahui perintah dasar pada terminal akan menjadi nilai tambah yang besar, bersama dengan mungkin mengetahui salah satu editor teks utama (vi, emacs). Untuk pemrograman tingkat bawah, Anda perlu tahu lebih banyak tentang panggilan sistem, file header khusus sistem, dan bagaimana penanganan threading pada tingkat sistem. Sebagai contoh, cross-platform C ++ memiliki banyak nuansa - Saya memiliki sistem sekarang yang mengkompilasi pada semua OS utama kecuali untuk Solaris.
Thomas Owens
Ah maaf. Saya terutama tertarik pada pemrograman tingkat rendah, tetapi mengetahui perintah juga bermanfaat.
rwar
Anda mungkin juga ingin membaca ini: programmers.stackexchange.com/questions/89249/…
WarrenFaith
1
Unix, terutama Linux / FreeBSD / etc, lebih murah daripada Windows untuk menjalankan layanan. Oleh karena itu, jika Anda dapat memenuhi Unix dan juga Windows, perusahaan Anda lebih kompetitif.
Bahkan gadis-gadis muda tahu itu youtube.com/watch?v=dFUlAQZB9Ng
MattyD

Jawaban:

8

Selain dasar-dasar seperti bagaimana menggunakan baris perintah dan sebagainya, saya pikir yang mendasar adalah memahami bagaimana sistem terstruktur.

Saya pikir perbedaan terbesar ketika seseorang datang dari Windows ke Unix adalah memahami bagaimana sistem tersebut cocok. Windows cocok bersama dengan menggunakan API dan komponen OS yang mendasarinya seperti COM. Meskipun ini sering disarikan dari programmer, satu ketika coding untuk waktu yang lama akan tahu tentang model threading COM, GDI, dan sebagainya. Unix cocok dengan cara yang sangat berbeda. Unix didasarkan pada gagasan untuk membangun komponen kecil dan membangun sistem yang lebih besar dari mereka menggunakan IPC (seringkali melalui pipa sederhana).

Anda meminta sumber daya yang singkat dan, setidaknya bagi saya, titik awal tunggal untuk memahami bagaimana Unix bekerja sebagai lingkungan pemrograman adalah buku Kernighan dan Pike buku Unix Programming Environment . Walaupun buku itu sendiri terasa sedikit ketinggalan zaman, itu adalah contoh sempurna dari apa itu filosofi Unix dan bagaimana seseorang dapat memanfaatkan "cara Unix" ketika menulis kode.

Jika Anda setidaknya membaca halaman-halamannya, Anda akan memahami cara menggunakan Unix untuk membantu Anda membuat program yang lebih baik. Bahkan jika Anda mengidentifikasi diri Anda sebagai orang Windows, pengetahuan yang akan Anda peroleh darinya kurang lebih universal seperti pola desain atau praktik rekayasa perangkat lunak.

Jika ingin tahu lebih banyak - mungkin untuk pekerjaan Anda atau mungkin hanya karena Anda menyukainya - setelah membaca Lingkungan Pemrograman Unix, cobalah Pemrograman Tingkat Lanjut di Lingkungan UNIX (R) dari Stevens. Ini melengkapi buku Kernighan dan Pike dengan baik dan, setelah keduanya, Anda akan membahas sebagian besar apa yang saya harapkan seorang programmer Unix ketahui. Ada juga buku Stevens tentang pemrograman jaringan, juga direkomendasikan.

Selain Linux, ada dua OS yang patut dicoba: satu adalah Plan9 , yang dalam beberapa hal adalah Unix yang lebih baik daripada Unix, dan yang lainnya adalah OpenBSD . OpenBSD dibangun oleh tim kecil sehingga sangat konsisten dan didokumentasikan dengan sangat baik, jadi menyenangkan untuk menyodoknya.

Vitor Py
sumber
5

Jika suatu organisasi menggunakan sistem operasi mirip Unix, semua pengembang harus mengetahui perintah terminal dasar untuk menavigasi struktur file, membuat file dan direktori baru, menghapus file, alat bantu pembuatan baris perintah, menggunakan kontrol versi pada baris perintah, dan mungkin skrip shell dasar untuk membantu mengotomatiskan tugas yang berulang. Menurut pendapat saya, kekuatan terminal dan ketersediaan alat baris perintah pada sistem mirip Unix adalah keuntungan besar, ditambah dengan betapa mudahnya menulis skrip untuk mengotomatisasi sejumlah tugas kompleks yang mungkin Anda lakukan secara teratur dasar.

Ada sejumlah aplikasi baris perintah yang mungkin ingin Anda kenali. Alat seperti cat, grep, head, tail, more, dan lessberguna untuk sejumlah tugas, mulai dari mencari melalui file untuk menemukan pertandingan teks, untuk membaca file log untuk membantu dalam debugging aplikasi. Kemampuan untuk menggunakan pipa dan mengumpankan output melalui aplikasi ini juga berguna untuk membantu Anda membaca informasi yang tersedia.

Pengetahuan tentang salah satu editor teks utama (vi atau emacs) juga akan sangat membantu. Yang mana yang Anda gunakan adalah pendapat pribadi, tetapi saya akan merekomendasikan menggunakan apa yang digunakan tim Anda (dengan begitu, jika Anda memiliki pertanyaan, akan ada seseorang di tim Anda yang menjawabnya). Dalam pengalaman saya, banyak pengembang "hardcore" Unix lebih suka alat ini daripada IDE. Saya sendiri, saya lebih suka IDE (bahkan di lingkungan seperti Unix), tetapi editor teks memiliki kelebihan mereka ketika membaca file. Sifat baris perintah mereka memudahkan pencarian melalui file dengan alat yang saya sebutkan di paragraf terakhir dan kemudian buka semua file yang cocok dalam salah satu editor ini.

Di luar penggunaan alat yang disediakan dengan sistem operasi, Anda juga ingin mengetahui perbedaan dalam perpustakaan. Perpustakaan yang membuat panggilan sistem (hal-hal yang melibatkan threading datang ke pikiran, sebagai contoh spesifik) mungkin akan berbeda di seluruh sistem operasi. Makefile yang memiliki flag untuk dikompilasi pada arsitektur tertentu atau untuk OS tertentu juga berpotensi menimbulkan masalah. Mengetahui sistem operasi mana yang digunakan akan membuat ini lebih mudah - Anda dapat menemukan referensi yang membahas bagaimana mengimplementasikan fungsi tertentu dalam OS tersebut. Namun, ini adalah sesuatu yang saya harapkan Anda dapat mengambil on-the-job (terutama untuk sistem operasi yang biasanya digunakan di lingkungan perusahaan dan bahwa individu tidak sering memiliki akses ke, seperti Solaris).

Thomas Owens
sumber
3

Buku yang saya gunakan di kelas UNIX saya adalah "UNIX untuk Programmer dan Pengguna" Glass and Ables . Pengantar solid yang baik untuk perintah sistem, alat pengarsipan dan pemrograman, ikhtisar sistem dan jaringan serta beragam cangkang. Cukup pendek juga kalau agak mahal baru. Hadir dalam rasa Linux juga.

Untuk lebih mendalam: "Antarmuka Pemrograman Linux" . Ini bukan intro yang ringan tetapi jika Anda membutuhkan manual referensi untuk mengakhiri semua manual referensi pada pemrograman level sistem pada sistem keluarga * nix, saya akan memilih ini.

Insinyur Dunia
sumber
Saya baru setengah jalan tentang "Antarmuka Pemrograman Linux" saat ini. Ini adalah bacaan yang sangat mendalam, dan informasi yang dikandungnya sangat bermanfaat. Bahkan berbicara tentang hal-hal yang portabel dan seberapa portabel mereka, yang sangat berguna juga.
Michael Trausch
-1

Pertama-tama, saya sarankan Anda menginstal ubuntu , yang merupakan titik awal yang baik, di sebuah partisi di komputer Anda. Cobalah untuk bermain dengannya sedikit. Seperti, menonton video dengan codec aneh ... Maka Anda mungkin perlu menggunakan terminal untuk menjalankan beberapa apt-get installperintah, dan bang! Anda sedang belajar cara menggunakan sistem seperti Unix. Itu dia. Mulai koding dan Anda akan merasa perlu untuk belajar saat Anda kode.

Daftar cepat yang muncul di pikiran:

  1. apt-get - cara menginstal paket
  2. top - proses berjalan
  3. ps - daftar proses, pintasan: ps -fea | grep "process_name"
  4. kill -9 PID - bunuh proses
  5. sudo cmd - mengeksekusi perintah dengan izin root
  6. file vi - membuka editor cepat, google for vi dan belajar cara menggunakannya
  7. gedit - pelajari cara menggunakannya dan perluas dengan plugin (mungkin berfungsi seperti IDE berfitur lengkap)
  8. tail -fn500 file - tails file dan mencetak 500 baris terakhir, sangat berguna untuk memeriksa log
  9. man cmd - man !!! seharusnya yang pertama dalam daftar ... Pada dasarnya Anda akan mendapatkan semua bantuan yang Anda butuhkan mengenai perintah bernama cmd
  10. pelajari skrip bash .sh Google dan tambahkan ke toolkit programmer Anda. Suatu hari Anda akan menggunakannya.
  11. folder cd - navigasi
  12. ls - daftar file dalam direktori
  13. ll - shorcut ke ls-l, daftar file dengan detail

Jika Anda benar-benar ingin tahu bagaimana sebuah OS bekerja dan bagaimana sistem seperti Unix bekerja, mulailah dengan melihat minix dan membaca buku OS Tanenbaum .

wleao
sumber
2
Dari mereka, apt-getmungkin tidak berguna dan geditharus akrab bagi siapa saja yang pernah menggunakan editor teks sebelumnya. Setiap distro Linux (dan OS berbasis Unix) memiliki alat instal / perbarui yang berbeda, dan saya tidak akan mengharapkan pengembang harus menjaga lingkungan seperti yang akan dilakukan oleh TI. Juga, Anda lupa menyebutkan emacssebagai alternatif vi- yang mana yang Anda gunakan sangat bergantung pada preferensi pribadi (dan, menurut saya, preferensi tim).
Thomas Owens
1
Iya! emacs! Anda harus belajar cara menggunakannya. Yah, saya sedang berbicara tentang ubuntu (karenanya apt-get) di sini .. Dan ya, Anda harus belajar bagaimana mengelola paket Anda .. Kalau tidak, Anda suatu hari akan terjebak mencoba memperbaiki beberapa ketergantungan dan Anda mungkin perlu purgesesuatu .. . Kau tak pernah tahu.
wleao
Saya berharap saya memiliki staf TI untuk menjaga lingkungan pengembangan saya siap untuk pergi setiap kali = /
wleao
Seperti yang saya katakan, di perusahaan berukuran sedang, tidak ada insinyur perangkat lunak yang menginstal perangkat lunak. Jika sesuatu perlu diinstal pada sistem, IT harus menangani itu.
Thomas Owens
1
@ Thomas, untuk pengembangan sistem yang melibatkan TI biasanya hanya buang-buang waktu. Sistem produksi adalah masalah lain.