それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

linux

ファイルを指定バイトコピーする(テスト用に壊れたファイルを作る)

zip が正しく転送できてない実験をしてみたかった zip ファイルをアップロードしたり、バックアップしたりしてて、「ファイルが壊れた」のを検出したりしたかった。状況を再現したいなと思ってもそう簡単に壊れたりはしないので、壊れたファイルを作る必要が…

grepコマンドでファイル名だけを取り出す。

grep してマッチした行ではなく、ファイル名が欲しい 検索したキーワードを含むファイル名を取り出して、それを全部開いて処理したいときに grep -l -l をつけるとファイル名だけを取り出すことが出来る。 覚え方 l なので line ですね 関連資料:その他のgr…

unar/lsar コマンドで指定したファイルを取り出す。ほとんどのアーカイブファイルを扱える。

unar / lsar コマンドが便利 unar コマンドで展開すると文字化けがあまり発生しない。 unar とペアになってる lsar コマンドも文字化けを余り起こさずにファイルを取り出せる。 また展開できる 指定したファイルだけを取り出すには lsar で一覧したファイル…

pv pipe viewer をcaptureする

プロセスの進捗を見る pv で pv はプロセスパイプを通過したバイト数をみて、進捗を見ることが出来るのですが。 pv の出力をスクリプトから取りたい pv の output は stderr に書かれるのだけれど、それをキャプチャリングしたいなと思ったら。。。結構面倒…

WindowsのSJISのファイルがUTF-8で化けるので一気に置換するスクリプト

