ラベル Linux の投稿を表示しています。 すべての投稿を表示
ラベル Linux の投稿を表示しています。 すべての投稿を表示

2013年4月18日木曜日

シェルスクリプトで添付ファイル付メール送信

例によって、備忘録。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月16日火曜日

シェルスクリプトで自身のフルパスを取得

T/Oです。
いっつも忘れるので。
[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でもいけるけど)。

/usr/sbin/nscd -i hosts

とかすればおk

2012年11月30日金曜日

dateコマンドで現在時刻をミリ秒まで出力(UnixTimeで)

環境はLinuxで。
今どきの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間はルーティングされているものとします。

環境

  • 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の備忘録

よく使うところを中心に。

 

素敵なオプションたち


よくある使い方


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とか使うのが癖になってます。


参考にしました


2012年6月13日水曜日

atime備忘録(古い情報)

ふわっとしてたので備忘録です。最近のディストリで検証とかできたらいいなぁ(遠い目)

ファイルに関する時刻






UNIX/Linuxではファイルに関して3つの時刻を記録しています。

  • atime


    • 最終アクセス時刻


  • ctime


    • 最終変更時刻


  • mtime


    • 最終更新時刻(i-node管理)



2008年にネットで話題になってた話







その他参考情報


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]

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の場合は、ちゃんとスライス切ってあげないといけないのは言うまでもありませんねー。