それマグで!

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

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

bash

IPアドレスを数字順にソートする(整数に変換)

ip アドレスを数字順にソートしたい。 IPアドレスソートするにはいろいろな答えが思い浮かぶ。 今回は、整数に変換してソートしてみたいと思う。 ip アドレスを10進数に変換する 256進数だから、桁数分だけ256を掛けてあげれば良い。 IPアドレスを10進…

IPアドレスをソートする (sort コマンド編)

IPアドレスをソートする sort コマンドでip addr をソートすると、文字列順になってしまう。 なのでIP アドレスを文字列でソートすると、めんどくさい 解決策 sort コマンドのオプションつける(この記事) ip addr を int にする。別記事 sort -V を使う。 …

linuxのコマンドで文字の結合で、折返しを避ける。

長い文字列をメモに残すと折返しが面倒 たとえば、次のような長い文字をデコードする事を考える。 echo 'Sa1VODv0YrgjqYMM44Nf1FAnKyAR8LLmI1je8FYkfC60MWzHr03gwIuIhGCTK/P3fJ2z7euY/PIXagqSbKwygV0ZpBWNnZVjsxcMLCFTsoQvFTzWkZl2awIlbaToDbc3Go1t++1kk4Va6…

稼働中Linux(raspberry pi)のバックアップを取る。`rsync --one-file-system `

raspberry pi のUbuntu のバックアップを取ろうと思いました。 バックアップとるといえば、dd dump/restore が定番ですが、今回は、ブートの書き換えと、initramfs の再構築のために、Raspberry上でRaspberryPiのバックアップを取る必要がありました。いちい…

sedで指定行表示 / head コマンド相当

指定行を表示 / head 相当をする 以前、sed で行挿入をシンプルに行う。 とういう記事を書いたとき、範囲指定について言及した。 今回は、sedの範囲指定を使って 先頭からN行を取得してみる。 範囲指定の練習 行番号を指定して、その行を表示する。 指定行を…

