2012年10月6日土曜日

インターネットからのアプリケーションが起動されて、セキュリティが気になる時

たまに、インターネットからダウンロードされたアプリケーションが意図せず起動される時があります。
例えば、Safariを使っていて、Flash Playerのアップデータが見つかった場合などです。
こんな場合、みなさんはどうしていますか。
私は、Dockに現れたアプリケーションをFinderに表示してから、上の図のように「開いてもよろしいですか?」と聞いてくるウィンドウを一旦キャンセルしています。
その後、今回のようにある程度素性がわかっているアプリケーションの場合は、簡単にウィルスチェックなどしてから、改めて起動しています。私のMacではClamXavをメインに使っています。
ウィルスチェックがOKになった後、よく知らないアプリケーションの場合は、ウェブで検索して問題ないと判断すれば実行しますが、わからない場合、基本的には無視することにしています。本当に必要なものだったら、そのうちまた現れてきて、ウェブにも情報が上がってくると思います。

それから、ソフトウェアのアップデートをした時、すぐにインストーラが起動する場合があります。こういう場合もウィルスチェックや中身の確認をある程度できる場合もあります。
下の図は、ClamXavのエンジン(ClamAV)のアップデータをインストールしようとしているところです。
ここで、タイトルバーのパッケージアイコンを右クリックすると、下の図のようにそのパッケージが保存されているフォルダの階層が表示されます。

ここで、位置階層上のResourcesフォルダでマウスを離すと、対象のパッケージが選択された状態でそのフォルダが開きます。ClamXavのResources領域にアップデートパッケージがダウンロードされるんですね。
このパッケージファイルに対してウィルスチェックをすればよいと思います。
また、QuickLookにSuspicious Packageというジェネレーターがあり、それを使うとインストールされるファイルや、インストールスクリプトを見ることができます。私は、インストール先を見るときにたまに使うぐらいで常用しているわけではありませんが。
Sophos Anti-Virusのような常時チェックするタイプのウィルスチェッカーを使えば良いのかもしれませんが、ちょっと私の環境では不具合があり、ClamXavをメインに使っています。

2012年9月30日日曜日

ファイルを探すコマンド

Finderの「このアプリケーションで開く」その2や、locateデータベースを作る方法の中でlocateコマンドでファイルを探す記事を書きました。自分の場合、どのようにファイルを探したり思い出したりするのにどんな方法を使っているか主なところを書いてみます。この記事ではターミナルというかシェル(bash)を使う場合について書いています。

次の3つの使用場面で分けてみました。(1) 現在のディレクトリ内を探したい場合、(2) 現在または特定のディレクトリとそのサブディレクトリ含めて探したい場合、(3) コマンド名を探したい場合の3つです。

(1) まず、はじめは、現在のディレクトリ内ですね。
lsコマンドを使う場合が多いです。普通すぎますね。lsコマンドは、現在自分のいるディレクトリや、指定したディレクトリのファイル名を表示します。よく使うのは、単純な
$ ls
と、作成時間の順に表示する
$ ls -lt (または $ ls -ltr )
です。
-ltオプションは、ファイルの変更時間が新しい順に表示します。-ltrオプションのように-rを追加すると古い順に表示します。最近使ったファイル名をしりたい場合が多いので、-rを指定すると次のコマンドプロンプトの近くにファイル名が表示されて便利です。-rを使わないと、最近のファイルが画面からスクロールアウトしてしまう場合も多いですしね。
ファイルが多い場合は、lessやhead, tailで画面外に出ないようにすることもあります。
また、多少ファイルが多い場合は、ls a*.html のようにワイルドカードで一部を指定したりすることもあります。
同じディレクトリ内ですと、ほとんどlsで用が足りますね。

