UNIX

UNIXの代表的なOSであるSolaris, FreeBSD, Linuxに関する話題と共通のコマンドについて

2016年8月30日

ban4ipインストールしてみました

オープンソースアンカンファレンス金沢2016でT.Kabuさんからのご紹介のあった
fail2banをやめてBan4ipにしませんか?
を早速試してみました。

ApacheやSSH、postfix、dovecot等のログを解析して失敗を検知した接続元のIPアドレスをiptablesに書き込みしてフィルタリングするデーモンになります。
IPv6にも対応しているところが優れています。

CentOS7の環境でしたが、問題なく導入でき1日間で17回BANできています。
インターネット環境にサーバを公開するということは常に攻撃にさらされていると感じました。

自動BANツールを導入していない方はぜひ導入してみるとよいと思います。

なお、サーバを再起動する際には、banした設定が消えてしまうので /sbin/service iptables save を忘れずに!

2016年7月27日

logrotateを使う

ログファイルによってディスクフルにしないようにするためには、logrotateを利用するわけだが、一部ハマったことがあったので、記録しておく。

1.logrotateを実行すると怒られる

$ sudo /usr/sbin/logrotate /etc/logrotate.conf
error: skipping "(ログファイルのパス)/logs/debug.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.

どうやらログが記録されているフォルダの権限が、rootユーザではないことが原因のようだ。(腑に落ちない点はあるが。。。。)
設定ファイルにsu設定を行っておき、ログの書き込みを行うことが可能なユーザー、グループを指定する。

$ cat /etc/logrotate.d/hogehoge
(ログファイルのパス)/logs/debug.log {
daily
rotate 7
missingok
notifempty
create 0664 apache apache
su apache apache
nodateext
}


2.ローテートされたファイルに日付が付加される。

昔は、ローテートされたファイルに数字が付加されていたような気がしたが、Cent OS 7では、ファイル名-YYYYMMDDになっている。
見やすいのだが、プログラムでログファイルを自動解析しようとするといささか不便である。
/etc/logrotate.conf
に dateext が設定されていることが原因。これをコメントアウトするか、個別のログで解除したい場合には、上記例のように nodateext を設定すればよい。


参考サイト:
ログローテートしない - 揮発性のメモ
logrotate パーミッション エラー (r271-635)

2016年7月 9日

mbox形式のデータをMaildir形式に変換する

サーバ移行作業中に誤ってメールをmbox形式で/var/spool/mail/(username) で受信してしまっており、Maildir形式に移行する必要が発生した。
優れたツールがあったので、紹介しておく。

wget http://perfectmaildir.home-dn.net/perfect_maildir/perfect_maildir.pl -O /usr/local/bin/perfect_maildir.pl
cd /usr/local/bin/
chmod u+x perfect_maildir.pl
./perfect_maildir.pl /home/(username)/Maildir < /var/spool/mail/(username) >> /tmp/migrate-maildir.log 2>&1

root権限での実行を想定しています。
上記を実行すると、/tmp/migrate-maildir.log には、
Inserted NNN messages into maildir /home/(username)/Maildir/ in N seconds
というログが表示され、実際にNNN件のメールデータが移行されています。

2014年12月20日

xfsファイルフォーマット

BUFFALOのNASのディスクフォーマットによく採用されており、最近ではRed Hat Enterprise Linux 7(Cent OSも7)よりデフォルトのファイルフォーマットになったxfsについて。

昔からあるファイルフォーマットらしいが、その割にはCent OS 6以下ではパッケージを読み込まないとマウントできないという変わったファイルフォーマットである。

ちなみにCent OS 6では、xfsprogsパッケージをインストールすればよいのだが、64bit版にしかパッケージにないため、32bitではどうやってもマウントできない。

ということで、32bitマシンでは、KNOPPIX 7のLive DVDのイメージをDVDに書き込みして、そこからマウントすることがxfsフォーマットしたディスクを読み出すための最短ルートという話でした。

32bitマシンもう捨てろよって話なんだけども、、、、

2013年10月 5日

CentOS 6.4にVirtualBoxをインストールする

