サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
やる気の出し方
d.hatena.ne.jp/lurker
今まで find と組み合わせてたのだけれども、 GNU chown だと --from というオプションがあることにさっき気づいた。 以下はカレントディレクトリ以下のファイルで 所有者が from_user:from_group なファイルのみ所有者を変更するためのコマンド。 -c オプションを付けて処理の様子を画面に出した方が良いかも。 $ chown -R --from=from_user:from_group to_user:to_group ./ 今までのやり方だと、だいたい以下のような感じ。 オプションとかは適当なのでおそらく動作しない。 最近マスコミで流行ってる、画面はイメージです メソッドを使用した。 $ find . -type f -user from_user:from_group | xargs chown to_user:to_group 実にどうでも良いが、マス
環境変数 GREP_OPTIONS を設定しておくと、 grep/fgrep/egrep を使うときに 好きなオプションを、自動で付加できます。 自分は、以下のようなものを設定しています。 export GREP_OPTIONS="--binary-files=without-match --color=auto" バイナリファイルをマッチさせず、 マッチした箇所を色分けするというものです。 上記のうち特に、色分け機能はすごく便利で、 自分の作った正規表現が実際にどの箇所にマッチしているのか が直感的でわかりやすくなります。 正規表現のプロトタイプ作成時に 便利なのではないかと思っています。
# cat ./test.txt | awk '{print length($0), $0}' | sort -nr | cut -d' ' -f2- script lessバージョン # cat ./test.txt | tr '\n' '\0' | xargs -0 -L1 expr length | \ nl -ba -nln | join - <(nl -ba -nln ./test.txt) | sort -k2nr | cut -d' ' -f3- 各行の文字数を、 xargs + expr length で調べているところがポイント。 あと、こういう場面でしか使える気がしない join コマンドも素敵。 我田引水、自画自賛。
net/http モジュールが、どんな時に Keep-Alive するか調べてみた。 http = Net::HTTP.new("www.google.co.jp", 80) p http.get("/").code #1 p http.get("/").code #2 コレは駄目。 毎回 connection: close を送って、 コネクションを切っている。 http=Net::HTTP.new("www.google.co.jp", 80) http.set_debug_output STDERR http.start{ p http.get("/").code p http.get("/").code } こっちはOK!! connection: keep-alive してる。
vim や emacs、less などのフルスクリーンアプリを終了したときに、 元のコンソールの状態に戻る環境と、戻ってくれない環境というのがあり、 前々からすごく疑問だったので、この際だからと調べてみた。 もしかしたら誰かの役に立つかもしれないので書いておく。 肝心の原因は、端末データベースの enter_ca_mode / exit_ca_mode ケーパビリティ が 適切に設定されてないということにあった。 本当は vim などのフルスクリーンアプリは "元のコンソール状態" に復元しようと、 enter_ca_mode / exit_ca_mode というものを出力するのだが、 このときに、端末データベースから "実際に出力すべきエスケープシーケンス" というものを取得しており、 ここが正しく設定されていないため、うまく元のコンソールに戻らない。 これらを適切に設定すれば良いのだが
テキストファイルから、複数の項目を除外させたいとき、 普通は、以下のように二つのgrepを使用して行うはず。。 cat text.txt | grep -v 'user' | grep -v 'root' 一つのgrepで行う事が出来る。 cat text.txt | grep -v -e 'user' -e 'root' 単純に、正規表現でやった方がよさそう。。 cat text.txt | egrep -v 'user|root'
よくある慣用句として、 sort | uniq -c | sort -nr | head というものがある。 ご存知の通り、重複する行の数をカウントし 高い順に並び替えてheadする。というものだ。 たとえば、前にも書いたが、 指定したディレクトリ以下のファイルの拡張子の統計を取る コマンドは以下のようになる。 #ibook find . -type f | egrep -o '[^.]+$' | sort | uniq -c | sort -nr | head 42 rb 18 php 15 txt 10 cxx 9 html 7 pl 6 log 6 c 5 yml 4 js このときの一番左側のカラムである、集計値を合計する。 #ibook ... | head | rev | cut -d' ' -f2 | rev | paste -d+ -s - | bc 122 集計値のあるカ
環境依存になってしまうかと思われるが、(BSD系) -delete オプションというのを発見した。 その名の通り、削除する。というアクションである。 find . -type f -delete とすると、 カレントディレクトリ以下のファイルを削除する。 これだけだと rm -rf と変わらなく、メリットを感じない。 しかし、たとえばカレントディレクトリ以下の HTMLファイルを削除したいときとか、 今までは、以下のようにxargsを併用していた事と思う。 find . -type f -name '*.html' | xargs rm それを以下のようにシンプルでエレガントに変更できる。 find . -type f -name '*.html' -delete
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 .. . となるはず。 で調べたのだが、その
スタック上でのコード実行を禁止するようなセキュリティ機構を 回避する事が出来る方法、それが Return-into-lib(c) である。 仕組みはすごく簡単で、Stack-BOFと同じように リターンアドレスを書き換える。 そのときの書き換え先が共有ライブラリであるという点だけが違う。 共有ライブラリに処理の流れが変わるだけなので、 スタック上でコード実行を禁止していようが関係がない。 とりあえず、いつも通り 脆弱なプログラムに対して環境変数を利用した攻撃を行う。 それから少しずつ今回の攻撃手法に変えていく事にする。 $ ./vuln.o AAAAAAAAA segmentation fault $ export SHELLCODE=`cat ./shellcode` $ ./vuln.o AAAAAAAAA`printf "環境変数 SHELLCODE のアドレス"` sh-3.0.0
sshは、最後の引数にコマンドを指定すると ログイン先でそのコマンドを実行してくれる。 ssh user@192.168.1.1 "uptime" それを利用して、リモートで該当ファイルをcatし、 その出力結果である標準出力とdiffをさせることによって実現できる。 ssh user@192.168.1.1 "cat .bashrc" | diff - ./.bashrc また、プロセス置き換え(Process Substitution)を利用しても実現可能。 diff <(ssh user@192.168.1.1 "cat .bashrc") <(cat .bashrc)
vで範囲を選択した後にコロンを押して、コマンドモード移行し、 :!pbcopy と入力。 選択した範囲をpbcopyコマンドに渡してるだけです。 しかし、これだと、 そのファイルが空になっちゃうから仕方なく tee してます。 もっといい方法があるかも。。。 :!tee >(pbcopy) tee で、標準出力とクリップボードへコピーしてます。 見た目的には、だいたいこんな感じになります。 :'<,'>!tee >(pbcopy) 補足: pbcopy は、MacOSX 限定です。 cygwinでしたら putclip に置き換えてください。 X系だったら、たしか xclipboard なんとかってのがあったはず。。。
ibook に、ipfw でファイアウォールを入れているのですが、 今日は暇だったので、ログを眺めていたら、 May ... ibook kernel[0]: ipfw: 400 Deny TCP 192.168.1.3:49388 xxx.xxx.xxx.xxx:80 May ... ibook kernel[0]: ipfw: 400 Deny TCP 192.168.1.3:49388 xxx.xxx.xxx.xxx:80 May ... ibook kernel[0]: ipfw: 400 Deny TCP 192.168.1.3:49388 xxx.xxx.xxx.xxx:80 ... .. こんな感じで、DENY がたくさん出ていました。 ただ、HTTP で接続しにいっているだけなのになぜ? (しかも普通にウェブサイトは見れる) と思ってフィルタリングルールを見てみた。 003
角谷さんにBDD(ビヘイビア駆動開発)について話していただくというakasaka.rb#2が行われました。 ほとんどの方と初対面だったのですが、気さくに話していただけまして非常に楽しかったです。 今後ともご指導のほどよろしくお願いいたします。 途中でワーキングプアの方が参加されるというハプニングも発生しました。 また、参加者全員に大場さんより "JRuby Tシャツ" がプレゼントされました。 参加者 ・角谷さん(http://kakutani.com/) ・id:Psychsさん ・レオさん(http://twitter.com/lchin) ・id:secondlifeさん ・野口真吾さん(http://cureblack.com/) ・大場さん(http://ko.meadowy.net/~koichiro/diary/) ・大場(嫁)さん(http://ko.meadowy.net
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
ping -a で音が鳴るようになるので、 これを利用して、ケーブルの接続/切断状況を音で確認。 コンソールとLANケーブルなんかの実作業場所がちょっと遠いときに便利。 ping -a IPアドレス あと何もケーブルだけじゃなくて ファイアウォールやルーティングの設定の時とかにも使えるよね。 あと五感を有効利用するのは良い事だよね。 -- ※これどこかに書いてあったテクニックです
no title なんだか grep のところに間違った記述がされているような気がします。 egrep,fgrep,pgrepはそれぞれ-E,-F,-Pが指定されたときと等価の処理を行う pgrep は、grep -P と等価な処理ではありません。 まったく別のコマンドでプロセスを検索するためのコマンドだと思います。 すくなくとも Linux系ディストリビューション においては。 そういえば、pgrep といえばボクの書いたウルトラわかりやすい記事が! pgrep, pkill を使用してプロセスを殺す - 技術メモ帳
http://ya.maya.st/d/200703c.html#s20070330_1 出力の順番をいじりたいからといって find | sort | xargs とかやってしまうと -print0 は使えない。ああ困ったねぇ。どうしようもないねぇ。 sort -z なんてオプションがあって、NULL文字も受け付けてくれますよ。 GNUのみっぽいですが。 find . -print0 | sort -z | xargs -0 cmd -- 他にも、ちょっと意味合いが違いますが grep -Z なんてものもあるみたいですね。 出力時にNULL区切りするという。
tar tvf ファイル名 で表示。 $ tar tvf ./test.tar drwxr-xr-x hoge/fuga 0 2007-03-18 11:18:49 ./dir/ -rw-r--r-- hoge/fuga 20374 2005-03-13 02:36:51 ./dir/piyo.txt gzipで圧縮されたtarだった場合は、tar tvfz ファイル名。 $ tar tvfz ./test.tar.gz drwxr-xr-x hoge/fuga 0 2007-03-18 11:18:49 ./dir/ -rw-r--r-- hoge/fuga 20374 2005-03-13 02:36:51 ./dir/piyo.txt bzip2で圧縮されたtarだった場合は、tar tvfj ファイル名。 $ tar tvfj ./test.tar.bz2 drwxr-xr-x h
書こう書こう書こうと思っていたら先に書かれてしまった。 404 Not Found この行き場の無い感情をどうにかボクの中から排除しなければならない。 そう考えたときに独り言のようにこのブログロに記述すれば良いじゃないかという 結論にたどり着いたのはもはや必然とも言える。 find | xargs による探索だが、それが簡単なものであれば 実は grep コマンドだけでうまくいく。 GNU grep、BSD 系の grep コマンドでは include、exclude オプションで再帰検索時に検索対象とするファイルを絞り込む事が出来るのだ。 --include=pattern --exclude=pattern たとえば、カレントディレクトリ以下の *.rb から test という文字列を 含むファイルを探索したい場合は次のようにすれば良い。 fgrep -r --include='*.r
忘れてたのでメモ。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
せっかく教えていただいたので 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 した状態で そのログファイル
システム管理とかしてると、特定のディレクトリ以下のファイルの更新を 調べたいときとかっていうのはわりとある。 どんなファイルが更新されてどういった内容に変化したのかを見える化。 またしても Linux / watch ネタだ。FreeBSDはportsで、mac osx(darwin)は どこかで公開されてたdmgを使ってる。 中毒性があるので未成年の使用は禁止されている。 カレントディレクトリ内のファイルを 最近更新があったファイルを上の方に表示し、 最終行2行を表示し続けるもの。 $ watch -n2 'tail -n2 `ls -t`' Every 2s: tail -n2 `ls -t` Wed Feb 28 01:04:40 2007 ==> test2.txt <== unko ==> test4.txt <== aiueoadfsaf ==> test1.txt <== e
はてなブログ Linux環境という前提で、 watch信者なボクの場合はこうします。 $ watch -n10 perl t/foo.t 実は以前に上記のようなコマンドを別コンソールで立ち上げて 常にテストケース結果を確認! というのをcygwinでやっていたのだが、 突然ひどく人間的感情が発生してしまったのでやめた。 CPUがかわいそうだと思ってしまったのだ。
いろいろな作業を同時にしていて、環境変数$PATHが 膨れ上がってしまうときがある(おそらく自分だけだろう) そんなときに使用する、$PATHを再構築するOneLiner export PATH=`echo $PATH | tr ':' '\n' | sort -u | paste -d: -s -`;
単純にアルゴリズムの違いだけど、実際に実験してみた。 いきなり結論から言うと、 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 は英
shell と SIGHUP - odz buffer 関連: 一度 tty から起動したプロセス (csh/ksh 版) - にぽたん研究所 なるほど。zshではデフォルトだと 終了時にSIGHUPが送信されるらしい。 手元のbash2.0で試してみたら終了時にSIGHUPが送信されなかった。 zshで終了時に警告を出さないようにするには、 setopt nocheckjobs とすればよいようだ。 あと、zshにはいきなりdisownの状態(job tableに加わらない状態)で バックグラウンド実行する &! という記法がある。 SIGHUP送られない。 % perl nohup.pl &! % exit % pgrep -fl nohup.pl 524 perl nohup.pl -- 余談だが、zshではsetoptに指定するオプション名に 好きなだけアンダーバーをつける事が出来
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
次のページ
このページを最初にブックマークしてみませんか?
『d.hatena.ne.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く