例によって、備忘録。CentOS 5系にて
※ わかりにくい箇所を書き直した 2015.10.13
uuencodeが入ってなければInstall
$ sudo yum install sharutils
mailコマンドでメールが送信できる前提での、
動作サンプル:本文+添付ファイル
$ (echo "mail_body"; uuencode file_path file_name) | mail -s 'mail_title' mail_address
見にくいので、ちょっと補足すると、
mail_body : 本文
file_path : 添付するファイルのpath
file_name : 添付ファイル名
mail_title : メールの件名
mail_address : 宛先メールアドレス(to)
ちなみに、日本語とか文字化けするので、
mailコマンドに渡す前に、nkf -j をパイプで通すとよい。
2013年4月18日木曜日
2013年4月16日火曜日
シェルスクリプトで自身のフルパスを取得
T/Oです。
いっつも忘れるので。
[bash]
#!/bin/sh
hoge=$(cd `dirname $0`; pwd)/`basename $0`
echo $hoge
[/bash]
こんな感じで。
いっつも忘れるので。
[bash]
#!/bin/sh
hoge=$(cd `dirname $0`; pwd)/`basename $0`
echo $hoge
[/bash]
こんな感じで。
2013年3月26日火曜日
Linuxでのhostsの反映
前に、macでのhostsの変更の反映メモを書いたけど、Linuxでも似たような話があるので、メモ代わりに。
Linuxはリゾルバキャッシュがありましぇーん、とかよく(古い)記事とかであったりしますが、最近のディストロだとだいたい、nscdっていうネームサービスキャッシュデーモンたんが動いており、時々、hostsやらpasswdやらの変更が反映されないみたいな悪さをしてくれやがります。(LDAP関連のトラブルでもよくでてくるんじゃないかな?)
余談だけど、最近のFreeBSDでも動いてるらしい(余談おわり)。
詳細は「man nscd」してもらえればいいんですが、とりあえずhostsのキャッシュをクリアしたいとき(nscdの再起動:nscd restartでもいけるけど)。
とかすればおk
Linuxはリゾルバキャッシュがありましぇーん、とかよく(古い)記事とかであったりしますが、最近のディストロだとだいたい、nscdっていうネームサービスキャッシュデーモンたんが動いており、時々、hostsやらpasswdやらの変更が反映されないみたいな悪さをしてくれやがります。(LDAP関連のトラブルでもよくでてくるんじゃないかな?)
余談だけど、最近のFreeBSDでも動いてるらしい(余談おわり)。
詳細は「man nscd」してもらえればいいんですが、とりあえずhostsのキャッシュをクリアしたいとき(nscdの再起動:nscd restartでもいけるけど)。
/usr/sbin/nscd -i hosts
とかすればおk
2012年11月30日金曜日
dateコマンドで現在時刻をミリ秒まで出力(UnixTimeで)
環境はLinuxで。
今どきのdateコマンドは%Nでナノ秒まで出るっぽい。
なのでそれを割ってやる。
--dateつけると任意の日時を出力できるよ。
今どきのdateコマンドは%Nでナノ秒まで出るっぽい。
なのでそれを割ってやる。
$ echo $(printf '%ld' $(expr `date +%s%N` / 1000000))追記
$ 1354169981849
--dateつけると任意の日時を出力できるよ。
$ echo $(printf '%ld' $(expr `date +%s%N --date "2000-11-11 12:00"` / 1000000))
2012年7月7日土曜日
5分で立てるweb proxy
恒久的に使うのであればきちんとセキュリティを考慮しましょう。。。
とエクスキューズしつつ、5分で立てるsquidによるhttp proxyです。
目的はとりあえずhttpが通らない環境から通したいってだけです。当たり前だけど、ホストAとホストB間はルーティングされているものとします。
/etc/squid/squid.conf を以下の用に
すきっど起動
んで、クライアント側に串を通して、確認。
おしまい。(∩´∀`)∩ワーイ
とエクスキューズしつつ、5分で立てるsquidによるhttp proxyです。
目的はとりあえずhttpが通らない環境から通したいってだけです。当たり前だけど、ホストAとホストB間はルーティングされているものとします。
環境
- OS
- CentOS 6.2
- HOST
- A:インターネットに出れる子:192.168.0.1
- B:インターネッツに出れない子:192.168.100.x
流れ
squid入れる$sudo yum install squid
/etc/squid/squid.conf を以下の用に
#使うポートの設定と、許可するネットワークの設定を環境に合わせる。
http_port 8888
acl hogenet src 192.168.100.0/255.255.255.0
http_access allow hogenet
http_access deny all
(他省略。あとは、環境に応じてキャッシュだったり、セキュリティの設定だったり。)
すきっど起動
/etc/init.d/squid start
んで、クライアント側に串を通して、確認。
$ export http_proxy="http://192.168.1.0:8888"
$ wget www.example.com
おしまい。(∩´∀`)∩ワーイ
2012年6月19日火曜日
rsyncの備忘録
よく使うところを中心に。
[bash]
rsync -av --progress --partial --append --bwlimit=10240 ${IP_ADDRESS}:/hoge/fuga/ /hoge/fuga >> /tmp/hoge.log 2>&1
[/bash]
素敵なオプションたち
よくある使い方
rsync -avz srcDIR/ dstDIR
- -a
- 元の属性を維持(できる範囲で)
- -v
- 詳細表示
- -z
- 転送を圧縮(CPUを割りと食うので注意)
ちょっと便利な使い方
- --bwlimit
- 帯域制限。例えば、--bwlimit=10240 とかで10Mbps制限
- --progress
- 転送中の情報を表示する。-vと組み合わせて使おう
- --partial
- 通常では転送が中断したら、部分的に転送されたファイルを削除する。--partial オプションを使うと、後の転送時にファイルの残り分を転送して高速化するように、部分的なファイルを保存してくれる。
- -P
- progress + partial
- --append
- 通信が切れた時に途中から再開してくれる。便利。
使用例
[bash]
rsync -av --progress --partial --append --bwlimit=10240 ${IP_ADDRESS}:/hoge/fuga/ /hoge/fuga >> /tmp/hoge.log 2>&1
[/bash]
その他
- 時間がかかるときは、--daemon してもいいですが、個人的にはscreenとかnohupとか使うのが癖になってます。
参考にしました
- man rsync
- rsyncで再開可能なファイル転送
- rsyncのちょっとイイ話
2012年6月13日水曜日
atime備忘録(古い情報)
ふわっとしてたので備忘録です。最近のディストリで検証とかできたらいいなぁ(遠い目)
UNIX/Linuxではファイルに関して3つの時刻を記録しています。
ファイルに関する時刻
UNIX/Linuxではファイルに関して3つの時刻を記録しています。
- atime
- 最終アクセス時刻
- ctime
- 最終変更時刻
- mtime
- 最終更新時刻(i-node管理)
2008年にネットで話題になってた話
- ITProに、2002年の雑誌記事が、2008年に突如公開される。これ
- 検証する人あわらる。atime関連マウントオプション使用時のディスク性能比較
- 革命の日々の人が「relatimeがどこで実装されているのか調べてみた」という記事を公開
- dankogaiが、「unix - atimeはいつ更新される?」という記事を公開
- 革命の日々の人がそれにこたえて、「atimeはいつ更新される? のつづき」を公開
その他参考情報
2012年6月1日金曜日
非対話型でパーティションを切る話
今どきのLinuxだと、fdiskというより、partedでいいですよね。
partedはいろいろ良い所がありますが、「--script(-s表記も同じ)」をつけると、非対話型モードとしてバッチ処理できるのがとても便利です。
下記の例はCentOS 5系での動作になります。
使用例
[bash]
#sdbのパーティションを表示
/sbin/parted --script /dev/sdb 'print'
#ディスクラベルの設定。2TB以上とかだと「mklabel gpt」とかにすればよいですね。
/sbin/parted --script /dev/sdb 'mklabel msdos'
#パーティションを作成します
/sbin/parted --script /dev/sdb 'mkpart primary 0 -0'
#適当なファイルシステムでフォーマットする
/sbin/mkfs.ext3 /dev/sdb1
[/bash]
実行例
[bash]
# /sbin/parted --script /dev/sdb 'mklabel msdos'
# /sbin/parted --script /dev/sdb 'mkpart primary 0 -0'
# /sbin/mkfs.ext3 /dev/sdb1
# /sbin/parted --script /dev/sdb 'print'
Model: xxx (scsi)
Disk /dev/sdb: 300GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 0.51kB 300GB 300GB primary ext3
[/bash]
partedはいろいろ良い所がありますが、「--script(-s表記も同じ)」をつけると、非対話型モードとしてバッチ処理できるのがとても便利です。
下記の例はCentOS 5系での動作になります。
使用例
[bash]
#sdbのパーティションを表示
/sbin/parted --script /dev/sdb 'print'
#ディスクラベルの設定。2TB以上とかだと「mklabel gpt」とかにすればよいですね。
/sbin/parted --script /dev/sdb 'mklabel msdos'
#パーティションを作成します
/sbin/parted --script /dev/sdb 'mkpart primary 0 -0'
#適当なファイルシステムでフォーマットする
/sbin/mkfs.ext3 /dev/sdb1
[/bash]
実行例
[bash]
# /sbin/parted --script /dev/sdb 'mklabel msdos'
# /sbin/parted --script /dev/sdb 'mkpart primary 0 -0'
# /sbin/mkfs.ext3 /dev/sdb1
# /sbin/parted --script /dev/sdb 'print'
Model: xxx (scsi)
Disk /dev/sdb: 300GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 0.51kB 300GB 300GB primary ext3
[/bash]
2012年5月1日火曜日
CentOS 6.2 + e1000eでうまくいかなかった話
環境
- OS
- CentOS 6.2
- Kernel:2.6.32-220.4.2.el6.x86_64
- H/W
- Ethernet controller: Intel Corporation 82574L
- 某社の鯖(特に秘す)
現象
しばらく放置してると(通信した状態で)、/var/logに、こんなんでるねん。
kernel: e1000e 0000:01:00.0: eth0: Error reading PHY register
そして通信できなくなってしまう。
CentOSのbugzillaにも似たようなのがあった。
0005614: Networking: Intel NIC locks machine after a while, requiring cold reboot
http://bugs.centos.org/view.php?id=5614
どうしたか
とりあえず、CentOS6.2のe1000eは1.4.4だったので、Intelのサイトから1.9.5(当時の最新)を拾ってきて適用。結果
だめorz
上記のbugzillaに
pcie_aspm=off
したらいいぜHAHAHAみたいなコメントがあったのでやってみる。
OK(^^)
というわけで、某環境では、grub.confに上記の起動パラメータを追加してちゃんと動いてます(今のトコ)。
2012年2月7日火曜日
ソフトウェアRAID(MD)とgrubの備忘録
要するに、ソフトウェアRAID(RAID1構成)で、ディスクが1本死んだ時の対応のハナシ
珍しく、mdとか使ったので備忘録。
環境はCentOS 6.2。SATA接続のsdaとsdbというDISKが刺さっています。
ま、ミラクル・リナックスさんの「ブートディスクをソフトウェア RAID 1 (ミラーリング) に構成する場合、2本目のディスクに GRUB を手動でインストールしなければなりません。
インストールしない状態でもしも1本目のディスクが壊れた場合、2本目のディスクには GRUB が入っていないため、システムが起動しません。」って話です。リンク先見てしまえば、下記はおまけみたいなものです。。。
まず、Kickstartで下記のようなスライスを切りました。
clearpart --all --initlabel
part raid.1 --size 100 --ondrive=sda
part raid.2 --size 100 --ondrive=sdb
part raid.3 --size 2048 --ondrive=sda
part raid.4 --size 2048 --ondrive=sdb
part raid.5 --size 30720 --ondrive=sda
part raid.6 --size 30720 --ondrive=sdb
raid /boot --fstype ext4 --level 1 --device md0 raid.1 raid.2
raid swap --fstype swap --level 1 --device md1 raid.3 raid.4
raid / --fstype ext4 --level 1 --device md2 raid.5 raid.6
これだと、sdbにgrubがなくて、sdaが死んだ時に、再起動してもあがってこないというちょっとだけ困ったことになるので、Kickstartに以下の記述を追加しました。
cat </grub/raid1.grub
root (hd1,0)
setup (hd1)
quit
EOF
grub --batch < raid1.grub
grubコマンドでsdbにもインストールしてあげればよいわけですな。めでたしめでたし。
試しに、sdaを抜いてテストしたところちゃんとsdbにて、bootしてきました。
あと、DISKを抜き差ししたときに、
mdadm --manage /dev/md2 --add /dev/sdb1
とかしようとしたら、「mdadm --zero-superblock /dev/ほげほげ しなされ」みたいに怒られたので
mdadm --zero-superblock /dev/sdb1
とかちゃんとしてあげないといかんらしいです。
ちなみに、新品のDISKの場合は、ちゃんとスライス切ってあげないといけないのは言うまでもありませんねー。
登録:
投稿 (Atom)