WindowsXPがサポート切れになるための対策として、最新のパッチが当たった状態の仮想マシンを作っておいて残しておこう作戦。

最近の仮想化ソフトの市場がだいぶ変わっていて、VMWareは有償みたい。というわけで、VirtualBoxにすることにした。

インストールはできるが、起動させようとすると怒られる。

http://www.ivoryworks.com/blog/tag/kern_dir
を参考にKERN_DIRを環境変数に設定して起動したらできた。

ちょっと不親切。

2009年7月16日

ジョブの操作

たとえば、vmstat 3 100
とすると、vmstatコマンドは、フォアグランドで動作する。

また、vmstat 3 100 &
とするとvmstatコマンドは、バックグラウンドで動作する。

いずれの場合も、SSHで接続している場合に、exitをしても接続が切断されず、SSHを強制的に切断するとプロセスが強制終了してしまう。(シェルの種類とsshのバージョンによっては挙動が異なるようだ)

リモート接続している場合において、処理が接続中に終わらないことが分かっている場合には、
nohup vmstat 3 100 &
などとすることで、exitをすれば接続が切断される。

ただ、当初はすぐに終わる処理だと思っていて、フォアグラウンドで処理していたが、なかなか終わらない場合には、(bashシェルの場合)次の操作をするとよい。

Shift+Z でフォアグラウンド処理を停止したうえで、
jobsコマンドを発行し、対象のジョブ番号を確認する。
そして、bg ジョブ番号
とすることでバックグラウンドプロセスに変更できる。(フォアグラウンドプロセスにする場合には、fcコマンドをする)

そのうえで、disown %ジョブ番号
とすれば、nohupしたのと同じ状態になるはずなのだが、自分の環境ではうまくいかない。

2009年1月28日

sambaによるファイルアクセス監査

しばらくインターネット記事を見る機会も少なくなってしまって、ブログの書き込み頻度が少なくなってしまっているけれど、ちょっと気になったものがあったので、紹介しておきます。

vfsという追加機能であるauditを利用することでどのファイルにアクセスしたかログを取得することができるようです。情報はファイルサーバーに集約して管理することが多いと思いますので、Linuxサーバーで運用している場合には検討してもよいのかもしれません。

2008年9月28日

SSHを利用してノンパスワードログインする

別のサーバー同士でコマンドをやり取りするには
ssh username@servername commandname として実行できるが、このときにパスワードが要求されてしまう。
また、別のサーバーからファイルをセキュアに転送するには、
scp username@servername:(リモートサーバーのパス) (ローカルのパス) として実行できるが、このときにやはりパスワードが要求されてしまう。

これは自動化する上でかなり問題があり、expectという方法でパスワードを自動入力させる方法もあるが、これはクレバーではない。

sshにはノンパスワードログインという方法があり、接続元で発行した公開鍵を接続先のアカウントの.ssh/authorized_keys に保存することで実現できる。

設定方法でわかりやすかったサイトは、ぴえ~るの活動日記だけれども、デフォルトではauthorized_keys2ではなくauthorized_keysなので注意が必要。

また、多くのサーバーではこれだけでは接続できないので、接続先サーバーの/etc/ssh/sshd_configを編集(RSA公開鍵認証の有効化)しなければならない。わかりやすいサイトは、Gentoo Linuxで自宅サーバ であり、

#RSAAuthentication yes #PubkeyAuthentication yes #AuthorizedKeyFile .ssh/authorized_keys
RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeyFile .ssh/authorized_keys
とすればよい。

僕の場合には、これをやってもうまくいかず、vオプションをつけてデバッグしてみたら
Offering public key: /home/hogehoge/.ssh/id_rsa
から先の認証手続きがうまくいっていないことがわかった。

いろいろ調べてみたら、おさかな学習帳にあるとおり接続先の/var/log/secureにエラーが出ていて、.ssh フォルダのパーミッションが正しくなかったために接続できなかったというオチだった。

Linux標準教科書

というものがオンラインでダウンロードできます(ユーザー登録の必要があります)

発行元はLPIC試験を実施しているLPI-JAPANというところです。
誤植は多少ありますが、Linuxを触っている私でもはじめて知るような内容が盛り込まれていて、一読する価値はあります。またLPIC試験を受験される方は必読になるんだと思います。

