Linux

LinuxとはLinuxカーネルを利用したUnix系OSです。

Table of Contents

  1. 1 シェル
    1. 1.1 Bourneシェル (sh)
    2. 1.2 Almquistシェル (ash)
    3. 1.3 Bourne Againシェル (bash)
    4. 1.4 Cシェル (csh)
    5. 1.5 Debian Almquistシェル (dash)
    6. 1.6 Kornシェル (ksh)
    7. 1.7 Zシェル (zsh)
  2. 2 コマンド
    1. 2.1 オプション
    2. 2.2 正規表現
    3. 2.3 apt
    4. 2.4 apt-get
    5. 2.5 Atom
    6. 2.6 awk
    7. 2.7 basename
    8. 2.8 chmod
    9. 2.9 curl
    10. 2.10 cut
    11. 2.11 date
    12. 2.12 dirname
    13. 2.13 dpkg
    14. 2.14 du
    15. 2.15 echo
    16. 2.16 expr
    17. 2.17 file
    18. 2.18 find
    19. 2.19 ftp
    20. 2.20 fuser
    21. 2.21 gcc
    22. 2.22 gcore
    23. 2.23 gdb
    24. 2.24 getconf
    25. 2.25 Git
    26. 2.26 groupadd
    27. 2.27 groupdel
    28. 2.28 groupmod
    29. 2.29 hostname
    30. 2.30 ifconfig
    31. 2.31 ipcs
    32. 2.32 iptables
    33. 2.33 kill
    34. 2.34 ld
    35. 2.35 ls
    36. 2.36 lsof
    37. 2.37 mount
    38. 2.38 netstat
    39. 2.39 nohup
    40. 2.40 passwd
    41. 2.41 perl
    42. 2.42 ps
    43. 2.43 ping
    44. 2.44 pstree
    45. 2.45 route
    46. 2.46 rpm
    47. 2.47 rsync
    48. 2.48 script
    49. 2.49 sed
    50. 2.50 seq
    51. 2.51 shutdown
    52. 2.52 su
    53. 2.53 Subversion
    54. 2.54 sudo
    55. 2.55 tar
    56. 2.56 top
    57. 2.57 traceroute
    58. 2.58 traceroute6
    59. 2.59 uname
    60. 2.60 uncompress
    61. 2.61 useradd
    62. 2.62 userdel
    63. 2.63 usermod
    64. 2.64 uuidgen
    65. 2.65 uuidgen
    66. 2.66 vi
    67. 2.67 visudo
    68. 2.68 vim
    69. 2.69 vmstat
    70. 2.70 yum
    71. 2.71 zcat
  3. 3 デーモン
    1. 3.1 crontab
    2. 3.2 sshd
    3. 3.3 rsyslog
  4. 4 システムコール
    1. 4.1 close
    2. 4.2 creat
    3. 4.3 dup
    4. 4.4 execve
    5. 4.5 fcntl
    6. 4.6 fork
    7. 4.7 fstat
    8. 4.8 lstat
    9. 4.9 open
    10. 4.10 openat
    11. 4.11 poll
    12. 4.12 read
    13. 4.13 stat
    14. 4.14 write
  5. 5 エラー
    1. 5.1 EPERM
    2. 5.2 ENOENT
    3. 5.3 ESRCH
    4. 5.4 E2BIG
    5. 5.5 EACCESS
  6. 6 ブートローダ
    1. 6.1 GRUB
    2. 6.2 LILO
  7. 7 プロセス間通信
    1. 7.1 シグナル
    2. 7.2 ソケット
  8. 8 ファイル
    1. 8.1 /dev/null
    2. 8.2 /etc/hostname
    3. 8.3 /etc/hosts
    4. 8.4 /etc/issue
    5. 8.5 /etc/os-release
    6. 8.6 /etc/profile
    7. 8.7 /etc/sysctl.conf
    8. 8.8 /etc/rsyslog.conf
  9. 9 ディストリビューション
    1. 9.1 CentOS
    2. 9.2 Ubuntu

コマンドのオプション

コマンドに指定できるオプションには、POSIX と GNU の2種類の形式がある。

POSIX の場合、オプションはハイフンで始まり、アルファベット1文字で指定する。

command -a -c

POSIX オプションに引数を指定する場合、オプションとその引数の間には空白を入れる。

command -a -b foo -c

複数の POSIX オプションを指定する場合、ひとつに纏めて指定できる。

command -ac

