Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

unix

telnetコマンドで雑に仮想端末につなぐ

telnetコマンドは仮想端末に接続する際利用するコマンドです。 なんだかSSHに似てますが、こっちは通信が保護されません。サンプル置き場なり、公開情報置き場に使うのが良さそうです。 実際のところ たとえば、mapscii.meに接続すれば $ telnet mapscii.med…

nkfコマンドでshiftJIS等々をUTF-8形式にする

こんなshiftJISのテキストがあったとします $ cat shiftjis.txt ?Ă??ƕ??? UTF-8で出力したい場合 $ cat shiftjis.txt | nkf -w てすと文章中身をみたいだけなら、nkfコマンドに直接くわせるのも手 $ cat shiftjis.txt | nkf てすと文章

CLIでOpenStreetMapの内容を表示できる謎アプリ"mapscii"

おためしで起動したいだけなら、以下のコマンドで。 $ telnet mapscii.me拡大は"a"、縮小は"z"。 十字キーで移動。 ローカルに導入 npm経由で導入できます。 $ npm install -g mapscii$ mapscii 参考もと github.com

nkfコマンドで半角文字を全角に

nkfコマンドは文字コードをよろしく扱ってくれるモンです。 副次的な効果として、半角文字を全角文字にしてくれたりします。 実際のところ 総務省提供の市町村名リストにある読み仮名は半角ですが……nkfを通せばこの通り。 $ echo "オオガキシ" | nkf オオガキシ…

sedを使って": \1 not defined in the RE"などと出たらキャプチャの構文が間違っている

またやってしまいました。 sedでパースした文字をキャプチャしようとしたところ、 何度目にしたか分からないエラーが。 ": \1 not defined in the REこの場合、キャプチャのカッコをエスケープさせるか、あるいは"-E"オプションを使ってやる必要があります $…

シェルから画面の電源を落とすdmpsコマンド

DPMSはDisplay Power Management Signalingの略で、 コマンドの内容も名前同様に画面の電源をコントロールするシェル・コマンドです。 実際のところ 以下のコマンドで画面の電源を落とす事ができます。 $ /usr/bin/xset dmps force off 参考もと Ubuntu Manp…

テキストファイルを逆順に表示(tacなし)

tacというコマンドを使えば、一発でテキストファイルを逆順に表示できます…… が、デフォで入ってない事も多いです。 今回はcatの行付きオプションとsort、sedを使って逆順表示を実現する方法について。 実際のところ こんなファイルがあったとします $ cat s…

コマンドエイリアスを無効にする

実際のところ 前回の記事のような、less拡張を前提としたエイリアスを貼っていたとします。 $ alias less='less -eMNF' そのまんま活用すると、こうですね $ less sample.txt 1 16 kByte 2 19 kByte 3 12 kByte 4 19 kByte 5 10 kByte 6 15 kByte 7 17 kByte…

lessコマンドの表示内容を豪華にする

lessコマンドはテキストファイルの内容を確認するのに便利なツールです。 とはいえ、その機能は最小。 今回は、lessに行番号等々を付け加えリッチにする方法を扱います。 実際のところ $ less -eMNF sample.txt オプションの意味はそれぞれ e:一画面で収まる…

スペース区切りだけどワザワザawkを使う気にもなら無い場合、cutコマンドを

shuzo-kino.hateblo.jp 実際のところ "-d"でセパレータを決め、"-f"で何番目*1をつかうか決めます。 $ openssl md5 ubuntu-ja-14.04-desktop-amd64-vhd.zip | cut -d ' ' -f 2 8656fa05069fcafc9bf17ddef7b255afmacOSならpbpasteというのがあるので $ pbpast…

tailコマンドを使って、複数のテキストファイルの中身をファイル名つきで一つのファイルに書き出す

