Unixは魅力的なオペレーティングシステムです。 もともと1960年代後半にベル研究所で考案されたが、”Multics”(multiplexed information and computing service)として知られているOSに不満を抱いていた。 Unixは50歳以上になりました(!)そして、Linuxの実装は、インターネットの巨大な帯に力を与えます。
だから—なぜUnixはそんなに人気があるのですか?
私の考えでは、Unixの成功は開発への哲学的アプローチから来ています。 UNIXの哲学は、Doug McIlroyによってBell System Technical Journalの中で文書化されています1978:
1. 各プログラムがよく一つのことを行うようにします。 新しい仕事をするには、新しい「機能」を追加して古いプログラムを複雑にするのではなく、新たにビルドします。
2. すべてのプログラムの出力が、まだ知られていない別のプログラムへの入力になることを期待してください。 無関係な情報との出力を乱雑にしてはいけない。 列またはバイナリの入力形式を厳密に使用しないようにします。 相互入力を主張してはいけない。
3. 理想的には数週間以内に早期に試されるように、ソフトウェア、オペレーティングシステムを設計し、構築します。 不器用な部分を捨てて再構築することを躊躇しないでください。
4. あなたがツールを構築し、あなたがそれらを使用して終了した後、それらのいくつかをスローすることを期待するために迂回する必要がある場合でも、プ
これは40年以上前のもので、固体(単一責任原則、オープン/クローズ)、マイクロサービス、機能パイプライン、アジャイル、DevOpsの精神を捉えています!
Unixの哲学の詳細については、この本を読んでください(ここで自由に入手できますが、著者をサポートするためにコピーを購入してください!).
実際のUnix哲学のいくつかの例を見てみましょう。
各プログラムに一つのことをうまくさせる。 新しい仕事をするには、新しい「機能」を追加して古いプログラムを複雑にするのではなく、新たにビルドします。
cat
正確に一つのことを行います。 ファイルを連結し、標準出力に表示します。 それがすべてです。 それはページネーションをしません。 これは、検索機能を提供していません。 それはちょうどそれが錫とこれ以上に言うことを正確に行いません。
tr
は似ています。 これは、入力から読み取り、翻訳を行い、出力に書き込むことによって”テキスト置換”を行います。
tr -d aeiouAEIOU < file # Display file without vowels
tr eao 340 < file # Partially leet speak file
true
そして、false
はおそらく一つのことをうまくやっている最良の例です。 true
は何もしません、成功しました! false
は何もしない。
false && echo Hi # does nothing
true && echi Hi # Prints Hi
“すべてのプログラムの出力が別のプログラムへの入力になることを期待してください”
Unixでは、ほとんどの操作は、よく理解されたテキスト形式で標準出力を読み書きする能力を持っています。 |
、>
、<
などのいくつかのコマンドを使用すると、あるプログラムの出力を別のプログラムにフィードできます。 いくつかの例を見てみましょう:
この例では、cat
を使用してファイルの内容を出力し、ファイル内の行数を数えることができるwc
に出力を送ります。
cat foo.txt | wc -l
この例では、history
を使用して、最も頻繁に使用されるコマンドを次のように組み合わせて検索しますcut
, sort
, uniq
そしてhead
。
history | cut -f5 -d" " | sort -rn | uniq -c | sort -rn | head
xargs
あなたが標準出力からコマンドを構築することができ、究極のスイスアーミーナイフです。 のは、すべてを削除するためにそれを使用してみましょう”。tmp”ファイルをfind
を使用して検索した後、現在のディレクトリ内のファイル。
find -type f *.tmp | xargs rm
すべてがファイルです
UNIXではすべてがファイルです(より正確には、すべてがバイトのストリームです)。 これは、CD-ROMドライブの読み取り、ネットワークソケットの書き込み、またはCPU情報の検索に同じApi/コマンドを使用できることを意味します。たとえば、Linux上の/proc
ファイルシステム全体は実際にはファイルではなく、ファイル記述子の束として公開される情報の動的なビューです。
いくつかの例:
cat /proc/cpuinfo # Displays your CPU info exposed as a filefoo > /dev/null # Redirect output into a file called
# null (which discards everything)od -vAn -N1 -td1 < /dev/urandom # Display a random 1 byte number
# (via https://unix.stackexchange.com/a/268960
Automation
“automate-all-the-things”のずっと前に、Unixはそこにありました。errr、すべてのものを自動化していました
cron
(詳細はこちら)は、過去40年以上にわたってすべてのものを自動化してきました。 Cronジョブは、一定の時間または一定の間隔で実行できるスケジュールされたスクリプトです。
Unixシステム上の各ユーザーには、crontab
コマンドを使用して表示される一連のスケジュールされたタスクがあります。 ファイルは、実行されるスクリプトの日付と時刻を与える非常に単純な形式です。
at
コマンドはより友好的な代替手段であり、ここではJan31の1145でコマンドを発射する例です(ここから)。
echo "cc -o foo foo.c" | at 1145 jan 31
Puppet、Chef、CFEngine、Ansible—これらのDevOpsツールのすべてとUnixベースのシステム上で生まれ育った。