本記事では、ターミナルでlessで日本語の文字化け対策についてまとめる。
lessはファイルを読み込むためによく使うコマンドだが、デフォルトでは日本語のテキストは文字化けしてしまう。代わりにlvコマンドを使えば良い。
~/.bashrcに次の行
alias less='lv'を挿入して、lessのエイリアスをlvとしておく。
こうすると、(代わりにlvが実行されるので)今まで通りlessと入力してファイルの閲覧ができる。
Linuxユーザの立場から、役立つ情報や困ったときの解決方法を分かりやすく、かつ簡潔に記事にまとめています。主に、Ubuntu 8.04(→9.04)やCentOS 5.2(→5.3)で確認したことですが、他のディストリビューションでも応用できると思います。内容は(1)設定ファイルの書き方(2)役立つソフトウェア紹介やインストール方法(3)便利なコマンドの使い方や活用例(4)困ったときの解決方法です。このページの末尾にキーワード別で記事を分類してあります。また、真上の「ブログ検索」フォームからブログ内の記事を検索できます。
本記事では、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などで見られたが、直接 解決につながる報告を見つけることができなかった。
何が原因なのかよく分からないので、一度まっさらな状態にしてゼロから確認してみようと思った。まずGPartedというパーティションを切るツールをsynapticからインストールする。これはGUIで簡単にパーティション作業ができるので非常に便利なツールである(なぜか、「すべてのデバイスをスキャン中…」というところでやたらと時間がかかるのが難点)。
このアプリで、既存のファイルシステムを削除してから、新規ファイルシステムとしてfat32を選択する。パーティションが切れたら、念のためフォーマットもしておく。また、HDDのデバイス名(図では、/dev/sdb1となっている)を確認しておく。
/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に変わっていたので、結局ダメだった。
パーティションの切り方は、ファイルシステムをext3に指定することを除いて上とまったく同じ。
マウントポイントの登録は今度は
/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)」
次のスクリプトの処理手順は
本記事では、シェルスクリプトでの標準入出力のリダイレクトについてまとめる。
標準出力は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
(注)まず初めにパイプでコマンド同士の入出力が結合される!その後にリダイレクトが評価される。
参考サイト:「シェルを使おう -応用編-」に非常に分かりやすい説明が載っている。
本記事では、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を実行するとエラーが発生する症状の解決法をまとめる。
原因は、リポジトリの公開鍵が登録されていないことにある。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回実行しないと適用されなかった)
お気に入りのWebサイト(一部、外部サイト)へのリンクの一覧です。