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

2009年3月21日土曜日

システムの情報を取得する。 このエントリーを含むはてなブックマーク

本記事では、カーネルのバージョンなどシステムの情報を取得するコマンドunameを説明する。

書式

$ uname [オプション]

オプション

オプションは以下の通り

-a,--all
すべての情報を表示する。
-s,--kernel-name
カーネル名を表示する。
-n,--nodename
ネットワークノードのホスト名を表示する。
-r, --kernel-release
カーネルリリースを表示する。
-v, --kernel-version
カーネルバージョンを表示する。
-m, --machine
マシーンハードウェア名を表示する。
-p, --proseccor
プロセッサタイプまたはunknownを表示する。
-i, --hardware-platform
ハードウェアプラットフォームたまはunknownを表示する。
-o, --operating-system
オペレーティングシステムを表示する。
--help
unameのヘルプを表示する。
--version
unameのバージョンを表示する。

2009年3月9日月曜日

あるディレクトリ以下に対して何々する方法 このエントリーを含むはてなブックマーク

本記事では、指定したディレクトリとその子ディレクトリ以下に存在する、とあるファイルたちに対して同じ操作をするための方法をまとめる。

状況説明

どのような状況でこういった操作が必要となるか?例えば、手持ちのjpegファイルを別の場所にひとまとめにする場合である。次のような状況だとちょっと作業が大変そうに思われる。

基点になるディレクトリとして~/picturesを使っていて、その下に種類や撮影場所ごとにディレクトリを作成してjpegファイルを格納してある場合。さらに、テキストファイルなど別の種類のファイルも格納してある場合。

解決法

簡単に解決する方法としてファイルグラブを使う方法が考えられる。~/picturesの下にあるディレクトリの深さが高々2個ならば次のようにたった1行のコマンドで十分である。