わかっているようでわかっていないLinux。奥が深いですね。

2008年1月13日

タイムスタンプの話

Linuxでタイムスタンプでファイルを検索する話。
UNIXの部屋 検索: タイムスタンプに詳しく解説されているので、これを見ればよく理解できるのだが、通常 ls -l コマンドで時刻を出すとファイルを変更した時間(mtime)が出てくるが、ファイルの属性を変更した場合(ファイル名を変更した、権限を変更した、オーナーを変更したなど)にはその時間が反映されない。
それらの時間を変更したものを表示させるには、 ls -lc とする必要がある。

たとえば、全ファイル内で、1時間以内にファイル属性が変わったものを調べるには、
find / -cmin -60
とすればよい。

mtime, ctimeは理解できるのだが、atimeがよくわからない。ファイル内容をreadするためにはどうしたらよいのか?catコマンドで見ても駄目だし。。。

2008年1月11日

WebAlizerをインストールする(備考)

WebAlizerを別の環境(NX protection 機構が働いたマシンでSELinux有効になっているケース)に入れた際にはまったポイントがあったので、メモしておく。

1.
webalizerを起動するとファイルがあるにもかかわらず
Error: Can't open log file (Apacheのログ)
と表示される

ファイルがあるにもかかわらずこのエラーが出る場合は、SELinuxを疑ったほうが良い。
Webminから設定してあげるとうまく書き込み出来ているようなので、よく分からなければWebminから設定してみるのも良いだろう。


また、新たにディレクトリを作成し、OutputDirに指定したうえで、Webサーバーから閲覧できるようにする場合にもSELinuxが有効ならば、chconコマンドでタイプラベルを修正する必要がある。


2.
rpmbuild で警告が出るケース

make中にこんなエラーが出る場合には、RPM_OPT_FLAGSを疑ってみる。
NX protection 機構が働いている場合、
RPM_OPT_FLAGS には -O2 -g -march=i386 -mcpu=i686 ではなく
-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables
がセットされ、gccコンパイルオプションに利用されてしまう。

+ make
gcc -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -I/usr/include/db4 -D_LARGEFILE64_SOURCE -DETCDIR=\"/etc\" -DHAVE_DB_185_H=1 -DHAVE_ERRNO_H=1 -DHAVE_SOCKET=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_GETOPT_H=1 -DHAVE_MATH_H=1 -DUSE_DNS -c webalizer.c
webalizer.c: In function 'main':
webalizer.c:1035: warning: suggest parentheses around assignment used as truth value
webalizer.c: In function 'unescape':
webalizer.c:1947: warning: pointer targets in initialization differ in signedness
webalizer.c:1948: warning: pointer targets in initialization differ in signedness
webalizer.c: In function 'srch_string':
webalizer.c:1985: warning: pointer targets in assignment differ in signedness
webalizer.c:1988: warning: pointer targets in passing argument 2 of '__builtin___strcpy_chk' differ in signedness
webalizer.c:1988: warning: pointer targets in passing argument 2 of '__strcpy_ichk' differ in signedness
webalizer.c:1989: warning: pointer targets in assignment differ in signedness
webalizer.c:1992: warning: pointer targets in assignment differ in signedness
webalizer.c:1994: warning: pointer targets in assignment differ in signedness
webalizer.c:2009: warning: pointer targets in assignment differ in signedness
webalizer.c:2015: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
webalizer.c:2022: warning: pointer targets in passing argument 1 of 'put_snode' differ in signedness
+ make
gcc -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -I/usr/include/db4 -D_LARGEFILE64_SOURCE -DETCDIR=\"/etc\" -DHAVE_DB_185_H=1 -DHAVE_ERRNO_H=1 -DHAVE_SOCKET=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_GETOPT_H=1 -DHAVE_MATH_H=1 -DUSE_DNS -c webalizer.c
webalizer.c: In function 'main':
webalizer.c:1035: warning: suggest parentheses around assignment used as truth value
webalizer.c: In function 'unescape':
webalizer.c:1947: warning: pointer targets in initialization differ in signedness
webalizer.c:1948: warning: pointer targets in initialization differ in signedness
webalizer.c: In function 'srch_string':
webalizer.c:1985: warning: pointer targets in assignment differ in signedness
webalizer.c:1988: warning: pointer targets in passing argument 2 of '__builtin___strcpy_chk' differ in signedness
webalizer.c:1988: warning: pointer targets in passing argument 2 of '__strcpy_ichk' differ in signedness
webalizer.c:1989: warning: pointer targets in assignment differ in signedness
webalizer.c:1992: warning: pointer targets in assignment differ in signedness
webalizer.c:1994: warning: pointer targets in assignment differ in signedness
webalizer.c:2009: warning: pointer targets in assignment differ in signedness
webalizer.c:2015: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
webalizer.c:2022: warning: pointer targets in passing argument 1 of 'put_snode' differ in signedness


