理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

unix

困ったときのパケットキャプチャ+curl

リバースプロキシから渡ってきた HTTP リクエストで WebApp がエラーになるという状況が発生しました。 状況としては、 リバプロにはぼくたちはアクセスできないし、そのリバプロにリクエストを送ることもできない。 リバプロから WebApp 用 FW に何らかの H…

終わり行く2017年にgrepを

みんな大好き grep についてですが、かなり機能が豊富な一方でなかなかそれがまとまっていないこともあるのと、自分自身、結構細かな Tips を忘れたりするので、ここで簡単にまとめてみたいと思います。 OR 検索 後述する拡張正規表現でも可能といえば可能で…

known_hostsからエントリを消す

定期的に忘れるんだけど、~/.ssh/known_hosts にあるエントリをスクリプトから消すコマンドは、ssh-kengen -R。 そもそも known_hosts とは 接続したことのある各ホストの公開鍵を保存しているファイルで、普通の文脈だとユーザレベルのファイルである ~/.ss…

特定ディレクトリ配下の拡張子の一覧を取得するワンライナー

特定ディレクトリ配下で特定の拡張子を持つファイルを探すのは find コマンドで一発ですが、一方で、特定ディレクトリ配下の拡張子をすべて抽出する、というユースケースがあります。 ぼくは、.gitattributes に書く拡張子って何にしよう、ってときに、その…

特定ユーザのGithub上のリポジトリをごそっとローカルにcloneする

Github 上にある特定 user のリポジトリをぜんぶローカルに持ってきたいなぁというときのワンライナー。 nablarch のところは適当なユーザに書き換えれば OK。ghq ではなく単に git を使いたければ、ghq get を git clone に変えれば良いです。 $ curl 'http…

findコマンドにおける -newer オプション

みんな大好き find コマンド、-newer オプションというのをはじめて知った。find コマンド、マニュアルを読む度に発見ある。 -newer オプションはファイル名を引数に取って、そのファイルよりも modification time が新しいと true を返す述語になってる。 …

lsの結果をawkすることについての注意点

重箱の隅を突つくような話ですが、ls の結果を awk するのは筋が悪いと言われています。ファイルパーミッションを抜くとか、そういうときに、このような使われ方が為されますが、だいたいの場合は代替案(もうちょっと相応しいコマンド) があるので注意しまし…

HTTPS双方向認証の環境を作る

以下のエントリで HTTPS 通信を試してみましたが、このような試験環境を作るのはわりとメンドい。 メンドいことを何度もやりたくないので、実施した内容をエントリに残しておきます。 クライアント認証を含めた HTTPS の双方向認証を行うためには、以下が必…

コマンドラインでの16進数変換

バイナリを hex encoded で表現するというケースが最近増えてきて、たとえば CBC の初期ベクトルを hex encoded で表現するとか、鍵を hex encoded で表現するとか。 16 進数というと hexdump があって、たとえば 0aA は 16 進数で表現すると 306141 になる…

コマンドラインで簡単にAES暗号化、または Java での AES 暗号化

Java で AES 暗号化とかやってて、コマンドラインで簡単に試せれば良いのになぁとか思ってたら、openssl 使ったら余裕で暗号化できることに気付いた。 例えば、AES/CBC の 128 bit 鍵長で暗号化したい場合は、以下のようにすれば良い。 -e は暗号化、-d は復…

curlでメールを送る

curl はどうも HTTP 用と思われている節がありますが、実は様々なプロトコルに対応しています。 たとえば SMTP にも対応しているので、がんばったら gmail にもメールが送れたりします。 $ cat <

Javaアプリから共有ライブラリが読み込めない問題(java.library.path と LD_LIBRARY_PATH)

なんか良くわからないエラー (no [ライブラリ名] in java.library.path みたいなヤツ) が出てきたのだけれど、解決方法が java.library.path の設定ではなく、LD_LIBRARY_PATH の設定だったりした。この手のエラーに苦しめられ続けており、そのあたり、ちょ…

Linuxで気軽にアップデートできないパッケージを気軽にインストールしたい(yum-plugin-downloadonly, yum-plugin-priorities)

気軽にアップデートできない Linux のパッケージを、気軽にインストールしたいわけ。 気軽にインストールするために yum 使いたいんだけど、気軽に yum update した結果としてパッケージの互換性崩れて死にたくないわけ。 そういうときにどうすれば良いかを…

grep に --only-matching オプションとかあって驚愕している

タイトルのとおりで、grep に --only-matching (-o)オプションあって驚愕した結果として心がぴょんぴょんした。 とりあえず手元にある Mac の grep だと |tcsh| $ grep --version grep (BSD grep) 2.5.1-FreeBSD ||< になってるけど、--only-matching オプシ…

シェルスクリプトでの IP アドレス計算

まぁ、ipcalc 使いましょう。initscripts に含まれてるので、基本つかえるとおもいます。 |tcsh| $ rpm -qf which ipcalc initscripts-9.03.40-2.el6.centos.1.x86_64 ||< ブロードキャストアドレスやネットワークアドレスは次のようにして計算できます。 |t…

