【Linux】ディレクトリ構造を理解する

2021.07.14
2024.03.24
サーバー
CentOSLinux

はじめに

Linuxの標準的なディレクトリ構成について説明したいと思います。

FHS(Filesystem Hierarchy Standard)で規定されているディレクトリからピックアップして紹介しています。

実際にVagrantで作成したCentOS7で対象のディレクトリを確認しながら、それぞれのディレクトリの役割を理解していきます。

FHS

FHS(ファイルシステム階層標準: Filesystem Hierarchy Standard)とは、Linuxにおけるディレクトリ構成の標準を定めているものです。

FHS Referenced Specifications

FHSで規定されている構成はある程度採用されていますが、ディストリビューションごとで固有の構成も一部あります。

/

ルートディレクトリ

ディレクトリ構成の一番上になり、この配下に基本的な構成があります。

CentOSで確認すると以下のようになります。

1$ ls /
2bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  swapfile  sys  tmp  usr  vagrant  var

/bin

一般ユーザが利用できるコマンドが配置されているディレクトリ

lscdなど基本的なコマンドがあります。

CentOSで確認すると以下のようになります。

1$ ls /bin/
2VGAuthService                       factor                 lexgrog               nmcli                     setkeycodes               systemd-sysv-convert
3[                                   fallocate              link                  nmtui                     setleds                   systemd-tmpfiles
4addr2line                           false                  linux-boot-prober     nmtui-connect             setmetamode               systemd-tty-ask-password-agent
5alias                               fc                     linux32               nmtui-edit                setpriv                   tabs
6applydeltarpm                       fg                     linux64               nmtui-hostname            setsid                    tac
7apropos                             fgconsole              ln                    nohup                     setterm                   tail
8ar                                  fgrep                  loadkeys              nproc                     setup-nsssysinit          tailf
9arch                                file                   loadunimap            nroff                     setup-nsssysinit.sh       tar
10as                                  find                   locale                nsenter                   setvtrgb                  taskset
11aulast                              find-repos-of-install  localectl             nss-policy-check          sexp-conv                 tbl
12aulastlog                           findmnt                localedef             numfmt                    sftp                      teamd
13                              :
14                              :
15                              :
16

/boot

LinuxカーネルやGRUBの設定ファイルなどLinuxの起動に必要なファイルが配置されているディレクトリ

CentOSで確認すると以下のようになります。

1$ ls /boot/
2System.map-3.10.0-1127.el7.x86_64  efi    initramfs-3.10.0-1127.el7.x86_64.img  vmlinuz-3.10.0-1127.el7.x86_64
3config-3.10.0-1127.el7.x86_64      grub2  symvers-3.10.0-1127.el7.x86_64.gz

/dev

デバイスファイルが配置されているディレクトリ

CentOSで確認すると以下のようになります。

1$ ls /dev/
2autofs           crash      input         network_latency     random    snd     tty12  tty20  tty29  tty37  tty45  tty53  tty61  ttyS3    vcs4   vcsa6
3block            disk       kmsg          network_throughput  raw       stderr  tty13  tty21  tty3   tty38  tty46  tty54  tty62  uhid     vcs5   vfio
4bsg              fd         log           null                rtc       stdin   tty14  tty22  tty30  tty39  tty47  tty55  tty63  uinput   vcs6   vga_arbiter
5btrfs-control    full       loop-control  nvram               rtc0      stdout  tty15  tty23  tty31  tty4   tty48  tty56  tty7   urandom  vcsa   vhci
6char             fuse       mapper        oldmem              sda       tty     tty16  tty24  tty32  tty40  tty49  tty57  tty8   usbmon0  vcsa1  vhost-net
7console          hpet       mcelog        port                sda1      tty0    tty17  tty25  tty33  tty41  tty5   tty58  tty9   vcs      vcsa2  zero
8core             hugepages  mem           ppp                 sg0       tty1    tty18  tty26  tty34  tty42  tty50  tty59  ttyS0  vcs1     vcsa3
9cpu              hwrng      mqueue        ptmx                shm       tty10   tty19  tty27  tty35  tty43  tty51  tty6   ttyS1  vcs2     vcsa4
10cpu_dma_latency  initctl    net           pts                 snapshot  tty11   tty2   tty28  tty36  tty44  tty52  tty60  ttyS2  vcs3     vcsa5

/etc

設定ファイルが配置されているディレクトリ

hostsファイルやnetworksファイル、yumの設定ファイルなどがあります。

CentOSで確認すると以下のようになります。

1$ ls /etc/
2DIR_COLORS               chrony.keys    ethertypes   hosts          login.defs         opt             rc.local          sasl2           sysconfig
3DIR_COLORS.256color      cifs-utils     exports      hosts.allow    logrotate.conf     os-release      rc0.d             securetty       sysctl.conf
4DIR_COLORS.lightbgcolor  cron.d         exports.d    hosts.deny     logrotate.d        pam.d           rc1.d             security        sysctl.d
5GREP_COLORS              cron.daily     filesystems  idmapd.conf    machine-id         passwd          rc2.d             selinux         system-release
6NetworkManager           cron.deny      firewalld    init.d         magic              passwd-         rc3.d             services        system-release-cpe
7X11                      cron.hourly    fstab        inittab        man_db.conf        pkcs11          rc4.d             sestatus.conf   systemd
8adjtime                  cron.monthly   fuse.conf    inputrc        mke2fs.conf        pki             rc5.d             shadow          tcsd.conf
9aliases                  cron.weekly    gcrypt       iproute2       modprobe.d         pm              rc6.d             shadow-         terminfo
10aliases.db               crontab        gnupg        issue          modules-load.d     polkit-1        redhat-release    shells          tmpfiles.d
11alternatives             crypttab       groff        issue.net      motd               popt.d          request-key.conf  skel            tuned
12anacrontab               csh.cshrc      group        krb5.conf      mtab               postfix         request-key.d     ssh             udev
13audisp                   csh.login      group-       krb5.conf.d    my.cnf             ppp             resolv.conf       ssl             vconsole.conf
14audit                    dbus-1         grub.d       ld.so.cache    my.cnf.d           prelink.conf.d  rpc               statetab        virc
15bash_completion.d        default        grub2.cfg    ld.so.conf     netconfig          printcap        rpm               statetab.d      vmware-tools
16bashrc                   depmod.d       gshadow      ld.so.conf.d   networks           profile         rsyncd.conf       subgid          wpa_supplicant
17binfmt.d                 dhcp           gshadow-     libaudit.conf  nfs.conf           profile.d       rsyslog.conf      subuid          xdg
18centos-release           dracut.conf    gss          libnl          nfsmount.conf      protocols       rsyslog.d         sudo-ldap.conf  xinetd.d
19centos-release-upstream  dracut.conf.d  gssproxy     libuser.conf   nsswitch.conf      python          rwtab             sudo.conf       yum
20chkconfig.d              e2fsck.conf    host.conf    locale.conf    nsswitch.conf.bak  qemu-ga         rwtab.d           sudoers         yum.conf
21chrony.conf              environment    hostname     localtime      openldap           rc.d            samba             sudoers.d       yum.repos.d

/home

ユーザのホームディレクトリ

/home/ユーザ名でユーザごとのホームディレクトリが作成されます。

CentOSで確認すると以下のようになります。 Vagrantで作成した環境なのでvagrantユーザしかいません。

1$ ls /home/
2vagrant

/lib

共有ライブラリとかカーネルモジュールが配置されるディレクトリ

CentOSで確認すると以下のようになります。

1$ ls /lib/
2NetworkManager  debug   firewalld  games  kbd     locale      modules         os-release  python2.7  sendmail          sse2      systemd     tuned  yum-plugins
3binfmt.d        dracut  firmware   grub   kernel  modprobe.d  modules-load.d  polkit-1    rpm        sendmail.postfix  sysctl.d  tmpfiles.d  udev

/mnt

マウントポイントとなるディレクトリ

一時的なファイルシステムのマウントに利用します。

/opt

ソフトウェアパッケージのインストール先となるディレクトリ

/proc

プロセスを操作したり、システム情報を処理するための手段を提供している擬似ファイルシステムとなるディレクトリ

数値のディレクトリは、プロセスIDでディレクトリが作成されており、プロセスの情報が格納されています。pstopなどのプロセスを表示するコマンドで参照されます。

アルファベットは全てファイルとなり、システムの状態を表示するfreeなどで参照されます。

1$ cat /proc/meminfo | grep MemTotal
2MemTotal:         498684 kB
3
4$ free
5              total        used        free      shared  buff/cache   available
6Mem:         498684       83704      322276        4548       92704      397320
7Swap:       2097148           0     2097148

CentOSで確認すると以下のようになります。

1$ ls /proc/
21    133  158  165   20    2559  288  35   44  617  9          cmdline    execdomains  kallsyms    locks    pagetypeinfo  stat           uptime
310   135  159  166   21    2560  289  367  45  618  94         consoles   fb           kcore       mdstat   partitions    swaps          version
411   136  16   17    22    2581  3    370  46  620  96         cpuinfo    filesystems  key-users   meminfo  sched_debug   sys            vmallocinfo
5124  14   160  18    228   2585  33   4    47  7    acpi       crypto     fs           keys        misc     schedstat     sysrq-trigger  vmstat
6127  15   161  19    23    26    332  401  48  8    asound     devices    interrupts   kmsg        modules  scsi          sysvipc        zoneinfo
7129  155  162  1956  24    2605  34   423  5   837  buddyinfo  diskstats  iomem        kpagecount  mounts   self          timer_list
813   156  163  1972  25    264   343  424  6   847  bus        dma        ioports      kpageflags  mtrr     slabinfo      timer_stats
9131  157  164  2     2556  283   348  43   61  848  cgroups    driver     irq          loadavg     net      softirqs      tty

/root

rootユーザのホームディレクトリ

CentOSで確認すると以下のようになります。

1$ ls /root/
2anaconda-ks.cfg  original-ks.cfg

/sbin

システム管理者用のコマンドが配置されるディレクトリ

システム管理者用のコマンドは/sbinの他に、/usr/sbin、/usr/local/sbinに保管されます。/sbinには、/binのコマンドとシステムの起動や回復に必要なコマンドが含まれています。

CentOSで確認すると以下のようになります。

1$ ls /sbin/
2NetworkManager        cracklib-check        getsebool                  kpartx             nl-pktloc-lookup     rpc.rquotad                tcpd
3accessdb              cracklib-format       glibc_post_upgrade.x86_64  lchage             nl-qdisc-add         rpc.statd                  tcpdmatch
4addgnupghome          cracklib-packer       groupadd                   ldattach           nl-qdisc-delete      rpcbind                    tcsd
5addpart               cracklib-unpacker     groupdel                   ldconfig           nl-qdisc-list        rpcdebug                   telinit
6adduser               create-cracklib-dict  groupmems                  lgroupadd          nologin              rpcinfo                    tracepath
7agetty                crond                 groupmod                   lgroupdel          nstat                rsyslogd                   tracepath6
8alternatives          ctrlaltdel            grpck                      lgroupmod          osd_login            rtacct                     try-from
9anacron               ctstat                grpconv                    lid                ownership            rtcwake                    tune2fs
10applygnupgdefaults    debugfs               grpunconv                  lnewusers          packer               rtmon                      tuned
11arpd                  delpart               grub2-bios-setup           lnstat             pam_console_apply    rtpr                       tuned-adm
12arping                depmod                grub2-get-kernel-settings  load_policy        pam_tally2           rtstat                     udevadm
13audispd               devlink               grub2-install              logrotate          pam_timestamp_check  runlevel                   umount.nfs
14auditctl              dhclient              grub2-macbless             logsave            parted               runuser                    umount.nfs4
15auditd                dhclient-script       grub2-mkconfig             losetup            partprobe            safe_finger                unix_chkpwd
16augenrules            dmfilemapd            grub2-ofpathname           lpasswd            partx                sasldblistusers2           unix_update
17aureport              dmidecode             grub2-probe                lshw               pidof                saslpasswd2                update-alternatives
18ausearch              dmsetup               grub2-reboot               lsmod              ping6                sefcontext_compile         update-pciids
19authconfig            dmstats               grub2-rpm-sort             lspci              pivot_root           selabel_digest             useradd
20                              :
21                              :
22                              :

/tmp

一時データが配置されるディレクトリ

CentOSで確認すると以下のようになります。

1$ ls /tmp/
2systemd-private-e66fdbef3115440aa5cb0dfd2d4b1ec6-chronyd.service-MSSEfv

/usr

ユーザで共有するデータを保持するディレクトリ

/usr配下は以下のような構成になります。

1/usr
2├── /bin
3├── /include
4├── /lib
5├── /local
6├── /sbin
7└── /share

CentOSで確認すると以下のようになります。

1$ ls /usr/
2bin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp

/usr/bin

一般ユーザの利用するコマンドが格納されているディレクトリ

CentOSで確認すると以下のようになります。

1$ ls /usr/bin/
2VGAuthService                       factor                 lexgrog               nmcli                     setkeycodes               systemd-sysv-convert
3[                                   fallocate              link                  nmtui                     setleds                   systemd-tmpfiles
4addr2line                           false                  linux-boot-prober     nmtui-connect             setmetamode               systemd-tty-ask-password-agent
5alias                               fc                     linux32               nmtui-edit                setpriv                   tabs
6applydeltarpm                       fg                     linux64               nmtui-hostname            setsid                    tac
7apropos                             fgconsole              ln                    nohup                     setterm                   tail
8ar                                  fgrep                  loadkeys              nproc                     setup-nsssysinit          tailf
9arch                                file                   loadunimap            nroff                     setup-nsssysinit.sh       tar
10as                                  find                   locale                nsenter                   setvtrgb                  taskset
11aulast                              find-repos-of-install  localectl             nss-policy-check          sexp-conv                 tbl
12aulastlog                           findmnt                localedef             numfmt                    sftp                      teamd
13ausyscall                           fipscheck              logger                objcopy                   sg                        teamdctl
14auvirt                              fipshmac               login                 objdump                   sg_compare_and_write      teamnl
15awk                                 firewall-cmd           loginctl              od                        sg_copy_results           tee
16base64                              firewall-offline-cmd   logname               oldfind                   sg_dd                     test
17basename                            flock                  look                  open                      sg_decode_sense           testgdbm
18bash                                fmt                    ls                    openssl                   sg_emc_trespass           tic
19bashbug                             fold                   lsattr                openvt                    sg_format                 timedatectl
20bashbug-64                          free                   lsblk                 os-prober                 sg_get_config             timeout
21bg                                  fusermount             lscpu                 p11-kit                   sg_get_lba_status         tload
22bond2team                           gapplication           lsinitrd              package-cleanup           sg_ident                  tmon
23bootctl                             gawk                   lsipc                 passwd                    sg_inq                    toe
24bunzip2                             gdbus                  lslocks               paste                     sg_logs                   top
25busctl                              gencat                 lslogins              pathchk                   sg_luns                   touch
26bzcat                               genl-ctrl-list         lsmem                 pchrt                     sg_map                    tput
27bzcmp                               geqn                   lsns                  pflags                    sg_map26                  tr
28                              :
29                              :
30                              :

/usr/include

Cプログラムにincludeされるヘッダファイルが配置されているディレクトリ

CentOSで確認すると以下のようになります。

1$ ls /usr/include
2python2.7

/usr/lib

共有ライブラリが配置されているディレクトリ

CentOSで確認すると以下のようになります。

1$ ls /usr/lib
2NetworkManager  debug   firewalld  games  kbd     locale      modules         os-release  python2.7  sendmail          sse2      systemd     tuned  yum-plugins
3binfmt.d        dracut  firmware   grub   kernel  modprobe.d  modules-load.d  polkit-1    rpm        sendmail.postfix  sysctl.d  tmpfiles.d  udev

/usr/local

ローカル用ファイルのトップディレクトリ

ソフトウェアをローカルにインストールするときにシステム管理者が使用します。

CentOSで確認すると以下のようになります。

1$ ls /usr/local/
2bin  etc  games  include  lib  lib64  libexec  sbin  share  src

/usr/sbin

システム管理者が利用する必須ではないコマンドが配置されているディレクトリ

CentOSで確認すると以下のようになります。

1$ ls /usr/sbin/
2NetworkManager        cracklib-check        getsebool                  kpartx             nl-pktloc-lookup     rpc.rquotad                tcpd
3accessdb              cracklib-format       glibc_post_upgrade.x86_64  lchage             nl-qdisc-add         rpc.statd                  tcpdmatch
4addgnupghome          cracklib-packer       groupadd                   ldattach           nl-qdisc-delete      rpcbind                    tcsd
5addpart               cracklib-unpacker     groupdel                   ldconfig           nl-qdisc-list        rpcdebug                   telinit
6adduser               create-cracklib-dict  groupmems                  lgroupadd          nologin              rpcinfo                    tracepath
7agetty                crond                 groupmod                   lgroupdel          nstat                rsyslogd                   tracepath6
8alternatives          ctrlaltdel            grpck                      lgroupmod          osd_login            rtacct                     try-from
9anacron               ctstat                grpconv                    lid                ownership            rtcwake                    tune2fs
10applygnupgdefaults    debugfs               grpunconv                  lnewusers          packer               rtmon                      tuned
11arpd                  delpart               grub2-bios-setup           lnstat             pam_console_apply    rtpr                       tuned-adm
12arping                depmod                grub2-get-kernel-settings  load_policy        pam_tally2           rtstat                     udevadm
13audispd               devlink               grub2-install              logrotate          pam_timestamp_check  runlevel                   umount.nfs
14auditctl              dhclient              grub2-macbless             logsave            parted               runuser                    umount.nfs4
15auditd                dhclient-script       grub2-mkconfig             losetup            partprobe            safe_finger                unix_chkpwd
16augenrules            dmfilemapd            grub2-ofpathname           lpasswd            partx                sasldblistusers2           unix_update
17aureport              dmidecode             grub2-probe                lshw               pidof                saslpasswd2                update-alternatives
18ausearch              dmsetup               grub2-reboot               lsmod              ping6                sefcontext_compile         update-pciids
19authconfig            dmstats               grub2-rpm-sort             lspci              pivot_root           selabel_digest             useradd
20authconfig-tui        dracut                grub2-set-default          luseradd           postalias            selabel_lookup             userdel
21autrace               dumpe2fs              grub2-setpassword          luserdel           postcat              selabel_lookup_best_match  usermod
22avcstat               e2freefrag            grub2-sparc64-setup        lusermod           postconf             selabel_partial_match      usernetctl
23badblocks             e2fsck                grubby                     matchpathcon       postdrop             selinux_restorecon         vigr
24biosdecode            e2image               gssproxy                   mkdict             postfix              selinuxconlist             vipw
25                              :
26                              :
27                              :

/usr/share

アーキテクチャに依存しないデータファイルが配置されているディレクトリ

CentOSで確認すると以下のようになります。

1$ ls /usr/share
2X11           backgrounds          dict       gcc-4.8.2       glib-2.0  i18n      licenses  mime-info      p11-kit    redhat-release  terminfo     zoneinfo
3aclocal       bash-completion      doc        gcc-4.8.5       gnome     icons     locale    misc           pixmaps    selinux         themes       zsh
4applications  centos-release       empty      gdb             gnupg     idl       lua       mysql          pkgconfig  sounds          tuned
5augeas        cracklib             file       gettext         groff     info      magic     omf            pki        systemd         xsessions
6authconfig    dbus-1               firewalld  gettext-0.19.8  grub      keyutils  man       open-vm-tools  polkit-1   systemtap       yum-cli
7awk           desktop-directories  games      ghostscript     hwdata    libdrm    mime      os-prober      qemu-kvm   tabset          yum-plugins

/var

ログやキャッシュなどの頻繁に書き換えられるデータが配置されているディレクトリ

CentOSで確認すると以下のようになります。

1$ ls /var/
2adm  cache  db  empty  games  gopher  kerberos  lib  local  lock  log  mail  nis  opt  preserve  run  spool  tmp  yp

/var/cache

キャッシュファイルが配置されているディレクトリ

CentOSで確認すると以下のようになります。

1$ ls /var/cache/
2ldconfig  man  yum

/var/log

ログファイルが配置されているディレクトリ

CentOSで確認すると以下のようになります。

1$ ls /var/log/
2anaconda  audit  btmp  chrony  cron  dmesg  grubby_prune_debug  lastlog  maillog  messages  qemu-ga  rhsm  samba  secure  spooler  tallylog  tuned  wtmp

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee