#
ドキュメント

Document

自分のための備忘録です。

Linuxの基礎

OS/CPU/メモリ確認

// OSを確認
$ cat /etc/os-release
// CPUを確認
$ cat /proc/cpuinfo
// メモリを確認
$ cat /proc/meminfo

メモリはfreeコマンドでも確認可能。

$ free -mh
              total        used        free      shared  buff/cache   available
Mem:          967Mi       199Mi       233Mi       0.0Ki       534Mi       614Mi
Swap:            0B          0B          0B

プロセス

  • プログラムはプロセスとしてメモリ上に展開される
    • コマンド(cdなど)からアプリケーション(Apacheなど)にいたるまでプロセスの単位で実行

  • プロセスはOSによって管理され並列処理される
  • プロセスは親子関係を持つ
  • プロセスは既存プロセスをコピーして作成する(作成したプロセスはコピー元プロセスの子プロセスになる)
    • 既存プロセスからプロセスを作成することをforkすると呼ぶ
  • forkしたプロセスの中身を入れ替えるこexecすると呼ぶ
  • プロセスは木構造になっており、ルートプロセスは最初に起動するプログラム(initまたはsystemd)になる

lsのプロセス処理

  1. カレントシェルのプロセスをforkする
  2. forkして作成した子プロセスの中身をlsコマンドにexecする

ルートプロセスの確認

$ ps auxf | less
or
$ ps aux --sort -pid

# ....
root         1  0.0  0.5 125524  5488 ?        Ss    3月26   0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 # <--- pid 1はsystemd
root      1668  0.0  2.6  66124 26532 ?        Ss    3月26   0:03 /usr/lib/systemd/systemd-journald
root      1693  0.0  0.2 118808  2164 ?        Ss    3月26   0:00 /usr/sbin/lvmetad -f
# ...

システムコール

プロセスがカーネルに操作を依頼する処理。(Linuxブートキャンプ p50)

ジョブ

シェルが管理している、「シェルを実行する作業単位」のことです。

http://www.code-magagine.com/?p=3372

ps/jobs

https://teratail.com/questions/27174

シグナル

「シグナル」はプロセスとプロセスの間で通信を行う際に使用される“信号”のことで、シグナルを受け取ったプロセスは“何らかの動作”を行います。

https://www.atmarkit.co.jp/ait/articles/1708/04/news015.html

[CTRL]+[C]は「SIGINT」というシグナルを行うキー操作、[CTRL]+[Z]は「SIGTSTP」というシグナルを行うキー操作です。

https://www.atmarkit.co.jp/ait/articles/1708/04/news015.html

プロセスによる面もあるが、通常CTRL + CのSIGINTは「プロセスの終了とコアダンプ出力」、CTRL + Zはプロセスの一時停止。

フォアグラウンドジョブ/バックグラウンドジョブ

ジョブにはフォアグラウンドジョブ/バックグラウンドジョブの2種類がある。

フォアグランドジョブ

  • 通常のジョブ
  • シグナルを送れる(Ctrl + C SIGINTやCtrl + Z SIGTSTPなど)
  • 1つのジョブが終わるまでシェルに入力できない
# フォアグランドのジョブを一時停止(Ctrl + z)してバックグランド実行
# 新たにフォアグランドでジョブを実行

$ sleep 100
// フォアグランドで実行されているので入力をsleep 100のジョブが終了するまで受け付けない
^Z // Ctrl + zで一時停止
[1]+  Stopped                 sleep 100
$ bg 1  // バックグランドジョブに変更
[1]+ sleep 100 &
$ jobs
[1]+  Running                 sleep 100 &
$ sleep 50
// フォアグランドで実行されているので入力をsleep 50のジョブが終了するまで受け付けない

バックグラウンドジョブ

コマンドの最後に&付与

  • シェルの画面外で動作させるジョブ
  • Ctrl + Zで停止しているジョブをbgコマンドで実行すればバックグラウンドジョブとして実行可能

rel. http://www.code-magagine.com/?p=3372

$ sleep 60 &
[1] 1275
 $ sleep 80 &
[2] 1316
 $ jobs
