Bye Bye Moore

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

unix

直前のコマンドの引数を継続してつかう

「!*」で直前のコマンドで使った引数を呼び出す事ができます。 $ echo "hello\n" hello\nとした場合、 $ printf !* printf "hello\n" helloと、一旦展開された後で、実行されます。 コマンド誤爆でも大活躍 これを活かせば、コマンドを誤爆した場合にもそ…

N個前のコマンドを実行する

N個前に実行したコマンドを再度実行する事ができます。 たとえば、次のような状態の場合 $ history 3 594 echo 'fuga' 595 echo 'yeah' 596 history 3「!-戻りたい個数」と入力すると、実行可能です。 $ !-3 echo 'fuga' fuga履歴には、次のように展開した後…

historyの番号を指定して実行する

historyコマンドを実行すると、こんな感じで「番号」「コマンド」という順番ででてきます。 $ history 10 558 basename `dirname hoge/huga/ruby.rb` 559 basename `dirname hoge/huga/ruby.rb` 560 history 561 basename `dirname hoge/huga/ruby.rb` 562 e…

basenameでファイル名を楽に取得する

basenameは「/」や拡張子を削除し楽にファイル名を取得できるコマンドです 現在いるディレクトリ名を取得 $ basename hoge/huga/ hugaファイル名を含んだパスの場合*1 $ basename `dirname hoge/huga/ruby.rb` huga ファイル名を取得 $ basename hoge/huga/r…

bashでもcase文がつかえる

bashでも、caseが使えます。 たまにみかける、 if [ some_rule ]; then #something to do else #something to do fiを置き換えるにはちょうど良いかもしれません。 POSIX的にどうなのかは、調査中ですが…… 実際のところ 記法は以下のとおりです。 case word …

dirコマンドをつかうと、「~/」からの位置がわかる

現在位置を調べる場合、 $ pwd /Users/shuzo_kino/ruby/sampleという手が使えます。 ただ、これだと人に渡すとき色々アレな事もありますよね。 そんな時はdirsコマンドを使います。 $ dirs ~/ruby/sampleこの通り、ホームディレクトリを示す「~/」にして位置…

標準出力に表示しつつ、結果をファイルに保存したい場合は「tee」コマンドをつかう

標準出力に表示しつつ、結果をファイルに保存したい場合は「tee」コマンドをつかえばよいです。 $ cal | tee cal.log 3月 2015 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 保存先のファイ…

UNIXコマンド「test」が思ったより使える件

一般に、「test」はファイルが存在するか確認する際に使われるコマンドです。 結果は標準出力ではなくコマンドの終了状態に格納されるため、注意が必要です。 $ test -e aasm_sample.rb ; echo $?とまぁ、これ単体だとイマイチありがたみがわかりませんが 設…

dfコマンドでディスクの使用量や残り容量を見る

dfコマンドは、ディスクの使用量や残り容量を確認できるコマンドです。 $ df ~/ Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/sda6 102226264 6255524 90777884 7% /"h"オプション(human-readable)をくっつけると、人が読みやすい形に成型…

UNIXコマンドのあたまにLANG=Cでデフォルトロケールで実行できる

たまに、 LANG=C minicomみたいな感じで頭に「LANG=C」とかつける奴がありますよね。 これ、デフォルトでは日本語優先状態のコマンドをデフォルト…つまり英語環境で実行してくれるアレらしいのです $ date 2015年 1月27日 火曜日 23時50分39秒 JST$ LANG=C d…

rfcommをつかって、Bluetooth機器をシリアル通信機器のごとく扱う

rfcommは遠隔にあるBluetoothを仮想シリアルポートとして認識させるコマンドです。 より正確には、 Bluetoothのプロトコルスタックの一つで、L2CAP(メモ:Bluetooth機器間の通信路。OSIの第二レイヤに相当)上でRS-232Cシリアルポートの転送機能をエミュレ…

UNIX系環境でシリアル通信をする際便利なCLIアプリ「minicom」

「minicom」はUNIX系環境でシリアル通信をする際便利なCLIアプリです。 導入 Ubuntu $ apt-get install minicom OSX 事前に必要なライブラリを導入しておかないといけません $ brew install minicom 初期設定 読み込むポートやボーレートは $ sudo minicom -…

diffコマンドとpatchコマンドで差分を扱う

diffコマンドとpatchコマンドを使うことで、 差分を楽に扱うことができます。次のようなファイル群があったとします。 $ ls difffile.diff test.txt test_diff.txt $ tail +1 * ==> difffile.diff <== --- test.txt 2015-01-04 21:46:58.000000000 +0900 +++…

