括弧を多様する言語を使用する場合はほしい。VSNotesはマークダウン式のメモをタグ付けして保存してくれるとても便利ツール。Noteを選択するとマークダウンファイルが設定したディレクトリに作成される。DriveやDropboxなどのディレクトリを指定すると他のPCでも共有できる。プレビューが表示されるよ。マークダウンで記述したものをPDF/HTMLに変換できるというもの。umentu_blogふと思い立ったので書いてみる。知識のある方に前置きすると、ハッカーはここでは「ITに詳しい人」という意味で使う。いいことをする意味でも、悪いことをする意味でも、である。映画「Matrix」が公開されて20年。黒い画面上に意味不明な文字列が延々と流れていた。Matrixの主人公は銃弾を避けるイメージが根強いが、仮想世界上では「ネオ」という天才ハッカーという設定がある。そこから、ハッカーは黒い画面を覗き込んでキーボードをカタカタ叩くイメージがついてきた。その前からハッカーは暗い部屋でパソコンを叩くイメージはあったかもしれない。Internet」はあまり黒い画面は出てこなかった。)彼らは黒い画面で何をしているのか。マウス操作と何が違うのか。Interface)と呼ぶ。Windowsだとコマンドプロンプトであったり、Mac/Linuxだとターミナルと呼ぶが、それらは総称してCLIである。CLIは基本的にはキーボードだけで操作する。今はマウスと組み合わせて操作することもあるが、基本的にマウス操作はあまり使わない。コピペしたいときくらいだろうか。CLIで何ができるかというと、基本的にはPCの基本操作であれば何でもできる。絵を描いたり写真を加工したりすることはとても難しい。難しいという言葉にとどめておいているのは、全くできないわけではないからだ。マウス操作のほうが圧倒的に楽だ。それはマウス操作するのに最適化されているためであるといえる。PCでよくやるファイルの作成、テキストファイルの編集、ファイルのコピーや移動などはすべてCLIでできる。メールの送受信もサイトをみることもできる。Twitterにツイートすることもタイムラインをみることもできる。要するに、普通にPCでしてることができるのだ。そもそも論はあまり語りたくないが、軽く話すと元々は黒い画面しかなかった。それがウィンドウシステムというシステムの進化により、マウス操作が主流になったのだ。「マウス操作の裏側ではCLIが動いている」と説明する場合もある。CLIにはコマンドが用意されていて、コマンドを実行することでファイルをコピーしたり移動したりと、様々な操作を行うことができる。スクリプトと呼ばれる実行したいコマンドを並べて書いたファイルを用意することで、いくつかのまとまった処理をスクリプト一つで実行できるのである。MacでAというフォルダにあるファイル1.txt〜ファイル100.txtというファイルをBというフォルダに移動したいときには次のように書くことでできる。「100個のファイルを移動するくらい、マウスのほうが速い」と思ったかもしれない。「100個のファイルを作成する」となると少しむずかしいかもしれない。それもCLIだと簡単にできる。これでAフォルダにファイル1.txt〜ファイル100.txtが作成される。100を10000に変えれば10000個のファイルが作成される。様々な活用方法がありそうだ。今までは操作しているPCのファイルを操作したが、CLIでかなり多くの頻度で使われるのは、サーバーと呼ばれるインターネットなどのネットワークの先にあるファイルをPCのような操作をするときである。SHell)というシェルを使って通信し、ログインしてサーバー内部の操作を行う。サーバーにはWindowsやMacといったものではない、Linuxというシステムが使われていることが多い。手元のPCがWindowsやMacであっても、Linuxにログインして操作することが可能である。サーバーでもマウス操作できるようにすることができるが、マウス操作をする場合にはサーバーにビデオカードと呼ばれる部品が必要であったり、また画像でやり取りする必要があるため通信速度や通信データ量が膨大に増加する。そのため、サーバーはCLIだけで操作できるようになっている場合が多い。先程も言ったとおり、CLIはサーバーに接続する目的でよく使われる。ハッカーやエンジニアはサーバーに接続して、サーバーの設定を行ったりプログラムを設置して実行させたりする。ここでサーバーに関して注意となるが、今まで使っていたサーバーはハードウェア(機器)という意味でのサーバーという意味で使用していた。サーバーにはソフトウェアとしての意味もあり、例えばWebサーバーというとこのブログのようにサイトを公開する目的で使われ、メールサーバーはメールを送信したり受信したりする目的で使われる。それらはハードウェアとしての意味のサーバーにインストールすることができるのである。そのため、エンジニアであればWebサーバーやメールサーバーなどの構築のためにCLIを使い、またハッカーであれば公開されているサイトの情報を書き換えたいときにはサーバーにログインしてファイルを書き換えたりするためにCLIを使ったりする。ハッカーがやっていることといえばハッキングだろう。ハッキングとは具体的に何をしているのか?ハッキングしている最中にカタカタキーボードを叩いているのは何をしているのか?少し分類して見てみよう。ハッキングといってもいろいろあるが、代表的なものは対象のPCであったりサーバーに侵入することだろう。侵入とひとえにいっても様々である。相手のユーザー情報を取得しログインする、というのが一番シンプルだが、相手のユーザー情報やパスワードを調べるのは難しい。セキュリティの弱い会社で、全社員のユーザー名とパスワードの情報を書いたファイルがおかれていたりすればそれを盗むだけでできることもあるが。そのようなときには、ブルートフォースアタックと呼ばれる総当たり攻撃である。ユーザー名やパスワードをランダムに生成し、とにかくログインを試みるのである。これは手動ではとてもできない。ランダムにユーザー名やパスワードを生成するプログラムを作成してログインを試行するのだ。プログラムを作成するときにキーボードをカタカタしている。事前準備というわけだ。そのプログラムを実行するときに「ターン」とエンターキーを押すのである。一つの侵入方法として、プログラムの脆弱性(脆弱性)をつくという方法がある。Windowsアップデートなどに悩まされている人もいるとは思うが、これはWindowsにある穴、いわゆるセキュリティホールから侵入を試みるのである。プログラミングをやったことがない人にはなかなか実感を持ってもらえないが、プログラミングで書く文字の量は膨大で、ましてやWindowsやMacのように様々なソフトを動かすためのプログラムであれば凄まじい量の文字数となる。物語を長く書けば長く書くほど誤字が増えたり前の設定とのズレが生じたりするように、プログラムもミスが増えてしまう。これがいわゆるバグである。ハッカーはそのようなバグをみつけ、利用できるかどうかを調べる。具体的には、あるメールソフトには受信したコマンドを実行してしまうというプログラムが実行してしまう脆弱性があったとする。ハッカーはその大量にPCのハードディスクを消去してしまうコマンドを含んだメールを大量に送信し、そのソフトを使っている人がメールを受信した瞬間にコマンドを実行し、ハードディスクを消去してしまうのである。これはとても極端な例ではあるが、このようなことは日々起きている。アップデートは重要である。脆弱性は悪意のあるハッカーが先に見つけるかソフトウェア開発者が先に見つけるかよってユーザーの影響が受ける影響は180°変わる。ハッカーはプログラムを入手して解析し、プログラムに脆弱性がないかをとにかく検証する。プログラムに脆弱性がないかどうかをチェックするプログラムを使うかもしれないし、地道に手動で探す場合もあるだろう。映画ではそのシーンが描かれているのかもしれない。これも侵入の一つではあるが、侵入することが目的ではない。ハッカーが直接、自分のパソコンから対象の機器を攻撃すると自分が攻撃したことがバレてしまう。そのため、ある侵入できるPCやサーバーを探し、そこから攻撃を試みるのである。することで自分が攻撃したことを隠すことができる。