- 投稿日:2020-09-29T22:05:15+09:00
Raspberry PIで一定期間が過ぎたファイルを削除
概要
今回はRaspberry PIにてCCTVシステムを構築した場合、一定期間が過ぎた画像ファイルや動画ファイルを自動で削除するため、コマンドを作成とCronに登録してみます。
一定期間が過ぎたファイルを抽出
下記のコマンドは1日以上過ぎたファイルが表示されます。
現在の日付:2020/09/29
1日以上過ぎたファイルの取得:引数「+1」を指定します。
28日のファイルを取得:引数を「+1」→「0」に指定します。■コマンド
find /var/lib/motion -name '*.*' -mtime +1■実行結果
./03-20200926145041-02.jpg ./03-20200926145042-00.jpg ./03-20200926145042-01.jpg ./03-20200926145042-02.jpg ./03-20200926145043-00.jpg ./03-20200926145043-01.jpg ./04-20200927183825.avi ./04-20200927183825-00.jpg ./04-20200927183825-01.jpg ./04-20200927183825-02.jpg ./04-20200927183826-00.jpg ./04-20200927183826-01.jpg ./04-20200927183826-02.jpg ./04-20200927183826-03.jpg一定期間が過ぎたファイルを削除
上記のコマンドに引数を「-delete」を追加すると削除されます。
次のコマンドで確認しましょう。■コマンド
find /var/lib/motion -name '*.*' -mtime +1 -delete■実行結果
下記のエラーが表示されます。
理由は該当ディレクトリに削除する権限がないからです。
この場合、「sudo」コマンドで「root」権限を利用してファイルを削除しましょう。find: cannot delete 。ョ/var/lib/motion/17-20200927213443-01.jpg。ッ: Permission denied■sudoコマンドを利用して再度削除
以下のコマンドを実行します。pi@raspberrypi:/var/lib/motion $ sudo find /var/lib/motion -name '*.*' -mtime +1 -delete pi@raspberrypi:/var/lib/motion $■削除されたか確認
下記のコマンド実行結果でファイルが削除され、表示されないことを確認します。pi@raspberrypi:/var/lib/motion $ sudo find /var/lib/motion -name '*.*' -mtime +1 pi@raspberrypi:/var/lib/motion $定期的にコマンドを実行するための設定
Linux上では特定コマンドまたはプログラムを定期的に実行するためにはcronを使います。Windowsの場合、タスクスケジューラと同じものです。
■コマンド
下記の画面のように初めて実行した場合、表示されます。
私はVIエディタが好きですので、2を選びます。pi@raspberrypi:/var/lib/motion $ crontab -e no crontab for pi - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/vim.tiny 3. /bin/ed Choose 1-3 [1]:2■cron設定
下記の1行を追加します。
毎日1時0分に31日以上過ぎたファイルを削除するコマンドが実行されます。参考:cronの設定ガイド
https://www.express.nec.co.jp/linux/distributions/knowledge/system/crond.html# m h dom mon dow command 0 1 * * * sudo find /var/lib/motion -name '*.*' -mtime +31 -delete※実際に削除されると思いますので、皆さんのご自身で確認をお願い致します。
終わりに
今回この内容を応用すればファイルを圧縮してメールへ添付及びSlackチャットにも自動でアップロードすることができます。
近いうちにメールやSlackに添付するプログラムを書いてみます。
- 投稿日:2020-09-29T19:09:10+09:00
PostgreSQL suとsudoの違いについて
はじめに
エンジニアになり、LinuxやPostgreSQLに触れることになりましたので、記録として学んだことを残そうと思います。
環境は、CentOS7.2です。PostgreSQLを使用します。postgresユーザーとpsqlコマンド
DBを操作するためには、psqlコマンドを使用します。
psqlコマンドとは、ターミナルからDBを操作するためのコマンドです。
しかしどのユーザーでもこのコマンドを使用できるわけではありません。(設定を変更すれば可能なようです。)
DBを操作する際は、rootユーザーや一般ユーザーではなく、postgresユーザーに切り替えて(あるいはpsqlコマンドが使用できるユーザーに切り替えて)psqkコマンドを実行し、DBを操作することになります。
そのユーザーの切り替え時に使用するのがsuコマンドとsudoコマンドになります。suコマンドについて
suコマンドはsubstitute userとか、super userとか、switch userとか。調べましたが何の略なのか分かりませんでした。
ユーザーを切り替えるという意味です。su - postgrespostgresユーザーに切り替えています。
ハイフンの有無については、
「-」の有無に注意してください。「-」があると、直接ログインしたときと同様に環境が初期化されます。
つまり、カレントディレクトリは新しいユーザーのホームディレクトリとなり、環境変数もすべて初期化されます。
「-」がなければ、現在の環境をそのままにしてユーザーだけを切り替えます。(中島能和「LinuC教科書 LinuCレベル1 Version10.0対応」p425)ということのようです。
su - パスワード:ユーザー名を省略すると、rootユーザーへの切り替えが行われ、パスワードを求められます。
su - postgres #ユーザーをpostgresへ切り替えて psql test #psqlコマンドでtestサーバーへアクセスします ¥d #¥マーク(あるいはバックスラッシュ)dとすることで、testサーバー内にある、テーブルを一覧表示できます ¥d table #また、¥dの後ろにテーブル名を入力することで、そのテーブルにあるカラムを一覧表示できますsuコマンドでpostgresユーザーに切り替えた後、psqlコマンドで対象のサーバーを指定したら、
SELECT~等のSQL文を書いていくことになります。
ユーザーを切り替えるとそのままですので、ctrl + d で元のユーザーに戻ることができます。sudoコマンドについて
sudoコマンドの場合ですと、sudoから続けて一行でSQL文まで書くことができます。
sudo -u postgres psql table -c "SELECT~";sudoコマンドからuオプションでpostgresユーザー切り替え、psqlコマンドからtableというDBを指定し、
続けてコマンドを打つのでcオプション、ダブルクォーテーションで囲んでSQL文が入力できます。sudo -u postgres psql table -f /var/test.sqlまた、SQL文をファイルにまとめている場合、cオプションをfオプションに変えることで実行できます。
上記の場合ですと、/var 配下にあるtest.sqlファイルを実行しています。ただ、sudoコマンドは毎回ユーザーを切り替えてSQL文を書かなくてはならないので、
suコマンドで一度切り替えてしまった方が、何回もSQL文を書く場合には良いかもしれません。まとめ
postgresユーザーに切り替えるための、suとsudoの違いについて記載しました。
もっと奥が深いかと思いますが、これから学習していきます。
- 投稿日:2020-09-29T16:46:41+09:00
コマンドのパス
コマンドを実行した時に「コマンドが見つからない」と表示されてエラーになることがある。
その時は、コマンドにパスを通すか、コマンドを絶対パスで指定して実行する。コマンドが存在する場所を調べる方法
# whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz # whereis ifconfig ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz → ifconfig でエラーになっても、 /sbin/ifconfig を実行すれば良い。コマンドにパスが通っているか確認する
# echo $PATH /sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin ※左のほうが優先される一時的にパスを通す方法(/usr/local/pgsql/bin をパスに追加したい場合)
# PATH=$PATH:/usr/local/pgsql/bin ★これまでの環境変数PATH に追加する # export PATH ★環境変数PATHをエクスポートする(反映する)ログインした時点で指定したコマンドへのパスが通るように設定するには、
ユーザーのホームディレクトリの下にある .bash_profile の中の PATH= に追記してやればOK.bash_profileの中身はこんな感じ(/home/user1/.bash_profile)
# .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin ★ここにパスを追記してやる export PATH
- 投稿日:2020-09-29T14:45:04+09:00
RPGツクール2000のRuina〜廃都の物語〜をRaspberry Piでプレイしてみた
はじめに
RPGツクール2000は,エンターブレイン社がWindows OS向けに販売しているゲーム制作ソフトウェアです.
Raspberry Piは,LinuxのDebianディストリビューションを元にしてカスタマイズされたRaspbianが動作します.(別のRaspberry Pi向けのOSを利用することも可能ですが,Windowsは動作しません.)したがって,OSが異なるためRPGツクール2000のプログラムは通常Raspbian上で動作しません.
LinuxやMacOS上でWindows向けアプリケーションを実行するためのソフトウェアとしてWineがありますが,Wineはx86命令セットを利用するため,AMD系の命令セットを利用しているRaspberry Piでは動作しません.
x86命令セットをエミュレートすることができるQemuというソフトウェアもありますが,エミュレートは動作が重いため,Raspberry Pi上で動作させるのはあまり現実的ではありません.Qemuの数倍程度高速に動作する有償ソフトウェアであるExaGaer Desktopはすでに販売停止しており,入手することは困難です.
ここに,興味深いEasyRPGというプロジェクトがあります.EasyRPGはRPGツクール200Xで作成されたゲームをマルチプラットフォーム上で動作させるプレイヤーとエディタを提供することを目標としたOSSプロジェクトです.マルチプラットフォームの中にLinuxが含まれているので,今回はEasyRPG Playerを利用できるか試してみました.
簡潔に申しますと,普通にやってもRaspberry Pi上でRPGツクール2000は動かないから,EasyRPG PlayerのRaspberryPi向けビルドを使ってみたという記事です.
なお,RTP素材のインストールのため,WindowsマシンまたはWineが動作するマシンが別途必要となります.(RTPとはエンターブレイン社が公開しているツクール200X向けの汎用素材パッケージです.)
導入
EasyRPG Playerのインストール
EasyRPG Playerは公式によって公開されているリポジトリを利用してインストールします.
Raspbian 9(Stretch)であれば次のコマンドを利用します.
$ echo 'deb http://download.opensuse.org/repositories/home:/easyrpg/Raspbian_9.0/ /' | sudo tee /etc/apt/sources.list.d/home:easyrpg.list $ curl -fsSL https://download.opensuse.org/repositories/home:easyrpg/Raspbian_9.0/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/home:easyrpg.gpg > /dev/null $ sudo apt update $ sudo apt install -y easyrpg-playerRaspbian 10(Buster)であれば次のコマンドを利用します.
$ echo 'deb http://download.opensuse.org/repositories/home:/easyrpg/Raspbian_10/ /' | sudo tee /etc/apt/sources.list.d/home:easyrpg.list $ curl -fsSL https://download.opensuse.org/repositories/home:easyrpg/Raspbian_10/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/home:easyrpg.gpg > /dev/null $ sudo apt update $ sudo apt install -y easyrpg-playerこれらのコマンドは,EasyRPGのLinux向けダウンロードページの「Arch Linux, Debian, Ubuntu, Fedora and openSUSE packages」→「Debian」→「手作業でリポジトリを追加してインストール」から確認することができます.
$ easyrpg-playerコマンドでEasyRPGが起動すればインストール成功です.
RTPのインストールおよびRTPフォルダのコピー
Raspberry PiでRTP素材を利用しているツクール作品をプレイする場合は,RTP素材をRaspberry Pi上にコピーする必要があります.
WindowsマシンやWineが動作するマシンに,エンターブレイン社公式サイトからRPGツクール200X向けのRTPをダウンロードして,インストールしてください.
インストール先はデフォルトではC:¥Program Files (x86)¥ASCII¥RPG2000¥RTP
またはC:¥Program Files (x86)¥ASCII¥RPG2003¥RTP
となります.
2000と2003のいずれか片方しか利用しない場合は,利用するほうのみインストールすれば十分です.インストールができたら,RTPフォルダをRaspberry Piの任意の場所にコピーします.(.icoファイルは必要ありません.)
最後に,EasyRPG PlayerからRTPを利用するために,.bash_profile
に環境変数$RPG2k_RTP_PATH
および$RPG2k3_RTP_PATH
を追記しておきます.
2000と2003のいずれか片方しか利用しない場合は,利用するほうのみ環境変数を登録すれば十分です.以下では例として,
ツクール2000向けのRTPを/home/pi/RPGtkool2k/2000/RTP
として,
ツクール2003向けのRTPを/home/piRPGtkool2k/2003/RTP
としてコピーしたと仮定します.
パスは適宜読み替えてください.# RPGツクール2000のRTPのフォルダを指定する $ echo "export RPG2K_RTP_PATH=/home/pi/RPGtkool2k/2000/RTP" >> .bash_profile # RPGツクール2003のRTPのフォルダを指定する $ echo "export RPG2K3_RTP_PATH=/home/pi/RPGtkool2k/2003/RTP" >> .bash_profileこれでEasyRPGからRTPの利用が可能になりました.
RPGツクール作品のダウンロード
お好きな作品をRaspberry Pi上の任意の場所にダウンロードしてください.
(おすすめはRuina〜廃都の物語〜です.
この記事は9割がたRuina〜廃都の物語〜を布教するために書かれています.)ただし,zipファイル等はShift-JISでエンコードされていることが多いので,Raspberry Piの通常の展開ソフトでは文字化けしてしまう可能性があります.
Linux上でShift-JISエンコードされたzipファイルを正しく展開できるunarというソフトがあるので,これを利用することをおすすめします.$ sudo apt install -y unar $ unar <zipファイル名>【注意】
EasyRPG Playerでゲームを認識するためには,RPG_RT.exe
が存在するディレクトリ,またはその親ディレクトリでEasyRPG Playerを起動する必要があります.
したがって,ホームディレクトリでEasyRPG Playerを起動するために,「RPG_RT.exe
が入っているフォルダ」をホームディレクトリに置いておくと良いと思います.
(つまり/home/pi/<ゲームフォルダ>/RTP_ET.exe
としておけば,EasyRPGを/home/pi
上で起動すればゲームが認識されるようになります.)実行
EasyRPG Playerを次のコマンドで起動してください.
ただし,RPG_RT.exe
が存在するディレクトリ,またはその親ディレクトリでコマンドを入力しないと,EasyRPG Playerが起動しても,ゲームが認識しません.
ダウンロードしたゲームが正しく認識されていれば成功です.おめでとうございます!$ easyrpg-player最後に
Ruina〜廃都の物語〜はフリーでありながら素晴らしいクオリティを誇る神ゲーです.
私はRuinaファンの方が増えることを願ってやみません.
また,Ruinaファンの方がいらっしゃいましたらTwitterまたはSoundCloudで絡んでいただけますと大変嬉しく思います.
- 投稿日:2020-09-29T13:46:24+09:00
gzipメモ
ファイルを最大圧縮率で圧縮
# gzip -9 ファイル名ファイルを圧縮させながら別の場所に吐き出させる場合
# cat error_log | gzip -9 >> /tmp/error_log.gz圧縮させたファイルの中身を見たいだけなら
# zcat 圧縮ファイル名通常のファイルをlessで確認するのと同様にしたいならzless
# zless 圧縮ファイル名圧縮ファイルの中で特定の文字列を含む箇所を見つけたい時は zgrep が使える
# zgrep 文字列 圧縮ファイル名 これも同様の結果 # zcat 圧縮ファイル名 | grep 文字列tar+gzip圧縮(tar zcpvf xxx.tgz aaa bbb)したファイルの中身は less で確認できる。
- 投稿日:2020-09-29T11:49:13+09:00
【Linux】文字コード関連
サーバ上でファイルを読んだ時に文字化けしてしまう場合、nkfに渡してやると日本語化してくれたりする。
(例)メールファイルのsubjectが文字化けして読めない場合、以下のようにする。
# cat メールファイル名 | grep -i subject | nkf文字コードの確認
# file -i memo memo: text/plain; charset=iso-8859-1# nkf --guess memo EUC-JPmemoファイルの文字コードをEUC-JPからUTF-8に変換してmemo_newとして保存
# iconv -f EUC-JP -t UTF-8 memo -o memo_new # nkf --guess memo_new UTF-8
- 投稿日:2020-09-29T11:00:38+09:00
whoコマンドメモ
ログインしているユーザー、ログイン時間、接続元などが表示される。
$ who miisuke pts/0 2019-07-19 13:32 (gateway.test.jp)-H をつけた方が項目名がついてわかりやすいかも。
$ who -H 名前 端末 時間 コメント miisuke pts/0 2019-07-19 13:32 (gateway.test.jp)サーバーが起動した時間を表示
$ who -b system boot 2014-07-07 14:26uオプションもつけてみる。
# who -uH USER LINE LOGIN-TIME IDLE FROM number tty1 Nov 21 01:54 old number pts/1 Nov 22 01:16 06:37 hoge pts/0 Nov 21 16:24 . (xxx.xxx.xxx.xxx) number pts/2 Nov 22 01:29 02:08 hoge pts/3 Nov 23 03:03 00:06 (xxx.xxx.xxx.xxx)<IDLE列の表示について>
. が表示されている場合は、ユーザーが1分以内に端末操作を行っているということ。
old が表示された場合、ユーザーが24時間以上端末操作を行っていないということ。