タグ

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

  • 環境変数 LD_PRELOAD - 技術メモ帳

    LD_PRELOAD という環境変数に、共有オブジェクトを指定すると 任意のプログラムを実行する時にその共有オブジェクトを読み込ませる事が出来るらしい。 そして、もし読み込ませたときに シンボル名 が衝突していたときは、 先に定義されたシンボル名が優先されるという仕様になっているらしい。 そこから考えられるのが、 LD_PRELOAD でわざと同じ名前のラッパー関数を作成して、 ロギング処理を注入するという事だ。(アスペクト指向だ!!) (今度やってみよう。) とりあえず、以下は LD_PRELOAD で同名関数を上書きできる例です。 まず、main.c 1 #include <stdio.h> 2 3 int main() { 4 puts("hello world!!"); 5 return 0; 6 } ただ単に、puts 関数を呼び出しています。 実行すると、当然のように hell

    hogem
    hogem 2009/05/06
    "LD_PRELOAD という環境変数に、共有オブジェクトを指定すると任意のプログラムを実行する時にその共有オブジェクトを読み込ませる事が出来る"
  • sshでSOCKSプロキシ - 技術メモ帳

    ssh -D で 疑似SOCKSサーバー になることができる。 というのは、たしか前にも書いた。 それにプラスして、任意のコマンドを SOCKS対応させる tsocks を利用して VPNのようなことをやってみた。 ( tsocksは、先進的なディストリビューションだと デフォルトで入ってるような気がする。) たとえば、 local -> hostA -> hostB と、hostA を必ず経由しなければ到達できない hostB があったとした場合、 これらを利用すると、同じネットワークにいるかのように 任意のアプリケーションを騙すことができるようになるため、 local$ tsocks ssh user@hostB 上記のように、local から直接アクセスできるようになる。 ちなみに、サーバー側に、 ソフトウェアをインストールする必要はない。 この場合で言う、local のみにソフトウ

    hogem
    hogem 2007/08/08
    ssh -D portでsocks proxy / tsocksで任意のアプリケーションをsocks経由で実行 / この2つをくみあわせと素敵なことに
  • sshで公開鍵ごとにコマンド制限する際の注意点1 - 技術メモ帳

    を書くのを忘れていたので一応書いておく。 command="任意のコマンド" としておくと、任意のコマンドしか実行できない 公開鍵を作れるというのは前に書いたが、 そのときに、$SSH_ORIGINAL_COMMAND という環境変数を利用すれば、 動的に処理を切り分けることが出来る。 以下はその例である。 command="cat $SSH_ORIGINAL_COMMAND" このようにしておけば、 ssh user@remote_host "/var/log/messages" これで、任意のファイルをcatするだけの公開鍵ができる。 …ように思われるが、$SSH_ORIGINAL_COMMAND の部分を うまい具合に調節すれば、悪意あるコマンドを注入することが出来てしまう。 試しに、バッククオート演算子を利用して uptime を実行してみた。 $ ssh user@remote_

    hogem
    hogem 2007/08/08
    引数を$SSH_ORIGINAL_COMMAND変数に渡せる。が、注意が必要
  • ネットワークケーブルを接続/切断する時のTips - 技術メモ帳

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

    hogem
    hogem 2007/06/30
    ping -aで音がなる
  • 実行ファイルを実行できる形で圧縮する - 技術メモ帳

    忘れてたのでメモ。gzexe コマンド。 gzexe - compress executable files in place http://www.linux.or.jp/JM/html/GNU_gzip/man1/gzexe.1.html echoするだけのshell scriptを圧縮してから実行してみる。 $ cat ./test.sh #!/bin/sh echo aiueo $ gzexe ./test.sh ./test.sh: -9.1% # 損してる!! $ chmod u+x ./test.sh $ ./test.sh aiueo 仕組みは簡単で、 ファイルの末尾に圧縮したデータを入れていて、 それを展開して実行するコードが上の方に記述されている。 バイナリが含まれるので cat -v させていただいた。 $ cat -v ./test.sh #!/bin/sh ski

    hogem
    hogem 2007/03/11
  • MySQLのログイン自動化 - 技術メモ帳

    $HOME/.my.cnf に以下を記述する。 [client] database=データベース名 user=ユーザー名 password=パスワード

    hogem
    hogem 2007/02/23
  • mysql -Xでクエリーの結果をXMLで取得 - 技術メモ帳

    mysql -X でクエリーの結果がXMLで取得できるらしい。 興味深いのでやってみた。 なんか適当にテーブルを作成する。 とりあえず、4つのカラムを持つtというテーブル作った。 mysql> create table t(id int not null, name varchar(255), body text, updated_at datetime); mysql> insert into t values(1, 'name', 'body', current_timestamp); mysql> insert into t values(2, 'name2', 'body2', current_timestamp); とりあえず、普通にSELECTで表示してみる。 # mysql -e 'SQL' で任意のSQLを実行可能。ワンライナーに使えます。 $ mysql -e 'sele

    hogem
    hogem 2007/02/23
    おお、なんか楽しいぞ
  • 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

    hogem
    hogem 2007/02/23
    xargsのmanも見たけど、-nは-Pと一緒に使うと良いらしい。ふむふむ
  • grep/egrep と fgrepの違い - 技術メモ帳

    単純にアルゴリズムの違いだけど、実際に実験してみた。 いきなり結論から言うと、 fgrepは、マッチさせたい文字列が多いときに効果を発揮する。 ということだった。 /var/log/messages に含まれる "英単語" を リストアップする処理で時間を測定してみた。 time grep -of /usr/share/dict/words /var/log/messages >/dev/null time egrep -of /usr/share/dict/words /var/log/messages >/dev/null 処理が終わらない。。。。 time fgrep -of /usr/share/dict/words /var/log/messages >/dev/null なんと、fgrepでは一秒ほどで処理が終了した。 ちなみに、/usr/share/dict/words は英

    hogem
    hogem 2007/02/23
  • 技術メモ帳 - 単語抽出するちょっとしたテクニック

    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 ) オプションというのがある。 これは、指定された正

    hogem
    hogem 2007/02/23
    コメントがおもろい
  • 漢の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という文

    hogem
    hogem 2007/02/19
    アッー!!
  • zshのzargsコマンドの使い方 - 技術メモ帳

    zsh には、zargsコマンド(組み込み関数) というのが用意されている。 これは、拡張グロブ用の xargs コマンドと言っても良いだろう。 マニュアルを見ると、xargs コマンドとオプションは、完全に互換しているらしい。 autoload zargs とする事で利用可能だ。 使い方だが、xargs というと、標準入力から読み込んだ要素、行に対して 特定のコマンドを実行するというものだが zargs の場合は、引数に指定した 拡張グロブ に対してこれらの処理を行う。 % zargs OPTIONS -- 拡張グロブ -- 実行したいコマンド たとえば、xargs で一番利用されると思われる ファイル数が ARG_MAX を越えてしまっているディレクトリ内のファイルを まとめて削除したい場合などは、次のようなコマンドを入力すれば良い。 % zargs -- ./* -- rm これだけ

  • 複数のファイルの名前をまとめて変更する on zsh - 技術メモ帳

    最も簡単なやり方を紹介するのを忘れていた。 for file (*.html) mv $file $file:r.htm

  • 指定されたファイルの上からN行目、下からM行目までの範囲を抽出 - 技術メモ帳

    http://d.hatena.ne.jp/parasporospa/20061130/p3 全然テストしてないですが、一番上の "指定されたファイルの上からN行目、下からM行目までの範囲を抽出" するやつをやってみました。 tail +N という普段使わない奇妙な引数で、 N行め以降が取得できる、というのを利用しました。 body () { F=$1; N=$2; M=$3 tail +$((N+1)) < "$F" | tail -r | tail +$((M+1)) | tail -r } 動作テスト(zsh) $ cat test.txt 1 2 3 4 5 6 7 8 9 10 $ body ./test.txt 1 1 2 3 4 5 6 7 8 9 $ body ./test.txt 2 3 3 4 5 6 7 $ body ./test.txt 0 9 1 ファイルを二回も

  • 技術メモ帳 - zsh/filesで引数の最大バイト数を回避する

    zshmodules の zsh/files を利用すると、 chgrp, chown, ln, mkdir, mv, rm, rmdir, sync といったコマンドが、 zsh組み込みの関数に置換えられる。 メリットとしては、 移植性が高くなる、 引数文字列の最大バイト数の制限を受けなくなる ということが挙げられるだろう。 このうち、特に僕が便利だなと思っているのが、 引数文字列の最大バイト数の制限を受けなくなるということだ。 簡単に説明すると、 通常、コマンドを実行するときに 引数文字列のバイト数が一定の値を越えると 以下のようにエラーを出して処理をしてくれない。 % mv ./* ../dir zsh: argument list too long: mv そして最悪な事にコレは、 グロブなどを展開した後の文字列のバイト数であるため、 zsh の extended_glob とは非

  • lessでtail -f - 技術メモ帳

    less 起動中に、F と大文字で入力する事で、 tail -f のような挙動になるらしい。 知らなかった。 いつでも気軽に直前のログを見に戻る事が出来るのが良いね。 Ctrl + C で元のモードに戻る。 lessの場合 less +内部コマンド名 としておく事で起動時に内部コマンドを実行できるので とりあえず、ltailf という名前でエイリアスしておいた。 alias ltailf='less +F'

    hogem
    hogem 2006/12/08
    これは便利
  • 入力履歴からの予測による自動補完機能 - 技術メモ帳

    zshには、過去の入力履歴から予測し、 リアルタイムに自動補完してくれるという機能というのがあるようだ。 predict-on というのが該当する。 例えば以下の画像は、 この機能を有効にした状態で 'h' とだけ入力した状態だ。 Enter キーを押すだけでただちに実行できる。 なんだか、結構便利だったので 以下のような設定で使用する事にした。 % autoload predict-on % zle -N predict-on % zle -N predict-off % bindkey '^X^Z' predict-on % bindkey '^Z' predict-off % zstyle ':predict' verbose true zsh の man で載っているキーバインドに設定してみた。 Ctrl+X Ctrl+Z で predictモードが ON になり、 Ctrl+Z

    入力履歴からの予測による自動補完機能 - 技術メモ帳
  • 技術メモ帳 - zshで出来ている新感覚エディタzed

    zshのZLE Editorを使って作られた zedというテキストエディタがカッコいいうえに非常に便利。 zshの補完がそのまま使えたりする。 % autoload zed % zed ./test.txt 操作方法は、 変更を保存するときは、Ctrl+X Ctrl+W または Ctrl+J と入力。 破棄して終了したいときは Ctrl+C を入力すればいい。 あとはどんな bindkey をしているかによって変わるのだが 基的にemacsキーバインド 使ってみればわかるけどすごく新感覚なエディタ。 その場で編集してる感がすごくある。 ソースにも "他のシェルにはコレは出来ない" と書いてある。(いいすぎだ) # No other shell could do this. # Edit small files with the command line editor. あと、以下のような

    技術メモ帳 - zshで出来ている新感覚エディタzed
  • zshを利用して基数変換 - 技術メモ帳

    zsh の ARITHMETIC EXPANSION を利用すると、 簡単に基数変換をおこなう事が出来るようだ。 フォーマットは以下のようになっている。 $(( [#変換したい基数値] 数値 )) $(( [#変換したい基数値] 基数#数値 )) たとえば、10進数表記の 256 という値を 2進数、8進数、16進数にそれぞれ基数変換するには 以下のようにすればよい。 10進数 -> 2進数 % echo $(( [#2] 256 )) 2#100000000 10進数 -> 8進数 % echo $(( [#8] 256 )) 8#400 10進数 -> 10進数 % echo $(( [#10] 256 )) 256 10進数 -> 16進数 % echo $(( [#16] 256 )) 16#100 さらに、その数字がどの基数で表現されているもので あるかを指定する事が出来る。 た

  • topコマンドの出力をカラフルにする - 技術メモ帳

    ずっと知らなかった。。 こういったずっと前から知ってるコマンドが カラフルになると感動する。DDI。 やり方は、起動中にzコマンドを入力するだけ。 他にもどこをハイライトするか、など詳細に設定できる。 $ top # 起動中にzと入力 設定し終わったら、W と大文字で入力する事で $HOME/.toprc に現在の設定が保存される。 Linux とかにはいってる procps パッケージの top コマンドだけです。 参考: http://www.linux.or.jp/JM/html/procps/man1/top.1.html