Linuxユーザの立場から、役立つ情報や困ったときの解決方法を分かりやすく、かつ簡潔に記事にまとめています。主に、Ubuntu 8.04(→9.04)やCentOS 5.2(→5.3)で確認したことですが、他のディストリビューションでも応用できると思います。内容は(1)設定ファイルの書き方(2)役立つソフトウェア紹介やインストール方法(3)便利なコマンドの使い方や活用例(4)困ったときの解決方法です。このページの末尾にキーワード別で記事を分類してあります。また、真上の「ブログ検索」フォームからブログ内の記事を検索できます。

2008年12月8日月曜日

暗号化ソフトGnuPGの導入 このエントリーを含むはてなブックマーク

本記事では、暗号化ソフトのGnuPGの導入と使い方をまとめる。

キーを生成する。

$ gpg --gen-key
対話的に質問がなされるので、答えていく。

鍵タイプの指定:RSA+ELGAMAL
有効期限:なし
個人情報:名前とメールアドレス
パスフレーズ:適当に設定

公開鍵の登録

次のコマンドで公開鍵をpublic.txtに書き出す。

$ gpg -o public.txt -a --export userid
PGP公開鍵サーバに先ほどの公開鍵を登録する。

公開鍵の登録

先ほどの、PGP公開鍵サーバから(登録したい人の)公開鍵を検索して取得する。

$ gpg --import public.txt

ファイルを暗号化・復号化する。

$ gpg -e before.txt
$ gpg -d after.txt.gpg

Enigmailのインストール

Thunderbirdでgnupgを使えるように、Enigmailをインストールする。synapticから enigmailとenigmail-locale-jaをインストールする。 参考サイト:MacOSXでGnuPGを使おう」、「GNU Privacy Guard講座

2008年12月3日水曜日

PDFファイルからテキストを抽出する このエントリーを含むはてなブックマーク

本記事では、ubuntu8.04でPDFファイルからテキストを抽出するコマンドpdftotextをセットアップする方法についてまとめる。

pdftotext:はPDFファイルからテキストを抽出するツールである。(PDFファイルviewerの)xpdfパッケージに含まれている。しかし、何もしないままで実行すると、

$ pdftotext a.pdf a.txt
Error: Unknown character collection 'Adobe-Japan1'
Error: Unknown character collection 'Adobe-Japan1'
Error: Unknown character collection 'Adobe-Japan1'
というエラーで怒られてしまう(a.pdfに日本語が含まれているときに)。「Unknown character collection 'Adobe-Japan1'」でネットを検索してみると解決法がいくつか紹介されているが、どれでやっても解決できなかった。

ネットで紹介されていた方法

(1)cmap-adobe-japan1とcmap-adobe-japan2を入手して、/usr/share/fonts/cmap/cmap-adobe-japan1およびcmap-adobe-japan2と配置する。(←ネットで入手したものは、もともと入っていたものより古いものだった。後で分かったことだが、入れ替える必要はなかった。)

(2)/etc/xpdfrc/xpdfrc-japaneseでそのフォントの場所を指定する。 書き込む内容は以下の通りである。

cidToUnicode    Adobe-Japan1    /usr/share/xpdf/japanese/Adobe-Japan1.cidToUnicode
unicodeMap      ISO-2022-JP     /usr/share/xpdf/japanese/ISO-2022-JP.unicodeMap
unicodeMap      EUC-JP          /usr/share/xpdf/japanese/EUC-JP.unicodeMap
unicodeMap      Shift-JIS       /usr/share/xpdf/japanese/Shift-JIS.unicodeMap
cMapDir         Adobe-Japan1    /usr/share/fonts/cmap/adobe-japan1
toUnicodeDir                    /usr/share/fonts/cmap/adobe-japan1

これをやった後で、再度実行したら

$ pdftotext a.pdf a.txt
Error: Unknown character collection 'Adobe-Japan1'
Error: Unknown character collection 'Adobe-Japan1'
Error: Unknown character collection 'Adobe-Japan1'
再び怒られた。

結局、設定が反映されていない。設定を明示的に反映するコマンドを実行する必要があるのだろうか?と考えたが、その必要はないようだ。ちなみに、pdftotextを実行したら

  • ホームディレクトリにある.xpdfrcを読み込む。
  • それがなければ、システムの設定ファイル(/etc/xpdf/xpdfrc)を読み込む。
