Linux | 目录结构及重要文件

Linux | 目录结构及重要文件

??根下目录结构知识

目录 说明(用★表示重要程度)
/bin 英文system binaries的缩写,常用二进制命令所在目录,如今/bin目录已成为/usr/bin的软链接★★★★★
/boot Linux的内核及系统引导程序所需的文件目录。安装系统分区的时候一般要单独分一个boot分区,大小可为256MB~1024MB,该分区的数据增长很小,/boot目录就是引导分区的挂载点
/dev 设备文件的目录,比如声卡、磁盘、光驱,等等★★★
/etc 1. 二进制软件安装包( yum、 rpm) 等配置文件的默认路径
2. CentOS6下服务启动命令的存放目录,主要存放在/etc/init.d/下★★★★★
/home 普通用户的家目录,默认数据存放目录★★
/lib 启动系统和运行命令所需的共享库文件和内核模块存放目录
/lost+found 当档案系统发生错误时, 将一些遗失的片段放置到这个目录下
/media 可移除的媒体的挂载点,例如,CD-ROM、U盘等的挂载,使用频率较低
/mnt 英文Mount point的缩写,用作文件系统的临时挂载点,也可以作为CD-RoM、U盘等的挂载,使用频率较高★★★
/opt 被保留用于安装额外的应用软件包目录,如通过源码包安装的软件,可以通过“./configure -prefix=/op1/"命令设置将软件安装在/opt下,但并非必须,具体视习惯或规范而定
/proc 操作系统运行时,进程信息及内核信息(比如CPU.硬盘分区、内存信息等)均存放在此。/proc 目录是虚拟文件系统的挂载点,并不是真正的文件系统,系统运行时,很多信息都在这个目录下★★★★★
/root Linux超级权限用户root的家目录
/sbin 英文system binaries的缩写,大多涉及系统管理命令的存放,是超级权限用户root可执行命令的存放地,这个目录与/usr/sbin. /usr/X11 R6/sbin或/usr/ocal/sbin目录是相似的;系统级命令,一般通过sudo让普通用户执行这些命令,如fdisk. reboot. fsck.halt等★★★
/tmp 临时文件目录,有时用户运行程序的时候,会产生临时文件。/tmp就是用来存放临时文件的,权限比较特殊。/var/tmp目录与这个目录比较相似,这个目录可以用作Linux系统的回收站★★★
/usr 英文解释是第二层次标准,这是系统存放程序的目录,比如命令、帮助文件等。这个目录下有很多文件和目录。当安装一个Linux发行版官方提供的软件包时,大多安装在这里。/usr一般被认为是user resource或uinx software resource 的缩写,/usr下面有两个重要的子目录应用:
●/usr/local: 默认软件安装目录★★★
●/usr/src :程序源码目录
/var 英文variable data的缩写,这个目录的内容是经常变动的, /var下有/var/log,这是用来存放系统日志的目录,系统日志路径为/var/log/messages。 /var/www 用于存放定义Apache服务器站点的目录; /va/ib用来存放一些库文件,比如MySQL及MySQL数据库的存放地等★★★
/srv srv可以视为service的缩写,可用于存放为用户提供服务的数据所在的目录,如,www、ftp数据等
/sys 与/proc类似,也是虚拟的文件系统,用于存放内核等信息的目录,包含内核、总线、设备、模块组、电源选项等

??/etc系统初始化及设置相关重要文件

??/etc/sysconfig/network-scripts/ifcfg-eth0:网卡配置文件

这是Linux系统第一块网卡的配置文件所在的路径,其中第一块网卡配置文件的结尾标识为eth0,第二块为eth1,以此类推。当通过执行命令nmtui(CentOS6为setup)来修改网卡配置时,实际上就是在修改这个文件,因此也可以通过直接编辑该文件的方式实现对网卡配置的更改。

配置完网卡之后,可以通过重启网络服务(systemctl restartnetwork)来使得所有网卡的配置文件生效,如果只需让某个单独的eth0网卡配置生效,则可以通过命令ifdown eth0&&ifupeth0(停掉及启动eth0网卡命令)来实现。下面是网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0的内容详解:

[root@MyLinux ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
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
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=50286faa-7d87-4102-a399-fbe5d9abaef4
DEVICE=enp0s3
ONBOOT=yes

更多网卡配置相关的知识请执行less/usr/share/doc/initscripts-*/sysconfig.txt查看。

??/etc/resolv.conf:Linux系统DNS客户端配置文件

DNS分为服务端和客户端两个部分,本文讲解的是系统上网客户端层面的配置,可通过修改/etc/resolv.conf配置DNS客户端。

配置/etc/resolv.conf方法包含如下两种。第一种是通过图形界面进行配置,实际上是同时修改 /etc/sysconfig/network-scripts/ifcfg-eth0 和 /etc/resolv.conf 文件。第二种方法是直接编辑 /etc/resolv.conf 文件,文件的内容如下:

[root@MyLinux ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 223.5.5.5
nameserver 223.6.6.6

需要特别注意的是,在网卡配置文件里配置的DNS会覆盖/etc/resolv.conf里的DNS,因此,在新版系统(Cent OS6和Cent OS7)中,一般只配置网卡配置文件的DNS,这种方法也是笔者推荐的配置方法,如果不想在网卡配置里进行配置,则可以选择在/etc/resolv.conf里进行配置,这个配置文件的功能已经变弱了,详细配置情况可以执行man resolv.conf获取细节说明。

??/etc/hostname:主机名配置文件

/etc/hostname为CentOS7系统主机名的永久配置文件(CentOS6以前为/etc/sysconfig/network),修改主机名可采用如下两种方法。

方法1:临时修改法

[root@MyLinux ~]# hostname www 		#临时生效
[root@MyLinux ~]# cat /etc/hostname
oldboy 								#主机名配置文件未改变

要想永久生效,需要编辑/etc/hostname进行修改。

方法2:永久修改法

[root@MyLinux ~]# hostnamectl set-hostname www 	#临时生效
[root@MyLinux ~]# cat /etc/hostname
www                             				#主机名配置文件随之改变

提示:要想立即生效,需要退出当前链接重新登录,此外,还可以通过nmtui来修改主机名。

??/etc/hosts:系统本地的DNS解析文件

/etc/hosts的作用是设定用户IP与域名的对应解析表,相当于本地(局域网内)的DNS解析文件。一般在企业里进行开发或测试工作时会使用host域名解析。在企业服务器的Linux环境下,hosts的解析在机房服务器的互相调用中也很常用。下面给出一个门户网站阿里巴巴的解析的真实案例,通过该案例可以看到hosts文件在企业里的作用。开发、产品、测试等人员将hosts文件用于已通过正式的域名测试但未上线的产品www.etiantian.org,示例如下:

192.168.2.7 www.etiantian.org

此外,在企业里,服务器之间的调用也可以通过域名(内部的DNS)来进行,这种方式可以方便运维人员独立进行服务迁移,而不依赖于开发等人员。主机名的命名必须专业,也就是说要反映出这条解析记录的明确用途,以下是/etc/hosts门户解析案例示例代码:

taobao:
172.38.18.23 realtime-search.config-vip.taobao.com
172.65.54.47 tpbk2configlavel.config-host.taobao.com
ailibaba:
172.26.58.40 vafd.china.alibaba.com
172.23.54.47 normy.vip.xyi.cn.alidc.net

当然,解析的记录数量太大,在hosts里修改就会比较麻烦,因此大公司还可能会有内部DNS服务,来管理大量主机名/域名和IP之间的解析记录。

本地系统也要使用hosts解析,示例代码如下:

[root@MyLinux ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
localdomain4 localhost oldboy   #IPV4本地名称解析记录,十分重要
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
localdomain6 localhost oldboy   #IPV6本地名称解析记录,十分重要

提示:企业中,集群服务器中每台服务器的主机名和自身IP都要在所有服务器的host里做对应解析。例如,下面是笔者教学Web集群实战项目中的若干IP和主机名的对应记录,要配置在每一台服务器中的/etc/hosts里,具体代码如下:

[root@MyLinux ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.1.5  lb01
172.16.1.6  lb02
172.16.1.7  web01
172.16.1.8  web02
172.16.1.31 nfs01
172.16.1.41 backup
172.16.1.51 db01 db01.gg.org
172.16.1.61 m01

??/etc/fstab:配置开机设备自动挂载的文件

/etc/fstab是一个重要的文件,其作用是配置开机设备自动挂载。前文已经讲解过了,Linux的设备必须要挂载才能使用,而刚开机时,磁盘都是没有挂载的,因此,系统开机会加载/etc/fstab文件,实现对系统分区的自动挂载,当然,管理员也可以利用这个文件实现对新增磁盘或分区的开机自动挂载功能。/etc/fstab文件一共分为如下6列:

[root@MyLinux ~]# cat /etc/fstab
# /etc/fstab
# Created by anaconda on Wed Sep  9 16:17:15 2020
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root   /       xfs     defaults    0 0
UUID=..................   /boot   xfs     defaults    0 0
/dev/mapper/centos-home   /home   xfs     defaults    0 0
/dev/mapper/centos-swap   swap    swap    defaults    0 0

上述代码段中6列内容的具体说明如下。

  • 第1列为设备的名称或者UUID或磁盘标签,可通过blkid查看设备uuid。
  • 第2列为设备的挂载点,即访问设备的入口。
  • 第3列为设备的文件系统类型。详细内容可通过manmount查看或参见后文。
  • 第4列为挂载的属性,详细内容可通过man mount查看或参见后文。
  • 第5列为是否进行备份。
  • 第6列为开机时是否做磁盘检查,0为不做检查,1、2为做检查。

这个/etc/fstab文件在后文还会进行讲解,读者也可以执行 man fstab 深入了解。

??/etc/rc.local:存放开机自启动程序命令的文件

/etc/rc.local是用于存放开机自启动程序命令的文件(CentOS6里的chkconfig常用来管理yum/rpm安装的程序或服务的开机自启动,CentOS7里则使用systemctl命令进行管理)。有时IT人员自己开发的程序需要开机启动,也会习惯性地将启动命令放入/etc/rc.local。Linux开机时会将/etc/rc.local里的内容全部执行一遍,这是Linux运维人员常用的文件。

特别提示:从CentOS7开始,/etc/rc.local必须要先分配执行权限,里面的脚本才能执行,另外/etc/rc.local是一个软链接文件,它的真实文件所在地为/etc/rc.d/rc.local,因此在使用tar等工具备份的时候要严格注意。

??/etc/inittab:系统启动时设定运行级别等配置的文件

/etc/inittab在早期(Centos6以前)是一个指导Linux开机启动的关键文件(CentOS7已将该文件废弃),用于设定系统启动时init进程将系统设置成什么样的运行级别(runlevel),以及加载运行级别对应的启动文件。在CentOS6里,其仅负责设定系统启动时init进程将系统设置成什么样的运行级别,其他的功能已分拆到其他文件里了。Linux系统运行级别的说明如下:

  1. 系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
  2. 单用户工作状态,root权限,用于系统维护,禁止远程登陆
  3. 多用户状态(没有NFS)
  4. 完全的多用户状态(有NFS),登陆后进入控制台命令行模式
  5. 系统未使用,保留
  6. X11控制台,登陆后进入图形GUI模式
  7. 系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

可以通过runlevel命令,查看当前系统的运行级别,示例代码如下:

[root@MyLinux ~]# runlevel
N 3 #N为上一次运行级别,3为当前运行级别

临时修改运行级别(立刻生效)的示例代码如下:

[root@MyLinux ~]# init 4
[root@MyLinux ~]# runlevel
3 4
[root@MyLinux ~]# init 3
[root@MyLinux ~]# runlevel
4 3

如果想要永久修改运行级别,则需要修改/etc/inittab文件最后一行的id:3:initdefault:部分,其中数字部分就是对应的运行级别,需要重启系统使其生效。

下面是CentOS6以前的inittab文件,其中不但包含运行级别配置,还包含加载系统初始化脚本、加载各自的运行级别对应脚本、禁止三键重启、加载不同级别的TTY以及桌面设置等的配置信息,具体如下:

[root@MyLinux ~]# cat /etc/inittab
# inittab   This file describes how the INIT process should set up
#           the system in a certain run-Level.
# Author:   MiqueL van Smoorenburg, <miqueLs@drinkel.nL.mugnet.org>
#           Modified for RHS Linux by Marc Ewing and Donnie Barnes
# Default runLevel. The runLeveLs used by RHS are:
#启动时对Linux设定固定的运行级别
id:3:initdefault:
# System initialization.(系统初始化)
si::sysinit:/etc/rc.d/rc.sysinit
#以下是对应7个运行级别的目录
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
# Trap CTRL-ALT-DELETE (禁止三键重启)
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells US power has failed, assume we have a few minutes
# of power Left.Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.()
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -C "Power Restored; Shutdown Cancelled"
# Run gettys in standard runlevels (不同级别下加载tty终端的设置)
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
# Run xdm in runLevel 5 (加载桌面程序的设置)
x:5:respawn:/etc/X11/prefdm -nodaemon

特别补充:上述讲解都是CentOS7以前版本的系统,CentOS7以后版本的变化很大,具体帮助在/etc/inittab文件里。

??/etc/profile及/etc/bashrc:配置系统的环境变量/别名等的文件

环境变量如PS1TMOUTHISTSIZEHISTFILESIZE都可以存放在/etc/profile/etc/bashrc这个文件中,并且全局生效。~/.bash_profile~/.bashrc表示在当前用户中生效。

上述环境变量文件的生效顺序如图6-8所示,该图展示了登录Shell读取环境变量文件的流程。

Linux | 目录结构及重要文件

??/etc/profile.d/:用户登录后执行的脚本所在的目录

/etc/profile.d为加载系统登录程序的目录,是登录后执行的脚本所在地,目录里面的程序以文件的形式存在(一般以“*.sh”为扩展名),需要能够执行。在《跟老男孩学Linux运维:Shell编程实战》一书中,讲解跳板机项目时,就是通过加载/etc/profile.d里面的脚本来登录的,登录后即出现跳板机的管理页面。

??/etc/issue和/etc/issue.net:配置在用户登录终端前显示信息的文件

/etc/issue和/etc/issue.net文件的作用是将用户登录真实终端(接显示器)前的信息显示出来,/etc/issue文件的内容展示如下:

[root@MyLinux ~]# cat /etc/issue
\S
Kernel \r on an \m

在企业服务器中,为了防止泄露服务器版本,一般会将issue文件的内容清空。

??/etc/init.d:软件启动程序所在的目录(CentOS7以前)

这个目录可用来存放通过yum或rpm工具安装的软件的默认启动程序(启动脚本)的目录。例如,sshd服务的/etc/init.d/sshd restart(相当于是service sshd restart),IT人员人为开发的软件服务启动程序也可以放置在这里,在CentOS7中该目录也已经废弃不用了,统一由systemctl取代,例如,重启sshd服务的命令为systemctl restartsshd.service。

??/etc/motd:配置用户登录系统之后显示提示内容的文件

/etc/motd文件配置的是用户登录系统之后显示的内容,相当于登录后的一个提示作用,默认是空的。

??/etc/redhat-release:声明Red Hat版本号和名称信息的文件

/etc/redhat-release是用于声明Red Hat版本号和名称信息的文件,如果需要查看系统的版本等信息,可以读取这个文件进行查看。示例代码如下:

[root@MyLinux ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)

??/etc/sysctl.conf:Linux内核参数设置文件

这是一个涉及Linux系统性能调优的极其重要的文件,作用是设置Linux内核参数,可用来替代系统默认运行的内核参数,让系统运行得更高效。管理员可以通过sysctl-a命令查询可以设置的内核参数信息,修改sysctl.conf完毕后,执行sysctl-p使得修改的信息生效,这部分内容比较复杂,在后文Linux基础优化章节会进行深入阐述,读者可以执行man sysctl.conf命令查看该配置文件的相关帮助。设置相关参数后的运行情况可以通过读取/proc下的信息文件进行查看。CentOS7下的内核配置,还可以通过不同的文件分类进行设置,示例代码如下:

[root@MyLinux ~]# ls -ld /etc/sysctl.d/ /usr/lib/sysctl.d
drwxr-xr-x. 2 root root 28 9月   9 16:18 /etc/sysctl.d/
drwxr-xr-x. 2 root root 85 9月   9 16:18 /usr/lib/sysctl.d 

??/etc下重要目录文件的汇总小结

Linux | 目录结构及重要文件

??/usr目录的重要知识介绍

??/usr/local/:编译安装软件默认的位置路径

这个目录一般是用来存放用户自编译安装软件的目录的,对于通过源码包安装的软件,如果没有特别指定安装目录的话,一般会安装在这个目录中,相当于Windows系统下的C:\Programfiles。

??/usr/src:存放源码文件的目录

这个目录一般被用来存放在网上下载的软件源代码,当然了,这也是可选的,你可以根据需要进行更改。

??/var目录下的路径知识

??/var/log:记录系统及软件运行信息文件所在的目录

/var/log目录中包含了大量记录系统及软件服务运行的日志文件,通过这些日志文件,我们可以知道系统的运行情况及故障原因,其中典型的文本日志请参见表6-4。

Linux | 目录结构及重要文件

??/var/log/messages:系统级别日志文件

/var/log/messages是系统默认的日志文件,这个文件非常重要,当系统及软件遇到运行故障时,可以查看这个日志文件以获取故障信息,该文件按周自动轮循(一周来一刀,每周切割一次)。示例代码如下:

[root@MyLinux ~]# ls -l /var/log/messages*
-rw-------. 1 root root   6182 10月 28 10:23 /var/log/messages 
-rw-------. 1 root root 993840 10月 28 03:05 /var/log/messages-20201022

上述轮询日志由/etc/logrotate.conf和/etc/logrotate.d/syslog控制。

??/var/log/secure:用户登录信息日志文件

这是一个有关系统安全的日志文件,日志中会记录“谁,在什么时候,从哪登录到系统,登录是否成功”等信息。ssh、telnet、ftp等服务的用户登录信息都会记录在此。示例代码如下:

[root@MyLinux ~]# cat /var/log/secure
Sep  9 16:22:56 localhost polkitd[699]: Loading rules from directory /etc/polkit-1/rules.d
Sep  9 16:22:56 localhost polkitd[699]: Loading rules from directory /usr/share/polkit-1/rules.d
Sep  9 16:22:56 localhost polkitd[699]: Finished loading, compiling and executing 2 rules

该文件与messages文件一样,也是按周自动轮循的。示例代码如下:

[root@MyLinux ~]# ls -l /var/log/secure*
-rw-------. 1 root root 23778 10月 28 10:23 /var/log/secure
-rw-------. 1 root root 23778 10月 28 03:05 /var/log/secure-20201022

??/var/log/dmesg:记录硬件信息加载情况的日志文件

当硬件及系统内核出现问题时,可以查看这个日志文件,在解决问题时没准会有额外的收获,读者也可以通过dmesg命令来收集相关信息,为能读懂的人提供解决问题的依据。示例代码如下:

[root@MyLinux ~]# dmesg>MyLinux.log
[root@MyLinux ~]# tail -5 MyLinux.log
[    9.517838] IPv6: ADDRCONF(NETDEV_UP): enp0s3: link is not ready
[    9.520546] e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[    9.523390] IPv6: ADDRCONF(NETDEV_UP): enp0s3: link is not ready
[    9.523398] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s3: link becomes ready
[    9.855646] nf_conntrack version 0.5.0 (7928 buckets, 31712 max)

提示:系统开机加载完硬件后,会执行dmesg将信息输入到/var/log/dmesg中。

??/proc下的重要路径知识

Linux | 目录结构及重要文件

Linux | 目录结构及重要文件

上一篇:Linux下PHP 应用提速工具--KCachegrind[整理学习]


下一篇:asp.net读取Excel文件的两种方法,NPOI方法