(2) 次は、現在ディレクトリとそのサブディレクトリすべて、またはあるディレクトリとそのサブディレクトリ以下をすべて探す場合です。現在いるディレクトリや特定のディレクトリの場合は、findコマンドを使う場合が多いですがlocateコマンドも使います。
$ find . -name "*foobar*"
上のfindコマンドの場合は、"."は、カレントディレクトリを示すので、現在のディレクトリ以下から探すことを意味し、-nameコマンドでファイル名の一致条件を指定します。この場合は、ファイル名の一部に"foobar"を含むファイルを探して表示します。ファイル名の大文字、小文字の区別をしない場合は、-inameオプションが使えます。
また、ファイル名の代わりにディレクトリ名を探す場合は、次のように-type dを追加します。
$ find . -type d -iname "application*"
探したいファイルが、特定のディレクトリの下にあるとわかっている場合は、例えば
$ find /opt/local -name "a*.conf"
のようにするか、そのディレクトリに移動後(cd /opt/local)、探したいパス名の部分に"."を指定しています。後でフルパス名を使いたい場合が多いので、初めの方法をよく使います。
findコマンドは他にも時間指定したり、見つかったファイルに対して処理を行うオプションなどがあるので調べると面白い使い方が出来ると思います。

locateコマンドは、ファイルがどこにあるかわからない場合や、findコマンドで探すとディレクトリ階層の上位(/に近い場合)で、その下にファイルが大量にある場合、まず、locateコマンドを使ってみるという使い方が多いです。使い方は、単純に
$ locate "ファイル名の一部"
とすることが多いです。
locateコマンドはfindコマンドに比べスピードが速いのですが、

  • データベースを作っておく必要があります。
  • データベースは、設定にもよりますが一週間に一回しか更新されないので最近作成したファイルは見つけられません。
  • 検索する単語が短かかったり、パス名の上の階層に一致する場合は出力が多すぎて、そこからさらに絞り込まないといけない場合が結構あります。
  • Macを個人で使っている場合はあまり関係ないかもしれませんが、サーバーのように他の人も使う場合、他のユーザからファイル名が見られてしまうというセキュリティ上の問題があります。

といったことを注意しておく必要があります。
実行ファイルのコマンド名を忘れた場合に限られますが、which、

(3) 最後の場合として、コマンド名を探す場合です。
よく使うのは、whichコマンドです。
$ which curl
などのように、コマンド名を指定します。シェルがbashの場合、whichコマンドは、現在指定しているPATHに従って有効なコマンドのパス名を表示します。例えば、/usr/localの下やMacPortsを使って標準以外の場所にも、標準と同名のコマンドをインストールしている場合、どれが使われているかを確認できます。
気をつけないといけないのは、実際はbashのビルトインコマンドを使っている場合やaliasで既存のコマンドと同じ名前でコマンド名を置き換えていても、ファイルシステム上に見つかったコマンドしか表示されない点です。私の環境で、cdとh、aaaを指定した場合ですが、以下のようになります。
$ which cd
/usr/bin/cd # whichの出力です
$ which h
$ # 何も表示されません。
$ which aaa
$ # 何も表示されません。
でも、実際は、cdは、bashの内部に組み込まれているcdコマンドが使われています。また、lsもalliasコマンドで、h='history | tail -40 | more'と設定しています。
最近はbashを使っているのですが、以前使っていたtcshでは、
% which cd
cd: shell built-in command.
% which h
h: aliased to history 25
% which aaa
aaa: Command not found.
のように、実際に使っているコマンド(historyもシェル組み込みコマンドです)が表示されます。見つからない場合も見つからないと表示されます。

また、which コマンドの引数には探したいコマンド名をフルネームで指定しないと結果が表示されないので、コマンド名を忘れていると使えないですね。
コマンド名を覚えておかないといけない欠点をカバーする方法として、bashの組み込みコマンドcompleteがありますね。コマンド名やファイル名の先頭部分を入力して、覚えている場合に、lsで始まるファイル名の候補を示してくれます。以下は、コマンドプロンプトに、which lsと入力し、tabキーを押した場合の表示です。
$ which ls[tab]

ls        lsdistcc  lsm       lsof      
lsbom     lslen.sh  lsmac     lsvfs
$ which ls
ここで、表示を見ながら入力を継続したり、例えば"v[tab]"と入力すると、lsvfsまで補完
してくれます。
$ which lsv[tab] # tabキーを押した瞬間、次の行のように表示されます。
$ which lsvfs
ファイル名を探す場合より、入力を結構便利です。
長くなったのでこのあたりで終わります。また、関連した話題を書きたいとおもいます。

2012年9月29日土曜日

新しいMacを買いましたが

