linux目錄結(jié)構(gòu)說明
談到Linux文件管理,首先我們需要了解的是要對(duì)文件做些什么事情,其實(shí)無非就是對(duì)一個(gè)文件進(jìn)行創(chuàng)建、復(fù)制、移動(dòng)、查看、編輯、壓縮、查找、刪除等等。
例如我們想要修改系統(tǒng)的主機(jī)名稱,首先需要知道該文件存儲(chǔ)在哪個(gè)目錄,才能做相應(yīng)的修改,因此需要先了解Linux系統(tǒng)的目錄結(jié)構(gòu),搞清楚每個(gè)目錄存放的是什么文件,有什么的作用。
幾乎所有的計(jì)算機(jī)操作系統(tǒng)都是使用目錄結(jié)構(gòu)組織文件。具體來說就是在一個(gè)目錄中存放子目錄和文件,而在子目錄中又會(huì)存放子子目錄和文件,以此類推形成一個(gè)樹狀的文件結(jié)構(gòu)。由于其結(jié)構(gòu)很像一棵樹的分支,因此該結(jié)構(gòu)又被稱為目錄樹。
windows系統(tǒng)是以多根的方式組織文件,例如C:表示C盤,D:表示D盤,也就是以每個(gè)盤符作為一個(gè)根。
Linux系統(tǒng)是以單根的方式組織文件,使用/表示
如下圖所示是centos7的目錄結(jié)構(gòu),在管理文件之前需要先搞清楚根目錄下的一級(jí)子目錄的作用
可以使用tree -L 1 /命令查看根目錄下的一級(jí)子目錄
[root@centos7-1 ~]# tree -L 1 /
/
├── bin -> usr/bin
├── boot
├── data
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var
如果執(zhí)行命令時(shí)發(fā)現(xiàn)系統(tǒng)提示command nout found,可以使用yum install -y tree 來安裝tree命令
[root@centos7-1 ~]# yum install -y tree
CentOS7系統(tǒng)中,/bin、/sbin、/lib、/lib64都是以軟連接的方式鏈接到/usr目錄下,軟連接就是Windows下的快捷方式。
- /bin -->/usr/bin
- /sbin–>/usr/sbin
- /lib -> usr/lib
- /lib64 -> usr/lib64
Linux根目錄下的幾個(gè)你需要里了解的根目錄下的一級(jí)子目錄
- /media 便攜式移動(dòng)設(shè)備掛載點(diǎn),例如U盤
- /mnt 臨時(shí)文件系統(tǒng)掛載點(diǎn)
- /opt 目錄用于存放第三方應(yīng)用程序的安裝位置
- /run目錄用于存放系統(tǒng)運(yùn)行時(shí)所需要的文件,以前是放在/var/run目錄下
- srv 服務(wù)啟動(dòng)后需要訪問的數(shù)據(jù)目錄,例如saltstack就會(huì)將數(shù)據(jù)放到該目錄下
- sys和proc一樣,記錄的是系統(tǒng)的核心硬件信息
Linux目錄結(jié)構(gòu)-/bin和/sbin目錄
/bin目錄和/sbin目錄都是用于存放命令的目錄,命令的本質(zhì)就是一個(gè)應(yīng)用程序。
- /bin 存放普通用戶使用的命令 ,例如/bin/ls和/bin/date等等
當(dāng)我們?cè)诮K端執(zhí)行l(wèi)s或者是date命令時(shí),系統(tǒng)會(huì)從/bin目錄下查找命令對(duì)應(yīng)的可執(zhí)行程序我們可以使用which命令查看命令的路徑
[root@centos7-1 ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
不過/bin目錄實(shí)際上是一個(gè)快捷方式,指向/usr/bin目錄
[root@centos7-1 ~]# ll /bin
lrwxrwxrwx. 1 root root 7 Oct 2 20:55 /bin -> usr/bin
也就是說/bin目錄和/usr/bin目錄內(nèi)容是一樣的
- /sbin目錄存放管理員執(zhí)行的命令,例如/sbin/reboot ,/sbin/shutdown,/sbin/useradd等等
[root@centos8 ~]# which shutdown
/usr/sbin/shutdown
[root@centos8 ~]# which reboot
/usr/sbin/reboot
/sbin目錄也是一個(gè)軟連接,指向的是/usr/sbin目錄
[root@centos7-1 ~]# ll /sbin
lrwxrwxrwx. 1 root root 8 Oct 2 20:55 /sbin -> usr/sbin
Linux目錄結(jié)構(gòu)-/home和/root目錄
/home和/root用于存放用戶相關(guān)數(shù)據(jù)的家目錄
- /home表示普通用戶的家目錄,例如/home/guanglei,guanglei是我在安裝系統(tǒng)時(shí)創(chuàng)建的普通用戶
- /root 表示管理員的家目錄,普通用戶是無權(quán)操作的,但是管理員可以進(jìn)入任何普通用戶的家目錄
以root賬號(hào)的登錄后,使用pwd命令查看當(dāng)前的目錄是/root
[root@centos8 ~]# pwd
/root
以普通賬號(hào)登錄后,使用pwd命令查看當(dāng)前的目錄是/home/guanglei
[guanglei@centos8 ~]$ pwd
/home/guanglei
普通用戶使用cd /root切換到root用戶的家目錄,系統(tǒng)會(huì)提示沒有權(quán)限。就像老百姓沒有權(quán)利訪問皇帝的家
[guanglei@centos8 ~]$ cd /root
-bash: cd: /root: Permission denied
Linux目錄結(jié)構(gòu)-/usr目錄
/usr目錄作用相當(dāng)于Windows系統(tǒng)中的C:Windows目錄,該目錄非常重要,如果操作不當(dāng)導(dǎo)致系統(tǒng)無法使用。
[root@centos8 ~]# tree -L 1 /usr
/usr
├── bin
├── games
├── include
├── lib
├── lib64
├── libexec
├── local
├── sbin
├── share
├── src
└── tmp -> ../var/tmp
/usr目錄下的子目錄說明
- /usr/local 軟件安裝目錄,相當(dāng)于Windows系統(tǒng)中的C:Program Files目錄 老運(yùn)維會(huì)將軟件安裝到該目錄
- /usr/bin 普通用戶使用的應(yīng)用程序
- /usr/sin 管理員用戶使用的應(yīng)用程序
- /usr/lib 啟動(dòng)時(shí)程序依賴的基本共享庫文件以及內(nèi)核模塊文件(/lib/modules)
- /usr/lib64 專用于x86_64系統(tǒng)上的輔助共享庫文件存放位置
使用ldd命令可以查看程序依賴哪些庫文件,如果庫文件被刪除那么會(huì)導(dǎo)致依賴該庫文件的所有程序無法使用
[root@centos8 ~]# ldd /bin/ls #查看ls命令依賴哪些庫文件
linux-vdso.so.1 (0x00007ffd01ffb000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fec0db4a000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007fec0d944000)
libc.so.6 => /lib64/libc.so.6 (0x00007fec0d57f000)
libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007fec0d2fb000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fec0d0f7000)
/lib64/ld-linux-x86-64.so.2 (0x00007fec0df97000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fec0ced7000)
從ldd /bin/ls目錄的輸出結(jié)果可以看出ls命令依賴的都是64位的庫文件
Linux目錄結(jié)構(gòu)-/boot目錄
/boot目錄存放的是系統(tǒng)啟動(dòng)相關(guān)的文件,例如引導(dǎo)文件存放目錄,內(nèi)核文件(vmlinuz)、引導(dǎo)加載器(bootloader, grub)都存放于此目錄,如果刪除/boot目錄,系統(tǒng)無法正常啟動(dòng)。
[root@centos8 ~]# ls /boot 查看/boot目錄下的文件信息
config-4.18.0-305.3.1.el8.x86_64
efi
grub2
initramfs-0-rescue-ba0ec2df3d1a4aa1aa035218668c6140.img
initramfs-4.18.0-305.3.1.el8.x86_64.img
loader
lost+found
System.map-4.18.0-305.3.1.el8.x86_64
vmlinuz-0-rescue-ba0ec2df3d1a4aa1aa035218668c6140
vmlinuz-4.18.0-305.3.1.el8.x86_64
Linux目錄結(jié)構(gòu)- /etc目錄
/etc目錄用于存放配置文件,后續(xù)所有服務(wù)(MySQL,redis等等)的配置文件都存放在該目錄中。
- /etc/sysconfig/network-scripts/ifcfg-ens33 目錄存放的是網(wǎng)絡(luò)配置文件
[root@centos8 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 # 查看網(wǎng)絡(luò)配置
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens33
UUID=0d0f57d1-1074-49dd-ad40-1f08395d9cae
DEVICE=ens33
ONBOOT=yes
- /etc/hostname 目錄存放系統(tǒng)主機(jī)名配置
[root@centos8 ~]# cat /etc/hostname # 查看主機(jī)名配置
centos8.ittimeline.net
- /etc/resolv.conf存放的是DNS客戶端配置文件
[root@centos8 ~]# cat /etc/resolv.conf # 查看DNS客戶端配置
# Generated by NetworkManager
search localdomain ittimeline.net
nameserver 10.0.0.2
Linux目錄結(jié)構(gòu)- /var和/tmp目錄
- /var 目錄用于存放一些變化的文件
- /var/log目錄用于存放日志文件
- /var/cache目錄用于存放應(yīng)用程序緩存數(shù)據(jù)目錄
[root@centos8 ~]# ls /var/log #查看系統(tǒng)日志文件列表
anaconda dnf.log messages sssd
audit dnf.rpm.log messages-20211010 swtpm
boot.log firewalld private tuned
boot.log-20211009 gdm qemu-ga vmware-network.1.log
boot.log-20211010 glusterfs rhsm vmware-network.2.log
btmp hawkey.log samba vmware-network.log
chrony hawkey.log-20211010 secure vmware-vgauthsvc.log.0
cron lastlog secure-20211010 vmware-vmsvc-root.log
cron-20211010 libvirt speech-dispatcher vmware-vmtoolsd-root.log
cups maillog spooler wtmp
dnf.librepo.log maillog-20211010 spooler-20211010 Xorg.9.log
/var/tmp目錄存放進(jìn)程產(chǎn)生的臨時(shí)文件
[root@centos8 ~]# ls /var/tmp
systemd-private-b32fa66c27ce40509b87d850fbe6ea71-bluetooth.service-qHyFVg
systemd-private-b32fa66c27ce40509b87d850fbe6ea71-colord.service-4Di4Dg
systemd-private-b32fa66c27ce40509b87d850fbe6ea71-ModemManager.service-VwHWoj
systemd-private-b32fa66c27ce40509b87d850fbe6ea71-rtkit-daemon.service-NsfeKh
- /tmp 系統(tǒng)臨時(shí)目錄 用于存放一些臨時(shí)文件
Linux目錄結(jié)構(gòu)-/dev目錄
/dev目錄用于存放設(shè)備文件,例如硬盤,光驅(qū)等等。
在/dev目錄下有幾個(gè)常用的特殊設(shè)備
- /deve/null 黑洞設(shè)備,只進(jìn)不出,類似于垃圾回收站
- /dev/random 生成隨機(jī)數(shù)的設(shè)備
[root@centos8 ~]# echo $RANDOM #產(chǎn)生一個(gè)隨機(jī)數(shù) 該隨機(jī)數(shù)由/dev/random設(shè)備產(chǎn)生
10852
[root@centos8 ~]# echo $RANDOM|md5sum #產(chǎn)生一個(gè)隨機(jī)數(shù),使用md5加密 該隨機(jī)數(shù)由/dev/random設(shè)備產(chǎn)生
fe8330279a460dacafed81c058b6b376 -
- /dev/zero 能源源不斷產(chǎn)生收據(jù),類似于取款機(jī),能隨時(shí)隨地取錢
[root@centos8 ~]# dd if=/dev/zero of=/tmp/data.txt bs=1M count=2048 #取2G的數(shù)據(jù)存儲(chǔ)到/tmp/data.txt文件中
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 0.969928 s, 2.2 GB/s
[root@centos8 ~]# ll -h /tmp/data.txt #以人性化的方式查看/tmp/data.txt文件信息
-rw-r--r--. 1 root root 2.0G Oct 10 10:40 /tmp/data.txt
Linux目錄結(jié)構(gòu)-/proc目錄
每個(gè)程序運(yùn)行起來之后被稱為進(jìn)程,系統(tǒng)會(huì)給每個(gè)進(jìn)程隨機(jī)分配一個(gè)編號(hào),即PID,在Windows的任務(wù)管理器的詳細(xì)信息中可以看到每個(gè)進(jìn)程的PID
/proc目錄是虛擬的文件系統(tǒng),如果對(duì)應(yīng)的進(jìn)程停止 ,則/proc目錄下的目錄會(huì)被刪除。
/proc目錄反映當(dāng)前系統(tǒng)正在運(yùn)行進(jìn)程的實(shí)時(shí)狀態(tài),類似于汽車正在運(yùn)行過程中的儀表板,能夠看到汽車的時(shí)速,油耗,公里數(shù)等等。
[root@centos8 ~]# systemctl status crond #查看crond服務(wù)的狀態(tài)
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2021-10-10 10:08:49 CST; 48min ago
Main PID: 1226 (crond)
Tasks: 1 (limit: 24608)
Memory: 1.1M
CGroup: /system.slice/crond.service
└─1226 /usr/sbin/crond -n
Oct 10 10:08:49 centos8.ittimeline.net systemd[1]: Started Command Scheduler.
Oct 10 10:08:49 centos8.ittimeline.net crond[1226]: (CRON) STARTUP (1.5.2)
Oct 10 10:08:49 centos8.ittimeline.net crond[1226]: (CRON) INFO (Syslog will be used instead of sendmail.)
Oct 10 10:08:49 centos8.ittimeline.net crond[1226]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 47% if used.)
Oct 10 10:08:49 centos8.ittimeline.net crond[1226]: (CRON) INFO (running with inotify support)
crond進(jìn)程的實(shí)時(shí)信息在/proc/1226目錄下,1226是crond服務(wù)的進(jìn)程編號(hào)。后續(xù)可以通過命令讀取該目錄獲取對(duì)應(yīng)的進(jìn)程信息
[root@centos8 ~]# ll /proc/1226
total 0
dr-xr-xr-x. 2 root root 0 Oct 10 10:46 attr
-rw-r--r--. 1 root root 0 Oct 10 10:46 autogroup
-r--------. 1 root root 0 Oct 10 10:46 auxv
-r--r--r--. 1 root root 0 Oct 10 10:08 cgroup
--w-------. 1 root root 0 Oct 10 10:46 clear_refs
-r--r--r--. 1 root root 0 Oct 10 10:08 cmdline
-rw-r--r--. 1 root root 0 Oct 10 10:08 comm
-rw-r--r--. 1 root root 0 Oct 10 10:46 coredump_filter
-r--r--r--. 1 root root 0 Oct 10 10:46 cpu_resctrl_groups
-r--r--r--. 1 root root 0 Oct 10 10:46 cpuset
lrwxrwxrwx. 1 root root 0 Oct 10 10:46 cwd -> /
-r--------. 1 root root 0 Oct 10 10:46 environ
lrwxrwxrwx. 1 root root 0 Oct 10 10:08 exe -> /usr/sbin/crond
dr-x------. 2 root root 0 Oct 10 10:08 fd
dr-x------. 2 root root 0 Oct 10 10:46 fdinfo
-rw-r--r--. 1 root root 0 Oct 10 10:46 gid_map
-r--------. 1 root root 0 Oct 10 10:46 io
-r--r--r--. 1 root root 0 Oct 10 10:46 limits
-rw-r--r--. 1 root root 0 Oct 10 10:08 loginuid
dr-x------. 2 root root 0 Oct 10 10:46 map_files
-r--r--r--. 1 root root 0 Oct 10 10:46 maps
-rw-------. 1 root root 0 Oct 10 10:46 mem
-r--r--r--. 1 root root 0 Oct 10 10:46 mountinfo
-r--r--r--. 1 root root 0 Oct 10 10:46 mounts
-r--------. 1 root root 0 Oct 10 10:46 mountstats
dr-xr-xr-x. 6 root root 0 Oct 10 10:46 net
dr-x--x--x. 2 root root 0 Oct 10 10:46 ns
-r--r--r--. 1 root root 0 Oct 10 10:46 numa_maps
-rw-r--r--. 1 root root 0 Oct 10 10:46 oom_adj
-r--r--r--. 1 root root 0 Oct 10 10:46 oom_score
-rw-r--r--. 1 root root 0 Oct 10 10:46 oom_score_adj
-r--------. 1 root root 0 Oct 10 10:46 pagemap
-r--------. 1 root root 0 Oct 10 10:46 patch_state
-r--------. 1 root root 0 Oct 10 10:46 personality
-rw-r--r--. 1 root root 0 Oct 10 10:46 projid_map
lrwxrwxrwx. 1 root root 0 Oct 10 10:46 root -> /
-rw-r--r--. 1 root root 0 Oct 10 10:46 sched
-r--r--r--. 1 root root 0 Oct 10 10:46 schedstat
-r--r--r--. 1 root root 0 Oct 10 10:08 sessionid
-rw-r--r--. 1 root root 0 Oct 10 10:46 setgroups
-r--r--r--. 1 root root 0 Oct 10 10:46 smaps
-r--r--r--. 1 root root 0 Oct 10 10:46 smaps_rollup
-r--------. 1 root root 0 Oct 10 10:46 stack
-r--r--r--. 1 root root 0 Oct 10 10:08 stat
-r--r--r--. 1 root root 0 Oct 10 10:46 statm
-r--r--r--. 1 root root 0 Oct 10 10:08 status
-r--------. 1 root root 0 Oct 10 10:46 syscall
dr-xr-xr-x. 3 root root 0 Oct 10 10:08 task
-rw-r--r--. 1 root root 0 Oct 10 10:46 timens_offsets
-r--r--r--. 1 root root 0 Oct 10 10:46 timers
-rw-rw-rw-. 1 root root 0 Oct 10 10:46 timerslack_ns
-rw-r--r--. 1 root root 0 Oct 10 10:46 uid_map
-r--r--r--. 1 root root 0 Oct 10 10:46 wchan
如果停止crond進(jìn)程,則該虛擬目錄則不存在
[root@centos8 ~]# systemctl stop crond #停止crond服務(wù)
[root@centos8 ~]# ll /proc/1226 #之前的/proc/1226目錄不存在了
ls: cannot access '/proc/1226': No such file or directory
再次啟動(dòng)crond服務(wù)后發(fā)現(xiàn)進(jìn)程編號(hào)是2482
[root@centos8 ~]# systemctl start crond
[root@centos8 ~]# systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2021-10-10 11:01:35 CST; 11s ago
Main PID: 2482 (crond)
Tasks: 1 (limit: 24608)
Memory: 1.0M
CGroup: /system.slice/crond.service
└─2482 /usr/sbin/crond -n
Oct 10 11:01:35 centos8.ittimeline.net systemd[1]: Started Command Scheduler.
Oct 10 11:01:35 centos8.ittimeline.net crond[2482]: (CRON) STARTUP (1.5.2)
Oct 10 11:01:35 centos8.ittimeline.net crond[2482]: (CRON) INFO (Syslog will be used instead of sendmail.)
Oct 10 11:01:35 centos8.ittimeline.net crond[2482]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 58% if used.)
Oct 10 11:01:35 centos8.ittimeline.net crond[2482]: (CRON) INFO (running with inotify support)
Oct 10 11:01:35 centos8.ittimeline.net crond[2482]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
然后又可以使用 ls /proc/2482命令 在/proc/2482 目錄下查看該進(jìn)程信息