find|xargsでスペース込みのパスが有る場合
2011-02-17-1 / カテゴリ: [linux][command] / [permlink]
$ find path [opt] -print0 | xargs -0 commandでGo
これで、findの結果が\0区切りになり、xargsのデリミタの扱いが\0になる。
http://linuxjm.sourceforge.jp/html/GNU_findutils/man1/xargs.1.html
例: "a b.txt" がある場合
zaki@salva% find . -name "*txt" [~/tmp/path] ./a b.txt ./a.txt ./b.txt ./sub/a b.txt ./sub/a.txt ./sub/b.txtこんなディレクトリ構成の場合("a b.txt"がある)
zaki@salva% find . -name "*txt" | xargs file [~/tmp/path] ./a: ERROR: cannot open `./a' (No such file or directory) b.txt: empty ./a.txt: empty ./b.txt: empty ./sub/a: ERROR: cannot open `./sub/a' (No such file or directory) b.txt: empty ./sub/a.txt: empty ./sub/b.txt: empty"a"とか"b.txt"なんかねーよといわれる。
これは、findの結果が改行区切りで出力されるためで、更にxargsが改行とスペースを区切りとみなしているため。
zaki@salva% find . -name "*txt" | od -c [~/tmp/path] 0000000 . / a b . t x t \n . / a . t x 0000020 t \n . / b . t x t \n . / s u b / 0000040 a b . t x t \n . / s u b / a . 0000060 t x t \n . / s u b / b . t x t \n 0000100んで、-print0を付加してやると
zaki@salva% find . -name "*txt" -print0 | od -c [~/tmp/path] 0000000 . / a b . t x t \0 . / a . t x 0000020 t \0 . / b . t x t \0 . / s u b / 0000040 a b . t x t \0 . / s u b / a . 0000060 t x t \0 . / s u b / b . t x t \0 0000100区切りが\0に変わる。
で、xargs -0 で本来「スペース/改行区切りで」ファイル名を拾う動作が、\0区切りになる、と。
zaki@salva% find . -name "*txt" -print0 | xargs -0 file [~/tmp/path] ./a b.txt: empty ./a.txt: empty ./b.txt: empty ./sub/a b.txt: empty ./sub/a.txt: empty ./sub/b.txt: empty
そもそもスペース込みのファイル名やディレクトリ名をつけるな、という話。
xargs(1)
find(1)
エミュレータでパケットキャプチャ
2011-02-01-1 / カテゴリ: [command][network][Android] / [permlink]
ホストPCやサーバ側でキャプチャできない環境の場合、エミュ自身の内蔵tcpdumpでキャプチャ可能。
多分使う機会はホストがwindowsで、ホスト自身で動かしてるサーバへアクセスする際のキャプチャくらいかね。(リモートならEthereal使えば良し)
基本は
-s 0 は、未指定だとデフォルトキャプチャサイズが96bytesになり、キャプチャ漏れが発生するので、適当に指定すればよし。0指定だと65535byteになる。
-X は指定なしだと訓練されていないと読めない(笑)
port 80 の部分は、キャプチャのフィルタ条件。指定がないとidleでも結構パケットが飛んでいるので、見たいパケットが見えなくなる。
"port 80" で 80/TCP の全てのパケット
"host jp-z.jp" で、jp-z.jp との全パケット
"port 80 and host jp-z.jp" で↑のand
「コマンドラインじゃわからん!wiershark/etherealで見たいんだ!」な場合は
あとはググッてねん。
ちなみに停止の^Cで、シェルごとなぜか抜けてしまうので、PCのシェル(コマンドライン)上で
実機だとpermission deniedになる。うーん、rootな端末もあった方が良いのかも。
多分使う機会はホストがwindowsで、ホスト自身で動かしてるサーバへアクセスする際のキャプチャくらいかね。(リモートならEthereal使えば良し)
基本は
# tcpdump -s 0 -X port 80など。
-s 0 は、未指定だとデフォルトキャプチャサイズが96bytesになり、キャプチャ漏れが発生するので、適当に指定すればよし。0指定だと65535byteになる。
-X は指定なしだと訓練されていないと読めない(笑)
port 80 の部分は、キャプチャのフィルタ条件。指定がないとidleでも結構パケットが飛んでいるので、見たいパケットが見えなくなる。
"port 80" で 80/TCP の全てのパケット
"host jp-z.jp" で、jp-z.jp との全パケット
"port 80 and host jp-z.jp" で↑のand
「コマンドラインじゃわからん!wiershark/etherealで見たいんだ!」な場合は
# tcpdump -s 0 -w /mnt/sdcard/capture.cap port 80でキャプチャ結果をファイルへ出力できるので、DDMSのファイルエクスプローラで取り出して見ればOK
あとはググッてねん。
ちなみに停止の^Cで、シェルごとなぜか抜けてしまうので、PCのシェル(コマンドライン)上で
% adb -s emulator-5554 shell tcpdump -s 0 -w /mnt/sdcard/capture.cap port 80 and host jp-z.jpとした方が良いかも知れん。
実機だとpermission deniedになる。うーん、rootな端末もあった方が良いのかも。
強制make
2007-03-13-1 / カテゴリ: [programming][command] / [permlink]
% make -Bいわゆるリビルド
JMのManpage of MAKEにはないから、新しいオプションなのかな。
GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This program built for i686-pc-cygwin
暗号化zipファイル作成
2006-12-27-1 / カテゴリ: [linux][command] / [permlink]
普通のzip生成
ディレクトリ丸ごと再帰的に
再帰圧縮をパス尽きzipに
バッチ的に引数にパスワードを渡したいとき (非対話モード)
-P について man zip を超意訳
% zip files.zip file1 file2 ...
ディレクトリ丸ごと再帰的に
% zip files.zip -r ./dir/
再帰圧縮をパス尽きzipに
% zip -e files.zip -r ./dir/ Enter password: <- パスワードの入力(非表示) Verify password: <- パスワードの確認(非表示)
バッチ的に引数にパスワードを渡したいとき (非対話モード)
% zip -P password files.zip -r ./dir/
-P について man zip を超意訳
-P password は安全じゃない。大抵の環境でコマンドラインの引数がほかのユーザに丸見えだし、一人で使うマシンでも肩越しにディスプレイを見られたらアウト。対話的に聞いてくるやつなら見えないのでそっちを使おう。
GNUのC++コンパイラのコマンド名はg++
2006-12-21-1 / カテゴリ: [command][c++] / [permlink]
やべー、ずっと gcc 使ってエラーになって不思議がってた。
tar + gz + gpg で暗号化バックアップ
2006-09-28-1 / カテゴリ: [暗号][shell][command] / [permlink]
共用ファイルサーバへのファイルバックアップ、とか。
--batch で対話モードのオフ
-o FILENAME で出力ファイル名の指定
--passphrase-fd N でパスフレーズの入力ディスクリプタ指定
1年以上シェルスクリプトでコード書いてないから書式が…(汗)
参考:Symmetric key encryption by GnuPG
PASS=パスフレーズ SRC=バックアップ元 DST=バックアップ先 % echo ${PASS} | { tar zcvf - ${SRC} | gpg --batch -o {DST} --passphrase-fd 3 -c; } 3>&0
--batch で対話モードのオフ
-o FILENAME で出力ファイル名の指定
--passphrase-fd N でパスフレーズの入力ディスクリプタ指定
1年以上シェルスクリプトでコード書いてないから書式が…(汗)
参考:Symmetric key encryption by GnuPG
ネットワークを使用中のプログラム一覧
2006-03-14-2 / カテゴリ: [win][command] / [permlink]
-b 付きで netstat 実行
> netstat -b Active Connections Proto Local Address Foreign Address State PID TCP MOZZARELLA:2542 localhost:2543 ESTABLISHED 4076 [firefox.exe] TCP MOZZARELLA:2543 localhost:2542 ESTABLISHED 4076 [firefox.exe] TCP MOZZARELLA:2869 localhost:3920 ESTABLISHED 1288 C:\WINDOWS\System32\httpapi.dll c:\windows\system32\upnphost.dll C:\WINDOWS\system32\RPCRT4.dll C:\WINDOWS\system32\ole32.dll [svchost.exe]
diff オプション再帰編
2006-03-08-2 / カテゴリ: [linux][unix][command] / [permlink]
-q: 差分の有無のみ出力
まぁ、基本オプションだろうけど。
-x PATTERN: PATTERN(ファイルグロブ)に一致するファイルを除外
perl のパスまで変わってるのかよ^^;
まぁ、基本オプションだろうけど。
$ diff -rq chalow-1.0rc4/ chalow-1.0rc6 ファイルchalow-1.0rc4/ChangeLogとchalow-1.0rc6/ChangeLogは違います ファイルchalow-1.0rc4/ChangeLogReader.pmとchalow-1.0rc6/ChangeLogReader.pmは違います ファイルchalow-1.0rc4/READMEとchalow-1.0rc6/READMEは違います ファイルchalow-1.0rc4/chalowとchalow-1.0rc6/chalowは違います ファイルchalow-1.0rc4/cl.confとchalow-1.0rc6/cl.confは違います ファイルchalow-1.0rc4/clsearch.cgiとchalow-1.0rc6/clsearch.cgiは違います chalow-1.0rc6/confだけに発見: utf8 chalow-1.0rc4/conf/ytoだけに発見: cl-yto.conf chalow-1.0rc6/conf/ytoだけに発見: cl.conf chalow-1.0rc6/conf/ytoだけに発見: debug.css ファイルchalow-1.0rc4/conf/yto/diary.cssとchalow-1.0rc6/conf/yto/diary.cssは違います
-x PATTERN: PATTERN(ファイルグロブ)に一致するファイルを除外
$ diff -x README -x "Change*" -ru chalow-1.0rc4/ chalow-1.0rc6/ --- chalow-1.0rc4/chalow 2004-12-24 21:09:50.000000000 +0900 +++ chalow-1.0rc6/chalow 2005-08-21 14:35:31.000000000 +0900 @@ -1,5 +1,5 @@ -#!/usr/bin/env perl -# $Id: chalow,v 1.95 2004/12/24 12:09:50 yto Exp $ +#!/usr/bin/perl : :chalow の新しい(つっても半年以上前だけど)バージョンに「続きを見る」機能があるらしーけど、割とコードをいじくり回してるのでうまくマージしないと…
perl のパスまで変わってるのかよ^^;
ルーティングの表示・変更
2006-03-02-1 / カテゴリ: [win][command][network] / [permlink]
表示
Destination: 172.26.0.0 / Netmask: 255.255.0.0 の Gateway を 192.168.1.1 として追加
↑の Gateway を 10.0.0.1 に変更
↑の設定を削除
add と change は実際に経路がないと設定できないっぽい(XP SP2)
> route print または > netstat -r : =========================================================================== Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.100 20 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 192.168.1.0 255.255.255.0 192.168.1.100 192.168.1.100 20 192.168.1.100 255.255.255.255 127.0.0.1 127.0.0.1 20 192.168.1.255 255.255.255.255 192.168.1.100 192.168.1.100 20 224.0.0.0 240.0.0.0 192.168.1.100 192.168.1.100 20 255.255.255.255 255.255.255.255 192.168.1.100 192.168.1.100 1 255.255.255.255 255.255.255.255 192.168.1.100 3 1 Default Gateway: 192.168.1.1 =========================================================================== :
Destination: 172.26.0.0 / Netmask: 255.255.0.0 の Gateway を 192.168.1.1 として追加
> route add 172.26.0.0 mask 255.255.0.0 192.168.1.1
↑の Gateway を 10.0.0.1 に変更
> route change 172.26.0.0 mask 255.255.0.0 10.0.0.1
↑の設定を削除
> route delete 172.26.0.0
add と change は実際に経路がないと設定できないっぽい(XP SP2)
NetBIOS名の名前解決
2005-12-25-2 / カテゴリ: [win][command][network] / [permlink]
[2004-06-18]
って,中途半端にしか書いてない...(しかもリンク切れ)
http://www.atmarkit.co.jp/fwin2k/win2ktips/378findip/findip.html
(2006-03-03 追記)
オプション足らず…
って,中途半端にしか書いてない...(しかもリンク切れ)
http://www.atmarkit.co.jp/fwin2k/win2ktips/378findip/findip.html
> nbtstat -a cheddar > nbtstat -cで Go
(2006-03-03 追記)
オプション足らず…
dnsキャッシュのクリア
2005-12-25-1 / カテゴリ: [win][command][network] / [permlink]
書いてなかったのでメモ
> ipconfig /registerdnsDHCP の /renew も同時に行う.
N回マッチしたら終了
2005-12-22-3 / カテゴリ: [linux][command][grep] / [permlink]
$ grep -m N pattern
Fromアドレスの収5集
$ find ~/Maildir -type f | xargs grep -m 1 '^From: ' | sed 's/.*From: \(.*\)/\1/' | sort | uniqん、sed は 's/.*From: //' の方が良いかな?
procmailrc でメールの保存先
2005-12-21-1 / カテゴリ: [linux][メール][command] / [permlink]
/. で終わる ... MH 形式
/ で終わる ... Maildir 形式
.procmailrc によるフォルダ振り分けは、あらかじめ対象フォルダを準備しておかないと NG
Maildir の場合は、配下の new/cur/tmp は勝手にできる。
/ で終わる ... Maildir 形式
.procmailrc によるフォルダ振り分けは、あらかじめ対象フォルダを準備しておかないと NG
Maildir の場合は、配下の new/cur/tmp は勝手にできる。
パッケージ管理あれこれ
2005-11-05-1 / カテゴリ: [cygwin][debian][redhat][Solaris][command] / [permlink]
すぐ忘れるのでメモ
インストール済みのパッケージ一覧出力
インストール済みのパッケージ foo に含まれるファイル一覧
ファイル /foo/bar をインストールしたパッケージ
solaris はかなりアヤシイ.
インストール済みのパッケージ一覧出力
# dpkg -l (debian) # rpm -qa (redhat) # cygcheck -cd (cygwin) # pkginfo (Solaris)
インストール済みのパッケージ foo に含まれるファイル一覧
# dpkg -L foo (debian) # rpm -ql foo (redhat) # cygcheck -l foo (cygwin) # pkgchk -vn foo (Solaris)
ファイル /foo/bar をインストールしたパッケージ
# dpkg -S /foo/bar (debian) # rpm -qf /foo/bar (redhat) # cygcheck -f /foo/bar (cygwin) # pkgchk -lp /foo/bar (Solaris)
solaris はかなりアヤシイ.
fetchmailエラー cannot get a range of message sizes
2005-08-20-4 / カテゴリ: [linux][command][POP3][メール] / [permlink]
ここ数日、メールが全く届かないからおかしいなぁと思っていたら(個人メールはなくても、ML と spam は届くはず...orz)、fetchmail がエラー吐いていた。(というか全然気づかんかった...)
で、調べてみると、
http://lists.ccil.org/pipermail/fetchmail-friends/2003-October/008061.html
というか
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=323027
これかなぁ。
まぁ、
数日前に、友人から結婚します(未来形)のご報告メールが...
$ fetchmail fetchmail: 185 通のメッセージがアカウント zaki@mail.example.org , サーバ mail.example.org 宛に届いています。 (933330 バイト) fetchmail: cannot get a range of message sizes (1-100). fetchmail: クライアント/サーバプロトコルエラーが mail.example.org よりメールを 受信している最中に発生しました。 fetchmail: Query status=4 (PROTOCOL)んぎゃぁ。
で、調べてみると、
http://lists.ccil.org/pipermail/fetchmail-friends/2003-October/008061.html
> This is the log:新しい Bug なのね。
fetchmail: cannot get a range of message sizes (1-14).
i have added fetchsizelimit 0 for this account and now it works (wasn't
necessary with 6.2.4)
というか
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=323027
これかなぁ。
まぁ、
$ fetchmail --version : Fetch message size limit is 100 (--fetchsizelimit 100). :と(そんな設定はしていないのに)なってるんで、.fetchmailrc に
fetchsizelimit 0追加しておけば、とりあえず fetch できた。
数日前に、友人から結婚します(未来形)のご報告メールが...
tar アーカイブから、部分的にファイルを取り出す。
2005-08-08-2 / カテゴリ: [linux][command] / [permlink]
$ tar tzvf tmp.tar.gz tmp/telnet/terminal.c tmp/telnet/tn3270.c tmp/telnet/types.h tmp/telnet/utilities.c tmp/test.cat tmp/test.grep tmp/unison.test/ tmp/unison.test/dira/ tmp/unison.test/dirb/ tmp/zzz/ tmp/zzz/1.0.6/ tmp/zzz/1.0.6/zzz.txt tmp/zzz/1.0.7/ tmp/zzz/1.0.7/zzz.txt tmp/zzz/today/つー、状態で
$ tar zxvf tmp.tar.gz tmp/zzz tmp/zzz/ tmp/zzz/1.0.6/ tmp/zzz/1.0.6/zzz.txt tmp/zzz/1.0.7/ tmp/zzz/1.0.7/zzz.txt tmp/zzz/today/
ls をリダイレクトしたときに、1行複数項目表示
2005-08-08-1 / カテゴリ: [unix][command] / [permlink]
$ ls -C | more
オプションなしで ls をリダイレクト・パイプしたときは1行1エントリになる(つか、これがデフォルトみたい)。
出力は標準出力に対して行われ、 -C オプションで複数列出力が要求されな いman ls より
限 り、1 行に 1 エントリである。しかし、端末に対する出力では、出力が 1
列または複数列のどちらになるかが定められていない。オプション -1 と -C
は、それぞれ 1 列出力と複数列出力を強制させるために使用される。
最終更新時間: 2013-05-02 16:12