テキストファイルをまとめてcat風に表示したい場合、tailを使う手が

tailコマンドは通常、ファイルの末尾数行を表示するコマンドですね。 $ ls difffile.diff test.txt test_diff.txtという構成で、全部表示したい場合、以下のようにやるとファイル名つきで表示してくれます。 $ tail +1 * ==> difffile.diff <== --- test.txt…

ddコマンドで適当なビット列のファイルを生成する

試験用に適当なビット列のデータを作りたい場合、ddコマンドが使えます。 使い方 $ dd if=/dev/random of=~/output bs=1024 count=1; 1+0 records in 1+0 records out 1024 bytes transferred in 0.000183 secs (5592405 bytes/sec)bs × countで長さを決めま…

topコマンドでリアルタイムで変動するプロセスの情報をみる

topコマンドは top - display and update sorted information about processes とあるように、プロセスの状態を一覧してくれるコマンドです。 状態を逐次更新してくれるので、瞬間的に負荷がかかるようなコマンドもわかります。 今迄pgrepやpsをカツカツ叩い…

bashコマンドに文字列を渡すと実行してくれる

任意の出力結果をパイプでbashに渡してあげると、 それが解釈可能である場合実行してくれます。例えば、echoで「cal」と出し、それを繋ぐケースでは…… $ echo 'cal' | bash 12月 2014 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19…

Rubyでも文字列クラス使って正規表現を楽に書く

