Các nhà phát triển nên biết gì về các hệ thống dựa trên UNIX?


8

Tôi hơi ngạc nhiên khi điều này chưa được ai hỏi, nhưng ở mức độ cao, mọi nhà phát triển nên biết gì khi làm việc với các hệ thống dựa trên UNIX?

Trải nghiệm * nix của tôi rất hạn chế, vì tôi hoàn toàn không có lý do gì để sử dụng nó trên Windows cho mục đích riêng của mình, nhưng tôi có hai cuộc phỏng vấn sắp tới nơi các công ty lý tưởng muốn ai đó có kinh nghiệm * nix. Tôi không gặp vấn đề gì khi làm quen với nó nếu họ đưa ra một đề nghị mà tôi muốn nhận, nhưng nó không đáng để đầu tư khi phần lớn các ưu đãi của tôi đang giao dịch với các hệ thống Windows; hy vọng điều này là dễ hiểu

Những công cụ nào tôi nên biết về? Bất kỳ quirks mà tôi nên nhận thức? Có tài nguyên tốt, súc tích nào có thể được đọc nhanh để có được sự hiểu biết rộng không?


Bạn đang làm loại phát triển nào? Đối với lập trình cấp cao, việc biết các lệnh cơ bản trên thiết bị đầu cuối sẽ là một điểm cộng rất lớn, cùng với việc có thể biết một trong những trình soạn thảo văn bản chính (vi, emacs). Để lập trình cấp thấp hơn, bạn cần biết thêm về các cuộc gọi hệ thống, tệp tiêu đề dành riêng cho hệ thống và cách xử lý luồng trên cấp hệ thống. Ví dụ, C ++ đa nền tảng có rất nhiều sắc thái - Bây giờ tôi có một hệ thống biên dịch trên tất cả các hệ điều hành chính trừ Solaris.
Thomas Owens

Ồ xin lỗi. Tôi chủ yếu quan tâm đến lập trình cấp thấp hơn, nhưng biết các lệnh cũng hữu ích.
rwar

Bạn cũng có thể muốn đọc cái này: lập trình
viên.stackexchange.com / questions / 89249 / Fiêu

1
Unix, đáng chú ý là Linux / FreeBSD / etc, rẻ hơn Windows để chạy các dịch vụ trên. Do đó, nếu bạn có thể cung cấp trên Unix cũng như Windows, công ty của bạn sẽ cạnh tranh hơn.

Ngay cả các cô gái trẻ cũng biết nó youtube.com/watch?v=dFUlAQZB9Ng
MattyD

Câu trả lời:


8

Bên cạnh những điều cơ bản như làm thế nào để sử dụng dòng lệnh và cứ thế tôi nghĩ rằng điều cơ bản là hiểu cách cấu trúc hệ thống.

Tôi nghĩ rằng sự khác biệt lớn nhất khi một người đến từ Windows đến Unix là hiểu cách hệ thống khớp với nhau. Windows khớp với nhau bằng các phương tiện của API và các thành phần HĐH cơ bản như COM. Mặc dù điều này thường được trừu tượng hóa khỏi lập trình viên, một người khi mã hóa trong một thời gian dài sẽ biết về mô hình luồng COM, GDI, v.v. Unix phù hợp theo một cách hoàn toàn khác. Unix dựa trên ý tưởng xây dựng các thành phần nhỏ và xây dựng các hệ thống lớn hơn từ chúng bằng IPC (thường thông qua các đường ống đơn giản).

Bạn yêu cầu một nguồn tài nguyên ngắn gọn và, ít nhất là đối với tôi, điểm khởi đầu duy nhất để hiểu cách Unix hoạt động như một môi trường lập trình là cuốn sách Môi trường lập trình Unix của Kernighan và Pike . Mặc dù cuốn sách cảm thấy hơi lạc hậu, nhưng đây là ví dụ hoàn hảo cho triết lý Unix là gì và làm thế nào người ta có thể tận dụng "cách Unix" khi mã hóa.

Nếu bạn ít nhất lướt qua các trang của nó, bạn sẽ hiểu cách sử dụng Unix để giúp bạn tạo các chương trình tốt hơn. Ngay cả khi bạn tự nhận mình là một anh chàng Windows, kiến ​​thức bạn sẽ có được từ nó ít nhiều phổ biến như các mẫu thiết kế hoặc thực hành kỹ thuật phần mềm.

