Blender備忘録1
視点操作
- 回転
「中ボタンドラッグ」 - パン
「Shift」+「中ボタンドラッグ」 - ズームイン・ズームアウト
「Ctrl」+「中ボタンドラッグ」
オブジェクトモード・編集モード共通操作
3Dビューポートにオブジェクトを追加
「Shift」+「A」
移動
「G」
スケーリング
「S」
回転
「R」
コピー
「Shift」+「D」
軸のロック
移動・回転・拡大縮小・押し出し・コピー後、「X, Y, Z」
平面のロック
移動・スケーリングを押した後、「Shift」+「X, Y, Z」
削除
「X」
選択
選択モードの切り替え
「W」
ボックス選択
「B」
全選択
「A」
サークル選択
「C」
投げ縄選択
「Ctrl」+「右ボタンドラッグ」
選択解除
「Alt」+「A」
直前の操作をする
「Shift」+「R」
オブジェクトモード・編集モードへの切り替え
「Tab」
現在のモードで行える操作一覧表示
「Shift」+「Space」
3Dカーソルをデフォルトの位置(XYZ=0)に戻す
「Shift」+「C」
選択オブジェクトのみ表示(ローカル表示)
「/」
オブジェクトモード操作
オブジェクト統合
「Ctrl」+「J」
オブジェクトのトランスフォームを適用
- 「Ctrl」+「A」
- ベベルが上手くかからない時などに使う
リンク複製
「Alt」+「D」スムーズシェード
「右クリック」メニューから
編集モード操作
スライド移動
「G」→「G」
押し出し
「E」
法線に沿って面を押し出し
「Alt」+「E」
インセット
- 「I」
- インセット後、「Ctrl」で差し込みの深さ調整
- インセットの個別・統合の切り替え
インセット後、さらに「I」フィル
「F」辺ループの挿入
- 「Ctrl」+「R」
- ESCで真ん中
溶解
「X」ナイフ
「K」頂点マージ
「M」プロポーショナル編集のオン・オフ切り替え
「O」分離
「P」細分化
「右クリック」メニューから扇状に分離
面を選択後、「右クリック」メニューから辺ループのブリッジ
「右クリック」メニューからLoop Tools
- 標準アドオンから有効化
- 「右クリック」メニューから
ベベル(面取り)
- 辺の場合は「Ctrl」+「B」
- 頂点の場合は「Ctrl」+「B」→V
- カーブの場合はカーブのデータプロパティ→ジオメトリで深度を設定後、コントロールポイントを選択し、「Alt」+「S」で厚み・太さを調整できる
選択
ループ選択
「Alt」+「左クリック」選択範囲の拡大・縮小
「Ctrl」+「+, -」独立・分断されたメッシュの選択・リンク選択
- 選択したい独立したメッシュにカーソルを合わせて、「L」
- 選択した要素に接続されているジオメトリを「Ctrl」+「L」で選択可能
モディファイア関連
平均クリース・辺クリース
- サブディビジョンサーフェイスで辺の丸さを調整する機能、エッジの鋭さを定義
- 「Shift」+「E」を押した後、「ドラッグ」
スキンモディファイア スキンの厚みの変化
「Ctrl」+「A」を押した後、「ドラッグ」
メニュー操作
パイメニュー表示
モードのパイメニュー表示
「Ctrl」+「Tab」
ピボットポイントのパイメニュー表示
「.」
トランスフォーム座標系のパイメニュー表示
「,」
ツールバーの表示・非表示
「T」
プロパティシェルフの表示・非表示
「N」
オペレータパネルの再表示
トップバーの「編集」→「最後の操作を調整」
用語解説
トポロジー
ポリゴンの流れのこと、1つの頂点に4つの辺が集まるのが理想
原点
オブジェクトの中心のこと
ピボットポイント
制御の中心のこと
Tips
- オブジェクトモードではオブジェクトと原点は共に移動
- 編集モードではジオメトリ(頂点、辺、面)を編集した際に原点は動かない
ハードリンクとシンボリックリンクの違い
はじめに
今回はリンクを張るlnコマンド
のハードリンクとシンボリックリンクの違いについて解説します。
ハードリンクとは
- 1つのファイルの実体に複数の名前を付ける機能(どれも本物の名前)
- いくつかの制限がある(ディレクトリに対して作成不可、異なるディスク間をまたぐことができないなど)
ハードリンクの例
$ cat test.txt a b c $ ln test.txt link # ハードリンクを張る $ cat link a b c
以下、ファイルtest.txtの内容を変更した実行結果
$ cat test.txt a b c d $ cat link a b c d
ここからさらにtest.txtを削除してやり、linkの内容を表示してみる
$ rm test.txt $ cat link a b c d
つまりハードリンクはハードリンクが張られた全てのファイルが削除されるまでファイルの実体も残るというわけです。 次からはシンボリックリンクについて解説します。
シンボリックリンクとは
- リンク先のパス名が書かれた小さな特殊ファイル
- リンク先がファイルの実体
シンボリックリンクの例
$ cat test.txt a b c $ ln -s test.txt link # シンボリックリンクを張る $ cat link a b c
以下、ハードリンクと同様にファイルtest.txtの内容を変更した実行結果
$ cat test.txt a b c d $ cat link a b c d
しかし、ファイルtest.txtを削除して、linkの内容を表示してみると実行結果が異なる
$ rm test.txt $ cat link cat: link: No such file or directory
つまりリンク先がなくなり、リンクが壊れた状態となる。
Linuxコマンドチートシート
はじめに
この記事はLinux(当環境はDebianを使用)で自分がよく使うコマンドの備忘録です。
自分用の備忘録として書いているため、自分があまり使わないものについては書いていません。 その点ご了承願います。
内容については随時更新していく予定です。
目次
- はじめに
- 目次
- Linuxコマンドチートシート
- ファイル・ディレクトリ操作
- 権限操作
- システム関連
- セキュリティ関連
- 文字列検索・操作
- シェル関連
- その他
Linuxコマンドチートシート
ファイル・ディレクトリ操作
ls - ファイル一覧の表示
カレントディレクトリのファイル一覧の表示
$ ls
オプション
-a
ドットファイル(隠しファイル)も表示
-l
詳細情報も表示
-F
ファイル種別も表示
cd - カレントディレクトリの変更
Change Directory
の略
$ cd ~
1つ前の作業ディレクトリに戻る
$ cd -
pwd - カレントディレクトリのパスを表示
Print Working Directory
の略
$ pwd
mv - ファイルの移動、ファイル名の変更
ファイルの移動
$ mv 移動元のファイルパス 移動先のディレクトリパス
オプション
-i
上書き時に確認する
cp - ファイルをコピーする
$ cp コピー元のファイルパス コピー先のファイルパス
オプション
-r
ディレクトリをコピーする
-i
上書き時に確認する
mkdir - ディレクトリを作成
$ mkdir ディレクトリパス
オプション
-p
深いディレクトリを一気に作成する
touch - ファイルのタイムスタンプを更新する、ファイルの作成
$ touch ファイルパス
rm - ファイル・ディレクトリの削除
$ rm ファイルパス
オプション
-r
ディレクトリの削除
-i
削除時に確認する
rmdir - 空のディレクトリの削除
$ rmdir 空のディレクトリのパス
ln - リンクを張る
ハードリンクを張る
$ ln ファイルパス リンク名
オプション
-s
シンボリックリンクを張る
cat - ファイルの内容を表示、ファイルの内容を連結して表示
$ cat ファイルパス
オプション
-n
行番号を付加する
less - ファイルの内容をスクロールして表示
$ less ファイルパス
which - コマンドパスの表示
$ which コマンド名
権限操作
su - ユーザーを変更する
スーパーユーザーの環境に初期化してスーパーユーザーに変更
$ su -
sudo - コマンドを別のユーザとして実行する
スーパーユーザー権限でコマンドを実行
$ sudo コマンド名
visudo - /etc/sudoersの編集
$ sudo visudo
chmod - パーミッションを変更する
ファイルの所有者に実行権限を付与
$ chmod u+x ファイルパス
chown - ファイルの所有者を変更する
$ chown ユーザー名 ファイルパス
useradd - 新規ユーザーの作成
$ useradd ユーザー名
オプション
--create-home
or -m
ユーザーのホームディレクトリが存在しなければホームディレクトリを作成する
--no-create-home
or -M
ユーザーのホームディレクトリを作成しない
システム関連
apt - パッケージ操作
パッケージのアップデートをチェック
$ sudo apt update
パッケージのアップデートを実行
$ sudo apt upgrade
パッケージのインストール・リポジトリの情報の登録
$ sudo apt install パッケージ名
パッケージのアンインストール
$ sudo apt remove パッケージ名
パッケージのインストール状況を調べる
$ sudo apt list --installed
更新に伴い、必要のなくなったパッケージを削除する
sudo apt autoremove
セキュリティ関連
ufw - ファイアウォールの設定
内容の確認
$ sudo ufw status
全てのポートへの接続を禁止
$ sudo ufw default deny
ポートの解放
$ sudo ufw allow ポート番号
ファイアウォールの有効化
$ sudo ufw enable
ファイアウォールの設定の再読み込み
$ sudo ufw reload
ssh - リモートマシンにSSHでログインし、リモートマシン上でコマンドを実行する
$ ssh ログインユーザー名@IPアドレス
オプション
-p ポート番号
ポート指定
-i 秘密鍵ファイル
秘密鍵を指定
scp - リモートマシンとローカルマシン、あるいはリモートマシン同士でファイルをコピーする
$ scp コピー元ファイルパス ログインユーザー名@IPアドレス:コピー先ファイルパス
$ scp ログインユーザー名@IPアドレス:コピー元ファイルパス コピー先ファイルパス
オプション
-P ポート番号
ポート指定
-i 秘密鍵ファイル
秘密鍵を指定
ポート番号指定するときはssh
は-p ポート番号
で小文字、scp
は-P ポート番号
で大文字のオプションを指定すること
ssh-keygen - 鍵ペア(公開鍵と秘密鍵)の作成
$ ssh-keygen
pwgen - パスワード(ランダムな文字列)を生成する
12文字のパスワードを1つ生成
$ pwgen 12 1
文字列検索・操作
grep - ファイルの中から指定した内容を含む行を探す
global regular expression print
の略
$ grep "検索文字列" ファイルパス
オプション
-r
サブフォルダまで検索
-E
正規表現を指定
-i
大文字小文字の違いを無視(ignore case)
-v
指定した文字列を含まない行だけに絞り込む
cut - 入力された内容の各行から必要な部分だけを切り出す
行頭から3列目までを切り出す
$ cut -f 1-3 ファイルパス
オプション
--delimiter 区切り文字
or -d 区切り文字
区切り文字には任意の一文字を指定、区切り文字がタブ文字の場合は省略する
--fields 取り出す列位置
or -f 取り出す列位置
取り出す列位置は最初が1で複数の数字や範囲も指定可能、例えば 1,3
、1-3
など
sort - 入力された内容を昇順に並べ替える
$ sort ファイルパス
オプション
--reverse
or -r
降順にソート
--field-separator
or -t
区切り文字を指定
--key
or -k
列番号を指定して列の内容での並べ替え
--number
or -n
単純ソートから数値ソートに変更
--ignore-leading-blanks
or -b
先頭の空白を無視する
uniq - 入力された内容の連続した重複を取り除く
$ sort ファイルパス | uniq
オプション
--count
or -c
同じ内容が何回登場したかカウント
wc - 入力された内容の文字数や行数を数えてその結果を返す
Word Count
の略
$ wc ファイルパス
オプション
--lines
or -l
行数
--words
or -w
単語数
--chars
or -m
バイト数
sed - 文字列の編集
Stream EDitor
の略
ファイルの全行に渡って置換(一括置換)
$ sed -e "s/置換前文字列/置換後文字列/g" ファイルパス > 新しいファイルのファイルパス
1つのコマンド列の中でファイルを上書きするとファイルが消失してしまうので注意
オプション
--expression
or -e
置換文字の指定をする、複数指定可能
head - 入力の先頭から10行だけを取り出す
$ head ファイルパス
オプション
-n 行数
出力する行数を変更
tail - 入力の末尾から10行だけを取り出す
$ tail ファイルパス
オプション
-n 行数
出力する行数を変更
-F
ファイルに追加された内容をその都度出力
echo - 引数で指定した文字列の表示
ログインシェルの確認
$ echo $SHELL
シェル関連
chsh - ログインシェル自体の変更
ログインシェルをzshに変更
$ chsh -s /bin/zsh
clear - 端末の表示内容を消す
$ clear
printenv - 環境変数の一覧表示
$ printenv
source - ファイルからコマンドを読み込んで実行する(.コマンドと同じ)
$ source ファイルパス
type - シェルがどのコマンドを起動しているかを知る
$ type コマンド名
alias - エイリアスの設定確認、エイリアスの定義
エイリアスの設定確認
$ alias
エイリアスの定義
alias 定義名='実行内容'
unalias - エイリアスの削除
$ unalias 定義名
エイリアスかの確認、エイリアスを一時的に無効にする
エイリアスかの確認
$ type ls ls is an alias for ls -F
エイリアスを一時的に無効にする
$ \ls
$ /bin/ls # フルパス指定
$ command ls # 明示的にコマンドを実行
その他
hostname - 実行したサーバーのホスト名を出力
$ hostname
crontab - 定期作業の自動実行
$ crontab -e
cronjobととして設定された作業はcrontabコマンドを実行したときのユーザー権限でのみ動作するのに注意
オプション
-l
設定済みのcronjobの一覧表示
-e
設定の編集
ip address show - IPアドレスを表示
$ ip address show
curl - Webアクセス
HTTPでGETリクエスト
$ curl -X GET "URL"
HTTPでPOSTリクエスト
$ curl -X POST "URL"
ダウンロード
$ curl -o 保存先ファイルのパス URL
自身のグローバルIPアドレスを表示
$ curl ifconfig.io
iconv - 文字コードの変換
$ iconv -f EUC-JP -t UTF-8 ファイルパス
date - 現在日時の表示
$ date
logout / exit - ログアウト(logoutはログインシェルの時のみログアウト可能)
$ exit
Debian系サーバーにSSHログインしたときにLINEに通知するシェルスクリプトを書こう
はじめに
はてなブログ初投稿です。
ボンサイワークスと申します。
フィヨルドブートキャンプというプログラミングスクールで学習を始めてもうすぐ3ヶ月になりますがまだ一度も記事を書いたことがなかったので 記事を書いて投稿してみようと思います。
前置きはさておいて今回の記事の内容は「Debian系サーバーにSSHログインしたときにLINEに通知するシェルスクリプトを書こう」です。 Linux・シェルスクリプト勉強中のため、ところどころ理解が甘く、間違っている箇所などもあるかもしれませんが、どうかご指摘くださる際はお手柔らかにお願いします。
では今回作るシェルスクリプト(以下、ログイン通知シェルスクリプト)の仕様を簡単に示します。
ログイン通知シェルスクリプトの仕様
- Debianの認証ログを解析して、ログイン通知シェルスクリプトが実行されてから通知していないSSHログインが見つかった場合、それを通知する
- LINEに通知する手段としてはLINE Notifyのアクセストークンを発行し、それを使用する
- 動作環境はさくらVPS上にインストールされたDebianを対象とする
- ログイン通知シェルスクリプトを実行するシェルはbashとする
- サーバー上で1分間に一度ログイン通知シェルスクリプトを定期実行する
次に認証ログについて簡単に説明します。
認証ログ
認証ログとは
- いつ誰が何のために認証をしたのかが記録されるログ
- Linuxディストリビューションによって保存先が異なる(詳しくは次項参照)
- ログの書き込みは「rsyslogd」というデーモン(常駐プログラム)が実施している
- 定期的に古いログは圧縮される(設定により色々と変更できる、今回は直近のものだけ使うので圧縮ファイルは使わない)
認証ログの保存先
Linuxディストリビューションごとの認証ログの保存先は以下の通りです。
/var/log/auth.log
/var/log/secure
/var/log/authlog
となっています。
今回、作成するシェルスクリプトはDebianが対象なので認証ログの保存先は/var/log/auth.log
になります。
認証ログの解析
認証ログを解析する上で必要となる認証ログの内容を表示してみると
SSHログインした際のメッセージにはAccepted
という文字列が含まれていることがわかります。
ということでログイン通知シェルスクリプトはこの文字列Accepted
が含まれた行を検索するアプローチで作成していきたいと思います。
LINE Notifyのアクセストークンを発行する
まず、LINE Notifyにアクセスします。アクセスしたら右上の「ログイン」から通知を受け取りたいLINEアカウントでログインします。 LINEアカウントを持っていない方はまずLINEアカウントを作ってください。
ログインできたら右上の自身のアカウント名が表示されているところをクリックして、「マイページ」をクリックしてください。 するとマイページが表示されるので以下の画像の箇所を探して「トークンを発行する」をクリックしてください。
次に以下を参考にトークン名の入力、トークルームの選択をして「発行する」をクリックします。
すると以下のようにアクセストークンが表示されるのでコピーしてどこかに控えておいてください。
ここまで来れば準備は完了です。
次にログイン通知シェルスクリプトを実装していきます。
ログイン通知シェルスクリプト
ここからは今回作成するシェルスクリプトについて書いていくわけですが、シェルスクリプトの基本から書いてしまうととてつもなく文章が長くなってしまいますのでここでは完成したプログラムを示して、要点だけを説明することにします。
シェルスクリプトやLinuxのコマンドについて全く知らない方はインターネット上の他のサイトなどで学習してから以下に示したシェルスクリプトを作ることをオススメします。
以下、ログイン通知シェルスクリプト全文です(説明のため行番号を付加してあります)。
1 #!/bin/bash 2 3 LOGFILE_NAME="/var/log/auth.log" 4 TMP_LOGFILE_NAME="/tmp/tmp_auth.log" 5 TMP_LOGFILE_BACKUP_NAME="/tmp/tmp_auth.log.bak" 6 TMP_LOGIN_LOGFILE_NAME="/tmp/tmp_login.log" 7 ACCESS_TOKEN="LINE Notifyアクセストークン" 8 9 notify_message(){ 10 message="$1($2)から$3ユーザーでログインがありました($4)" 11 curl -s -X POST -H "Authorization: Bearer $ACCESS_TOKEN" -F "message=$message" https://notify-api.line.me/api/notify > /dev/null 12 } 13 14 if [ -f $LOGFILE_NAME ]; then 15 cp $LOGFILE_NAME $TMP_LOGFILE_NAME 16 17 if [ ! -e $TMP_LOGFILE_BACKUP_NAME ]; then 18 cp $LOGFILE_NAME $TMP_LOGFILE_BACKUP_NAME 19 fi 20 21 # 新しいファイル(TMP_LOGFILE_NAME)の方にあるログインの行だけを抽出 22 diff --old-line-format='' --unchanged-line-format='' --new-line-format='%L' $TMP_LOGFILE_BACKUP_NAME $TMP_LOGFILE_NAME | grep "Accepted" > $TMP_LOGIN_LOGFILE_NAME 23 24 cat $TMP_LOGIN_LOGFILE_NAME | while read line 25 do 26 ip=$(echo $line | cut -f 11 -d " ") 27 country=$(whois $ip | grep "country:" | sort | uniq | sed -e 's/ */ /g' | cut -f 2 -d " ") 28 country=$(echo $country | sed -e 's/ /,/g') 29 user=$(echo $line | cut -f 9 -d " ") 30 month=$(echo $line | cut -f 1 -d " ") 31 day=$(echo $line | cut -f 2 -d " ") 32 time=$(echo $line | cut -f 3 -d " ") 33 date=$month-$day,$time 34 35 notify_message $ip $country $user $date 36 done 37 cp $TMP_LOGFILE_NAME $TMP_LOGFILE_BACKUP_NAME 38 fi
ログイン通知シェルスクリプトの解説
1行目:シバンです。今回はbashで実行するのでこのように書きます。
3行目:認証ログのファイル名を絶対パスで変数に代入しています。
4行目:認証ログのファイルを/tmp
ディレクトリにコピーして保存したかったため、コピー先のファイル名の絶対パスを変数に代入しています。
5行目:通知していないログインメッセージのみ通知するため、一回前に実行されたときの認証ログと最新で実行されたときの認証ログの差分に必要となる一回前の認証ログのコピーが保存されるファイルの絶対パスを変数に代入しています。
6行目:通知の対象となるログインメッセージの行が抽出されるファイルの絶対パスを変数に代入しています。
7行目:「LINE Notifyのアクセストークンを発行する」で発行したアクセストークンを書きます。各人で違うのでここに控えておいたアクセストークンを書いてください。
9〜12行目:LINEにメッセージを通知する関数です。
14行目:認証ログが存在したら以下に続くメインとなる処理を行うように条件分岐をしています。
15〜22行目:15行目で認証ログのコピーを/tmp
ディレクトリにとっています。
また17〜19行目で実行一回前の認証ログのバックアップが存在しなかったらつまり一度もこのシェルスクリプトが実行されていなかったら最新の認証ログのコピーをバックアップすることで最初にこのシェルスクリプトが実行されたときに過去のものが通知されるのを防いでいます。
そして22行目で最新のログと一回前のログの差分を求めて最新のログにある行だけを抽出し、その中からさらにAccepted
が含まれる行を抽出して、ファイルに保存しています。
24〜38行目:22行目で保存されたファイルから行単位でログを読み取り、IPアドレス、国などを求めてLINEにログイン通知する関数を呼び出しています。
最後に37行目で最新のログを一回前のログと同じにすることで差分をなくしています。
ここまででログイン通知シェルスクリプトが作れたので一度サーバー上で動作確認してみます。
サーバー上で動作確認
scpコマンドでサーバーにログイン通知シェルスクリプトをコピーして、ファイルを自作シェルスクリプト置き場である/usr/local/bin
ディレクトリに移動します。
SSHログイン後、試しに実行してみると
$ ./ssh_login_notify.sh cp: cannot open '/var/log/auth.log' for reading: Permission denied diff: /tmp/tmp_auth.log.bak: Permission denied diff: /tmp/tmp_auth.log: Permission denied cp: cannot open '/tmp/tmp_auth.log' for reading: Permission denied
「権限がないよ」と怒られているようなので権限を確認します。
$ ls -l /tmp/tmp_auth.log /tmp/tmp_auth.log.bak -rw-r----- 1 root root 814962 Nov 23 17:15 /tmp/tmp_auth.log -rw-r----- 1 root root 814962 Nov 23 17:15 /tmp/tmp_auth.log.bak
所有者rootのみ読み書きが可能になっているようです。
コピー元の認証ログも念のため確認すると
$ ls -l /var/log/auth.log -rw-r----- 1 root adm 816062 Nov 23 17:19 /var/log/auth.log
と同じパーミッションが設定されています。
ということでsu
コマンドでroot権限になってからログイン通知シェルスクリプトを実行すると
エラーメッセージは出なくなりました。
今回作成したログイン通知シェルスクリプトの初回実行は最新と一つ前の認証ログの差分がない仕様なので別コンソールでもう一度sshログイン後、ログイン通知シェルスクリプトを再度実行するとちゃんとLINEに通知メッセージが届きました。(本来はバグにより通知メッセージが大量に送られるなどのトラブルを避けるため、通知処理をechoコマンドに置き換えるなど十分にテストしてから通知メッセージを送った方が良いかと思います。今回は記事の都合上、割愛しました)
初学者がつまづきやすいポイント
- シェルスクリプトからファイルにアクセスする際はそのファイルの権限と実行ユーザーを合わせる必要がある(ファイルの読み書きがしたいときに rootにしかその権限が与えられていないならrootユーザーで実行する)
- curl、diffなどコマンドがインストールされていないとスクリプトが正常に動かないのであらかじめスクリプトで必要となるものはインストールしておく
とりあえず動作確認はできたので最後にそれを定期実行するようにしてみます。
サーバー上での定期実行
Linuxでスクリプトの定期実行をするにはcrontab
コマンドを使います。
読み方はクローンタブです。
以下、簡単な説明です。
crontab
- cronjobを管理するコマンド
cronjob
- crondに実行して欲しいコマンドとその実行日時のセット
- crontabコマンドを実行したときのユーザー権限で動作する(rootで実行すればroot権限で動作する)
crond
- 定期実行をするデーモン(常駐プログラム)
使い方
cronjob
を動作させたいユーザーに変更します。今回はroot権限で動作させたいのでrootユーザーに変更します。
$ su
rootユーザーになったら以下のコマンドを打って設定を編集します。
# crontab -e
ちなみに設定済みのcronjob
の一覧を表示させたい場合は以下のコマンドを打ってください。
# crontab -l
既定のエディタが設定されている場合、そのエディタで開くので以下のように設定を編集します。
* * * * * /usr/local/bin/ssh_login_notify.sh
分 時 日 月 曜日 コマンド
の順で指定します。*
は任意を表しており、上記設定だと毎分 毎時 毎日 毎月 各曜日
つまり1分おき
にログイン通知シェルスクリプトが実行されます。
あと今回はroot権限でcronjob
を動作させましたが、特権が必要な処理以外は安全のためにroot権限のない一般ユーザーの
cronjob
にしておくのが定石らしいです。
また今回はログインの通知のみでしたが、抽出対象の文字列を変えれば不正アクセスの通知にも対応可能です。
設定を保存し、SSHログインを行うと見事LINEにログイン通知が来ました。結果はご自身の目でご確認ください。
お疲れ様でした。