[1]-  Running                 sleep 60 &    // [1]はjobid
[2]+  Running                 sleep 80 &
$ fg 1
sleep 60   // sleep 60をフォアグランドで実行 Ctrl + CでSIGINTを送信できるので停止できる

ジョブが実行中でも、次のコマンドを実行することができます。

制御端末

標準入出力を扱う端末を制御端末とよびます。
制御端末の総称をtty(TeleTypeWriterの略)と記載します。

以下に記載するように実端末をtty、仮想端末をptsと分けることもあります。

  • 実端末(tty:TeleTypeWriter):agettyなどLinux自身が使用する場合に割り当てられます
  • 仮想端末(pts:pseudo-terminal):SSHごしにログインした場合は仮想端末が割り当てられます
    • 仮想端末は仮想コンソールとも呼びます

SSHログインした際の制御端末はttyコマンドで確認します。

$ tty
/dev/pts/0
  • pswTTY列では略してpts/0と表示されます
  • 0はログインしているユーザーによって異なります

2ユーザーがSSHログインしている場合の例。

$ w
 01:14:24 up 140 days, 19:45,  2 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
ubuntu   pts/0    124.18.121.200   00:27    0.00s  0.08s  0.00s w
ubuntu   pts/1    124.18.121.200   01:14    4.00s  0.03s  0.03s -bash

pts/0が割り当てられた)SSHログインユーザーにpts/0が割り当てられて、grepが実行されたことがわかります。

$ ps auxf | grep sshd
root     26608  0.0  0.3  72300  1788 ?        Ss   Jun04   0:08 /usr/sbin/sshd -D
root     31742  0.0  1.4 107984  7152 ?        Ss   00:27   0:00  \_ sshd: ubuntu [priv]
ubuntu   31851  0.0  0.7 107984  3516 ?        S    00:27   0:00      \_ sshd: ubuntu@pts/0
ubuntu     452  0.0  0.2  14856  1112 pts/0    S+   01:08   0:00              \_ grep --color=auto sshd

デーモン

