- 投稿日:2021-02-20T21:53:10+09:00
Linux Command
Linuxでファイルサイズを0にする http://www.perfectsky.net/blog/?p=16
$ cp /dev/null foo.log直下すべてのフォルダのサイズを人間に読める表現で表示する
du -h -d 1grep を正規表現使用しない https://ex1.m-yabe.com/archives/3012
ps aux | grep -F ".sh"cksum 結果付ファイル一覧(モジュールリリース時よく使用する)
find $PWD -maxdepth 1 -type f -printf " %m " -ls | awk '{cmd=sprintf("cksum %s | awk '\''{printf \"%%14s\",$1;}'\''",$12);system(cmd);printf "%12s%12s%12s%12s%4s%12s%12s%12s%4s%4s%7s %s\n",$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13;close(cmd);}' | awk '{printf "%14s%6s%12s%12s%12s%12s%4s%4s%7s %s\n",$1,$2,$5,$7,$8,$9,$10,$11,$12,$13}'出力例:cksum 結果 権限(数字) 権限 ユーザー グループ 更新日付 ファイル名
1657920335 644 -rw-r--r-- root root 176 12月 29 2013 /root/.bash_profile
- 投稿日:2021-02-20T13:37:11+09:00
リモート環境のpostgresDBからcsvを出力してローカルに持ってきたい
概要
リモート環境にsshで接続して、DBからcsvをローカルに落としたい場面が多々あったので備忘録として残しておこうと思いました。
環境
DBエンジン: PostgreSQL11.6
ローカルクライアント: macOS Big Sur
リモートサーバー: Amazon Linux 2csvを出力
まずはssh接続します。
$ ssh -i [秘密鍵ファイル] [リモートユーザー]@[リモートIPアドレス(ホスト名)]今回は指定したSQLの出力結果をcsvに出力したかったのでその方法を2通りほど記述します。
テーブルを丸ごとcsv出力したい場合はCOPY
コマンドを使ってください。①psqlコマンドでcsv出力する
# -A: 位置揃えなし # -F: 区切り文字指定 $ psql -U [DBユーザ名] -h [DBホスト名] -d [DB名] -c "SQL文" -F ',' -A > example.csv # csvができているか確認 $ less example.csvcsvが確認できたら接続を閉じます
$ exit②DB接続してからcsv出力する
一度DBに接続します
$ psql -U [DBユーザ名] -h [DBホスト名] -d [DB名]以下のコマンドを叩いていきます
=> \o example.csv => \a => \f ',' => [SQL文] => \o # 接続終了 => \q # csvができているか確認 $ less example.csvcsvが確認できたら接続を閉じます
$ exitscpコマンドでローカルに持ってくる
scpコマンドとは?
SSHプロトコルを使用したホスト間のファイル転送ができます。
基本的には以下の構文となります。$ scp [オプション] コピー元 コピー先実行
今回はDownloadsディレクトリに落とします
$ scp -i [秘密鍵ファイル] [リモートユーザ名]@[リモートIPアドレス(ホスト名)]:~/example.csv ~/Downloads # csvを確認 $ less ~/Downloads/example.csv参考
- 投稿日:2021-02-20T11:49:39+09:00
特定のディレクトリを除外して、pythonファイルのオートフォーマットする
find . -type d -name [除外するディレクトリ] -prune -o -type f -name '*.py' -print | xargs autopep8 --in-place --aggressive --aggressive例えば仮想環境とか作って
. ├── __init__.py ├── __pycache__ ├── a.py ├── b.py ├── c.py ├── d.py └── venv ├── bin ├── include ├── lib └──ここにめちゃめちゃpythonファイルある!! ├── pyvenv.cfg └── share仮想環境下のファイルは別にフォーマットしなくてよくて、
a,b,c,d.pyだけフォーマットしたい
みたいなときに役立つコマンド具体例としては
find . -type d -name venv -prune -o -type f -name '*.py' -print | xargs autopep8 --in-place --aggressive --aggressive
- 投稿日:2021-02-20T10:36:59+09:00
slack spaceから機密情報を暴いてやる!!
はじめに
最近、CTFに絶賛ハマり中の@fumiyan_proproです。解いている問題で面白そうなのを見つけたのでそのことについてお話したいと思いました。今回は、picoCTFに出てきた問題です。
目次
- slack space
- slack spaceからデータの復元
- さいごに
slack space
slack spaceの話の前に一度デバイスドライバについてお話します。デバイスドライバは記憶保存領域になります。ファイルのデータなどを保存する場所と思って頂いて構いません。デバイスドライバの単位としてよく使用されるのがクラスタになります。OSが読み書きで管理している単位になります。デバイスドライバの最小単位となるのがセクタになります。セクタが512バイトでクラスタがセクタ8個分の4096バイト使用するなどがあります。
表にすると下記になります。
名前 単位 セクタ 512バイト クラスタ 4096バイト ※クラスタはOSによって扱っているバイトが異なります。
これをもとにslack spaceとは何かというと
スラックスペースとは、コンピュータファイルがオペレーティングシステムによって割り当てられたすべてのスペースを必要としない場合に、コンピュータのハードディスクドライブ上に存在する残りのストレージのことです。
WhatIs.com slack space(DeepL翻訳)
上記の内容では、まだピンとこないかもしれないので具体的な内容としては、前提条件がセクタ512バイトで考えてみます。保存される単位はクラスタ単位で保存されます。今回はセクタ3つ分の1536バイトです。
1280バイトのファイルを保存しました。ファイルを保存した時にデバイスドライバ(記憶領域)に割り当てます。割り当てられる単位はクラスタ単位になるので3つ分のセクタ領域を使用しました。この時に、クラスタは1536バイトになるのでそこから1280バイト分引くと、256バイト未使用の領域が出てしまいます。この時の未使用の領域のことをslack spaceといいます。
1536 - 1280 = 256 <-- この256がslack spaceslack spaceからデータの復元
次にslack spaceからデータを復元することが可能なのです。先ほど使用したクラスタに割り当てているファイルの内容を消したとします。その次に新しいファイルの内容で保存した時に、そのクラスタに1080バイト分データが割り当てられたとします。この時に200バイト分、前のslack spaceに足されるので456バイト分のslack spaceになりました。
ここでなんと、先ほどの200バイト分のデータの中に前のデータが残っている場合がありそこの部分から削除したファイルを復元することが出来るのです!!1536 - 1080 = 456 <--今回のslack space 456 - 256 = 200 <-- 前回のslack spaceから今回のslack spaceを引いた値 200 <-- このslack spaceの中に前のデータが残っている可能性があるデータの復元などは、Autopsyなどのtoolを使用すると出来ます。
さいごに
2016年、連邦捜査局(FBI)は、ヒラリー・クリントン前国務長官の個人サーバーが機密情報を不適切に保存・送信したかどうかを判断するために、ヒラリー・クリントン前国務長官の個人サーバーのたるみ空間に常駐していた数百万通の電子メールの断片を見直していたことを明らかにした。
WhatIs.com slack space(DeepL翻訳)
上記の様に実際の事例でも使用されています。
この手の分野は、フォレンジックの分野になっており事件などでも使用されています。参考文献
https://whatis.techtarget.com/definition/slack-space-file-slack-space
https://www.autopsy.com/
https://zarat.hatenablog.com/entry/2020/04/03/230926
- 投稿日:2021-02-20T08:53:25+09:00
Node.js製サーバの起動方法をforeverからsystemdに移行する
foreverで起動していたExpressのサーバをOS再起動時に自動起動させたかったのでSystemd管理に移行します。
initd向けにforeverの自動起動の仕組みを提供するinitd-forever
というパッケージもあったり、forever自体を起動する方向もアリですが、Systemdでは自動再起動の制御が細かくなっているなど、foreverに期待していた役割自体も担えそうでしたのでシンプルにSystemd → Nodeにしました。
最低限の設定をイメージしてこんな感じになりました。/etc/systemd/system/mydaemon.service[Unit] Description=My Node.js Daemon [Service] User=myuser Group=mygroup #Environment="NODE_ENV=production" WorkingDirectory=/path/to/ ExecStart=/usr/bin/node app.js Restart=always [Install] WantedBy=multi-user.targetあとは
systemctl enable mydaemon.service
で自動起動有効化し、
systemctl start mydaemon.service
で起動します。
User
/Group
は指定しなければrootになってしまうため指定しています。
Environment
は今回不要でしたがExpressで使う機会が多そうなのでコメントアウト状態でサンプルとして入れています。
対象のスクリプトはnode app.js
で起動して、Ctrl+Cで終了させるような動きになっている必要があります。
Restart=always
によってプロセスが落ちても自動的に復帰させます。
デフォルトで10秒に5回の再起動に制限されますがStartLimitInterval
StartLimitBurst
で調整できます。foreverの
watch
に対応する機能は無さそうですが今回の目的には不要でした。
- 投稿日:2021-02-20T00:38:05+09:00