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

2008年12月29日月曜日

/etc/hostsは間違っているらしい。 このエントリーを含むはてなブックマーク

本記事では、ubuntu 8.04で/etc/hostsの誤りについてまとめる。

ホスト名とIPアドレスの対応が記述されている設定ファイル/etc/hostsで、 下のようにインストーラで指定したホスト名xxxxxxのIPアドレスが存在しないもの(127.0.1.1)を指定している。これにより一部のアプリケーションの動作が遅くなるらしい。

127.0.0.1 localhost
127.0.1.1 xxxxxx
 
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

解決方法は、二行目はコメントアウトして、1行目を

127.0.0.1 localhost xxxxxx
とすればよい。

参考サイト: Electronic Genome

2008年12月28日日曜日

Google検索テクニックの基本 このエントリーを含むはてなブックマーク

本記事では、Google検索テクニックの基本を簡単にまとめる。

世の中には膨大な量のwebサイトがあり、その中から知りたい情報にたどりつくことには困難が伴う。単にキーワードを列挙するだけでは検索結果に多くのノイズが含まれてしまうため、キーワードの列挙以上の検索テクニックを知っておくことは便利であるし、効率的でもある。ゆえに、以下ではいくつかの基本的な検索テクニックをまとめる。

フレーズ検索

「Operation not permitted」などのエラーメッセージに関する情報をWebで調査したいときに、Googleの検索ボックスにそのまま入れると各単語のつながりが考慮されなくて適切でないことがある。

その場合は、

"Operation not permitted"
のように二重引用符でまとめると良い。

ブール演算

複数の単語を列挙した場合、デフォルトではそれらをすべて含むWebサイトが検索結果になります。

例) 「google hack 」

google AND hack
と同じです。ANDは大文字です。

同じようにORを使うこともできます。ORは大文字です。

例)

google (ハック OR  hack)
ORの代わりに「|」(パイプ)を使うこともできます。
google (ハック | hack)

マイナス検索

google (ハック OR hack)
で検索すると、オライリーの同名の書籍が検索結果に多く含まれるでしょう。

しかし、書籍でなくWebサイトに書かれている情報に興味がある場合は、

google (ハック OR hack) -オライリー
とすれば、多くの不要な情報は除去できます。マイナスとキーワードの間にはスペースを入れないでください。

もちろん除去されたいくつかの情報は有益なものかもしれませんから、除去するキーワードは適切に選択する必要があります。

類義語

類義語を使った検索もできます。

google ~ハック
のようにハックの先頭にチルダを付けると、ハックの類義語も含めて検索されます。

チルダとキーワードの間にはスペースを入れないでください。

ワイルドカード

フレーズの中の単語を任意にしたいときは「*」(アスタリスク)を使います。

"linux * ~howto"
で検索すると、The Linux BootPrompt-HowTo, Linux Networking HowTo, Linux NFS-HOWTOなどlinuxに関する各種howto文書がヒットします。

その他のチップス

  • キーワードは大文字でも小文字でも区別されません。
  • キーワードは最大31語までが有効です。それ以降はすべて無視されます。 ただし、ワイルドカードは1語にカウントされません。
  • 同じキーワードを複数列挙すると、重み付けされる。 例)
    linux ubuntu ubuntu howto
    

特別構文

  • intitle:キーワード キーワードの含まれるタイトルを持ったサイト 例)
    intitle:"linux * howto"
    
  • allintitle:キーワードたち 列挙したすべてのキーワードを含むタイトルを持ったサイト 例)
    allintitle: linux network howto
    
  • inanchor:キーワード キーワードを含むリンクアンカーを持ったサイト 例)
    inanchor:"linux * howto"
    
  • allinanchor:キーワードたち すべてのキーワードを含むリンクアンカーを持ったサイト
  • site:ドメイン 指定したドメイン内に限定して検索 例)
    "google (ハック OR hack)" site:jp
    
  • inurl:キーワード キーワードを含むURLを持ったサイト 例)
    inurl:google
    
  • allinurl:キーワードたち すべてのキーワードを含むURLを持ったサイト 例)
    allinurl:google hack
    
  • link:URL 指定したURLにリンクしているサイト 例)
    link:www.google.co.jp/
    
  • filetype:拡張子 指定した拡張子を持ったファイルを検索 例)
    google hack filetype:pdf
    
注意:allのつく構文は、他の構文と組み合わせて使うことはできません。単独で使ってください。

英語のページだけを検索

英語で書かれたページだけを対象に検索したいときには、URLの末尾に

&hl=en&lr=lang_en
を付け加えます。

例えば、「google」というキーワードで検索したとき、次のようなURLで検索されていました。

http://www.google.co.jp/search?hl=ja&lr=&rlz=1G1GGLQ_JAJP294&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=google&spell=1

このURLの末尾に先ほどのキーワードを追加します。

http://www.google.co.jp/search?hl=ja&lr=&rlz=1G1GGLQ_JAJP294&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=google&spell=1&hl=en&lr=lang_en

ちなみに、アンド記号(&)はキーワードをつなげるときの結合子のような役割があります。

  • hl=en   検索結果のページの表示言語を英語に指定
  • lr=lang_en   検索対象の言語を英語に指定
URLの前方に既にhl=jaなどと書かれていますが、後に書いた方が優先されます(今の場合ではhl=enが優先されます)。

参考文献: 「Google Hacks 第2版—プロが使うテクニック&ツール100選」Tara Calishain (著), Rael Dornfest (著)オライリージャパン 第2版 この本にはもっと面白いハックがたくさん載っています。

scimがCPUを占有 このエントリーを含むはてなブックマーク

本記事は、ubuntu 8.04でscimがCPUを占有してシステムが入力を受け付けなくなる現象についてまとめる。

原因とそれの(必要十分な)解決策がよく分かっていないから、 途中経過なども含めて多少冗長な内容でまとめている。 (ヒントになりそうな情報が漏れないように)

症状

ubuntu 8.04を入れているマシンで作業中に、突然動作が極端に遅くなった。 システムモニターで確認したところ、scim-bridgeのCPU占有率が極端に高くなっていた。 Ctrl-Alt-Delでログアウトして、再ログインするとgnomeの起動中にフリーズしてしまった。 自動起動してあったxosviewでは、CPU占有率が100%になっていた。

~/.xsession-errorsには

Start IM through /etc/X11/xinit/xinput.d/ja_JP linked to /etc/X11/xinit/xinput.d/scim-bridge.
XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0"
after 209 requests(70 known procesed) with 0 events remaining
と書かれていた。

調査

xtermを.xsessionrcで自動起動するように設定しておくと、gnomeの起動中でフリーズした際でも作業ができるので(gnome-terminalではプロンプトが現れなくて使えなかった)、

$ ps aux | less
でプロセスを確認してみると、scim-launcherとscim-bridgeがそれぞれ50%ほどの占有率だった。

ネットで調べてみると、次の2つの方法が見つかった。

  1. ~/.anthy/last-record2_defaultの末尾の行を削除する(あるいはこのファイル自体を削除する) このファイルはかな漢字の変換の履歴を保持するファイルらしい。
  2. /tmp以下のディレクトリおよびファイルをすべて削除する

方法

2の方法を最初にやってみると、途中でフリーズせずにgnomeが完全に立ち上がったが、その後に作業しているとscimのCPU占有率が100%ほどになった。したがって、1の方法で、~/.anthy/last-record2_default.utf2の末尾の行を削除してみた。

すると次からはCPU占有率が極端に高くなることはなくなった。 しかし、上で試行錯誤しているときにシステムモニタでCPUを占有していたscim-launcherとscim-bridgeを停止させていたので、もしかしたらその効果もあるのかもしれない。。。

気になったこと

システムモニターで起動プロセスを確認してみると、二重あるいは三重で同じものが起動しているものが見られる。それらのプロセスは、上で出てきたscim-launcherやscim-bridge、他にはgconfd-2, scim-panel-gtk, scim-helper-manager, update-notifierがあった。 これらを複数起動する必要が分からない。

参考サイト:

2008年12月27日土曜日

Webブラウザのセキュリティを検査する。 このエントリーを含むはてなブックマーク

本記事では、Webブラウザのセキュリティに問題がないか検査する方法をまとめる。今回はITコンサルタント会社のscanit社が提供しているブラウザの安全性をオンラインで検査するサービスBrowser Security Testを利用する。

(注意)筆者はscanit社とは一切関係がありません。本記事はBrowser Security Testの簡単な説明をまとめていますが、正確性や安全性を保証するものではありません。利用の結果生じた損害について、一切責任を負いません。

注意事項を確認する。

ブラウザを立ち上げてBrowser Security Testに訪れる。次の注意事項が書かれています。

Careful! The test will try to crash your browser! Close all other browser windows before starting and bookmark this page. If your browser crashes during the test, restart it and return to this page. It will show which vulnerability crashed your browser and offer you to continue the test or view the results.

(訳:注意してください!このテストはあなたのブラウザをクラッシュさせようと試みるものです!テストを開始する前にブラウザの他のすべてのウィンドウを閉じてから、このページをブックマークしてください。テストの最中にブラウザがクラッシュしたら、ブラウザを再び立ち上げてこのページを訪れてください。すると、クラッシュした理由(脆弱性)が表示されるでしょう。そして、テストを続行するか結果を見るか尋ねます。)

下の写真のモザイクがほどこされた部分に、自分のOSやブラウザの情報が表示されていると思います。

テスト方法の選択

ラジオボタンでテスト方法を3種類のうちから1つ選択します。

テスト方法:

  1. Only test for bugs specific to my type of browser(訳:自分のブラウザに合ったテストだけ行う)
  2. Run all available tests(訳:利用できるすべてのテストを行う)
  3. Choose individual tests(訳:個別にテストを選択する)

以下では、2番目の「Run all available tests」を選択した場合を説明します。 ラジオボタンで選択した後に、熊のマークでStart the testと書かれた部分をクリックすると検査が始まります。

テスト中の注意事項

テストの進捗状況がレベルメータで表示されます。

