LAC WATCH

セキュリティとITの最新情報

RSS

株式会社ラック

メールマガジン

サイバーセキュリティや
ラックに関する情報をお届けします。

ラックピープル | 

便利なBashの活用方法

Microsoftから、Build 2016カンファレンスにて、Windows上でBashを使えるようにするという発表がありました。これまで、Windows上でcygwin(LinuxシェルをWindows上にエミュレートする環境)を使って、プログラミングに限らず様々な作業に利用していた私からすると、とても楽しみなニュースです。

と、書いてみましたが、あまりBashに馴染みのない方も多いかと思います。簡単に説明すると、BashはLinuxで利用できるシェル(Windowsでいえばcmd(コマンドプロンプト)やPowerShell)です。そして、このBash上で動作するプログラムが多数存在しており、今回のMicrosoftの発表では、これらのプログラムについてもWindows上でそのまま利用可能と紹介されています。

それらのプログラムの内、今回は、私が普段Bashを利用していて便利と感じるものをいくつかご紹介させていただこうと思います。なお、本ブログ内でご紹介しているコマンドについては、私が現在Windows上にインストールしているcygwinでの操作感に基づいた内容で記載しています。現時点で私の把握している情報では、本ブログでご紹介しているコマンドは全てWindows上のBashでも利用可能となると思っておりますが、あくまで現時点での情報であるため、実際にリリース時点で利用できることを保障するものではないことをご了承ください。

差分比較~diffコマンド

ファイルの一部分のみが追記されたり編集されたりした際に、どの部分が変わっているのかを判断するのに利用できます。たとえば、一つの文書について、やりとりしていく中で第1版・第2版~第X版と、内容を更新していくことがあります。このような場合、新しい版がくる都度、全部読み直すのは非効率的ですし、更新履歴的なものを記載するルールでは記載忘れがないとは言い切れません。このような際に、一つ前の版と最新の版にてdiffコマンドで内容を比較すると、内容が変化している箇所のみを抽出してくれます。

例:diff 一つ前の版ファイル 最新ファイル

このコマンドは基本的にテキストデータ(.txtファイル)を対象としたものですが、テキスト化できる形式であればもともとのファイルが.txtでなくても、先にテキスト化してしまえば比較に利用することができます。以前、エクセルのシートについて、部分的に更新された内容をチェックするために自分でマクロを書いて使っていたことがあるのですが、近年は該当シートをテキストファイルにコピーした上でdiffコマンドで比較するという手順を利用できると気づき、作成したマクロはまったく使わなくなってしまいました!

なお、バージョン間の差分比較ということについては、ワード等のオフィスソフトには編集履歴を確認できる機能があるため、それを使うという方法もあります。もちろん使える環境であればこのような機能を使うのが正しいやり方と思います。ただし、単純なテキストファイルやHTMLなど、このような履歴を保持する機能がないファイルも存在します。また、スクリーンリーダーを使っているからならではとなりますが、スクリーンリーダーで編集履歴の存在する場所を直感的に見つけることが難しく、履歴の確認が行いにくいという状況が存在します。その意味で、私自身はたとえワードファイル等で編集履歴が保持されていたとしても、テキスト化した上でdiffにて差分比較するという方法を活用しています。

複雑な条件でのファイル検索~findコマンド

Windows自体にもファイル検索を行う機能は標準で存在していますが、findコマンドではファイル名だけではなく、ファイルサイズやタイムスタンプなど細かな条件を必要に応じて複数指定した上で、ファイル検索を行うことが可能です。たとえば、残りのディスク容量が少なくなってきた際に、サイズの大きなファイルが存在しないか調査し、要領だけ消費していて実際使っていないファイルがあれば削除するというようなことにも利用可能です。

例:カレントフォルダ以下に存在する、50MB以上のファイルを検索する
find . -type f -size +50M

さらに、上記結果と他のコマンド(ファイルのコピーや削除・・・ETC)と連携することが可能です。たとえば、特定の条件のファイルを検索して、それを一箇所のフォルダに集めるというような使い方が可能です。

例:「.exe」の拡張子を持つファイルを全て「test」フォルダにコピーする
find . -name "*.exe" | xargs -i cp {} test

SSH接続~sshコマンド

これはスクリーンリーダー環境での利用に限った話になってしまいますが、Linux等スクリーンリーダーによる読み上げ環境が整っていない環境を、Windows上からスクリーンリーダーの読み上げを利用して操作できるということは、非常に有用です。Windows上で利用可能なSSHクライアントとしては、Tera Termやputty等のソフトも存在しますが、これらについては独自のインタフェース(GUI)を持っているため、そのインタフェースをスクリーンリーダーでうまく読み上げなかったりという現象が発生することがあります。この点、Bash上(現状cygwin上、おそらくWindowsに実装されるBash上でも同様)のSSHコマンドは、コマンドプロンプト上で動作するため、通常のコマンドプロンプトを利用する際と同様に、スクリーンリーダーによる読み上げを利用して操作することが可能です。

いかがでしょうか。普段コマンドプロンプトをあまり利用されない方にとっては、コマンドを入力して~、ということは障壁が高いように感じられるかもしれません。しかし、今後Windows上でBashが使えるようになれば、今回ご紹介したものを一例として、作業の効率化を初めとして便利に使えるコマンドが劇的に増加すると思われます。また、従来はcygwinをインストールして環境を整備するなど、このようなコマンドをWindows上で使えるようにするまでが大変という感覚もありましたが今後は何もしなくても利用可能となります。

まずは、現時点では情報のみで実際試してみることができる状態ではないので、どのようなものが使えるようになるのか、今年夏のリリースを楽しみに待ちたいと思います。

この記事は役に立ちましたか?

はい いいえ