vi webalizer.spec で
%build
CPPFLAGS="-I%{_includedir}/db4" ; export CPPFLAGS
CFLAGS="$RPM_OPT_FLAGS $CPPFLAGS -D_LARGEFILE64_SOURCE" ; export CFLAGS
なっているところを強引に
%build
CPPFLAGS="-I%{_includedir}/db4" ; export CPPFLAGS
CFLAGS="-O2 -g -march=i386 -mcpu=i686 $CPPFLAGS -D_LARGEFILE64_SOURCE" ; export CFLAGS
へ書き換えたらうまくいった。もちろんi686プロセッサであることが前提だが。。。

2008年1月10日

webalizerを日本語表示して使う

CentOSにてWebAlizerを日本語表示して利用する(GDで描画されるグラフは日本語化されません)方法をやってみた。Webのログ解析ソフトにはAnalogもあるが、機能差についてはまた別途評価したい。

1.yumdownloadを利用するためにyum-utilsをダウンロード
yum install yum-utils

2.ソースパッケージはデフォルトではyumdownloadでダウンロードできないので、ダウンロード先を追加
vi /etc/yum.repos.d/CentOS-Base.repo

※以下をCentOS-Base.repoの最後に追加する

[update-source]
name=CentOS-$releasever - Update Source Packages
baseurl=http://ftp.riken.go.jp/Linux/centos/$releasever/updates/SRPMS/
#baseurl=http://ftp.kddlabs.co.jp/pub/Linux/packages/CentOS/$releasever/updates/SRPMS/
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
priority=2
protect=1

[extras-source]
name=CentOS-$releasever - Extra Source Packages
baseurl=http://ftp.riken.go.jp/Linux/centos/$releasever/extras/SRPMS/
#baseurl=http://ftp.kddlabs.co.jp/pub/Linux/packages/CentOS/$releasever/extras/SRPMS/
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
priority=2
protect=1

[os-source]
name=CentOS-$releasever - OS Source Packages
baseurl=http://ftp.riken.go.jp/Linux/centos/$releasever/os/SRPMS/
#baseurl=http://ftp.kddlabs.co.jp/pub/Linux/packages/CentOS/$releasever/os/SRPMS/
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
priority=2
protect=1

[centosplus-source]
name=CentOS-$releasever - CentOS Plus Source Packages
baseurl=http://ftp.riken.go.jp/Linux/centos/$releasever/centosplus/SRPMS/
#baseurl=http://ftp.kddlabs.co.jp/pub/Linux/packages/CentOS/$releasever/centosplus/SRPMS/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
priority=2
protect=1

3.yumdownloaderにてwebalizerのソースを取得し、インストールする。インストールの際にユーザーとグループが存在しない旨の警告が出るが無視する。
yumdownloader --source webalizer
rpm -ivh webalizer-2.XX_XX-XX.src.rpm

4.インストールが正しく行われているか確認
ls -l /usr/src/redhat/SPECS/webalizer.spec

5.ディレクトリを移動してソースを修正する(configureオプションを追加する)
cd /usr/src/redhat/SPECS/
vi webalizer.spec

%configure --enable-dns --with-dblib=/lib

%configure --enable-dns --with-dblib=/lib --with-language=japanese

6.rpmをビルドする
rpmbuild -ba webalizer.spec