自分のではなく、家族のMacです。
家族のノートPCが壊れたのですが、折よくヨドバシカメラでMacを買うと古いWindows機の下取りに2万円上乗せしてくれるというキャンペーンをやっているのを今週半ばに知りました。この際なので、家族をMacユーザに(再度)することにしました。
今日(9月29日)がキャンペーンの最終日ということで、在庫があまりないとのことでしたが、MacBook Air 13 (Core i5 1.8GHz, 128GB SDD)を購入することができました。ちょっとうらやましい。
ちなみに、古いノートPCがもう一台あったので、自分のMac miniもそのキャンペーンに乗って買おうかと思っていたのですが、在庫がないとのことで購入できませんでした。
また、キャンペーンは9月2日から始まっていたのに、ずっと知らなかったという自分の情報収集力の低さも反省ですね。

2012年9月22日土曜日

ターミナルから無圧縮ZIPファイルを作る

少し前の記事で、Automatorでシェルスクリプトを実行するという内容の記事がありましたが、無圧縮ZIPファイルをどのようなコマンドで作っているか書いていませんでした。その記事へのアクセスが結構多いようですので、実際にZIPファイルを作っている部分を書いてみます。エラーチェック等は省略して、肝心の部分は以下のような感じになっています。

zip -r -n ".jpg:.JPG:.jpeg:.JPEG:.gif:.GIF" "$zipf" "$zipd" -x ".DS_Store"

-r オプションは、ZIPの入力ファイルにディレクトリがある場合、再帰的にたどっていくことを指示します。
-n オプションは、引数として与えられた拡張子を持つファイルを、圧縮しないように指示します。tiffやpngも入れてもいいかもしれません。大文字小文字の違いを無視できればよいのですが、ちょっと冗長になっています。私は、テキストファイルなどは圧縮したいので、このオプションを使っています。
-nオプションの代わりに、-0オプションを使えばすべてのファイルが無圧縮になります。-# (#は0から9の数字が入ります)の形式のオプションは、圧縮スピードを相対的に指定するのですが、-0は無圧縮の指定になっています。-0の方が無圧縮ファイル作成の目的に合う人はこちらの方がよいと思います。
$zipfは、作成するZIPファイル名が入った変数です。
$zipdは、作成対象のディレクトリ名が入った変数です。両方共ダブルクォーテーションで囲んであるのは、文字列中にスペースがあるとシェルが別々の引数として処理するため、予防的に入れています。
最後の-xオプションは、ZIPの対象としないファイルを指定します。.DS_StoreはFinderが不可視ファイルとして作る場合がありますが、今回はZIPファイルに含める必要はないため除外するようにしています。

zipコマンドの詳細はターミナルからmanコマンドで調べることもできます。

2012年9月18日火曜日

Spirited Awayで集中。便利です。

Spirited Awayというアプリケーションを使っていますが意外と便利です。だいぶ前の、2chのおすすめアプリ紹介で知りました。Spirited Awayとは神隠しという意味らしいです。

機能ですが、起動しているアプリケーションが設定している時間操作されないと自動的にそれを隠してくれる(command + Hと同じ)というものです。
何がいいかというと、

  • 今やっている作業(Wordやエディタでのドキュメント作成でも、ウェブ検索でも)に集中できる点
  • 意図的に他のアプリケーションを隠す操作をしなくても自然に使える点
  • しばらく席を外したりしていると、デスクトップピクチャやNerdToolで設定した内容が見えるようになる点

などです。以前は、すぐにブラウザに目が行って必要もないのにニュースを見たりすることがありました。また、デスクトップピクチャもお気に入りのものがランダムに変わるようにしたりしていますが、以前はいろいろなアプリケーションでデスクトップは大体隠されていて、あまり見えなかったのですがよく見えるようになりました。
デスクトップが見えるようになると、逆にデスクトップにアイコンを置きたくなくなりました。スクリーンショットも生成場所を変更し、ディスクボリュームも表示しないようにしています。Finderで不可視ファイルを表示するようにしていますが、Desktopフォルダに何も作られないので .DS_Store ファイルもできなくなりました。

良くない点としては、隠れていたアプリケーションを表示した時に、すぐにまた隠れてしまい、もう一度表示しないといけない場合があります。

どちらでもない点としては、隠れているアプリケーションを呼び出すために、Quicksilverやcommand + tabキーの出番が増えたことが挙げられます。私にとっては、キーボード操作の方が好きなので良い点かもしれません。

現在は、隠す時間を10分にしています。あまり間隔が短いとそれも気になりますので。