Linux系统与网络

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统与网络相关的知识,希望对你有一定的参考价值。

参考技术A 先回顾下一下网络硬件的的基础概念( Hub, bridge, switch, router, gateway)

Linux天生就是为网络而存在的,每台装有Linux 系统的计算机都可以实现,Router/Gateway 功能

Linux 内核默认关闭网络数据包的转发功能,遇到不匹配的数据网络数据包,直接丢弃,只要修改内核参数,打开ip_forward配置,放行netfilter防火墙的FORWARD链 (转发数据包时对应此规则链中的策略) , 如果这台机器配置公网地址的网络IP,就可与作为其他主机的网关

例如在创建好的一个子网中,默认10.0.2.1 是被分配为默认的网关,如果想要子网中其他主机的网关,参考操作如下:
host1: eth0 10.0.2.2 eth1 123.x.x.x

hostN:

完成以上配置,子网中的hostN主机就默认使用host1作为网关出口,登陆hostN主机验证,如果配置正确,可以返回 bing.com 域名的IP和 html 页面

在某些受限的网络环境,比如云平台VPC网络,默认路由无法更改,可以使用 gre 协议来打通,结合策略路由表(ip rule/ ip route table ),就可以实现网络流量的转发,打通GRE隧道参考:

host1 执行命令:

host2 执行命令:

host1 执行命令:

host2 执行命令:

相比openvpn,ipsec等老牌vpn软件,wireguard是Linux 内核5.6版本后内置支持的vpn,这里以ubuntu为例子,来介绍wireguard的安装配置

wg-quick up wg0

深入浅出Linux操作系统权限管理与网络配置

✍ 、目录脑图

  • 文章参考韩顺平老师的Linux2021年度课程:B站链接直达
  • 当前采用 centos 7.6 虚拟机环境搭建,之后进行服务器真实环境记录

深入浅出Linux操作系统权限管理与网络配置

1、组管理与权限管理

在Linux中的每个用户必须属于一个组,不能独立于组外。在Linux中每个文件有所有者、所在组、其他组的概念。

  1. 所有者
  2. 所在组
  3. 其他组
  4. 改变用户所在的组

1.1、文件/目录 所有者

一般为文件的创建者,谁创建了改文件,谁就称为该文件的所有者。

1.2.1、查看文件的所有者

指令: ls -ahl

1.2.2、修改文件所有者

指令:chown 用户名 文件名

  1. 使用 root 创建一个文件 apple.txt,然后将其所有者修改为 tom
chown tom apple.txt

1.2、组的创建

基本语法:groupadd 组名

  1. 创建一个组 monster
groupadd monster
  1. 创建一个用户 fox,并放入到 monster 组中
useradd -g monster fox

1.3、文件/目录 所在组

当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组(默认)

1.3.1、查看文件/目录所在组

基本指令: ls -ahl

1.3.2、修改文件/目录所在的组

基本指令: charp 组名 文件名

  1. 使用 root 用户创建文件 orange.txt,看看当前这个文件属于哪个组,然后将这个文件所在组,修改到 fruit 组
groupadd fruit
touch orange.txt
charp fruit orange.txt

1.4、其他组

除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组。

1.5、改变用户所在组

在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限可以改变某个用户所在的组。

基本语法:

  • usermod -g 新组名 用户名
  • usermod -d 目录名 用户名 改变该用户登录的初始目录。特别说明:用户需要有进入到新目录的权限。
  1. 将 zwj 这个用户从原来所在组,修改到 wudang 组
usermod -g wudang zwj

1.6、权限的基本介绍

我们使用 ls -l 指令查看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EMFxAsvI-1641567756093)(韩顺平Linux(三)].assets/2.png)

0-9位说明:

  • 第 0 位确定文件类型
    • l 是链接,相当于 windows 的快捷方式
    • d 是目录,相当于 windows 的文件夹
    • c 是字符设备文件,鼠标键盘等
    • b 是块设备,比如硬盘
  • 第1-3位确定所有者(改文件的所有者)拥有该文件的权限。 User
  • 第4-6位确定所属组(同用户组的)拥有该文件的权限。 Group
  • 第7-9位确定其他用户拥有该文件的权限。 Other

1.6.1、rwx权限详解

1、rwx 作用到文件

  1. r 代表可读 read:可以读取,查看
  2. w 代表可写 write:可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
  3. x 代表可以执行 execute: 可以被执行

2、rwx作用到目录

  1. r 代表可读 read:可以读取,ls查看目录内容
  2. w 代表可写 write:可以修改,对目录内创建+删除+重命名目录
  3. x 代表可以执行 execute: 可以进入该目录