sudoers.d

CentOS 6 を使う機会があって、/etc/sudoers に設定入れるかって /etc 見たら、/etc/sudoers.d とかいうディレクトリがあった。 で、/etc/sudoers を見ると ## Read drop-in files from /usr/local/etc/sudoers.d ## (the '#' here does not indicate a comm…

ファイル、ディスクをクリアするための shred コマンドの注意点

ハードディスクとか廃棄したり、別の人に譲渡するときに、ハードディスクの中身を綺麗に消したい、復旧させられないようにしたいっていうことがあります。 たとえば rm file で file を消すことができますが、これはあくまでインデックスが消えているだけで…

gnuplot での日時データの扱い

入社直後は Excel 使ってグラフ書いたら負けみたいなの思ってたけど、最近は諦めが当たり前みたいになって、アクセスログの集計結果を Excel に貼り付けてグラフ化して報告みたいなことしてた。 でも Excel は行数がなんか少なくて、Excel 2003 だと までし…

JSON を整形とか加工するのにブラウザとかエディタとか使うんだったら jq 使った方が捗る話 (基本編)

brew install jq しましょう。まずはそれからだ。 ** JSON の整形 良くあるけど、どっかの API から雑なかんじで適当にインデントされた JSON が返却されたりして、JSONPath を書くにしろ、まずは整形しないと JSON の構造が分からん、みたいな悲しいことに…

join コマンドの使い方

初歩的ではあるのですが、join コマンドというのは、個人的には他の人が使っているのを見たことがないレベルの不遇のコマンドです。一言で言えば、(ファイルがソートされていることを前提に) 2 つのファイルの inner join を取ることができます。一日毎にロ…

find-xargs と mv/cp を組み合わせるときの注意点

特定ディレクトリ配下のファイルを移すときとかでこういうの書いてるの見るけど、ファイル数が多いんだったら止めた方が良いです。 10 万くらいのファイルをこれで動かそうとすると、クソみたいに時間がかかるみたいなことあります。 $ find . -type f | xar…

文字化けしているファイル名の直し方

最近はなかなか御目にかかることのなくなった表題のような事案。たとえば、文字コードが EUC のサーバに、Windows からファイル名が Shift_JIS のファイルを FTP で置いちゃいましたーみたいな状況。 こういうのを Linux から見ると文字化けしているため、何…

コマンドの繰り返し実行には watch を使おう

バックグラウンドで動作させているバッチが予想以上に動いているらしい、でもログを出していないようなので、バッチが動いているかどうかはプロセスの生死で確認するしかない、みたいな状況があったりします。 このためには $ ps -ef | grep Batch などとし…

えっ 公開鍵をなくした?それ、秘密鍵から再作成できるよ。

人生の喜びを失くしたみなさんこんにちは!今日も死地に赴いてますか!!!!!l みなさんの喜びはもはや取り戻せないけど、公開鍵をなくしても秘密鍵があればリカバーできます。よかったですね。 |tcsh| $ ssh-keygen -y -f id_rsa > id_rsa.pub ||< 手元…

free コマンドで出力されるメモリ使用量

簡単に現在のメモリ使用量を確認するコマンドとして free がありますが、free コマンドで出力される Mem-free が少ないからといってパニックに陥る必要はありません。 Mem-free は、その時点でメモリに乗っているバッファキャッシュやページキャッシュの領域…

設定されている環境変数をムシってコマンドを実行する方法

env に -i 引数を渡してコマンドを実行する。 $ env -i your_command よく知られている env コマンドの使い方は設定されている環境変数を出力することである。何も引数を与えないで env コマンドを実行すると、設定済みの環境変数が標準出力に出力されるので…

sync sync sync ?

よく、非常に重要なディスク変更を伴う作業などで $ sync $ sync $ sync ってやれみたいな話を聞きますが、これって $ sync # 一息入れる っていうのと何か違ったりするのかなみたいな疑問を未だに持っています。 sync の意味 そもそも sync(8) は、ディスク…

awk でシェル変数の値を使うには

あたりまえだが、awk はシェル変数を参照できない。例えば以下のコマンドラインは 5 を出力せず、空行を出力する。 |tcsh| $ VAR=5 awk 'END { print VAR }' /dev/null ||< 一行だけを見ると、あぁそうなのかというくらいの話なのだけど、よく詰まるのがシェ…

zsh の prompt 定義

休日であることを良いことに、zsh の prompt を初歩から学ぼうと思って、作った結果がこれである。 || PROMPT=$'[%n@%m(job:%j)]%(?|%{\e[32;21m%}%#%{\e[m%}|%{\e[31;21m%}(ret:%?%)%#%{\e[m%}) ' ||< もはや悪い冗談としか思えない劣悪なプロンプト定義で…

keychain を導入した

ssh でのログインで一々パスワードを入力するのは正直メンドい。そもそも ssh でパスワードを要求されるのはパスワード認証であるから、これを RSA/DSA 認証を行うように変えてやればパスワードは要求されない。すごい。これでみんなが幸せになれる。 しかし…