ただし、引数を伴う POSIX オプションをひとつに纏めて指定することはできない。

command -ac -b foo

コマンドに引数を指定する場合、全てのオプションはコマンド引数より先に指定する必要がある。

command -a -b foo -c /home/tsuka

GNU の場合、オプションはハイフン2つから始まり、複数のアルファベットで指定する。

command --foo --baz

GNU オプションに引数を指定する場合、オプションとその引数の間には等号記号を入れる。

command --foo --bar=foobar --baz

GNU オプションをサポートしている全てのコマンドには、--help 及び --version オプションを指定できる。

command --help

ash

Almquist shell (ash) とは、Bourne shell (sh) の上位互換シェルである。BSDや組込みLinuxで使用されている。

dash

Debian Almquist shell (dash) とは、Almquist shell (ash) の上位互換シェルである。Debian系のLinuxディストリビューションで使用されている。

ksh

KornShell (ksh) とは、Bourne shell (sh) の上位互換シェルである。

zsh

Z shell (zh) とは、Bourne shell (sh) の上位互換シェルである。

fuser

ファイルまたはソケットを使用しているプロセスを識別する。

PID
ファイルまたはファイルシステムを使用しているプロセスのプロセスID

次に示すオプションを fuser コマンドに指定できる。

-a
コマンドラインで指定されたすべてのファイルを表示する。--all オプションと同じ。
$ fuser -a /home/tsuka
/home/tsuka:             7c
--all
コマンドラインで指定されたすべてのファイルを表示する。-a オプションと同じ。
-k
指定したファイルにアクセスしているプロセスを終了させる。--kill オプションと同じ。
--kill
指定したファイルにアクセスしているプロセスを終了させる。-k オプションと同じ。
-i
プロセスを強制終了する前に、ユーザーに確認を求める。-k 又は --kill オプションと共に指定する。--interactive オプションと同じ。
--interactive
プロセスを強制終了する前に、ユーザーに確認を求める。-k 又は --kill オプションと共に指定する。-i オプションと同じ。
-l
利用可能なシグナル名を一覧表示する。--list-signals オプションと同じ。
$ fuser -l
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS
--list-signals
利用可能なシグナル名を一覧表示する。-l オプションと同じ。
-u
各PIDにプロセス所有者のユーザ名を付加する。--user オプションと同じ。
--user
各PIDにプロセス所有者のユーザ名を付加する。-u オプションと同じ。
-v
プロセスはpsのようなスタイルで表示される。PID、USER、COMMANDの各フィールドは、psと同様である。--verbose オプションと同じ。
$ fuser -av /home/tsuka
                     USER        PID ACCESS COMMAND
/home/tsuka:         tsuka         7 ..c.. bash
--verbose
プロセスはpsのようなスタイルで表示される。PID、USER、COMMANDの各フィールドは、psと同様である。-v オプションと同じ。
-V
バージョン情報を表示する。--version オプションと同じ。
--version
バージョン情報を表示する。-V オプションと同じ。

lsof

オープンしているファイルを一覧表示する。

-?
ヘルプを表示する。
-h
ヘルプを表示する。
-n
ホスト名を表示しない。
$ lsof
COMMAND PID TID TASKCMD  USER   FD   TYPE DEVICE    SIZE             NODE NAME
init      1              root  cwd    DIR    0,2    4096 2533274790450951 /
init      1              root  rtd    DIR    0,2    4096 2533274790450951 /
init      1              root  txt    REG    0,2  632096 3377699720582928 /init

Ubuntuのディレクトリ構成を次に示す。

/etc/sysctl.conf

Linux カーネル・パラメータを変更するには、/etc/sysctl.conf ファイルを編集する。

Linux カーネルパラメータ一覧
Parameter Desctiption
kernel.sem セマフォに関するパラメータ
kernel.shmmax 共有メモリセグメントの最大サイズ
net.ipv4.tcp_rmem TCPソケット受信バッファのサイズ
net.ipv4.tcp_wmem TCPソケット送信バッファのサイズ
net.ipv4.tcp_windows_scaling TCPウィンドウスケーリングの有効/無効
net.core.rmem_default TCPソケット受信バッファのデフォルトサイズ
net.core.wmem_default TCPソケット送信バッファのデフォルトサイズ
net.core.rmem_max TCPソケット受信バッファの最大サイズ
net.core.wmem_max TCPソケット送信バッファの最大サイズ

/etc/sysctl.conf ファイルを編集した後、再起動するか、次のコマンドを実行する。

