【Linux】ディレクトリ構造を理解する
はじめに
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
一般ユーザが利用できるコマンドが配置されているディレクトリls
やcd
など基本的なコマンドがあります。
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でディレクトリが作成されており、プロセスの情報が格納されています。ps
やtop
などのプロセスを表示するコマンドで参照されます。
アルファベットは全てファイルとなり、システムの状態を表示する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