UNIX

リダイレクト

ref:http://talototo.blog48.fc2.com/blog-entry-410.html よくある話だな。 要するに、 n> filenameは fd = open(filename, O_RDWR | O_CREAT | O_TRUNC, 0644); dup2(fd, n);に相当して*1、 m>&nは dup2(n, m);に相当するから。で、コマンドラインは左から…

同じファイルかどうか判定する

test file1 -ef file2 はポータビリティが怪しいということで、同じ機能を Perl で書いてみる。 #!/usr/bin/perl use strict; use warnings; use File::stat; sub usage { print STDERR "Usage: $0 file1 file2\n"; } sub main { if (@ARGV != 2) { usage; e…

readlink(1) とか stat(1) とか

そいや、readlink(1) とか stat(1) とかは OS 間で全然互換性がないな。

test file1 -ef file2

ref:http://d.hatena.ne.jp/hnw/20090109 たまたま手元の実装がそういう挙動だっただけなのか、違う挙動の環境もあるのかはわかりません。そもそも、由緒正しいshが標準装備しているのかも僕は情報を持っていません。ただ、Ubuntu8.04とMacOS10.5のshでも上…

glog with tcmalloc

shinh さんの glog なんかをいじる。 MacBook Core 2 Duo 2.0GHz にて。 #include <glog/logging.h> static const int REPEAT = 100000; int main(int argc, char** argv) { google::InitGoogleLogging(argv[0]); for (int i = 0; i < REPEAT; i++) { LOG(INFO) << "log mess</glog/logging.h>…

gettimeofday on MacBook

MacBook でいろいろやってたら OS X と Linux で gettimeofday(2) にかかる時間が違うことに気がついた。 OS X 上は 100 nsec/call 程度なのに、Ubuntu 8.10 だと 3000 nsec/call ぐらいかかっている。最初は仮想マシンのせいかと思ったけど、実機でも同じだ…

grepで複数パターン

ref:http://d.hatena.ne.jp/kanbayashi/20080615/p1 -e オプションを複数指定するとか GNU 拡張じゃないかと思ったが。 Multiple -e and -f options shall be accepted by the grep utility. All of the specified patterns shall be used when matching lin…

流儀

ref:http://d.hatena.ne.jp/PyTest/20080406/1207488482 別に、positional parameter でもいいじゃん。てか、なんでそこで cat の parameter は疑問に思わないのかということのほうが不思議だ。

hexdump

ref:ときどきの雑記帖 リターンズ 2007年10月 もしかして、それ od -t x1でよかったりしません?

プロセスの一時停止と再開

サーバが Disk full になりかけていたからとりあえずプロセスを suspend してくれといったら、バックグランドで実行してすでに実行した SSH セッションはログアウト済みなんだけどどうするの、と返された。suspend も resume も signal で実現されているとい…

dup2(2)

ref:http://d.hatena.ne.jp/naoya/20070731/1185893412 キモになるのは 複数のサービスをまとめて面倒を見るにあたって、それぞれのサービス用のリスニングソケットを select(2) で多重化する 接続があると fork して子を作り、その子を exec して本体のプロ…

パイプのブロッキング

