Skip to the content.

linux

ubuntu

apt

# インストール可能なバージョンを確認
apt list -a パッケージ名
apt-cache policy パッケージ名
apt-cache showpkg パッケージ名

# バージョンを指定してインストール
apt-get install パッケージ名=バージョン

# mysqlclientのインストール
apt-get install -y libmysqlclient-dev

# インストール済パッケージ一覧
apt list
apt list --installed

# パッケージ詳細確認
apt show パッケージ名

# リポジトリの最新情報更新
apt update
# インストール済パッケージ更新
apt upgrade

# インストール済不要パッケージの削除
apt autoremove
# psコマンドやfreeコマンド
apt-get install procps

# キャッシュクリア
apt-get clean
# or
apt-get clean && rm -rf /var/lib/apt/lists/*

debian

# Update repository to use archive.debian.org and remove stretch-updates
sed -i 's|http://deb.debian.org/debian|http://archive.debian.org/debian|g' /etc/apt/sources.list                        # URLをarchive.debian.orgに変更
sed -i 's|http://security.debian.org/debian-security|http://archive.debian.org/debian-security|g' /etc/apt/sources.list # セキュリティリポジトリを変更
sed -i '/stretch-updates/d' /etc/apt/sources.list                                                                       # stretch-updatesを(このリポジトリを/etc/apt/sources.listに残したままだとAPTの更新時にエラーが発生し、システムのパッケージ管理がスムーズに行えなくなるため)削除
apt-get -o Acquire::Check-Valid-Until=false update                                                                      # APTのリポジトリの有効期限チェックを無効にしつつ、パッケージリストを更新する

redhat

yum

# パッケージのリストを表示する
yum list installed # インストール済パッケージ
yum list available # 利用可能なパッケージ
yum list updates   # アップデート可能なパッケージ
yum list extras    # 利用できないパッケージ

# パッケージのインストール
yum install パッケージ名
yum install パッケージ名-バージョン名(例 httpd-2.4.6-97 など)

# どのバージョンが存在するかを検索
yum search --showduplicates パッケージ名
yum search all --showduplicates パッケージ名

# パッケージ詳細を表示
yum info パッケージ名

# ファイル名からパッケージを検索する
yum provides パッケージ名

# rpmパッケージのURLを直接指定してインストール
yum install http://mirror.centos.orgXXXXX.noarch.rpm

# ローカルインストール
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
yum localinstall mysql80-community-release-el7-7.noarch.rpm(ファイルパス)

# リポジトリを確認
yum repolist

# 有効なリポジトリを確認
yum repoinfo

# リポジトリ関連コマンド yum-config-manager

# リポジトリを有効にする。enabled=1になる
yum-config-manager --enable epel

# リポジトリを無効にする。enabled=0になる
yum-config-manager --disable epel

# リポジトリを追加
yum-config-manager --add-repo=https://example.com/repo

# リポジトリの削除
yum-config-manager --remove epel

# リポジトリの優先度設定
yum-config-manager --save --setopt="epel.priority=10"

# リポジトリをアップデート
yum update epel

# 一時的にリポジトリを有効にして実行
yum --enablerepo=epel install ライブラリ名
yum --disablerepo=epel install,update,search ライブラリ名

# Google chrome & driver インストール
RUN yum install -y https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm --skip-broken

dnf

# パッケージ検索
dnf search パッケージ名
# インストール可能か確認
dnf list available パッケージ名(正規表現も使える)
# パッケージ詳細を表示
dnf info パッケージ名
# システムに設定されているすべてのリポジトリの一覧を有効か無効かも含めて表示
dnf repolist all

RPM

-Uはインストールの意味も含まれる。パッケージがなければインストール、パッケージが古ければアップデートという挙動になっている。
カーネル以外のパッケージは-Uでインストール、カーネル関連は-iでインストールすることが推奨

rpm -ivh パッケージ名.rpm
rpm -Uvh パッケージ名.rpm
rpm -evh パッケージ名.rpm

RPMパッケージにおける“アップグレードは慎重に”という方針に基づいて作成されるバックアップファイルのようなもので、.rpmsaveというファイルを使って復元用の情報を保存させるようにしている

amazon-linux

# amazon-linuxでのEPEL追加
amazon-linux-extras install -y epel

# amazon-linux-extras のリスト確認
amazon-linux-extras
amazon-linux-extras list # list省略可能

alpine

# パッケージインストール
apk add パッケージ名
apk add --no-cache パッケージ名 # インストール後にキャッシュクリア

# アンインストール
apk del パッケージ名

# パッケージ検索
apk search パッケージ名

# パッケージ詳細
apk info パッケージ名

# リポジトリアップデート
apk update

# パッケージアップグレード
apk upgrade

# パッケージリスト
apk list --installed # インストール済
apk list --available # 利用可能

代表的なファイルシステムに格納されているもの

/dev         # ハーディディスク、DVD-ROMなどのデバイスファイル
/media       # DVD-ROMなどのリムーバブルメディアのマウントポイント
/mnt         # 一時的にマウントするファイルシステムのマウントポイント
/etc         # システム、コマンドなどの設定ファイル
/root        # rootユーザーのホームディレクトリ
/home        # rootユーザーのホームディレクトリ
/bin         # 一般ユーザーが実行可能なシステムコマンド(ls,cp,rm,mkdir,catなど)
/sbin        # rootユーザーが実行可能なシステムコマンド(rebootなど)
/lib         # 共有ライブラリやモジュール、/bin、/sbin にあるコマンドが利用するライブラリ
/usr         # ユーザーが共有するコマンド
 └──bin      # 一般ユーザーとrootユーザーが使用する基本コマンド(git,curlなど)
 └──sbin     # rootユーザーが使用する基本コマンド
 └──lib      # プログラムの共有ライブラリ
 └──local    # 個人で作成したコマンドやサードパーティ独自に追加したコマンドなど
 └──src      # linuxのカーネルソースなどのソースコード
/opt         # 追加パッケージや追加プログラム(google-chromeやeclipseなど)
/proc        # カーネル内部の情報にアクセスする
/tmp         # 一時ファイルが配置され、すべてのユーザーが読み書き可能
/boot        # 軌道に必要なカーベルイメージ
/var         # ログファイルなどの頻繁に書き込まれるファイル群
 └──cache    # 一時的なキャッシュファイル
 └──lock     # アプリケーションを制御するためのロックファイル
 └──log      # ログファイル
 └──run      # システムの状態を示すファイル
 └──spool    # 印刷待ちのデータ、予約されたジョブ

log

/var/
  └──log/
      ├───messages
      ├───cron
      ├───maillog
      ├───secure

syslog

cat /etc/rsyslog

*.info;cron.none;         /var/log/messages

logrotate

ログローテートとは、ログファイルのサイズが大きくならないように、1日、または1週、または1か月といった期間でファイル名を変更し、設定次第では古いファイルを圧縮したり、もっと古いファイルを削除したりすることができる仕組みのこと。
実体は/usr/sbin/logrotateというコマンドとcron.dailyの組合せであり、crondによってlogrotateコマンドが毎日実行されているため、デーモンとして起動されているわけではない

一般的に/var/lib/logrotate/logrotate.statusに前回の実行記録が保存されている。
/etc/cron.daily/logrotateなどのファイルを見ると/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.confと記載があり、-sオプションで指定しているのが実行記録が保存されているファイルパス。
-sオプションで指定しなくても/var/lib/logrotate/logrotate.statusがデフォルトファイルパスになっている

/etc/
├── logrotate.conf # メイン設定ファイル
├── logrotate.d    # 各サービスごとの設定ファイル
│   ├── nginx
│   ├── syslog
│   ├── yum
/var/log/nginx/*log {
daily                    # ローテーション頻度 この例は毎日
weekly                   # ローテーション頻度 この例は毎週
monthly                  # ローテーション頻度 この例は毎月
rotate 30                # ログファイルを何世代分保持するか この例は30世代
missingok                # ログファイルが存在しない場合でもエラーを出さずに処理を続行
notifempty               # ログファイルが空でない場合にのみローテーション実行
compress                 # ローテーションされたログファイルを圧縮。通常はgzip形式で圧縮
delaycompress            # ローテーションされた直後のログファイルは圧縮せず、次のローテーション時に圧縮
sharedscripts            # 複数のログファイルがローテーションされる場合でもスクリプトは一度だけ実行
create 0644 nginx nginx  # 新しいログファイルを作成する際のパーミッションと所有者を指定。この例は0644、所有者とユーザーはnginxグループ
su root root             # ログローテーションの実行ユーザーとグループを設定 この例はroot
postrotate               # ログのローテーション後に実行するスクリプトの開始を示す
    nginx -s reopen      # 指示したいスクリプト内容
endscript                # postrotateスクリプトの終了
copytruncate             # ログファイルをコピーして新しいファイルに保存し、元のファイルを空にする
size 2M                  # ログファイルサイズが一定サイズ以上の場合にローテーションする この例は2MB
olddir /var/log/cron_old # ローテーションされたログファイルを保存するディレクトリを指定
# 実行ログの確認
less /var/lib/logrotate.status
# 全テスト -dはdebugでdry-run実行。-vは詳細表示
logrotate -dv /etc/logrotate.conf
# 個別テスト
logrotate -dv /etc/logrotate.d/nginx
# 手動強制実行。-fは--forceで
logrotate -fv /etc/logrotate.conf

RAID

マウント関連

マウント

mount /dev/sdb1(ストレージデバイス) /mnt(マウント先)
ls /mnt # 中身が見れる様になる
sample1.txt sample2.txt  
mount /dev/sdb1(ストレージデバイス) /mnt(マウント先)

アンマウント

umount /mnt(マウント先)
ls /mnt # 中身が見れない

fstab

cat /etc/fstab

UUID=XXXX / xfs defaults.noatime 1 1

# ↑ 計6つのステータスについてスペースかタブ区切りで記述される
①file-system(デバイス名でも記述可能) ②ディレクトリ ③type ④option ⑤dump ⑥pass

glibc

GNUシステム用の標準Cライブラリ。GNU/Linuxシステム上のほとんどのプログラムで使用されている

# インストール
mkdir ~/tmp/glibc
cd ~/tmp/glibc
wget --no-check-certificate https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
tar -xvf glibc-2.28.tar.gz
cd glibc-2.28
mkdir build && cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make&&make install
# 確認
strings /lib64/libc.so.6 | grep GLIBC_

初期構築テンプレート

#!/bin/bash
# 1. first setup
yum update -y
localectl set-locale LANG=ja_JP.utf8
timedatectl set-timezone Asia/Tokyo
yum install -y tree vim wget openssl-devel epel-release
yum groupinstall -y "Development Tools"
cd /root
# 2. python setup
wget https://www.python.org/ftp/python/3.5.9/Python-3.5.9.tar.xz
tar -Jxvf Python-3.5.9.tar.xz
Python-3.5.9/configure --prefix=/usr/local/python
make
make install
rm -rf /root/*
ln -s /usr/local/python/bin/python3.5 /usr/local/bin/python
ln -s /usr/local/python/bin/pip3.5 /usr/local/bin/pip
echo "export PATH=$PATH:/usr/local/python/bin" >> ~/.bashrc
# 3. desktop setup
yum install -y xrdp tigervnc-server
yum groupinstall -y "GNOME Desktop"
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bk
cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bk
sed -i s/enabled=1/enabled=0/g /etc/yum.repos.d/epel.repo
sed -i s/"PasswordAuthentication no"/"PasswordAuthentication yes"/ /etc/ssh/sshd_config
sed -i s/max_bpp=32/max_bpp=16/ /etc/xrdp/xrdp.ini
systemctl start firewalld
firewall-cmd --permanent --zone=public --add-port=3389/tcp
firewall-cmd --permanent --zone=public --add-port=5000/tcp
firewall-cmd --reload
systemctl set-default multi-user.target
systemctl stop packagekit
systemctl mask packagekit
systemctl start xrdp
systemctl enable xrdp
# 4. mysql setup
yum install -y mysql

# 5. nginx setup
touch /etc/yum.repos.d/nginx.repo
echo '[nginx-stable]' >> /etc/yum.repos.d/nginx.repo
echo 'name=nginx stable repo' >> /etc/yum.repos.d/nginx.repo
echo 'baseurl=http://nginx.org/packages/centos/$releasever/$basearch/' >> /etc/yum.repos.d/nginx.repo
echo 'gpgcheck=1' >> /etc/yum.repos.d/nginx.repo
echo 'enabled=1' >> /etc/yum.repos.d/nginx.repo
echo 'gpgkey=https://nginx.org/keys/nginx_signing.key' >> /etc/yum.repos.d/nginx.repo
echo 'module_hotfixes=true' >> /etc/yum.repos.d/nginx.repo
yum install -y nginx