Linuxのtips


On this page

Linuxのディストリビューション

LinuxはOSの一つで様々な種類がある。 大まかに分けると3つに分かれる。

  • Debian系
    • Debian: debian系の大本、動作が安定していてサーバーで使われたりする。
    • Ubuntu: 世の中でよく使われるOS。使ったことはないが使いやすいらしい。
    • Linux mint: 比較的軽量OSで最近人気。デスクトップ環境で使いやすいらしい。
    • Raspberry pi OS (旧Rasbian): Raspberry pi用のOS基本Debianで軽量なOS。
  • Red hat enterprise Linux系
    • Red hat enterprise linux(RHEL): 16台までなら無料のOS (少し前なら有料だった)。企業が開発しているため、安定動作が保証されている。
    • CentOS Stream: 少し前まではRHELの無料の安定版クローンだったがStreamがついてから、 無料だがRHELの検証用OSとなった(アップデートがRHELより先に行われて検証するため)。
    • Fedora: RHELの実験要素が多い。ここで良かったものがCentOS Streamに採用されて、 問題がなければ本家のRHELに採用されるイメージ。
    • Alma linux: CentOSが安定版クローンでなくなったため誕生した後継OS。
    • Rocky linux: CentOSが安定版クローンでなくなったため誕生した後継OS。CentOSの創設者が立ち上げたらしい。
  • Slackware系
    • Slackware: かなり歴史のあるLinuxでlinuxの素に近いらしい。
    • Puppy linux: 軽量OSでUSB上でOSを動かすこともできるらしい。
    • Plamo linux: 和製OSでカスタマイズが簡単とのこと。
    • openSUSE: 元々はSlackwareがベースだったらしいが、 現在は違うとのこと。パッケージマネージャーでCERNのROOTとGeant4が入れられるらしい。
  • その他
    • Arch linux: 軽量でシンプルでカスタマイズ性の高いOS。Gentooほどではないがインストールの際に色々自分で設定する必要がある。
    • Gentoo linux: カスタマイズ性が高いOS。 OSのインストールも自分で色々設定しながらインストール作業をすることになる。Gentooインストールバトルなるものがあるらしい。

どれを使うかは個人の好みによるので、まずは仮想マシンVMware等で試してみると良いだろう(macならvmware fusionなど)。

RHELで気をつけること

RHEL (Red Hat Enterprise Linux) は個人用途なら16台まで無料で利用できる。 私の環境では何故かboot isoではインストールできず、USBにfullサイズ入れたものでインストールできた。
更に以下のコマンドを実行すると、Desktopとパッケージ管理(dnf)が消し飛ぶので注意。

$ sudo dnf remove python3

Permissionについて

Linuxに限った話ではないが、それぞれのファイルやディレクトリには3種類の権限がある。

  • read (r, 4) : ファイルの中身を見る権限
  • write (w, 2) : ファイルを書き換える権限
  • execute (x, 1) : ファイルを実行する権限
Linuxではchmodというコマンドを使ってファイルの権限を変えられる。 このときに、上の()内の記号、数字で権限を付加・削除・設定できる。数字の場合は足し算で権限を複数与えられる (例えば、読み書き可能 : 4+2 = 6)。 更に権限を与える対象にも3種類あり、ファイルの持ち主 (オーナー)、ファイルの所属しているグループ、その他に対してそれぞれに設定できる。
$ chmod +x <ファイル名> #全ユーザーが実行可能
$ chmod -w <ファイル名> #全ユーザー書き込み権剥奪
$ chmod 761 <ファイル名> #オーナーは読み書き実行可能、グループユーザーは読み書きのみ、その他ユーザーは実行のみ

ファイル/ディレクトリ操作

Linuxで、コマンドだけで色々したい(sshで繋いだときとか)場合、これを知らないとコマンドでの操作ができない。

  • cd <ディレクトリのパス> : 現在自分のいる場所を指定したパスに移動(Windowsでいうところのフォルダダブルクリック)
  • ls <ディレクトリのパス> : 指定したディレクトリの中身をリストで表示(指定しなければ現在の場所にあるものを表示)
  • mkdir <ディレクトリのパス> : 現在の場所にディレクトリを作成(Windowsでいうところのフォルダ新規作成)
  • rm <ファイル・ディレクトリのパス> : 指定したファイル/ディレクトリを削除
  • cp <コピー元のファイルパス> <コピー先のパス> : ファイルのコピー
  • mv <移動元のパス> <移動先のパス> : ファイル/ディレクトリの移動(Windowsでいうところの切り取り貼り付け)

これだけ見ると普段のGUI操作のほうが簡単に思うかもしれないが、これらのコマンドにはオプションがあったり、ワイルドカードでファイルを指定できたりするので慣れると実は便利。

