fc2ブログ

ネットで見つけた面白い記事や、役立つのではと感じたネタなどを書いています。

Linux:ディレクトリ以下を再帰的にgrepしたい

特定のディレクトリ以下から、指定した文字列を含むファイルを検索したいときのコマンド。
ディレクトリ以下を再帰的にgrepする
find ./ -name '*' | xargs grep "hogehoge"

PHPファイル限定なら
find ./ -name '*.php' | xargs grep "hogehoge"
find ./ -name '*'の部分が対象ファイルで
その結果をxargsで grep "hogehoge"に渡しています。

スバラシイ!
参考:xargs - Wikipedia

スポンサーリンク

vsftpd:接続が遅い場合(30秒かかる)の対処方法(暫定)

Centos5.3にvsftpdをインストールし、外部からFFFTPで接続すると、
接続に30秒かかることで久しぶりにハマりましたが、何とか暫定対応方法を見つけました。

■FFFTPのログ
ホスト xxx.xxx.xxx.xxx (21) に接続しています.
接続しました.
220 FTP ok.
>USER username
331 Please specify the password.
>PASS [xxxxxx]
<<この部分で30秒待つ>>
230 Login successful.
>XPWD
257 "/"


・同じ設定で他のサーバに接続すると問題ないことから、
FFFTPの設定には問題ないと推察。

・vsftpd.confに
pasv_addr_resolve=YES
pasv_address=サーバのグローバルIPアドレス
を指定するも現象は変わらず、
pasv_addr_resolve と
pasv_address を書かなくても一緒。

・vsftpdを再インストールしても変わらず。

・試しにxinetd経由で起動するように変更もしてみたけど一緒。

・別の外部IPから接続テストをしても同じ。

・/etc/resolv.conf にプロバイダのDNSサーバを指定しても、
BINDインストール後に127.0.0.1を設定しても変わらず。

で、最後はproftpdをインストールか?とも考えましたが
/etc/hosts にクライアント側のIPとホスト名を追記してやることで
今までの苦労がうそみたいにさくっと接続できるようになりました。

#vi /etc/hosts
zzz.zzz.zzz.zzz         foo.example.ne.jp
↑クライアント(windowsPC)のIP ↑クライアント(windowsPC)のホスト名


IPアドレスとホスト名については
確認くん にアクセスすれば表示されます。
現在接続している場所(現IP)=IP、
プロバイダー名=ホスト名です。

問題なのはクライアントのホスト名とIPを登録しないとだめって事ですが、
今のところ固定IPからの接続だけなのでこの方法で暫定対応とします。

hostsに追記で直るって事はやっぱり名前解決が原因のような気がするんですケドね。
また引き続き対応方法を調べてみます。

スポンサーリンク

Linux:sendmailのメールキューを削除するには?

以前書いたpostfixのメールキュー削除方法とは別に
sendmailで送信しているメールキューを削除したい状況が発生しました。

で、例のごとく"sendmail キュー 削除 コマンド"のキーワードでググってみるとHITします。

まずは溜まっているキューの状態を確認
# mailq
/var/spool/mqueue (19 requests)
-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient-----------
m7U62Mfd010217 17 Sat Aug 30 15:02 [email protected]
(host map: lookup (example.net): deferred)
[email protected]
.
.
.

Total requests: 19

※内容は例です。

実際のメールはファイルとして存在しており、その保存場所は
/var/spool/mqueue です。

ディレクトリ移動
# cd /var/spool/mqueue

ファイルを確認
# ls -l
-rw------- 1 root root 17 8月 30 15:02 dfm7U62Mfd010217
-rw------- 1 root root 733 8月 30 15:02 qfm7U62Mfd010217

よく見るとmailqの時に表示されていた Q-ID m7U62Mfd010217 と同じidを持つファイルが
それぞれ頭に df と qf が付加されて存在しています。

df が付いている方はメールの本文、
qf が付いている方はメールのヘッダー情報がそれぞれ保存されています。


と言う事で削除対象のメールファイルがどれかを特定できたら削除します。
# rm -f [dq]f(削除したいメールのQ-ID)
上記の例でいくと
# rm -f [dq]fm7U62Mfd010217

これでファイル
dfm7U62Mfd010217 と
qfm7U62Mfd010217 が削除されます。

もう一度mailqコマンドを実行してキューが削除されている事を確認してみて下さい。


と、特定のメールキューを削除する方法は分かったんですが、
メチャクチャ溜まっているメールキューを全部一括で削除したい場合は
どうしたら良いのかも気になって更に調べてみました。

そうすると見つかったのは
# find /var/spool/mqueue/ -type f -exec rm -rf {} \;
または
# rm -f /var/spool/mqueue/*

要は/var/spool/mqueue/ 内のファイルを全部削除しちゃっていいって事ですね^^;
もしかしてと思っていましたが。
ちなみに削除した後sendmailでメールを送信したらちゃんと届きました。


※尚、くれぐれもメールの削除については皆さんの自己責任で行って下さい。

スポンサーリンク

linux:複数ユーザのパスワードを楽に設定(変更)するコマンドchpasswd

大量のユーザを作成する場合など、かなり面倒ですよね。
で探してて見つけたのがこれです。

例えば10ユーザを作成する場合

まずユーザを作成
useradd test1
useradd test2
useradd test3
useradd test4
useradd test5
useradd test6
useradd test7
useradd test8
useradd test9
useradd test10

次にパスワード変更

chpasswd と入力してEnterすると入力待ちになるので
ユーザ名:パスワードの順で入力してEnterします。
chpasswd
test1:pass1
test2:pass2
test3:pass3
test4:pass4
test5:pass5
test6:pass6
test7:pass7
test8:pass8
test9:pass9
test10:pass10

test10:pass10 まで入力したらコマンドを終了する為に
ctrl+dキーで終了します。

ユーザ名とパスワードを上記のように先に用意しておいて
ペーストすれば良いので簡単ですね。

■参考
・Manpage of CHPASSWD
・複数ユーザのパスワードを一括更新(chpasswdコマンド)

スポンサーリンク