3、实例

-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc

例如上述显示内容:10个字符确定不同用户能对文件干什么

  1. 第一个字符代表文件类型: - l d c b

  2. 其余字符3个一组(rwx) 读® 写(w) 执行(x)

    1. 第一组 rwx:文件拥有者的权限是 读、写和执行
    2. 第二组 rw-:与文件拥有者同一组的用户权限是读、写,但是不能执行
    3. 第三组 r–:不与文件拥有者同组的其他用户的权限是读,不能写和执行
  3. 1 :文件:硬连接数 或者 目录:子目录数

  4. root: 用户

  5. root: 组

  6. 1213:文件大小(字节),如果是文件夹,显示 4096字节

  7. Feb 2 09:39 :最后修改日期

  8. abc:文件名

可用数字表示:r=4,w=2,x=2,因此rwx=4+2+1=7

1.6.2、修改权限

通过 chmod 指令,可以修改文件或者目录的权限。

1、第一种方式修改

第一种方式:+、-、= 变更权限

  • u:所有者

  • g:所有组

  • o:其他人

  • a:所有人(u,g,o的总和)

基本语法:

  • chomod u=rwx,g=rx,o=x 文件/目录名 功能描述(使文件/目录的所有者拥有rwx的权限,使文件/目录的所有组的权限为 rx,使文件/目录的其他人的权限为 x)
  • chmod o+w 文件/目录名 功能描述(使文件/目录的其他人的权限增加 w)
  • chmod a-x 文件/目录名 功能描述(使文件/目录的所有人的权限x去掉)
  1. 给 abc 文件的所有者读写执行的权限,给所在组读执行权限,给其他组读执行权限。
chmod u=rwx,g=rx,o=rx abc
  1. 给 abc 文件的所有者除去执行的权限,增加组写的权限
chmod u-x,g+w abc
  1. 给 abc 文件的所有用户添加读的权限
chmod a+r abc

2、第二种方式

第二种方式是通过数字变更权限

r = 4,w = 2,x = 1,rwx =4+2+1=7

基本语法:

  • chmod u=rwx,g=rx,o=x 文件目录名
  • 相当于 chmod 751 文件目录名
  1. 将 /home/abc.txt 文件的权限修改成 rwxr-xr-x,使用数字方式实现
chmod 755 /home/abc.txt

1.6.3、修改文件所有者

基本语法:

  • chown newowner 文件/目录改变所有者
  • chown newowner:newgroup 文件/目录 改变所有者和所在组
  • -R 如果是目录,则使其下所有子文件或目录递归生效
  1. 将 /home/abc.txt 文件的所有者修改成 tom
chown tom /home/abc.txt
  1. 将 /home/test 目录下所有的文件和目录的所有者都修改成 tom
chown -R tom /home/test

1.6.4、修改文件/目录所在组

基本语法:

  • chgrp newgroup 文件/目录 改变所在组
  1. 将 /home/abc.txt 文件的所在组修改成 shaolin
groupadd shaolin
chgrp shaolin /home/abc.txt
  1. 将 /home/test 目录下所有的文件和目录的所在组都修改成 shaolin
chgrp -R shaolin /home/test

2、定时任务调度

2.1、crond指令

任务调度:是指系统在某个时间执行的特定的命令或程序(有点像闹钟)

任务调度分类:

  1. 系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
  2. 个别用户工作:个别用户可能希望执行某些程序,比如对 mysql 的数据库的备份

基本语法:crontab [选项]

选项说明
-e编辑 crontab 定时任务
-l查询 crontab 任务
-r删除当前用户所有的crontab任务
  1. 设置个人任务调度,执行 crontab -e 命令然后回车
  2. 接着输入任务到调度文件
*/1**** ls -l /etc/ > /tem/to.txt

上述命令的意思是 每小时的每分钟执行 ls -l /etc/ > /tem/to.txt 命令,这句命令的意思是 把etc目录下面的内容以列表的形式显示到终端然后将其重定向到 tem/to.txt 文件

2.2、参数细节说明

5个占位符的说明

占位符含义范围
第一个 *一小时当中的第几分钟0-59,如果写的是*/1,代表每一分钟都执行
第二个*一天当中的第几小时0-23
第三个*一个月当中的第几天1-31
第四个*一年当中的第几月1-12
第五个*一周当中的星期几0-7(0-7都代表星期日)

特殊符号说明

