03
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--
calendar_bottom
RSS | ATOM | ADMIN

badulog

日々の覚書と雑記
ENTRY TOP
スポンサーサイト

一定期間更新がないため広告を表示しています

スポンサードリンク | - | - | - | - |
ENTRY BOTTOM ENTRY TOP
locate関連

findよりも早く見付けられるlocate。
なぜならデータベースを持っていて、そのDBを検索するから。
findはコマンドが打たれる度にディスクをなめなめするのだ。

■ DBの実態
環境にもよるが、
[root@localhost /]# file /var/lib/slocate/slocate.db
/var/lib/slocate/slocate.db: data

これのようだ。

■ DB更新
cronに設定されていることが多いよう。
[root@localhost /]# cat /etc/cron.daily/slocate.cron
#!/bin/sh
renice +19 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "nfs,smbfs,ncpfs,proc,devpts" -e "/tmp,/var/tmp,/usr/tmp,/afs,/net"

updatedbコマンドを使ってる。-eは除きたいディレクトリ。

■ locate? slocate?
今のディストリビューションはセキュリティ強化されたslocateらしい。
[root@localhost /]# ls -li /usr/bin/locate
925058 lrwxr-xr-x 1 root slocate 7 7月 4 2005 /usr/bin/locate -> slocate
[root@localhost /]# ls -li /usr/bin/slocate
925059 -rwxr-sr-x 1 root slocate 26368 5月 14 2004 /usr/bin/slocate

うむ。シンボリックリンクだ。



ま、DB更新されていて、ファイルを探したいだけならlocate。
色々やりたいか、AM4:00に電源落ちてるならfindか。


baduizm | linux | - | - | - |
ENTRY BOTTOM ENTRY TOP
[bash] ヒアドキュメントで変数展開したくない
bashでヒアドキュメントを使う場合
$ cat <<_EOT_
> $PATH
> $PWD
> _EOT_
/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/sunone/bin
/home/sunone

普通にやると変数展開されてしまう。というかする。
変数展開したくない場合は、
終了文字を「'終了文字'」といったようにシングルクオートで囲むか、「¥終了文字」といったようにバックスラッシュでエスケープする。


こんな感じで
[baduizm@host ~]$ cat << '_EOT'
> $PATH
> _EOT
$PATH


と、ちゃんと$PATHなどとそのまま出力してくれるのだ。
baduizm | linux | - | - | - |
ENTRY BOTTOM ENTRY TOP
[linux] qmailログの時刻表示 - TAI64N形式 -
/var/qmail/log/qmail/current
を普通にless -r するとこんな感じ。
@40000000482ba75612995c34 status: local 1/10 remote 0/20
@40000000482ba756129967ec delivery 89051: success: did_1+0+0/
@40000000482ba756129967ec status: local 0/10 remote 0/20


@で始まるのはTAI64N 形式で表したタイムスタンプとのこと。
いつもの感じで見るには、tai64nlocal コマンドで
# tai64nlocal < /var/qmail/log/qmail/current | less -r
2008-05-15 12:00:28.312040500 status: local 1/10 remote 0/20
2008-05-15 12:00:28.312043500 delivery 89051: success: did_1+0+0/
2008-05-15 12:00:28.312043500 status: local 0/10 remote 0/20

こんな感じで。

baduizm | linux | - | - | - |
ENTRY BOTTOM ENTRY TOP
[linux] ipv6のNDキャッシュ(v4のarpテーブル)をみる方法

ipコマンドでできる
[root@xxx ~]# ip -6 nei
fe80::1 dev bond0 lladdr 00:0b:5f:10:d8:20 router nud stale


ちなみに
"ip [-6] route" ≒ "route [-f inet6]"
であったりipコマンドは実はすごい。

ちなみにのちなみに
≒は「きんじ」で変換できる

baduizm | linux | - | - | - |
ENTRY BOTTOM ENTRY TOP
[linux] manが文字化け
LANGを指定しても、LESSCHARSETを指定しても、manが文字化けしてしまう。

■ 案1 : 環境変数で対処
export PAGER="less -r"

を各自の.bash_profileとかに書いてもらう

■ 案2 : /etc/man.config
[zzzzz@xxx yyy]$ diff /etc/man.config /etc/man.config.org
108,109c108
< PAGER /usr/bin/less -irs
---
> PAGER /usr/bin/less -iRs

大文字R -> 小文字r へオプション変更


今回は案2を採用。

baduizm | linux | - | - | - |
ENTRY BOTTOM ENTRY TOP
[linux] iptablesの現状と上限