パイプ上の I/O でブロッキングの挙動を見るためにちょっと実験してみた。以下、zsh で。 % cat /dev/zero | tr '\0' '\n' | cat -n | tee a | perl -MTime::HiRes=usleep -pe 'usleep 1000' > b別の shell で以下を実行。 % (repeat 10 (sleep 10; echo $(t…

パイプ

Unix(or its variants)のシェルがどうやってるのかは知らないけど (少し前に Artonさんのところで何か見たような記憶はあるが)、 Windowsの場合は大まかに コンソール プロセスを生成して標準ハンドルをリダイレクトする方法 にあるように 入力用、出力用の…

kill

そういえば自分の回りには KILL シグナルを送るときに kill -9 pidとするひとが多いようだ。なんでだろ。大学の実習ではそう習うのかな。 というか、みんな TERM と KILL 以外使わないというオチかも知れない。

昔からのUNIXプログラマがやりがちなこと

80年代から UNIX を使っているひとにありがちなこと ログインシェル ログインシェルはなれ親しんでいる csh/tcsh。 ページャ less ではなく more を使う。 errno #include <errno.h> ではなく、 extern int errno; とする。まぁ、昔は errno.h がなかったのだが、ISO </errno.h>…

ファイル名と取り扱いとコマンド置換

ななし 『ファイルがないと * のままになるので、ls DIR 2>/dev/null と書いたりしますね。』 (2007/07/09 11:10) まぁ、そのとおりなんだけど、ls とコマンド置換を使ってファイル名を取得しようとすると、パスに空白が含まれていたりする場合にはまれる。…

シェルスクリプトの書き方

ref:関数プログラミング的なシェルスクリプト via:Ryoの開発日記 - シェルスクリプトよくわかんね どこからつっこめばいいのやら。 コマンド置換とパス展開 ディレクトリ以下のファイルがほしいなら `ls ${2}` ではなく素直に "$2"/* でいいのでは。 クォー…

atime

ref:Blog/2007-6-15 - Rocco の日記 素朴な疑問。mtime じゃなくて atime でいいんだろうか? atime ってアクセスするだけで更新されるはずですよね。 % stat -c '%x' . && ls > /dev/null && stat -c '%x' . 2007-06-19 18:01:08.000000000 +0900 2007-06-1…

ランキング

ref:まめめも - ランキングの集計 とりあえず、N 位に同数のものがあるケースを無視するとだ、Hash#to_a と sort_by でチェーンするのが自然なんでは。 ary = %w(foo bar foo baz foo bar qux foo bnar qux quux) n = 3 counts = Hash.new { 0 } ary.each do…

/usr

/usr の usr って何なんだろ。 「/usr は user services and routines の略」という話は、 話としては割と良く知られてることなのだけれども、 どうも信憑性が怪しい。 日本における原典と言われているのは JUS の機関誌 /etc/wall で、 これはさらに UniFor…

echo サーバ

socket プログラミング入門として echo サーバってのは定番だけどスーパーサーバー使えば /bin/cat を指定すればいいんじゃね、とか思った。 xinetd ならこういうのを /etc/xinetd.d に用意するだけ。 service myecho { disable = no type = UNLISTED socket…

socket

講義に出てきたので久々に socket プログラミングとか。おー、昔はすごい面倒だと思ったものだが、今やると「まぁ、こんなもんか」って感じだ。年月って怖い。 で、つらつらと /usr/include/linux/socket.h を眺めていたら PF_BLUETOOTH なんてのを見つけた…

xargs + shell script のはまりどころ

昨今、Java でプログラムを書く場合に外部ライブラリに依存することが多いと思うのだけども*1、そういう場合 #!/bin/sh java -cp commons-lang.jar:commons-logging.jar:log4j.jar:classes com.example.Foo "$@" な shell script を用意して使うことが多い*2…

findのあれとか

find + rm ネタが微妙に盛り上がっているようだけど、消えて困るようなファイルはバージョン管理に入れておけという話だ。 あと、sed を使ってコマンド列に変換して sh に食わせる方法は、ファイル名に '*' とか '?' とか '\' とか入っていると死ねる罠。そ…

builtin と fork/exec と

ref:404 Blog Not Found:あわてるな ディスクはそんなに 速くない コメント欄から 最後の例がそこそこ速いように見えていますが、echo じゃなくてディスクに触る処理だと結果は大きく変わるのでは。 いやいやいや。そういう話ではなくて、echo は shell の組…

--も忘れずに

ref:void GraphicWizardsLair( void ); // いまどきfindとxargsを使う時は-print0と-0を忘れずに まったく同感。 あと、find ならディレクトリ名を含むことになるから問題ないと思うけど*1、ファイル名が0x2d(-)から始まっていたりするとはまる罠。 例。 % l…

気をつけろ

ref:ウノウラボ Unoh Labs: コマンドラインで作業する上で知っておくといいテクニック いわゆる指定された文字列を出力するコマンドですね. 知らない人も多いみたいですが,echoも実はいくつかのオプションを受け付けます. 気をつけろ。いまどきの echo は…

zsh の色設定

ref:ANOTHER PIECES - zsh のプロンプト変えてみようかな、とか。 大将、zsh には colors ってのがありやすぜ。とよく分からないノリではじめてみる。 autoload -U colors; colorsとすれば、使える。あとは、 PROMPT="${fg[white]}[${fg_bold[blue]}%n@%M${f…

root のパスワード潰し

ref:rootのパスワードは潰さないほうがいいと思う件 - mputの日記。 (2007-03-15) あー、通常ユーザのパスワードを全部禁止して root のコンソールログインだけ許可ってのはいいな。しかし、ユーザがみんな公開鍵認証を理解しているとしたらうらやましい限り…

sudo #3

fuktommy fuktommy ↓rootpwはこの場合の解ではないです。alias su='sudo -k && sudo -s -H' かなあ。 む。私の誤読かな?どういうことだろ。 そもそも root の shell が必要な場面てないと思うんだけど。普通に -s, -i なしの sudo では駄目なのかな。本当に…