Nếu muốn biết thêm - có thể cho công việc của bạn hoặc có thể chỉ vì bạn thích nó - sau khi đọc Môi trường lập trình Unix, hãy thử Lập trình nâng cao trong Môi trường UNIX (R) từ Stevens. Nó bổ sung tốt cho cuốn sách Kernighan và Pike và sau cả hai, bạn sẽ trình bày hầu hết những gì tôi mong đợi một lập trình viên Unix biết. Ngoài ra còn có một cuốn sách Stevens về lập trình mạng, nó cũng được đề xuất.

Ngoài Linux, có hai hệ điều hành đáng để thử: một là Plan9 , trong một số trường hợp, đó là Unix tốt hơn Unix và một là hệ điều hành OpenBSD . OpenBSD được xây dựng bởi một nhóm nhỏ nên nó rất nhất quán và được ghi chép lại rất tốt, vì vậy thật thú vị khi chọc quanh nó.


5

Nếu một tổ chức đang sử dụng các hệ điều hành giống Unix, tất cả các nhà phát triển nên biết các lệnh đầu cuối cơ bản để điều hướng cấu trúc tệp, tạo tệp và thư mục mới, xóa tệp, công cụ xây dựng dòng lệnh, sử dụng điều khiển phiên bản trên dòng lệnh và có lẽ kịch bản shell cơ bản để giúp tự động hóa các nhiệm vụ lặp đi lặp lại. Theo tôi, sức mạnh của thiết bị đầu cuối và sự sẵn có của các công cụ dòng lệnh trên các hệ thống giống Unix là một lợi thế rất lớn, cùng với việc viết các tập lệnh dễ dàng để tự động hóa một số tác vụ phức tạp mà bạn có thể thực hiện thường xuyên nền tảng.

Có một số ứng dụng dòng lệnh mà bạn có thể muốn làm quen. Các công cụ như cat, grep, head, tail, more, và lesscó ích cho một số nhiệm vụ, từ tìm kiếm thông qua các tập tin để tìm diêm văn bản, để đọc qua file log để hỗ trợ cho việc gỡ lỗi các ứng dụng. Khả năng sử dụng đường ống và đầu ra của nguồn cấp dữ liệu thông qua các ứng dụng này cũng hữu ích để giúp bạn phân tích thông tin có sẵn.

Kiến thức về một trong những trình soạn thảo văn bản chính (vi hoặc emacs) cũng sẽ hữu ích. Cái nào bạn sử dụng là ý kiến ​​cá nhân, nhưng tôi khuyên bạn nên sử dụng những gì nhóm của bạn sử dụng (theo cách đó, nếu bạn có câu hỏi, sẽ có ai đó trong nhóm của bạn trả lời chúng). Theo kinh nghiệm của tôi, rất nhiều nhà phát triển Unix "khó tính" thích các công cụ này hơn IDE. Bản thân tôi, tôi thích một IDE (ngay cả trong môi trường giống Unix), nhưng các trình soạn thảo văn bản có lợi thế khi đọc tệp. Bản chất dòng lệnh của chúng giúp dễ dàng tìm kiếm thông qua các tệp bằng các công cụ tôi đã đề cập trong đoạn cuối và sau đó mở tất cả các tệp phù hợp trong một trong các trình soạn thảo này.

Ngoài việc sử dụng các công cụ được cung cấp với hệ điều hành, bạn cũng sẽ muốn biết về sự khác biệt trong các thư viện. Các thư viện thực hiện các cuộc gọi hệ thống (những thứ liên quan đến luồng, như một ví dụ cụ thể) có thể sẽ khác nhau giữa các hệ điều hành. Makefiles có cờ để biên dịch trên một kiến ​​trúc cụ thể hoặc cho một hệ điều hành cụ thể cũng có khả năng gây ra sự cố. Biết (các) hệ điều hành nào được sử dụng sẽ giúp việc này dễ dàng hơn - bạn có thể tìm các tài liệu tham khảo giải quyết cách thực hiện các chức năng nhất định trong HĐH đó. Tuy nhiên, đây là điều mà tôi mong bạn có thể nhận được trong công việc (đặc biệt đối với các hệ điều hành thường được sử dụng trong môi trường doanh nghiệp và các cá nhân thường không có quyền truy cập, như Solaris).


3

Cuốn sách tôi đã sử dụng trong lớp UNIX của mình là "UNIX dành cho lập trình viên và người dùng" của Glass and Able . Giới thiệu tốt về các lệnh hệ thống, các công cụ lập trình và lập trình, tổng quan về hệ thống và mạng và các hệ vỏ khác nhau. Khá ngắn cũng như nếu hơi đắt mới. Đi kèm trong một hương vị Linux là tốt.