windowsから来たZipファイルを展開したら 文字コードがグチャグチャーって化けるのでした。辛い。 文字コードを修正するスクリプトをぱぱっと書いた conv_file_name.sh -v -n path/to/*.pdf conv_file_name.sh -v path/to/*.pdf nkf があれば何とか出来るん…

作成済みのm5sumとぱぱっと比較する方法(改竄検出の楽な方法

md5sum の -c オプション -c 生成済みの md5sum の一覧とファイルを比較して改ざんを検出する。 事前にファイルのmd5sum の値の一覧を作成しておき、いまのファイルがそのファイルのハッシュ値と一致するかを調べておく。すると簡単に改竄検出や不正検出を見…

nkfの使い方:base64のエンコードとデコード(ただし文字列だけ

nkf だけで base64 のエンコードとデコードが出来る nkf には -mB と -MB のペアがあるのでBase64のエンコードとデコードが出来る。 nkf で base64 エンコード echo -n こんにちは | nkf -MB nkf で base64 デコード echo 44GT44KT44Gr44Gh44Gv| nkf -mBW こ…

nkfでURLエンコードされた文字を扱える(エンコード・デコード・文字コード)

nkf だけで、URIエンコードされた文字を扱える とある文字列を処理していて、CP932(Shift_JIS ) がそのまま、URLエンコードされた文字に出会って、ちょっと面倒な自体になった 。 node の decodeURI/decodeURIComponent だとUTF-8を期待されて動かない。ruby…

lsでファイルを拡張子ごとに並べる

ファイルを種類順に並べたい。 デスクトップの整理でよく見る「ファイルを種類別」に整理と同じ、ファイルを種類順にまとめて結果に表示を ls コマンドでもできることがわかった。 -X で拡張子でまとめて表示 ls -lX こうすると、ext 順にまとめて表示してく…

lsで日付ファイル名の逆順に並べる並べ方

ls で日付・ファイル名・ファイルサイズなどを昇順・降順に並べたい ファイルを並べて結果をだすときに、新しいものから処理したいとか、古いものから処理したいことがあるよね。 ls でファイルの日付順に並べる 新しいものが先になるように並べるには ls -l…

curlコマンドで速度制限(スピードリミッタ)をつける

curl でファイルを次々と取得してて curl でパッケージを取得したり、転送したりしてて他の作業に支障がでることがあります。 curl 万能なので使いすぎます。 speed limit をつけることで curl を速度制限出来ます。 速度上限をつけることで、穏やかに、急が…

tailf でログをgrep して確認する確実な方法

tailf の結果をgrep してxargs したい場合 grep するだけなら問題ない。これは期待どおりに動く tail -f a.log | grep name grep が pipeの間に入ると厄介だ tail -f a.log | grep name | grep type この場合は正しく動作しない、中間に挟まったgrepがIOをバ…

script コマンドで作業内容をリモートで伝える

script コマンドで作業内容をリモートで伝える screen コマンドの共有でも出来るけどね。script コマンドだけでも出来るよね。 screen の共有とかと同じです。 見せたい側で script -f -a sample.log みたい側で tail -F sample.log としておけばずっと見て…

MySQL/MariaDBのSQLとテーブル名を補完する mycli が便利

mycli が便利でやばい SELECT / INSERT などを補完してくれて、テーブル名やカラム名を補完してくれて、SQLを色付けしてくれる。 インストール python で出来てるのでpip でインストール pip install mycli pip がないときは pyenv を pyenv から準備すれば…

tailコマンドで複数のログをまとめて表示する

同時に2つのログを見たい tail -f を2つ起動して、ターミナル並べておくのも邪魔くさいと思ってました。 tail -f /path/to/log2 /path/to/log1 こうすれば、複数のログファイルを同時に tail でウオッチできる。 いままでは watch と cat を組合せてたので…

tail コマンドがファイルの削除、作成時でも動くようにする

tail -f コマンドを使うとファイルの削除で動作が止まる。 tail -f /path/to/log で ログファイルを見ているときに、別のプロセスでファイルが消えたら ファイルが消えたら、動作が止まる。 mv /path/to/log /dev/null rm /path/to/log echo hello > /path/t…

tail -f コマンドがログ監視てるプログラムが死んだら一緒に自動的に終了する

pid を指定すると tail コマンドが自動的に終了する tail -f --pid=$PID /path/to/log PIDを指定したときに ローカルホスト開発ツールのログ監視してるときとかに便利ですね。 man tail --pid=PID with -f, terminate after process ID, PID dies 参考資料 h…

tailf と grep を組合せて Slackにログを通知する。パイプでワンライナー

ログファイルを監視して、slack などに通知したい。 ログを監視して Slackに投げる方法で、かんたんなのを考えた。 ログファイルに何か変更があって、それが特定のときに メールや slack のチャンネルに通知を出したら便利だと思う。 あれこれログ監視や通知…

素因数分解をしてくれるコマンド factor

prime numbers ( 素数 ) に分解してくれるコマンドがあった。 takuya@Desktop$ factor 123456 123456: 2 2 2 2 2 2 3 643 factor とは 要因の意味で数学的に因数で、factor コマンドは 素数を使って因数を表現してくれるコマンド 何に使うのか。 特に何に使…

シェルスクリプトの改行コードを修正する

改行コードが原因でエラーになる。 改行コードを \r\n が原因でエラーになった。 takuya@:~$ bash -n apt apt: 行 2: 予期しないトークン `$'\r'' 周辺に構文エラーがあります 'pt: 行 2: `_apt() 一瞬何のエラーかわからなかったけどよく見るとエラーに改行…

正規表現の名前付きマッチで、scanf から卒業する

正規表現の名前付きなマッチを覚えました。 >> ret = '直通特急 阪神梅田行 18:29 発 3番のりば'. match(/(?<type>.+) (?<dest>.+)行 (?<dep_time>.+)発 /) => #<MatchData "直通特急 阪神梅田行 18:29 発 " type:"直通特急" dest:"阪神梅田" dep_time:"18:29 "> >> puts ret[:type] => "直通特急" 名前付きマッチの後方参照はとても楽しい!!便利!!これで scanf みたいなレガシ</matchdata></dep_time></dest></type>…

jq コマンドで json を minify する

jq を使って minify することが出来る cat composer.json | jq -c . または jq -c . < sample.json 任意のJSONをJSONのフィルタを変えて小さくすることが出来る。 サンプル composer.json を小さくする { "repositories" : [ { "type" :"git", "url" : "http…

指定したファイルの日付を取得してフォーマットするdateコマンド

date コマンドでファイルの日付を取得する。 指定したファイルの日付を取得するには $ date +'%F %T' -r /etc/aliases 2015-08-02 13:35:20 最終更新日が取得できる。 -r, --reference=FILE display the last modification time of FILE もちろん stat でも…

dateコマンドでiso/rfc日付時刻タイムゾーンをぱぱっとフォーマットして作る

date コマンド便利だけど、フォーマット指定がめんどくさい takuya@:~$ date --date "2017-03-22 + 90days" +"%Y-%m-%d %H:%M:%S" 2017-06-20 00:00:00 ああ、めんどくさいよ%Y-%m-%d 、記号が多くてめんどくさい。 よくつかう日付は、オプションが用意され…

sendmail でコマンドからメールを送信する。

メール通知のテストに使う。 postfix や exim4 のメールサーバーの設定をしていて、テスト・メールを送信したいときに、手作業でsendmail コマンドを送るのは、ちょっと面倒なのと、どのメールが未到達で、どのメールが到達したか区別するのが大変なのでスク…

sudoersの設定を分割する /etc/sudoers.d を使おう

/etc/sudoers.d で分割できる。 /etc/sudoers.d を使うと、必要なものを覚えやすいファイル名で書いておいてバージョン管理することが出来る。 編集方法 編集方法がめんどくさい。分割して管理できるが、各ファイルを編集するのにvisudoを使う必要があり、こ…

POSIX の メッセージ・キューを作成する(C言語)

POSIXのメッセージ・キューをC言語で扱う コンパイルには gcc -lrt を使う。 まずは送信するところから。 q_push.c #include <mqueue.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> int main(){ int cnt; int ret; char *str; void *pt; mqd_t q; q</string.h></unistd.h></stdlib.h></stdio.h></fcntl.h></sys/stat.h></mqueue.h>…

POSIX の メッセージ・キューを確認する。コマンドで。

POSIX message queue を確認する。 Linux なら /dev に出現する。 takuya@:~$ ls /dev/mqueue/ キューがあるとき /sample という名前でキューを作ったのでキューを確認することが出来る。 takuya@:mq$ ls /dev/mqueue/ sample キューの状態をサクッと確認す…

シェルで指定文字に文字列を分割して結合する。

文字列をシェルで、指定文字数に分割して結合するには 選択肢になるコマンドは、分割・結合でそれぞれ次の通り 分割 flod grep 結合 paste tr などが使えることがわかった。 分割の例 fold -w2 grep -E -o '.{2}' 文字列を指定文字に分割する。fold コマンド…

Debian/ubuntu のapt自動アップデートのUnattendedUpgradesを設定する

Debian の apt 更新がめんどくさいのでなんとかする。 昔は cron-apt でやってたけど、今時はどうするのかなーと思って調べてたらUnattendedUpgradesがあったのでコレを設定することに。 Debian Wikiに従ってインストール sudo apt install unattended-upgra…