UNIXベースのシステムについて開発者は何を知っておくべきですか?


8

これはまだ誰からも質問されていないことに少し驚いていますが、UNIXベースのシステムでの作業について、すべての開発者が知っておくべきことは何ですか。

* nixの経験は非常に限られています。自分の目的でWindowsを使用する理由はまったくないからです。しかし、会社が* nixの経験を持つ人を理想的に望む2つのインタビューがあります。彼らが私がしたい申し出をするならば、私はそれを知ることに問題はありませんが、私の申し出の大部分がWindowsシステムを扱っているとき、それは投資の価値がありません。うまくいけば、これは理解可能です。

どのツールについて知っておくべきですか?私が知っておくべき癖がありますか?広く理解するためにすぐに読むことができる優れた簡潔なリソースはありますか?


どのような開発をしていますか?高水準プログラミングの場合、端末の基本的なコマンドを知ることは、おそらく主要なテキストエディタ(vi、emacs)の1つを知ることと一緒に、非常に大きなプラスになります。下位レベルのプログラミングでは、システムコール、システム固有のヘッダーファイル、およびシステムレベルでのスレッドの処理方法について詳しく知る必要があります。たとえば、クロスプラットフォームのC ++には多くのニュアンスがあります。現在、Solarisを除くすべての主要なOSでコンパイルできるシステムがあります。
Thomas Owens

あ、ごめんなさい。私は主に低レベルのプログラミングに興味がありますが、コマンドを知ることも役に立ちます。
rwar

:あなたはこの読むことをお勧めしますprogrammers.stackexchange.com/questions/89249/...
WarrenFaith

1
Unix、特にLinux / FreeBSD / etcは、サービスを実行するためにWindowsよりも安価です。したがって、WindowsだけでなくUnixでも配信できる場合、会社の競争力はさらに高まります。

若い女の子でさえそれを知っていますyoutube.com/watch?v=dFUlAQZB9Ng
MattyD

回答:


8

コマンドラインの使い方などの基本に加えて、基本はシステムの構造を理解することだと思います。

WindowsからUnixに移行するときの最大の違いは、システムがどのように組み合わされているかを理解することです。Windowsは、そのAPIとCOMのような基礎となるOSコンポーネントの手段によって互いに適合します。これは多くの場合プログラマーから抽象化されていますが、長い間コーディングすると、COMスレッドモデルやGDIなどについて知ることができます。Unixはまったく異なる方法で適合します。Unixは、小さなコンポーネントを構築し、それらからIPCを使用して(多くの場合単純なパイプを介して)より大きなシステムを構築するという考えに基づいています。

あなたは簡潔なリソースを求め、そして少なくとも私にとって、Unixがプログラミング環境としてどのように機能するかを理解するための唯一の出発点は、Kernighan and Pikeの著書Unix Programming Environmentです。本自体は少し時代遅れに感じられますが、Unixの哲学とは何か、コーディングの際に「Unixの方法」をどのように活用できるかを示す完璧な例です。

少なくともそのページをざっと見れば、Unixを使用してより優れたプログラムを作成する方法を理解できるでしょう。あなたが自分をWindowsの男だと識別したとしても、そこから得られる知識は、デザインパターンやソフトウェアエンジニアリングの慣習と同様に、多かれ少なかれ普遍的です。

詳細を知りたい場合-おそらくあなたの仕事のためか、多分それが好きだったから-Unixプログラミング環境を読んだ後、スティーブンスのUNIX(R)環境での高度なプログラミングを試してみてください。それはカーニハンとパイクの本をよく補足し、両方の後、あなたは私がUnixプログラマーが知っていると期待するほとんどのことをカバーするでしょう。ネットワークプログラミングに関するStevensの本もあり、これもお勧めです。

Linuxのほかに、試してみる価値のある2つのOSがあります。1つはPlan9で、これはある意味でUnixよりも優れたUnixであり、もう1つはOpenBSDです。OpenBSDは小規模なチームによって構築されているため、非常に一貫性があり、十分に文書化されているので、それをざっと見ていて楽しいです。


5

組織がUnixライクなオペレーティングシステムを使用している場合、すべての開発者は、ファイル構造のナビゲート、新しいファイルとディレクトリの作成、ファイルの削除、コマンドラインビルドツール、コマンドラインのバージョン管理の使用、および繰り返しのタスクを自動化するのに役立つ基本的なシェルスクリプト。私の意見では、ターミナルの能力とUnixライクなシステムでのコマンドラインツールの可用性は、定期的に実行する可能性のある多くの複雑なタスクを自動化するスクリプトを記述することがいかに簡単であるかと相まって、大きな利点です。基礎。

慣れるとよいコマンドラインアプリケーションがいくつかあります。ツールは、次のようなcatgrepheadtailmore、およびlessアプリケーションのデバッグを支援するためにログファイルを読み込むには、テキストマッチを見つけるために、ファイルを検索至るまで、多数のタスクのために便利になります。これらのアプリケーションを介してパイプとフィード出力を使用する機能は、利用可能な情報を解析するのにも役立ちます。