そうすると、db4-develがないといわれることがあるので、db-4develをインストールして、再ビルドする。もし、同じようなエラーが続く場合(gd-develやlibpng-develが該当する可能性あり)には、パッケージを繰り返しインストールする。
エラー: Failed build dependencies:
db4-devel is needed by webalizer-2.XX_XX-XX.X.i386

yum install db4-devel
rpmbuild -ba webalizer.spec

7.ビルドに成功したらrpmファイルが出来ていることを確認。アーキテクチャによっては、i386のディレクトリ名が違うディレクトリ名となることがあるので確認する。
ls -l /usr/src/redhat/RPMS/i386/

8.webalizerがインストール済みの場合には一度削除し、作成されているrpmをインストールする(webalizer-debuginfoパッケージはインストールしない)
rpm -e webalizer
rpm -ivh /usr/src/redhat/RPMS/i386/webalizer-2.XX_XX-XX.X.i386.rpm

9.webalizer.confを設定する。3項目が変更対象
vi /etc/webalizer.conf

LogFile (Apacheのログファイルの場所 Redhatのデフォルトは /etc/httpd/logs/access_log になる)
OutputDir (WebAlizerのログの書き出し先)
HTMLHead <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">

10.以下のコマンドを実行する。もし、webalizer.confで設定したLogFile以外のファイルを解析する場合には、引数にログファイルのパスをつけて同様に実行する。
webalizer

11.これをcronに登録しておけば、定期的にログが更新される。

なお、インストールするにあたり以下のサイトを参考にしましたので、ご紹介しておきます。
CentOS 4.5 でソース RPM をダウンロードする方法
Webalizer日本語表示

2008年1月 1日

cronからのメールを送信しないようにする

vi /etc/crontab にて修正する(MAILTOの先のroot指定をなくせば良い)

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=
HOME=/

なお、これでもメールが送られてくるようであれば、
LANDISK HACKING DIARYの最後を参考に標準出力とエラー出力を工夫すればよい。

2007年12月30日

ファイルが大量すぎて削除できない場合には

特定のディレクトリにファイルが大量にありすぎてrmコマンドで rm * などとしても
bash: /bin/rm: Argument list too long
と出てしまう場合には、(該当のディレクトリに移動して)

find ./ -exec rm {} \;
と実行し、1ファイルずつに対してrmコマンドを実行するようにすれば削除できる。

2007年10月10日

findの結果をtarで固める

たとえば、10日以内に更新されたファイルの差分をtar.gzで固めたい場合、
find ./ -mtime -10 | xargs tar zcvf hogehoge.tar.gz
とすればよい。但し、ファイル名にスペースが含まれる場合などはtarで固める場合に、スペースが区切り文字とみなされてしまうので、対策が必要。

2007年7月30日

ルーティング設定

スタティックルート設定
コマンド:route add -net (ネットワークアドレス) netmask (サブネットマスク) gw (ゲートウェイ)
ファイル:/etc/sysconfig/static-route

デフォルトゲートウェイ設定
/etc/sysconfig/network
の中のGATEWAYを設定する。

デフォルトゲートウェイの設定を有効にするには
/etc/rc.d/network restart
を実行する。

2007年5月 4日

なぜpasswdファイルが閲覧されるとまずいのか?

Linuxにはアカウントの一覧を/etc/passwdで管理しているが、Directory Traversalなどによって閲覧できてしまわないように対策を進める書籍は多い。ただなぜ閲覧させてはいけないかが書かれていないケースが非常に多い。passwdにはパスワードの情報が含まれていないにも関わらずだ。

それはユーザーの一覧が分かると総当たり攻撃に必要な時間が確実に減るからだ。ユーザーが分からなければ不特定多数ユーザー×不特定多数パスワードで無限大になるが、ユーザーが固定されれば試すパターンはユーザー数×不特定パスワードとなる。

ただpasswdが閲覧できなければ安全かと言えばそうではない。デフォルトユーザー(rootやmysqladmin、postgresなど)がログインできないことが必要である。これらがログイン可能であれば結局パターン数が絞れてしまう。

またSMTPサービスによるユーザー問い合わせにも注意しなければならない。