tar を使ってSSH越しに転送する。(パイプ利用

tar を使ってフォルダをそのまま転送したい。 tar を使って表示出入力を使ってファイルを転送したい。 tar cfh - /etc/letsencrypt/live/ | ssh root@srv4 'tar xvf - -C /mnt/hdd ' 転送の前後でディレクトリを移動する tar cfh - -C /etc/letsencrypt/ liv…

tar コマンドでリンクの実体(リンク先の本体)を格納する

tar コマンドを使うときに、シンボリックリンクの実体を格納する。そのままではリンクが格納されてしまう。 どうしても「リンク先」の「実体」がほしいときに使う リンクの代わりにリンク先を格納する tar cvf --dereference out.tar /etc/letsencrypt/live …

tar cvzf xxx.tgz が遅いのでpigz で高速化する

tar cvzf xxx.tgz が遅い。 SSDに変えたら、gzip がボトルネックになる。 ボトルネックがgzipであれば、gzip を変えればいい。pigzというちょうどいいコマンドがある。 tar コマンドとパイプを見直して、gzip の箇所をpigzに置き換えていきたい。 よく使われ…

ディレクトリだけをls する、ファイルだけをls するの逆

ディレクトリだけをls する、ファイルだけをls する ディレクトリ中のディレクトリだけを調べたい。 自分自身のディレクトリに限定 これは、指定したパスがディレクトリのときだけ応答される。 ls -d /var ワイルドカードと組み合わせ ワイルドカードで指定…

ディレクトリがマウントされているか調べる

ディレクトリがマウントされているか調べる お困りごと mount コマンドを使ってマウントチェックすると、未マウント時にmountされてしまう。 なので、代わりにmountpoint コマンドを使う。 mountpoint コマンド takuya@:~$ mountpoint /home /home is a moun…

sed で行挿入をシンプルに行う。

sedなら出来る。 sed で検索文字列の直前に行を作って入れられる。 今回使ったsedはgnu sedです。 マッチの直前に行を追加 サンプル echo hello | sed '/hello/i world' hello の直前にsay を入れました。 sed で行挿入をシンプルにやる。 sed を使って、設…

bash で source か実行かを区別する。python/ruby の main 的なこと

bash スクリプトで main を作りたい。 スクリプトファイルは、sourceで読み込まれることがある。 実行されたときだけ、sourceで読み込まれたときだけ実行したい。という希望もまた存在する。 python の場合 python の場合は、main を使って次のようにかける…

sed コマンドで区切り文字を変えて、ファイル名に一致させる

sed の区切り文字を変える sed コマンドでは、検索と置換の文字列を区切りを変えられます。 普通はスラッシュを使うと思うんだけど、スラッシュはフォルダ名やPATHで使われるため、エスケープ処理が面倒になる。 sed 's/search_name/takuya/g'; 区切りを変え…

tar をパイプ経由で、ssh 経由で行い、サーバのファイルを一気に転送する

tar をパイプ経由で、ssh 経由で行い、サーバのファイルを一気に転送する ssh 経由で tar ssh srv1 'sudo tar cpvf - /var/opt ' | cat - > var-opt.tar こんな大胆なことをするときは、サーバーのファイルをまるっと取り出したいときなので。 p をつけて、p…

画像ファイルから全部のexifを除去する

方法1:exiftool exiftool -all:all= -r /path/to/file [/path/to/file...] 方法2:mogrify mogrify -strip /path/to/file 結果 サイズが変わってる。mogrify は画質いじってるのでは・・・ $exiftool -all:all= -r sample1.heic $mogrify -strip sample2.…

写真のExiftをJSONで取り出す。

ファイルのExiftをJSONで取り出したい。 EXIFをJSONで取り出せたら、集計が便利なんじゃないのかと思って調べたら、対応していた。 exiftool -s -G -j ファイル名... 実行サンプル exiftool -s -G -j 2021-04-04_15-56-43_926.heic | jq . 出力サンプル [ { …

jc と jq の組み合わせで、ファイル名のクォートが便利

jc と jq の組み合わせで、ファイル名のクォートが便利 ファイル名にスペースが入る 次のように、ファイル名にスペースが入って、コマンドで処理するときにIFS(区切り)として解釈されちゃってとっても邪魔。 takuya@:$ls -l *5576* -rwxrwxrwx 1 takuya ta…

montage(画像を並べる)するときにファイル名を入れたい。

montage するときにファイル名を入れたい 画像をならべて、インデックスの画像を生成したい。 インデックスプリントのような、証明写真のような、写真をならべてサクッとインデックス・プリントにしたい。 似た写真があるときに並べて表示することで「違い(…

コマンドの結果をJSONの配列やオブジェクトにする。- jc コマンド

コマンドの結果をいい感じに、配列にしたい コマンドの実行結果をJSONにしたいと思った。 https://dev.classmethod.jp/articles/jc-tool/ jc コマンド jc コマンドは、STDINを読み取って JSONに変換してくれる。 数多くのパーサーが用意されてプリインいる、…

ubuntu / debian で wake on lan ( WOL ) を送信する

ubuntu / debian で wake on lan ( WOL ) を送信する wake on lan コマンド wakeonlan MAC_ADDR インストール sudo apt install wakeonlan パッケージで提供されているのでサクッと使えます。 コマンドの実行例 sudo wakeonlan 70:85:xx:xx:e6:xx [sudo] pas…

rbash で制限付きのシェルを作って安全を確保する

bash で何でもされるのが怖い?なら rbashはどうですか? rbash は bash の機能の一つで 「機能制限をされたbash」を提供するためのものです。 rbash とは、制限付きのシェル(RESTRICTED SHELL) の略です。 rbash の正体 bash -r rbash コマンドは /usr/bin/…

シェルスクリプトで変数と文字列を展開(置換)する

変数を文字列に展開するenvsubst envsubst を使えば、文字列と変数を置換できる。つまり変数を展開できる。 利用サンプル echo "HELLO \${HELLO}" | HELLO=takuya envsubst テンプレートを作れる これを利用すれば、テンプレートを作って文字列を作成するの…

OPNSenseのAPIでファイアウォールのAliasを更新する。API利用例

OPNSense設定を更新したいのでAPIを利用する OPNSenseの設定を更新しようと思うと、APIを使うのが手っ取り早い。 APIはJSONでGET/POSTができる。APIで設定を取得したり、更新したりができる。 https://docs.opnsense.org/development/api/core/firewall.html…

ssh の HashKnownHosts に追加する方法を知り、StrictHostKeyCheckingをちゃんと使えるようになる。

ssh の HashKnownHosts に追加する方法 HashKnownHosts を有効にしていると、 .ssh/known_hotss がハッシュ化される。 これにより、どのサーバーと通信していたか、関係性の秘匿が可能になる。 hash を使う known hosts のために嫌がらせなんじゃないかと最…

ssh-agentをログイン時に起動する。

ssh-agentを使う 非暗号化ディスクにSSH鍵をパスフレーズ保護なしに保存するのは危険。 ストレージからSSHの秘密鍵を取られたら目も当てれない。 そして、known_hostsから接続先がわかってしまうと。もう最悪。 そのために、SSHを安全に扱うには、known_host…

bash でコマンドがエラー終了したことを検出する。

bash でコマンドがエラー終了を調べてなんとかする。 シェルスクリプトのコマンドでエラーが起きたら、エラー表示したり、コマンド失敗のエラー手続きを実行する なれてたら簡単なのですが、例外になれたプログラマや非表示の暗黙ステータスコードを使うのが…

GNU Screen の終了

screen を終了する GNU Screen をどうやって終了するのか。 いつも忘れるので、メモする。 とくに、ttyS0 を使ったシリアル通信をするときに困るのでメモを残す。 方法1 :quit ctrl-a : (エスケープキー+コロン) でコマンド入力モードに入る コマンド入力…

シェルでファイル名をエスケープにしてクォート地獄を解決する。

シェルスクリプトで、ファイル名をエスケープする シェルスクリプトで、括弧()やスペースなどの文字種をエスケープしたいときに手早い方法がないか。 printf が手軽だった。 printf "%q" 文字列 実際の例ーカッコ 次のようにいい感じにエスケープしてくれ…

bashで入力しやすく見やすいパスワードをサクッと作る(シェルコマンドでハイフン区切りのパスワード生成)

シェルコマンドだけで、覚えやすいパスワードを作りたい iOS のパスワードジェネレーションみたいな、ハイフン区切りのパスワードをサクッと作りたい。 pwgen を入れるとはやい。 sudo apt install pwgen pwgenのパスワードをハイフン区切りにする takuya@$ …

bashで文字列の中身の変数名の値を取り出す(可変変数・間接参照)

bash で配列に入れた文字列を変数として解釈する 変数の文字列を、変数として解釈する。 echo $name=${!name} たとえば変数調べるときに変数名を列挙して中身を全部見るとか。 #!/usr/bin/env bash for i in ip mask subnet subnet interface router ; do ec…