20210220のLinuxに関する記事は6件です。

Linux Command

Linuxでファイルサイズを0にする http://www.perfectsky.net/blog/?p=16

$ cp /dev/null foo.log

直下すべてのフォルダのサイズを人間に読める表現で表示する

du -h -d 1

grep を正規表現使用しない 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
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

リモート環境のpostgresDBからcsvを出力してローカルに持ってきたい

概要

リモート環境にsshで接続して、DBからcsvをローカルに落としたい場面が多々あったので備忘録として残しておこうと思いました。

環境

DBエンジン: PostgreSQL11.6
ローカルクライアント: macOS Big Sur
リモートサーバー: Amazon Linux 2

csvを出力

まずは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.csv

csvが確認できたら接続を閉じます

$ exit

②DB接続してからcsv出力する

一度DBに接続します

$ psql -U [DBユーザ名] -h [DBホスト名] -d [DB名]

以下のコマンドを叩いていきます

=> \o example.csv
=> \a
=> \f ','
=> [SQL文]
=> \o
# 接続終了
=> \q
# csvができているか確認
$ less example.csv

csvが確認できたら接続を閉じます

$ exit

scpコマンドでローカルに持ってくる

scpコマンドとは?

SSHプロトコルを使用したホスト間のファイル転送ができます。
基本的には以下の構文となります。

$ scp [オプション] コピー元 コピー先 

実行

今回はDownloadsディレクトリに落とします

$ scp -i [秘密鍵ファイル] [リモートユーザ名]@[リモートIPアドレス(ホスト名)]:~/example.csv  ~/Downloads
# csvを確認
$ less ~/Downloads/example.csv

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

特定のディレクトリを除外して、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
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

slack spaceから機密情報を暴いてやる!!

はじめに

最近、CTFに絶賛ハマり中の@fumiyan_proproです。解いている問題で面白そうなのを見つけたのでそのことについてお話したいと思いました。今回は、picoCTFに出てきた問題です。

目次

  1. slack space
  2. slack spaceからデータの復元
  3. さいごに

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 space

slack 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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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に対応する機能は無さそうですが今回の目的には不要でした。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

linuxでのpython更新

dockerhubから引っ張ってきたdockerイメージのpythonが古すぎて絶望したので備忘録

以下コンテナ内の操作

コンパイル準備

sudo apt install libffi-dev libssl-dev openssl wget
wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz 

※お好みのバージョンを使う

コンパイル

tar zxvf Python-3.7.2.tgz
cd Python-3.7.2
./configure
make
sudo make install
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む