特殊符号含义
*代表任何时间。比如第一个*就代表一小时中每分钟都执行一次的意思
,代表不连续时间。比如0 8,12,16 * * *命令,就代表在每天的8点0分,12点0分,16点0分都执行一次命令
-代表连续的时间范围,比如0 5 * * 1-6命令,代表在周一到周六的凌晨5点0分执行命令
*/n代表每隔多久执行一次。比如 */10 * * * *,代表每隔10分钟就执行一遍命令

特殊时间执行案例

时间含义
45 22 * * *在22点45分执行命令
0 17 * * 1每周1的17点0分执行命令
0 5 1,15 * *每月1号和15号的凌晨5点0分执行命令
40 4 * * 1-5每天的凌晨4点,每隔10分钟执行一次命令
*/10 4 * * *每天的凌晨4点,每隔10分钟执行一次命令
0 0 1,15 * 1每月1号和15号,每周1的0点0分都会执行命令。
注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱。
  1. 每隔一分钟,就将当前的日期信息,追加到 /tmp/mydate 文件中
*/1 * * * * date>>/tmp/mydate
  1. 每隔一分钟,将当前日期和日历都追加到 /home/mycal 文件中
vim /home/my.sh

给 my.sh 写入内容 date>>/home/mycalcal>>/home/mycal

然后给 my.sh 增加执行权限:chmod u+x /home/my.sh

crontab -e 写入*/1 * * * * /home/my.sh

  1. 每天凌晨 2:00 将 mysql 数据库 testdb,备份到文件中。
0 2 * * * mysqldump -u root -proot testdb > /home/db.bak

mysqldump -u root -p密码 数据库 > /home/db.bak

2.3、crond相关指令

  • conrtab -r 终止任务调度
  • crontab -l 列出当前有哪些任务调度
  • service crond restart 重启任务调度

2.4、at定时任务

  1. at 命令是一次性定时计划任务,at 的守护进程 atd 会以后台模式运行,检查作业队列来运行
  2. 默认情况下,atd 守护进程每 60s 检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业
  3. at 命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
  4. 在使用 at 命令时,一定要保证 atd 进程的启动,可以使用相关指令来查看
ps -ef | grep atd [可以监测atd是否在运行]

基本语法:

  • at [选项] [时间]
  • Ctrl + D 结束 at 命令的输入,输出两次
选项说明
-m当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
-iatq的别名
-datrm的别名
-v显示任务将被执行的时间
-c打印任务的内容到标准输出
-V显示版本信息
-q<队列>使用指定的队列
-f<文件>从指定文件读入任务而不是从标准输入读入
-t<时间参数>以时间参数的形式提交要运行的任务

2.4.1、at时间定义

at指定时间的方法:

  1. 接受在当天的 hh:mm(小时,分钟)式的时间指定。假如该时间已过去,那么久放在第二天执行。例如: 04:00

  2. 使用 midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午四点)等比较模糊的词语来指定时间

  3. 采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。例如:12pm

  4. 指定命令执行的具体日期,指定格式为 month day(月 日) 或者 mm/dd/yy(月/日/年) 或者 dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。例如:04::00 2023-11-23

  5. 使用相对计时法。指定格式为:now+count time-units,now 就是当前时间,time-units 是时间单位,这里能够是 minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count 是时间的数量,几天,几小时。例如: now+5minutes

  6. 直接使用 today(今天)、tomorrow(明天)来指定完成命令的时间

  7. 2天后的下午5点执行 /bin/ls/home

at 5pm + 2 days

  1. atq 命令来查看系统中没有执行的工作任务
atq

  1. 明天17点钟,输出时间到指定文件内,比如 /root/data100.log
at 5pm tomorrow
  1. 2分钟后,输出时间到指定文件内,比如 /root/date200.log
at now + 2 minutes
  1. 删除已经设置的任务,atrm编号

    atrm 4 表示将 job 队列,编号为4的job删除。

3、磁盘分区、挂载

  1. Linux 来说无论有多个分区,分给哪一目录使用,它归根接底只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。

  2. Linux 采用了一种叫做"载入"的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。

  3. 示意图

如上图,把分区挂载到目录,我们在系统中进入这个目录,就如同进入了这个分区硬盘。

3.1、硬盘说明

  1. Linux 硬盘分 IDE 硬盘和 SCSI 硬盘,目前基本上是 SCSI 硬盘
  2. 对于IDE硬盘,驱动器标识符为 “hdx~”,其中hd 表明分区所在设备的类型,这里是指 IDE 硬盘了。 x 为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),~ 代表分区,前四个分区用数字1到4表示,它们是主分区或者扩展分区,从5开始就是逻辑分区。例如,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。
  3. 对于SCSI硬盘则标识为 “sdx~” ,SCSI 硬盘是用 sd 来表示分区所在设备的类型的,其余则和 IDE 硬盘的表示方法一样。

