Linux服务器期末复习总结

news/2025/3/5 6:13:30/

一、NFS+DHCP

NFS 网络文件系统

网络文件系统 NFS(Network File System)

在不同系统之间实现文件共享,提供文件进行共享的系统是主机,共享这些文件的计算机是客户机。甚至一台计算机可以是主机也可以是客户机。

1.基础题

1.安装NFS,对共享目录进行权限分配,并对配置文件进行设置

(1)CentOS 7系统实现NFS服务功能首先必须安装nfs-utils和rpcbind软件包

yum install -y nfs-utils rpcbind

(2)开启服务,开放服务端口,显示共享目录状态

systemctl start rpcbind
systemctl start nfs

(3)Centos系统防火墙默认没有开放NFS服务的端口号。要开放NFS服务相关的端口号,通过rpcinfo -p查询。

/*
firewall-cmd --permanent --add-port=111/tcp
firewall-cmd --permanent --add-port=111/udp
firewall-cmd --permanent --add-port=2049/tcp
firewall-cmd --permanent --add-port=2049/udp
firewall-cmd --permanent --add-port=20048/tcp
firewall-cmd --permanent --add-port=20048/udp
*/firewall-cmd --permanent --add-service=nfsfirewall-cmd --reloadfirewall-cmd --list-all

(4)创建共享目录

[root@localhost ~]# mkdir /home/pub
[root@localhost ~]# ls -a /home/pub
[root@localhost ~]# cd /home/pub
[root@localhost pub]# echo "Hello" > a.txt
[root@localhost pub]# chmod -Rf 777 /home/pub

(5)NFS服务器的配置文件/etc/exports

vi /etc/exports
进入后添加
/home/pub	*(sync,ro)
或
/home/pub	192.168.71.133(sync,rw)
或
/home/pub	192.168.1.0/24(sync,rw)sync 数据同步
ro	只读
rw	读写配置完后记得关闭再打开过nfs服务
systemctl stop nfs
systemctl start nfs

(6)显示共享目录状态

showmount -e 192.168.71.133

(7)客户端挂载NFS服务器中目录

mkdir -p /mnt/share
mount 192.168.71.133:/home/pub /mnt/sharels /mnt/share

(8)查看和卸载已挂载的目录(课本多的)

mount | grep nfs
umount /mnt/share

2.拓展题

(1)指定NFS客户端地址的配置详细说明

客户端地址具体地址说明
授权单一客户端访问NFS192.168.56.101一般情况下,生产环境中此配置不多
授权整个网段可访问NFS192.168.56…0/24其中的24等同于255.255.255.0,指定网段为生产环境中最常见的配置。配置简单、维护方便
授权某个域名客户端访问nfs.nulige.com此方法生产环境中一般情况不常用
/home/pub	192.168.56.101(sync,ro)
/home/pub	192.168.56.0/24(sync,rw)
/home/pub	nfs.nulige.com(sync,rw)

(2)mount -o 参数对应选项

mount命令-o选项后面可以接的参数,注意,有些选项只有出现在/etc/fstab里面才有效,下面这些选项可以应用在绝大多数文件系统上,但是sync仅适合ext2、ext3、fat、vfat和ufs等文件系统。

参数参数意义系统默认值
exec、noexec是否具有执行文件的权限,如果想要挂载的仅是普通资源数据区(如:图片、附件),那么可以选择noexec。exec
user、nuser是否允许用户进行文件的挂载与卸载功能,如果要保护文件系统,最好不要提供用户进行挂载与卸载。nouser
atime在每一次数据访问时,会同步更新访问文件的inode时间戳,是默认选项。 在高并发的情况下,建议通过明确加上noatime,来取消这个默认选项,以达到提升I/O性能,优化I/O的目的。atime
-o exec:允许在文件系统中执行可执行文件,默认是exec允许
-o noexec: 不允许在文件系统中执行可执行文件
-o user: 使用者可以执行 mount/umount 的动作;
-o nouser: 使用者不可以执行 mount/umount 的动作;
-o atime: 系统会在每次读取文档时更新文档时间;
-o noatime: 系统会在每次读取文档时不更新文档时间;

(3)NFS配置权限设置常用参数说明

参数名称参数用途
rw读写权限
sync请求或写入数据时,数据同步写入到NFS Server的硬盘后才返回。优点:数据安全不会丢;缺点:性能比不启动该参数要差
root_squash如果访问NFS Server共享目录的用户是root,则它的权限将被压缩成匿名用户,同时它的UID和GID通常会变成nfsnobody账号身份。
/home/pub	192.168.56.101(sync,ro)
/home/pub	192.168.56.0/24(sync,noroot_squash)

DHCP 动态主机配置协议

动态主机配置协议DHCP(Dynamic Host Configuration Protocol)是一个简化主机IP地址分配管理的TCP/IP标准协议,用户可以利用DHCP服务器管理动态的IP地址分配及其他相关的环境配置工作,如:DNS服务器、Gateway(网关)的设置。

担任DHCP服务器的计算机需要安装TCP/IP协议,并为其设置静态IP地址、子网掩码、默认网关等内容。

在DHCP机制中可以分为服务器和客户端两个部分.

服务器使用固定的IP地址,在局域网中扮演着给客户端提供动态IP地址、DNS配置和网管配置的角色。

客户端与IP地址相关的配置,都在启动时由服务器自动分配。

