未完待续,大部分上课的内容都有实践,这个版本的Apache实践部分还没有全部完成,php不熟悉,不知道如何和html进行连接。我使用的AnolisOS 8,这是阿里的弄的操作系统,兼容centOS8。
# 第一章 Linux基础
# 1.1 命令行界面
具体信息分析
1
区1
d
:目录/文件l
:软链接文件-
:二进制文件
2-4
u
:用户
5-7
g
:组
8-10
o
:其他
- 其中数字的具体含义
r
:读(用阿拉伯数字表示为4
)w
:写(用阿拉伯数字表示为2)x
:可执行(用阿拉伯数字表示为1
)
2
区:硬链接的个数硬链接和软链接从一定程度上类比
C++
中的指针和引用,当然这并不准确。硬链接是直接指向文件内容的链接。软链接是一种特殊的文件,它包含指向目标文件或目录路径的引用(类似于快捷方式)。3
区:创建者的名称4
区:组名称组是
linux
中很有意思的概念,linux
是一个是一个真实的、完整的多用户多任务操作系统,多用户多任务就是可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行各自不同的任务,而互不影响。那么对于这些用户就要进行管理,从而引生出组的概念,方便对用户进行管理。5
区:文件大小6
区:最后修改时间
文件目录权限
代表字符 | 权限 | 对文件的含义 | 对目录的含义 |
---|---|---|---|
r | 读权限 | 可以查看文件 | 可以列出目录中的内容 |
w | 写权限 | 可以修改文件内容 | 可以在目录中创建、删除文件 |
x | 执行权限 | 可以执行文件 | 可以进入目录 |
# 1.1.1 常用的基本命令
ls
语法:ls [参数][File|Directory]
参数:查看当前目录的内容
选项:
-a
:列出包含以.
开始的条目。-l
:显示文件具体的信息。(可以直接输入命令ll
是一样的效果)-d
:查看目录的属性
演示:
由于我使用的是龙溪OS是阿里开发的Linux操作系统,继承了centos8,所以会有中文出现。
cd
语法:cd [Directory]
描述:更改当前目录
演示:
cp
语法:cp [参数] SourceFile|SourceDir TargetFile|TargetDir
描述:拷贝文件或文件夹
参数:
-f
:强制复制,即若复制到的文件中有重名文件,不弹出提示,直接覆盖。-i
:提示将要被覆盖的文件名-r
:递归复制文件夹中的文件
演示:
rm
语法:rm [参数] File
描述:删除文件
参数:
-i
:删除每个文件前有提示-r
:递归删除文件夹中的文件-f
:强制删除文件,而不再提示
演示:
mv
语法:mv [参数] 源文件 目标文件
描述:移动文件,或者对文件重命名
参数:
-i
:移动每个文件前有提示-f
:强制覆盖目标文件而不提示确认
演示:
pwd
语法:pwd
描述:查看当前目录的绝对路径
演示:
mkdir
语法:mkdir
[参数] 文件名
描述:创建一个目录
参数:
-m Mode
:设置新目录的权限模式。-p
:同时创建多级目录
演示:
rmdir
语法:rmdir [参数] [文件名]
描述:删除有待删除文件的父目录写权限的空目录(其实直接用rm
就行)
参数:
-p
:同时删除多级目录。
演示:
shutdown
语法:shutdown
功能描述: 关机
演示:shutdown now
# 1.1.2 查看文件内信息命令
touch
语法:touch [参数] [文件名]
描述:创建一个空文件,可以在创建文件时添加后缀从而确定新建文件的属性
演示:
cat
语法:cat [参数] [文件名]
描述:显示文件内容,也可以用来拼接文件。
演示:
more
语法:more [参数] [文件名]
描述:分页显示内容
常用命令:
空格键
:向下翻页(移动到下一页)。Enter
:向下滚动一行。b
:向上翻页(移动到上一页)。q
:退出more
,停止查看文件。/
:搜索关键字,输入/keyword
然后按Enter
,会向下搜索文件中的keyword
。h
:显示帮助文档。=
:显示当前行号。v
:在vi
编辑器中打开当前文件。
演示:
head
语法:head -num [文件名]
描述:显示文件中的num
行。
演示:
tail
语法:tail -num [文件名]
描述:显示文件中的后num
行。
演示:
less
语法:less [参数] [文件名]
描述:允许用户向前或向后滚动文件内容,支持搜索功能。
常用命令:
- 空格键:向下翻一页。
b
:向上翻一页。Enter
:向下滚动一行。y
:向上滚动一行。g
:跳转到文件的开头。G
:跳转到文件的结尾。/pattern
:向下搜索pattern
字符串(按n
键可以跳到下一个匹配)。?pattern
:向上搜索pattern
字符串(按n
键可以跳到上一个匹配)。n
:重复上一次的搜索(向下)。N
:反向重复上一次的搜索(向上)。h
:显示帮助文档,列出所有命令。q
:退出less
。
演示:
# 1.1.3 用户权限设置命令
chmod
语法:chmod [ugoa][+-=][rwx] [文件名]
(符号表示法)
chmod [nnn] [文件名]
描述:改变用户对文件的访问权限。
演示:
chown
语法:chown [用户] [文件或目录]
描述:改变文件或目录的所有者
演示:
chgrp
语法:chgrp [用户] [文件或目录]
描述:改变文件或目录的所有者
演示:
# 1.1.4 寻找指令
find
语法:find [路径] [选项] [条件] [操作]
描述:寻找文件
参数:
路径:要搜索的目录及其子目录。如果没有指定,默认从当前目录开始。
选项:控制
find
的行为(如是否递归等)。条件:用于定义搜索的标准,比如按名称、类型、大小、时间等搜索。
name
size
user
- ......
操作:对找到的文件执行特定的操作,比如删除、移动、拷贝等。
口诀:在哪里找,怎么找,找什么
演示:
grep
语法:grep
[指定字串] [源文件]
描述:在文件中搜寻字串匹配的行并输出
演示:
管道操作符
|
:将一个命令的输出传送给另-个命令,作为另一个命令的输入。
grep
经常和管道操作符|
搭配使用。
# 1.1.5 帮助指令
man
语法:man
[命令或配置文件]
描述:获得帮助信息
演示:man ls
help
语法:help
[命令或配置文件]
描述:提供简明的帮助信息
whatis
语法:whatis
[命令或配置文件]
描述:简要显示命令的功能
演示:whatis ls
三者的区别:
man
:提供详细的命令文档,适合查阅全面的手册页。
help
:适用于shell
内置命令,提供简明的帮助信息。
whatis
:提供命令的简短描述,适合快速查看命令用途。
# 1.1.6 压缩解压命令
tar(压缩)
语法:tar
选项 [参数] [目录]
功能描述:打包目录
参数:
-c
:产生.tar
打包文件-x
:解包-v
:显示详细信息-f
:指定压缩后的文件名-z
:打包同时压缩
演示:
tar(解压)
语法:tar
选项 [参数] [目录]
功能描述:解压目录
参数:
-x
:解包-v
:显示详细信息-f
:指定压缩后的文件名-z
:打包同时压缩
演示:
# 1.1.7 网络通信命令
ping
语法:ping
选项IP
地址
描述:测试网络连通性
可以
ping
ip
地址,也可以ping
域名,事实上所谓的域名就是利用了DNS
服务,域名的背后依然是IP
地址,具体内容可以移步计算机网路的模块。
ifconfig
语法:ifconfg [选项] [网卡设备标识]
描述:查看网络设置信息
参数:-a
显示所有网卡信息
演示:
# 1.1.8 命令总览表
命令 | 描述 |
---|---|
ls | 查看当前目录内容 |
cd | 切换目录 |
cp | 复制文件或文件夹 |
rm | 删除文件或文件夹 |
mv | 移动文件或文件夹 |
pwd | 查看当前目录的绝对路径 |
mkdir | 创建文件夹 |
rmdir | 删除空的文件夹 |
shutdown | 关机 |
touch | 创建文件 |
cat | 查看文件 |
more | 分页查看文件 |
head | 查看文件的前n 行 |
tail | 查看文件的后n 行 |
less | 滑动查看文件 |
chmod | 改变文件权限 |
chown | 改变文件的所有者 |
chgrp | 改变文件所在的组 |
find | 寻找文件 |
grep | 在文件中搜寻字串匹配的行并输出 |
man | 获得帮助信息 |
help | 提供简明的帮助信息 |
whatis | 简要显示命令的功能 |
tar | 压缩和解压 |
ping | 测试网络连通性 |
ifconfig | 查看网络设置信息 |
# 1.2 Linux软件包
# 1.2.1 二进制软件包之RPM
RPM
软件包的一个例子:
sudo-1.7.2p1-5.el5.i386.rpm
其中包括软件名(sudo),版本号(1.7.2p),发行号(5.el5),和硬件平台(i386)。
RPM
软件包的卸载
# rpm -e sudo
# rpm -e samba
2
注意:如果其它软件包有依赖关系,卸载时会产生提示信息,可使用-nodeps强行卸载。
RPM
软件包的安装
# rpm -ivh sudo-1.7.2p1-5.el5.i386.rpm
挂载光盘:
#mkdir /mnt/cdrom
#mount /dev/cdrom /mnt/cdrom
#ls | grep sudo
#rpm -ivh sudo-1.7.2p1-5.el5.i386.rpm
2
3
4
查询是否已经安装成功:
#rpm -q sudo
- 查询软件包是否已经安装完成
#rpm -qa|grep samba
RPM
包的管理- 问题一:软件包已被安装
package sudo-1.7.2p1-5.el5.i386 is already installed
1如果覆盖安装该软件包,可以在命令行上使用
--replacepkgs
选项。#rpm -ivh --replacepkgs sudo-1.7.2p1-5.e15.i386.rpm
1- 问题二:软件包已被安装
conflicts with file from bark-3.2-1l sudo-1.7.2p1-5.el5.i386.rm cannot be installed
1要想让
RPM
忽略该错误信息,请使用--replacefiles
#rpm -ivh -replacefiles sudo-1.7.2p1-5.e15.i386.rpm
1- 问题三:未解决依赖关系
failed dependencies: sudo is needed by bark-3.2-1]
1你必须安装完所依赖的软件包,才能解决这个问题,强制安装使用
--nodeps
选项。#rpm -ivh-nodeps sudo-1.7.2p1-5.e15.i386.rpm
1
# 1.3 用户和组文件
用户帐号文件——
passwd
(位置:/etc/passwd
) 用于用户登录时校验用户的经盘名、加密的口令数据项用户
ID(UID)
、默认的用户分组ID(GID)
、用户信息用户登录子目录、登录后使用的shell
。可以使用
cat
来查看用户信息。logname
(用户的名称):moxiaoyang
password
(用户的密码):x
(这里是对登入密码做了隐藏处理)uid
(用户的ID):1000
(用户的UID
是唯一的,root
用户的UID
是0
)gid
(用户的组ID):1000
userinfo
(用户的信息):moxiaoyang
home
(用户的home
地址):/home/moxiaoyang
(root
的用户地址是/root
,其余都是/home/用户名
)shell
(用户使用的shell
模式):/bin/bash
用户影子文件(用户密码文件)——
shadow
(位置:/etc/shadow
) 是一种安全机制,将加密的口令放在
shadow
文件里,该件只有root
用户可读,而在passwd
文件里的密文域显示个x
,从而最大限度减少了密文泄露机会。可以使用
cat
来查看用户密码文件用户登录名:
moxiaoyang
用户加密口令:
$6$BrqbTh0M0k5EjHby$9EkiTPRyNEIcb5O5ERaoRieI9pvv4......
从
1970年1月1日
起到上次修改口令所经历的天数:19853
需要多少天才能修改这个口令:
0
该口令不过期:
99999
要在口令失效前
7
天内通知用户: 7发出警告禁止登录前用户还有效的天数: 未定义
用户被禁止的登录的时间: 未定义
用户组帐号文件
group
——(位置:/etc/group
)可以使用
cat
来查看用户组帐号文件这里以第二条为例
用户分组名:
moxiaoyang
加过密的用户分组口令:
x
(这里密码进行了隐藏)用户分组
ID
号:1000
以逗号分隔的成员用户清单:
moxiaoyang
(若是组中还有其他用户用逗号隔开如zhangsan,lisi
)用户组影子文件——
gshadow
(位置:/etc/gshadow
)可以使用
cat
来查看用户组影子文件这里以第二条为例
用户分组名:
moxiaoyang
组密码:
!
(这里是锁定状态,具体后面会提到,还有*
的模式表示通常表示这个组没有密码管理员列表: 此字段为空,表示该组没有管理员
组成员列表: moxiaoyang
使用
useradd
命令添加用户建立一个用户名为
YH
,描述信息为moxiaoyang's roommate
,用户组为YH
,登录shell
为/bin/sh
,登录主目录为/home/YH
的用户useradd -r YH -c "moxiaoyang's roommate" -g YH -s /bin/sh -d /home/YH
不清楚为啥这条命令为啥不行,反正centos8
这条命令不行,不清楚红帽里能不能用。使用
passwd
为用户添加密码要是弹出来说太简单了,没有关系的,再输入一次就行
锁定用户密码:
passwd -l 用户名
解锁用户密码:
passwd -u 用户名
使用
usermod
命令修改用户信息将用户
YH
的用户名改为YHH
,其登录shell
改为/bin/ash
,用户描述信息改为"YH"
锁定用户,使用
-L
参数可以看到这里只有一个
!
,以作为和password
的区分。解锁用户,使用
-U
参数比较有趣的一点是,若是用
passwd -l
进行上锁,可以使用输入两次usermod -u
进行解锁
使用
userdel
命令删除用户加上
-r
删除电户的同时,一并删除该用户对应的主目录。使用
groupadd
命令创建用户组使用
groupmod
命令修改用户组属性
# 第二章 Samba服务器配置
# 2.1 Samba概述
Samba
的主要功能
- 共享
Linux
的文件系统。 - 共享安装在
Samba
服务器上的打印机。 - 支持
Windows
客户使用网上邻居浏览网络。 - 使用
Windows
客户系统共享的文件和打印机。 - 支持
Windows
域控制器和Windows
成员服务器使用。 Samba
资源的用户进行认证。- 支持
WINS
名字服务器解析及浏览。 - 支持
SSL
安全套接层协议。
# 2.2 安装Samba服务
查看
Samba
服务是否安装#rpm -qa | grep samba
1
# 2.3 Samba服务器的基本配置
Samba
配置文件应存放在/etc/samba/smb.conf
1先备份一下配置文件(不熟练前都在对配置文件进行操作时都尽量进行备份)
#cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
1Samba
设置包括四个设置段[global]
设置全局环境选项[homes]
设置用户宿主目录选项[printers]
设置打印机共享[sharefiles]
设置文件共享
需要注意是在配置文件中以
#
或者;
开头的皆为注释内容
# 2.3.1 smb.conf
配置文件实例详解
smb.conf
包括几个段,每个段都以方括号包括。段名后面跟着若干key/value
(键值对)。
[global]
(全局设置)workgroup=WGK
# 指定工作组的名称server string
=描述security
=指定安全模式share
客户端连接服务器时不需要输入用户名和密码user
(缺省设置)客户端连接服务器时需要输入用户名和密码server
客户端连接服务器时需要输入用户名和密码,但密码验证需要密码验证服务器来负责domain
采用域控制器对用户进行身份验证ads
若samba
服务器加入到windows
活动日录中则使用ads
安全级别,ads
安全级别必须指定口令服务器
hosts allow
=限定主机访问log file
=指定日志文件存放的配置max log size
=指定日志文件的最大大小
[share]/[public]
- comment = Shared Folder # 描述信息
- path = /srv/samba/share # 共享目录路径
- browseable = yes # 允许在网络中浏览
- guest ok = yes # 允许访客访问
- read only = no # 是否只读(no 表示可写)
- create mask = 0755 # 设置文件创建的权限
以上是最小的
sbm.conf
配置,该文件至少需要全局段和若干个共享段。全局段描述适应于整个Samba
服务器的设置,每个共享段述一个对象的属性[homes]
comment = Home Directories
# 描述信息browseable = no
# 主目录不在网络邻居中显示writable = yes
# 是否允许写入valid users = %S
# 限制为当前用户可以访问
[printers]
comment = All Printers
path = /var/spool/samba
# 打印机的临时文件路径browseable = no
# 是否在网络中显示打印机guest ok = yes
# 是否允许访客访问打印机writable = no
# 打印机不允许写入(仅限打印)printable = yes
# 指定这是一个可打印的共享资源
[profiles]
comment = User Profiles
# 对该共享的描述,方便管理员识别path = /var/lib/samba/profiles
# 存放用户配置文件的目录路径browseable = no
# 设置为 no,避免在网络浏览器(如 Windows 的“网络邻居”)中显示该共享guest ok = yes
# 允许未认证的访客用户访问该共享writable = yes
# 允许用户对该共享目录具有写权限create mask = 0700
# 当创建文件时,设置默认的文件权限为 0700(文件仅对所有者可见和可写)directory mask = 0700
# 当创建目录时,设置默认的目录权限为 0700(目录仅对所有者可见和可写)
# 2.3.2 使用Samba
服务
查看
Samba
状态Samba
服务的名字为smb
,其中包含Smbd
和Nmbd
两个服务,可以使用以下命令来查看Samba
守护进程的状态。#service smb status #systemctl status smb.service # 新版本使用这个命令 #systemctl status nmb.service
1
2
3开启
Samba
服务#service smb start #systemctl start smb.service # 新版本使用这个命令 #systemctl start nmb.service
1
2
3
4停止
Samba
服务#service smb stop #systemctl stop smb.service # 新版本使用这个命令 #systemctl stop nmb.service
1
2
3
# 2.4 Samba客户端配置应用
公司现有一个工作组
mygroup
,共享目录/share
,共享名为share
,此共享目录允许所有员工访问。修改配置文件修
/etc/samba/smb.conf
#vi /etc/samba/smb.conf
1修改内容如下所示
[global] workgroup = mygroupe # 指定 Samba 服务器所加入的 Windows 工作组 security = share # 允许基于共享的访问控制 [share] comment = share # 提供对共享的描述 path = /home/share # 指定共享资源在文件系统中的实际路径 public = yes # 指示该共享是否对所有用户开放
1
2
3
4
5
6
7建立
/share
文件夹,在文件夹中建了一个测试文件file.text
。重新启动
samba
服务器#service smb restart #systemctl restart smb.service # 新版本使用这个 #systemctl restart nmb.service
1
2
3
4
由于我的
samba
版本过新,导致无法将security
设置为public
,所以我采用用户登入的方式(上方为学院派,下方为实践派)。首先创建一个组为
share
,创建一个用户share在组中# groupadd share # useradd -d /home/share -g share share
1
2修改配置文件修
/etc/samba/smb.conf
# 在文件的最后加入 comment=name #描述信总 path=/home/name #共享目录 browseable=yes #可浏览 writable=yes #是否有写权限 available=yes #可使用 avalide valid users=name #允许访问该共享的用户 write list=name #可写入共享的用户列表
1
2
3
4
5
6
7
8将用户添加入samba账户中,设置好对应的密码
# smbpasswd -a share
1关闭防火墙
# systemctl stop firewalld.service # setenforce 0
1
2重新启动
samba
服务器#systemctl restart smb.service
1在运行窗口中输入,然后输入刚刚设置的用户和密码即可登入
登录入页面为
若
windows
要对文件进行更改,则需要使用chmod
来改变文件的权限。还需要注意一点的是,若想用VM的网络连接方式要设置为网桥,设为网桥显示网络无法连接,可以使用下方链接。
解决win10系统下VMware的虚拟机桥接模式不可用问题_桥接模式不显示winr-CSDN博客 (opens new window)
学校现有多个部门,因工作需要,将教学管理部的资料存放在
samba
服务器的/jxgls
目录中集中管理,以便教学管理人浏览,并且该目录只允许教学管理部门的员工访问添加教学管理部门的用户和组,建立文件夹
/jxgls
#groupadd jxgl #useradd -g jxgl jxuser1 #useradd -g jxgl jxuser2 #passwd jxuser1 #passwd jxuser2 #mkdir /jxgl #vi /jxgl/jx.text
1
2
3
4
5
6
7将两个帐户
jxuser1
和jxuser2
添加到samba
的帐户中#smbpasswd -a jxuser1 #smbpasswd -a jxuser2
1
2修改
samba
配置文件smb.conf
#vi /etc/samba/smb.conf
1[global] workgroup = mygroup security = user encrypt passwords = yes smb passwd file = /etc/samba/smbpasswd [jxgl] comment = jxlgs path = /jxgl valid users = @jxgl [homes] comment = H browseable = no writable = yes valid users = %S
1
2
3
4
5
6
7
8
9
10
11
12
13
14关闭防火墙
# systemctl stop firewalld.service # setenforce 0
1
2重新启动
samba
服务器#systemctl restart smb.service
1在运行窗口中输入,然后输入刚刚设置的用户和密码即可登入
打开结果如下图所示
在登入的时候可能会出现下述情况,如你所示,不允许一个用户使用一个以上用户名与服务器或共享资源的多重连接。中断与此服务器或共享资源的所有连接,然后再试一次。所以需要在
Windows
中关闭这个服务。net use # 列出当前连接的共享 net use \\server\share /delete # 断开特定的共享 net use * /delete /y # 断开所有链接
1
2
3
4假如公司有财务,技术,领导
3
个部门,相应的4
个用户组为caiwu
,jishu
,lingdao
;3
个部门里各有2
个用户分别为caiwu01
,caiwu02
,jishu01
,jishu02
,lingdao01
,lingdao02
架设Samba
服务器,要求如下Samba
服务器采用用户验证的方式,每个用户可以访问自己的宿主目录,并且只有该用户能访问宿主目录,并具有完全的权限,而其他人不能看到你的宿主目录建立一个
caiwu
的文件夹,希望caiwu
组和lingdao
组的人能看到,jishu02
也可以访问,但只有caiwu01
有写的权限建立一个
lingdao
的目录,只有领导组的人可以访问并读写,还有jishu02
也可以访问,但外人无法访问这个目录建立一个文件交换目录
jiaohuan
,所有人都能读写,包括guest
用户,但每个人不能删除别人的文件建立一个公共的只读文件夹
public
,所有人只读这个文件的内容
添加组和用户
[root@anonymous ~]# groupadd caiwu # 添加组 [root@anonymous ~]# groupadd jishu [root@anonymous ~]# groupadd lingdao [root@anonymous ~]# useradd -g caiwu caiwu01 # 创建新的用户,并将其添加进对应的组中 [root@anonymous ~]# useradd -g caiwu caiwu02 [root@anonymous ~]# useradd -g jishu jishu01 [root@anonymous ~]# useradd -g jishu jishu02 [root@anonymous ~]# useradd -g lingdao lingdao01 [root@anonymous ~]# useradd -g lingdao lingdao02
1
2
3
4
5
6
7
8
9将
6
个帐户添加到samba
的帐户中[root@anonymous ~]# smbpasswd -a caiwu01 # 将用户添加进入smbpasswd中 [root@anonymous ~]# smbpasswd -a caiwu02 [root@anonymous ~]# smbpasswd -a jishu01 [root@anonymous ~]# smbpasswd -a jishu02 [root@anonymous ~]# smbpasswd -a lingdao01 [root@anonymous ~]# smbpasswd -a lingdao02
1
2
3
4
5
6建立宿主目录,交换目录及公共目录
[root@anonymous ~]# mkdir /home/samba # 创建所需目录 [root@anonymous ~]# mkdir /home/samba/caiwu [root@anonymous ~]# mkdir /home/samba/jishu [root@anonymous ~]# mkdir /home/samba/lingdao [root@anonymous ~]# mkdir /home/samba/jiaohuan [root@anonymous ~]# mkdir /home/samba/public
1
2
3
4
5
6在相应的文件夹建立文件
[root@anonymous ~]# vi /home/samba/caiwu/cafile1 [root@anonymous ~]# vi /home/samba/caiwu/cafile2 [root@anonymous ~]# vi /home/samba/lingdao/lifile1 [root@anonymous ~]# vi /home/samba/lingdao/lifile2 [root@anonymous ~]# vi /home/samba/jiaohuan/jifile1 [root@anonymous ~]# vi /home/samba/jiaohuan/jifile2 [root@anonymous ~]# vi /home/samba/public/pufile1 [root@anonymous ~]# vi /home/samba/public/pufile2
1
2
3
4
5
6
7
8修改
samba
配置文件smb.conf
[global] workgroup = mygroup security = user encrypt passwords = yes smb passwd file = /etc/samba/smbpasswd [homes] comment = Home Directories browseable = no writable = yes valid users = %S [caiwu] comment = caiwu path = /home/samba/caiwu public = no vaild users = @caiwu,@lingdao,jishu02 write list = caiwu01 [lingdao] comment = lingdao path = /home/samba/lingdao public = no browseable = no valid users = @lingdao,jishu02 [jiaohuan] comment = Exchange File Directory path = /home/samba/jiaohuan public = yes writable = yes [public] comment = Read Only Public path = /home/samba/public public = yes read only = yes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32修改权限,使
/home/samba/jiaohuan
目录下的文件使所有人能读写,但不能删除别人的文件[root@anonymous ~]# chmod -R 1777 /home/samba/jiaohuan
11:粘滞位(sticky bit)。当这个位设置时,只有文件的所有者或超级用户(root)可以删除或重命名该目录中的文件。
重启
samba
服务器#systemctl restart smb.service
1打开结果如下
使用
caiwu01
的账号打开使用
jishu02
账号打开这里需要注意由于在设置
lingdao
的时候,设置了browseable = no
属性,所以导致共享不会出现在网络浏览器中,用户需要知道确切的路径才能访问。所以若想要访问lingdao
文件夹,则需要输入确切的地址
# 第三章 DHCP简介
DHCP
服务器利用租约机制,实现了对整个网络IP
地址的自动统一分配和集中管理- 当客户机向
DHCP
服务器请求分配IP
地址时DHCP
服务器会自动从地址池中分配一个未使用的IP地址给客户机,从而实现IP地址的动态分配。 - 在分配
IP
地址给客户机的同时也可为客户机指定默认网关、子网掩码和DNS
服务器等
DHCP服务的优点
- 网络管理员可以验证IP地址和其他配置参数,而不用去检查每个主机。
DHCP
服务不会同时租借相同的IP地址给两台主机。DHCP
管理员可以约束特定的计算机使用特定的IP
地址。- 可以为每个
DHCP
作用域设置很多选项。 - 客户机在不同子网移动时不需要重新配置
IP
地址。
DHCP服务的缺点
DHCP
不能发现网络上非DHCP
客户机已经在使用的IP
地址- 当网络上存在多个
DHCP
服务器时,一个DHCP
服务器不能查出被其他服务器租出去的IP
地址;
# 3.1 DHCP工作机制
- DHCP Discover
- 客户端设备在网络中广播一个
DHCP Discover
数据包,以寻找可用的DHCP
服务器。
- 客户端设备在网络中广播一个
- DHCP Offer
- DHCP 服务器接收到
Discover
请求后,回应一个DHCP Offer
数据包,包含可用的IP
地址、子网掩码、网关和租约时间等信息。
- DHCP 服务器接收到
- DHCP Request
- 客户端收到一个或多个
Offer
后,选择其中一个并向该DHCP
服务器发送DHCP Request
数据包,表示接受该服务器提供的配置信息。
- 客户端收到一个或多个
- DHCP Acknowledgment (ACK)
DHCP
服务器接收到Request
后,确认客户端的请求,并发送一个DHCP Acknowledgment(ACK)
数据包,正式将IP
地址分配给客户端。
IP
地址使用- 客户端收到
ACK
后,可以使用分配的IP
地址进行网络通信。在租约期内,客户端可以使用该地址。
- 客户端收到
- 租约续约
- 在租约到期前,客户端可以向
DHCP
服务器发送请求,尝试续约以继续使用该IP
地址。
- 在租约到期前,客户端可以向
# 3.2 DHCP的安装
安装前的准备工作
在不确定
Linux
系统中是否已经安装DHCP
服务的情况下,可以在shel
提示符输入rpm -qa | grep dhcp
(如己经安装则不需要下述步骤)centos8
安装DHCP
[root@anonymous ~]# sudo dnf -y install dhcp-server
1Red Hat Enterprise Linux5
安装DHCP
# mount /dev/cdrom /mnt # cd /mnt/Server # rpm -ivh dhcp-3.0.5-21.el5.i386.rpm
1
2
3检查是否安装完成
[root@anonymous ~]# rpm -qa | grep dhcp
1
# 3.3 主配置文件dhcpd.conf
- 配置文件山参数、声明、选项组成
- 选项必须使用
option
关键字 - 除块标识(大括号)以外每行必须以分号作为行结束符。
- 以
#
开始的是注释行(在执行时将被忽略)
常用声明
声明(declaration)用于描述网络的布局,描述客户,提供客户的地址,或者把一组参数应用到一组声明中。
常用参数
参数(parameter)用于表明如何执行任务,是否要执行任务,或将哪些网络配置选择项发给客户。
常用选项
某些参数必选以 option
关键字开头,它们也被称为选项。是用来配置 DHCP
客户端的可选参数;而参数配置是必选的或者控制 DHCP
服务行为的值。
# 3.4 书写dhcpd.conf
首先进入dhcpd.conf
页面
[root@anonymous ~]# vi /etc/dhcp/dhcpd.conf
书写dhcpd.conf
页面
ddns-update-style interim; # 指定动态 DNS 更新的方式为 interim
ignore client-updates; # 忽略来自客户端的更新请求
subnet 192.168.1.0 netmask 255.255.255.0 { # 定义子网及其子网掩码
# --- default gateway
option routers 192.168.1.1; # 默认网关
option subnet-mask 255.255.255.0; # 子网掩码
option nis-domain "domain.org"; # NIS 域名
option domain-name "domain.org"; # 域名
option domain-name-servers 192.168.1.1; # DNS 服务器地址
option time-offset -18000; # 时区偏移(东部标准时间)
# option ntpservers 192.168.1.1; # 可选的 NTP 服务器
# option netbios-name-servers 192.168.1.1; # 可选的 NetBIOS 名称服务器
# -- 选择点对点节点(默认是混合模式),不建议修改
# option netbios-node-type 2;
range dynamic-bootp 192.168.1.128 192.168.1.254; # 动态分配的 IP 地址范围
default-lease-time 21600; # 默认租约时间(6小时)
max-lease-time 43200; # 最大租约时间(12小时)
# 为特定主机提供固定地址
host ns {
next-server marvin.redhat.com; # 指定下一个服务器
hardware ethernet 12:34:56:78:AB:CD; # 硬件地址(MAC 地址)
fixed-address 207.175.42.254; # 指定固定 IP 地址
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 第四章 Web服务器配置
Web
的工作过程可以归纳为以下几个步骤:
- 用户启动浏览器,在浏览器地址栏中指定一个
URL
,浏览器便向该URL
所指定的Web
服务器发出请求。 Web
服务器接到浏览器的请求后,把URL
转换成网页所在服务器上的文件路径名Web
服务器执行Web
应用程序的服务端代码,对数据库进行操作。- 数据库执行的结果返回给Web服务器
- Web服务器将服务端代码执行的结果大嵌入到客户端请求的文档中。
- Web服务器向客户端发送页面
- 客户端浏览显示页面。
# 4.1 Apache简介和特性
Apache
简介
Apache
最初是由伊利诺伊大学香槟分校的国家超4
级计算机应用中心(NCSA)开发的,此后,Apache
被开放源代码团体的成员不断地发展和加强。- 开始
Apache
只是Netscape
网页服务器(现在是Sun ONE)之外的开放源代码选择,后来,它逐在功能和速度上超越了其他的基于UNIX
的HTTP
服务器。1996
年4
月以来,Apache
一直是Internet
上流行的HTTP
服务器
Apache
的特性
- 支持最新的
HTTP/1.1
通信协议。 - 简单而强有力的基于文件的配置过程。
- 支持
PHP
、CG1
、Java Servlets
和FastCGl
. - 支持基于
IP
和基于域名的虚拟主机。 - 实现了动态共享对象(
DSO
),允许在运行时动态装载模块。 - 支持服务器端包含指令(
SSI
) - 支持各种方式的
HTTP
认证 - 支持安全Socket层(SSL)。
# 4.2 所需软件的安装
# 4.2.1 Apache安装
[root@anonymous ~]# yum install httpd # 由于我使用的是龙溪,所以可以直接使用yum
验证是否安装成功
也可以挂载光盘然后进行下载。
# rpm -qa | grep httpd
# mount /dev/cdrom /mnt
# cd /mnt
# cd Server
# rpm -ivh httpd-2.2.3-6.e15.i386.rpm # 为Apache服务的主程序包,服务器端必须安装该软件包
# rpm -ivh apr-deve1-l.2 7-11.e15_3.1.i386.rpm
# rpm -ivh httpd-devel-2.2.3-6.e15.i386.rpm # 为Apache开发程序包
# rpm ivh libxsit-python-l.1.17-2.e15_2.2.1386.гpm
# rpm ivh system config-hltpd-l.3.3.3-1.e15.nosrch.rpm
2
3
4
5
6
7
8
9
10
# 4.2.2 mysql的安装
第一步: 切换到opt
目录,下载mysql
的rpm
包
[root@192 opt]# cd /opt # 先切换到opt来存放我们的mysql的rpm包
[root@192 opt]# wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
2
注意: 如果wget
命令不可用,我们需要安装wget
命令
# yum -y install wget
第二步:进行repo的安装
[root@192 opt]# rpm -ivh mysql80-community-release-el7-1.noarch.rpm
第三步:安装MySQL Server
[root@192 opt]# yum install mysql-server
第四步: 启动MySQL
[root@192 opt]# systemctl start mysqld.service # 启动MySQL
[root@192 opt]# systemctl status mysqld.service # 查看MySQL的状态
2
挂载光盘安装
# rpm -ivh perl-DBl-1.52-2.el5.i386.rpm
# rpm -ivh mysql-5.0.77-3.e15.i386.rpm
# rpm -ivh perl-DBD-MySQL-3.0007.2.el5.i386.rpm
# rpm -ivh mysql-server-5.0.77-3.el5.i386.rpm
2
3
4
第五步:启动完成后去到/var/log/mysqld.log
或者/var/log/mysql/mysqld.log
中去看初始密码。
第七步:进入mysql
,并修改密码
[root@192 mysql]# mysql -u root -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
-- exit 表示退出
mysql> exit
2
3
重新尝试登录,成功则说明修改密码成功。
第八步:防火墙开放3306
端口
[root@192 opt]# firewall-cmd --permanent --add-port=3306/tcp # 开放防火墙对3306端口的权限
[root@192 opt]# firewall-cmd --reload # 重载防火墙服务
[root@192 opt]# firewall-cmd --list-ports # 查看防火墙开发的端口有哪些
3306/tcp
2
3
4
我开的端口比较多,只要看到
3306
是开启的就行
# 4.2.3 PHP安装
[root@192 opt]# yum install -y php
挂载光盘安装
# php-5.1.6-15.el5.i386.rpm
# php-cli-5.1.6-15.el5.i386.rpm
# php-common-5.1.6-15.el5.i386.rpm
# php-pdo-5.1.6-15.el5.i386.rpm
# php-mysq1-5.1.6-15.el5.i386.rpm
2
3
4
5
# 4.3 Apache服务器基本配置
Red Hat Enterprise Linux5
中,主配置文件默认在/etc/httpd/conf
目录中,另外在/etc/httpd/conf.d
目录中有一些扩展配置文件。安装Apache
后,系统会将Apache
服务的配置文件放入固定的目录下:
目录 | 说明 |
---|---|
/etc/httpd/conf | 存放Apache服务器的配置文件 |
/etc/init.d/httpd | Apache服务的启动脚本 |
/var/www/html | Apache服务器默认Web站点根目录 |
/usr/bin | Apache软件包提供的可执行文件安装目录 |
letc/httpd/logs | Apache服务器的日志文件目录 |
# 4.3.1 主配置文件httpd.conf
- 整个配置文件总体上划分三个部分(section):第一部分是全局环境设置,主要用于设置
ServerRoot
、主进程号的保存文件、对进程的控制、服务器监听的IP地址和端口以及需要装载的DSO
(Dynamic SharedObject)模块等;第二部分是服务器的Web
站点的基本配置;第三部分是虚拟主机段。
# 4.3.2 根目录设置
httpd.conf
配置文件中的ServerRoot
字段用来设置Apache
的配置文件、错误文件和日志文件的存放目录,并且该目录是整个目录树的根节点(设置服务器的根目录)。默认情况下根路径为/etc/httpd
,可根据需要进行修改。
# ServerRoot 目录路径
ServerRoot "/etc/httpd/conf"
2
# 4.3.3 文档目录设置
httpd.conf
配置文件中的DocumentRoot
字段用来设置服务器对外发布的超文本文档存放的路径。
# DocumentRoot目录路径
DocumentRoot "/var/www/html"
2
# 4.3.4 主机名称设置
httpd.con
f配置文件中的ServerName
字段设置了服务器用于辨别自己的主机名和端口号,主要用于创建转向URL
,默认情况下是不需要设置这个参数的。
# ServerName 完整的域名[:端口号]
ServerName www.zhr.com:80
2
# 4.3.5 超时设置
httpd.conf
配置文件中的Timeout
字段用于设置服务器与客户端连接的超时间隔,以秒为单位,默认时间是120
秒。如果120
秒没有收到或送出任何数据,就切断连接。
# Timeout 数值
Timeout 360
2
# 4.3.6 两次请求之间等待的最大时间设置
KeepAliveTimeout
用于设置持续作用中服务器在两次请求之间等待的最大时间间,以秒为单位,默认值是15
。如果服务器已经完成了一次请求,但在超过了该指令设置的时间间隔后,还没有收到下一次请求,那么服务器就断开连接(两个相邻连接的时间间隔超过15
秒,就切断连结)。
# KeepAliveTimeout 数值
KeepAliveTimeout 24
2
# 4.4 Apache的启动与停止
图形界面方式
在图形用户界面中,执行""系统""→"管理"→“服务”,弹出服务配置窗口。选中httpd
复选框,然后通过该窗口上的“开始”、“停止”和“重启”来操作Apache
服务器
命令行窗口可以输入
# service httpd start // 启动Apache服务
# service httpd status // 查看Apache是否已经启动
# service httpd stop // 停止Apache服务
2
3
出现这种情况,自己在对应的
testpage/index.html
下面创建一个,访问127.0.0.1。显示的就是index.html中的内容
# 4.5 Apache页面编辑实践
# 4.5.1 配置数据库
在根目录下创建一个test
目录,里面写一个test.txt
文件
进入mysql
输入如下指令
-- 创建数据库
CREATE DATABASE student;
-- 切换到 student 数据库
USE student;
-- 创建表 sytable,包含 id(自动递增主键)、name(名字)、age(年龄)、addr(地址)
CREATE TABLE sytable (
id INT(3) AUTO_INCREMENT NOT NULL PRIMARY KEY,
name CHAR(6) NOT NULL,
age INT(2) NOT NULL,
addr VARCHAR(50) DEFAULT '大连市'
);
-- 插入多条数据
INSERT INTO sytable (name, age, addr) VALUES
('张三', 20, '大连'),
('李四', 22, '北京市'),
('王五', 23, '上海市'),
('赵六', 24, '广州市');
-- 查询 sytable 表中的所有数据
SELECT * FROM sytable;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 4.5.2 编写php
index.php
<?php
// 连接数据库
$id=mysql_connect('localhost','root','root');
$ok=mysql_select_db('student',$id);
// 检查连接是否成功
if ($ok) {
echo "connect mysgl ok<br>";
} else {
echo "connect mysql error";
}
// 选择数据库
$ok = mysql_select_db('student', $id);
if (!$ok) {
die("选择数据库失败: " . mysql_error());
}
// 查询语句
$query = "SELECT * FROM sytable";
$result = mysql_query($query, $id);
// 检查查询是否成功
if (!$result) {
die("查询失败: " . mysql_error());
}
$datanum = mysql_num_rows($result);
echo "<table border='1' align='center' width='400'>
<tr><td>ID</td><td>Name</td><td>Age</td><td>Addr</td></tr>";
// 遍历结果集
while ($info = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "<tr><td>" . $info['id'] . "</td>";
echo "<td>" . $info['name'] . "</td>";
echo "<td>" . $info['age'] . "</td>";
echo "<td>" . $info['addr'] . "</td></tr>";
}
echo "<tr><td><a href='a.html'>插入</a></td>";
echo "<td><a href='b.html'>删除</a></td></tr>";
echo "</table>";
// 关闭数据库连接
mysql_close($id);
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
a.php
<?php
// Connect to the database
$id = mysql_connect('localhost', 'root', '123456');
$ok = mysql_select_db('student', $id);
// Check if the connection was successful
if ($ok) {
echo "connect mysql ok";
} else {
echo "connect mysql error";
}
// Retrieve POST data
$x = $_POST["name"];
$y = $_POST["age"];
$z = $_POST["addr"];
// Validate inputs
if ($x == "") {
echo "<br>name is not null <a href='a.html'>return</a>";
exit();
}
if ($y == "") {
echo "<br>age is not null <a href='a.html'>return</a>";
exit();
}
if ($z == "") {
echo "<br>addr is not null <a href='a.html'>return</a>";
exit();
}
// Insert data into the table
$query = "INSERT INTO sytable (name, age, addr) VALUES ('$x', '$y', '$z')";
$result = mysql_query($query, $id);
$error = mysql_error();
if ($error) {
echo "Insert record error: " . $error;
}
// Close the database connection
mysql_close($id);
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
b.php
<?php
// Connect to the database
$id = mysql_connect('localhost', 'root', '123456');
$ok = mysql_select_db('student', $id);
// Check if the connection was successful
if ($ok) {
echo "connect mysql ok";
} else {
echo "connect mysql error";
}
// Retrieve the ID from POST data
$x = $_POST['id'];
// Validate input
if ($x == "") {
echo "<br>ID is not null! <a href='a.html'>return</a>";
exit();
}
// Prepare the delete query
$query = "DELETE FROM sytable WHERE id = $x";
$result = mysql_query($query, $id);
$error = mysql_error();
// Check for errors and display messages
if ($error) {
echo "<br>Delete record error: " . $error;
} else {
echo "<br>Delete record succeed <a href='b.html'>return</a>";
}
// Close the database connection
mysql_close($id);
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37