3.1.1、查看所有设备挂载情况

基本命令:lsblk 或者 lsblk -f

3.2、增加硬盘

下面我们以增加一块硬盘为例来熟悉下磁盘的相关指令和深入理解磁盘分区、挂载、卸载的概念。

如何增加一块硬盘:

  1. 虚拟机添加硬盘

  2. 分区

  3. 格式化

  4. 挂载

  5. 设置可以自动挂载

3.2.1、增加硬盘

在虚拟机菜单中,选择设置,然后设备列表里添加硬盘,然后一路下一步,中间只有选择磁盘大小的地方需要修改。然后重启系统。

这里我们简单演示,所以只增加1个G的硬盘

还要记得重启系统

重启完后输入lsblk 就可以看到我们的新硬盘 sdb 了,下面就可以进行分区了。

3.2.2、分区

分区命令: fdisk /dev/sdb 开始对 /sdb 分区

  • m 显示命令列表
  • p 显示磁盘分区,同fdisk -l
  • n 新增分区
  • d 删除分区
  • w 写入并退出

说明:开始分区后输入 n,新增分区,然后选择 p,分区类型为主分区。两次回车默认剩余全部空间,最后输入 w 写入分区并退出,若不保存退出输入q。

3.2.3、格式化磁盘

在挂载目录前,我们还需要格式化硬盘,UUID 就是硬盘被格式化后的唯一标识符,我们可以看到新分区没有UUID,也就是还未格式化。

使用命令 mkfs -t ext4 /dev/sdb1 对sdb1分区进行格式化,ext4 是分区类型

这样就可以看到UUID了

3.2.4、挂载

挂载:将一个分区与一个目录联系起来

基本语法:mount 设备名称 挂载目录

mount /dev/sdb1 /newdisk

取消挂载:

基本语法:umount 设备名称/挂载目录

umount /dev/sdb1 或者 umount /newdisk

用命令行挂载,重启后会失效

永久挂载: 通过修改 /etc/fstab 实现挂载,添加完成后,执行 mount -a 即可生效

3.3、磁盘情况查询

3.3.1、查询系统整体磁盘使用情况

基本语法:df -h

3.3.2、查询指定目录的磁盘占用情况

基本语法:du -h /目录

查询指定目录的磁盘占用情况,默认为当前目录:

  • -s 指定目录占用大小汇总
  • -h 带计量单位
  • -a 含文件
  • –max-depth=1 子目录深度
  • -c 列出明细的同时,增加汇总值
  1. 查询 /opt 目录的磁盘占用情况,深度为1
du -hac --max-depth=1 /opt

3.4、磁盘情况-工作实用指令

  1. 统计 /opt 文件夹下文件的个数
ls -l /opt |grep "^-" | wc -l

  1. 统计 /opt 文件夹下目录的个数
ls -l /opt |grep "^d"| wc -l
  1. 统计 /opt 文件夹下文件的个数,包括子文件夹里的
ls -lR /opt |grep "^-"| wc -l
  1. 统计 /opt 文件夹下目录的个数,包括子文件夹里的
ls -lR /opt |grep "^d" | wc -l
  1. 以树状显示目录结构 tree 目录,注意,如果没有 tree,则使用 yum install tree 安装
tree /opt [以树状显示opt目录]

4、网络配置

4.1、Linux网络配置原理图

例如,我们的Windows电脑安装了Linux虚拟机,Windows电脑在教室,我们在Linux虚拟机上打开www.baidu.com ,是可以访问的,为什么我们的虚拟机可以访问到百度呢?

我们用windows主机ping虚拟机的ip,是可以连接成功的

我们用虚拟机pingwindows主机的ip,

事实上,我们的windows主机还有一个无线网卡,这个网卡是真正可以和互联网互联的

原理图如下:

这样我们来回答一下,为什么虚拟机Linux可以访问互联网:虚拟机通过windows的vmnet8,使用无线网卡代理经过局域网网关,再去找到我们真正的Internet网。

4.2、查看网络IP和网关

4.2.1、查看虚拟网络编辑器和修改IP地址

  1. 在VMware 编辑->虚拟网络编辑器

4.2.2、查看网关

4.3、查看windows环境中的VM网络配置

指令:ipconfig

4.4、查看linux环境中的网络配置

指令:ifconfig