1.基础题

安装并启动DHCP服务,配置DHCP服务,能为客户机自动分配IP地址,需要验证。

(1)首先进入控制面板 查看网络连接处 将VMnet1启用

然后更改虚拟机网络适配器为**仅主机模式😗*与主机共享的专用网络

(2)编辑-网络编辑器**-取消VMnet1的DHCP分配**

(3)手动设置VMnet1的IP地址 设置IP地址、掩码、网关

(4)在虚拟机中修改ifcfg-ens33配置

cd /etc/sysconfig/network-scripts/
vi ifcfg-ens33BEFROUTE=dhcp->static
添加👇
IPADDR=192.168.71.108
GATEWAY=192.168.71.108
NETMASK=255.255.255.0保存腿出后重启
systemctl restart networkip addr 查看ip地址是否改变

(5)通过本地ping虚拟机192.168.71.108

cmd
ping 192.168.71.108

(6)通过虚拟机ping本地记住关掉本地防火墙

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OIYXZjaF-1643163313849)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20220103224955572.png)]

在linux下
ping 192.168.71.106验证

(7)以上为前期工作 接下来正式开始配置DHCP服务器

配置完静态地址之后可以用XShell登录了

yum install -y dhcp

此时无法启动dhcp

[root@localhost ~]# systemctl start dhcpd
Failed to start dhcp.service: Unit not found.

修改配置文件I 用模板文件example覆盖dhcpd.conf

cd /etc/dhcp
ls
vi dhcpd.conf配置文件为空
#see /usr/share/doc/dhcp*/dhcpd.conf.example
进入链接文件
cd /usr/share/doc/dhcp*/
ls
cp -a dhcpd.conf.example /etc/dhcp/dhcpd.conf
进行覆盖

修改配置文件II 进入主配置文件/etc/dhcp/dhcpd.conf

设置动态DNS更新模式:ddns-update-style 将值设为none即可。

ddns-update-style none; 将注释删掉
:set nu
:47,55 co 104
拷贝后修改如下
106 subnet 192.168.71.0 netmask 255.255.255.0 {
107   range 192.168.71.107 192.168.71.114;
108   option domain-name-servers ns1.internal.example.org;
109   option domain-name "internal.example.org";
110   option routers 192.168.71.108;
111   option broadcast-address 192.168.71.108;
112   default-lease-time 600;
113   max-lease-time 7200;
114 }
systemctl start dhcpd

(8)验证DHCP能够为客户机自动分配地址

将本地的VM1IP改为自动获取

然后禁用启动后

cmd
ipconfig
以太网适配器 VMware Network Adapter VMnet1:
IPv4 地址 . . . . . . . . . . . . : 192.168.71.110

2.拓展题

(1)定义全局参数:默认搜索域(√)

option domain-name “example.org”

(2)定义全局参数:默认租期,单位为秒

default-lease-time 600

(3)定义DNS服务动态更新的类型,

类型包括:none (不支持动态 更新),interim (互动更新模式)与ad-hoc (特殊更新模式)

ddns-update-style 类型

ddns-update-style none;
ddns-update-style interim;
ddns-update-style ad-hoc

(4)允许或忽略客户机更新DNS记录

allow/ignore client-updates

(5)定义客户机的网络时间服务器(NTP)

ntp-server IP 地址

(6)定义客户机的NIS域服务器的地址

nis-servers IP 地址

(7)指定网卡接口的类型与MAC地址

hardware 硬件类型MAC地址

(8)主机名通知DHCP客户机服务器的主机名

server-name

(9)将某个固定IP地址分配给指定主机

fixed-address IP 地址

二、DNS

DNS 域名系统

域名系统或者域名服务 DNS (Domain Name System/Service)

采用域名系统来管理名字IP的对应关系。

正向解析与反向解析

(1)正向解析。正向解析是指域名IP地址的解析过程。

(2)反向解析。反向解析是从IP地址域名的解析过程。反向解析的作用为服务器的身份验证。

1.基础题

安装并启动DNS服务。

(1)前期检查

VMnet8、NAT模式、/if-ens33内为dhcp动态地址

(2)安装bind软件

yum install bind -y

(3)启动服务named

systemctl start named

配置DNS正向和反向解析,需要验证。

(4)首先修改主配置文件 /etc/named.conf 怕出问题记得备份

将监听端口和访问方式都改成any

listen-on port 53{any;};
allow-query{any;};

dnssec-enable:yes 改成no 、dnssec-validation:yes改为no

dnssec-enable:no;
dnssec-validation:no;

检查配置文件语法

named-checkconf /etc/named.conf

(6)修改主区域文件 /etc/named.rfc1912.zones 怕出问题记得备份

cd /etc
ls named*
vi /etc/named.rfc1912.zones

配置正向解析

快捷方式:通过:set nu设置行号 然后通过:12,18 co 41拷贝一份后修改即可

abc.com.zone

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jGDku1ys-1643163313851)(image-20220104101941567.png)]

配置反向解析

快捷方式:通过:set nu设置行号 然后通过:36,41 co 48拷贝一份后修改即可

71.168.192.in-addr.arpa

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BrFBXEXa-1643163313852)(image-20220104102023223.png)]

检测配置文件语法

named-checkconf /etc/named.rfc1912.zones

编辑区域配置文件 /var/named/named.localhost

cp -a 拷贝一份named.localhost 为abc.com.zone

编辑正向配置文件abc.com.zone

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MGOqIjMM-1643163313853)(image-20220104103528270.png)]

正向区域解析测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v5z47tWU-1643163313854)(clip_image002-1641263749968.jpg)]

反向文件编辑

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q53a8NV4-1643163313854)(image-20220104103642774.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ui59CTEC-1643163313855)(image-20220104103646027.png)]

反向区域解析测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3feX89zY-1643163313856)(clip_image002-1641263811466.jpg)]

防火墙开放对应服务 然后重启服务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pJ1siRUW-1643163313856)(clip_image002-1641263827836.jpg)]

更改物理机DNS地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DNLlftzU-1643163313857)(clip_image002-1641263836067.jpg)]

正向解析和反向解析结果测试

正向测试结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CTUsREqu-1643163313859)(clip_image002-1641263852155.jpg)]

反向测试结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bRtlBcdd-1643163313859)(clip_image004.jpg)]

2.拓展题

(1)设置rndc控制的端口以及端口,keys用来设置控制的密钥

controls主要用于对bind进行控制,如:

key “rndc-key” {

algorithm hmac-md5;

secret “VkMaNHXfOiPQqcMVYJRyjQ==”;

};

controls {

inet 127.0.0.1 port 953

allow { 127.0.0.1; } keys { “rndc-key”; };

};

三、Apache

Apache Web服务器软件

apache两个主要作用:

1.解析网页语言,如html,php,jsp等

2.接收web用户的请求,并给予一定的响应

1.基础题

(1)安装并启动Apache服务。

yum install httpd -y
systemctl start httpdfirewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

(2)在物理机的浏览器上访问主目录下以自己姓名命名的目录,要求以清单方式列出文件,需要验证。

cd /var/www/html
mkdir lyl
touch a b c输入地址 IP/lyl

(3)基于IP地址的虚拟主机搭建,需要验证

static
IPADDR=192.168.71.135
IPADDR1=192.168.71.136
IPADDR2=192.168.71.137
GATEWAY=192.168.71.1
NETMASK=255.255.255.0
systemctl restart network
ip addrcmd
ping 192.168.71.135 136 137

(4)建立基于IP方式的虚拟主机存放站点的根目录,并创建首页index.html文件

在/var/www下创建文件(类比html)

mkdir h1 h2
随便写入点东西到index.html
[root@localhost www]# echo "192.168.71.136" > h1/index.html
[root@localhost www]# echo "192.168.71.137" > h2/index.html

接下来编辑每个ip的不同配置文件

[root@localhost www]# cd /etc/httpd/
[root@localhost httpd]# ls
conf  conf.d  conf.modules.d  logs  modules  run
[root@localhost httpd]# cd conf
[root@localhost conf]# ls

进入conf下的httpd.conf中拷贝

#
# DocumentRoot: The directory out of which you will serve your
#
DocumentRoot "/var/www/html"
# Relax access to content within /var/www.
#
<Directory "/var/www">AllowOverride None# Allow open access:Require all granted
# Further relax access to the default document root:
<Directory "/var/www/html">## Possible values for the Options directive are "None", "All",# or any combination of:## doesn't give it to you.## http://httpd.apache.org/docs/2.4/mod/core.html#options# for more information.#Options Indexes FollowSymLinks## AllowOverride controls what directives may be placed in .htaccess files.# It can be "All", "None", or any combination of the keywords:#   Options FileInfo AuthConfig Limit#AllowOverride None## Controls who can get stuff from this server.#Require all granted
</Directory>#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.

创建文件夹vhost(类比conf)在httpd中

cd vhost
vi h1.conf
<VirtualHost 192.168.71.136>DocumentRoot "/var/www/h1"DirectoryIndex index.html<Directory "/var/www/h1">Options Indexes FollowSymLinksAllowOverride NoneRequire all granted</Directory>
</VirtualHost>
cp -a h1.conf h2.conf
然后修改h2.conf

编辑完后在主配置文件结尾加上图中最后一行信息