続きを読む "なぜpasswdファイルが閲覧されるとまずいのか?" »

2007年4月20日

cronの仕組み

cron.hourlyなどがなぜ実行されているのかを/etc/crontabから見てとることができる。
日曜日の午前4時に急にディスクアクセスが発生して自宅サーバーだと眠れなくなる原因がこれで説明できるわけだ。

$ cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

$ which run-parts
/usr/bin/run-parts

ところでこのrun-partsというコマンドはなんだろうか?これは引数で指定されたディレクトリ内のコマンドを処理するというものらしい。そのため、上記の設定例で行くと、/etc/cron.daily/の中に保存されたプログラムは毎日4時2分に実行されるということになる。

2007年1月 7日

Linuxのメッセージが文字化けする

Linuxでインストール時の言語設定で英語以外にしてしまうと、インストール後のコマンドを入れた結果の画面表示が文字化けしてしまうケースが良くあります。

それを修正する方法がに載っていたので紹介しておきます。@IT

2006年11月29日

run level

Linuxのrun levelだがnoisettle.ddo.jpにあるように

0:システムの停止
1:シングルユーザーモード(管理者モード)
2:NFSを使わないマルチユーザーモード
3:マルチユーザーモード
4:未使用
5:GUIログインを行えるマルチユーザーモード
6:システムの再起動
となっており、多くの場合には、3(CUI)もしくは5(X Windowsシステムを利用したGUI)になっている。
/sbin/runlevel
で現在のランレベルと以前のランレベルを調べることが出来る。
なお、/sbin/chkconfig (サービス名) on
とすると2, 3, 5がonになる。

2006年11月28日

rpmかソースコンパイルか・・・

RedHat LinuxやTrubo Linuxにはrpmというコンパイル済みパッケージが存在している。一方、アーキテクチャに依存しないソースコンパイルが存在する。rpmの方が保守性に優れているが、パッチを当てることが出来ないという問題がある。rpmとソースコンパイルをソフトウエアごとに選ぶことも出来るが、依存関係に悩まされる可能性が高いので、多くの場合どちらかに統一することを推奨する。

2006年11月 4日

atコマンドとatqコマンド

スケジュールを登録

#at -t 200611120300
at> /sbin/shutdown -h now
at> (Ctrl+Dを押す)
job 2 at 2006-11-12 03:00

スケジュールを確認

#atq
2 2006-11-12 03:00 a root

2006年9月19日

timeコマンド

コマンド処理時間を計測するLinuxのコマンド。

time (コマンド名)

コマンドの経過時間(real)、計算時間(user)、入出力時間(sys)を知ることができる。

2006年7月 6日

locale変更について

bashシェルにおける環境変数の変更はexportコマンドを利用する。
たとえば、localeを変更する場合には、
export LANG="ja_JP.eucJP"
とすればよい。
確認は、
export $LANG
とする。確か、cシェルの場合にはsetコマンドで変えられたはずだが。。。ちょっと調べてみたい。

2006年6月 5日

Linux 2GBの壁

Linuxのバックアップソフトcpioには2GB以上のファイルもしくは60kByte以上のユーザーIDをもつイメージを展開できない。
展開しようとすると「cpio: standard input is closed: Value too large for defined data type」のようなエラーが発生する。この理由は符号付きinteger(2の32乗/2-1)によるもの。
Fedora Coreでは3のパッケージ(cpio-2.5-7)でこの問題が発生するが4ではcpioのバージョンがアップグレード(cpio-2.6-7)されており、こちらでは問題が解決されている。

2006年4月27日

パーティション内のデータの抹消方法

dd if=/dev/urandom of=/dev/hda1
dd if=/dev/zero of=/dev/hda1 count=512 ランダムにすべての領域を書き込み、最初の512バイトをヌルバイトで書き込むというもの。なぜ最初の部分をヌルバイトで書き込むかというと、乱数の初期値が分かることで乱数パターンが分かってしまうから。ただデータはどちらにしても復元はできない。

2006年4月25日

phpの自身のプロセス数の取得

echo system("ps -ef | grep -w $argv[0] | grep -cv grep");