デーモンの特徴。(Linux ブートキャンプ)

  • 制御端末(TTY)が割り当てられない(ps auxTTY?
  • 独自のセッションを持つ(あらゆるセッションが終了しても影響を受けないように)
  • PID:1が親プロセスになっている(ps ajxで確認可能)

パーミッション

新Linux/Unix 入門(p125)

以下の表は「新Linux/Unix 入門」(p125)から引用

ファイルのパーミッション

機能 説明
r 読み出し許可 -> ファイル読み込み可能
w 書き込み許可 -> ファイル書き込み可能
x 実行許可 -> ファイル実行可能

ディレクトリのパーミッション

機能 説明
r ディレクトリリストを表示できる(具体的にはlsできる)
読み込み許可というより「表示許可」と考えると良い(rだけではdはできない)
w ディレクトリ内のファイルを削除したりサブディレクトリを作成できる
また新規ファイルの作成などができる
書き込み許可というより「作成削除許可」と考えると良い
x cdコマンドでディレクトリに移動できる。また内部をサーチできる
これが不許可のときは、そのディレクトリ以下を見ることができない
実行許可というより「検索許可」と考えると良い。

パーミッションの例

ファイルのパーミッションは理解しやすいですがディレクトリのパーミッションは誤解しやすい点があるのでいくつか例を記載します。

例1

sample
    |-- sub 100

sub100なので、sample$ ls su2を実行できません。

$ ls sub
ls: sub: Permission denied

例2

説明を単純にするため所有者以外の権限は全て不許可へ設定します。

$ mkdir mydir
$ chmod 700 mydir
$ ls -al | grep mydir

drwx------   2 shiroshi  staff   68  8  5 13:17 mydir

ファイルを作成します。

$cat > mydir/file.txt
aaa
ctrl + D

ディレクトリのパーミションの読み書きを不許可(100)にします。

$ chmod 100 mydir
$ ls -al | grep mydir

d--x------   3 shiroshi  staff  102  8  5 13:22 mydir

ディレクトリのパーミションは、ファイルのパーミションとは独立しているので、mydirに作成したファイルは読み書き可能です。

書き込み

$ echo 'bbb' >> mydir/file.txt             # >> は追記

読み込み

$ less mydir/file.xtx

aaa
bbb

一方ディレクトリの読み書きを不許可にしたので下記操作はパーミッションエラーが発生します。
ディレクトリの書き込みが不許可のため新規ファイル(およびサブディレクトリ)は作成できません。

$ cat > mydir/new.txt

-bash: mydir/new.txt: Permission denied
$ ls -al mydir

ls: : Permission denied

次にディレクトリの読み書きを許可し実行を不許可にします。 mydir以下の内容は検索できなくなるので下記コマンドはパーミッションエラーとなります。

$ cd mydir

cd: mydir: Permission denied
$ cat > mydir/file.txt

-bash: mydir/file.txt: Permission denied

$ less mydir/file.txt

mydir/file.txt: Permission denied

読み込みが許可されているのでlsコマンドは使用できます。

$ ls -al mydir | grep mydir

drw-------   3 shiroshi  staff  102  8  5 13:22 mydir

書き込みが許可されていてもmydir以下の内容がわからないので実際は新規作成はできません。

$ cat > mydir/file2.txt

-bash: mydir/file2.txt: Permission denied

パーミッションマスク値の設定

現在のマスク値確認

$ umask

0022

マスク値設定

$ umask 222
  • 新規ファイルは444で作成されます。
  • 新規ディレクトリは555で作成されます。

UNIXはファイルを作成するとき、仮パーミッション0666と、設定されたマスクの否定値をアンド計算してパーミッションを決定しています。またディレクトリを作成するときは 仮パーミッション0777と、設定されたマスクの否定値をアンド計算してパーミッションを決定しています。

「新UNIX/Linux入門」(p123)

ユーザー

ユーザーの種類

  • ルート(root)ユーザー(スーパーユーザー)
  • システムユーザー
    ApacheやMysqlやsshdなど各サービスを実行するユーザーで、パッケージをインストールしたときにLinuxによって作成される
  • 一般ユーザー

ユーザーを追加

$ sudo useradd foo
  • fooユーザーを作成すると自動的にfooグループが作成される
  • fooグループをfooユーザーのプライマリーグループとよぶ
  • 後述するがユーザーは複数のグループに所属することができる
  • プライマリグループ以外の所属グループをサブグループとよぶ

パスワードを設定

# ユーザー foo のパスワードを変更。
$ sudo passwd foo
新しいパスワード:

ユーザー関連ファイル

ユーザー/グループ関連のファイルは/etcにあります。

  • /etc/passwd ユーザー情報
  • /etc/group グループ情報
  • /etc/sudoers sudoとユーザーを関連付ける情報

etc/passwd

第1フィールド: ユーザ名(ログイン名)
第2フィールド: (暗号化パスワード)
第3フィールド: ユーザ番号(UID)
第4フィールド: グループ番号(GID)
第5フィールド: コメントフィールド(名前など)
第6フィールド: ホームディレクトリーのパス
第7フィールド: ログイン・シェル

2.2 パスワードファイル /etc/passwd の構造

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd/netif:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd/resolve:/usr/sbin/nologin
syslog:x:102:106::/home/syslog:/usr/sbin/nologin
messagebus:x:103:107::/nonexistent:/usr/sbin/nologin
_apt:x:104:65534::/nonexistent:/usr/sbin/nologin
lxd:x:105:65534::/var/lib/lxd/:/bin/false
uuidd:x:106:110::/run/uuidd:/usr/sbin/nologin
dnsmasq:x:107:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
landscape:x:108:112::/var/lib/landscape:/usr/sbin/nologin
sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
pollinate:x:110:1::/var/cache/pollinate:/bin/false
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
mysql:x:111:116:MySQL Server,,,:/nonexistent:/bin/false

/etc/shadow

通常、/etc/passwdのパスワードはxと表示される(暗号化されていることを意味する)。
パスワードは/etc/shadowに記載されている。
/etc/shadowの表示にはルート権限が必要

uidを取得

現在のユーザー

$ id
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(lxd),114(netdev)
$ id root
uid=0(root) gid=0(root) groups=0(root)
$ sudo id
# rootによってidを実行したことになる
uid=0(root) gid=0(root) groups=0(root)

グループ

グループを追加

$ sudo groupadd mygroup

グループへメンバーを追加

# fooユーザーをmygroupへ追加
$ sudo gpasswd -a foo mygroup

グループからメンバーを削除

$ sudo gpasswd -d foo mygroup

グループを確認

$ groups foo

グループ一覧

less /etc/group

root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,ubuntu
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:ubuntu
fax:x:21:
voice:x:22:
cdrom:x:24:ubuntu
floppy:x:25:ubuntu
tape:x:26:
sudo:x:27:ubuntu
audio:x:29:ubuntu
dip:x:30:ubuntu
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:ubuntu
sasl:x:45:
plugdev:x:46:ubuntu
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
systemd-journal:x:101:
systemd-network:x:102:
systemd-resolve:x:103:
input:x:104:
crontab:x:105:
syslog:x:106:
messagebus:x:107:
lxd:x:108:ubuntu
mlocate:x:109:
uuidd:x:110:
ssh:x:111:
landscape:x:112:
admin:x:113:
netdev:x:114:ubuntu
ubuntu:x:1000:www-data
ssl-cert:x:115:
mysql:x:116:
  • 第1フィールド: グループ名
  • 第2フィールド: 「 x 」という文字か、暗号化されたパスワード。「 x 」はシャドウパスワードを使用している事を意味します。
  • 第3フィールド: グループID( GID )
  • 第4フィールド: サブグループとして所属しているユーザーアカウントのリスト。カンマ区切り。

引用元:https://kazmax.zpp.jp/linux_beginner/etc_group.html

setuidとsetgidとスティッキービット

プロセスの UID は実行ユーザーの UID になる。

例)