$ mv ~/pictures/{,*/,*/*/}*.jpeg ~/tmp

上のコマンドの意味は、「~/picture/*.jpeg, ~/picture/*/*.jpeg, ~/picture/*/*/*.jpegを~/tmpに移動せよ」である。しかし、あらかじめディレクトリの深さの上限が分かっていない場合や調べるのが面倒な場合はどうすれば良いだろうか?私はファイルグラブで解決する方法は知らないのだが、findコマンドを使えばこれまたたった1行のコマンドで十分である。

$ find ~/picture -name '*.jpeg' -print0 | xargs -0 mv {} ~/tmp

findコマンドの詳細は本サイトの記事「findコマンドでファイルを探す」をご参照ください。このコマンドの意味は、「~/.picture以下に対して、jpegという拡張子を持ったすべてのファイルに対して、それらを~/tmpに移動させよ」である。

思ったこと

上の説明でファイルグラブによる良い方法を知らないと言ったことに関して。ネットで調べてみると「UNIXの部屋 コマンド検索: ファイルグロブ」というサイトで本記事と似たような説明があるが、ディレクトリの深さが任意の場合の方法が書かれていない。ファイルグラブによるうまい解決方法はないのだろうか?それとも、あまり知られていないだけだろうか?

/etc/hosts.allowでのサブネットマスクについて このエントリーを含むはてなブックマーク

本記事では、/etc/hosts.allowでのサブネットマスクの指定の仕方について注意事項をまとめる。

hosts.allowとは

/etc/hosts.allowは、ローカルホストへのアクセス制御を規程する設定ファイルで、/etc/hosts.denyと対になるものである。通常、/etc/hosts.denyですべてのホストからのアクセスを拒否して、/etc/hosts.allowに許可するホストを個別的に記述することが多い(設定の詳細は、本記事「SSHサーバの設定」のセキュリティの設定(Tcp wrappersを用いたアクセス制限)という節にまとめている。)。

サブネットマスクの指定方法

サブネットマスクは、ipアドレスのネットワーク部の長さを表すもので、192.168.0.0〜192.168.255.255の範囲のipアドレスは192.168.0.0/16というように表される。ちなみに、2進数で表すと次のようになる。

11000000.10101000.00000000.00000000 から 11000000.10101000.11111111.11111111 まで

16は先頭から16ビット目までがネットワーク部であることを表していて、この表記によってそのネットワークに属するすべてのホストを表すことができる。

本題の/etc/hosts.allowでのサブネットマスクの指定だが、例えばsshサービスにアクセスできるホストのipを制限する場合には次のように書けば良いのかと勘違いしていたが、間違いであることに気づいたのでメモしておく。

ssh : 192.168.0.0/16 <---誤り(と思う) 

centosで、$man hosts.allowとして確認してみたら、アクセス制御で実装されているパターンについて書かれていた。ネットマスクを使う場合:

An expression of the form ‘n.n.n.n/m.m.m.m´ is interpreted as a ‘net/mask´ pair. An IPv4 host address is matched if ‘net´ is equal to the bitwise AND of the address and the ‘mask´. For example, the net/mask pattern ‘131.155.72.0/255.255.254.0´ matches every address in the range ‘131.155.72.0´ through ‘131.155.73.255´.

ssh : 192.168.0.0/255.255.0.0

あるいは、もっと簡単な書き方もできる。

ssh : 192.168.

A string that ends with a ‘.´ character. A host address is matched if its first numeric fields match the given string. For example, the pattern ‘131.155.´ matches the address of (almost) every host on the Eindhoven University network (131.155.x.x).

2009年3月8日日曜日

yum.cronでエラー このエントリーを含むはてなブックマーク

cronでyumによる自動アップデートをさせるときに

Error: Cannot retrieve repository metadata (repomd.xml) for repository: base. Please verify its path and try again

というエラーが出てうまく動かないので、その原因を調べて解決策をまとめる。

私の環境ではプロキシ経由でインターネットに接続しているのだが、 cronによって定期的に実行されるスクリプト/etc/cron.daily/yum.cronは、~/.bashrcで設定しているプロキシを読み込んでいないらしい。なので、/etc/yum.cronに直接次の行を挿入する

proxy=プロキシサーバ

2009年2月28日土曜日

findコマンドでファイルを探す このエントリーを含むはてなブックマーク

本記事では、findコマンドでファイルを探す方法をまとめる。

書式

基本的な書式は

$ find dir exp
である。ここで検索を開始するディレクトリをdir、検索式をexpと書いています。

例えば、ホームディレクトリ以下にあるすべてのhtmlファイルを探したいときは

$ find ~/ -name '*.html'
とすればよい。このようにファイル名で探したいときは、nameオプションを付けて、ファイル名を表す式を'*.html'などのように書けば良い。

他にも、ホームディレクトリ以下にあるファイルで、ちょうど2日前にアクセスされたすべてのファイルを探すときには

$ find -atime 2
とすれば良い。atimeオプションは最後にアクセスされた日を指定するときに使う。その後に指定する数で、日にちを指定する。+や-を数の前に付けることで、「より大きい」、「より小さい」という意味になる。例えば、2日以内にアクセスしたファイルの場合は
$ find -atime -2
となる。

オプション

使用可能なオプションを少し紹介します。

-atime n
ファイルが最後にアクセスされたのがちょうどn日前である。
-mtime n
ファイルが最後に修正されたのはちょうどn日前である。
-newer file
ファイルはfileより後に修正された。
-size n
ファイルの長さはnブロック(1ブロックは512バイト)である。
-name nam
ファイル名はnamである。
-perm p
ファイルのアクセスモードはpである。
-user usr
ファイルの所有者はusrである。
-group grp
ファイルのグループ所有者はgrpである。

実行例を少し紹介します。 ホームディレクトリ以下にある1Mバイトより大きいのファイルで、10日以内にアクセスされたすべてのファイルを探す。

$ find ~/ -size +2048 -atime -10

論理式

AND,NOT,ORおよびカッコによるグループ化を表現できます。上述のオプションをそのまま列挙するとすべてのオプションを満たすファイルを探しますから、明示的にANDは書きません。

o(アルファベットの小文字のオー)オプションはオプション同士のOR演算を表します。例えば、goo1ユーザあるいはgoo2ユーザの所有するファイルを探すには

$ find -user goo1 -o -user goo2
とします。

オプションの前にエクスクラメーションマーク(!)を書くと、NOTを表します。例えば、ファイル名がtest.wav以外のwavファイルを探すには

$ find ! -name test.wav -name *.wav

とします。ただし、エクスクラメーションマークとnameオプションの間はスペースで間隔をあけてください

バックスラッシュ丸カッコあるいは円マーク丸カッコで囲むことで、グループ化されます。例えば、goo1あるいはgoo2ユーザの所有するwavファイルを探すには次のようにします。

find \( -user goo1 -o -user goo2 \) -name *.wav

パーミッション

上述のオプション一覧に示されているようにpermオプションによって、パーミッションによるファイル探索を行います。その引数として与えられる数値(例えば、644、すなわちrw-r--r--のこと)によって、そのパーミッションに設定されているファイルを探します。

$ find . -perm 644

これを実行するとカレントディレクトリ(.)以下にあるファイルでパーミッションが644となっているものを列挙します。

数値の前にハイフンがあるときは、少なくとも指定アクセスモードを満たすファイルを検索する。例えば、ルートディレクトリ以下にある、誰でも書き込み可能なファイルのリストを表示するには次のようにします。

$ find / -perm -002

すなわち、ファイルのパーミッションでその他のユーザ(o)の書き込み権限が許可されているファイルを列挙します。

動作オプション

指定した検索式にマッチしたすべてのファイルに対して、一定の動作を指定することができます。指定できる動作オプションをいくつか紹介します。

-print
パス名を表示する。
-exec cmd
コマンドcmdを実行する。
-xdev
検索を開始ディレクトリのファイルシステムに限定する。
-prune
遭遇したディレクトリには降りない。

ユーザgoo1のホームディレクトリ以下にあるすべてのファイルに対して、所有ユーザをgoo2、所有グループをgoo2に変更するには次のようにします。

$ find /home/goo1 -exec chown goo2 {} \; -exec chgrp goo2 {} \;

コマンドの書式{}は、検索式にマッチしたファイルのパス名を示すために使われます。波カッコの中にはスペースなど入れないでください。また、コマンドの終わりにはバックスラッシュセミコロンを書いてください

最後に、アルマジロ本に載っていたおもしろい応用例を1つ紹介します。インストール作業などのような一定の作業の間で修正、追加されたファイルを全部表示するには、次のようにします。まず、作業の前にファイルstarting_timeというを作成します

$ touch /tmp/starting_time

そして、何らかの作業を行った後に、次のコマンドを実行すれば良いのです。

$ find / -newer /tmp/starting_time

ただし、消去されたファイルは直接表示されませんが、修正されたディレクトリがリストアップされます。

参考文献

Unixシステム管理のVolume1の3章1節「一般コマンドを最大限に活用する」に詳しく書かれています。findは単にファイルを探すだけでなく、システム管理上とても便利なツールとして使えることが分かりました。紹介されていたのは、

  • ディスクの使用を監視する。
  • セキュリティ問題を起こす可能性のあるファイルのロケーションを突き止める。
  • 再帰的なファイル操作を実行する。
といった使い方です。

キーワード

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

過去の記事

筆者について

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