Để có thêm chiều sâu: "Giao diện lập trình Linux" . Đó không phải là phần giới thiệu nhẹ nhưng nếu bạn cần một hướng dẫn tham khảo để kết thúc tất cả các hướng dẫn tham khảo về lập trình cấp hệ thống trên các hệ thống gia đình * nix, tôi sẽ chọn nó.


Hiện tại tôi đang ở giữa "Giao diện lập trình Linux". Nó là một bài đọc rất sâu sắc, và thông tin mà nó chứa là vô cùng có lợi. Nó thậm chí còn nói về những thứ có thể mang theo và cách chúng di động, điều này cũng rất hữu ích.
Michael Trausch

-1

Trước hết, tôi khuyên bạn nên cài đặt Ubuntu , đây là điểm khởi đầu tốt, trong một phân vùng trong máy tính của bạn. Hãy cố gắng chơi với nó một chút. Giống như, xem một video với các codec lạ ... Sau đó, bạn có thể sẽ cần phải sử dụng thiết bị đầu cuối để chạy một số apt-get installlệnh và đập! bạn đang học cách sử dụng một hệ thống giống Unix. Đó là nó. Bắt đầu viết mã và bạn sẽ cảm thấy cần phải học khi viết mã.

Một danh sách nhanh chóng xuất hiện trong tâm trí:

  1. apt-get - cách cài đặt gói
  2. top - process đang chạy
  3. ps - liệt kê các tiến trình, lối tắt: ps -fea | grep "process_name"
  4. giết -9 PID - giết một quá trình
  5. sudo cmd - thực thi lệnh với quyền root
  6. tập tin vi - mở trình soạn thảo nhanh, google cho vi và tìm hiểu cách sử dụng nó
  7. gedit - tìm hiểu cách sử dụng và mở rộng nó với các plugin (nó có thể hoạt động rất tốt như một IDE đầy đủ tính năng)
  8. đuôi -fn500 tệp - đuôi một tệp và in 500 dòng cuối cùng, rất hữu ích để kiểm tra nhật ký
  9. người đàn ông cmd - người đàn ông !!! nó phải là cái đầu tiên trong danh sách ... Về cơ bản, bạn sẽ nhận được tất cả sự trợ giúp bạn cần về một lệnh có tên cmd
  10. tìm hiểu .sh bash script. Google nó và thêm nó vào bộ công cụ lập trình của bạn. Một ngày nào đó bạn sẽ sử dụng nó.
  11. thư mục cd - chuyển hướng
  12. ls - liệt kê các tập tin trong một thư mục
  13. ll - shorcut to ls -l, liệt kê các tập tin với các chi tiết

Nếu bạn thực sự muốn biết một hệ điều hành hoạt động như thế nào và các hệ thống giống như Unix hoạt động như thế nào bằng cách xem qua minix và đọc sách hệ điều hành của Tanenbaum .


2
Trong số đó, apt-getcó lẽ là vô dụng và geditnên quen thuộc với bất kỳ ai đã sử dụng trình soạn thảo văn bản trước đây. Mỗi bản phân phối Linux (và HĐH dựa trên Unix) có một công cụ cài đặt / cập nhật khác nhau và tôi không mong muốn nhà phát triển phải duy trì môi trường như điều đó sẽ được thực hiện bởi CNTT. Ngoài ra, bạn đã quên đề cập đến emacsnhư là một thay thế cho vi- cái mà bạn sử dụng phụ thuộc rất nhiều vào sở thích cá nhân (và, theo tôi, sở thích của nhóm).
Thomas Owens

1
Đúng! emacs! Bạn nên học cách sử dụng nó. Chà, tôi đang nói về Ubuntu (vì vậy apt-get) ở đây .. Và vâng, bạn nên học cách quản lý các gói của mình .. Nếu không, bạn sẽ bị kẹt một ngày nào đó khi cố gắng sửa một số phụ thuộc và bạn có thể cần purgemột cái gì đó .. . Bạn không bao giờ biết.
wleao

Tôi ước tôi có một đội ngũ nhân viên CNTT để giữ cho môi trường phát triển của tôi sẵn sàng hoạt động mọi lúc = /
wleao

Như tôi đã nói, trong bất kỳ tập đoàn tầm cỡ nào, không có kỹ sư phần mềm nào nên cài đặt phần mềm. Nếu một cái gì đó cần được cài đặt trên hệ thống, CNTT nên xử lý nó.
Thomas Owens

1
@Thomas, đối với các hệ thống phát triển liên quan đến CNTT thường chỉ là một sự lãng phí thời gian. Hệ thống sản xuất là một vấn đề khác.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.