【Linux コマンド】イカしたコマンド【ミニ使用例】
はじめに
こんにちは
システムソリューション部のインフラわっしょいマンです
今回は Linux まわりでのイカしたコマンドの使い方やオプションを紹介するぜ!
「イカした」とは何を指すのか。というところは個人の感覚に大きく左右されますが私 武田の目線から、見かけたら「おっ!やるぅ!ヒュー!」となるやつを簡単にいくつかあげられたらと考えています。
軽く例を挙げるならば
$ ps auxwwf | grep httpd | grep -v "grep”
これはイカしてないかなぁ。
長いよね、ちょっと。
$ ps auxwwf | grep http[d]
やっぱこうでしょ。
ヒュー!
別に短い = イカしてる というわけではないけども
※ ちなみに「イカした」は死語ではないです。
死んでいるのは「イケイケ」とか「バッチグー」とかです
個人的に好きなコマンドの紹介記事ですが息抜き程度にお楽しみください。
systemctl enable --now
これはイカしてます。
systemctl で start と enable を同時にぶち込むことができます。
つまり
$ systemctl start httpd $ systemctl enable httpd
これをまとめて
$ systemctl enable --now httpd
これで OK です。
ヒュー!サクッと感あって good
ブレース展開でファイルバックアップ
ブレース展開はコマンドではなく bash の機能の一つですがこちらもうまく使えばイカした使い方ができます。
というかイカした使い方の宝庫みたいな機能ですが、1パターンだけ紹介します。
#日付ついたコピー $ cp test.txt{,_$(date +%Y%m%d)} # .org のついたコピー $ cp test.txt{,.org}
このように 文字列A{,文字列B} とするとまず文字列Aが単体で出力され、その後ろに展開された文字列B が出力されます。
ややこしいですが
cp test.txt{,_$(date +%Y%m%d)}
は展開されて cp test.txt test.txt_20230114
となります
(執筆日時:2023年1月14日)
コマンドと結果を見比べて、どういう動きか研究して自分だけのイカしたブレース展開してみてください。
lsof を利用したファイル復元
あ、やべえファイル rm しちゃった......
あきらめないで。ワンチャンあるかも。
rm コマンドは inode へのリンクを消すコマンドです。
inode へのリンクが全消失していなければ、つまりそのファイルを開いているプロセスが残っていればワンチャンあります。
下記はデモです。
$ echo "hogehoge" > hoge.txt $ less hoge.txt # less プロセス一時停止 Ctrl + z # 削除 $ rm hoge.txt # プロセス ID を取得 $ lsof | grep "hoge.txt" less 92 takeda 4r REG 8,16 9 1994 /home/takeda/hoge.txt (deleted) # cp コマンドで復元 $ cp /proc/92/fd/4 ./fuga.txt # 確認 $ cat fuga.txt hogehoge
「/proc/{プロセスID}/fd/」から引っ張り出すのがポイントですね。
この場合、「イカしたコマンド」ってどれなんでしょう。
わかりません。
でもピンチを切り抜けるのはイカしていると言えるでしょう?
awk 1
これは中間証明書を結合するときによく使っています。
cat で証明書結合するとき最終行に改行コードが無くて
—–BEGIN CERTIFICATE—– サーバ証明書ファイルの記述内容 —–END CERTIFICATE—–—–BEGIN CERTIFICATE—– 中間証明書ファイルの記述内容 —–END CERTIFICATE—–
みたいになることはないですか?
awk を使えば簡単です。
下記はデモです
$ cat test.pem —–BEGIN CERTIFICATE—– 発行されたサーバー証明書ファイルの記述内容 —–END CERTIFICATE—– $ cat test.ca —–BEGIN CERTIFICATE—– 中間証明書ファイルの記述内容 —–END CERTIFICATE—– $ awk 1 test.pem test.ca > test.chain $ cat test.chain —–BEGIN CERTIFICATE—– 発行されたサーバー証明書ファイルの記述内容 —–END CERTIFICATE—– —–BEGIN CERTIFICATE—– 中間証明書ファイルの記述内容 —–END CERTIFICATE—–
イカすぜ!
awk は 「awk ‘パターン {アクション}’
」 で表記されます。
そしてアクションが省略された場合、パターンにマッチしたレコードを表示してくれます。
これを利用し、「1 = true」のパターンを渡すことですべての行にマッチさせて、レコード単位(1行単位)で表示させることで、きれいに1行ずつ出力されるというわけです。
SQL インジェクションの例として有名な「WHERE id=‘hoge’ or ‘A’=‘A’」とおんなじ手口です。true を渡すのです。(例えが悪い?)
まとめ
ほんのちょっとでええ
ほんのちょっとイカしたコマンド使えたら、明日からもまた頑張れるやんか
ということで個人的にちょっと流行ったらいいなと思ってるコマンドの使い方をいくつか書いてみました。
そういうのお持ちの方はこっそり教えてください。(もしくは記事を書いてください。読みます。)
ありがとうございました。