20210329のLinuxに関する記事は5件です。

Fedora 34 Beta

Fedora 34 Beta がリリースされました。

DistroWatch記事 ←クリック(新窓)

インストールしましたが、お勧めはしません。
ちょっと問題ありそうです。
*Wifi が不安定(実はこれは32辺りから?)
*アップデートが頻繁で多いようです。
 Beta 発表から2日で1GBを超えるReplacement
 今はもっと多いかもしれません?
*デスクトップ環境によっては重くて動かなくなります。
 テストに用いたのはFMV i5 memory4GB
 特にPlasma KDE は何度も止まります。

お馴染みのインストール画面
P3260021-.jpg
お馴染みの? Beta 警告文字
P3260022-.jpg
発表2日後に800MB超えるアプデ 多すぎるReplacement
P3260023-.jpg

Fedora 34 Stable の発表はいつになるか?
個人的には、もうちょっと待ったほうが良いと思います。

ではでは!

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

cron による Minecraft サーバのプロセス自動再起動設定

概要

  • systemd サービスユニットファイルを作成して、Minecraft サーバをサービス化
  • cron で定期的に systemctl コマンドを発行するシェルスクリプトを実行し、サービスの状態をチェック
  • サービスがダウンしていた場合、再起動

Minecraft サーバの設定方法

Linux(CentOS7)で、Minecraftマルチサーバを立ち上げる手順

環境

  • CentOS 7

シェルスクリプト作成

作業ディレクトリに移動し、シェルスクリプトを編集する。

# cd /var/minecraft
# vi auto_restart.sh

シェルスクリプトの内容は以下の通り。

auto_restart.sh
#!/bin/bash

systemctl is-active minecraft_server.service >/dev/null 2>&1

if [ $? != 0 ]; then
    systemctl start minecraft_server.service
fi

exit

systemctl is-active は、サービス実行中は 0 を、そうでない場合は 0 以外の値を返す。詳しくは man systemctl で参照できる。

cron 設定

以下のコマンドを実行する。

# echo "*/10 * * * * root /var/minecraft/auto_restart.sh" > /etc/cron.d/minecraft_auto_restart

上記は、毎時 0 分, 10 分, 20 分, 30 分, 40 分, 50 分に auto_restart.sh に実行する設定なので、必要に応じて実行間隔を調整する。

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

更新ファイルのリスト取得

基本的なことだと思いますが、苦労したので、備忘録として書きます。
間違っているものなどありましたらご指摘いただけますと幸いです。

ディレクトリ配下の全ファイルの中から、今日更新されたもの、もしくは、今さっき更新されたものの一覧を取得します。

今日の更新ファイル一覧

find ディレクトリ名 -type f -mtime 0 -ls
ls -lrt ディレクトリ名 `find -type f -mtime 0` 

10分以内の更新ファイル一覧

find ディレクトリ名 -type f -mmin -10 -ls
find ディレクトリ名 -type f -mmin -10 | xargs -r ls -lrt 

時間を変更するときは、-10のところをいじってください。

-mminの引数 意味
-100  現在から100分以内
+10  10分より前(10分以内の逆)

注意点

ディレクトリ名を省略した場合、カレントディレクトリ以下の検索になります。
一番上の階層でこのコマンドを入力すると、このサーバ、PCで更新されたすべてのファイルリストを取得できます。

-lrtや、-lsは個人的に見やすくするために使用しているだけなので、適宜変更できます。

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

対象OSのポート(開閉状態)を外部からnmapで確認する方法

環境

■ポートの開閉を確認したいOS
Amazon Linux2
■ポートの開閉を確認するためのOS
Ubuntu(ver 16.04.4)

初めに

Amzon linux2にiptablesを用いてポートにフィルタリングをかけます。
その後、他OS(Ubuntu)のNmapを利用してポートのフィルタリングを確認する方法を備忘録として記載します。
今回は、25、80、111番のポートにフィルタリングをかけます。

参照サイト
https://knowledge.sakura.ad.jp/4048/
https://qiita.com/Tocyuki/items/6d90a1ec4dd8e991a1ce

iptables、Nmapの導入

まず初めにAmazon Linux2にiptablesを導入します。
Amazon Linux2でiptablesを利用するにはiptables-servicesが必要ですのでyumを使ってインストールします。

yum -y install iptables-services

