一、Linux目录结构
树状目录结构:
以下是对这些目录的解释:
-
/bin: bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。
-
/boot: 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
-
/dev : dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
-
/etc: etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
-
/home: 用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。
-
/lib: lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
-
/lost+found: 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
-
/media: linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
-
/mnt: 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
-
/opt: opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
-
/proc: proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all -
/root: 该目录为系统管理员,也称作超级权限者的用户主目录。
-
/sbin: s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
-
/selinux: 这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
-
/srv: 该目录存放一些服务启动之后需要提取的数据。
-
/sys:
这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
-
/tmp: tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。
-
/usr: usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
-
/usr/bin: 系统用户使用的应用程序。
-
/usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。
-
/usr/src: 内核源代码默认的放置目录。
-
/var: var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
-
/run: 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
二、磁盘分区和挂载
Linux的分区是为了和整个文件系统相互匹配的,可以使用挂载的方式把一个分区和一个目录联系起来。
1、硬盘
Linux硬盘分为IDE硬盘和SCSI硬盘(常用)。
IDE硬盘,驱动器标识符位hdx~,hd表示分区所在设备的类型,也就是IDE硬盘,a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“~”代表分区,前四个分区用数字1到4表示,主分区或扩展分区,从5开始就是逻辑分区。
例:hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。
对于SCSI硬盘则标识为sdx~,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样
可以通过lsblk或者lsblk -f来查看设备的挂载情况。
2、挂载的案例
第一步:虚拟机添加硬盘
在【虚拟机】菜单中,选择【设置】,然后设备列表里添加硬盘,然后一路【下一步】,中间只有选择磁盘大小的地方需要修改,至到完成。然后重启系统(才能识别)!
第二步:分区
分区命令:fdisk/dev/sdb 开始对/sdb分区:
- m:显示命令列表
- p:显示磁盘分区同fdisk –l
- n:新增分区
- d:删除分区
- w:写入并退出
- 说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。
第三步:格式化磁盘
分区命令:mkfs -t ext4 /dev/sdb1其中ext4是分区类型
第四步:挂载和卸载
挂载:将一个分区与一个目录联系起来,语法格式:mount 设备名称 挂载目录
例如:mount /dev/sdb1 /newdisk
卸载:umount 设备名称 或者 挂载目录
例如:umount /dev/sdb1 或者 umount/newdisk
注意:用命令行挂载,重启后会失效
第五步:永久挂载
永久挂载:通过修改/etc/fstab实现挂载,添加完成后执行mount –a即刻生效。
3、磁盘情况查询
查询系统整体磁盘使用情况:df -h
[root@hspEdu01 /]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda2 17G 5.6G 11G 36% /
devtmpfs 976M 0 976M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 11M 980M 2% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 976M 134M 776M 15% /boot
tmpfs 199M 4.0K 199M 1% /run/user/42
tmpfs 199M 32K 199M 1% /run/user/0
查询指定目录的磁盘占用情况:du -h
查询指定目录的磁盘占用情况,默认为当前目录
- -s:指定目录占用大小汇总
- -h:带计量单位
- -a:含文件
- --max-depth=1:子目录深度
- -c:列出明细的同时,增加汇总值
[root@hspEdu01 /]# du -ha /home/aaa/
4.0K /home/aaa/bbb/ccc
8.0K /home/aaa/bbb
12K /home/aaa/
[root@hspEdu01 /]# du -a /home/aaa/
4 /home/aaa/bbb/ccc
8 /home/aaa/bbb
12 /home/aaa/
[root@hspEdu01 /]# du -ahc /home/aaa/
4.0K /home/aaa/bbb/ccc
8.0K /home/aaa/bbb
12K /home/aaa/
12K 总用量
[root@hspEdu01 /]# du -ahc --max-depth=1 /home/aaa/
8.0K /home/aaa/bbb
12K /home/aaa/
12K 总用量
一些常用指令示例:
- 统计/opt文件夹下文件的个数:
ls -l /opt | grep "^-"| wc-l--->grep通过正则表达式过滤只要以-开头的文件,wc -l是用于统计数量的 - 统计/opt文件夹下目录的个数:
ls -l /opt | grep "^d"| wc-l--->同上以d开头的是目录 - 统计/opt文件夹下文件的个数,包括子文件夹里的:
ls -lR /opt | grep "^-" | wc-l - 统计/opt文件夹下目录的个数,包括子文件夹里的:
ls -lR /opt | grep "^d" | wc-l - 以树状显示目录结构tree目录:
tree /home/,注意,如果没有tree,则使用yum install tree安装
三、网络配置
1、NAT网络配置原理图
Linux可以连接windows的vmnet,vmnet和外部相连,这样就可以连接互联网了,所以Linux也可以连接互联网。
2、查看网络IP和网关
可以在VMware上,点击左上角【编辑】查看【虚拟网络编辑器】
这里如果把子网IP修改一下,重启后,子网ip就变了。
查看ip就用ipconfig和ifconfig即可。
3、Linux网络环境配置
以前出现过隔个几天ip地址就变了,测试项目的时候总是要改配置,非常麻烦,其实可以通过修改网络环境配置来设置ip不变。
ip有两种方式,一种是自动获取,一种是指定ip。在哪里设置呢?
应用程序-->系统工具-->设置-->网络-->ipv4可以查看是自动获取ip
那怎么指定ip呢,直接在配置文件中修改即可:
编辑vi /etc/sysconfig/network-scripts/ifcfg-ens33,把下面这段粘进去,修改自己的ip地址即可
BOOTPROTO=static
#IP地址
IPADDR=192.168.200.130
#网关
GATEWAY=192.168.200.2
#域名解析器
DNS1=192.168.200.2
注意要把上面的DHCP删除掉,此时还需要把vmnet8的ip修改成同一个网段。
重启网络服务:service network restart和reboot都行,记得把xshell的ip修改一下,要不登录不了。
4、设置主机名和host映射
[root@hspEdu01 ~]# hostname
hspEdu01
这就是主机名,可以修改/etc/hostname,修改主机名,然后reboot一下即可。
希望通过主机名可找到某个linux系统,这时就需要映射关系了。
- linux可以在/etc/hosts中修改:192.168.200.1 DESKTOP-NF7R8DC,然后测试能ping通
- windows可以在C:\Windows\System32\drivers\etc\hosts中修改:192.168.200.130 linux设置的主机名-->这样从windows去ping linux设置的主机名就能ping通了
主机名解析过程分析
上面的hosts是一个文件,其中记录了主机名和ip的映射关系。
这里就要提一下DNS了,它叫做Domain Name System,域名系统。
步骤:
- 浏览器先检查浏览器缓存中有没有该域名解析IP地址,有就先调用这个IP完成解析;如果没有,就检查DNS解析器缓存,如果有直接返回IP完成解析。这两个缓存,可以理解为本地解析器缓存。
- 一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存他的IP地址(DNS解析记录).如在cmd窗口中输入:
- ipconfig/displaydns:DNS域名解析缓存
- ipconfig/flushdns:手动清理dns缓存
- 如果本地解析器缓存没有找到对应映射,检查系统中hosts文件中有没有配置对应的域名IP映射,如果有,则完成解析并返回。
- 如果本地DNS解析器缓存和hosts文件中均没有找到对应的IP,则到域名服务DNS进行解析域
四、进程与服务
1、查看进程
在LINUX中,每个执行的程序都称为一个进程。每一个进程都分配一个ID号(pid,进程号)。
ps指令是用来查看当前系统有哪些在执行的进程的。
语法:ps【选项】,其中选项-a表示显示当前终端的所有进程信息,-u表示以用户的格式显示进程信息,-x表示显示后台进程运行的参数,如果想过滤可以使用grep指令。
- user:表示进程执行的用户
- PID:进程号
- %cpu:占用cpu百分比
- %mem:占用物理内存的百分比
- VSZ:占用虚拟内存的情况
- RSS:占用物理内存的情况
- TTY:终端
- STAT:运行状态;S表示休眠,r表示允许
- start:开始时间
- time:进程占用的cpu时间
- command:启动进程的指令是什么
ps的其他选项:-e表示显示所有进程(可以显示父进程),-f表示以全格式显示。
ps -ef就是全部显示:
[root@oliver001 ~]# ps -ef | grep sshd
root 7478 1 0 18:20 ? 00:00:00 /usr/sbin/sshd -D
root 10111 7478 0 20:00 ? 00:00:00 sshd: root@pts/0
root 10629 10115 0 20:49 pts/0 00:00:00 grep --color=auto sshd
进程号7478的父进程是1号,说明是由1号创建的,10111是由7478创建的...依此类推。
2、终止进程
可以使用kill或killall来杀死进程。
基本语法:kill【选项】进程号(功能描述:通过进程号杀死进程);
killall 进程名称(功能描述:通过进程名称杀死进程,支持通配符)。
常用的选项:-9:强迫进程立即停止。
3、查看进程树
pstree【选项】:可以更加直观的查看进程信息。
常用选项:
-p:显示进程的pid
-u:显示进程的所属用户
4、服务管理
服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysqld,sshd防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点。
基本语法:service 服务名 [start | stop | restart | reload | status]
在CentOS7.0后很多服务不再使用service,而是systemctl,查看现在service指令还能查看哪些服务可以在ls -l/etc/init.d 中查看
比如:service netconsole status
5、服务的运行级别
Linux系统有7种运行级别(runlevel):常用的是级别3和5
- 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
- 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
- 运行级别2:多用户状态(没有NFS),不支持网络
- 运行级别3:完全的多用户状态(有NFS),无界面,登陆后进入控制台命令行模式
- 运行级别4:系统未使用,保留
- 运行级别5:X11控制台,登陆后进入图形GUI模式
- 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
通过chkconfig指令可以给服务设置各个运行级别的自启动/关闭。在CentOS7.0后很多服务使用systemctl。
基本语法:chkconfig --list [| grep xxx ]
这个可以查看各个服务在各个级别是否开启。
基本语法:chkconfig --level 几 服务名 on/off 开启与否。
6、新版systemctl
基本语法:systemctl [start | stop | restart | status] 服务名。
systemctl指令管理的服务在/usr/lib/systemd/system查看。
systemctl list-unit-files [ | grep 服务名]:查看服务开机启动状态,grep可以进行过滤
systemctl enable 服务名:设置服务开机启动
systemctl disable 服务名:关闭服务开机启动
systemctl is-enabled 服务名:查询某个服务是否是自启动的
案例:ls -l /usr/lib/systemd/system | grep fire
[root@oliver001 ~]# ls -l /usr/lib/systemd/system | grep fire
-rw-r--r--. 1 root root 657 10月 31 2018 firewalld.service
然后:
[root@oliver001 ~]# systemctl list-unit-files | grep firewalld
firewalld.service enabled
7、防火墙的机制
在真正的生产环境,往往需要将防火墙打开,但问题来了,如果我们把防火墙打开,那么外部请求数据包就不能跟服务器监听端口通讯。这时,需要打开指定的端口。比如80、22、8080等,这个又怎么做呢?
- 打开端口:firewall-cmd--permanent--add-port=端口号/协议
- 关闭端口:firewall-cmd--permanent--remove-port=端口号/协议
- 重新载入,才能生效:firewall-cmd--reload
- 查询端口是否开放:firewall-cmd--query-port=端口/协议
CentOS7.0运行级别简化为了3和5两种,所以不再用设置级别了。
8、动态监控进程
top与ps命令很相似。它们都用来显示正在执行的进程。Top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的的进程。
基本语法:top【选项】
如何查看呢?
- 20:11:12-->表示当前时间
- 4:47-->系统执行时间
- 2 users-->2个用户
- load average-->表示负载均衡
其他操作:
执行过程中按上面这些字母即可,注意大小写。
监视特定用户:执行top后,输入“u”回车,再输入用户名,即可。
终止指定进程:执行top后输入“k”回车,再输入要结束的进程ID号。
指定系统状态更新的时间(每隔10秒自动更新),默认是3秒:top -d 10。
9、监控网络状态
基本语法:netstat【选项】。
选项说明:
-an:按一定顺序排列输出;
-p:显示哪个进程在调用;