主要なテキストエディタ(viまたはemacs)の1つについての知識も役立ちます。どちらを使用するかは個人的な意見ですが、チームが使用しているものを使用することをお勧めします(そうすれば、質問がある場合は、チームに誰かが回答してくれます)。私の経験では、多くの「ハードコア」Unix開発者はIDEよりもこれらのツールを好みます。私自身、(Unixのような環境であっても)IDEを好みますが、テキストエディタにはファイルを読み取る際に利点があります。コマンドラインの性質により、前の段落で説明したツールを使用してファイルを簡単に検索し、一致するすべてのファイルをこれらのエディターの1つで開くことができます。

オペレーティングシステムに付属のツールを使用する以外に、ライブラリの違いにも注意する必要があります。システムコールを行うライブラリ(具体的な例として、スレッディングに関連するものが頭に浮かぶ)は、オペレーティングシステムによって異なる可能性があります。特定のアーキテクチャーまたは特定のOSでコンパイルするためのフラグを持つメイクファイルも、問題を引き起こす可能性があります。使用されているオペレーティングシステムを知ることで、これが容易になります。そのOS内で特定の機能を実装する方法を説明したリファレンスを見つけることができます。ただし、これはオンザジョブで受け取ることができるはずです(特に、エンタープライズ環境で一般的に使用され、Solarisなど、個人がアクセスできないことが多いオペレーティングシステムの場合)。


3

私のUNIXクラスで使用した本は、Glass and Ablesの「UNIX for Programmers and Users」でした。システムコマンド、ファイリングとプログラミングツール、システムとネットワークの概要、およびさまざまなシェルについてのしっかりとした紹介。やや高価な新品の場合はかなり短いです。Linuxフレーバーも付属しています。

詳細については、「Linuxプログラミングインターフェース」を参照してください。これは軽量なイントロではありませんが、* nixファミリシステムでのシステムレベルのプログラミングに関するすべてのリファレンスマニュアルを終了するためのリファレンスマニュアルが必要な場合は、これを選択します。


現在、「Linuxプログラミングインターフェース」の半分ほどです。これは非常に詳細な資料であり、そこに含まれている情報は非常に有益です。持ち運びが可能なものや持ち運びできることについても話しているので、とても便利です。
Michael Trausch、2011

-1

まず第一に、コンピューターのパーティションにubuntuをインストールすることをお勧めします。少し遊んでみてください。奇妙なコーデックを使ってビデオを見るのと同じように、おそらくターミナルを使用していくつかのapt-get installコマンドを実行し、強打する必要があります。あなたはUnixライクなシステムの使い方を学んでいます。それでおしまい。コーディングを開始すると、コーディングしながら学ぶ必要性を感じるでしょう。

頭に浮かぶ簡単なリスト:

  1. apt-get-パッケージのインストール方法
  2. top-実行中のプロセス
  3. ps-プロセスのリスト、ショートカット:ps -fea | grep "process_name"
  4. kill -9 PID-プロセスを強制終了
  5. sudo cmd-root権限でコマンドを実行します
  6. viファイル-クイックエディターを開き、viのグーグルとそれを使用する方法を学ぶ
  7. gedit- プラグインを使用して拡張する方法を学びます(フル機能のIDEのようにうまく機能する可能性があります
  8. tail -fn500 file-ファイルをテールし、最後の500行を出力します。ログのチェックに非常に役立ちます。
  9. man cmd-man !!! リストの最初のはずです...基本的に、cmdという名前のコマンドに関して必要なすべてのヘルプを取得します
  10. .sh bashスクリプトを学ぶ。Googleでそれをプログラマツールキットに追加します。いつかあなたはそれを使うつもりです。
  11. CDフォルダー-ナビゲーション
  12. ls-ディレクトリ内のファイルを一覧表示する
  13. ll-ls -lへのショートカット、詳細を含むファイルのリスト

OSの仕組みとUnixライクなシステムの仕組みを本当に理解したいのであれば、まずminixを見て、TanenbaumのOSの本を読んでください


2
それらのうち、apt-getおそらく役に立たず、gedit以前にテキストエディタを使用したことがある人なら誰でも知っているはずです。すべてのLinuxディストリビューション(およびUnixベースのOS)には異なるインストール/更新ツールがあり、開発者がITによって行われるように環境を維持する必要があるとは思いません。また、あなたemacsは代わりに言及するのを忘れていましたvi-どちらを使用するかは個人的な好み(そして私の意見ではチームの好み)に大きく依存します。
Thomas Owens

1
はい!emacs!あなたはそれを使う方法を学ぶべきです。まあ、私はここでubuntu(したがってapt-get)について話しています。そうです、パッケージを管理する方法を学ぶ必要があります。そうしないと、ある依存関係を修正しようとすると、行き詰まってpurge何かする必要があるかもしれません。 。 あなたは、決して知らない。
wleao 2011

ITスタッフに私の開発環境をいつでも使えるようにして
ほしい

私が言ったように、適切な規模の企業では、ソフトウェアエンジニアがソフトウェアをインストールするべきではありません。システムに何かをインストールする必要がある場合、ITがそれを処理する必要があります。
Thomas Owens

1
@ Thomas、ITを含む開発システムの場合、通常は時間の無駄です。生産システムはまったく別の問題です。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.