そうすると、/etc/sysconfigの配下に2つのファイルが生成されます。

/etc/sysconfig
$ ls | grep iptables
iptables
iptables-config

次に、Ubuntu(ポートの開閉を確認するためのOS)にNmapを導入します。

sudo apt-get install -y nmap

何も設定していない状態のAmazon Linux2のポート番号を確認

$ nmap localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2021-03-29 12:47 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000030s latency).
Not shown: 995 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
80/tcp  open  http
111/tcp open  rpcbind
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds

ポート番号22、25、80、111、443番がopenになっていることを確認。
25、80、111番のポートにフィルターをかけてみます。

ポート番号にフィルターをかける

viで先ほど生成されたiptablesファイルを編集します。

/etc/sysconfig
$ vi iptables

~略~
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

デフォルトでは上記のような構造になっています。
iptablesには4つのテーブルが存在し、今回はfilterテーブルに記載します。

*filterとCOMMITの間に設定を記載します。

それでは25、80、111番のポートにフィルターをかける設定をしていきます。

/etc/sysconfig
$ vi iptables

~略~

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j DROP   ・・・この行を追記
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j DROP   ・・・この行を追記
-A INPUT -p tcp -m state --state NEW -m tcp --dport 111 -j DROP   ・・・この行を追記

COMMIT

一番右に記載してあるDROPでポート番号にフィルターをかけて、パケットを通さない設定です。
対してACCEPTは通信可能な設定になっています。

viを保存してiptablesを再起動します。

/sbin/service iptables restart

UbuntuのNmapを利用して確認してみます。

$ nmap -p 80,22,111,25,443 -Pn Linux2の使用しているIPアドレス
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-03-29 16:02 JST
Nmap scan report for linux-practice.example.com (Linux2の使用しているIPアドレス)
Host is up (0.0013s latency).

PORT    STATE    SERVICE
22/tcp  open     ssh
25/tcp  filtered smtp
80/tcp  filtered http
111/tcp filtered rpcbind
443/tcp open     https

Nmap done: 1 IP address (1 host up) scanned in 1.25 seconds

これで25、80、111番にフィルターがかかっていることを確認できました。

以上になります。
ありがとうございました。

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

【初学者殺し】fishシェルでPATHを通してみる

はじめに

プログラミングを始めてから1年半、シェルはずっとzshを使っていたのですが、知り合いにオススメされてfishデビューしました。

fishってどんなヤツなん?使ったらどんないいことあるん?ってのは、他の記事にたくさんまとまっているので、そちらを参考にしてください!

初学者殺しの「PATHを通す」

初学者殺しでおなじみ「PATHを通す」について、fishでもbashzshと同じように~/.config/fish/config.fishに設定を書くことで実現できるのですが、fishにはfish_user_pathsというユニバーサル変数(全てのセッションで共通の変数)を使うことでPATHを通すことができるようなので、そちらの方法でやってみます。

fish_user_pathsって何?なぜ使う?

fish shellのPATH設定 - Qiita に詳しく書かれておりますので、気になる方はご確認くださいませ。
(この後出てくるsetコマンドのオプションについてはfishパス関連設定した時の備忘録でまとめられています。)

PATHを設定してみる

ユニバーサル変数 fish_user_paths に通したいPATHをセットし、PATHを通します。(同じこと2回言ってる...?)

PATH と fish_user_pathsの中身を見てみる

まずは、中身を見てみます!

PATHの中身を表示
$ echo $PATH  //PATHの頭に"$"をつけることで、中身を表示することができる。他の環境変数も同様。

/usr/local/bin /usr/bin /bin /usr/sbin /sbin /Library/Apple/usr/bin
fish_user_pathsの中身を表示
$ echo $fish_user_paths //PATHと同様に、fish_user_pathsの頭に"$"をつけることで、中身を表示することができる。

(何も出力されない)

たぶん初期設定ママだとこうなると思います。(この通りにならなくても気にせず先へ進みましょう!)

fish_user_paths に追加してみる

今回は、
zsh時代に使っていたanyenvコマンドがfishシェルに変えたら使えなくなった(= PATHが通っていない)」
という状況を想定して考えてみます。

たとえば、PATHを通すために.zshrcexport PATH=$HOME/.anyenv/bin:$PATH と書いていたなら、$HOME/.anyenv/binが追加対象になります。

