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

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は単にファイルを探すだけでなく、システム管理上とても便利なツールとして使えることが分かりました。紹介されていたのは、

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

2009年2月18日水曜日

cronのアクセス制御 このエントリーを含むはてなブックマーク

本記事では、定期的にプログラムを実行するcronのアクセス制御について説明する。

アクセス制御

まず、crontabはrootしか編集できないようになっているかパーミッションを確認する。そして、cron.allowとcron.denyにそれぞれcronの使用を許可するユーザと禁止するユーザを書き込む。

例えば、goo1とgoo2ユーザだけにcronを許可して、それ以外のユーザには許可しない場合は次のように編集する。

# /etc/cron.allow
goo1
goo2
# /etc/cron.deny
ALL

2009年2月17日火曜日

ログアウト処理 このエントリーを含むはてなブックマーク

本記事では、ユーザがログアウトした際に実行する処理についてまとめる。

bashを使っている場合、ホームディレクトリに.bash_logoutというファイルがある(なければ作成する)。このファイルには、ログアウトした際に、実行する処理を記述する。 bashのコマンド履歴および端末の画面をクリアするには

# ~/.bash_logout
history -c
/usr/bin/clear
と書いておけば良い。ちなみに、ログインする際に、実行する処理は.bash_loginに書く。

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

本記事では、manコマンドの使い方をまとめる。

hogeという名前のコマンド、関数、ユーティリティの使い方を調べる。

$ man hoge
hogeにマッチするマニュアルを探して、一番最初に見つかったものを表示する。

キーワード「passwd」でコマンドおよび要約文を調べる。

$ man -k passwd
afppasswd (1)        - netatalk パスワード管理ユーティリティ
chpasswd (8)         - パスワードファイルをバッチ処理で更新...
cvpasswd (1)         - CVSup の認証のためにパスワードにスクラ...
gpasswd (1)          - /etc/groupファイルを管理する
passwd (1)           - ユーザパスワードを変更する
passwd (5)           - パスワードファイル
passwd2des (3)       - RFS パスワード暗号化
pwupdate (8)         - NIS マップ passwd および shadow を更新する
rpc.yppasswdd (8)    - NIS パスワード更新デーモン
yppasswd (1)         - NIS データベースのパスワードを変更する
yppasswdd (8)        - NIS パスワード更新デーモン
chgpasswd (8)        - update group passwords in batch mode
exim4_passwd (5)     - Files in use by the Debian exim4 packages
exim4_passwd_client (5) - Files in use by the Debian exim4 packages
lppasswd (1)         - add, change, or delete digest passwords.
mkpasswd (1)         - Overfeatured front end to crypt(3)
pam_localuser (8)    - require users to be listed in /etc/passwd
passwd (1ssl)        - compute password hashes
smbpasswd (5)        - The Samba encrypted password file
smbpasswd (8)        - change a user's SMB password
update-passwd (8)    - safely update /etc/passwd, /etc/shadow and /etc/group
番号はマニュアルのセクション番号である。ちなみに、マニュアルのセクション番号は以下の通りである。
   
       1   実行プログラムまたはシェルのコマンド
       2   システムコール (カーネルが提供する関数)
       3   ライブラリコール (システムライブラリに含まれる関数)
       4   スペシャルファイル (通常 /dev に置かれている)
       5   ファイルのフォーマットとその約束事。例えば /etc/passwd など
       6   ゲーム
       7   マクロのパッケージとその約束事。例えば man(7), groff(7) など
       8   システム管理用のコマンド (通常は root 専用)
       9   カーネルルーチン [非標準]
詳しいことは
$ man man
で調べれる。

パスワード設定ファイルpasswdのマニュアルを読む(上の結果から、passwdというキーワードでは、passwdコマンドもマッチするのに注意)。そのためには、セクション番号を指定する。

$ man 5 passwd

参考になるサイト

2009年2月14日土曜日

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

本記事では、centOS 5.2のDVIファイルビューアについてまとめる。Ubuntuでは、xdviで閲覧できていたが、centOSでは日本語のDVIファイルをxdviで閲覧したら(フォント関係の理由により)クラッシュしてしまう。そこでpxdviを使うと問題なく表示できた。

DVIファイルをPSファイルに変換するツールdvipsもた同じ。日本語のDVIファイルはpdvipsを使ってPSファイルに変換すること。ただし、変換したPSファイルを印刷するかどうかで違いがある。例えば、英語のDVIファイルは

$ dvips test-en.dvi
によって、変換されたpsファイルはプリンターにすぐに送られる。一方で、日本語のDVIファイルは
$ pdvips test-ja.dvi
によって、test-ja.psというPSファイルはできるが印刷はされない。印刷するときは、
$ lpr test.ja.ps
などで、明示的に印刷コマンドを打つこと。

キーワード

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

過去の記事

筆者について

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