となるとmanに書いてあった。設定は確かにAdobe-Japan1について書いてあるのになぜか反映されていない。

試行錯誤の後に分かったこと:xpdf-utilsパッケージをインストールしていなかったということだった!apt-getで入れてから、

$ pdftotext a.pdf a.txt
と実行すると、何もエラーがでずに実行できた。すなわち、結局必要だったことは、
  • xpdf-utilsをインストールすること
  • /etc/xpdf/xpdfrc-japaneseに再設定すること
の2つだけだったのだ。

2008年12月2日火曜日

全文検索エンジンnamazuを導入する。 このエントリーを含むはてなブックマーク

本記事では、ubuntu 8.04に全文検索エンジンnamazuを導入する方法をまとめる。

インストール

$ apt-get install namazu2 namazu2-index-tools libtext-kakasi-perl libnkf-perl

最初、 namazu2 namazu2-index-toolsだけをインストールしたら、mknmzコマンドを使ってインデックスを作成しているときに、Can't locate NKF.pmとかCan't locate Kakasi.pmなどと怒られた。

したがって、次の2つを追加インストールした。

libtext-kakasi-perl
libnkf-perl
これで、インデックスを作成できた。

インデックスの作成

検索を高速化するために、あらかじめ対象ディレクトリにあるファイルのインデックスを作成する。例えば、/usr/local/share/namazu/docにある文書のインデックスを作成するためには

$ mknmz /usr/local/share/namazu/doc
とすれば良い。mknmzを実行したときのディレクトリに、インデックスファイルが作成されます。

検索

作成したインデックスに対して、キーワードで検索をかけるには次のようにします。

$ namazu キーワード インデックスのあるディレクトリ

参考サイト:使ってみようNamazu 2.0

追記

PDFファイルを検索対象に含めるには、pdftotextが必要。デフォルトではうまく動かなかったので、設定が必要(「PDFファイルからテキストを抽出する」)。

また、TEXファイルを検索対象に含めるには、detexが必要。

$ sudo apt-get install texlive-extra-utils
これでdetexがインストールされる。

apt-cacheでインストール可能なパッケージを探す。 このエントリーを含むはてなブックマーク

本記事では、apt-cacheコマンドでインストール可能なパッケージを探す方法についてまとめる。

apt-getコマンドでパッケージをインストールするときは、パッケージ名をあらかじめ知っておかなければならない。そのためにはapt-cacheコマンドを使うと良い。

キーワードに該当するパッケージの一覧を取得するには

$ sudo apt-cache search キーワード
とすれば良い。例えば、firefoxに該当するパッケージ一覧は次のように取得する。
$ sudo apt-cache search firefox
kubuntu-docs - kubuntu documentation
totem-mozilla - Totem Mozilla plugin
ubufox - Ubuntu Firefox specific configuration defaults and apt support
などなど

パッケージの情報を取得するには:ubufoxというパッケージの情報は次のように取得する。

$ sudo apt-cache show ubufox
Package: ubufox
Priority: optional
Section: web
Installed-Size: 220
Maintainer: Alexander Sack 
Architecture: all
Version: 0.5-0ubuntu1
Depends: apturl (>= 0.1.2ubuntu1), firefox | firefox-3.0 | firefox-2
Filename: pool/main/u/ubufox/ubufox_0.5-0ubuntu1_all.deb
Size: 40448
MD5sum: 2e0fead039392af9fcd66fa296c14514
SHA1: 3e67f904ff9be7b29004771b09d5d8a4627284aa
SHA256: 0e74ed358b74e52de3119f7364935b0f73c681f644c09d0e4d2319649071f807
Description: Ubuntu Firefox specific configuration defaults and apt support
 Extension package for Firefox provides ubuntu specific configuration defaults
 as well as apt support for firefox plugins/extensions.
 .
 You can uninstall this package if you prefer to use a pristine firefox
 install.
Bugs: mailto:ubuntu-users@lists.ubuntu.com
Origin: Ubuntu
Task: ubuntu-desktop, edubuntu-desktop, xubuntu-desktop