IncludeOptional vhost/*.conf然后重启服务
systemctl restart network

(4)基于端口号的虚拟主机搭建,需要验证

[root@localhost www]# mkdir p8081
[root@localhost www]# echo "8081port" > p8081/index.html
[root@localhost www]# ls
<VirtualHost 192.168.71.135:8081>DocumentRoot "/var/www/p8081"DirectoryIndex index.html<Directory "/var/www/p8081">Options Indexes FollowSymLinksAllowOverride NoneRequire all granted</Directory>
</VirtualHost>
firewall-cmd --permanent --add-port=8081/tcp
firewall-cmd --reload[root@localhost vhost]# setenforce 0
[root@localhost vhost]# getenforce
Permissive[root@localhost conf]# vi httpd.conf 
Listen 8081
[root@localhost conf]# systemctl restart httpd

(5)个人Web站点的发布,需要验证。

cd /etc/httpd/conf.d

编辑用户配置文件 userdir.conf

加root

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jnumWq4g-1643163313860)(image-20220104192006346.png)]

去#号

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iO5NEoak-1643163313860)(image-20220104191814840.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NukuJ68M-1643163313861)(image-20220104191759999.png)]

[root@localhost conf.d]# su - lyl
上一次登录:二 1月  4 19:20:59 CST 2022pts/0 上
[lyl@localhost ~]$ ls
public_html
[lyl@localhost ~]$ cd public_html
[lyl@localhost public_html]$ cd ..
[lyl@localhost ~]$ chmod -Rf 711 lyl
[lyl@localhost ~]$ cd ~/public_html/
[lyl@localhost public_html]$ echo "lyl web site" > index.html 
[lyl@localhost public_html]$ 

网页测试IP/~lyl/

2.拓展题

# 在出现错误页的时候是否显示服务器操作系统的名称,ServerTokens Prod为不显示

ServerTokens OS

# 服务器与客户端断开的时间

Timeout 60

# 是否持续连接(因为每次连接都得三次握手,如果是访问量不大,建议打开此项,如果网站访问量比较大关闭此项比较好),修改为:KeepAlive On 表示允许程序性联机

KeepAlive Off

# 设置特殊的参数,以保证对老版本浏览器的兼容,并支持新浏览器的特性

BrowserMatch “Mozilla/2” nokeepalive

BrowserMatch “MSIE 4.0b2;” nokeepalive downgrade-1.0 force-response-1.0

BrowserMatch “RealPlayer 4.0” force-response-1.0

BrowserMatch “Java/1.0” force-response-1.0

BrowserMatch “JDK/1.0” force-response-1.0

# 当服务器出现404错误的时候,返回missing.html页面

ErrorDocument 404 /missing.html

开启长连接

KeepAlive onKeepAliveTimeout 60 #超时时间

MaxKeepAliveRequests 100 #超时时间内达到100个请求也将断开连接

配置http强制跳转https

在主配置文件中添加如下字段

RewriteEngine OnRewriteCond %{HTTPS} !=onRewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

反向代理

在主配置文件中或者虚拟主机中添加如下字段

ProxyRequests off

## Order deny,allow# Allow from all#

ProxyPass / http://172.16.138.129

ProxyPassReverse / http://172.16.138.129

配置basic访问验证

<Directory “/var/www/html”>

Options Indexes FollowSymLinks #允许索引,和链接文件

AllowOverride None

authtype basic #认证类型

authname “test” #浏览器弹框提示信息

authuserfile /etc/httpd/.htpass #认证用户文件

#authgroupfile /etc/httpd/allow.group #认证组文件

#require group test

require valid-user #所有userfile文件的用户都可以访问

#require user user1 user2 #user1 user2 可以访问

四、Linux下编程

C

yum install -y gcc
vi test.c
gcc -o 1.out test.c
./1.out

C++

yum install -y gcc-c++
vi test.cpp
g++ -o 1.out test.cpp
./1.out

Java

1.基础题

yum search jdk
找到java-1.8.0-openjdk-devel.x86_64yum install java-1.8.0-openjdk-devel.x86_64 -y

可以进/usr/lib/jvm查看是否安装了

在/etc/profile中做环境变量配置

vi world.java
public class world{public static void main(String[] args){System.out.println("Hello world");}
}
-----------------------
javac world.java
java world

2.拓展题

(1)编写程序模拟两个村庄共用同一口井水。编写一个Village类,该类有一个静态的int型成员变量waterAmout,用于模拟井水的水量。在主类Land的main()方法中创建两个村庄,一个村庄改变了waterAmount的值,另一个村庄查看waterAmount的值。

public class test1{public static void main(String[] args){Village v1=new Village();Village v2=new Village();v1.drinkWater(120);System.out.println("查看剩余水量:"+v2.seeWater());}
}class Village{static int waterAmount=600;public void drinkWater(double drink){if(waterAmount>=drink)waterAmount-=drink;}public double seeWater(){return waterAmount;}
}

(2)简历的内容如下:“姓名:张三 出生时间:1989.10.16。个人网站:http://www.zhang.com。身高:185cm,体重:72kg”

编写一个java应用程序,判断简历中的姓名是否姓“张”,单独输出简历中的出生日期和个人网站,并判断简历中的身高是否大于180cm,体重是否小于75kg。

package qimo;public class test2 {public static void main(String[] args) {String mess="姓名:张三 出生时间:1989.10.16。个人网站:http://www.zhang.com。身高:185cm,体重:72kg";String []S=mess.split(":");//System.out.println(S);//for(String s:S) {System.out.println(s);}String date=S[2].split("。")[0];//日期Double h=Double.parseDouble(S[4].split("c")[0]);//身高Double w=Double.parseDouble(S[5].split("k")[0]);//体重String web=S[3].split("。")[0];//网址String name=S[1].split(" ")[0];//姓名//System.out.println(h);//System.out.println(w);//System.out.println(date);//System.out.println(web);//System.out.println(name.substring(0,1));if("张".equals(name.substring(0,1))) {//System.out.println(name.substring(0,1));System.out.println("他姓张");}else {System.out.println("他不姓张");}if(h>=180) {System.out.println("他身高大于180cm");}else {System.out.println("他身高小于180cm");}if(w<=75) {System.out.println("他体重小于75kg");}else {System.out.println("他体重大于75kg");}}}

3.卡车需要计算出整批货物的重量。要求有一个ComputerWeight接口,该接口中有一个方法:

public double computeWeight()

有三个实现该接口的类:Television、Computer和WashMachine. 这三个类通过实现接口给出自重。

有一个卡车Truck类,该类用ComputeWeight接口类型的数组作为成员(Truck类面向接口),那么该数组的元素就可以存放Television对象的引用、Computer对象的引用或WashMachine

对象的引用。程序能输出Truck对象所装载的货物的总重量。

import java.util.ArrayList ;
import java.util.Arrays ;
public class Test3{public static void main(String args[]){ComputerWeight tv = new TV(100) ;ComputerWeight cp = new CP(80) ;ComputerWeight wm = new WM(160) ;Truck tk = new Truck() ;tk.add(tv); tk.add(cp); tk.add(wm) ;System.out.println("重量为:"+tk.calc_total()) ;}
}
class Truck{public ArrayList<ComputerWeight> gools=new ArrayList<>() ;public void add(ComputerWeight gool){gools.add(gool);}public double calc_total(){double ans=0 ;for(ComputerWeight gool:gools){ans+=gool.computeWeight();};return ans ;}
}
interface ComputerWeight{public double computeWeight();
}
class TV implements ComputerWeight{public double w ;public TV(double w){this.w=w;} ;public double computeWeight(){return w ;}
}
class CP implements ComputerWeight{public double w ;public CP(double w){this.w=w;} ;public double computeWeight(){return w ;}
}
class WM implements ComputerWeight{public double w ;public WM(double w){this.w=w;} ;public double computeWeight(){return w ;}
}

实验要求:车站检查危险品的设备,如果发现危险品会发出警告。编程模拟设备发现危险品。

编写一个Exception的子类DangerException,该子类可以创建异常对象,该异常对象调用toShow()方法输出:“危险品”。

编写一个Machine类,该类的方法checkBag(Goods goods)当发现参数goods是危险品时(goods的isDanger属性是true)将抛出DangerException异常对象。

程序在主类的main方法中的try-catch语句的try部分让Machine类的实例调用checkBag(Goods goods)方法,如果发现危险品就在try-catch语句的catch部分处理危险品。

public class Test4{public static void main(String args[]){Goods[] goods = new Goods[10] ;for(int i=0;i<10;i++){goods[i] = new Goods() ;if(i%3==0){goods[i].setIsDanger(true) ;}}for(int i=0;i<10;i++){try{Machine.checkBag(goods[i]) ;System.out.println("这不是危险品!") ;} catch(DangerException e){System.out.println(e.toShow()) ;}}}
}
class DangerException extends Exception{public String toShow(){return "危险品";}
}
class Machine{public static boolean checkBag(Goods goods) throws DangerException{if(goods.isDanger){throw new DangerException();}return true;}
}
class Goods{public boolean isDanger ;public void setIsDanger(boolean isDanger){this.isDanger=isDanger ;}
}

实验要求:使用Scanner类和正则表达式统计一篇英文中的单词,要求如下:

一共出现了多少个单词。

有多少个互不相同的单词。

按单词出现频率大小输出单词。

//利用regex_search()统计一篇英文文章中的单词数:C++
#include <iostream>
#include <regex>
#include <string>
#include <fstream>
using namespace std;
// 统计单词数
int countword(string& str)
{       try{int n = 0;smatch m; // 保存匹配结果的match_result// 匹配单词的正则表达式,// 包含了大小写英文字母,连字符,括号,引号// 这个正则表达式还不完善,可以继续改进regex ex("\\b[a-zA-Z-()\"]*\\b");// 用regex_search()在文章中进行匹配,查找单词while(regex_search(str,m,ex)){++n;  // 找到,总数加1cout<<m[0]<<endl; // 输出找到的单词str = m.suffix().str(); // 移动到下一个位置}return n;}catch (regex_error e){cout<<e.what()<<endl;}
}
// 读取文件内容
bool readfile(const string name,string& str)
{ifstream in(name);if(in.is_open()){char line[512] = "";while(true){in.getline(line,512);str += line;if(in.good()){str += '\n';}else{break;}}return true;}else{return false;}
}
int main(int argc,char* argv[])
{if(2 != argc){cout<<"argument error. eg. count.exe demo.txt"<<endl;}string str("");if(readfile(argv[1],str)){int n = countword(str);cout<<"there are "<<n<<" words in "<<argv[1]<<endl;}return 0;
}
import java.util.regex.*;
import java.util.Scanner;
import java.util.HashMap;
public class Test5 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("nextLine:");HashMap<String, Integer> mp = new HashMap<String, Integer>();int cnt = 0;if (scan.hasNextLine()) {String []str = (scan.nextLine()).split(" ");for(String s:str){if(Pattern.matches("^[A-Za-z]+$", s)){cnt ++;mp.putIfAbsent(s, 0) ;mp.put(s, mp.get(s)+1) ;}}}System.out.printf("共出现%d个单词\n",cnt);System.out.printf("共有%d个不同的单词\n",mp.size());String[] word = new String[mp.size()+1];Integer[] count = new Integer[mp.size()+1];int sum = mp.size();for(int i = 0 ; i < sum ; i ++){boolean flag = true;for (String key: mp.keySet()){if(flag){word[i] = key;count[i] = mp.get(key);flag = false;}if(count[i] < mp.get(key)){word[i] = key;count[i] = mp.get(key);}}mp.remove(word[i]);}for(int i = 0 ; i < sum ; i ++){System.out.printf("%s出现了%d次\n",word[i],count[i]);}scan.close();}
}

实验要求:用两个线程玩猜数字游戏,第一个线程负责随机给出1到100之间的一个整数,第二个线程负责猜出这个数。要求每当第二个线程给出自己的猜测后,第一个线程都会提示“猜小了”、“猜大了”或“猜对了”。猜数之前,要求第二个线程要等待第一个线程设置好要猜测的数。第一个线程设置好猜测数之后,两个线程还要互相等待,其原则是,第二个线程给出自己的猜测后,等待第一个线程给出的提示;第一个线程给出提示后,等待给第二个线程给出猜测,如此进行,直到第二个线程给出正确的猜测后,两个线程进入死亡状态。

package text;
import java.util.*;
import java.util.Random;  public class Test6 {  public static void main(String[] args) {  number num=new number("线程一");  num.start();  guess gue=new guess("线程二");  gue.start();  }  }  
//给出整数的线程  
class number extends Thread{  String name1;  private static int n;  number(String name){  name1=name;  }  public void run() {  //获取1~100的随机数  Random random=new Random();  n=random.nextInt(100);  System.out.println(name1+"给出的数字为:"+n);  }  //猜数字(静态方法,可通过类名调用)  public static String guessnum(int m) {  if(m<n) {  return "猜小了";  }else if(m>n){  return "猜大了";  }else return "猜对了";  }  
}  
//猜数线程  
class guess extends  Thread{  String name2;  //最大值和最小值  private int min=0,max=100,nownum;  //比较结果  String Result;  guess(String name){  name2=name;  }  //获取比较结果  public String getGuess() {  return Result;  }  public void run() {  while(true) {  try{  Thread.sleep(2000);  }catch(InterruptedException e){  e.printStackTrace();  }  Random ran=new Random();  //当前猜的数字(最大值和最小值之间的数)  nownum=min+ran.nextInt(max-min);  //调用给出整数的线程 的猜数字方法guessnum,  Result=number.guessnum(nownum);  if(Result.equals("猜小了")) {  min=nownum;  System.out.println("线程二猜的数字是:"+nownum+"---猜小了");  }else if(Result.equals("猜大了")) {  max=nownum;  System.out.println("线程二猜的数字是:"+nownum+"---猜大了");  }else {  System.out.println("线程二猜的数字是:"+nownum+"---猜对了,结果是"+nownum);  System.exit(0);  }  }  }  
}  
import java.util.*;
public class Test6{public static void main(String []args) throws Exception{Game game = new Game() ;game.flag=1 ;Thread judge = new Judge(game) ;Thread guess = new Guess(game) ;judge.start() ;Thread.sleep(10) ;guess.start() ;}
}
class Game{public int flag, guess ;
}
class Judge extends Thread{Game game ;public Judge(Game game){this.game=game;}public void run(){Random random=new Random() ;int num=random.nextInt(100) ;while(game.flag!=0){synchronized(game){try{game.wait() ;if(game.guess>num){game.flag=1;}else if(game.guess<num){game.flag=-1;}else {game.flag=0;}game.notify() ;}catch(Exception e){}}}}
}
class Guess extends Thread{Game game ;public Guess(Game game){this.game=game;}public void run(){Random random=new Random() ;while(game.flag!=0){synchronized(game){try{game.guess=random.nextInt(100) ;game.notify() ;game.wait() ;System.out.print(game.guess+"\t");if(game.flag==1){System.out.println("猜大了");}else if(game.flag==-1){System.out.println("猜小了");}else {System.out.println("猜对了");}}catch(Exception e){}}}}
}

五、FTP

FTP文件传输协议

FTP(File Transfer Protocol)

1.基础题(√3)

(1)安装并启动vsftpd服务。

yum install vsftpd -ysystemctl start vsftpd

安装完后往ftp服务器文件夹里写点东西 开端口 防火墙

cd /var/ftp/pub
touch a b c
firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --reload

(2)实现匿名用户访问FTP服务器,需要验证。

关windows防火墙

cmd

ftp 服务器IP

用户名: anonymous

密码:空

cd pub

ls

(3)实现本地用户访问FTP服务器,需要验证。

useradd lyl
passwd lyl

cmd

ftp 服务器

用户名: lyl

密码:xxx

(4)实现匿名用户传文件到FTP服务器,需要验证.

cd /etc/vsftpd

vi vsftpd.conf

anonymous_upload_enable=YES 去#  允许匿名用户上传
anon_mkdir_write_enable=YES 去# 允许匿名创建新用户anon_world_readable_only=NO 开放匿名用户的浏览权限
write_enable=YES 开放匿名用户的写权限
systemctl restart vsftpd
chmod 777 /var/ftp/pub -Rf

(5)限制指定本地用户访问FTP服务器,需要验证。

/etc/vsftpd/vsftpd.conf

userlist_enable=YESuserlist_deny=YES
userlist_file=/etc/vsftpd/user_list

在user_list中添加lyl

(6)设置用户连接FTP服务器后的欢迎语,需要验证。

ftpd_banner=Welcome to blah FTP service. 去#

2.拓展题

六、Mariadb

1.基础题

(1)安装并启动Mariadb服务。

yum install mariadb mariadb-server -y
systemctl start mariadb
mysql_secure_installation

(2)分别对数据库、表进行创建,并对数据记录进行CRUD操作。

show databases;
create database luyilin;
drop database luyilin
use luyilin; 
//创建表
create table user(id int primary key,username varchar(20) not null,passwd varchar(20),email varchar(20)
);
insert into user values('1','lyl','12345','@qq.com');
update user set passwd='2345678' where id =1;select * from user;
delete from user where id=1;

(3) 创建一个以自己姓名全拼命名的账户,授予指定数据库查询、修改权限,需要验证。

create user 'lyl'@'%' identified by 'lyl123' ;
grant select,update on luyilin.user to 'lyl'@'%' with grant option; 
mysql -u lyl -p
update user set passwd='d32323' where id=1;

(4)允许root用户远程访问权限,需要验证。

grant all on *.* to 'root'@'%' with grant option;
update mysql.user set host='%' where user ='root';mysql -h 192.168.71.143 -u root -p
密码直接回车 因为远程登录的密码没有设置
#firewall-cmd --permanent --add-port=3306/tcp
#firewall-cmd --reload
#systemctl restart mariadb

(5)删除指定数据库,然后进行恢复,需要验证。

(1)备份

mysqldump -u root -plyl123456 luyilin>/home/luyilin.sql

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kdEzRykV-1643163313861)(clip_image002-1641363694096.jpg)]

(2)删除

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y3DWPrfZ-1643163313862)(clip_image004-1641363694097.jpg)]

(3)恢复

mysql -u root -plyl123456 stu < /home/luyilin.sql(需要有stu这个数据库)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lg8qSRSK-1643163313863)(clip_image006.jpg)]

2.拓展题

(1)多条件查询

id、age 多个条件查询

select * from t1 where id=1 and age = 'zxg '

mysql配置文件

#允许最大接收数据包的大小,防止服务器发送过大的数据包,可以设置为16MB或者更大,但设置太大也可能有危险

max_allowed_packet = 1M

#该参数用来设置最大连接数,告诉你当前你的服务器允许多少并发连接。默认为100,一般设置为512-1000即可。请记住,太多的连接会导致内存的使用量过高并且会锁住你的 MySQL 服务器。一般小网站需要 100-200 的连接数,而较大可能需要 500-800 甚至更多。这里的值很大程度上取决于你 MySQL/MariaDB 的使用情况。

max_connect_errors = 100

#如果有时网络抽风,或者应用配置错误,或者其他原因导致客户端短时间内不断的尝试连接,客户端可能会被列入黑名单,然后将无法连接,直到再次刷新主机缓存。这个选项默认值太小了,可以考虑设的足够大(如果你的服务器配置够强大的话)。

open_files_limit = 65535

#mysql打开最大文件数

grant select, insert, update, delete on testdb.* to common_user@’%’

grant 创建、修改、删除 MySQL 数据表结构权限。

grant create on testdb.* to developer@‘192.168.0.%’;

grant alter on testdb.* to developer@‘192.168.0.%’;

grant drop on testdb.* to developer@‘192.168.0.%’;

grant 普通 DBA 管理某个 MySQL 数据库的权限。

grant all privileges on testdb to dba@'localhost'

grant 高级 DBA 管理 MySQL 中所有数据库的权限。

grant all on *.* to dba@'localhost

grant 作用在单个数据表上:

grant select, insert, update, delete on testdb.orders to dba@localhost;

这里在给一个用户授权多张表时,可以多次执行以上语句。例如:

grant select(user_id,username) on smp.users to mo_user@’%’ identified by ‘123345’;

grant select on smp.mo_sms to mo_user@’%’ identified by ‘123345’;

七、Samba

SMB(Server Message Block)是一个高层协议,用于共享文件、共享打印机、共享串口等。

Samba让Linux和Windows操作系统之间实现文件共享

Linux和Windows文件共享

1.基础题

(1)安装并启动SMB服务。

yum install samba -y
systemctl start smb

(2)允许指定IP地址并指定用户的主机访问共享目录,需要验证。

/etc/samba/smb.conf

[pub]comment = Pub Directoriesvalid users = lyl,rootbrowseable = Yesread only = Nopath=/sharedatacreate mask = 0666directory mask = 0775hosts allow=192.168.71.1
[root@localhost samba]# useradd lyl
[root@localhost samba]# passwd lyl
更改用户 lyl 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost samba]# 
[root@localhost samba]# firewall-cmd --permanent --add-service=samba
success
[root@localhost samba]# firewall-cmd --reload
success
[root@localhost samba]# smbpasswd -a lyl
New SMB password:
Retype new SMB password:
Added user lyl.
[root@localhost samba]# 

(3)通过Windows系统访问Linux系统的共享目录共享,需要验证。

setenforce 0mkdir /share

windows:

\\192.168.71.136

(4)通过Linux系统访问Windows系统的共享目录共享,需要验证。

linux端安装 samba-client

windows端创建个文件分配权限给用户

然后linux端

[root@localhost sharefile]# smbclient //192.168.71.1/wc -U LYL

2.拓展题

global

security = user #用于登陆域,或用户验证登陆

hosts allow = 192.168.0. #指定那些主机可以访问

encrypt passwords = yes #密码需要加密

browse list = yes #samba将在服务器上生成浏览列表

remote browse sync = 192.168.222.22 # samba 将会同步在其他子网(local master)的列表,但子网的(LOCAL MASTER)必须是SAMBA服务器

public

force security mode = 0 # 当修改文件的属性,指定哪些模式必须设置

oplocks = no #本地缓存,如果设置成yes,会提高samba的速度
homes

read list = badguy # 限制这些用户在可写文件上的些操作权限

invalid users = root #不可登陆用户

-y
systemctl start smb

(2)允许指定IP地址并指定用户的主机访问共享目录,需要验证。

/etc/samba/smb.conf

[pub]comment = Pub Directoriesvalid users = lyl,rootbrowseable = Yesread only = Nopath=/sharedatacreate mask = 0666directory mask = 0775hosts allow=192.168.71.1
[root@localhost samba]# useradd lyl
[root@localhost samba]# passwd lyl
更改用户 lyl 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost samba]# 
[root@localhost samba]# firewall-cmd --permanent --add-service=samba
success
[root@localhost samba]# firewall-cmd --reload
success
[root@localhost samba]# smbpasswd -a lyl
New SMB password:
Retype new SMB password:
Added user lyl.
[root@localhost samba]# 

(3)通过Windows系统访问Linux系统的共享目录共享,需要验证。

setenforce 0mkdir /share

windows:

\\192.168.71.136

(4)通过Linux系统访问Windows系统的共享目录共享,需要验证。

linux端安装 samba-client

windows端创建个文件分配权限给用户

然后linux端

[root@localhost sharefile]# smbclient //192.168.71.1/wc -U LYL

2.拓展题

global

security = user #用于登陆域,或用户验证登陆

hosts allow = 192.168.0. #指定那些主机可以访问

encrypt passwords = yes #密码需要加密

browse list = yes #samba将在服务器上生成浏览列表

remote browse sync = 192.168.222.22 # samba 将会同步在其他子网(local master)的列表,但子网的(LOCAL MASTER)必须是SAMBA服务器

public

force security mode = 0 # 当修改文件的属性,指定哪些模式必须设置

oplocks = no #本地缓存,如果设置成yes,会提高samba的速度
homes

read list = badguy # 限制这些用户在可写文件上的些操作权限

invalid users = root #不可登陆用户

[外链图片转存中…(img-fJ2uqVZa-1643163313863)]


http://www.ppmy.cn/news/464650.html

相关文章

计算机网络自顶向下 概念填空整理(完整)

第一章 计算机网络和因特网 1.1 什么是因特网 我们可以从两个角度来回答这个问题&#xff1a;一种是描述组成它的软硬件&#xff1b;另一种是将其视为为分布式应用提供基础服务的联网设施来描述。其实&#xff0c;第一种角度&#xff0c;是从它的组成来描述&#xff0c;第二种…

计算机网络:从物理层到应用层的五层模型

第一章 概述 计算机网络基本概念 计算机网络的重要功能&#xff1a;连通性——彼此联通&#xff0c;交换信息&#xff1b; ​ 共享——信息共享、软硬件共享。 计算机网络概念&#xff1a;由若干节点和连接这些节点的链路组成&#xff1b;计算机网络就是自治的互联的计算机集…

全面解析NFT的流动性问题与解决方案

介绍 最近的清算浪潮使得加密市场中正蔓延着担忧&#xff0c;从Three Arrows Capital蔓延到Celsius Network、Babel Finance、BlockFi和Voyager Digital等加密机构。过去几周&#xff0c;由于数字资产价格暴跌&#xff0c;市场损失了数十亿美元。 流动性问题不仅对DeFi的发展…

【无标题】AI+电力、大模型主题人工智能师资培训班重磅招募中

大语言模型热度空前&#xff0c;诸如文心一言、ChatGPT 等已经能够与人对话互动、回答问题、协助创作&#xff0c;逐渐应用于人们的工作和生活&#xff0c;也引发了社会热议。人工智能赋能新型电力系统下新能源发电、变电、调度、配网、安监、营销、基建以及企业经营管理等领域…

计算机网络笔记

目录 第一章 计算机网络和因特网 1.1 什么是因特网 1.1.1 组成描述 1.1.2 服务描述 、 1.1.3 协议 1.2 网络的边缘 1.2.1 接入网 1.2.2 物理媒体 1.3 网络核心 1.3.1 分组交换 1.3.2 电路交换 1.3.3 分组交换和电路交换的对比 1.3.4 网络的网络 1.4 分组交换…

计算机网络复习笔记——考试版

计算机网络复习笔记 文章目录 计算机网络复习笔记第一章 计算机网络和因特网1.1 什么是因特网——因特网的具体构成1.2 网络边缘1.3 网络核心1.4 分组交换网络中的时延、丢包和吞吐量1.5 协议层次及其服务模型 第二章 应用层2.1 应用层协议原理2.2WEB和HTTP 第三章 运输层3.1 概…

计算机网络(自顶向下方法)学习笔记

目录 第一章 计算机网络和因特网 1.1 什么是因特网 1.1.1 组成描述 1.1.2 服务描述 1.1.3 协议 1.2 网络的边缘 1.2.1 接入网 1.2.2 物理媒体 1.3 网络核心 1.3.1 分组交换 1.3.2 电路交换 1.3.3 分组交换和电路交换的对比 1.3.4 网络的网络 1.4 分组交换中的时延…

计算机网络原理 - 网络层、链路层总结笔记

计算机网络原理 - 网络层、链路层 ##4.网络层 网络层主要是利用IP上的传输&#xff0c;在路由器中最高达到的层次为网络层&#xff0c;分组交换机只到链路层&#xff1b;IP准确来说不是一个主机的地址&#xff0c;而是一个接口的地址。 4.1 概述 网络层的作用&#xff1a;将分…