ls を ubuntu で実行すればプロセスの UID は ubuntu になってリストできるファイルも ubuntu の権限で許可されたファイルになる。 また ls を sudo で実行すればプロセスの UID は root になってリストできるファイルも root の権限で許可したファイルになる。

setuid の挙動を確認する。 ls コマンドのコピー myls を例に説明する。

$ cp $(which ls) ./myls
// setuid を有効化
$ chmod u+s ./myls
$ ls ./myls
-rwsr-xr-x 1 ubuntu ubuntu 35336 Apr  6 00:22 ./myls*

setuid を有効にすると実行プロセスの UID は(実行ユーザーではなく)ファイル所有者ユーザーの UID になる。 setuid が有効な場合に sudo で実行( root はパーミッションに関わらず全ての処理を実行できる )すると実行プロセスの UID は ubuntu( ファイル所有者ユーザー ) になってリストできるファイルも ubuntu の権限が許可したファイルになる。

ref. https://blog.fenrir-inc.com/jp/2012/02/file_permission.html

capabilities

capabilityをスレッドに割り当てることで、そのスレッドが特定のアクションを実行できるかどうかを決定できます

ref. コンテナセキュリティ Liz Rice p 47

capabilities は非 root ユーザーが実行したプロセスでは通常 capabilites はない。

$ sleep 1000
$ ps auxf | grep sleep
// sleep 1000 の PID が仮に 1234 とする
$ getpcaps 1234
1234: =

root で実行する。

$ sudo sleep 1000
$ ps auxf | grep sleep
// sleep 1000 の PID が仮に 2345 とする
$ getpcaps 2345
2345: =ep

ephttps://unix.stackexchange.com/questions/515881/what-does-the-ep-capability-mean を参照。

That binary has ALL the capabilites permitted (p) and effective (e) from the start.

cgroup

リソース( CPU 、メモリ、ネットワーク入出力な)の使用を制限するもの。 特定のプロセスが全てのリソースを独占して他のプロセスに悪影響を与えるのを防ぐ。

namespace

リソースの可視性に関するもの。

suとsudo

