タグ

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

  • 技術メモ帳: [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

    aki77
    aki77 2009/11/30
    rename, zmv, file-rename
  • 技術メモ帳 - 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
  • 定期的にコマンドを実行しその出力の変化を監視する - 技術メモ帳

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

  • 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

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

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

  • 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_

    aki77
    aki77 2008/09/19
    『$SSH_ORIGINAL_COMMAND の部分をうまい具合に調節すれば、悪意あるコマンドを注入することが出来てしまう』
  • ssh-copy-idコマンドで公開鍵をリモートホストに登録する - 技術メモ帳

    http://www.t-dori.net/k-way/?date=20061218 こんなコマンドがあったのか。常識? ssh-copy-id username@hostname.example.jp か。パスワード認証のパスワードが求められる。 あああ、こんな便利なコマンドあったのか。 いわゆる authorized_keys に登録する処理が簡単に行える。 ただ、ほとんどの環境に入ってない。 最近のOpenSSHだと入ってるのかな。 ちなみにいつもはこうやってる。 $ cat ./.ssh/id_rsa.pub | ssh user@remote_host "cat >> ./.ssh/authorized_keys" 参考: http://www.delafond.org/traducmanfr/man/man1/ssh-copy-id.1.html http://takkan-m

    aki77
    aki77 2006/12/21
    『cat ./.ssh/id_rsa.pub | ssh user@remote_host "cat >> ./.ssh/authorized_keys" 』
  • 入力履歴からの予測による自動補完機能 - 技術メモ帳

    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

    入力履歴からの予測による自動補完機能 - 技術メモ帳
    aki77
    aki77 2006/12/05
  • 技術メモ帳 - Iframe の designMode="on" によるリッチテキストエディット

    こんな属性があるのを知らなかった。 実際には、Iframe の属性ではなさそうだが。 どうも、javascript で以下のように指定してあげる事により、 リッチなテキスト編集機能が有効になるようだ。 iframe.contentDocument.designMode = "on"; ちょっとサンプルを作ってみた。 選択範囲の色変えたり、画像貼付けたり出来ます。 http://gomibako.hahaue.com/rth.html (Firefox only) 実際に文字の状態を変化させたりしたい場合は、 同要素の execCommand メソッドを使用すればよい。 たとえば、文字を太字にしたい場合は、 以下のように指定するだけで良い。 iframe.contentDocument.execCommand("bold",false,null); 色を赤くしたければ、 iframe.con

    技術メモ帳 - Iframe の designMode="on" によるリッチテキストエディット
  • 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/* // ==

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

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

  • ページの閲覧者にGreasemonkeyを使用させない方法 - 技術メモ帳

    Greasemonkeyのソースを読んでて見つけたのだが どうも Greasemonkey は、 URLが 'hiddenWindow.html' で終わってるページには スクリプトを適用しないらしい。 したがって、それを利用することによって 閲覧者が Greasemonkey スクリプトを 使用できないようにする事が出来る。 試しに作ってみた。 以下のページでは Greasemonkey スクリプトを使えないはず。 http://gomibako.hahaue.com/test/hiddenWindow.html

  • Greasemonkeyで永続的に外部スクリプトを利用する - 技術メモ帳

    GM_setValue / GM_getValue + unsafeWindow.eval を使って 永続的に外部スクリプトを利用する方法を考えてみた。 わざわざ DOM で script要素 を毎回注入するよりも 速いんじゃないかと思う。 Greasemonkeyには、GM_setValue / GM_getValue というのがあって、 GM_setValue("キー", "値") 上記のように入力してあげる事によって、たとえ、 Firefoxを終了させたとしても消えないデータを作成する事が出来る。 そして、それを利用して、 初回のみ XmlHttpRequest で外部スクリプトデータを取得して、 GM_setValue でスクリプトデータを永続化しておき、 二回目以降は、それを GM_getValue して eval するようにした。 以下は、永続的に prototype.js を

  • Firebug に自作関数を組み込む方法 - 技術メモ帳

    外部スクリプトをロードする関数を毎回書くのが面倒で、 Firebugの組み込み関数にしたら便利なんじゃないかと思って、 loadJS という名前で Firebug に組み込んでみた。 結論から言うと、 /chrome/content/firebug/commandLineAPI.js を編集したら、任意の関数を定義できた。 以下に、手順を書いてみる。 まず、ソースでもある Firebug拡張をダウンロードする。 http://releases.mozilla.org/pub/mozilla.org/extensions/firebug/firebug-0.4-fx+fl.xpi xpi は、実際にはただの zip ファイルなので、 unzip コマンドで解凍できる。 ./$ unzip firebug-0.4-fx+fl.xpi Archive: firebug-0.4-fx+fl.xpi

  • Firebugの便利な組み込み関数 - 技術メモ帳

    id:brazil さんのブックマークで知ったのだが、 Firebugには、便利な組み込み関数が定義されているようだ。 一通りさわってみたのだが、 $x() で 任意のXPath要素が取得できるのとかに感動した。 そして、やっぱりちゃんとドキュメント読むべきだなぁと思った。 XPathから要素を取得する。 $x("/html/body/h1"); -> 要素の配列が返ってくる。 selector名から要素を取得する。(getElementsByTagName) $$("h1") -> 要素の配列 所要時間測定 console#time, console#timeEnd time ~ timeEnd で囲んだ部分の所要時間を 計測することが出来るみたいで、 以下のような関数にまとめると良さそうだ。 function bench( callback ) { var uniq_id = Date

  • sshで指定したコマンドしか実行できない公開鍵を作る - 技術メモ帳

    自動バックアップ処理をさせたいが シェル権限を与えたくないときとかに使える技。 やり方は簡単で $HOME/.ssh/authorized_keys の "コマンドを制限したい公開鍵" の行の先頭に 実行させたいコマンドを記述すればよい。 そのときのフォーマットはだいたい以下のようになる。 command="実行させたいコマンド",sshのオプションをカンマ区切りで書く command=hoge というのを付け足すことによって その公開鍵でアクセスがあったときに 指定したコマンドを実行させることができる。 たとえば、uptime を実行させたいときは、 以下のようにすればよい。 command="uptime",no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding ssh-rsa AAAABbBFERTWER....

  • 1