タグ

ブックマーク / d.hatena.ne.jp/lurker (36)

  • tail -fしているファイルをmvしてもそのまま読み込み続ける事が出来るのはなぜか - 技術メモ帳

    せっかく教えていただいたので tail -f しているファイルをmvしても そのまま読み込み続ける事が出来るのはなぜなのかを調べてみた。 『詳解UNIXプログラミング(Advanced Programming in UNIX Environment)』 の CHAPTER.4 の 4.14 ファイルシステム に この件に関連する情報が記載されている。 コレを参考にボクの解釈した結果をまとめてみた。 間違っている箇所がありましたら 気軽にご指摘していただけますようよろしくお願い致します。 まず、事の発端から。 ボクのこの一文。 http://d.hatena.ne.jp/lurker/20070228/1172595016 そうそう、tail で思い出したが、GNUのtailはデフォルトで (たぶん/詳しくは知らない)inode番号を見ているため tail -f した状態で そのログファイル

    yuiseki
    yuiseki 2014/06/05
  • [unix] - 技術メモ帳

  • 意外と知られていないファイル探索方法(grep --include) - 技術メモ帳

    書こう書こう書こうと思っていたら先に書かれてしまった。 404 Not Found この行き場の無い感情をどうにかボクの中から排除しなければならない。 そう考えたときに独り言のようにこのブログロに記述すれば良いじゃないかという 結論にたどり着いたのはもはや必然とも言える。 find | xargs による探索だが、それが簡単なものであれば 実は grep コマンドだけでうまくいく。 GNU grep、BSD 系の grep コマンドでは include、exclude オプションで再帰検索時に検索対象とするファイルを絞り込む事が出来るのだ。 --include=pattern --exclude=pattern たとえば、カレントディレクトリ以下の *.rb から test という文字列を 含むファイルを探索したい場合は次のようにすれば良い。 fgrep -r --include='*.r

    yuiseki
    yuiseki 2012/08/09
  • 技術メモ帳 - 単語抽出するちょっとしたテクニック

    shell のちょっとしたテクニック - odz buffer odzさんのところで単語の出現頻度を調べるためのワンライナーが紹介されている。 単語抽出についてはいくつかやり方があるので紹介する。 特に egrep -o は非常に実用的。 もちろん、この話はリンク先において主題ではない。 俺のただの自己満足。 tr -cs で単語抽出 $ tr -cs 'a-zA-Z' '\n' < ./.zshrc 上記コマンドで、a-zA-Zのみで構成される文字列を抽出できる。 -c オプションで、'a-zA-Z' の補集合(以外)を '\n' に変換し、 -s オプションで、最後の引数で指定される要素の重複を除去している。すなわち '\n' の連続を除去している。 grep -o で単語抽出 grepには、( -o、--only-matching ) オプションというのがある。 これは、指定された正

  • xargsコマンドを使って指定したコマンドを並列実行させる - 技術メモ帳

    あまり知られていないが、GNUのxargsコマンドには、 プロセスの最大数を設定できるオプションというのが用意されている。 コレを使って、プロセスを並列実行させてみよう。 xargs --max-procs=MAX-PROCS -P MAX-PROCS command MAX-PROCSに数字を指定すると、 最大で、その数だけ command プロセスを生成する。 デフォルトは、1プロセスだけになっている。 いくつか例を交えて説明する。 サンプルとして、以下のようにURLが行ごとに記述されたファイルを元に curlをxargsで並列実行して、HTMLデータを取得してみよう。 $ cat ./url_list.txt http://www.google.co.jp/ http://www.yahoo.co.jp/ http://b.hatena.ne.jp/ まず、普通にxargsを使ってc

  • 移植性の高いseqコマンド - 技術メモ帳

    http://d.hatena.ne.jp/odz/20061111/1163230046 わざわざ、id:odzさんにスクリプトまで作っていただいたので さっそく bashスクリプト版 を MacOSX + bash3 で動作させたのだが 残念ながら -w の zero padding オプションがうまく動かない。 なんだかいかにも揚げ足取り的な、 そしてものすごくしょぼい指摘で申し訳ないですが、 (そもそも、ボクのアレがへっぽこすぎますが) たとえば、seq -w 1 3 を実行したときの出力が(失礼しました。これは間違いです) たとえば、seq -w 1 10 を実行したときの出力が zero pad されてない。 % ./seq.sh -w 1 10 1 2 3 .. . 来は、 % ./seq.sh -w 1 10 01 02 03 .. . となるはず。 で調べたのだが、その

    yuiseki
    yuiseki 2011/11/11
  • zshのzptyを使って端末が必要な処理を自動化する - 技術メモ帳

    zsh のモジュールに zpty というのがあるのを最近発見した。 どうもコレを利用すれば指定したコマンドを 仮想端末上で実行することが出来るらしい。 具体的にどういったことが出来るようになるのかというと、 端末が必要なプログラムを自動化することが出来る。 たとえば、パスワード入力処理などだ。 パスワード文字列を標準入力から読み込ませようとしても、 大抵のプログラムでは入力できない。 なぜかというと、多くのプログラムにおいてパスワード入力処理は 端末から読み込むように作られているからだ。 zpty を利用すればそういったたぐいのものをすべて自動化できる。 いわゆる、expect というコマンドで実現していたことが zsh だけで出来るのだ。 今回は、簡単に試すことが出来るサンプルとして、 su コマンドのパスワード入力を zpty を使って自動化してみる。 まず、zsh に標準添付されてい

    yuiseki
    yuiseki 2011/02/01
  • logrotateでローテート対象のファイル名を取得する - 技術メモ帳

    logrotate の設定ファイルに、 postrotate ~ endscript という項目がある。 これは、ローテート処理を行った後に、 実行したいコマンドを記述する項目である。 大抵、ログファイルを出力しているデーモンアプリに対し、 HUPシグナルを送出し、ログファイルを開き直させるために使用されている。 (デーモンアプリの作り方にもよるが、大抵の場合これを行わないと ローテートした先のファイルにそのまま書き込み続けてしまう。) 今まで知らなかったのだが、 そのときに、実はローテート対象のファイル名を 仮引数として渡してくれていたらしい。 つまり、$1 や $2 などで参照できる。 これは便利だ。 以下は、よくある logrotate の設定ファイルである。 /var/log/logfile1.log /var/log/logfile2.log { daily create rot

    yuiseki
    yuiseki 2010/12/17
  • 技術メモ帳 - pgrep, pkill を使用してプロセスを殺す

    最近、会社でシェルの操作方法について教えているのだが、 pgrep / pkill / skill / pidof といった 便利なプロセス操作系コマンドを知らない人が実に多い。 プロセスを殺すというのは、よくある作業なので 今回はコレについて書いてみる。 たとえば、これらのコマンドを知らない人が、 指定した名前のプロセスを kill する手順はだいたい 以下のようなものになることだろう。 $ ps aux | grep プロセス名 | grep -v 'grep' # コマンドの出力結果から pid を目で確認 12345 ... .. hoge .. .. $ kill 12345 この作業は非常に面倒で退屈だ。 もし殺さなければならないプロセスがたくさんあったときは どうするのだろうか。 おまけに、grep コマンド自身が候補に含まれてしまう事があるのだが、 grep -v grep

    yuiseki
    yuiseki 2010/08/27
  • 技術メモ帳 - Firefox拡張を簡単に改造する方法

    毎回、jar ファイルを作り直す作業が 面倒だと思った事はないだろうか。 じつは、chrome.manifest というファイルを 書き換える事によってこの作業は必要なくなる。 たとえば、FireBug を簡単に改造する手順を説明してみる。 この手順では、既にインストールしてあるものを 改造する手順を説明させていただくこととする。 ちなみに、コレに関連した話として、 入れておくと便利な拡張に、 Extension Developer's Extension というものがある。 http://ted.mielczarek.org/code/mozilla/extensiondev/ これについては後述する。 まず、FireBug のインストールされているディレクトリを探す。 それは、プロファイルディレクトリの下の ./extensions/firebug@software.joehewitt

    yuiseki
    yuiseki 2009/02/10
  • 定期的にコマンドを実行しその出力の変化を監視する - 技術メモ帳

    以前に、watch コマンドという 指定されたコマンドを定期的に実行し、 フルスクリーンで表示してくれるコマンドがあるという事を書いた。 http://d.hatena.ne.jp/lurker/20060716/1153056030 実は、--differences とオプションを付加する事によって、 直前の出力結果との差分をハイライト表示してくれるらしい。 知らなかった。コレは便利だ。 正直 grep -o を知ったときぐらい感動した。 以下のように入力してみるとどうなるのかが わかっていただけると思う。 ちなみにこれは、1秒おきに、dateコマンドを実行するというもの。 $ watch -n 1 --differences date さらに、--differences=cumulative と付加すると 起動してからのすべての変更部分がハイライトされるようだ。 $ watch -n

    yuiseki
    yuiseki 2008/12/07
  • 技術メモ帳: [unix]複数のファイルの名前をまとめて変更する

    複数のファイルの名前を変更する際に、 便利なコマンドというものがある。 いくつかご紹介させていただこう。 カレントディレクトリにあるファイルの名前を、 たとえば、*.html を *.htm と名前を変更するという課題に対し どのぐらいエレガントに書けるかというのを比較してみる。 まず、普通にやったらどうだろう。 おそらく、for文 をつかうことだろう。 for file in *.html do base=`basename $file .html` mv $base.html $base.htm; done; zshだともうちょっとスマートにかけて、 for file in *.html do mv $file:r.html $file:r.html; done; こんな具合。 for文 が嫌いなネット右翼のために、 xargs を使ってこの問題を解いてみよう。 ls -1 *.htm

    yuiseki
    yuiseki 2008/06/10
  • 漢のzshに乗り換えた時にアッーってなるコト - 技術メモ帳

    男のbashユーザーが、バラ色の紳士こと漢のzshに乗り換えたときに アッーってなるコト事を先ほどいくつか思いついたので共有する。 !!とかの履歴実行はrコマンドで zshには、r というシェル組み込みコマンドがあって 履歴からの実行が簡単に行える。 たとえば、一番最後に実行したviコマンドを実行したいときなどだ。 bashなんかだと !vi で出来るのだが、 rコマンドだったら % r vi でよい。 直前に実行したコマンドを再び実行したいとき、 bashなんかだと !! というやり方になるが、 rコマンドでは、 % r とするだけでよい。 また、文字列を置き換えてからの履歴実行はどうだろう。 たとえば次のようなbashの例だ。 $ vi .zshrc $ !vi:s/zsh/bash/ これは、最後に実行したviコマンドの引数文字列を ":s/zsh/bash/" によりzshという文

    yuiseki
    yuiseki 2008/06/10
  • ネットワークケーブルを接続/切断する時のTips - 技術メモ帳

    ping -a で音が鳴るようになるので、 これを利用して、ケーブルの接続/切断状況を音で確認。 コンソールとLANケーブルなんかの実作業場所がちょっと遠いときに便利。 ping -a IPアドレス あと何もケーブルだけじゃなくて ファイアウォールやルーティングの設定の時とかにも使えるよね。 あと五感を有効利用するのは良い事だよね。 -- ※これどこかに書いてあったテクニックです

    yuiseki
    yuiseki 2007/11/02
  • akasaka.rbのまとめ - 技術メモ帳

    akasaka.rb(http://akasakarb.org/)に行ってきました。のでまとめます。 yuguiさん、babieさんと、takaiさんと初めてお会いさせて頂きました。 とても楽しかったです。未熟なボクですが、今後ともよろしくお願い致します。 参加者 id:yuguiさん malaさん takaiさん id:babieさん ボク 要点 宇宙って11次元だよね 変態性癖をみんなで共有したいよね 印象的だったこと takaiさんがmalaさんのおしりをなでまわしていたこと 関連記事: no title Akasaka.rb - babie, you're my home

    yuiseki
    yuiseki 2007/08/15
    変態性癖をみんなで共有したい
  • Listen.jpをFirefoxで試聴できるようにするGreasemonkeyスクリプト - 技術メモ帳

    Listen.jp というサイトを今日というかさっき知ったのだが どうも、Firefoxでは試聴できないらしい。 alertbox ではじかれてしまった。 現代社会に置いてマイノリティは常に脆弱なのである。 http://listen.jp/store/ だが、責めるわけにはいかない。 この判断は企業として非常に妥当であるからだ。 対応機種が増えるとそれだけ検証作業が増加し、費用がかかる。 その費用は売り上げから減算されてしまうのだ。 したがって、これはマイノリティの側が努力すべき課題なのである。 前置きが長くなった。 というわけで、Greasemonkeyユーザースクリプトを作った。 とりあえず、以下のURLで動作確認した。 no title no title まず、chkBrowserという関数でブラウザを判断しているようで、 この関数の戻り値が常にtrueになるように改造。 次に、"

    yuiseki
    yuiseki 2007/01/21
  • Excite RSS Reader を使ってみた - 技術メモ帳

    ITMediaで紹介されていた、 Excite RSS Reader (以下 ERR) を 試しに使ってみた。 http://reader.excite.co.jp/ http://www.itmedia.co.jp/bizid/articles/0609/01/news057.html (ITMediaの記事) なんだか、使い勝手がすごい良くて、 まさに vi キーバインドという感じ。 vi使いは、感性のままに操作出来ると思う。 さっそく、Livedoor Reader の OPML を移行してみた。 いや、移行してみようとしたのだが、 実際にはうまく行かなかった。 XML が正しくありません。 というようなエラーが出て ERR側に インポートできなかったのだ。 実は、結構ココではまったのだがどうやら ERR では XMLのサイズが一定の値を超えたときにも、 上記のようなエラー文言が出て

    Excite RSS Reader を使ってみた - 技術メモ帳
    yuiseki
    yuiseki 2006/09/04
  • 拡張子に対応したアイコンの取得 - 技術メモ帳

    Firefox限定だが、 moz-icon://.拡張子?size=アイコンのサイズ で、拡張子に対応したアイコンを取得できるらしい。 そこでためしに、URLが html, pdf, zip で終わってるリンクに それに対応したアイコン画像を付加する Greasemonkey を作ってみた。 すごいリソース無駄遣いしてるが、これは後でリファクタリングする。 add_mozicon.user.js // ==UserScript== // @name add_mozicon // @include http://* // ==/UserScript== var extensions = [ 'html', 'pdf', 'zip' ]; var items = document.getElementsByTagName("a"); for(var i=0; i<items.length; i

    yuiseki
    yuiseki 2006/09/01
  • LDRで更新したときに最初の未読記事に自動移動するGreasemonkey - 技術メモ帳

    前にも書いたのだが、 より良い方法を id:brazil さんに教えていただいた。 副作用(?) として、よりよい処理になった。 ちなみに、前のはコレ。 初回起動時のみ自動移動だったのが、 更新するたびに自動移動になった。(すばらしい) http://d.hatena.ne.jp/lurker/20060811/1155310255 どうやら、 register_hook("after_subs_load", callback関数); で、フィードの読み込み完了を検出できるらしい。 その結果、setTimeout を使用する必要がなくなり かなりシンプルになった。 // ==UserScript== // @name LivedoorReader Orelize UserScript // @include http://reader.livedoor.com/reader/* // ==

    yuiseki
    yuiseki 2006/08/28
  • CygwinでWindowsアプリの作成 - 技術メモ帳

    cygwinで、windows.hをインクルードできる事を知った。 感動。これで、VCで開発しなくて済む。 さらに、gccのオプションに 以下のようなものを指定できる。 -mno-cygwin cygwin.dll がなくても起動できるようにする -mwindows アプリ実行時にコンソールを表示しない というわけで、 試しにWindowsアプリを作ってみました。 /* * すっきり君 v0.01 * * すべてのプロセスを安全でない方法で終了させます */ #include <windows.h> #include <tlhelp32.h> // callback function // 指定されたプロセスIDのプロセスを安全でない方法で終了させます。 void kill_process(DWORD id) { HANDLE h = OpenProcess(PROCESS_ALL_ACC

    yuiseki
    yuiseki 2006/08/25