「Quick Help」では、次の2つの注意事項が説明されています。簡単に訳しておきます。

  1. Help! My anti-virus says there is a virus! アンチウィルスソフトがウィルスを発見したと警告した場合: アンチウィルスソフトが正常に動作しているだけです。アンチウィルスソフトは、テストが試みている活動を検知して、それを警告しています。検知されたウィルスは、テストされているブラウザの脆弱性を利用する悪意のあるソフトウェアです。しかし、同じ脆弱性を利用していることを除いて、Browser Security Testとそのウィルスとはまったく関係がありません。このテストはトロヤの木馬をインストールしませんし、ウィルスを感染させようともしません。
  2. What do I do if my browser crashes? もしブラウザがクラッシュした場合: ブラウザを再び立ち上げてください。もしセッションを再開するか、あるいは新規セッションで開始するかブラウザに尋ねられたならば、「Start new session(新規セッションで始める)」あるいは「Start with blank page(白紙のページで始める)」を選択してください。Browser Testのホームページ(http://bcheck.scanit.be:80/bcheck/)を訪れてください。テストの中間結果が表示されます。そして、テストを継続することができます。

テスト結果

下のように検査項目ごとに結果が表示されます。緑色のチェックマークは、その検査が問題なかったことを表しているようです。そして、最後の行に「Congratulations! The test has found no vulnerabilities in your browser!(訳:おめでとうございます!あなたのブラウザにはいかなる脆弱性も見つけられませんでした。)」と書かれていたら、問題ないということでしょう。

2008年12月25日木曜日

Firefoxで英単語の意味を素早く調べる方法 このエントリーを含むはてなブックマーク

本記事では、WebブラウザのFirefoxで英単語の意味を素早く調べる方法をまとめる。

その方法とは、Firefoxの拡張機能GreasemonkeyとFast look up JP and ENというユーザスクリプトを使って、goo辞書などのWebサービスを素早く利用するものです。Greasemonkeyとは、

Greasemonkey(グリースモンキー)とは、Mozilla FirefoxおよびSongbird用の拡張機能。後述のユーザスクリプト形式に従ったJavaScriptを組み合わせて、ウェブページ閲覧時にを実行することができる。

from Wikipedia
というものです。

セットアップの手順を説明します。

(1)Firefox AddonからGreasemonkeyを探して、インストールします。

(2)userscript.orgからFast look up JP and ENを探して、インストールします。 インストール後、ブラウザを再起動します。

(3)ブラウザのステータスバーの右端にある猿のアイコン(下写真)を右クリックして、Fast look up JP and ENを有効化します。

(4)Fast look up JP and ENの設定を行うには、Alt-y (Altキーを押しながら、yを押すこと) すると、次のようなウィンドウが画面に現れる。 サービス一覧の中から、使用するものをクリックで選択する。×印は、そのサービスで利用できないことを意味する。○印のところから、使用するものを選ぶ。 選択すると、数字に変わる。これはサービスを使用する順番を意味している。

ウィンドウをスクロールすると、Settingという欄が現れる。そこで、Fast look up JP and ENを使うときのショートカットキーなどを設定できる。 デフォルトでは、

  • Altキーを押して、単語を選択 → 検索結果(単語の意味)がポップアップされる。
  • クリック → ポップアップされたウィンドウを閉じる。
  • y → 検索ウィンドウを表示(ここに入力することで、検索できる)
  • Alt-y → 設定ウィンドウを表示
  • Esc → (Fast look up JP and ENの)すべてのウィンドウを閉じる。
となっている。私は次のように変更した。
  • Ctrlキーを押して、単語を選択 → 検索結果がポップアップ。私の環境では、Altキーを押して、単語を選択してもポップアップウィンドウは現れなかったから。
  • y → 検索ウィンドウを表示。無効にした(設定欄に何も入力せず)。
  • Ctrl-c → すべてのウィンドウを閉じる。
(注意)設定後にはブラウザを再起動した方が良いです。再起動していないと異なるタブでは設定が反映されていなかったりしていました。

スクリーンショット

次の写真は、英単語の意味をポップアップ表示した場合のスクリーンショットです。ショートカットキーを使って、操作することに慣れている人にはとても使いやすい機能だと思います。

2008年12月23日火曜日

ftpプロキシ経由でファイル転送 このエントリーを含むはてなブックマーク

この概要は表示できません。投稿を閲覧するには ここをクリック してください。

2008年12月21日日曜日

ファイアーウォールを導入する。 このエントリーを含むはてなブックマーク

本記事では、ubuntu8.04にファイアーウォールを導入する方法をまとめます。

ポートを開いてサービスを提供する場合などに、そのポートからの不正アクセスを 防ぐためにファイアーウォールが必要になります。

そこでiptablesを用いるわけですが、デフォルトで設定が何もされていません。 firestarterというGUIによる設定ツールがあるので、これをsynapticからインストール して設定しました。

インストール後に実行してみると。。。

インストール後に、

$ gksudo firestarter &
で、起動する。最初はウィザードが立ち上がるので、質問に答える。

しかし、起動してみると次のようなエラーが出てしまう。 設定ファイルを少し修正する必要があるようです。

設定ファイルの修正

まず、firestarterを閉じます。スクリプトファイル

/etc/firestarter/firestarter.sh
をroot権限で編集します。emacsで編集する場合は次を実行します。
$ gksudo emacs /etc/firestarter/firestarter.sh
下の写真で赤丸で囲んであるところはデフォルトでMasと書かれていると思うので、そこを写真のようにinetと書きます。その後、この設定ファイルを保存して閉じます。

許可するホストの設定

基本的にはすべて拒否しておいて、個別的に許可するものを付け加えることにします。 「ポリシー」の「受信側のトラフィックのポリシー」にて、 localhost.localdomainの接続だけ許可しておきます。

ファイアーウォールを動作させる。

次の写真のようにファイアーフォールの状態が「無効です」と書かれていたら、 ファイアーウォールは動作していません。 赤丸で囲んだところ(「起動」と書かれている)をクリックして、ファイアーウォールを起動させます。

うまく起動すれば次の写真のように、ファイアーウォールの状態は「有効です」と表示される。 ファイアーウォールを停止させたいときは、赤丸で囲んだところ(「停止」と書かれている)をクリックします。

参照:

不要なポートが開いていないか確認する。 このエントリーを含むはてなブックマーク

本記事では、Ubuntu8.04で不要なポートが開いていないか確認する方法をまとめる。

Ubuntu 8.04では:デフォルトでポートはすべて閉じられているらしい。しかし、追加でアプリをインストールした場合に、ポートが開かれることがある(外部にサービスを提供するアプリなど)。firewallソフトのiptablesは何も設定されていない状態なので、気づかないうちにポートが開いたままになっていたら危険です。したがって、開いているポートがないかチェックする必要があります。そのために、nmapというアプリを使います。これはsynapticからインストールできます。

使い方

$ nmap localhost -sV
のように実行します。 (注意)このコマンドは他者のマシンに対して実行しないでください。 他者のマシンに不正アクセスを試みているとみなされるかもしれませんから。 あくまで、自分のマシンに対してチェックのためにだけ使用してください。

実行結果の例

2008年12月20日土曜日

マルウェア駆除ツールの導入 このエントリーを含むはてなブックマーク

本記事では、ubuntuにマルウェア駆除ツールchkrootkitとrootkit hunterを導入する方法と使い方をまとめる。

「ルートキット(rootkitあるいはroot kit)はコンピュータシステムへのアクセスを確保したあとで第三者(通常は侵入者)によって使用されるソフトウェアツールのセットである。」

from wikipedia
chkrootkitrootkit hunterは、さまざまな方法でシステムの整合性をチェックするツールです。それぞれsynapticからインストールできます。

使い方: chkrootkitはただコマンド名を打ち込むだけです。

$ chkrootkit

rootkit hunterはデータファイルを更新するために

$ rkhunter --update
を定期的に実行する必要があります。そして、チェックを実行するには次のようにします。
$rkhunter --check

参照:

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オプションをつけると、重複回数を行の先頭に付け加えて結果を出力する。
参考サイト:

2008年11月25日火曜日

複数のアカウントからメールを一括で収集する このエントリーを含むはてなブックマーク

本記事では、複数のメールアカウントからメールを一括で収集するツールであるfetchmailの使い方についてまとめる。

まず、fetchmailをインストールする。

$ sudo apt-get install fetchmail

次に、ホームディレクトリに設定ファイル.fetchmailrcを作成する。この設定は、gmailだけからメールを取得する設定になっている。追加でサーバがあれば、同じような書式で末尾に書き込めばよい。

(注意)gmailでPOP接続する場合は、事前にgmailの設定でPOP接続ができるように変更しておくこと。

これで、fetchmailを実行する。

$ fetchmail -v
(vオプションは、結果の詳細表示。必要なければ省いてよい) うまくいけば、次のファイル
/var/mail/Ubuntuのユーザ名
にmbox形式でメールが格納される。

ちなみに、procmailを用いて適当な場所に配送した場合に、mbox形式ではなく Maildir形式で配送された。Thunderbirdはmbox形式に対応しているので、うまく いかなかった。

fetchmailをバックグランドで走らせて、定期的にサーバにポーリングさせるモード (デーモンモード)ができるが、私は必要なときに手動で実行している。

2008年11月23日日曜日

壁紙をランダムに変更するスクリプト このエントリーを含むはてなブックマーク

本記事では、Ubuntuで壁紙をランダムに変更するスクリプトを紹介する。

このスクリプトは、Ubuntuでなくても、gnomeをウィンドウマネージャとして使っているならば利用できる(Ubuntuでgnomeを使っていなかったら使えない)。

設定

スクリプトを実行する前に、画像ファイルを置くためのディレクトリの作成が必要です。 ~/picsにジャンル別に画像ファイルを入れるディレクトリを作成しておきます。下の例では、cat, nature, airplane, carの4つのディレクトリを作成しています。それらのディレクトリの下にさらにサブディレクトリを作成してもOKです。ディレクトリの名前は任意です。

$ cd ~/pics
$ ls
cat  nature  airplane  car
$ cd nature
$ ls
liver mountain sea foreast
ちなみに、~/picsを別のディレクトリにしたいときは、下のスクリプトの$dirを編集すればOKです。

処理内容

スクリプトを実行すると、~/pics以下のディレクトリをランダムに下って行き、jpg形式の画像ファイルをランダムに選んで壁紙に設定します。

使用方法

スクリプトファイルの名称(任意に指定して良い)をchwpaper.plにするとき、まず実行可能ファイルにする。

$ chmod u+x chwpaper.pl

そして、実行する。

$ ./chwpaper.pl

背景画像を指定したいときは、スクリプトを実行する場所からの相対PATHあるいは絶対PATHで画像ファイルを指定します。

$ ./chwpaper.pl   goo/foo/boo/hoge.jpg

gcongtool-2の説明

壁紙の設定は、gconftool-2で行っている。2つ目のgconftool-2では、壁紙の貼り付け方を設定している。貼り付け方は、

  • scaled(等幅サイズ変更)、
  • stretched(フルスクリーン)、
  • centered(中央に配置)、
  • wallpaper(サイズ均等、並べて表示)
の4通りから選べる。

#!/usr/bin/perl -w
#Usage: $ chwpaper.pl
use strict;
use Cwd;

my $wd=Cwd::getcwd();
my $dir = "$ENV{HOME}/pics";
$dir=$1 if $dir =~ m!(.+)\/$!;
chdir $dir or die "cannot chdir $dir: $!";

while (1) {
        my @dirlist;
        foreach (<*>) {
                push @dirlist, $_  if -d $_;
        }
        last unless $#dirlist >= 0;

    # Note:     
        # 0 <= rand($#dirlist) <= $#dirlist
        # $#dirlist = the length -1
        $dir = "$dir" . "/" . "$dirlist[int(rand($#dirlist))]";
        chdir $dir or die "cannot chdir $dir: $!";
}

my @imglist=<*.jpg>;
die "picture not found: $!" unless ($#imglist >= 0);
my $img=$imglist[int(rand($#imglist))];
my $path_img=$dir . "/" . $img;
# Overwrite selected_img if specified.
if ($#ARGV == 0) {
        $_=$ARGV[0];
        unless (-e $_) {
                $_ = $wd . "/" . $ARGV[0];
                die "File not found: $ARGV[0]" unless -e $_;
        }

         $path_img=$_;
         $img=$1 if m!([^\/]*)$!;
}

print "\n$img\n";
system "gconftool-2 --type string --set '/desktop/gnome/background/picture_filename'  \"$path_img\" ";
system "gconftool-2 --type string --set '/desktop/gnome/background/picture_options' stretched";

チップス

~/.bashrcにこのスクリプトを記述しておくと、端末を起動する度にこの壁紙をランダムに変更することができる。 例えば、/usr/local/binにこのスクリプトを置いておくとすると、次の1行を~/.bashrcの末尾に挿入すれば良い。
/usr/local/bin/chwpaper.pl
また、fortuneをインストールし、同じように~/.bashrcに記述すると、端末を起動する度に気の利いた言葉がランダムに表示されるようになる。
# apt-get install fortune-mod  <---インストール

次のように.bashrcに記述する。

/usr/games/fortune
/usr/local/bin/chwpaper.pl

はてなブックマーク、はてなスターを追加する このエントリーを含むはてなブックマーク

本記事では、「はてなブックマーク」と「はてなスター」アイコンを投稿記事タイトルの横に追加する方法をまとめる。

どちらもはてなの提供するサービスで、「はてなブックマーク」:ソーシャルブックマークの一種。ネット上でブックマークを整理して、人気のブックマークをチェックする。「はてなスター」:ブログに星マークを設置しておいて、気に入ってくれた読者にクリックしてもらう。

bloggerは、以前にテンプレートを記述するコードの書式が変わったらしい。したがって、変更前を旧blogger、変更後を新bloggerなどと ネット上で言われているようだ。今回追加する機能は、テンプレートにコードを埋め込むことで実現されるのだが、旧blogger対応の埋め込み方の情報が 多くて、新blogger対応の方法があまりなかった。

以下では、「はてなブックマーク」ボタンの追加方法を簡単にまとめる。ちなみに、「はてなスター」の方は、「はてなスター」→「ヘルプ」でbloggerの対処法の通りにすれば出来たので、ここでは説明しない。

  • bloggerの管理画面で「レイアウト」→「HTMLの編集」に移動する。
  • 「ウィジェットのテンプレートを展開する」をクリックする。
  • h3タグを探す(下図)。

(注意)私の使用しているテンプレートでは、h3タグが投稿記事のタイトル(post-title)に対応するタグになっているが、他のテンプレートでは異なるかもしれない。。。

  • h3タグの中にはてなブックマークのコードを挿入する(上および下図)。

2008年11月22日土曜日

bloggerにトラックバック機能を追加 このエントリーを含むはてなブックマーク

本記事では、ブログにトラックバック機能を追加する方法をまとめる。

トラックバックとは、お気に入りのブログの記事をリンクするときに、リンクしたことをブログに通知する機能のことである。ブログは、この通知(トラックバックピング)を受け取り、リンク一覧をブログに表示する。

bloggerには、トラックバック機能がついてないので、haloscanというサービスを使ってトラックバック機能を追加する。今回は合わせてrating機能とコメント機能も一緒に追加する。コメント機能は、記事を読んだ人がコメントを書き込む機能で、rating機能は、記事 を星の数で評価する機能です。この記事を読んで良かったら、下のrating・コメント・トラックバック機能など使って見てください。

それでは説明します。haloscan.comに行ってサインインする(ユーザ登録が必要)。

「Install」タブを選択すると、下の図のような画面になる。

  1. 利用しているブログサービスを選択する。
  2. Nextをクリックする。

以下の手順で、現在bloggerで使っているテンプレートをhaloscanにアップロードする。 

  1. 「Click here to login your Blogger account」というところをクリックして、bloggerにログインする。
  2. トラックバック機能を追加したいブログの管理画面で「レイアウト」タブをクリックする。
  3. 「HTMLの編集」を選択する。
  4. 「テンプレートをすべてダウンロード」をクリックして、適当な場所にダウンロードする。
  5. 下の図の「Upload your Blogger template here:」という欄の「参照」をクリックして、先ほどダウンロードしたテンプレートを選択する。
  6. 「Upload Bloger Template」をクリックすると、次の画面に進む。

アップロード

以下の手順に従い、先ほどアップロードしたテンプレートに新機能がインストールされたものをダウンロードして、それをbloggerにアップロードする。

  1. 「Download New Template」をクリックして、適当な場所に(機能の追加された)テンプレートをダウンロードする。
  2. bloggerの管理画面の「レイアウト」の「HTMLの編集」を選択する。
  3. 「次のハードドライブにあるファイルから、テンプレートをアップロードします」という欄にある、「参照」をクリックして、先ほどダウンロードしたテンプレートを選択して、「アップロード」をクリックする。これで、トラックバック機能を追加できました。次に、いくつか設定をします。

設定

時刻の設定: 「Setting」タブをクリックして、下の図の「Time Zone」欄で「(GMT+9:00 hours)Osaka, Sapporo, Seoul, Tokyo」を選択する(あなたが日本の時刻帯にいるのなら)。

文字コードの設定

「Character Encoding」欄で「UTF-8」を選択する。 これで設定は終わりました。

トラックバックピングの送信

上の手順で、自分のブログの記事に、(それを読んだ読者が)トラックバックをすることができます。ここでは、その逆に他者のブログの記事に自分がトラックバックする方法を説明します。そのためには、その他者のブログに「自分がリンクしているよ」ということを通知する必要があります。その通知はトラックバックピングと言われるものです。トラックバックピングは、先ほどのhaloscanの管理画面から送信することができます。その手順を以下で説明します。

  1. haloscanにサインインする。
  2. 「Manage Trackback」を選択する。
  3. 「Send a TrackbackPing」を選択する。すると、下の図の画面になる。
  4. 各項目に必要事項を入力する(すべて入力しなければならない)。各項目の意味は以下の通りである。

(注意)日本語を入力する場合は文字コードをUTF-8に指定する必要がある。そのために、あなたの使用しているブラウザのメニューバーで「文字エンコーディング」などという場所から文字コードを指定できると思う。

Your Blog Name
あなたのブログの名前
Your Blog Post Adress(Permaling URL)
最初はあなたのブログのトップページのURLが入力されていますが、 ここにはあなたの記事の個別ページのURLを入力します。つまり、他者のブログの記事(トラックバック先)と関連がある自分の記事(トラックバック元)のURLを入力します。
Your Blog Post Title
あたたの記事のタイトル
Your Blog Post Excerpt
あなたの記事の要約(簡潔に)
URL(s) to Ping
トラックバックピングの送信先URLの一覧。複数ある場合は、各行に1つのURLを入力する。

「Send Pings」をクリックする。

以上で、トラックバックピングの送信ができました。

2008年11月21日金曜日

一括で更新pingを打つスクリプト このエントリーを含むはてなブックマーク

本記事は、複数のpingサーバに一括で更新pingを打つスクリプトを紹介する。

ブログに記事を投稿した際に、それをpingサーバにping送信を行うことでブログの更新を知らせる。bloggerでは、pingの送り先はWeblogs.comだけなので、他のpingサーバに更新pingを送ることができない。そこで、更新pingを送るスクリプトをperlで作りました。

スクリプトの紹介

他の多くのサイトで同様のスクリプトが公開されていますが、私はプロキシ経由でネットに接続しているので、プロキシの指定が別途必要になります。といっても、大したことは何もしないのですが、プロキシ指定をしたスクリプトは次のようになります。

このように、「あなたの使用しているプロキシ」のところにプロキシを指定します。そして、@pingserverに更新pingを送りたいサーバを列挙します。ここでは、例としてpingooとかblogpeopleなどいくつかのpingサーバを書いてあります。そして、「あなたのブログの名前」と「あなたのブログのURL」をそれぞれ指定します。これで、スクリプトは完成です。

ちなみに、プロキシを使わない場合のスクリプトは次のようになります。

XMLRPC::Liteモジュールのインストール

上で紹介したスクリプトでは、XMLRPC::Liteモジュールを使用しています。このモジュールをインストールするには、以前の記事「CPANの設定」に従ってCPANの初期設定を行います。そして、次の手順でモジュールをインストールします。

cpanを起動します。

$ cpan

XMLRPC::Liteをインストールします。

cpan> install XMLRPC::Lite

cpanを終了します。

cpan> quit

スクリプトの実行

上で紹介したスクリプトをテキストファイルに書きます。そのファイル名を簡単のためblgping.plとして、ホームディレクトリの下のbinに置いておきます。

$ mv ~/bin
$ ls
blgping.pl
$ chmod u+x blgping.pl ←ファイルの所有者に実行可能権限を与えます。

以上で、blgping.plを実行できるようになります。ちなみに、~/binにPATHを通しておけば、どこからでもそのスクリプトファイルを実行できるようになるので、便利です。

無料のウィルス対策ソフトを導入 このエントリーを含むはてなブックマーク

本記事では、Ubuntuへの無料のウィルス対策ソフトの導入と、使い方を簡単にまとめます。

今回、導入した対策ソフトは

の2つです。

ライセンスキー

Webサイトからユーザ登録をして、ライセンスキーを取得します。

パッケージ

AVGはここから、パッケージ(avg75fld-r51-a1243.i386.deb)をダウンロードする。 avast!はここから、パッケージ(avast4workstation_1.0.8-2_i386.deb)をダウンロードする。

インストール

AVGのインストール

$ dpkg -i   avg75fld-r51-a1243.i386.deb
avast!のインストール
$ dpkg -i   avast4workstation_1.0.8-2_i386.deb

実行

コマンドラインでも実行できるようですが、ここではguiで起動してみる。 root権限で実行する必要があるので、gksudoを使う。なければ、synapticでインストールする。 (注:ubuntuではrootでログインできない) AVGの起動

$ gksudo avggui &
avast!の起動
$ gksudo avastgui &

所感

データベースのアップデートに時間がかかる(といっても数分だが)。最初、アップデートできないのかと勘違いしていたが放置しているとアップデートできたので、早とちりしないように!

2008年11月18日火曜日

CPANの設定 このエントリーを含むはてなブックマーク

本記事では、Perlのモジュールなどが集められているCPANを利用するための設定についてまとめる。

CPANを次のコマンドではじめて起動したときは、初期設定を行うモードになる。

$ perl -MCPAN -e shell

対話的に設定を行うのだが、通常ほとんどはデフォルトのままでよい。ちなみに、この設定はConfig.pmに書き込まれる。ただ、プロキシを経由してインターネットに接続している場合は、そのプロキシサーバを設定しなければならない。このとき、ftp_proxyとhttp_proxyを聞かれるが、どちらもhttp_proxyとして設定した。そうしないと設定に失敗してしまったから(原因不明)。

あと、初期設定のときに gzip, tar, unzip, make, lynx, wget, ncftpget ,ftp ,less, bash のパスを聞かれるので、あらかじめインストールしておく。

一通りの設定が済むと、

cpan>
というプロンプトが表示される。ここから、CPANにあるモジュールを簡単にインストールできる。
cpan> install SOAP::Lite
などとすれば良い。

一旦初期設定を行うと、次からはいきなりcpan>というプロンプトから始まる。再設定をしたいときは、一旦cpanを起動してから

cpan> o conf init
とすると良い。

2008年11月17日月曜日

パスワードでコンピュータを保護する。 このエントリーを含むはてなブックマーク

本記事では、BIOSとブートローダのパスワードを設定することの意味についてまとめる。

BIOSとはコンピュータの電源を投入したときに、最初に立ち上がる小さなシステムです。BIOSが立ち上がると、各種デバイス・周辺機器を初期化して利用可能な状態にする。そして、OSを起動するためのソフトであるブートローダに処理が渡されます。

ブートローダパスワード

OSの立ち上げを行うプログラムがブートローダである。ブートローダにはパラメータを与えることで、例えばシングルユーザモードでシステムを立ち上げることができる。このモードではパワードなしでrootにログインできる。したがって、ブートローダの設定を行えないようにパスワードで保護する必要がある。

BIOSパスワード

デフォルトでは、BIOSはHDDにあるOSを起動するが、設定することでCD-ROM、FDDなどにあるシステムを起 動することもできる。すなわち、デバイスの優先順位を設定により変更できる。こういった設定を誰でもできないようにパスワードで保護することが必要であ る。なぜなら、外部デバイスから起動して、システムにレスキューモードやシングルモードで入り込まれる危険性があるからである。

注意: BIOSパスワードは、内臓バックアップ電池を取り外して数日放置しておけば解除されるようです。ですから、最終的にはハードウェアを容易に触られないように保管することが肝心です。

参考:「Red Hat Enterprise Linux4:セキュリティガイド

パーティション分割 このエントリーを含むはてなブックマーク

本記事では、linuxをインストールするときのパーティション分割についてまとめる。

パーティションとは、物理的なハードディスクをいくつかの仮想的なドライブに分割することをいう。システム領域とユーザ領域を異なるパーティションに格納するなどのように、領域の用途に応じてパーティションを使い分けることが多い。

パーティションを使い分ける利点は、バックアップをとる際にユーザ領域などのあるパーティションだけをバックアップをとれば良いように分けておくと便利である。また、カーネルを格納するシステム起動用のパーティションを単独で用意しておくと、システム領域などに障害が起きても最悪起動して復旧することができる。

[サーバ用途でのパーティション分割例]
/boot       100MB                起動用
/usr          8GB    アプリケーション用
/var          6GB        ログファイル、サーバなど用
/           300MB            システム用  <--- 少ないので数百MB増やす。
/opt          7GB                  予備
swap        256MB              スワップ
/home  残りすべて              ユーザ用 

漢字コードと改行コード このエントリーを含むはてなブックマーク

本記事では、漢字コードを変換するツールnkfの使い方についてまとめる。

コンピュータでは、文字は数値として内部で処理されている。日本語の漢字やひらがな、カタカナなど全角文字の数値表現は、jisコード、EUCコード、Shift-jisコード、UTFコードなど複数の種類の表現方法がある。したがって、たとえばEUCコードで文字を扱っているシステムで、UTFコードで書かれたテキストファイルを読もうとすると文字化けが起きて、ただしく表示されないことがある。ゆえに、システムで扱っている漢字コードと異なるコードで表現されたテキストファイルを読むためには、適切な漢字コードに変換する必要がある。

通常のテキストファイルは、文字の並び(文字列)として表現される。この文字としては、漢字やひらがななどの目に見える文字だけでなく、空白文字やタブ文字、改行文字などが含まれる。改行文字は、「その文字が置かれた位置から、改行して表示せよ」という意味を持った文字である。この改行文字は漢字コードのときと同じようにいくつかの種類がある。それらは、Unix改行形式、Windows改行形式、macintosh改行形式である。したがって、windows改行形式で書かれたテキストファイルをunixで読むために、unix改行形式に変換しなければならないことがある。

以下に、nkfコマンドの書式、オプションの一覧、使用例をまとめる。

[書式]
$ nkf オプション ファイル名 > 出力ファイル名

[オプション]
次のオプションで漢字コードを指定する。
j       Jis(ISO-2022-JP)コード
e     EUCコード
s     Shift-jisコード
w    UTF-8コード

次のオプションで改行コードを変換する。
Lu    Unix改行形式(LF)に変換
Lw   Windows改行形式(CR/LF)に変換
Lm    Macintosh改行形式(CR)に変換

その他
g    どの漢字コードで表現されたテキストファイルか推測する。

[使用例]
(1)漢字コードを推測する。
$ nkf -g  input.txt

(2)EUCコードに変換する。
$ nkf -e  before.txt   > after.txt

(3)UTFコード、unix改行形式に変換する。
$ nkf -w -Lu before.txt  > after.txt

2008年10月27日月曜日

lessの文字化け このエントリーを含むはてなブックマーク

本記事では、ターミナルでlessで日本語の文字化け対策についてまとめる。

lessはファイルを読み込むためによく使うコマンドだが、デフォルトでは日本語のテキストは文字化けしてしまう。代わりにlvコマンドを使えば良い。

~/.bashrcに次の行

alias less='lv'
を挿入して、lessのエイリアスをlvとしておく。

こうすると、(代わりにlvが実行されるので)今まで通りlessと入力してファイルの閲覧ができる。

2008年10月26日日曜日

外付けHDDのパーティション・マウント・所有権の設定 このエントリーを含むはてなブックマーク

本記事では、Ubuntu 8.04の導入されたPCに外付けHDDをUSB接続して、パーティションを切り、マウントポイントの登録、一般ユーザがアクセスできるように所有権の変更など一連の作業をまとめる。

背景

私はUbuntuのバックアップを外付けHDDにとろうと思い、試したところうまくいかず試行錯誤を繰り替えしてしまった。その一番の原因は以下の通りであった。バックアップは、rsyncという同期をとるツールを使って自動的にバックアップをとる仕組みをスクリプトで書こうと試みた(本記事の末尾に、スクリプトの載せている)。

設定は、ノートPCにインストールしているUbuntuのhome, etc, var, usr/localといったディレクトリ以下をUSB接続の外付けHDDにバックアップをとることである。実際にスクリプトを動かせてみると、ほとんどすべてのファイルが下のような

chown ・・・・:Operation not permitted

というエラーによって失敗してしまった。

エラー出力は以下の通りである:

2008/10/26 20:12:38 [6028] rsync: chown "/media/tstar/200810backup/home/waterman/.cache/audacious/thumbs/.Classic1.3.png.x3IqDy" failed: Operation not permitted (1)
2008/10/26 20:12:38 [6028] >f+++++++++ home/waterman/.cache/audacious/thumbs/Default.png
2008/10/26 20:12:38 [6028] rsync: chown "/media/tstar/200810backup/home/waterman/.cache/audacious/thumbs/.Default.png.WEqFI6" failed: Operation not permitted (1)
2008/10/26 20:12:38 [6028] >f+++++++++ home/waterman/.cache/audacious/thumbs/Ivory.png
2008/10/26 20:12:38 [6028] rsync: chown "/media/tstar/200810backup/home/waterman/.cache/audacious/thumbs/.Ivory.png.pEaHOE" failed: Operation not permitted (1)

おそらく「バックアップ先に転送しようとしたけれど、アクセス権がないのでできません」らしいことは分かる。もちろん、sudoを使ってルート権限を持った状態でコマンドを実行しているのにである。これを解決するために、1ステップづつ試してみた結果を以下にまとめる。

(注)同じ症状でうまくバックアップをとれないという報告がUbuntu Forumsなどで見られたが、直接 解決につながる報告を見つけることができなかった。

HDDをfat32でパーティションを切る。

何が原因なのかよく分からないので、一度まっさらな状態にしてゼロから確認してみようと思った。まずGPartedというパーティションを切るツールをsynapticからインストールする。これはGUIで簡単にパーティション作業ができるので非常に便利なツールである(なぜか、「すべてのデバイスをスキャン中…」というところでやたらと時間がかかるのが難点)。

GPartedのウィンドウ

このアプリで、既存のファイルシステムを削除してから、新規ファイルシステムとしてfat32を選択する。パーティションが切れたら、念のためフォーマットもしておく。また、HDDのデバイス名(図では、/dev/sdb1となっている)を確認しておく。

HDDのマウントポイントを/etc/fstabに登録する。

/etc/fstabは、システムにマウントされるデバイスのマウント先が登録されている。この設定ファイルに次の1行を追加する。

/dev/sdb1 /media/tstar vfat  iocharset=utf8,umask=000 0 0

1番目の項目はデバイス名、2番目の項目はマウントポイントである。なので、Gpartedあるいは次のコマンド

$ sudo fdisk -l
でデバイス名を確認する必要がある。

また、マウントポイントとして/media/tstarがなければ作成する。

$ sudo mkdir /media/tstar

そして、

$ sudo mount /media/tstar
を実行するとマウントできる。ちなみに、これまではGUIからマウント、アンマウントの操作をできていたのに、なぜかGUIからの操作ができなくなった。CUIからmountあるいはumountのコマンドで操作できるので問題ないのだが、どういう訳だろう?

実験

上で説明した設定の下で、まずマウント先のディレクトリの所有権をユーザに変更することを試みた。 (もし所有権を変更できたならば、アクセスする権限がないなどと怒られないだろうから)

$ cd /media
$ sudo mount tstar
$ ls -al
lrwxrwxrwx  1 root     root        7 2008-09-07 02:52 floppy -> floppy0
drwxr-xr-x  2 root     root     4.0K 2008-09-07 02:52 floppy0
drwxr-xr-x  3 root     root     4.0K 2008-10-26 20:49 tstar
drwxr-xr-x  4 root     root     4.0K 2008-10-26 21:04 .
drwxr-xr-x 23 root     root     4.0K 2008-10-26 18:48 ..

このようにHDDであるtstarの所有者はもちろんrootになっているので、所有者を変更するため

$ sudo chown ユーザ名:ユーザ名 tstar
と実行してみたが、permission deniedというようなエラーメッセージが出て失敗した。また、ダメ押しでbackupスクリプトを走らせてみたが、また上と同じ症状が発生した。したがって、別の方法でトライすることにした。

(注)マウントしないで所有権の変更を試みたら、うまく変更できた。しかし、その後にマウントしたら、自動的に所有権がrootに変わっていたので、結局ダメだった。

HDDをext3でパーティションを切る。

パーティションの切り方は、ファイルシステムをext3に指定することを除いて上とまったく同じ。

HDDのマウントポイントを/etc/fstabに登録する。

マウントポイントの登録は今度は

/dev/sdb1       /media/tstar    ext3    defaults,relatime       0 0
という一行を/etc/fstabに挿入する。

実験

今回も同じように所有権の変更を試みた。

$ cd /media
$ sudo mount tstar
$ ls -al
lrwxrwxrwx  1 root     root        7 2008-09-07 02:52 floppy -> floppy0
drwxr-xr-x  2 root     root     4.0K 2008-09-07 02:52 floppy0
drwxr-xr-x  3 root     root     4.0K 2008-10-26 20:49 tstar
drwxr-xr-x  4 root     root     4.0K 2008-10-26 21:04 .
drwxr-xr-x 23 root     root     4.0K 2008-10-26 18:48 ..

$ sudo chown ユーザ名:ユーザ名 tstar
今度はうまく所有権を変更できた。そして、バックアップスクリプトを走らせてみると、エラーもなくバックアップをとることができた!

(補足)アンマウントした後に、再度マウントしても所有権はユーザのままだった。また、再起動しても保存されていた。

分かったこと

ほとんどファイルシステムが違うだけの2通りの方法を試みて一方が成功して、他方が失敗したので、ファイルシステムが原因なのではないかと思われる。実は、後で調べて分かったことだが、vfat, fatなどのファイルシステムをマウントしたとき、基本的に所有者がrootになってしまうようだ。もしユーザやグループを指定してマウントしたいならば、マウントオプションで指定するかfstabに記述しておく必要がある。

例:

$ mount /media/tstart -o uid=xxx, gid=yyy

参考: 「バックアップ用ポータブルドライブに最適なファイルシステムに関する一考察」 「[linux-users:22683] mount option for fat (Re: Mosaic)

バックアップスクリプト

次のスクリプトの処理手順は

  1. バックアップ先のディレクトリがなければ作成する。
  2. インストール済みのパッケージリスとを作成する。
  3. 各ディレクトリ以下をrsyncでバックアップをとる。
ただし、.gvfsにマッチするものは無視する。バックアップ先のディレクトリは月ごとに新規作成する。パッケージリストとバックアップログは、実行する度にとる。

ファイルディスクリプタとリダイレクト このエントリーを含むはてなブックマーク

本記事では、シェルスクリプトでの標準入出力のリダイレクトについてまとめる。

標準出力はfile.txtに書き込まれる。(標準エラー出力は画面に表示される)

$ command1 >  file.txt

標準出力はfile.txtの末尾に追加する形で書き込まれる。

$ command1 >>  file.txt

標準出力はfile.txtに書き込まれ、標準エラー出力はerr.txtに書き込まれる。

$ command1 > file.txt 2> err.txt

標準出力とエラー出力はともにfile.txtに書き込まれる。

$ command1 > file.txt  2>&1

(注)最初に>file.txtが評価される。command1の標準出力がfile.txtに書き込まれる。次に、command1の標準エラー出力が標準出力に向けられる。この時点で標準出力=file.txtである!ので、標準エラー出力はfile.txtに書き込まれる。

標準エラー出力は画面に表示され、標準出力はfile.txtに出力される。

$ command1 2>&1 > file.txt

(注)最初に2>&1が評価される。そのとき、command1の標準エラー出力は標準出力に向けられる。この時点で標準出力=画面である!ことに注意する。その後に、command1の標準出力はfile.txtに書き込まれる。

まず、command1の標準出力がcommand2の標準入力に結合される。そして、command1の標準エラー出力は標準出力に向けられる。すなわち、標準出力とエラー出力がともにcommand2に渡される。

$ command1 2>&1 | command2

(注)まず初めにパイプでコマンド同士の入出力が結合される!その後にリダイレクトが評価される。

参考サイト:「シェルを使おう -応用編-」に非常に分かりやすい説明が載っている。

日本語、プログラミング用のmanpageがない。 このエントリーを含むはてなブックマーク

本記事では、Ubuntu 8.04に日本語、プログラミング用のmanpageを導入する方法をまとめる。

これまで使用してきたlinuxでは、日本語でmanpageを読む場合は、manコマンドでなくjmanコマンドを使っていた。しかし、デフォルトでjmanコマンドが入っていない。

調べてみると、

manpages-ja,           一般ユーザ向けのmanpage
manpages-ja-dev   開発者向けのmanpage
が入っていない。

さらに、

manpages-posix,
manpages-posix-dev
もまた入っていない。したがって、この4つをsynapticで入れておく。ちなみに、manコマンドで日本語のマニュアルが見られる。jmanコマンドは使われなくなったのだろうか?

Synapticあるいはapt-getでエラーとなる。 このエントリーを含むはてなブックマーク

本記事では、synapticあるいはapt-getを実行するとエラーが発生する症状の解決法をまとめる。

原因は、リポジトリの公開鍵が登録されていないことにある。pgp.nic.ad.jpの公開鍵058A05E90C4ECFECを登録するには、

$ pgp --keyserver pgp.nic.ad.jp --recv-keys 058A05E90C4ECFEC
$ sudo gpg --armor --export 058A05E90C4ECFEC | sudo apt-key add -
$ sudo gpg --armor --export 058A05E90C4ECFEC | sudo apt-key add -

(僕の環境では2回実行しないと適用されなかった)

CtrlとCapsLockの交換 このエントリーを含むはてなブックマーク

本記事では、CtrlボタンとCapsLockボタンのシステム的に交換する方法をまとめる。

そのためには、設定ファイル/etc/X11/xorg.confにて、

[前] Option    "XkbOptions"    "grp:alt_shift_toggle,grp_led:scroll"
[後] Option    "XkbOptions"    "grp:alt_shift_toggle,grp_led:scroll,ctrl:swapcaps"
と変更する。再ログインすると、設定は有効になる。

フォントの登録 このエントリーを含むはてなブックマーク

本記事では、フォントをシステムに登録する方法をまとめる。ユーザ個人で使用する場合は、そのユーザのホームディレクトリに.fontsというディレクトリを作成してその中に格納する。システムで全ユーザ向けに登録する場合は/usr/share/fonts/に入れる必要がある。

自動起動するアプリケーションを減らす。 このエントリーを含むはてなブックマーク

本記事では、デフォルトの設定で自動起動するように設定されている不要なアプリケーションを停止する方法をまとめる。 「システム→設定→セッション」で現れるダイアログで以下のアプリのチェックを外した(私の場合は不要なので)。 Blootoothマネージャ Evolution Alarm Notifier Tracker Trackerアプレット 視覚支援 印刷キューのアプレット User Folder Update

apport-gtkの不具合? このエントリーを含むはてなブックマーク

本記事は、apport-gtkのサービス停止についてまとめる。apportは、アプリケーションがクラッシュしたときに、バグレポートの作成をサポートするツールのようです。ネットで調べてみると、「apport-gtkのクラッシュ」のようにapportの不具合らしきものが報告されている。 1年以上まえの情報なのでよく分からないが、重要なアプリでないと思うのでサービスを停止した。「システム→システム管理→サービスの設定」で現れるダイアログでチェックを外せば良い。

日本語のフォルダ名を英語にする。 このエントリーを含むはてなブックマーク

本記事は、Ubuntu 8.04でフォルダ名が日本語となっているものを英語に変更する方法についてまとめる。 端末から $ LANG=C xdg-user-dirs-gtk-update と実行すると、ダイアログが現れる。Update namesをクリックする。再ログインすると変更されている。

viの設定ファイル このエントリーを含むはてなブックマーク

本記事は、エディタviの設定ファイル.vimrcの設定例をまとめる。以下の内容のファイル.vimrcをホームディレクトリに置いておくこと。 設定例:
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=utf-8,cp932,iso-2022-jp,euc-jp

set backspace=2
set tabstop=2
set shiftwidth=4
set expandtab
   
highlight tabs ctermbg=green guibg=green

set list
set number
set ruler
set smartindent

パッケージ管理ツール (apt-get, dselect, dpkg) このエントリーを含むはてなブックマーク

本記事では、3つのパッケージ管理ツール(apt-get, dselect, dpkg)について概説して、システムの移行作業への活用法をまとめる。すなわち、旧システムに導入済みのすべてのパッケージを新システムに一括インストールする方法。

apt-get

レポジトリを登録する。設定ファイル/etc/apt/sources.listに、レポジトリを記述する。例えば、Ubuntu 8.04の場合は次のようにする。

deb http://archive.ubuntulinux.jp/ubuntu-ja hardy/
deb http://archive.ubuntulinux.jp/ubuntu-ja hardy-ja/

パッケージ情報を更新する。登録したレポジトリを参照して、パッケージの一覧を取得する。アップグレード、インストールの前に実行する。

$ apt-get update

パッケージをアップグレードする。

$ apt-get dist-upgrade

指定のパッケージをインストールする。

$ apt-get install パッケージ名

関連サイト:「ATP HOWTO

 dselect

パッケージを一覧から選んで対話的にインストールする。もちろんsources.listが正しく設定されている必要がある。

 dpkg

ローカルマシン内で、指定のパッケージをインストール、アンインストール、情報取得などを行う。

パッケージをインストールする。

$ dpkg  -i   パッケージ名

パッケージをアンインストールする。

$ dpkg  -r パッケージ名    // etc以下の設定ファイルは残す。
$ dpkg  --purge  パッケージ名  //すべてのファイルを消去する。

インストールパッケージの一覧を取得する。

$ dpkg -l
または
$ dpkg -l  パッケージ名
または
$ dpkg --get-selections  >  一覧をダンプするファイル名

インストールされたパッケージのファイル名を一覧

$ dpkg -L パッケージ名

特定のファイルが含まれるパッケージ名を検索する。

$ dpkg -S ファイル名

パッケージファイルの中身を一覧表示する。

$ dpkg -c パッケージ名

パッケージの中身を抽出する。

$ dpkg -x パッケージ名 展開する場所

パッケージの状態を確認する。インストール中断や設定失敗など何らかのエラー状態にあるパッケージを表示する。

$ dpkg --audit

一覧表に指定されたファイルリストをインストール指定する。

$ dpkg  --set-selections  <  インストールファイルの一覧表

出典:dpkgコマンドの扱い方は、LANDISK HACKING DIARY 「apt-get, dpkgコマンドでパッケージ管理」から引用しました。こちらにより詳しい情報が載っています。

システム移行への活用

旧システムにインストールされたパッケージ一覧を取得する。 旧システムにおいて以下を実行して、パッケージ一覧を作成する。

$ dpkg  --get-selections >  packagelist.txt

新システムにパッケージをインストールする。 旧システムのパッケージ一式をインストール指定する。

$ dpkg  --set-selections

関連サイト:「パッケージやパッケージシステムのFAQ

gnome-terminalを設定する。 このエントリーを含むはてなブックマーク

本記事では、gnome-terminalでフォントや色の設定をまとめる。

端末(ターミナル)

端末とは、システム内部にコマンドで命令を伝えるときの窓口に対応するものである。

gnome-terminal

ドルマーク($)の直後のカーソルが点滅しているところに、コマンドを入力してEnterを押すことで、システムに指定の動作をするように伝える。上の図では、lsコマンドを入力して、現在のディレクトリ(/usr)にあるファイルおよびディレクトリの一覧を表示させている。このように、ユーザは端末を介してシステムと対話することで、作業を行う。

フォントの設定

上の図ではメニューバーが非表示になっているが、表示されていれば、「編集→現在のプロファイル」を選択する。そうでなければ、端末上で右クリックすればメニューが現れるので、「このプロファイルの編集」を選択する。すると、次のダイアログが現れる。

プロファイルの編集
メニューバーがうっとおしい場合は、上の図のように「新しい端末の中にメニューバーをデフォルトで表示する」のチェックを外す。また、フォントはドロップリストから好きなものを選ぶ。私は「Bit stream Vera Sans Mono」のサイズ11のフォントにした。

色の設定

次に、テキスト色と背景色の設定を行う。「色」というタブを選択すると、次のダイアログとなる。「システム・テーマの色を使用する」のチェックを外して、「組み込みスキーム」から「明るい黄色地に黒文字」を選択した。

ウィンドウの縁

GNOME Artというサイトに各種テーマが置いてあるので、好きなものをダウンロードする。tar.gzなど圧縮されているファイルは解凍しないでそのままローカルPCに保存する。「システム→設定→外観の設定」で、次のダイアログが現れる。

外観の設定ダイアログ
「インストール」ボタンをして、ダウンロードしてファイルを選択する。すると、上の図の枠の中に、ダウンロードしたデザインのウィンドウのアイコンが現れるので、それを選択すると外観が変わる。

ちなみに私がダウンロードしたのは、WindowBorderというジャンルにあるMWMというウィンドウの縁のデザイン。昔のウィンドウマネージャのことはあまり知らないのだが、FVWMというウィンドウマネージャでよく見る外観である。

設定したWindowBorder

2008年10月25日土曜日

プロンプトをカスタマイズする このエントリーを含むはてなブックマーク

本記事では、端末で作業する人にはお馴染みのプロンプトの表示形式を変更する方法をまとめる。 □ プロンプトとは 下の端末の[.....]$という文字列の部分のことです。シェルが入力待ちであることを表しています。この文字列はユーザの好きなようにカスタマイズできます。例えば、ユーザ名、ホスト名、ワーキングディレクトリ名、現在時刻、日付など様々な情報を埋め込むことができます。
gnome-terminal
□ 設定の方法 設定は.bashrcに書き込みます。PS1というシェル変数に文字列を登録してexportするだけです。上の端末のように、[ユーザ名@ホスト名 現在時刻]$ という文字列にするには、export PS1="[\u@\h \t]$ "という1行を挿入するだけでOKです。\u, \h, \t はそれぞれユーザ名、ホスト名、現在時刻を表す特別な記号です。こういった記号の一覧は@ITの「bashのプロンプトを変更するには」に載っています。 □ 補足 設定ファイルに書き込んだ後は、端末を立ち上げ直すか、あるいは
$source ~/.bashrc
を実行して設定ファイルを読み込んでください。

ユーザ名を変更する。 このエントリーを含むはてなブックマーク

本記事では、ユーザ名を変更する方法をまとめる(Ubuntu 8.04)。過去に、別のディストリビューションのLinuxを使っているときに、ホスト名やユーザ名を変更してログインできなくなったり、変なトラブルが起きたことがあった。だから、今回はあまり気乗りしないが、ホスト名やユーザ名はよく目につくので、どうしても変更したくなった。ホスト名は、前回の記事「ホスト名を変更する」の通りすると、ごく簡単に変更できた。一方、ユーザ名は少し手間取ったので、手順を一通りまとめる。 □ シングルユーザモードでログインする。 通常は、ランレベル5(=グラフィカルログインによるマルチユーザモード)で起動する設定になっていると思う(c.f. @ITの「ランレベルとは」)。シングルユーザモードでログインする方法を、Ubuntu 8.04の場合で説明する。 (1)PCに電源投入(システムを起動していたら、再起動) (2)デュアルブートの場合は、OS選択画面に移るので、Ubuntuを選択 (3)Ubuntuが立ち上がるときにEscを押すと、ブートローダGrubのメニュー画面が現れる。 メニューでは、起動するシステムのカーネルが選択できる。 (4)最新のカーネルで、確かrecovery modeとか付記されているものを選択する。 (5)起動後に表示されるメニューで、確か「コマンドプロンプトに戻る」というのを選択する。 (6)次の3つのファイルで、現在のユーザ名をすべて変更したユーザ名で置き換える。CUIでの操作なので、viの操作などにはあらかじめ慣れておくこと! /etc/passwd /etc/group /etc/shadow 例えば、viなどのエディタで編集すると良い。編集箇所はたくさんあるので、パターン検索などの機能を活用してすべて置換する。 (7)ホームディレクトリの名前を新しいユーザ名のものにリネームする。 補足: 私は(7)をしないで、(6)までやった後に再起動してログインしてしまった。すると、もちろんログインに失敗したので次のようにして復帰した(説明するまでもないが。。。)まず、ログイン画面においてフェールセーフによるログインで入った。そして、ホームディレクトリを新しいユーザ名にリネームする。Ctrl-Alt-Backspaceでログイン画面に戻ってから、今度は通常のログインで入った。

ホスト名を変更する。 このエントリーを含むはてなブックマーク

本記事では、ホスト名(=マシン名)の変更方法を説明する。以下の2通りの設定方法がある。いづれの場合も、設定した後はすぐに再起動すること。

CUIでの設定方法

以下の設定ファイル /etc/hostname に現在のホスト名が書き込まれているので、これを変更したいホスト名で置き換える。

GUIでの設定方法

システム→システム管理→ネットワーク を選択すると、ウィンドウが現れる。その「全般」タブの項目「ホスト名」を編集する。

(注)実は次のファイル /etc/hosts の内容も置き換えないといけない!

.bashrcで初期設定 このエントリーを含むはてなブックマーク

前回の記事「.bash_profileで環境変数を設定する」に引き続き、本記事は.bashrcの設定についてまとめます。2つの設定ファイルはともにシェルに初期設定を登録するためのファイルですが、.bash_profileは基本的にログイン時にのみ読み込まれるのに対して、.bashrcはシェルが起動する度に読み込まれるのでした。

.bashrcとは

シェルを起動する度に読み込まれる設定ファイルです(ホームディレクトリに置いておきます)。.bashrcでは、主にエイリアスやユーザ定義関数、シェルの起動の度に実行するコマンドなどを登録します。

umask

ファイル作成したときは、読み書き実行に関して誰が行えるか(ファイルへのアクセスの権限)を取り決めることができます。これをパーミッションといいます。ファイル(file.txt)のパーミッションは小文字のエルをオプションとして指定することで、lsコマンドで確認できます。

$ ls -l file.txt
-rw-r--r-- 1 hoge hoge 3 2008-10-25 20:05 file.txt

この出力結果の見方は「パーミッションとは」に分かりやすい説明が載っています。

.bashrcに

umask 022
という1行を入れておくと、ファイルを新規作成したときに、そのファイルのパーミッションは644になります。すなわち、作成したユーザは読み書きができますが、それ以外の人は読むことしかできません。

fortune

fortuneは、実行する度に格言やジョークを端末に表示するプログラムである。シェルを立ち上げる度に、自動的にfortuneを実行するようにbashrcに書き込んでおくと楽しい。apt-getなどで、

# apt-get install fortune-mod 
インストールする。

ちなみに、fortuneの語源はフリー百科事典『ウィキペディア(Wikipedia)』によると、「フォーチュン・クッキー(fortune cookie)とは、中に運勢の書かれた紙片の入った菓子である。アメリカ合衆国の中華料理店では殆どの店で食後に出される。」とのこと。

フォーチュンクッキーを開けたところ(出典:Wikipedia

.bashrcの設定例

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
#alias ls='ls -F --color=auto'
alias ls='ls --color=auto --ignore-backups --human-readable -vxX '
alias eng='LANG=C LANGUAGE=C LC_ALL=C'

# don't put duplicate lines in the history. See bash(1) for more options
export HISTCONTROL=ignoredups
# ... and ignore same sucessive entries.
export HISTCONTROL=ignoreboth


# Source global definitions
if [ -f /etc/bashrc ]; then
     . /etc/bashrc
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ]; then
 . /etc/bash_completion
fi

umask 022

/usr/games/fortune

ただし、ssh接続されるサーバ上のアカウントで/usr/games/fortuneの行を書いていたら そのアカウントに対してscpできない。回避方法としては、~/.bashrcでなく~/.bash_profileなどに書いておく(そうしたら、端末を立ち上げるごとでなくて、ログインにつき1回しかfortuneは実行されないが)。

ディストリビューションによっては、/usr/games/fortuneではなくて/usr/bin/fortuneかもしれない。fortuneをインストールしたが、実行ファイルの場所が分からないときは

$ which fortune
を実行して場所を確認すること。

.bash_profileで環境変数を設定する。 このエントリーを含むはてなブックマーク

バッシュシェルを使っている場合、ホームディレクトリに

.bashrc
.bash_profile      <----(誤)Ubuntu 8.04では.profileを優先して読み込みます。
というファイルがある場合、シェルはそのファイルを読み込んで設定を登録します。.bashrcはシェルが起動する度(例えば、ktermなどの端末を立ち上げる度)に読み込まれる一方、.bash_profileは基本的にログインしたときにだけ読み込まれます。

(注)ドットで始まるファイルはlsコマンドだけでは通常は表示されません。lsコマンドにaオプションを付けて

$ ls -a
と実行すれば、ドットで始まるファイルなどすべてのファイルが表示されます。

.bash_profileでできること

.bash_profileに環境変数の設定をして、シェルの動作を変えることができます。

環境変数の設定を確認する

$ printenv | less
を実行すると、設定されている変数の一覧が表示されます。

例えば、以下のように左辺に環境変数で、右辺にその設定値として表示されます。

SHELL=/bin/bash
TERM=xterm
http_proxy=yyy
USERNAME=xxx
COLORTERM=gnome-terminal
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
LANG=ja_JP.UTF-8

設定ファイルの読み込まれる順番

まず最初はシステムの設定/etc/profileが読み込まれます(これはユーザの設定ではないので、一般ユーザは編集できません!)。その次に、下に示した順番でユーザごとの設定ファイルが読み込まれます。

  1. ~/.bash_profileを読み込む。
  2. ~/.bash_profileがなければ~/.bash_loginを読み込む。
  3. さらに~/.bash_loginがなければ~/.prfileを読み込む。
したがって、ホームディレクトリに.bash_profileを置いておけば良いのです。

環境変数を設定する。

~/.bash_profileに以下のように書き込む。

書式の例:

環境変数1=設定値1
環境変数2=設定値2
環境変数3=設定値3
…
export 環境変数1 環境変数2 環境変数3 …

.bash_profileの設定例:

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
     . ~/.bashrc
fi

# User specific environment and startup programs

ENV=$HOME/.bashrc
USERNAME="xxxx"
PATH=$PATH:"/$HOME/bin"

export USERNAME ENV PATH

.bash_profileを読み込む

ログアウトして、再ログインする。あるいは以下のコマンドで設定を更新する。

$source ~/.bash_profile

その他

シェル変数を設定して、バッシュの動作を変えることもできる。 例えば、@ITの「bashのカスタマイズ」が参考になります。

2008年10月24日金曜日

Cソースファイルをコンパイルできない。 このエントリーを含むはてなブックマーク

Ubuntu 8.04では、C言語で書いたソースファイルをコンパイルできないことがあります。コンパイラgccは入っているようですが、ライブラリlibc6-devがデフォルトで入っていないことが原因のようです。

試しに、"Hello, world!"をprintfで出力する超有名なプログラムをコンパイルしてみると、

$ gcc hello.c -o hello
hello.c:1:14: error: stdio.h: No such file or directory
と確かに怒られてしまいます。このプログラムって一種の儀式だと思っていたんだけど、要はこういう不具合(というか単にライブラリがないだけ)のときに、自分の書いたプログラムのバグが原因なのか、それともシステム側に原因があるのか切り分けるためのプログラムなんですね。

ネットで調べてみると、build-essentialというパッケージ(Debianパッケージを作成するときに使うかもしれないツール一式)を入れるとうまくいったと報告されていたので、同じようにそのパッケージをインストールしてみると、問題なくコンパイルできました。

$sudo apt-get install buld-essential

参照サイト

trial and error Ubuntu 8.04 で gcc が動かない...?

2008年10月14日火曜日

emacs キーバインド このエントリーを含むはてなブックマーク

Unix系のOSで標準的なエディタでemacsがあります。emacsはエディタ以上の強力なツールです。というのは、emacsの上でブラウザやメーラ、あるいはシェルのインタープリタやデバッガなどを扱えるので、emacsの上だけでかなりの作業を行うことができます(やろうと思えば)。

emacsは独特のキーバインドを提供しています。キーバインドというのは、いくつかのキーを組み合わせて1つの機能を呼び出すものです。はじめて聞く人には抽象的で分かりずらいかもしれませんが、具体的な作業で説明すると次のようになります。「1行を切り取って、別の場所に貼り付ける」場合を考えます。”普通の”エディタでは、

  1. マウスで1行を選択する。
  2. メニューバーで「切り取り」をクリックする。
  3. カーソルを指定の位置に移動させる。
  4. メニューバーで「貼り付け」をクリックする。
という一連の操作で実現できます。

emacsでキーバインドを使うと、次のようにキーボードだけで行うことができます。

  1. 行の先頭に移動する(Ctrl-a)。
  2. 1行を切り取る(Ctrl-k)。
  3. 指定の行(例えば3行下)に移動する(Ctrl-u 3 Ctrl-n)。
  4. 切り取った行を貼り付ける(Ctrl-y)。
キーバインドだけで操作を行うメリットは、キーボードから手を話さないで済むことです。プログラミングや文書作成ではとても素早く作業を行えます。

前置きが長くなりましたが、本記事ではemacsのキーバインドで気になったものをピックアップしてまとめます。大抵は、自分が忘れていたものをピックアップするので、網羅的なものではありません。

選択した範囲を切り取る。

  1. 選択範囲の起点を指定する(マークセット)。 指定の場所にカーソルを進めて、Ctrl-SPC (注)SPCはスペースです
  2. 選択範囲の終点に移動する。
  3. 選択範囲を切り取る。 Ctrl-w

随時、追加していきます

2008年10月10日金曜日

RhythmboxとiPod このエントリーを含むはてなブックマーク

iTuneライクな音楽ファイル管理ソフトのRhythmboxを使って、iPodの曲を管理するために必要な設定をまとめる。

mp3形式のファイルを扱えるようにコーデックをインストールする。

メニューバーの「編集」にある「設定」という項目を選択して、設定ウィンドウを開く。デフォルトでは、以下の画像のように、「フォーマット」はoggマルチメディアが選択されている。

ここで、mp3を選択すれば良いが、デフォルトではmp3のコーデックがないので選択できない。したがって、Synapticなどでコーデックをインストールする。

インストールリスト:

  • gstreamer0.10-ffmpeg
  • gstreamer0.10-plugins-base
  • gstreamer0.10-plugins-good
  • gstreamer0.10-plugins-bad
  • gstreamer0.10-plugins-bad-multiverse
  • gstreamer0.10-plugins-ugly
  • gstreamer0.10-plugins-ugly-multiverse
  • gstreamer0.10-sdl
すると、mp3を選択できる。

設定後のウィンドウは以下のようになる。

iPodの中身をローカルPCにコピーする

iPodをPCに接続すると、RythmboxのウィンドウにiPodのアイコンが現れる。アイコンの中にある音楽ファイルがリストで表示されている。これらの音楽ファイルを選択して、フォルダにドラッグ&ドロップすると、ローカルPC内に音楽ファイルをコピーできる。

2008年10月5日日曜日

時刻の修正 このエントリーを含むはてなブックマーク

中古で入手したThinkpad X31は時刻が大幅にずれていたので、その修正の方法および調査結果をまとめる。

リアルタイムクロックとシステムクロックについて

linuxでは、リアルタイムクロック(RTC)とシステムクロックの2種類の時刻を扱っている。リアルタイムクロックは、ハードウェア的に時刻を計測しているもので、コンピュータの電源をシャットダウンしても付属の電池で計測している。一方、システムクロックはOSの起動時にRTCから時刻を取得して、その後はOSが計測・管理している時刻のこと。したがって、サーバなどのようにシャットダウンすることなしに長時間OSを稼働させる場合には、RTCから時刻がズレしてしまう。

今回のズレの原因

$ hwclock
でRTCを確認してみると、RTC自体の時刻がズレていることが分かった。RTCを修正する方法はいくつかある。

ntpサーバを利用する方法: ntpdateというコマンドを使って、ntpサーバに接続してシステムクロックをntpサーバに同期させて、その後にRTCをシステムクロックに同期させる方法。何回か試してみたが、なぜかうまくntpサーバと同期できなかった。ネットで調べてみると、システムクロックが大幅にずれていた場合には同期できないなどという情報があった(真偽は不明)。したがって、この方法は断念した。

手動でシステムクロックを修正する方法: 例えば、以下のように手動でシステムクロックを設定する。

$ sudo date -s '2008-10-05 23:23:25'
ちなみに、現在時刻は、情報通信機構のWebサイトなどで確認できる。

次に、ntpdateでntpサーバと同期する(上ではうまく出来なかったが、今回はできた)。

$ sudo ntpdate ntpサーバのURL

RTCをシステムクロックに同期させる。

$ sudo hwclock --systohc

インターネットラジオ このエントリーを含むはてなブックマーク

インターネットラジオを聞くためのソフトとその設定についてまとめる。

ソフト

以下のソフトをsynapticでインストールした。

インターネットラジオ局を探して、tuningするソフト - streamtuner

ミュージックプレイヤー - audacious

ラジオを録音するソフト(オプション) streamripper

設定

デフォルトでstreamtunerは、xmmsを呼び出して再生するようになっている。設定で、以下のようにaudaciousに変更する。(Ubuntu8.04ではxmmsは利用できないので。)

audaciousはwinampなどのスキンを適用して、外観を変えるには以下のように設定する。 skinz.orgなどのサイトからスキンを解凍しないでダウンロードする。 audaciousの設定のスキンの一覧にドラッグ&ドロップして、選択する。

2008年10月4日土曜日

emacsで単語登録 このエントリーを含むはてなブックマーク

emacsで辞書に単語を登録する方法

  1. M-x anthy-add-word-interactive
  2. 登録する単語を入力
  3. 単語の読みを入力
  4. 後は指示に従って、品詞や活用などに関する質問に回答

2008年10月2日木曜日

webサイトの登録 このエントリーを含むはてなブックマーク

本ブログの趣旨と少し違うが、今回はwebサイトを作成したときに検索サイトに登録するときのチップスをまとめる。

Google

Google web マスターツールを使って登録する。 Webサイトのheadセクションに指定のメタタグを挿入して、登録する。

Yahoo.com

Yahoo! Site Explorerに登録する。 Webサイトのheadセクションに指定のメタタグを挿入して、登録する。

Yahoo japan

登録サイトにURLを登録する。ロボットが巡回してくれる。

MSN

MSN Live searchにURLを登録する。

Yahoo カテゴリ

Yahooカテゴリの適切なカテゴリで「サイトの登録・変更」というところから登録する。

参考

くりぼうのBlogger入門

ImageMagicで画像処理2 このエントリーを含むはてなブックマーク

ImageMagicのコマンドラインからの画像処理について、チップスを追加する。

画像を時計回りに30度だけ回転する。

$ convert -rorate 30 before.jpg after.jpg

画像の上下を反転する。

$ convert -flip before.jpg after.jpg

画像の上下を反転する。

$ convert -flop before.jpg after.jpg

しきい値を指定して画像を2値化する(輝度値が30度未満は黒、それ以外は白にする)。

$ convert -threshold 30 before.jpg after.jpg

枠を付ける。

$ convert -border 10x10 -bordercolor black before.jpg after.jpg

ぼかす。

$ convert -blur 10 before.jpg after.jpg

間引く。

$ convert -sample 10% before.jpg after.jpg

参照

本記事は、以下のサイトを参照してまとめた。とても分かりやすくまとめられている。 「ImageMagicによる基本的な画像処理

2008年9月23日火曜日

Xresouceの設定 このエントリーを含むはてなブックマーク

XresouceでXアプリケーションの設定を与えることができる。設定後は

$ xrdb -remove ~/.Xresources
$ xrdb -merge ~/.Xresouces
のように明示的に設定を破棄して再び読み込まないと反映されない。

emacsのウィンドウサイズ このエントリーを含むはてなブックマーク

Ubuntu 8.04で、以前の記事にあるようにemacsのパッケージをインストールした状態で、emacsを起動させると画面が小さい(自分的に)。そこで、コマンドで

$emacs -geometry 100x200 &
のように指定しても、ある一定サイズ以上に大きくできない。また、~/.Xresourceに
emacs.geometry:100x200
のように指定した場合も同じだった。

末尾で参照しているサイトに同じ症状および解決法が載っていた。 まず~/.Xresourcesの上の行をコメントアウトして、

$ xrdb -remove ~/.Xresources
$ xrdb -merge ~/.Xresources
としておく。そして、~/.emacs.elに以下の設定を追加した後、コンパイルしてロードすれば良い。私はの場合はemacsの設定をコンパイルしたものを読み込むようにしているので、そうでない場合は.emacsなどに書き込むだけで反映されると思う。 参照:「[ubuntu-jp] Emacsの .Xresources に関して

ターミナルのビープ音を消す このエントリーを含むはてなブックマーク

ターミナルからコマンド入力の際、TAB補完は役に立つのだが、ビープ音が毎回なるのでストレスがたまってしまう。xtermとktermの場合は、 ~/.Xresourcesに

kterm*visualBell: true
xterm*visualBell: true
と設定することでvisual bellに変えることができる。一方、gnome-terminalではプロファイルで端末ベルを鳴らすという項目のチェックを外せばよい。

CUIモードでは、set bell-style noneとしてもビープ音がなり続けた。結局、/etc/inputrcのbell-style noneをコメントアウトするとビープ音がならなくなった。

2008年9月19日金曜日

自動起動アプリを停止 このエントリーを含むはてなブックマーク

システム→設定→セッション→自動起動するプログラム で、自動起動するプログラムを設定できる。不要なプログラムが自動的に起動されている場合がある。BluetoothやTrackerなどは使わないので、無効にしておいた。

DVIファイルとPDFファイル このエントリーを含むはてなブックマーク

PDFファイルのビューアはacrobat readerやxpdfなどがある。どちらもapt-getで入手可能。

$ sudo apt-get install xpdf-japanese

DVIファイルをPDFファイルへ変換するツールdvipdfmxはデフォルトでubuntuに入っていなかった。調べてみると、xelatexというパッケージの中にあるらしい。したがって、xelatexをインストールした。

テーマの置いてあるサイト このエントリーを含むはてなブックマーク

各種テーマが置いてある。 http://art.gnome.org/

Firefoxがよく落ちる このエントリーを含むはてなブックマーク

Firefoxがよく落ちる。特に、asahi.comでニュースを見ているときに、突然落ちてしまうことが良くある。経験的にFlashを使っているサイトでよく落ちるので、Flashがらみではないかと疑っていた。ネットで調べてみると、Flashのアドオンを無効化してみると落ちなくなったと報告されていた。実際に、無効化してみると今のところ落ちていないので、おそらくこれが原因なのだろう。

2008年9月17日水曜日

初期起動アプリ このエントリーを含むはてなブックマーク

LinuxではXwindowが立ち上がったときに、初期化ファイルに設定を記述しておくことで、アプリを自動的に立ち上げるなどができる。ただし、どのようにXを立ち上げたかによって読み込まれる初期化ファイルが異なる。例えば、CUIからstartxで立ち上げる場合はxinitrcが読み込まれる。xdmからログインする場合はxsessionだったと思う。

Ubuntu 8.04では詳しいことは知らないけれど、ネットで調べたところxsessionrcが読み込まれるらしい。したがって、ホームディレクトリにxsessionrcというファイルを作成して設定を書き込む。

設定例

#!/bin/sh
xclock -geometry 150x150+870+0  &
gnome-terminal --geometry 120x45+50+0 --hide-menubar &

Imagemagickで画像編集 このエントリーを含むはてなブックマーク

Imagemagickという画像処理ツールがある。画像の表示、結合、フォーマット変換、サイズ変換、アニメーション作成など様々なツールのセット。プログラムから呼び出したり、コマンドラインやGUIから使うことができる。

Ubuntu 8.04には標準でインストールされていなかったので、インストールする。

$ sudo apt-get install imagemagick

Imagemagickの使い方

コマンドラインで実行する方法をまとめる。

画像を表示する。

$ display xxx.gif

画面のキャプチャ 表示されているウィンドウを名前指定でキャプチャ

$ import xxx.gif

フレームまでキャプチャ

$ import -frame xxx.gif

画面全体をキャプチャ

$import -window root xxx.gif

フォーマット変換

$ convert xxx.eps  yyy.png

サイズ変換

$ convert -resize  300x300  before.png after.png

元画像の縦横比を無視して変換

$ convert -resize  300x300!  before.png after.png

解像度の指定

$ convert -density 200x200

GIFアニメーション作成 PNG画像がpic01.png,pic02.png,....とあるとき

$ convert -delay 30 pic*.png anime.png

画像を垂直方向に結合

$ convert -append xxx.png yyy.png zzz.png

Imagemagickを使うと、こんな便利な操作が簡単に実現できる。 同一フォルダにある画像ファイルを一括でサイズ変換するbashによるスクリプト

#!/bin/sh
#Usage: resizejpgall.sh 100 200
#現在のディレクトリにあるすべてのjpgファイルを100x200の縦横比でリサイズする。

ver=$1  #リサイズ後の縦比率
hor=$2  #リサイズ後の横比率

for file  in *.jpg
 do
 prefix=${file%%.jpg};
 convert $file -resize ${ver}x${hor} ${prefix}-${ver}x${hor}.jpg;
 printf "$file ---> ${prefix}-${ver}x${hor}.jpg\n";
done

2008年9月9日火曜日

latexのインストール このエントリーを含むはてなブックマーク

Synapticでlatex-env-jaとlatex-extra-jaをインストールする。

emacsのインストール このエントリーを含むはてなブックマーク

Ubuntu 8.04(日本語版ローカライズ デスクトップCD)では、標準でemacsが入っていなかった。以下では、emacsのインストールと設定を記す。

Synapticからemacs-snapshotで検索して出てくるパッケージをすべてインストールする。 また、Anthy-elもインストールする。 .emacsをホームディレクトリに作成して以下を記入する。

;===================================
; Anthy
;    CTRL-\で入力モード切替え
;===================================
(load-library "anthy")
(setq default-input-method "japanese-anthy")
; ひらがなの map を変更する (個別指定)。
(anthy-change-hiragana-map "," "、")
; ひらがなの map を変更する (半角の "." "," を全角の "." "," に割り当てる)。
(anthy-load-hiragana-map anthy-alt-char-map)
;; かな漢字変換入力モードでSpaceを押したとき、半角空白が挿入されるようにする。
(setq anthy-wide-space " ")

;;アンチエイリアス化
(set-default-font "Bitstream Vera Sans Mono-10")
(set-fontset-font (frame-parameter nil 'font)
               'japanese-jisx0208
               '("VL ゴシック" . "unicode-bmp"))

;;スクリプトを保存するとき、chmod+xをする。
(add-hook 'after-save-hook
    'executable-make-buffer-file-executable-if-script-p)

;;カッコ対応をハイライト表示
(show-paren-mode t)

;;; ツールバーを消す
(tool-bar-mode nil)

;;; cursor の blink を止める
(blink-cursor-mode nil)

;;; 表示の行間を拡げる
(setq line-spacing 2)

;;; スクロールバーを右側に表示する
(set-scroll-bar-mode 'right)

;;; 一行が 80 字以上になった時には自動改行する
(setq fill-column 80)
(setq text-mode-hook 'turn-on-auto-fill)
(setq default-major-mode 'text-mode)

;;; ステータスラインに時間を表示する
(display-time)

;;; visible-bell
(setq visible-bell t)

;;; 行番号を表示する
(line-number-mode t)

;; このファイルに間違いがあった場合に全てを無効にします
(put 'eval-expression 'disabled nil)

(setq x-select-enable-clipboard t) ;; Share kill-ring and X clipboard
(mouse-wheel-mode 1) ;; Enable wheel mouse

2008年9月6日土曜日

WindowsとUbuntuのデュアルブート このエントリーを含むはてなブックマーク

本記事では、同一のPCに2つのOSをインストールして、起動時にどちらを使うか選択する、いわゆる、デュアルブートの方法を記す。(注)一般的な方法ではなくて、お手軽に実現できる方法

UbuntuはDebianから派生したディストリビューションで使い勝手がよい。実際に、インストール作業は以下に記す通り、WindowsからGUIでインストールができるので非常に簡単になっている。

  1. Windowsを先にインストールする(既にWindowsがインストールされていれば何もする必要なし)
  2. パーティション変更ツールで、Windowsのパーティションを圧縮して(Cドライブとする)、Ubuntu用のパーティションとして10Gほどを確保する。
  3. 確保したパーティションを「コントロールパネル」の「ディスクの管理」でフォーマットしてDドライブとする。
  4. Wubiというubuntuのインストーラ(Windowsプログラム)をダウンロードする。
  5. Ubuntuのページから最新のisoイメージファイル(日本語版ローカライズドDesktop CD)をダウンロードして、Wubiと同じディレクトリに置く。
  6. インストーラを実行して、インストール先をUbuntu用に確保しておいたDドライブに指定するなど、適切に設定をする。

HDの使用量の確認 このエントリーを含むはてなブックマーク

$df -h

Filesystem            サイズ  使用  残り 使用% マウント位置
xxxxx                   8.4G   3.5G  4.5G  44%   /

オプション

  • h 適切な単位で表示する。
  • k kバイト単位で表示する。
  • a 空のファイルシステムを含めて、すべてを表示する。
  • i iノードの使用量を表示する。

thunderbirdのバックアップ このエントリーを含むはてなブックマーク

メールソフトthunderbirdのバックアップ方法を記す。 (詳しくは、thunderbird helpを参照) メール、パスワード、拡張機能などの個人設定は「プロファイル」に保存されている。 プロフォルダの場所:~/.thunderbird/xxxxxx.default これをバックアップしておけばOK.

tarの使い方 このエントリーを含むはてなブックマーク

本記事では、アーカイブの作成・展開を行うツールのtarを説明する。

ファイルをアーカイブする。

$ tar cvf  xxx.tar   file1 file2

ディレクトリをアーカイブする。

$ tar cvf yyy.tar  dir1 dir2

アーカイブして圧縮も行う。

$ tar cvzf  zzz.tar.gz  file1 file2 dir3

アーカイブを展開する。

$ tar xvf xxx.tar

解凍して、アーカイブの展開もする。

$ tar xvzf  xxx.tar.gz

ちなみに、オプションの意味は以下の通り。

  • c 新規アーカイブ作成
  • x アーカイブからファイルを抽出
  • v 処理したファイルの一覧を詳細に表示
  • f ファイル名を指定
  • z アーカイブをgzipにフィルター

ssh,sftp,scpの使い方 このエントリーを含むはてなブックマーク

本記事では、ssh,sftp,scpの使い方をまとめる。これらは、ネットワーク上のホスト間で暗号化による安全な接続を確立して、操作を行うためのツールです。

sshの使い方

sshはリモートホストにログインして、リモートホスト上のコマンドを実行するためのツールです。暗号化によって安全な接続を確立することができます。

sshで接続するサーバが既にあれば良いのですが、自分でサーバを立てる場合は本サイトの記事「sshサーバの設定」を参照ください。

基本的な書式は次の通りです。リモートサーバ(example.com)のログインアカウント(user)にログインする場合です。

$ ssh user@example.com

もしuser@example.com commandという書式で実行したら、ログインシェルの代わりにコマンドcommandが実行される。

指定できるオプションをいくつか紹介します。

-1
プロトコル1で接続することを強制する。
-2
プロトコル2で接続することを強制する。
-4
IPv4のアドレスを使って接続することを強制する。
-6
IPv6のアドレスを使って接続することを強制する。
-C
すべてのデータ(標準入力、標準出力、標準エラー出力、転送されるX11,TCP接続のデータを含む)の圧縮を要求する。gzipと同じ圧縮アルゴリズムを使う。低速なネットワーク接続を利用しているときは圧縮することが望ましいが、接続が十分高速なときは単に処理速度が低下するだろう(圧縮コストのためだろうか?)。このオプションは大文字のO(オー)であることに注意!
-F configfile
ユーザ毎の設定ファイルを指定する。このオプションが指定されるときは、システムの設定ファイル(/etc/ssh/ssh_config)は無視されるだろう。デフォルトのユーザ設定ファイルは(~/.ssh/config)である。
-f
コマンドを実行する前にsshがバックグラウンドで走ることを要求する。
-i identity
RSAあるいはDSA認証で読み込まれるprivate keyの書かれたファイルを指定する。デフォルトでは、プロトコル1のときは~/.ssh/identityを読み込み、プロトコル2のときはRSA認証は~/.ssh/id_rsaで、DSA認証は~/.ssh/id_dsaである。このファイルはユーザ毎の設定ファイルでも指定しても良い。また複数のファイルをこのオプションで指定することもできる。
-L port:host:hostport
ローカルホスト(クライアント)のポート(port)がリモート側のホスト(host)とポート(hostport)に転送されることを指定する。
-l login_name
リモートサーバへのログインアカウントを指定する。これはユーザ毎の設定ファイルで指定しても良い。
-N
リモートコマンドを実行しないことを要求する。これは、(プロトコル2で)単にポート転送のときにだけ役に立つ。
-n
/dev/nullからの標準入力にリダイレクトする(標準入力から読み込むことを阻止する)。これは、バックグラウンドでsshが走っているときに使われなければならない。リモートサーバでX11プログラムを走らせるときによく使われるトリック。例えば、ssh -n
-p port
リモートサーバの接続ポートを指定する。ユーザ毎の設定ファイルで指定しても良い。
-q
すべての警告や診断メッセージが抑制される"静かな"モード。深刻なエラー(fatal error)だけが表示される。
-V
sshのバージョンを表示して、終了する。
-v
詳細な表示モード。デバッギングメッセージを表示する。
-X
X11転送を有効にする。これはユーザ毎の設定ファイルで指定しても良い。
-x
X11転送を無効にする。

SSHポートフォワード

SSH経由でPOPアクセスするときに、ポート転送を使います。ローカルホストの使われていない1024番以降の任意のポートをリモートサーバのpopサービス用ポート(通常は110)に転送して、TCP接続を確立する方法です。詳細は「Secure POP via SSH mini-HOWTO」を参照ください。

どのように実現するのか具体的に簡単に説明します。まず、SSHポート転送でリモートホストのsleepコマンドを1000秒間実行します。

$ ssh -C -f msingh@popserver -L 11110:popserver:110 sleep 1000

1000秒の間にTCP接続が確立しなかったら、SSHは終了します。一方、1000秒以内にメールクライアントでTCP接続を確立するとTCP接続が確立されている間はSSHで安全に接続されます(もちろん、メールクライアントはローカルホストの11110ポートに接続するよう設定すること)。これで、SSHで確立した安全な接続の下で、メールを取り寄せることができます。この方法は、メールクライアント以外にもIRCクライアントなどでも活用できます(要はIRC用のポートに転送するようにすれば良いわけです)。

1000秒以内にメールクライアントで接続を確立しないといけないというのは面倒ですし、あまり良い方法ではないと思われます。実はfetchmailというメールを取り寄せるツールを使えば、この問題は回避できます。この方法の詳細は「Secure POP via SSH mini-HOWTO」を参照ください。

scpの使い方

scpはネットワークを介してファイルを安全にコピーするツールです。データ転送にはsshを使うので認証が必要ですが、sshと同等の安全性が提供されます。

基本的な書式は以下の通りです。ローカルPCのファイル(file.txt)をリモートサーバ(example.com)の所定のディレクトリ(/home/user/)にコピーするときの書式です。

$ scp file.txt user@example.com:/home/user/

指定できるオプションをいくつか紹介します。

-1
プロトコル1でSSH接続する。
-2
プロトコル2でSSH接続する。
-4
IPv4のアドレスだけを使うように強制する。
-6
IPv76のアドレスだけを使うように強制する。
-C
圧縮して転送する。このオプションは大文字のO(オー)であることに注意!
-F ssh_config
SSHのためのユーザ毎の設定ファイルを指定する。
-i identity_file
RSA認証で読み込まれるidentity(private key)の書かれたファイルを指定する。
-P port
SSH接続するリモートホストのポートを指定する。大文字のP(ピー)である!
-r
指定したディレクトリ以下を再帰的にコピーする。
-v
詳細な情報を表示するモード。

sftpの使い方

sftpはsshを使って安全にファイル転送を行うツールです。

基本的な書式は次の通りです。リモートサーバ(example.com)のログインアカウント(user)に接続する場合です。

$ sftp user@example.com
sftp>

リモートサーバに接続できたら上のようにsftp>というプロンプトが表示されます。

ファイルxxx.txtをダウンロードする。

$ get  xxx.txt

ファイルyyy.txtをアップロードする。

$ put yyy.txt

ファイル転送をするときにいつも困るのが、ファイル名をTAB補完できないことです。解決策をご存知の方は教えてください。

ヘルプを表示する。

$ help

cd, ls, mkdirなどはリモートPCにおける操作を意味する。 一方、lcd, lls, lmkdirなどはローカルPCにおける操作を意味する。

参考になるサイト

TCP/IPアレルギー撲滅ドリル【番外編】 第9回:scpとsftpの違いについて分かりやすく書かれている。

sshの設定 このエントリーを含むはてなブックマーク

本記事では、open sshを使ったssh接続の設定、使い方をまとめる。

sshを使うと、ネットワークを介したコンピュータ同士で安全な情報のやりとりができる。

サーバ側PCの設定

鍵の作成
$ssh-keygen -t rsa1
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home/xxx/.ssh/identity):
Enter passphrase (empty for no passphrase): <---適当にパスワードを入力 

これでホームディレクトリ/.ssh下にidentity(秘密鍵)とidentity.pub(公開鍵)が作成される。

$cat identity.pub authorized.pub  

sshd_configの編集: /etc/ssh/sshd_configで以下の項目を設定する。

protocol 1,2
PermitRootLogin no
RSAAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
AllowUsers yyy  

hosts.allowの編集: /etc/hosts.allowで以下の項目を設定する。

sshd : (ssh接続を許可するIPアドレス)  

hosts.deniedの編集: /etc/hosts.deniedで以下の項目を設定する。

ALL : ALL <---接続を許可したもの意外の接続はすべて拒否する。  

sshサービスの再起動 :

/etc/rc.d/initd/sshd restart  

クライアント側PCの設定

サーバ側で作成した公開鍵identity.pubをクライアント側PCにコピー

$ls /home/yyy/.ssh
identity.pub              #作成した公開鍵

パーミッションの変更

$chmod 600 identity.pub

以上で設定は終了。

使い方

サーバ側PCのIPアドレス確認

$ /sbin/ifconfig

クライアント側PCでssh接続:

$ ssh (ログインするアカウント)@(サーバ側のIPアドレス)

その他

ssh接続に失敗するときは、サーバ側PCでログを確認してみる。例)ディレクトリ/var/log下にあるsecureやmessagesを確認する。

キーワード

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

過去の記事

過去の記事を月ごとにまとめています。三角印をクリックすると、過去の記事の一覧が表示されます。

筆者について

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