シェル芸はじめました

はじめまして!スカイアーチの鯖管になるために、現在修行をしている新卒の幕田です。大学ではコンピュータ理工学部でプログラミング、ネットワーク、ハードウェアなどのITの基礎を学びました。Linuxは簡単な使い方を知っている程度です。

今月に入り、研修でLinuxに触れ始めました。そこで壁にぶつかりました。「コマンドがわからない」「おぼえられない」というものです。なので、「実際に打って覚える」「楽しく続けられそう」この条件を満たす勉強方法を探すことにしました。

そんなとき、友達が”シェル芸”なるものについて語っていたのを思い出しました。これだ!と思い、最近シェル芸を始めました。

ということで、今回はシェル芸について紹介を書こうと思います。

そもそもシェル芸とは?こちら(http://blog.ueda.asia/?tag=シェル芸の定義)で定義について書かれています。定義をリンク先から引用させていただくと、

マウスも使わず、ソースコードも残さず、GUIツールを立ち上げる間もなく、あらゆる調査・計算・テキスト処理をCLI端末へのコマンド入力一撃で終わらすこと。

すごいかっこいい!

そして、シェル芸についていろいろ調べていたら、危険な技、”危険シェル芸”というものを見つけました。私が「なるほど!」と思ったものっを、いくつかご紹介します。

 

rm -rf temp /* テンポラリを削除 */

これは最初何が危険なのかわからなかったもの。プログラマだと/* テンポラリを削除 */ の部分をコメントアウトと認識してしまいがちですが、冷静に考えれば、シェルのコメントアウトは#です。つまり、これは

を行なう処理になり、その中には危険な操作rm -rf /*があるので、ルートディレクトリから全て消されてしまうわけです。むやみに実行したら危険です。

 

:(){: | : &};:

??この記号の羅列はなんでしょう。

検索したらwikipediaに説明がありました。

http://ja.wikipedia.org/wiki/Fork%E7%88%86%E5%BC%BE

fork爆弾というやつらしいです。引用させていただきます。

これはまず、先頭の ":()" は ":" という関数(引数なし)を定義することを宣言している。続く "{ :|:& };" がその本体で、自分自身を2つ起動してパイプでつなぎ、バックグラウンドで実行することを意味する。バックグラウンドなので、親プロセスをkillしても子プロセスは終了しない。最後の ":" がその関数の実行開始を意味する。この文字列は関数名を ":" として意味をわかりにくくしている。これをもっと判りやすい名前に置換すると次のようになる。

なるほど!これは危険ですね。

今回は危険なものをメインに紹介しましたが、もちろん便利なシェル芸もあります。今回は省略致します。

 

とりあえず、私も勉強がてらワンライナーで”危険じゃない”シェルを作ってみました。

研修でやったRSA暗号の話で「素数」が出たので、素数を出してくれるシェルを作りました。素数をだすアルゴリズムは知っていたので、どうやってシェルで書くかというところが問題でした。

調べたところ、jot という連番・ランダムな数字を出してくれるコマンドがあったのでjotを軸に、いろいろ試行錯誤した結果こうなりました。

あんまりシェルでやった感が出ませんでした。

ということで、もっとシェルなモノ探したら見つかりました。

 

奥が深いです。。。

初めのうちはコツをつかむのに時間がかかるかもしれませんが、やってるとハマりそうです!

ということで、もっと知りたい方は”シェル芸”で検索してみてください!

投稿者プロフィール

makuta
2024 Japan AWS Top Engineers
2025 AWS Community Builders


AWSを使ったサーバレスアーキテクチャ・コンテナサービスの設計・構築を担当。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


Time limit is exhausted. Please reload CAPTCHA.

ABOUTこの記事をかいた人

2024 Japan AWS Top Engineers 2025 AWS Community Builders AWSを使ったサーバレスアーキテクチャ・コンテナサービスの設計・構築を担当。