まだまだ余裕なので大丈夫だと思うが気になっていたので。

■ iptables の現在のセッション状況
/proc/net/ip_conntrack

■ システム的なセッション最大数
/proc/sys/net/ipv4/ipconntrack_max

ちなみに、
最大値超えたらこんなログが出るらしい
ip_conntrack: maximum limit of 65536 entries exceeded

いまいまのセッション数は↑に書いたのを使って
cat /proc/net/ip_conntrack | wc -l

変更は
# vi /etc/sysctl.conf
net.ipv4.ip_conntrack_max = ******
# sysctl -p

もしくは一時的なら
echo '*****' > /proc/sys/net/ipv4/ip_conntrack_max


baduizm | linux | - | - | - |
ENTRY BOTTOM ENTRY TOP
[linux] lsコマンドの色設定とeval
ここにあり。

要は、自分用の"~/.dir_colors"を作って置いて、
それを読み込むのだ。
で、その読み方が
eval `dircolors ~/.dir_colors -b`


なぜevalと思ったら、
[xxxxx@localhost baduizm]$ dircolors ~/.dir_colors -b
LS_COLORS='no=00:fi=00:di=01;33;01:ln=01;35:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:';
export LS_COLORS


evalで評価させるためのシーケンスを出すコマンドのようで。
納得。

ついでに、以前、
「リダイレクト出来ないエラーをリダイレクトしたい」
時には、一旦コマンドを作ったが、

