Linuxセットアップガイド

Linuxセットアップガイド

更新方法

ターミナル
sudo apt update                     # パッケージリスト更新
sudo apt upgrade -y                 # 既存パッケージの更新
sudo apt full-upgrade -y            # カーネル更新や依存関係の変更を伴うアップグレード
sudo apt dist-upgrade -y            # full-upgrade の旧称
sudo apt autoremove -y              # 不要パッケージ削除
sudo apt autoremove --purge -y      # 不要パッケージを設定ファイルごと削除
sudo apt purge [パッケージ名] -y     # 指定したパッケージを完全削除
sudo rm -rf /var/lib/apt/lists/*    # ハッシュサムが適合しない場合
sudo unattended-upgrade             # セキュリティアップデート
sudo apt install gpg-agent          # gpg: failed to start agent '/usr/bin/gpg-agent': No such file or directory
sudo do-release-upgrade             # OSのアップグレード

状態の確認

ターミナル
lsb_release -a                                  # OSの確認
uname -r                                        # カーネルバージョンの確認
df -h                                           # ディスク容量の確認
lsblk                                           # ディスク・パーティション構成を一覧表示
free -h                                         # メモリ使用量の確認
swapon --show                                   # スワップの使用状況
ip link show                                    # インターフェースの状態確認
ip r                                            # ルーティングテーブル
ip -s link                                      # パケット統計(RX/TX bytes packets errors dropped carrier collsns)
ss -s                                           # ソケット統計
ss -tupn    | grep [ポート番号]                  # 自端末の指定ポートの状態を調べる
ss -tulpn   | grep [ポート番号]                  # 自端末の指定ポートがLISTENしているか調べる
tc -s qdisc                                     # キュー制御 (遅延・ドロップ)

# CPU名取得
awk -F: '/model name/ {print $2; exit}' /proc/cpuinfo | sed 's/^ //'

# コア0のCPU周波数取得
awk '{print $1/1000000}' /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
echo "scale=2; $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq) / 1000000" | bc -l

# CPU平均周波 [GHz]
awk '{sum+=$1; n++} END {if(n>0) print sum/n/1000000}' /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq

# Windows用
Get-CimInstance Win32_Processor | Select-Object -ExpandProperty CurrentClockSpeed

# ※ hwmon0にデータがある場合
# CPUのコア温度一覧取得
awk '{printf "%.2f\n", $1/1000}' /sys/class/hwmon/hwmon0/temp*_input

# ※ hwmon0にデータがある場合
# Core1の温度を取得
awk '{printf "%.2f\n", $1/1000}' /sys/class/hwmon/hwmon0/temp1_input

# ※ hwmon0にデータがある場合
/sys/class/hwmon/hwmon0
# device      temp1_crit_alarm  temp2_crit_alarm  temp3_crit_alarm  temp4_crit_alarm  temp5_crit_alarm
# name        temp1_input       temp2_input       temp3_input       temp4_input       temp5_input
# power       temp1_label       temp2_label       temp3_label       temp4_label       temp5_label
# subsystem   temp1_max         temp2_max         temp3_max         temp4_max         temp5_max
# temp1_crit  temp2_crit        temp3_crit        temp4_crit        temp5_crit        uevent


/sys/class/net/[インターフェース名]/statistics    # [インターフェース名]の統計情報が入ったフォルダ
# collisions     rx_crc_errors   rx_frame_errors   rx_over_errors     tx_carrier_errors  tx_fifo_errors
# multicast      rx_dropped      rx_length_errors  rx_packets         tx_compressed      tx_heartbeat_errors
# rx_bytes       rx_errors       rx_missed_errors  tx_aborted_errors  tx_dropped         tx_packets
# rx_compressed  rx_fifo_errors  rx_nohandler      tx_bytes           tx_errors          tx_window_errors

iw dev                                          # Wi-Fiインターフェース一覧
iw dev [Wi-Fiインターフェース名] link             # 接続状態(RSSI、ビットレート)
iw dev [Wi-Fiインターフェース名] station dump     # 接続中クライアントの詳細(MCS、RSSI、リトライ率)
iw [Wi-Fiインターフェース名] survey dump          # チャネルの混雑状況(busy time / noise)
iw reg get                                      # 電波地域確認

ethtool -S [ethインターフェース名]                # NICの詳細統計
cat /proc/cpuinfo                               # CPUの情報
cat /proc/loadavg                               # CPU負荷
cat /proc/net/dev                               # 各ネットワークインターフェースの統計
cat /proc/net/wireless                          # Wi-Fiの品質情報
cat /proc/net/arp                               # ARPテーブル
cat /proc/net/softnet_stat                      # カーネルのパケット処理統計
cat /proc/net/nf_conntrack                      # コネクション数

仮想フォルダ(RAM上に構築されたフォルダ等)
/proc       # カーネル内部状態をファイルとして見せる
/sys        # デバイス・カーネルオブジェクトの設定・状態
/dev        # デバイスファイル
/run        # 早期ブート用の揮発性ランタイムデータ
/tmp        # 一時ファイル

ホスト名の変更

現在のホスト名を確認

ターミナル
hostnamectl status

新しいホスト名を設定する

ターミナル
sudo hostnamectl set-hostname [新しいホスト名]
sudo nano /etc/hosts

エディタ
127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

127.0.1.1       [新しいホスト名]

ターミナル
sudo reboot # 再起動して適用

環境変数の設定

ターミナル
sudo nano /etc/profile

エディタ(追記)
export [環境変数名]="[値]"

ターミナル
sudo reboot # 環境変数を適用させる

ビット数確認

ターミナル
getconf LONG_BIT

Bash

Aliasの設定

ターミナル
nano ~/.bashrc

エディタ
alias addcmd="nano ~/.bashrc"
alias linux_update="sudo apt update&&sudo apt upgrade -y&&sudo apt autoremove -y"

alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'

Python

pip --break-system-packages問題

ターミナル
nano ~/.config/pip/pip.conf
nano ~/.pip/pip.conf    # Legacy

エディタ
[global]
break-system-packages = true

SSH

鍵作成 (エドワード曲線)

Windows ターミナル
ssh-keygen -t ed25519 -C '""'

公開鍵認証

Windows ターミナル
cd %userprofile%/.ssh
scp id_ed25519.pub [リモート接続するユーザ名]@[リモート接続する端末のIPアドレス]:~/

ターミナル
cd ~/
mkdir -p .ssh
cat id_ed25519.pub >> .ssh/authorized_keys
chmod 700 .ssh
cd .ssh
chmod 600 authorized_keys

公開鍵認証 (コマンドを少なくした方法)

Windows コマンドプロンプト
type %userprofile%\.ssh\id_ed25519.pub | ssh [リモート接続するユーザ名]@[リモート接続する端末のIPアドレス] "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"

日本語入力

mozcのインストール

ターミナル
sudo apt -y install fcitx5 fcitx5-mozc

フォントのインストール

ターミナル
sudo apt -y install fonts-noto fonts-noto-cjk fonts-noto-cjk-extra fonts-noto-color-emoji

時刻設定

ターミナル
sudo nano /etc/systemd/timesyncd.conf

エディタ
NTP=ntp.nict.jp

ターミナル
sudo systemctl restart systemd-timesyncd.service
date # 確認

修復コマンド

Windows
sfc /scannow
dism /online /cleanup-image /restorehealth

Linux
sudo debsums -s
sudo touch /forcefsck

ファイルシステム修復

1. マウント状態の確認

ターミナル
lsblk -f

[対象ストレージ]
├─[FAT32形式のパーティション]       vfat   FAT32 bootfs     AAE0-77E1                               391M    23% [FAT32形式パーティションのマウントパス]
└─[ext4形式のパーティション]        ext4   1.0   rootfs     ca2be9ef-61a4-4400-a5a1-dc17d7ea790d  101.4G     5% [ext4形式パーティションのマウントパス]

##### [対象ストレージ] * sda * sdb ... ##### [パーティション] * sda1 * sda2 * sdb1 * sdb2 ...
2. アンマウント

ターミナル
sudo umount -l [FAT32形式パーティションのマウントパス]
sudo umount -l [ext4形式パーティションのマウントパス]

※ lazy unmount:論理的に切り離したことにする

3. fsck でファイルシステム修復

ターミナル
sudo fsck.vfat -a /dev/[FAT32形式のパーティション]          # boot パーティション修復 (FAT32)
sudo fsck -fy /dev/[ext4形式のパーティション]               # root パーティションを修復 (ext4)
                                                          # -f : 強制チェック  
                                                          # -y : 全てyes

壊れたパッケージの修復

1. 再マウントフォルダを作成

ターミナル
sudo mkdir -p /Programs/mnt

2. システム(ルート)パーティションをマウント

ターミナル
sudo mount /dev/[ext4形式のパーティション] /Programs/mnt

2. EFIパーティションをマウント(UEFI起動の場合)

ターミナル
sudo mount /dev/[FAT32形式のパーティション] /Programs/mnt/boot/efi

3. 修理に必要な特殊ディレクトリを紐付ける(バインドマウント)

ターミナル
for i in /dev /dev/pts /proc /sys /run; do \
    sudo mount -B $i /Programs/mnt$i; \
done

4. ネットワークの解決

ターミナル
sudo cp /Programs/mnt/etc/resolv.conf /Programs/mnt/etc/resolv.conf.bak
sudo cp /etc/resolv.conf /Programs/mnt/etc/resolv.conf

5. chroot (正常なLinuxのカーネルを使い、破損Linuxを修復する)

ターミナル
sudo chroot /Programs/mnt

6. ブートローダー(GRUB)の修復・再インストール

ターミナル
apt update
grub-install /dev/[対象ストレージ]                               # パーティション指定はしないこと
update-grub                                                     # 設定ファイルを更新
# apt install --reinstall linux-image-generic                   # カーネル自体が怪しい場合は再インストール (インターネット接続が必要)
# update-initramfs -u -k all                                    # カーネルの再構成を強制的に行う

7. 設定の適用

ターミナル
exit
cd /
sudo umount -R /Programs/mnt

8. ブートローダー(GRUB)の修復・再インストール

ターミナル
grub-install /dev/[対象ストレージ]      # パーティション指定はしないこと

ログクリア

ターミナル
sudo logrotate -f /etc/logrotate.conf