# /sbin/sysctl -p

kernel.sem

セマフォに関する4つのパラメータを以下の形式で指定する。

kernel.sem = SEMMSL SEMMNS SEMOPS SEMMNI
kernel.sem のパラメータ
Parameter Description
SEMMSL セマフォ集合ごとのセマフォ数の最大値
SEMMNS システム全体でのすべてのセマフォ集合におけるセマフォ数の制限
SEMOPS semop(2)コールに指定されるオペレーション数の最大値
SEMMNI システム全体でのセマフォ識別子の最大値

net.ipv4.tcp_rmem

TCPソケット受信バッファのサイズを以下の形式で指定する。

net.ipv4.tcp_rmem = min default max
min

TCPソケット受信バッファの最小サイズを指定する。

default

TCPソケット受信バッファのデフォルトサイズを指定する。net.core.rmem_defaultが設定されている場合でも、こちらの方が優先される。

max

TCPソケット受信バッファの最大サイズを指定する。net.core.rmem_maxが設定されている場合、net.core.rmem_maxの方が優先される。

net.ipv4.tcp_wmem

TCPソケット送信バッファのサイズを以下の形式で指定する。

net.ipv4.tcp_wmem = min default max
min

TCPソケット送信バッファの最小サイズを指定する。

default

TCPソケット送信バッファのデフォルトサイズを指定する。net.core.wmem_defaultが設定されている場合でも、こちらの方が優先される。

max

TCPソケット送信バッファの最大サイズを指定する。net.core.wmem_maxが設定されている場合、net.core.wmem_maxの方が優先される。

chmod

chmod (change mode) コマンドを使って、ファイルやディレクトリのパーミッションを変更できる。

アカウント user group other
モード r w x r w x r w x
2進数 1 1 1 1 0 1 1 0 1
8進数 7 5 5
$ chmod 0755 bin

/etc/hostname

/etc/hostname はホスト名を設定するファイルである。

$ cat /etc/hostname
sakura

/etc/hosts

/etc/hosts は各ホスト名のIPアドレスを設定するファイルである。

$ cat /etc/hosts
127.0.0.1	localhost
127.0.1.1	sakura

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

/etc/issue

/etc/issue はLinuxディストリビューションに関する情報が格納されているファイルである。

$ cat /etc/issue
Linux Mint 20 Ulyana \n \l

/etc/os-release

/etc/os-release はLinuxディストリビューションに関する詳細な情報が格納されているファイルである。

$ cat /etc/os-release
NAME="Linux Mint"
VERSION="20 (Ulyana)"
ID=linuxmint
ID_LIKE=ubuntu
PRETTY_NAME="Linux Mint 20"
VERSION_ID="20"
HOME_URL="https://www.linuxmint.com/"
SUPPORT_URL="https://forums.linuxmint.com/"
BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/"
PRIVACY_POLICY_URL="https://www.linuxmint.com/"
VERSION_CODENAME=ulyana
UBUNTU_CODENAME=focal

/etc/profile

/etc/profile とは、どのログインユーザでも共通の処理を記述したスクリプトシェルである。ログインシェルがshまたはbashの場合、ユーザがログインしたとき自動的に実行される。

/dev/null

特殊なデバイスとして、ヌルデバイス(/dev/null)を指定することもできます。出力先とした場合、何も出力しないのと同義になります。入力元とした場合、常に EOF が入力されます。

$ echo hello > /dev/null

標準出力をヌルデバイスにリダイレクトした場合、/dev/nullというファイルに出力するのではなく、どこにも出力しないことになります。

rsyslog

システムログとは、システムの動作状態の記録である。ログの多くは /var/log ディレクトリに保存される。システムログにはfacilityとpriorityの2つの分類がある。

facility
facility 説明
auth、security セキュリティ、認証
authpriv セキュリティ、認証(プライベート)
cron cron
daemon デーモン
kern カーネル
lpr プリンタ
mail メール
news NetNews
syslog syslog自身のメッセージ
user ユーザアプリケーション
uucp UUCP
local0 独自に利用できるfacility
local1
local2
local3
local4
local5
local6
local7
priority
priority 説明
debug デバッグ
info 情報
notice 重要
warning 警告
err、error エラー
crit 重大なエラー
alert すぐに対処が必要
emerg、panic システムが不安定な状態

参考文献

IEEE and The Open Group (2018) Utility Conventions

Free Software Foundation, Inc. (2020) Standards for Command Line Interfaces