[xxxxx@localhost xxxxx]$ ls -tlr aaa.txt
-r--r--r-- 1 xxxxx xxxxx 0 3月 17 18:20 aaa.txt
[xxxxx@localhost xxxxx]$
[xxxxx@localhost xxxxx]$ ls hogehogege >& aaa.txt
bash: aaa.txt: 許可がありません
[xxxxx@localhost xxxxx]$ ls hogehogege >& aaa.txt > bbb.txt
bash: aaa.txt: 許可がありません
[xxxxx@localhost xxxxx]$ ls bbb.txt
ls: bbb.txt: そのようなファイルやディレクトリはありません
[xxxxx@localhost xxxxx$ eval "ls hogehogege >& aaa.txt" >& bbb.txt
[xxxxx@localhost xxxxx]$ cat bbb.txt
bash: aaa.txt: 許可がありません
[


evalで出来るんだなぁ。
baduizm | linux | - | - | - |
ENTRY BOTTOM ENTRY TOP
[linux] mallocとmmapとbrk
malloc(ライブラリ関数)はメモリ確保するとき、どのシステムコール使ってるのかな?
と思い、あれこれ。。

■ 結論(glibcのmallocに関して):
・サイズが小さい時はbrk()
・サイズが大きいときはmmap()
・境界は・・微妙
・brk()はヒープを順に伸ばしていくsystemcall
→伸ばせないときは小さくてもmmap()か。(予想)

■ テスト
ソース抜粋(selectはstrace結果の区切りのためだけ。。)
select ( 1, NULL, NULL, NULL, &tv);

pp = (char *)malloc( size );
memset( pp, 0xff, size);

select ( 1, NULL, NULL, NULL, &tv);

free (pp);

↑の128K, 1Mのパターンでmallocしてみる。
straceで実行

■結果
128K
write(1, "size : 128000byte¥n", 18) = 18
select(1, NULL, NULL, NULL, {1, 0}) = 0 (Timeout)
brk(0) = 0x8049754
brk(0x8089754) = 0x8089754
brk(0) = 0x8089754
brk(0x808a000) = 0x808a000
select(1, NULL, NULL, NULL, {1, 0}) = 0 (Timeout)
brk(0) = 0x808a000
brk(0) = 0x808a000
brk(0x806a000) = 0x806a000
brk(0) = 0x806a000
munmap(0xb75e7000, 4096) = 0
exit_group(0) = ?


1M
write(1, "size : 1000000byte¥n", 19) = 19
select(1, NULL, NULL, NULL, {1, 0}) = 0 (Timeout)
mmap2(NULL, 1003520, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb73aa000
select(1, NULL, NULL, NULL, {1, 0}) = 0 (Timeout)
munmap(0xb73aa000, 1003520) = 0
munmap(0xb75e7000, 4096) = 0
exit_group(0) = ?


と言うことでサイズによって違うのが見えた。
当然mallocもfreeも異なる
mmap, munmap, brkの引数になってるアドレスについては。★課題かな。

■ 参考
じゃどっちが良いの?というと、自由度高いのはmmap、コスト小さいのはbrkのよう。
こことか、ここ

あれ。。。memsetは??


baduizm | linux | - | - | - |
ENTRY BOTTOM ENTRY TOP
[linux] arping

■ そもそもarpingとは
ARPリクエストを投げる

■ arpingのsyntax
arping [-f] [-q] [-D] [-U] [-A] [-c 送信回数] [-w タイムアウト値] [-I LANアダプタ名] [-s IPアドレス] 対象IPアドレス

■ オレの使い方
 /usr/sbin/arping -c 2 -U -b -q -I [IF名] -s [FL_IP] [FL_IP]

-c : 送信回数
-U : 対象IPアドレスのARPキャッシュを強制的に更新する。
-b : MACブロードキャストだけを投げる。
通常はarpingはブロードキャストを投げた後、unicastに移行する。(イマイチ・・)
-q : 標準出力出さない
-I [IF名] : ARP要求を送信するIF名
-s [FL_IP] : ARP要求を送信するときの送信元IPアドレス
[FL_IP] : ARP要求を送信する対象のIPアドレス(として自分自身を設定している)

■ ポイント
ポイントは最後の対象アドレスを自分自身にしていることと、-Uオプション
-Uオプションは、
対象IPアドレスのARPキャッシュを強制的に更新する。
arpingコマンドを実行する場合は通常,対象IPアドレスで指定したあて先ホストのARPキャッシュを更新するが,このオプションを指定すると対象IPアドレスに自身のIPアドレスを指定することで,そのIPアドレスのARPキャッシュをもつ全てのホストのARPキャッシュを更新する。
このオプションを指定すると,対象IPアドレスを自身のIPアドレスにしたARP要求パケットをブロードキャストで送信するが,ARP応答パケットは返ってこない。下の「-A」オプションと同時に指定すると,-Aオプションのほうが優先され,ARP応答パケットがブロードキャストで送信される。

らしい。ということで、
「対象IPアドレスを自身のIPアドレスにしたARP要求パケットをブロードキャストで送信する」
ができている。
続きを読む >>
baduizm | linux | - | - | - |
ENTRY BOTTOM ENTRY TOP
[linux] メモリ使用率の話
今回、メモリ使用率はtopコマンドの実行結果から算出した。

■ topの表示項目

>Mem: 16416500k total, 4497192k used, 11919308k free, 149312k buffers
・MEM(total) : 全メモリ量(不変). (used + free) に等しい
・MEM(used) : 使用中のメモリ量
・MEM(free) : 未使用の量
・MEM(buffers) : バッファキャッシュに割り当てたメモリ。ブロックデバイス用のキャッシュ。
・SWAP(cached) : ファイルキャッシュ(ページキャッシュ)に割り当てたメモリ。ファイルに対するキャッシュ。

その他の項目についてはこちらのmiracleのページ。

キャッシュってなんじゃい?はこちら

■ 計算式
- 自由に使えるメモリ量:MEM(free)+MEM(buffers)+SWAP(cached)
- 使用メモリ量 :MEM(total) - ( MEM(free)+MEM(buffers)+SWAP(cached) )

一般にこのようにするらしい。
なぜなら、↑のmiracleのページにも
一般にLinuxは使い続けるほど、メモリをキャッシュに割り当てます。そのため使い続けるほどfreeの値はゼロに近づきます。この値が少ないからといって空きメモリがないわけではないことに注意してください。

と記述あり。

■ ついでにfreeコマンドの表示について
# free
total used free shared buffers cached
Mem: 4039224 4019364 19860 0 777276 2745600
-/+ buffers/cache: 496488 3542736
Swap: 2048276 2944 2045332

free(1)の -/+ の行の2つの値は、
1. usedからバッファキャッシュ・ファイルキャッシュを差し引いた量(内容を捨てるわけにはいかないメモリ)
2. freeにバッファキャッシュ・ファイルキャッシュを加えた量 (必要があれば使えるメモリ)
を示す。この2.が、↑の計算式の「自由に使えるメモリ量」に値する。

■ ところが・・・
miracleの見解によると、topコマンド結果から上記の計算式で出した値にはブレがあるらしい。miracle曰く、/proc/meminfoのCommited_ASが良いとのこと。

■ 見るべき激アツな参考Web一覧
1. miracleのページ
2. キャッシュとかについてまとめたブログ ★バッファキャッシュとかの説明あり★
3. 日経linuxのコラム
4. バッファキャッシュ、ページキャッシュの説明

- 以上 -
baduizm | linux | - | - | - |
ENTRY BOTTOM