多くのユースケースでsudorootユーザーに成り代わってコマンドを実行します。
以下rootユーザーに成り代わる前提で記載します。

  • susubstituteの略で指定したユーザーに成り代わります - パスワードは成り代わるユーザーのパスワードが必要です(例:su rootの場合rootのパスワードが必要になります)
  • sudo:rootユーザー(または他のユーザー)に成り代わってコマンドを実行します - パスワードはユーザーのパスワードです(rootユーザーのパスワードではなくsudoを実行するユーザーのパスワードになります) - /etc/sudoersの定義によりパスワード入力無しでsudoできるユーザーも可能です - rootユーザーのパスワードを一般のユーザーに知らせる必要がないのでセキュリティ面も強化できます

sudoを実行可能なユーザー/コマンド情報は、/etc/sudoersで定義します。 /etc/sudoersは、visudoコマンドで編集します。

suのハイフン-またはl

$ su - foo
// または
$ su -l foo

ログインシェルを起動するので、環境変数が再設定されます。 -- Linux ブートキャンプ(p.64)

ディレクトリ構成(FHS:Filesystem System Hierachy Standard)

FHSは以下の直下/のディレクトリは以下の基準で分類できます。

  • 静的か
  • 共有できるか

例)

  • /etc:静的だが共有できない
  • /usrUser Services and Routines):静的かつ共有できる
  • /varVariable):動的
    • /var/usrから動的なものを移動
      結果/usrは静的かつ共有可能になった

/bin、/sbin、/usr/bin、/usr/sbin

UbuntuはDisco Dingoから/bin/sbinは、/usr/bin/usr/sbinのシンボリックリンクになりました。

$  ls -al /{bin,sbin}
lrwxrwxrwx    1 root     root             7 Nov 29  2021 /bin -> usr/bin
lrwxrwxrwx    1 root     root             8 Nov 29  2021 /sbin -> usr/sbin

デバイス管理

Linuxはデバイスを抽象化したデバイスファイルとして扱います。 デバイスファイルは、/devディレクトリに配置されます。

購入したHDDをLinuxから使えるようにするには、パーティションの作成、フォーマット、マウントという手順を踏む必要があります ※2。

 パーティションの作成では、fdiskコマンド(連載第187回)やgdiskコマンド(第188回)などを使います。その後、mkfsコマンドでフォーマットし、mountコマンド(第183回)でマウントします。

-- https://atmarkit.itmedia.co.jp/ait/articles/1803/09/news034.html

コマンド

  • df -hT:デバイスの使用状況を表示 -T ファイルフォーマットタイプを表示する
  • lsblk -f(list block devices):ブロックデバイスを一覧表示 -f ファイルシステムを表示する
  • fdisk -l:パーティション情報を調べる
  • du:ディクス使用量を表示

マウント

マウント追加の流れ

  1. デバイスの追加(例 EBSをアタッチ)
  2. ↑に対応するブロックデバイス(ファイル)が追加(例:/dev/xvdf
  3. フォーマット(sudo mkfs -t ext4 /dev/xvdf)
  4. マウント(sudo mount /dev/xvdf /data)

現在のマウントを確認します。

$ mount

またディスク容量を調べるdf(Disk Free)コマンドは、容量だけでなくでマウント位置を調べることができます。

ファイルシステムを構築(フォーマット)

ファイルシステム構築(フォーマット)はmkfsコマンドを使用します。

// mkfs -t タイプ名 デバイス名
// 例
$ sudo mkfs -t ext4 /dev/xvdf

※ Linuxのファイルシステムはext4が標準のようです。

/etc/fstabファイルで決められた内容を自動でマウントさせることができます。
逆に/etc/fstabファイルで自動マウントを有効にしていないとOSを再起動するとマウントが解除されます。

デバイスには色々な種類があります。
有名なデバイスタイプにブロックデバイスやキャラクタデバイスがあります。

ブロックデバイスを確認するには下記コマンドが使えます。

$ lsblk -f
NAME    FSTYPE   LABEL           UUID                                 FSAVAIL FSUSE% MOUNTPOINT
loop0   squashfs                                                            0   100% /snap/amazon-ssm-agent/5163
loop1   squashfs                                                            0   100% /snap/amazon-ssm-agent/5656
//...
xvda
└─xvda1 ext4     cloudimg-rootfs 436cf32d-5e3d-46ca-b557-f870c8a25794    2.7G    64% /
xvdf    ext4                     ff0dfd8e-c1f2-4e1c-897e-327c042890cd

SquashFS (.sfs) はLinux向けの 圧縮された読み込み専用ファイルシステムである。SquashFSはファイル、inodeとディレクトリを圧縮し、高圧縮のためブロックサイズを1024KBまでサポートする。SquashFSファイルシステムにアクセスするための(GPLでライセンスされた)フリーソフトウェアもSquashFSと呼ばれる。

-- https://ja.wikipedia.org/wiki/SquashFS

マウントを実行

mountdflsblkで調べたデバイス名をLinuxファイルシステムにマウントするには下記コマンドを使用します。

$ mount [-t ファイルシステムタイプ] デバイス名 マウントポイント名
// 例
$ sudo mount -t ext4 /dev/xvdf /data

アンマウント

$ umount デバイス名またはマウントポイント名

マウント例) デバイス名/dev/xvdg、マウントポイント/data

  1. デバイスにファイルシステム構築
  2. デバイスをマウント

