20200929のLinuxに関する記事は8件です。

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に添付するプログラムを書いてみます。

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

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 - postgres

postgresユーザーに切り替えています。

ハイフンの有無については、

「-」の有無に注意してください。「-」があると、直接ログインしたときと同様に環境が初期化されます。
つまり、カレントディレクトリは新しいユーザーのホームディレクトリとなり、環境変数もすべて初期化されます。
「-」がなければ、現在の環境をそのままにしてユーザーだけを切り替えます。(中島能和「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の違いについて記載しました。
もっと奥が深いかと思いますが、これから学習していきます。

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

コマンドのパス

コマンドを実行した時に「コマンドが見つからない」と表示されてエラーになることがある。
その時は、コマンドにパスを通すか、コマンドを絶対パスで指定して実行する。

コマンドが存在する場所を調べる方法

# 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
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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-player

Raspbian 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で絡んでいただけますと大変嬉しく思います.

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

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 で確認できる。

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

【Linux】文字コード関連

サーバ上でファイルを読んだ時に文字化けしてしまう場合、nkfに渡してやると日本語化してくれたりする。

(例)メールファイルのsubjectが文字化けして読めない場合、以下のようにする。

# cat メールファイル名 | grep -i subject | nkf

文字コードの確認

# file -i memo
memo: text/plain; charset=iso-8859-1
# nkf --guess memo
EUC-JP

memoファイルの文字コードをEUC-JPからUTF-8に変換してmemo_newとして保存

# iconv -f EUC-JP -t UTF-8 memo -o memo_new

# nkf --guess memo_new
UTF-8
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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:26

uオプションもつけてみる。

# 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時間以上端末操作を行っていないということ。

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

linuxでリンクを貼る

lnコマンド

シンボリック作成
ln -s リンク元 登録名
強制的にシンボリックリンクを貼る
ln -sf リンク元 登録名
登録名に既にリンク元がある場合、リンク元ではなく、コマンドで新たに指定されたリンク元へ上書き
ln -nsf リンク元 登録名
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む