ちょっと前にやったPOSIX 文字クラスですが、これらはRubyでも活用できます。 [:alnum:] 英数字 (Letter | Mark | Decimal_Number) [:alpha:] 英字 (Letter | Mark) [:ascii:] ASCIIに含まれる文字 (0000 - 007F) [:blank:] スペースとタブ (Space_Separator…

lsofで動作中のプロセスやファイルの詳細を調べる

lsofは動作中のプロセスの詳細を調べるコマンドです便利なコマンドですが、深い所まで手を突っ込むため、sudoで実行する必要があります。 また、全プロセス見に行くので結構重いのが難点です。httpdを動かした状態でやると $ sudo lsof -i -n -P | grep LIST…

touchはご丁寧にも大文字小文字を一緒くたにして下さる

touchはご丁寧にも大文字小文字を一緒くたにして下さいます。 つまり... $ touch MKdata.rbとやれば、mkdata.rbを選んでくれます。ところが、横着して mkdata.rbとMKDATA.rbをtouchコマンドで作ろうとすると... $ touch mkdata.rb $ ls mkdata.rb $ touch MK…

findのregexオプションやiregexオプションで一寸入り組んだファイルを検索する

findには、正規表現を使って検索できるregexオプションがあります。 $ ls mkdata* mkdata.rb mkdata_fund.rb mkdata_funds_relation.rb mkdata_partner.rb mkdata_proffessor.rbこんなディレクトリがあったとしてregexをやると範囲を絞り込んで検索もできま…

manコマンドでC標準関数を調べる

コマンドの意味を知る時に使う、manコマンド。 実は...同名のC言語ライブラリ関数を調べる事ができます。 例えば、printf(3)とかです。何もやらなければ $ man printf | head -n 6 PRINTF(1) BSD General Commands Manual PRINTF(1) NAME printf -- formatte…

OS Xで文字列からdateを生成する

OS Xで文字列からdateを生成するには、以下のようにします。 $ date -jf '%Y-%m-%d' '2014-12-12' 2014年 12月12日 金曜日 23時04分30秒 JST指定しない部分は、環境から呼び出すみたいです UTCにしたい場合はjnfとします $ date -juf '%Y-%m-%d' '2014-12-12…

指定日以前の不要ブランチをまとめて消す

前回の続きっぽい記事です。手当たり次第ブランチを切りまくっていると、問題になってくるのが不要ブランチの処分。 実験用のお砂場として弄り回した果てに存在すら忘れていたのがチラホラ... 以前も似たような事をやりましたが、あのバージョンだと日付以降…

PS1へ現在いるブランチを表示させる

brewでgitを導入した場合、以下のディレクトリに存在しています。 $ ls /usr/local/Cellar/git/2.0.0/etc/bash_completion.d/git-completion.bash とgit-prompt.shがあります。 今回つかうのは後者です $ cp /usr/local/Cellar/git/2.0.0/etc/bash_completio…

columnコマンドで段組みのテキストデータを綺麗に成型する

columnは...段組みのテキストデータを綺麗に成型してくれるコマンドです $ cat sample.txt hoga huga piyo 12 3 45 6 7 8 9 a bc てな無茶苦茶なモノがあったとしても $ cat sample.txt | column -s " " -t hoga huga piyo 12 3 45 6 7 8 9 a bcとあっという…

sortのオプションを使えば自然な形で整列してくれる。

以下のような文字列があったとします。 $ seq -10 10 | sed -e s/^4/hoge/ -e s/^-8/fuga/ -10 -9 fuga -7 -6 -5 -4 -3 -2 -1 0 1 2 3 hoge 5 6 7 8 9 10デフォルトのsortだと、 $ seq -10 10 | sed -e s/^4/hoge/ -e s/^-8/fuga/ -1 -10 -2 -3 -4 -5 -6 -7 …

連番の値やランダム値を出力したい場合はjotコマンドが便利

seqのように連続数を $ jot 10 1 10 1 2 3 4 5 6 7 8 9 10ランダム値の場合は「r」オプションを。 $ jot -r 10 1 10 4 2 2 8 3 8 10 5 3 3 $ jot -r 10 1 10 8 9 2 5 7 2 2 2 3 2連続する16進数を表示するのも楽々。 $ jot -w 0x%x 10 20 0x14 0x15 0x16 0x1…

sedで不要な行を削除する

sedは文字列置換以外にも、不要な行を削除するのにも使えます。 $ seq 1 10 | sed -e "1 ,3d"4 5 6 7 8 9 10headとtailでも似た事ができますが、コッチの方が楽なケースもありそうですね。 参考もと man sed

readコマンドで標準入力から変数を代入する

readは標準入力から変数を代入するコマンドです。 $ read Hoge <<< 'as' $ echo ${Hoge} asそもそもは標準入力と連動して動くものです。 以下のようなbashスクリプトを組み #!/bin/bash ## hoge.sh # single 'read' statement can set multiple variables. e…

ヒアストリングで出力コマンドを使わずともstdinに文字列を渡す事ができる

単にコマンドへ文字列を渡したいだけのケースって結構多いですよね。 bash系では、そういった要望にお答えする手法「ヒアストリング」が用意されています。 これを使えば毎回毎回echoやprintfをつかって文字列を生成する必要がなくなるわけです。 $ tr a-z A…

sedの行頭・末尾一致を単体使うと定型文にコメントを入れる処理を楽にできる

ドキュメント中のコメントに $$ hoge $$ $$ huga $$なんて出力をしたい場合、 今迄は一行毎に $ echo ' $$ hoge $$' $ echo ' $$ huga $$'とやるか、ヒアドキュメントで $ cat << 'EOS' > $$ hoge $$ > $$ huga $$ > EOSなんてやってました。 毎回毎回、定型…

mkdirしてすぐ移動したい場合はcd $_とやると楽

mkdirしたら、すぐ移動したいのが人情というものです。 ぱっと思いつく泥臭い方法は mkdir=>C-rで履歴辿り=>mkdirを消してcd といった感じでしょうか。 ここでbashの組込み変数を使うと若干楽にできます。 今回使う「$_」には、最新のパラメータが格納されて…

odやhexdumpで内容をバイナリダンプしてみる

バイナリダンプは指定したファイル・標準出力の結果を16進数として吐き出すものです。 メモリの状態やバイナリファイルのヘッダを確認するときに重宝します。 組込み業界で仕事をしていた頃よく使いました(遠い目 odコマンド まずはodコマンドから。 タイプ…

cutと似たコマンドcolrmは不要な部分のみ消し去る

$ colrm {削除をはじめる番号} {削除を終える番号}といった形でつかいます。cutでやると $ for i in {1..9}; do printf $i; done | cut -b 1 -b 5-9 156789となるところ、colrmだと $ for i in {1..9}; do printf $i; done | colrm 2 4 156789となります。残…

bannerコマンドやfigletコマンドでアスキーアートを生成する

bannerというコマンドを使うと、 昔懐かしな電光掲示板風のAsciiアートを標準出力に表示できます。 $ banner -w 40 "as you like" ### ####### ## ######### #### ## ## # ## # ## # ## # ## ############### ############## # #### ## #### ###### ## #####…

テキストデータの行数や文字数をカウントしたい場合はwcコマンドを使う

wcは"word, line, character, and byte count"との説明通り、文字数や行数を数えるコマンドです。 原則オプションと組み合わせて使います。 -m The number of characters in each input file is written to the standard output. If the current locale does…

git管理下のディレクトリにあるRubyスクリプトの総行数を調べる

まず、git ls-filesというコマンドを使うとファイル名一覧を出す事が出来ます。 $ git ls-files .gitignore .magnum.yml .rspec Gemfile README.rdoc Rakefile app/assets/images/.keep app/assets/javascripts/application.js app/assets/javascripts/boots…

Rubyでディレクトリ検索したいなら標準添付のFindライブラリを使った方が幸せになれるかもしれない。

FindライブラリはRubyに標準装備されている検索用コマンドです。 `find ...`とかやらなくとも良いのです。 その上、標準添付なのでプラットフォームの差分を吸収してくれるのが良いです。記法はfind(1)に則るので、フツーに使えます。 $ ruby -rfind -e 'Fin…

一枚のネットワークカードで複数のIPアドレスを扱う方法

Linux環境下のネットワークカードでは仮想的に複数のアドレスを運用(エイリアス方式)する事ができます。 極力NICは分けておいたほうが良いのですが、「仮アドレスの試験」や「新環境への移行期間」では有効に使う事ができます。 具体的な手法 今回は アド…

cutコマンドを使って羅列型のテキストデータを簡単に切り出す

前回の例と同様、サンプルデータsampledata.logを用意します。 data [alpha] data [beta] data [gamma] data [delta] deta [epsilon] 切り出す dでカラムを切り出す記号を選び、-f NUMで何番目を抽出するか決めます $ cut -d '[' -f2 sampledata.log | cut -…

trコマンドで不要文字を抹殺したり小文字を大文字に置換したり。

YAMLデータをBashスクリプトのみでパースする - Bye Bye Mooreなどで扱ったtrコマンドについて理解が深まったのでメモ。仮に、sampledata.logとして以下のようなテキストデータがあったとします。 $ cat sampledata.log data [alpha] data [beta] data [gamm…

popdやpushdでcd ../../.... なアレから抜けられる

pushd---ディレクトリを突っ込む $ pushd ~/Documents ~/Documents ~ $ pushd ~/Downloads ~/Downloads ~/Documents ~ dir 突っ込んだディレクトリを確認する $ dirs ~/Downloads ~/Documents ~表示オプションを使うと、少し可視性がよくなります $ dirs -p …

Bashスクリプトで変数に初期値をぶっ込む

空の変数に値をセットする場合... -bash$ echo $VAL_A -bash$ echo ${VAL_A:-100} 100こんな感じで指定した初期値が入ります。 -bash$ VAL_A=200 -bash$ echo ${VAL_A:-100} 200すでに値が格納されている場合、 代入されません。おまけ:変数を解法したい場…

シェルで同じ文字列を生成したいときはyesを使う

yesというコマンドは、指定文字列(デフォがなければy)を延々と出力するコマンドです。 多分インストールとかで使うコマンドなのでしょうね... $ yes y y y y y y ... "10"を10回表示したい場合はhead(先頭から読み込む)コマンドと合わせて使います。 $ yes …

FSはFile Separatorの略であり、Field Separatorの略でもある

以前のCLI_YAMLパーサ解析の続きです。 local fs=$(echo @|tr @ '\034') sed -ne "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \ -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 | awk -F$fs '{ .... }色々調べた所、どうもsedは\034... …

文字列クラスでUNIXストリームエディタの可視性を上げる

文字クラス(Character Class) Ruby等々では、正規表現で\dと書くと10進数の文字を拾ってくれます。 これらはShorthand Character Classesと呼ばれます。 この元ネタとなったらしいものが、今回紹介する文字列クラスです。 例 [:alnum:] 英数字 [a-z A-Z …

YAMLデータをBashスクリプトのみでパースする

今回のスクリプトはハッシュ系で構成されたもの限定です。 配列系は対応していません。 本文 次のようなYAMLファイルがあるとします。 ## global definitions global: debug: yes verbose: no debugging: detailed: no header: "debugging started" ## outpu…

パス付きのzipファイルをCLIで扱う

コンプライアンス重視なご時世、パス付きZipファイルを望まれるケースが結構あります。 そこいらのソフトで固めるのも良いですが、ここは折角なので自動化してみませう 例 次のようなコマンドを入力し、お試しファイルを生成します。 ちなみに全部空です。 $…

sedの内部でpwdを呼び出す

バッククォートを使えば、いろんなコマンドを内部で実行できます。 $ echo Date:`date +%y%m%d` Date:140224これはsedでも実行可能です $ ruby -e "puts ('a'..'x').map {|i| i*3 + i.next * 3 + i.next.next * 3}" > hoge.txtで生成したデータhoge.txtに対…