shuzo-kino.hateblo.jp ではファイルの中身を複数のファイルの中身をファイル名付きで出す方法を紹介しました。 今回は「複数のテキストファイルの中身をファイル名つきで一つのファイルに書き出す」方法です。 ……ホラ、納品検収なんかで便利デスヨ(ぐるぐ…

exprやbcを使わずシェル上で計算する

シェル上で計算刷る場合、exprやbcなんてのがありますが……今回はそれらを使わずシェル上で計算する方法です。 参考もと 変数展開を使うと、内部で式を書いておけば評価されます $ echo $((1 + 2)) 3 16進数の計算も(結果は10進数) $ echo $((0x01 + 0x12))…

シェル変数と初期値

変数を設定して、それをprintfで出すだけなら、以下のようなスクリプトで事足りるでしょう。 $ VAR="hoge" $ printf "Value::%s\n" ${VAR} Value::hogeさて、ここで問題。 変数が空の場合一々判定して別のprintf文を作る必要があるのでしょうか? 答えはNO。…

sedで不要な行を削除する その3:行頭や末尾

shuzo-kino.hateblo.jp と shuzo-kino.hateblo.jp の続き。 $ cat data.csv hello,2,a yeah,0,b foo,1,c bar,3,asedで末尾行だけ消すには"$"です。 $ cat data.csv | sed '$d' hello,2,a yeah,0,b foo,1,c一行目はそのまんま1です。 $ cat data.csv | sed '1…

sortコマンドの"-k"オプションで降順にしたり数値順にしたりする

sortコマンドの"-k"オプションではソート方法について指定ができます。 加えて、数珠繋ぎにできるので複雑なソートも可能です。 実際のところ 3番めのキーで昇順にソート、次いで1番目のキーを降順にソートという処理は以下の通り。 $ sort -t , -k 3 -k 1…

sortコマンドでcsvファイル……やtsv的な謎独自ファイルの処理を行なう

実際のところ こんなデータがあったとします。 $ cat data.csv hello,2,ab yeah,0,ab foo,1,ab bar,3,cd区切り文字を","、三番目のカラムをソートする場合 $ sort -t , -k 3 data.csv foo,1,ab hello,2,ab yeah,0,ab bar,3,cd区切り文字を","、一番目のカラ…

OpenSSLでmd5のハッシュ値を出す

OpenSSLでmd5のハッシュ値を出す方法です。 苦労してダウンロードしたUbuntuのイメージファイルが破損してないか調べたり、 テストツールで出した画像を比較したりする時に使えます。 実際のところ 同じテストファイルから、それぞれ別のタイミングで生成し…

catコマンドの行数表示オプション

考えてみりゃ当然なのですが……catにも行数を表示するオプションがあります。 実際のところ そのままズバリ"-n"です。 $ cat -n tmp.txt 1 France 12 "UTC−10:00 — most of French Polynesia 2 UTC−09:30 — Marquesas Islands 3 UTC−09:00 — Gambier Islands …

node製アプリに*NIXコマンドをぶっ込むshelljs

shelljsはnode製アプリで*NIXコマンドを利用可能な便利ライブラリです。 FirebugやYaomenといった有名ドコロで使われていると。 個人的にはSalesforce Mobile SDKでわけも分からず入れるものでしたが……調べてみると便利そうです。 実際のところ 現在いるディ…

cURLで一定の規則名をもったファイル名で保存する

cURLで一定の規則名をもったファイル名で保存する方法です。 実際のところ something.orgというサイトがあったとします。 これで上位のsiteとhostというトコにfile1~file3とかいうのがバラバラに置かれていたとします。*1 これを楽に取るには以下のようにし…

cURLの-wオプションで確認可能なパラメータ(処理時間やレスポンスコード、IPアドレスまで)

前回の記事ではcURLの-wオプションをつかってレスポンスコードを取得する方法を学びました。これは色々なパラメータを取得できる便利な関数です。 実際のところ content_type (もしあれば)リクエストした文書の Content-Type 。 JSONか画像か判定する事が…

cURLでレスポンスコードだけ見る

shuzo-kino.hateblo.jp 以前の記事では、レスポンスヘッダを丸々みる方法を紹介しました。ただ、状況によっては過剰でしょう。 実際のところ たとえば、example.orgというリンクが存在しているか確認したい場合です。 上記の記事通りやると以下のようなりま…

Makefileの".PHONY"という記法について

実際のところ makeコマンドを使って、不要なtxtファイルを一掃するコマンド"clean"を作りたいとします clean: rm -r *.txtところが、このシステムにはとある事情でcleanという同名のファイルがありました $ ls Makefile clean hoge.txtこれでは、コマンドを…

UNIXプロセスを切る方法いくつか

UNIXプロセスを切る方法いくつか 実際のところ Bottleで動いているアプリを止めたいとき pkill $ pkill python kill -9とpidof $ kill -9 $(pidof python) ps、grep、awk $ kill $(ps -ax | grep python | awk '$4 != "grep" {print $1}') 参考もと kill a p…

cURLでincludeオプションをつけるとレスポンスヘッダを見ることができる

cURLでレスポンスヘッダを表示する場合、includeオプションを付けてやります。 実際のところ 前回の記事でJSONを吐き出すパートを作りました。 includeオプションをつけて表示すると、この通り $ curl --include http://localhost:8080/api/status HTTP/1.0 …

UNIX時間はミリ秒単位

余りに間抜けな話ですがメモ。 Javascriptをはじめ、時間系のライブラリはUNIX時間を戻り値として返してくる事が多いです。 これはミリ秒の値です。 実際のところ 今年の5月末日から、来年の3月末日……というか年度末までの日数を出す という挙動を意図したJ…

restfulなサービスにcurlでアクセスする

みんな大好きcURL。 最近、下位10%を弾くテストなんて話が話題になりましたが、アレでも使える話です。 ログイン curl -c cookie.txt -d "user=kaboom" -d "pass=password" "http://example.com/login" curl -b cookie.txt "http://exapmle.com/admin/get_da…

Shellスクリプトで特定の曜日/日付で発生する分岐をつくる

dateの結果を変数展開する事で、特定の曜日に発動する処理を作る事ができます。 cronなんかでは特に有用ですね。 実際のところ 月曜日の場合だけ「hello」と出すBashスクリプトは以下の通りです。 LANG=Cをしとかないと、日本語環境では動かなかったりするの…

「split」コマンドは指定サイズでファイルを分割する

「split」コマンドは指定サイズでファイルを分割する便利ツールです。 ネットワーク越しで更新ファイルを送りたいが、送信側端末に制約がある状況*1では中々有用です。 実際のところ 255バイトごとにファイルを分割する場合、-bオプションをつかいます。 $ s…

ファイル指定のワイルドカードは「*」だけじゃない

ファイル指定のワイルドカードは「*」だけじゃなかったんですね 「?」をつかうと、一致する個数まで選べます。 実際のところ $ ls fileA fileA2 fileB fileC$ tail file* ==> fileA <== abc ==> fileA2 <== abc ==> fileB <== abc12 ==> fileC <== 134abc …

空いてるポートを確認するnmapというコマンド

nmapは空いてるポートを確認できる便利コマンドです。 自分の環境はもとより、他所のサイトのポートも確認できます。 導入(OS X) 基本brewでいけます……が、xdodebulidの権限を設定してないと 以下のようなメッセージを吐いて怒られます。 $ brew install n…

標準出力に出したzipやgz系の圧縮ファイルをパイプで処理したい場合、funzipが使える

一応、標準出力にもzipやgz系の圧縮ファイルを表示する事はできるのですが…… $ cat sample.txt )r?Usample.txt ??,V??J???t.????T????T??[Qb^?BUZfq??*?????Te???%?9?$??qq2?a?t……まぁ、あたり前のように解読不能です。 これを解答するためunzipに渡しても………

特殊変数「$RANDOM」から乱数を得る

特殊変数「$RANDOM」から乱数を得る事ができます。 $ echo $RANDOM 8487 応用:文字列のランダム化 これを応用すると、文字列をランダムでかき乱す事ができます。 $ for i in big brother is watching you; do printf "$RANDOM $i\n"; done | sort | sed -E …

kill -9 の9はSIGKILLという意味

「kill -9」といえば、強制終了の定番コマンドです。 今日の今日まで、この9てのは一体なんなのか把握していなかったのですが…… これはSIGKILLというシグナルの番号なのだそうです。 $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIG…

プロセス置換をつかって、先頭と末尾3行の情報を表示する

どうも上手い手では無いきがしますが、できたので一応…… catでまとめてファイルを読む機構を生かしつつ、bashの特殊変数をつかって表示する形式です。 変数に突っ込んでもいいのですが、なんか釈然としないので…… $ cat vietnam.html | cat <(head -n3 $_) <…

nlコマンドを使うと、ファイルに行数がついてくる

ちゃんと設定されたエディタだと、行番号が左側についてたりしますよね。 ただ、デフォのcatやlessではないのが実際。 そんなときは、nlコマンドを使うと楽できます。 パイプを通すので、他のツールとの連携も楽々。 使い方 なにも指定しなければ、左側に行…

名前付きパイプをつかう

名前付きパイプはファイルシステムを活用し仮想敵なパイプ処理を実現する機構です。 使い方 mkfifoコマンドで作成します。 $ mkfifo /path/to/pipe $ ls -la pipe prw-r--r-- 1 shuzo_kino staff 0 4 25 11:43 pipe $ file pipe pipe: fifo (named pipe)ファ…

zcatやzlessを使ってgz系で圧縮されたファイルの中身をみる

zcatやzlessを使うと、gz系で圧縮されたテキストファイルの中身をみる事ができます。前回の記事で扱ったような、Wikipediaのベトナムに関するページの圧縮ファイルがあったとします。 $ tee >(wc -l >&2) < vietnam.html | gzip > vietnam.gz 3638実は、テキ…

プロセス置換の出力先はデフォで標準出力

Wikipediaのベトナムに関するページを圧縮する仕事があったとします。 その上、どういうわけか、ファイルの行数を知りたいそうです。個別にコマンドを叩いてもいいですが、ここはプロセス置換で楽をしましょう。 やり方 プロセス置換の枠内で、wcの出力先を…

tar.gzの正体と、その作り方

UNIX系を弄っていると、よく遭遇するのがtar.gzだのtar.bz2だのといった圧縮ファイルです。 なんで拡張子が二個並んでるんだ? と思ってましたが……tarは梱包しかやらないそうで*1、圧縮したい場合更にgzipなりで固める必要があります。 とはいえ……まとめて、…

Process Substitution(プロセス置換?)を使って、地獄の名前付きパイプや一時ファイルからサヨナラバイバイ

Process Substitution(プロセス置換?)は、ぱっと見リダイレクトっぽい構文の素敵テクです。 これを使えば地獄の名前付きパイプや一時ファイルからサヨナラバイバイ。 使い方 $ diff <(command1) <(command2) とやれば、コマンド間出力の比較ができます。 …

selectでBashでも対話型っぽいコマンドを実装可能

selectを使うと、Bashでも対話型っぽいコマンドを実装可能です。 実際のところ #! /bin/bash select type in "hoge" "fuga" do echo "You choose $type." done exitこれを実行すると $ bash sample.shell 1) hoge 2) fuga #?とでます。 試しに1を選ぶと #? …

プロセス間で文字列の受け渡しをしたい場合、/proc/$(PID)/fd/$(NUM)が使える……かも?

/proc/$(PID)/fd/$(NUM)とは…… PIDに繋がってるI/Oに対し文字列を流し込む超絶技です。 0は標準入力、1は標準出力、2は標準エラー。3以降は設定していれば別途使えます。 実際のところ 標準入力から文字を受け取って処理、終了するsort.rbというスクリプト…

pidofで、コマンド名から稼働中のプロセス番号がわかる

pidofは、コマンド名から稼働中のプロセス番号を調べることができるコマンドです。 $ pidof catとやれば、 7143てな感じでプロセス番号がわかります。複数のコマンドについて実行も可能です $ pidof ruby cat 21528 21465 21527 21464 インラインで実行もで…

軽い仕事のためにディレクトリ移動したくない場合、グループ化を起動させると楽

別の仕事を実行中、割り込み仕事が入るケースありますよね。 しかもディレクトリ移動しないと出来ないようなもの。いままでは新規タブ開いてやってましたが、 コマンド群を()で括ることでサブプロセスを起動する手があります $ ( cd /cygdrive/c/Users/SHU…

Grepの「-o」オプションを活用し最後に一致した要素だけ出力する

先日の最後の要素を引っ張り出す事例をGrepの魔法を使って書き直すと $ echo http://s3.amazonaws.com/downloads.basho.com/stanchion/1.5/1.5.0/osx/10.8/stanchion-1.5.0-OSX-x86_64.tar.gz | grep -o '[^\/]*$'となります。oオプションは -o, --only-matc…

cutとrevの組み合わせで最後の要素だけ引っ張り出す

revは*NIX標準添付の、文字列をひっくり返すコマンドです ~$ echo http://s3.amazonaws.com/downloads.basho.com/stanchion/1.5/1.5.0/osx/10.8/stanchion-1.5.0-OSX-x86_64.tar.gz | revが、 zg.rat.46_68x-XSO-0.5.1-noihcnats/8.01/xso/0.5.1/5.1/noihcna…

「docopt」を使えばgithubやherokuのCLIツールみたいなUIをドキュメント駆動開発で実装できる。

Julliaとか聞いたこともない珍しい言語もサポートdocopt/docopt.rb · GitHub と、Rubyも対応はしているのですが docopt has been confirmed to work with 1.8.7p370 and 1.9.3p194. If you have noticed it working (or not working) with an earlier versio…

YAMLをコマンドでパースできるツール「yq」

ちょっと前に、JSONをパースしてくれる便利コマンド「jq」を紹介しました。CLI上でjsonパースをしてくれるjqを使えばワンライナーが不要となる - Bye Bye Moore今日散歩中にフと、あの発想でYAML版つくれないかな……と思い検索をかけたところ…… あ、ありまし…

xmllintでCLIでもXMLをパースする

OSXやUbuntuのような*NIX系には、xmllintというXMLをパースする便利なツールがついてます 実例 $ echo '<foo><bar/></foo>' | xmllint --xpath "//foo" - <foo><bar/></foo> XPath Xpathに対応しているため、局面によっては便利につかえることもあります $ xmllint --xpath '//a/@href' vietna…