インストールするには

$ sudo apt-get install ubufox

cutコマンドの基本的な使い方とその応用 このエントリーを含むはてなブックマーク

本記事では、linuxのcutコマンドの基本的な使い方をまとめて、応用としてワーキングディレクトリにあるディレクトリの一覧を表示する方法を紹介する。

cutコマンドとは:各行から選択した部分を表示するものです。例えば、test.txtというファイルには、次のようにコロンで区切られたデータが列挙してあるとします。

aaa:bbb:ccc
ddd:eee:fff
ggg:hhh:iii

2番目のデータだけを表示したいときは次のようにします。

$ cut -f2 -d":" test.txt
bbb
eee
hhh

  • dオプションで、区切り文字を指定します。
  • fオプションで、データの番目を指定します。

注意事項:連続する空白文字を1つの区切り文字として扱うことができないので、注意が必要です。

例えば、

$ls -l
drwxr-xr-x  2 aaa bbb 4.0K 2008-10-29 12:16 dir1
drwxr-xr-x 22 aaa bbb 4.0K 2008-11-25 02:15 dir2
-rwx------  5 aaa bbb 4.0K 2008-12-02 15:53 file1
-rwx------  2 aaa bbb 4.0K 2008-12-02 20:19 file2
のときに、ディレクトリだけを表示させたいならば
$ls -l | grep ^d | cut -d" " -f8
でうまくいきそうですが、実際は
12:16
dir2
となってしまいます(ちなみに、grepの引数^dは先頭がdで始まる行だけを抜き出すことを意味しています)。

原因は、dir2以外は1番目と2番目のフィールドを区切っている空白文字が2個連続しているためです。したがって、1つ目の空白文字が区切り文字としてみなされて、連続する2つ目の空白文字は2番目のデータとみなされたわけです。

応用:連続する空白文字を1つの空白に置換して、(今いるディレクトリにある)ディレクトリだけの一覧を表示するには次のようにします。

$ ls -l  | sed -e 's/\s\{1,\}/ /g' -ne '/^d/p ' | cut -d' ' -f8 |  column -x

sedの使い方:sedの引数として引用符で囲まれた文字列を列挙すると、順番に評価されます。したがって、上のsedの部分のコマンドは

  1. 空白文字(\s)の一回以上の繰り返し(\{1,\})を1個のスペースで置換する。
  2. 先頭がdで始まる行だけを抜き出す
となります。2つ目の引用符で囲まれた文字列の前でnオプションを付けていますが、これは必要です。このオプションを付けなかったら、先頭がdでない行も出力されるからです。

columnの使い方:テキストを表形式に整形するコマンドです。ここでは標準入力からテキストを受け取っています。xオプションで縦方向でなく横方向に列挙するように指定しています。

補足

特定の列だけ取り出すにはgawkが便利です。上の例

$ls -l
drwxr-xr-x  2 aaa bbb 4.0K 2008-10-29 12:16 dir1
drwxr-xr-x 22 aaa bbb 4.0K 2008-11-25 02:15 dir2
-rwx------  5 aaa bbb 4.0K 2008-12-02 15:53 file1
-rwx------  2 aaa bbb 4.0K 2008-12-02 20:19 file2
で、ディレクトリの名前の列を出力するには
$ ls -l | awk '/^d/ {print $8}'
を実行すれば良い。これはスラッシュで囲まれた条件を満たす行に関して8列目だけを出力するコマンドである。

awkを応用したコマンドの例: ディレクトリの個数をカウントする。

$ ls -l | awk '/^d/ {print $8}'| wc -l

実行したコマンドの履歴から、使用頻度順にコマンドを表示する。

$ history | awk '{print $2}' | sort | uniq -c | sort -n

  • sort:行単位でソートする。nオプションをつけると、数値としてソートする。
  • uniq:重複した行を削除する。ただし、このコマンドの実行前にsortを実行しておかなければならない。cオプションをつけると、重複回数を行の先頭に付け加えて結果を出力する。
参考サイト:

キーワード

キーワード別に記事を分類してあります。クリックすると各キーワードに該当する記事たちが表示されます。

過去の記事

筆者について

自分の写真
趣味はコンピュータ、音楽、写真などです。