/dev/xvdgはデバイスが挿入されたときにLinuxにより自動で命名されます。

/dev/xvdgデバイスにext4ファイルシステムを構築します。

$ sudo mkfs -t ext4 /dev/xvdf

マウントポイント(ディレクトリ)を作成します。

$ sudo mkdir /data
$ sudo chown ubuntu /data  
$ sudo chgrp ubuntu /data  
$ sudo chmod 755 /data

マウントします。

$ sudo mount -t ext4 /dev/xvdf /data

システムブート時に常にマウントするよう/etc/fstabファイルを編集します。
fstab(file system table)ファイルへ/dev/xvdfを追加します。

Amazon Linux

/dev/xvdf   /data   ext4    defaults,nofail 0 2

Ubuntu

/dev/xvdf   /data   ext4    defaults,nofail,nobootwait 0 2

Amazon Linuxではnobootwaitを付けるとマウントできませんでした。

プロセスのマウント

プロセスのマウントは/proc/{{プロセスID}}にディレクトリが作成されます。

$ mount
.....
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
.....

カレントプロセスのIDを確認します。

# $$はカレントプロセスのIDを表示
$ echo $$
1105

カレントプロセス(例:1105)がマウントされたディレクトリを確認します。

$ ls -l /proc/1105
total 0
-r--r--r--  1 ubuntu ubuntu 0 May 21 06:33 arch_status
dr-xr-xr-x  2 ubuntu ubuntu 0 May 21 06:33 attr
-rw-r--r--  1 ubuntu ubuntu 0 May 21 06:33 autogroup
-r--------  1 ubuntu ubuntu 0 May 21 06:33 auxv
-r--r--r--  1 ubuntu ubuntu 0 May 21 06:33 cgroup
--w-------  1 ubuntu ubuntu 0 May 21 06:33 clear_refs
-r--r--r--  1 ubuntu ubuntu 0 May 21 04:41 cmdline
-rw-r--r--  1 ubuntu ubuntu 0 May 21 06:33 comm
-rw-r--r--  1 ubuntu ubuntu 0 May 21 06:33 coredump_filter
-r--r--r--  1 ubuntu ubuntu 0 May 21 06:33 cpu_resctrl_groups
-r--r--r--  1 ubuntu ubuntu 0 May 21 06:33 cpuset
lrwxrwxrwx  1 ubuntu ubuntu 0 May 21 06:33 cwd -> /home/ubuntu
-r--------  1 ubuntu ubuntu 0 May 21 06:33 environ
lrwxrwxrwx  1 ubuntu ubuntu 0 May 21 06:33 exe -> /usr/bin/bash
dr-x------  2 ubuntu ubuntu 0 May 21 04:41 fd
dr-x------  2 ubuntu ubuntu 0 May 21 06:33 fdinfo
-rw-r--r--  1 ubuntu ubuntu 0 May 21 06:33 gid_map
-r--------  1 ubuntu ubuntu 0 May 21 06:33 io
-r--r--r--  1 ubuntu ubuntu 0 May 21 06:33 limits
-rw-r--r--  1 ubuntu ubuntu 0 May 21 06:33 loginuid
dr-x------  2 ubuntu ubuntu 0 May 21 06:33 map_files
-r--r--r--  1 ubuntu ubuntu 0 May 21 06:33 maps
-rw-------  1 ubuntu ubuntu 0 May 21 06:33 mem
-r--r--r--  1 ubuntu ubuntu 0 May 21 06:33 mountinfo
-r--r--r--  1 ubuntu ubuntu 0 May 21 06:33 mounts
-r--------  1 ubuntu ubuntu 0 May 21 06:33 mountstats
dr-xr-xr-x 54 ubuntu ubuntu 0 May 21 06:33 net
dr-x--x--x  2 ubuntu ubuntu 0 May 21 05:44 ns
-r--r--r--  1 ubuntu ubuntu 0 May 21 06:33 numa_maps
-rw-r--r--  1 ubuntu ubuntu 0 May 21 06:33 oom_adj
-r--r--r--  1 ubuntu ubuntu 0 May 21 06:33 oom_score
-rw-r--r--  1 ubuntu ubuntu 0 May 21 06:33 oom_score_adj
-r--------  1 ubuntu ubuntu 0 May 21 06:33 pagemap
-r--------  1 ubuntu ubuntu 0 May 21 06:33 patch_state
-r--------  1 ubuntu ubuntu 0 May 21 06:33 personality
-rw-r--r--  1 ubuntu ubuntu 0 May 21 06:33 projid_map
lrwxrwxrwx  1 ubuntu ubuntu 0 May 21 06:33 root -> /
-rw-r--r--  1 ubuntu ubuntu 0 May 21 06:33 sched
-r--r--r--  1 ubuntu ubuntu 0 May 21 06:33 schedstat
-r--r--r--  1 ubuntu ubuntu 0 May 21 06:33 sessionid
-rw-r--r--  1 ubuntu ubuntu 0 May 21 06:33 setgroups
-r--r--r--  1 ubuntu ubuntu 0 May 21 06:33 smaps
-r--r--r--  1 ubuntu ubuntu 0 May 21 06:33 smaps_rollup
-r--------  1 ubuntu ubuntu 0 May 21 06:33 stack
-r--r--r--  1 ubuntu ubuntu 0 May 21 04:41 stat
-r--r--r--  1 ubuntu ubuntu 0 May 21 04:52 statm
-r--r--r--  1 ubuntu ubuntu 0 May 21 04:41 status
-r--------  1 ubuntu ubuntu 0 May 21 06:33 syscall
dr-xr-xr-x  3 ubuntu ubuntu 0 May 21 06:33 task
-rw-r--r--  1 ubuntu ubuntu 0 May 21 06:33 timens_offsets
-r--r--r--  1 ubuntu ubuntu 0 May 21 06:33 timers
-rw-rw-rw-  1 ubuntu ubuntu 0 May 21 06:33 timerslack_ns
-rw-r--r--  1 ubuntu ubuntu 0 May 21 06:33 uid_map
-r--r--r--  1 ubuntu ubuntu 0 May 21 06:33 wchan

AWS EBSの追加

aws/aws-ebs.html

ref.

リンク

シンボリックリンク

オリジナルのシンボリックリンクlink.txtを作成

$ ln -s original.txt symlink.txt

ハードリンク

$ ln original.txt hardlink.txt

realdirディレクトリのシンボリックリンクcurrentディレクトを作成します。

$ mkdir realdir
$ echo "This is file1" > realdir/test1.txt
$ echo "This is file2" > realdir/test2.txt

realdirディレクトリのシンボリックリンクcurrentディレクトリを作成。

$ ln -s realdir current
$ ll
lrwxr-xr-x   1 shiroshi  staff     7B  8 23 19:11 current -> realdir
drwxr-xr-x   4 shiroshi  staff   136B  8 23 19:11 realdir

シンボリックリンクを編集すると実体も編集されます。

起動

service {{service_name}} start `systemctl start {{service_name}}'