読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

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

unix

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に対…

unixコマンドの文中に別のコマンドを捩じ込む

$ echo DATE:`date` DATE:2014年 2月 7日 金曜日 23時02分02秒 JSTあるいは $ echo DATE:$(date) DATE:2014年 2月 7日 金曜日 23時02分34秒 JSTで、内部のコマンドを実行できます。これを応用すると...「who」という文字列を格納したhoge.cmdというファイル…

CLI上でjsonパースをしてくれるjqを使えばワンライナーが不要となる

タダで天気のYAML形式データを生成Rubyワンライナー - Bye Bye Mooreという記事にて、 お天気を取得するワンライナーを書きました。 ...が、jqというコマンドを導入するともうJsonまわりで別言語に頼る必要がなくなります 導入 $ brew install jq ==> Downlo…

ditaaを使うとアスキーアートから画像が生成できる!

以前の記事でplantUMLを紹介しました。 あの子も相当優秀なのですが、スタック図やらモジュール関係を記述するのには若干向いていませんでした。 レイアウトするの大変なので。 ところが、今回紹介するditaaはあの忌々しいエクセルホウガンシーや図形描写ツ…

findコマンドの時間検索に関するメモ

何度やってもスグ忘れるのでメモ 数値の符号 プラスは以前。 「+4」なら5日以前。 4自体は含まない。 マイナスは以内 「-4」なら3日以内。 4自体は含まない。 符号無しは当日 まさにその当日のみ。 aだのmだのcだの atime アクセス。ファイルを開いただ…

今日、変更されたpngファイルのみをepsへ変換したい場合

imgフォルダのうち、今日変更されたファイルのみを変換したい場合は $ find img -name "*.png" -ctime -1 -print0 | sed s/.png$//g | xargs -I file convert file.png file.epsprint0はファイル名にスペースが含まれていた場合の対策みたいです。 sedの$は…

forを使ってフォルダ直下のsvg画像をまとめてepsに変換する

findとexecの合わせ技で考えていたのですが、文字列を旨く置換する方法探していたら、上記のスクリプトに辿り着きました。 Shellスクリプトの繰り返し構文と、ImageMagicのconvertコマンドで一気にカタがつきます。 for file in img/*.svg; { convert "$file…

Bash上にダースベイダー卿衝撃の事実や、やる夫の寝言を表示したい時はcowsayを使おう!

cowsayというジョークコマンドを使うと、台詞付きのAAを出力できます。 導入 $ brew install cowsay ==> Downloading http://ftp.acc.umu.se/mirror/cdimage/snapshot/Debian/pool/main/c ################################################################…

bashでHTMLパースする

結論 $ RET='\ ' $ cat /Users/shuzo/src/paper.html | sed -e 's/>/>'"$RET"'/g' | grep "<a" 何してるのか RET Bash内で使う変数を宣言します。 この場合、改行を突っ込みます。 .bashrcに書いても有効です。 頻繁に使うようなら、最初から登録しておくのも手かもしれません。 cat 文字列を出力します。 sed sed -e 's/>/>\RET/g' ポイントは、「\」で一旦エンター押して改行する事。 \nとか使えると良かったのですけどね。 sedにはそういう機能が無いらしいのでこうします。 これがな</a">…

ファイルのリロードが面倒なら、「tail -f」や「auto-revert-tail-mode」を使う

逐次更新されるファイルの追っかけは中々大変です。 それを助けてくれるのが、今回紹介する二つの機能です。 cliならtail -f $ tail -f ./stdin.log実際に試してみると、ファイルが更新される度に勝手に呼び出してくれます。 基本的にログファイルの監視に使…

ディレクトリ群をYAML用に出力したいなら素直にfindを使う

前回の記事に takuya (id:takuya_1st) find -type d -exec echo - {} \; じゃだめなの? とのコメントを頂きました。色々文字列加工する気満々だったのですが、 冷静に考えればそれすらもprintfとsedでイケてしまいます。 既存YAMLファイルへの挿入も調べて…

treeで入手したディレクトリ構造をyamlファイル用に転換するワンライナー

結論 $ tree -dfi os | ruby -ryaml -e 'puts YAML::dump(ARGF.map{|e|"src/"+e.chomp}.slice(0..-3))' 参考:一つ前のバージョン $ tree -dfi os | ruby -ryaml -ne '(data ||= []) << %Q(src/%s) % [$_.chomp]; END{ data.slice!(-3..-1); puts YAML::dump…