ワイルドカードについて

様々なワイルドカードの指定ができる。

  • * : 0文字以上なら何でもok (*.jpgでjpg拡張子のファイル全部)
  • ? : 一文字分が任意でok
  • [] : []内の文字ならok ([abc]: a,b,cのうちどれか, [0-9]: 0~9までの数字)
  • {,} : {}内の文字列ならok

以下に例を示す。

$ ls
test.txt test_01.txt test_02.txt test_03.txt test_a.txt test_b.txt

こういうファイルが今の場所に存在するとして操作を行ってみる。 cpを使って操作しているが実際はどのコマンドでも使える。cpのコピー先のディレクトリを用意する。

$ mkdir test_num test_txt test_ab
$ ls
test.txt test_01.txt test_02.txt test_03.txt test_a.txt test_ab test_b.txt test_num test_txt

ディレクトリができていることを確認後、まずは.txtの拡張子がついたファイルをtest_txtにコピー

$ cp *.txt test_txt
$ ls test_txt
test.txt test_01.txt test_02.txt test_03.txt test_a.txt test_b.txt

用意したファイルは全て.txtファイルなのでlsで確認すると全てコピーされている。 次にtest_?.txtのコピーをしてみる。

$ cp test_?.txt test_ab
$ ls test_ab
test_a.txt test_b.txt

lsで確認するとtest_a.txtとtest_b.txtがコピーされている。 更にtest_0[1-3].txtのコピーをしてみる。

$ cp test_0[1-3].txt test_num
$ ls test_num
test_01.txt test_02.txt test_03.txt

lsで確認すると連番でのコピーができている。

オプション

それぞれのコマンドのオプションを説明する。

  • ls
    • -a : 隠しファイル/ディレクトリも表示
    • -l : Permission、作成日時等、詳細情報を表示
    • -t : 作成時間順に並べる
    • -r : 順序を逆順にする
  • mkdir
    • -p : 子ディレクトリもまとめて作成
  • rm
    • -f : 削除するかどうかを聞かれないようにする
    • -r : ディレクトリごと削除
  • cp
    • -r : ディレクトリごとコピー

ファイヤーウォールの設定

インストール方法

Debian, Rasbianの場合

$ sudo apt install -y ufw

RHELの場合

$ sudo dnf install -f firewalld

ファイアウォールの許可/拒否設定

Debian, Rasbianの場合

  • allowで許可、denyで不許可
  • default denyでまずは全てのポートを閉じてから、個々に許可するPortを設定する。
  • Port番号の後ろには/tcp, /udpをつける
  • サービス名には、SSH, VNC, http, https, mariadb等が使用可能
$ sudo ufw default deny
$ sudo ufw [allow or deny] [<Port番号>/[tcp or udp] or <サービス名>]

RHELの場合

  • --add-portで許可ポート追加
  • --remove-portで削除
  • --add-serviceでサービス追加
  • --remove-serviceで削除
  • --permanentで恒久的許可
  • --zoneでゾーン指定
$ sudo firewall-cmd [--add-port or --remove-port or --add-service or --remove-service]=[<Port番号>/[tcp or udp] or <サービス名>] (--permanent) (--zone=[public or private etc])

ファイアウォールの有効化

Debian, Rasbianの場合

$ sudo ufw enable

RHELの場合(有効化)

$ sudo systemctl enable firewalld

RHELの場合(起動)

$ sudo systemctl start firewalld

systemctlの使い方

systemctlはlinuxが起動/再起動した際にバックグラウンドで実行させたいコマンド等(daemon)を管理するコマンドである。

systemctlへの登録

serviceファイルの作成

  • 実行したいコマンド、実行ファイルを用意
  • <サービス名(任意)>.serviceというファイルを作成する
[Unit]
Description=<設定したサービス名>

[Service]
ExecStart=<実行コマンド or 実行ファイルのパス>
Restart=no #失敗した際に再起動するか
Type=simple

[Install]
WantedBy=default.target
  • シンボリックリンクを/etc/systemd/systemに貼る
$ sudo ln -is <serviceファイルのパス> /etc/systemd/system
$ sudo systemctl daemon-reload

systemctlの有効化/無効化

  • enableで有効化、disableで無効化
  • 無効化するとシンボリックリンクが外されるので、再度有効化する場合はシンボリックリンクを再度貼り直す
$ sudo systemctl [enable or disable] <設定したサービス名>

systemctlの開始、停止、状態表示等

  • startで開始、stopで停止
  • statusで現在の状態、logを表示
  • restartで現在起動しているサービスを再起動 (実行ファイル/コマンドを更新した場合)
$ sudo systemctl [start or stop or status or restart] <設定したサービス名>