追加するときは、setコマンドに、-Uのオプションをつけてあげます。(-Uのオプションをつけることで、)

fish_user_pathsに追加
$ set -U fish_user_paths $HOME/.anyenv/bin $fish_user_paths
$ echo $fish_user_paths

/Users/(ユーザー名)/.anyenv/bin  ←(ユーザー名) にはみなさんのPCのユーザー名が入ります

fish_user_paths/Users/(ユーザー名)/.anyenv/binが追加されたかと思います。

ちなみに、

HOMEの内容を表示
$ echo $HOME

/Users/(ユーザー名)

なので、さっきのやつは

fish_user_pathsに追加
$ set -U fish_user_paths /Users/(ユーザー名)/.anyenv/bin $fish_user_paths
$ echo $fish_user_paths

/Users/(ユーザー名)/.anyenv/bin

でも同じ結果になります。

では、PATHの中身を確認してみましょう。

PATHの中身を表示
$ echo $PATH

/Users/(ユーザー名)/.anyenv/bin /usr/local/bin /usr/bin /bin /usr/sbin /sbin /Library/Apple/usr/bin

初期設定で持っていたものに、今回fish_user_pathsに追加したものが追加されています。

これで、anyenvコマンドがこれまで通り使えるようになりました。

つまり、PATHにもともと入っていた

/usr/local/bin /usr/bin /bin /usr/sbin /sbin /Library/Apple/usr/bin

に、fish_user_pathsの内容を加えたものがPATHとなります。

豆知識

| tr ' ' '\n' | nlをつけて出力すると、イイ感じに見やすくなります。

スペースで改行し、ナンバリングしてfish_user_pathsの中身を表示
$ echo $fish_user_paths  | tr  ' ' '\n' | nl

1 /Users/(ユーザー名)/.anyenv/bin
スペースで改行し、ナンバリングしてPATHの中身を表示
$ echo $PATH  | tr  ' ' '\n' | nl

1 /Users/(ユーザー名)/.anyenv/bin
2 /usr/local/bin
3 /usr/bin
4 /bin
5 /usr/sbin
6 /sbin
7 /Library/Apple/usr/bin

fish_user_pathsから任意のパスを削除する

fish_user_pathsは配列なので、特定のパスを削除する場合はインデックスを指定して削除する(インデックスは0ではなく1から始まるので注意

まずは中身を確認して

インデックスを指定して、特定のfish_user_pathsを出力
$ echo $fish_user_paths[1]

/Users/(ユーザー名)/.anyenv/bin

/Users/(ユーザー名)/.anyenv/binを消してみます。消す時は、setコマンドのオプションに-eをつけます。

インデックスを指定して、特定のfish_user_pathsを消す
$ set -e fish_user_paths[1]
$ echo $fish_user_paths

(何も出力されない)

はい、消えました。

ここでのポイントは、set -e fish_user_paths[1]で、fish_user_paths[1]の頭に$がついていないことです。$をつけるとエラーになります。

追加するときも、第一引数の環境変数(fish_user_paths)には$がついていませんね。

$ set -U fish_user_paths $HOME/.anyenv/bin $fish_user_paths

$はあくまで、内容を表示するときにつけます。

fish_user_pathsの中身を全部削除する

ちなみに、set -e fish_user_paths[1]では「fish_user_path配列の1番目の要素を消す」でしたが、set -e fish_user_pathsとインデックスを指定しない場合は全部一気に消えます。

インデックスを指定せず、fish_user_pathsの中身を全部消す
$ echo $fish_user_paths

1 /Users/(ユーザー名)/.anyenv/envs/nodenv/shims
2 /Users/(ユーザー名)/.anyenv/bin
3 /Users/(ユーザー名)/.rbenv/shims

(たとえば、fish_user_pathsに3つ入ってる状態)

$ set -e fish_user_paths
$ echo $fish_user_paths

(何も出力されない)

まとめ

これまで「PATHを通す」時は、記事を見て言われるがままにexport PATH=$HOME/.anyenv/bin:$PATHみたく設定をコピペし、「何だか分からないけど動くようになった...」というレベルだった自分ですが、今回のやり方を通じて「環境変数PATHに値をセットすることでPATHを通す」ということがようやく少し理解できました。

「シェルに詳しいわけではないけれどfishを使い始めた(これから使いたい)!」という人のお役に立てたら幸いです。

参考

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