4.5、ping测试主机之间网络连通性

基本语法:ping 目的主机 (功能描述:测试当前服务器是否可以连接目的主机)

  1. 测试当前服务器是否可以连接百度
ping www.baidu.com

4.6、Linux网络环境配置

4.6.1、第一种方法:自动获取

说明:登录后,通过界面来设置自动获取ip,特点:Linux启动后会自动获取IP,缺点是每次自动获取的ip地址可能不一样

  1. 打开应用程序->系统工具->设置

  1. 网络->设置

  1. 这里可以查看我们的ip是自动还是手动获取的

4.6.2、第二种方法:指定ip

直接修改配置文件来指定IP,并可以连接到外网(工作中使用)

vi /etc/sysconfig/network-scripts/ifcfg-ens33

要求:将ip地址配置成静态的,比如:ip地址为 192.168.200.130

  1. 首先以 vi 或者 vim 的方式进入

  1. 将下述代码粘贴
#IP地址
IPADDR=192.168.200.130
#网关
GATEWAY=192.168.200.2
#域名解析器
DNS1=192.168.200.2

ifcfg-ens33 文件说明

DEVICE=eth0接口名(设置,网卡)
HWADDR=00:0C:2x:6x:0x:xxMAC地址
TYPE=Ethernet网络类型(通常是Ethemet)
UUID=随机id
ONBOOT=yes系统启动的时候网络接口是否有效(yes/no)
BOOTPROTO=staticIP的配置方法[none|static|bootp|dhcp ] (引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议)
IPADDR=192.168.200.130IP地址
GATEWAY=192.168.200.130网关
DNSL=192.168.200.2域名解析器
  1. 将IP的配置方法修改为静态分配,之后保存并退出。

  1. 打开编辑->虚拟网络编辑器

  1. 将虚拟机的子网IP更改

  1. 网关也更改

  1. 重启网络服务或者重启系统生效

    • 重启网络服务:service network restart
    • 重启系统:reboot
  2. 重启完成,我们查看ip

  1. 查看windows主机的Vmnet8的ip

  1. 此时就算更改成功了,我们要改Xshell连接虚拟机的ip和网关才能连接入Linux系统

4.7、设置主机名和hosts映射

4.7.1、设置主机名

  1. 为了方便记忆,可以给 linux 系统设置主机名,也可以根据需要修改主机名
  2. 指令 hostname (功能描述:查看主机名)
  3. 修改文件 /etc/hostname 指令
  4. 修改后,重启生效

4.7.2、设置hosts映射

如何通过主机名能够找到(比如ping)某个linux系统,也就是说我们不ping ip,而是ping 系统名称。

  1. 对于windows系统

    C:\\Windows\\System32\\drivers\\hosts 文件指定即可

  1. 对于Linux系统

    /etc/hosts 文件指定

这样我们在ping主机名时就会自动去ping ip 地址。

4.7.3、主机名解析过程分析(Hosts、DNS)

Hosts是一个文本文件,用来记录IP和Hostname(主机名)的映射关系。

DNS,就是Domain Name System 的缩写,翻译过来就是域名系统。是互联网上作为域名和IP地址相互映射的一个分布式数据库。

4.7.4、应用实例

应用实例:用户在浏览器上输入了 www.baidu.com

  1. 浏览器先检查浏览器缓存中有没有该域名解析IP地址,有就先调用这个IP完全解析,如果没有,就检查DNS解析器缓存,如果有直接返回IP完成解析。这两个缓存,可以理解为本地解析器缓存。

  2. 一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存他的IP地址(DNS解析目录),如在cmd窗口中输入

    ipconfig/displaydns DNS 域名解析缓存

    ipconfig/flusdns 手动清理DNS缓存

  3. 如果本地服务器缓存没有找到对应映射,检查系统中 hosts 文件中有没有配置对应的域名IP映射,如果有,则完成解析并返回

  4. 如果本地DNS解析器缓存和hosts文件中均没有找到对应的IP,则到域名服务DNS(互联网)进行解析域名

以上是关于Linux系统与网络的主要内容,如果未能解决你的问题,请参考以下文章

Linux操作系统——网络配置与SSH远程

深入浅出Linux操作系统权限管理与网络配置

Linux系统命令与CPU硬盘内存网络状态监控

linux网络操作系统的优点,与传统的网络操作系统相比,Linux操作系统有许多特点,下列对于Liunx的主要特点描述错误的是( )。...

Linux系统将服务器时间与网络时间同步

2017-2018-2 20179225 《网络攻防与实践》 第8周作业