Linux的目录结构及主要的系统文件介绍
一、Linux的目录结构
linux目录结构的特点
1、Linux系统的所有目录都是一个有层次的倒立着的树状目录结构(倒挂树形结构),“/”根是所有目录的顶点,对于Linux的目录来说,一切从根开始。
2、不同目录下的数据可以跨越不同的磁盘分区或不同的磁盘设备,设备可以随意挂载到任意目录上使用。
3、所有的目录都是按照一定的类别有规律地进行组织和命名的。
4、没有挂载到目录上的磁盘,相当于没有门和窗户的监狱,不能被使用。磁盘等设备需要挂载后才能正常使用。
5、挂载点是磁盘访问的入口,是一个目录。
6、相对路径与绝对路径具有如下关系:绝对路径是指以根为起始点的路径,例如/tmp、/opt;相对路径是指相对于非“/”路径的路径,即路径开头没有“/”斜线,例如etc/sysconfig、opt/tmp等,是相对于当前路径(执行pwd可查看)的路径。
二、Linux主要系统文件
1./etc/sysconfig/network-scripts/ifcfg-eth0:网卡配置文件
这是Linux系统第一块网卡的配置文件所在路径,其中第一块网卡配置文件结尾标识为eth0,第二块为eth1,以此类推。
当通过执行命令setup→“network config-uration”来修改网卡配置时,实际上就是在改这个/etc/sysconfig/network-scripts/ifcfg-eth0文件,因此也可以通过直接编辑该文件的方式来实现对网卡配置的更改。
setup命令来配置网卡IP
配置完网卡后,可以通过重启网络服务/etc/init.d/network restart让所有网卡的配置文件生效,如果只需让某个单独的eth0网卡配置生效,可以通过命令ifdown eth0&&ifup eth0(停掉及启动eth0网卡命令)来实现。
下文是网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0的内容详解:
[root@localhost~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0#<===第一块网络的逻辑名称,第二块为eth1,也有em等字符标志。 HWADDR=00:0c:29:9d:80:af#<==以太网硬件地址即MAC地址,如果是VMware克隆的虚拟机无法启动网卡,可以毫不犹豫地删除此项。 TYPE=Ethernet#<==上网类型,目前基本都是以太网。
UUID=b82b131d-025c-42e0-8075-db61fe61f2aa<==通用的唯一识别码 (Universally Unique Identifier),如果是VMware克隆的虚拟机无法启动网卡,可以去除此项。 ONBOOT=yes#<==这个地方要为yes,才能保证下次开机启动激活网卡设备。 NM_CONTROLLED=yes#<==是否通过Network Manager管理网卡设备。 BOOTPROTO=none#<==启动协议,获取配置方式,有none、bootp、dhcp三个选项。 IPADDR=202.1.1.203#<==这是虚拟机桥接模式,局域网Linux服务器的固定IP。 NETMASK=255.255.255.0#<==子网掩码,用来规划网络位和主机位,一般为255.255.255.0。IPV6INIT=no GATEWAY=202.1.1.1#<==局域网上网的网关地址。DNS1=202.1.1.1#<==主DNS,这里默认会覆盖以及优先于/etc/resolv.conf的配置生效。 IPV6INIT=no #<==是否支持IPV6。
USERCTL=no
2./etc/resolv.conf: Linux系统DNS客户端配置文件
DNS,全称为Domain Name System,它在网站的运行中起到了至关重要的作用,其主要作用是负责把网站域名解析为对应的IP地址,例如:把www.etiantian.org解析为对应的IP地址记录(如1.1.1.1)。这个从域名到IP的解析过程,称作A记录,即Address Record。
配置/etc/resolv.conf的方法有如下两种。
第一种是通过图形界面配置,依次选择setup→“network configura-tion”→“DNS configuration”,即可完成配置。
第二种方法就是直接编辑/etc/resolv.conf文件,文件的内容如下:
[root@localhost ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 202.1.1.1
3.主机名配置文件
/etc/sysconfig/network 为CentOS6系统主机名的永久配置文件
/etc/sysconfig/network为Linux系统主机名的永久配置文件,内容如下:
[root@localhost ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=yaokaka<===修改yaokaka
永久修改主机名有如下两种方法。
一是直接编辑/etc/sysconfig/network进行修改。
二是依次执行setup→“network configuration”→“DNS configuration”来更改主机名。
上述修改需要重启服务器才能在命令行体现出修改效果,因此工作中除了这两种方法以外,还可以通过命令临时修改Linux命令行下的主机名显示,但需要重新登录系统才能生效。修改命令如下:
[root@localhost ~]# hostname yaokaka
/etc/hostname为CentOS7系统主机名的永久配置文件
centos7修改主机名
[root@localhost ~]# hostnamectl set-hostname yaokaka
4./etc/hosts:系统本地的DNS解析文件
/etc/hosts的作用是设定用户IP与名字(或域名)的对应解析表,相当于本地(局域网内)的DNS解析文件。
Linux系统下的这个/etc/hosts类似C:\WINDOWS\system32\drivers\etc\hosts文件,一般在企业里的开发或测试工作里会使用host域名解析。
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
5./etc/fstab:配置开机设备自动挂载的文件
/etc/fstab是一个重要的文件,作用是配置开机设备自动挂载。前文已经讲解了,Linux的设备必须要挂载才能使用,而刚开机时,磁盘都是没有被挂载的,因此,系统开机会加载/etc/fstab文件,实现对系统分区的自动挂载,当然,管理员也可以利用这个文件实现对新增磁盘或分区的开机自动挂载功能。
/etc/fstab文件一共分为如下六列:
UUID=567aaa18-3e84-473b-95a1-216326375eb3 / ext4 defaults 1 1 UUID=95e0c606-028a-4a46-acef-3333fab4c1ee /boot ext4 defaults 1 2 UUID=afdf1987-5e39-4a5b-a74d-75db9689c39b swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0
#第1列为设备的名称、UUID或者磁盘标签,可以通过blkid查看设备uuid。
#第2列为设备的挂载点,即访问设备的入口。
#第3列为设备的文件系统类型。
#第4列为挂载的属性
#第5列为是否进行备份。
#第6列是否开机时做磁盘检查,0为不做检查,1、2为检查。
6./etc/rc.local:存放开机自启动程序命令的文件(相当与windows的开机启动项)
/etc/rc.local是用于存放开机自启动程序命令的文件(chkconfig常用来管理yum/rpm安装的程序或服务的开机自启动)。有时IT人员自己开发的程序需要开机启动,也会习惯把启动命令放入/etc/rc.local中,实现开机启动这些程序。Linux开机时会把/etc/rc.local里的内容全部执行一遍,这是Linux运维人员常用的文件。
从CentOS7开始,/etc/rc.local必须要先分配执行权限,里面的脚本才能执行,另外/etc/rc.local是一个软链接文件,它的真实文件所在地为/etc/rc.d/rc.local,因此在使用tar等工具备份的时候要严格注意。
7./etc/inittab:系统启动设定运行级别等配置的文件
/etc/inittab在早期(Centos6以前)是一个指导Linux开机启动的关键文件,用于设定系统启动时init进程把系统设置成什么样的运行级别(runlevel),以及加载运行级别对应的启动文件。在CentOS6里仅负责设定系统启动时的运行级别,其他的功能已分拆到其他文件里了。
简单地说,运行级别就是Linux系统的不同状态,从CentOS6起inittab文件里仅剩下一个设定运行级别了。
[root@localhost ~]# cat /etc/inittab # inittab is only used by upstart for the default runlevel. #<==只用来设定默认运行级别了。 # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # System initialization is started by /etc/init/rcS.conf #<==只用来设定默认运行级别了。 # # Individual runlevels are started by /etc/init/rc.conf#<==只用来设定默认运行级别了。 # #Ctrl-Alt-Delete is handled by/etc/init/control-alt-delete.conf #<==只用来设定默认运行级别了。 # # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf, #<==终端也转移了。 # with configuration in /etc/sysconfig/init. # # For information on how to write upstart event handlers, or how # upstart works, see init(5), init(8), and initctl(8). # # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault: Linux系统运行级别的说明如下: # 0 关机(请不要把系统运行级别设置为0) # 1 单用户模式(root用户密码忘记,可用此模式找回) # 2 没有NFS,多用户模式 # 3 命令行模式 文本模式(企业级服务器核心运行状态) # 4 未使用 # 5 图形化模式 桌面模式 X11(桌面个人版系统运行状态) # 6 重启(不要把系统运行级别设置为6)
可以通过runlevel命令,查看当前系统的运行级别,示例如下: [root@localhost ~]# runlevel N 3 N 3 #<==N为上一次的运行级别,3为当前的运行级别。 临时修改运行级别(立刻生效)的示例如下: [root@localhost ~]# init 5 如果想要永久修改运行级别,需要修改/etc/inittab文件最后一行的id:3:initdefault:部分,其中数字部分就是对应的运行级别,需要重启系统生效
CentOS7以后版本的变化很大,具体帮助就在/etc/inittab文件里
# inittab is no longer used when using systemd
# 当使用systemd方式启动系统时,inittab文件不再使用了。 # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # 在此文件中添加任何配置,都不起作用了。 # Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target # 本文件中的Ctrl-Alt-Delete3键重启功能在/usr/lib/systemd/system/ctrl-alt-del.target中 # systemd uses 'targets' instead of runlevels. By default, there are two main targets: # systemd启动方式使用targets,而不是runlevel,默认情况下有两个主要的targets。 # multi-user.target: analogous to runlevel 3 #多用户文本模式,3运行级别。 # graphical.target: analogous to runlevel 5 #图形模式,5运行级别。 # To view current default target, run: systemctl get-default # 若要查看当前的默认运行级别,则运行systemctl get-default命令。 # To set a default target, run:# systemctl set-default graphical.target
# 若要设置一个默认的运行级别,则运行systemctl set-default TARGET.target。
8./etc/profile及/etc/bashrc:配置系统的环境变量/别名等的文件
环境变量如PS1、TMOUT、HISTSIZE、HISTFILESIZE都可以存放在/etc/profile或/etc/bashrc文件中,并且全局生效。~/.bash_profile及~/.bashrc表示在当前用户中生效。
9./etc/profile.d:用户登录后执行的脚本所在的目录
/etc/profile.d为加载系统登录程序的目录,目录里面的程序以文件的形式存在(一般以*.sh为扩展名),但要可执行权限。
10./etc/issue和/etc/issue.net:配置在用户登录终端前显示信息的文件
[root@node1 ~]# cat /etc/issue.net \S Kernel \r on an \m
在企业服务器中,为了防止泄露服务器版本,一般会把把issue文件的内容清空。
11./etc/init.d:软件启动程序所在的目录
这个目录用来存放通过yum或rpm工具安装的软件默认启动程序(启动脚本)的目录。例如:sshd服务、/etc/init.d/sshd restart(相当于是service sshd restart)等,此外IT人员人为开发的软件服务启动程序也可以放置在这里。在CentOS7中该目录也已经废弃不用了,统一由systemctl取代,例如,重启sshd服务的命令为systemctl restart sshd.service
12./etc/motd:配置用户登录系统之后显示提示内容的文件
/etc/motd文件配置的是用户登录系统之后显示的内容,相当于登录后的一个提示作用,默认是空的。
13./etc/redhat-release:声明Red Hat版本号和名称信息的文件
/etc/redhat-release是用于声明Red Hat版本号和名称信息的文件,如果需要查看系统的版本等信息,可以读取这个文件查看。
[root@node1 ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core)
14./etc/sysctl.conf:Linux内核参数设置文件
这是一个涉及Linux系统性能调优的极其重要的文件,作用是设置Linux内核参数,可用来替代系统默认运行的内核参数,让系统运行得更高效。管理员可以通过sysctl-a命令查询可以设置的内核参数信息。修改sysctl.conf完毕后,执行sysctl-p使得修改的信息生效,这部分内容比较复杂,在后文Linux基础优化章节会进行深入阐述,读者可以执行man sysctl.conf命令查看该配置文件的相关帮助,设置相关参数后的运行情况可以通过读取/proc下的信息文件查看.
15./etc下重要目录文件的汇总小结
/etc/sysconfig/neteork-scrpts/ifcfg-th0 网卡配置***** /etc/resolv.conf DNS客户端配置文件*** /etc/sysconfig/network 主机名配置文件** /etc/hosts 系统本地DNS解析文件**** /etc/fstab 开机设备自动挂载文件***** /etc/rc.local 存放开机自启动程序命令的文件***** /etc/inittab 系统运行级别的配置文件*** /etc/init.d /etc/init.d软件驱动程序所在的目录*** /etc/profile;/etc/bashrc 系统环境变量、别名配置文件*** /etc/profile.d 用户登录后执行的脚本所在目录 /etc/issue;/etc/issue.net 配置在用户登录终端前显示信息的文件 /etc/motd 配置在用户登录终端后显示信息的文件 /etc/redhat-release 声明RedHat版本号和名称信息的文件 /etc/sysctl.conf 配置内核参数信息的文件***** /etc/group 用户组名的相关信息 /etc/passwd 账号信息文件 /etc/shadow 密码信息文件 /etc/sudoers sudo命令配置文件 /etc/login.defs 所有用户登录时的默认配置
三、usr目录的重要知识介绍
1./usr/local/:编译安装软件默认的位置路径
这个目录一般是用来存放用户自编译安装软件的目录的,对于通过源码包安装的软件,如果没有特别指定安装目录的话,一般会安装在这个目录中,相当于Windows系统下的c:\Program files。
2./usr/src:存放源码文件的目录
这个目录一般被用来存放在网上下载的软件源代码,当然了,这也是可选的,你可以根据需要进行更改。
/var目录下的路径知识
1./var/log:记录系统及软件运行信息文件所在的目录
/var/log目录里有大量记录系统及软件服务运行的日志文件,通过这些日志文件可以知道系统运行情况及故障原因,
messages 文本文件 系统日志文件
secure 文本文件 安全日志文件
dmesg 文本文件 硬件信息加载情况日志文件
cron 文本文件 定时任务日志文件
wtmp 二进制文件 记录登陆者信息的文件,用last命令读取
lastlog 二进制文件 记录用户近期登录的情况,用lastlog命令读取
2./var/log/messages:系统级别日志文件
/var/log/messages是系统默认的日志文件,这个文件非常重要,当系统及软件遇到运行故障时,可以通过查看这个日志文件获取故障信息,该文件按周自动轮询(一周来一刀,每周切割一次)。
[root@localhost ~]# ls -l /var/log/messages* -rw-------. 1 root root 959664 Feb 14 14:13 /var/log/messages -rw-------. 1 root root 613494 Jan 14 02:53 /var/log/messages-20190114 -rw-------. 1 root root 124932 Jan 27 09:48 /var/log/messages-20190127 -rw-------. 1 root root 1003818 Feb 3 14:04 /var/log/messages-20190203 -rw-------. 1 root root 217612 Feb 9 09:30 /var/log/messages-20190210
上述轮询日志由/etc/logrotate.conf和/etc/logrotate.d/syslog控制。
3./var/log/secure:用户登录信息日志文件
这是一个有关系统安全的日志文件,日志中会记录“谁,在什么时候,从哪登录到系统,登录是否成功”等信息。ssh、telnet、ftp等服务的用户登录信息都会记录在此。
root@localhost ~]# ls -l /var/log/secure -rw-------. 1 root root 11408 Feb 14 15:53 /var/log/secure [root@localhost ~]# cat /var/log/secure|head -5 Feb 10 10:14:45 localhost sshd[13474]: Accepted password for root from 202.1.1.2 port 7618 ssh2 Feb 10 10:14:45 localhost sshd[13474]: pam_unix(sshd:session): session opened for user root by (uid=0) Feb 10 14:17:14 localhost su: pam_unix(su-l:session): session opened for user ywx by root(uid=0) Feb 10 14:17:59 localhost su: pam_unix(su-l:session): session closed for user ywx Feb 10 14:18:03 localhost su: pam_unix(su-l:session): session opened for user ywx by root(uid=0)
该文件和messages文件一样,也是按周自动轮询的
4./var/log/dmesg:记录硬件信息加载情况的日志文件
当硬件及系统内核出问题时,可以看看这个日志文件,在解决问题时没准有额外的收获。读者也可以通过dmesg命令来收集相关信息,给能读懂的人提供解决故障问题的依据。
[root@node1 ~]# dmesg |tail -10
[ 9.037636] type=1305 audit(1600751544.908:3): audit_pid=5369 old=0 auid=4294967295 ses=4294967295 res=1
[ 9.469337] NET: Registered protocol family 40
[ 9.894034] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 9.895417] vmxnet3 0000:0b:00.0 eth0: intr type 3, mode 0, 2 vectors allocated
[ 9.896011] vmxnet3 0000:0b:00.0 eth0: NIC Link is Up 10000 Mbps
[ 9.956423] IPv6: eth0: IPv6 duplicate address fe80::49eb:10a8:b61f:5d91 used by 00:0c:29:e8:c7:e0 detected!
[ 10.019047] IPv6: eth0: IPv6 duplicate address fe80::49eb:10a8:b61f:5d91 used by 00:0c:29:c7:f0:b1 detected!
[ 10.137088] IPv6: eth0: IPv6 duplicate address fe80::851b:b36b:7b12:690b used by 00:0c:29:1d:32:37 detected!
[ 10.907450] IPv6: eth0: IPv6 duplicate address fe80::851b:b36b:7b12:690b used by 00:0c:29:e8:c7:e0 detected!
[ 199.737617] random: crng init done
5./proc下的重要路径知识
/proc是Linux系统的一个重要虚拟文件系统,记录着内核和进程方方面面的信息,它是一个很重要的信息宝库,
/proc/cpuinfo 当前CPU信息文件 /proc/meminfo 当前内存信息文件 /proc/loadavg 当前的系统平均负载文件 /proc/mounts 当前设备挂载列表信息文件 /proc/interrupts 当前系统中断信息文件