Linux基础
运维概述与Linux系统安装
一、VMware虚拟机
1、什么是虚拟机
其实虚拟机就是在Windows的真机上创建一个独立的其他操作系统的运行环境而且其对宿主机(Windows)没有任何影响。
2、虚拟机的种类
虚拟机目前有2 个比较有名的产品:vmware 出品的vmware workstation、oracle 出品的virtual Box。
推荐使用VMware WorkStation
3、VMware虚拟机的安装
第一步:复制VMware软件包到Windows系统中
第二步:双击VMware安装包,进行软件的安装
第三步:勾选软件的许可协议
第四步:设置VMware安装路径以及勾选增强型的键盘程序
第五步:用户体验设置
下一步、下一步,直到软件安装完成即可。
第六步:安装完成后,输入许可证密钥,破解VMware软件
输入密钥:
特别注意:VMware WorkStation安装完毕后,其在网络适配器中会产生两张虚拟网卡。
VMnet1与VMnet8,如果没有产生这两张网卡,则操作系统必须重装!
二、Linux环境准备
1、为什么创建Linux运行环境
Linux系统版本选择:CentOS7.6 x64,【镜像一般都是CentOS*.iso文件】
问题:为什么不选择最新版的 8 版本?
7.x 目前依然是主流
7.x 的各种系统操作模式是基础
2、创建CentOS7虚拟运行环境
第一步:创建新的虚拟机
第二步:选择自定义设置
第三步:选择稍后安装操作系统
第四步:选择要安装的操作系统类型
第五步:设置操作系统的名称与安装路径
第六步:CPU选择1颗2核
第七步:内存设置为2048MB(2GB)
第八步:设置网络模式为NAT模式(共享上网)
设置完毕后,下一步、下一步、下一步…直到虚拟机创建完成。
三、CentOS7.6系统安装
1、下载操作系统
2、安装CentOS7.6操作系统(上)
第一步:选择CD/DVD光驱,如下图所示
第二步:选择CentOS7.6光盘文件(CentOS-7.6-x86_64-DVD-1810.iso,不需要解压)
第三步:启动CentOS7.6操作系统光盘镜像
使用方向键向上移动到第一个菜单
回车,进入安装菜单
再次按回车,进入到CentOS7.6的安装界面。
3、安装CentOS7.6操作系统(中)
第一步:选择安装时使用的语言(全英文)
第二步:设置时间 => 亚洲/上海 => Asia/Shanghai
第三步:选择安装系统界面以及需要安装的软件(非常重要)
第四步:自动分区
由于还没有学习过Linux的分区技术,所以我们暂时选择自动分区。
第五步:连接网络
第六步:给root管理员设置密码以及创建一个普通的用户
root账号默认已经存在,但是没有密码,需要人为设置。设置完成后,还需要创建一个普通的账号如itheima。
root密码:123456,超级管理员,实际工作中越复杂越好
itheima密码:123456,普通账号
4、安装CentOS7.6操作系统(下)
第一步:安装完成后,单击Reboot按钮,重启计算机
第二步:选择同意CentOS7授权
第三步:勾选同意以上许可协议
设置完成后,单击完成配置,到此CentOS7.6就全部安装完成了!
四、给CentOS7操作系统拍摄快照
1、什么是快照
快照可以理解就是一个快速的备份操作。
为什么要拍摄快照:就是为了做一个系统的备份,防止小伙伴们误操作,导致系统不可用。
2、VMware实现快照
第一步:选择虚拟机=>快照=>拍摄快照
第二步:设置快照的名称
设置完成后,单击拍摄快照,一闪,备份完成。
3、恢复快照
当有一天,我们的Linux系统不小心损坏了,不用单击。单击虚拟机菜单=>快照=>恢复到快照即可立即恢复。
五、锁屏时间配置
1、什么是锁屏
当我们的计算机静止不动,5分钟后,会自动锁定屏幕。
解锁还需要重新输入密码,很麻烦,所以应该解除5分钟限制。
2、解除5分钟锁屏限制
第一步:单击设置菜单
第二步:选择Power(节能)
第三步:设置锁屏时间
六、Linux基础命令
学习目标
1、为什么要进行备份
答:保证CentOS7.6操作系统的安全,必须对操作系统进行备份
2、VMware有哪些系统备份方式
① 快照备份
② 克隆备份
3、快照备份
快照:又称还原点,就是保存在拍快照时候的系统的状态(包含了所有的内容),在后期的时候随时可以恢复。
☆ 拍摄快照
第一步:启动Linux的操作系统(快照备份是在系统启动后进行操作的)
第二步:单击VMware菜单栏=>虚拟机=>快照=>选择拍摄快照
第三步:输出拍摄快照的名称(为什么要有名字?为了方便后期的恢复操作)
☆ 恢复快照
第一步:模拟Linux操作系统故障(比如系统文件被删除、系统损坏等等)
第二步:选择VMware菜单栏=>虚拟机=>快照=>恢复到快照(根据拍摄时的名称进行恢复)
☆ 总结
注意:侧重在于短期备份,需要频繁备份的时候都可以使用快照,做快照的时候虚拟机中操作系统一般处于开启状态
4.克隆备份
克隆:复制
克隆不同于快照,要求克隆,操作系统处于关闭状态
第二步:在要克隆的操作系统菜单上,鼠标右键,选择管理,选择克隆
第三步:根据向导进行克隆备份
下一步、下一步,选择克隆类型,一定要选择完整克隆
设置克隆机的名称以及存储路径(此路径剩余可用空间必须>=10G)
克隆完成后,效果如下图所示:产生了一个全新的操作系统
☆ 总结
克隆侧重长期备份,做克隆的时候是必须得关闭操作系统(了解)
应用场景:快速创建多台计算机
快照和克隆的区别
克隆与快照的最大的区别:克隆之后是2 台机器,而快照之后依旧是1 台机器(类似windows的还原点)。后期的危险操作前建议使用快照。
二、Linux系统使用注意
1、Linux严格区分大小写
Linux 和Windows不同,Linux严格区分大小写的,包括文件名和目录名、命令、命令选项、配置文件设置选项等。
例如,Win7 系统桌面上有文件夹叫做Test,当我们在桌面上再新建一个名为 test 的文件夹时,系统会提示文件夹命名冲突;
Windows演示:
Linux演示:
由以上图解可知:Linux是一个非常严谨的操作系统,严格区分大小写。
由以上图解可知:Linux是一个非常严谨的操作系统,严格区分大小写。
2、Linux文件”扩展名”
在Linux操作系统中,与Windows不同,其文件的类型不是通过扩展名来进行区分的
我们都知道,Windows 是依赖扩展名区分文件类型的,比如,”.txt” 是文本文件、”.exe” 是执行文件,但 Linux 不是。
Linux系统通过权限位标识来确定文件类型,常见文件有普通文件,目录文件,链接文件,块设备文件,字符设备文件,Linux可执行文件技术普通文件被赋予可执行权限
Linux常见后缀名
Linux 中的一些特殊文件还是要求写 "扩展名" 的,但 Linux 不依赖扩展名来识别文件类型,写这些扩展名是为了帮助运维人员来区分不同的文件类型。
这样的文件扩展名主要有以下几种:
压缩包:Linux 下常见的压缩文件名有 *.gz、*.bz2、*.zip、*.tar.gz、*.tar.bz2、*.tgz 等。
为什么压缩包一定要写扩展名呢?很简单,如果不写清楚扩展名,那么管理员不容易判断压缩包的格式,虽然有命令可以帮助判断,但是直观一点更加方便。就算没写扩展名,在 Linux 中一样可以解压缩,不影响使用。
二进制软件包:CentOS 中所使用的二进制安装包是 RPM 包,所有的 RPM 包都用".rpm"扩展名结尾,目的同样是让管理员一目了然。=> 类似Windows中的exe文件
程序文件:Shell 脚本一般用 ".sh" 扩展名结尾。=> check_network.sh
网页文件:网页文件一般使用 ".php" 等结尾,不过这是网页服务器的要求,而不是 Linux 的要求。
.html/.css/.js/.jsp/.php/.py => 网页文件
Linux操作系统不易扩展名来判断文件,而是通过权限位标识符判断
有一些特殊文件,有扩展名–>压缩包,二进制软件包,程序文件,网页文件
3、Linux中所有内容以文件形式保存
在Linux系统中,一切皆文件!
在Windows是文件的,在Linux下也是文件。在Windows中不是文件的,在Linux系统中也是文件。
问题:我们目前还没有学习权限标识符,怎么判断文件的类型呢?
可以通过文件颜色
然后使用ls命令,查看文件的颜色
# ls
l : L的小写形式
普通文件:通过ls命令查看时,如果显示黑色,代表其是一个普通的文件
文件夹:通过ls命令查看时,如果显示天蓝色,代表是一个文件夹
4、Linux中存储设备都必须在挂载之后才能使用
Windows:分区+格式化
Linux操作系统:分区+格式化+挂载,存储设备必须挂载后才能使用(硬盘,光盘,u盘)
mount命令: mount 空格 /dev/sda1 空格 /mnt/file
三、Linux系统的目录结构(重要)
1、Linux分区与Windows分区
Linux 系统不同于 Windows,没有 C 盘、D 盘、E 盘那么多的盘符,只有一个根目录(/),所有的文件(资源)都存储在以根目录(/)为树根的树形目录结构中。
Windows:
Linux:
2、Linux系统文件架构
Linux根目录(/)下包含很多子目录,叫一级目录
bin,boot ,dev
同时,各一级目录下还含有很多子目录,称为二级目录。
例如 /bin/bash、/bin/ed 等。
3、Linux系统的文件目录用途
/bin: 系统命令目录
/sbin: 超级命令目录,只有超级管理员可以执行命令
/boot: 系统目录,类似于Win里的c盘
/dev: 设备文件目录硬盘、光驱、U盘都属于设备文件,/dev/sr0代表光驱设备。注意,次目录下的文件没有办法直接使用,必须先挂载
/etc :代表系统配置文件目录,软件安装后的配置文件都放在etc
/home:普通用户的家目录,用户登录后会自动切换到此目录,每创建一个用户就会生成一个文件夹,作为用户家目录
/root:超级管理员的家目录,超级管理员登录后会自动切换到此目录
/media:挂载目录,早期Linux挂载目录,用于挂载光盘以及软盘
/mnt:挂载目录,用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区
/opt :第三方软件目录,这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件
/usr :系统程序目录,类似Windows中的Program Files
/proc:虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。
/tmp :临时文件目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清理
/var :经常变化的文件目录,网页文件、数据文件、日志文件
四、Linux入门级命令
1、开启终端
问题:什么是终端(Terminal)
答:Linux操作系统中用于输入命令的地方
打开后,效果如下图所示:
2、Linux命令格式
什么是Linux 的命令?
答:就是指在Linux 终端(命令行)中输入的内容就称之为命令。
一个完整的命令的标准格式:Linux 通用的格式
# 命令(空格) [选项](空格)[参数]
但是有些命令比较特殊,可能没有选项也没有参数
# pwd
还有一些命令,有命令有选项,但是没有参数
# ls -l
还有一些命令,命令+选项+参数全都有
# tail -n 3 readme.txt
3、扩展:Linux下的命令补全
3、扩展:Linux下的命令补全
键盘上有一个按键:Tab键
当我们在Linux系统的终端中,输入命令时,可以无需完整的命令,只需要记住命令的前几个字母即可,然后按Tab键,系统会自动进行补全操作。
syst +Tab
systemc +Tab
systemctl
有些命令可能都以某几个字母开头,这个时候,只需要按两次Tab键,其就会显示所有命令。
clea + Tab +Tab
Tab键的功能特别强大:其不仅可以补全命令还可以补全Linux的文件路径
4、切换用户
# su ~root
Password:123456
[root@localhost ~]# 切换成功
横杠作用是什么,横杠代表切换用户同时,切换用户家目录
unname命令
主要功能:获取计算机操作系统相关信息
基本语法
# uname -a
选项说明:
-a :all缩写,代表显示所有信息,获取全部的系统信息(类型、全部主机名、内核版本、发布时间、开源计划)
6、ls命令
☆ 用法一
主要功能:ls完整写法list show,以平铺的形式显示当前目录下的文件信息
基本语法:
ls
用法二
主要功能:显示其他目录下文件信息
ls 其他目录绝对路径相对路径
ls后面路径既可以是绝对路径也可是相对路径
绝对路径:不管当前工作路径是在哪,目标路径都会从“/”下开始,
案例:访问admin用户下家目录,查看哪些文件
ls /home/admin
绝对路径必须以左斜杠开头,一级一级向下访问,不能越级
相对路径:除绝对路径之外路径之为相对路径,相对路径得有一个相对物(当前工作路径)
只要看到路径以“/”开头则表示是绝对路径,除了以“/”开头的路径称之为相对路径。
当前位置:/home/admin目录下
../:表示上级目录(上一级)
./ :表示当前目录(同级),普通文件./可以省略,可执行文件(绿色)必须加./
文件夹名称/:表示下级目录(下一级),注意这个斜杠/
☆ 用法三
基本语法:
ls [选项] [路径]
选项说明
-l : ls -l 代表详细列表形式显示当前其他目录下文件信息(简写 ll)
-h : ls -lh 通常与 -l 结合一起使用,代表较高可读性显示文件大小(kb/mb/gb)
-a : ls -a a是all缩写,代表显示所有文件(也包含隐藏文件,大部分以 .开头)
计算机中的单位:
# 1TB = 1024GB
# 1GB = 1024MB
# 1MB = 1024KB
# 1KB(千字节) = 1024B(字节)
7、pwd命令
主要功能:pwd=print working directory,打印当前工作目录,告诉我们,我们当前位置
pwd
8、cd命令
主要功能:cd全称change directory,切换目录(从一个目录跳转到另外一个目录)
基本语法:
# cd [路径]
选项说明:
路径既可以是绝对路径,也可以是相对路径
案例一:切换到/usr/local这个程序目录
# cd /usr/local
案例二:比如我们当前在/home/itheima下,切换到根目录/下
# cd /home/itheima
# cd ../../
案例三:当我们在某个路径下,如何快速回到自己的家目录
cd 或
cd ~
9、clear命令
主要功能:清屏
基本语法:
# clear
10、reboot命令
主要功能:立即重启计算机
基本语法:
# reboot
11、shutdown命令
主要功能:立即关机或延迟关机
基本语法
# shutdown -h 0或now
# shutdown -h 0
# shutdown -h now
选项说明
-h :halt 缩写,代表关机
在linux系统中,立即关机除了使用shutdown -h 0以外还可以使用halt -p命令
延迟关机语法
# shutdown -h 分钟数
代表多少分钟后关机
案例1:10分钟后自动关机
# shutdown -h 10
案例2:后悔了,取消关机
光标一直不停的闪,取消关机
# 按Ctrl + C(CentOS6,中断关机。CentOS7中还需要使用shutdown -c命令)
# shutdown -c
12、type命令
主要功能:主要结合help命令,用于判断命令的类型(属于内部命令还是外部命令)
语法
# type 命令
内部命令:命令 is a shell builtin
外部命令:没有显示以上信息的就是外部命令
13、history命令
主要功能:显示系统以前输入的1000条命令
基本语法:
# history
14、hostnamectl命令
主要功能:用于设置计算机主机名称,(给计算机起个名字),此命令式CentOS7新增的命令。
hostnamectl : hostname + control
获取计算机主机名称
# hostname CentOS6
# hostnamectl CentOS7
☆ 设置计算机的主机名称
Centos7中主机名分3类,静态的(static)、瞬态的(transient)、和灵活的(pretty)。
① 静态static主机名称:电脑关机或重启后,设置的名称亦然有效
② 瞬态transient主机名称:临时主机名称,电脑关机或重启后,设置的名称就失效了
③ 灵活pretty主机名称:可以包含一些特殊字符
CentOS 7中和主机名有关的文件为/etc/hostname,它是在系统初始化的时候被读取的,并且内核根据它的内容设置瞬态主机名。
更改主机名称,让其永久生效?① 使用静态的 ② 改/etc/hostname文件
① 瞬态主机名称(临时设置)
# hostnamectl --transient set-hostname 主机名称
主机名称 建议遵循 FQDN协议(功能+公司域名)
web01.itcast.cn
web02.itcast.cn
案例:临时设置主机名称为yunwei.itcast.cn
# hostnamectl --transient set-hostname yunwei.itcast.cn
# su 立即生效
② 静态主机名称(永久生效)
# hostnamectl --static set-hostname 主机名称
温馨提示:--static也可以省略不写
案例:把计算机的主机名称永久设置为yunwei.itcast.cn
# hostnamectl --static set-hostname yunwei.itcast.cn
# su 立即生效
③ 灵活主机名称(主机名称可以添加特殊字符)
# hostnamectl --pretty set-hostname 主机名称(包含特殊字符)
案例:把计算机的主机名称通过灵活设置,设置为yunwei’s server01
# hostnamectl --pretty set-hostname "yunwei's server01"
查看灵活的主机名称
# hostnamectl --pretty
判断题解析
必须有三个区
/boot 系统分区
/swap 交换分区
/ 根目录 所有文件放在此区
Linux多用户多任务操作系统
Linux文件管理(上)
一、Linux下文件命名规则
1.可以使用那些字符
理论上除了字符“/”之外,所有的字符都可以使用,但是要注意,在目录名或文件名中,不建议使用某些特殊字符,例如, <、>、?、* 等,尽量避免使用。
工作时文件命名规则
① 由于linux严格区分大小写,所以尽量都用小写字母
② 如果必须对文件名进行分割,建议使用”_”,例如:itheima_bj_2020.log
_ 下划线,在Linux操作系统中,可以使用Shift键 + 减号
2、文件名的长度
目录名或文件名的长度不能超过 255 个字符
尽量不要太长,另外文件名称一定要见名知意,可以使用英文单词
3、文件名的大小写
Linux目录名或文件名是区分大小写的。如 itheima、ITheima、yunwei 和 Yunwei ,是互不相同的目录名或文件名。
人建议:
不要使用字符大小写来区分不同的文件或目录。
建议文件名一律使用小写字母
4、Linux文件扩展名
Linux文件的扩展名对 Linux 操作系统没有特殊的含义,Linux 系统并不以文件的扩展名开分区文件类型。例如,itheima.exe 只是一个文件,其扩展名 .exe 并不代表此文件就一定是可执行的。
在Linux系统中,文件扩展名的用途为了使运维人员更好的区分不同的文件类型。
在Linux操作系统中,文件的类型是依靠权限位的标识符来进行区分的。当然也可以通过颜色,如黑色普通文件,天蓝色文件夹
二、Linux下的文件管理
1、目录创建
在实际应用中,与目录相关操作有两个,创建目录和删除目录
① mkdir创建目录
mkdir 目录名称
主要功能:就是根据目录名称创建一个目录
mkdir = make directory
案例:在家目录下创建一个itheima的文件夹
# mkdir itheima
② mkdir -p递归创建目录
mkdir -p /user/local/nginx/conf
说明
-p:递归创建,从左边的路径开始一级一级创建目录,知道路径结束
案例:在已知目录(/usr/local)下创建多级目录(nginx/conf)
mkdir -p /user/local/nginx/conf
mkdir: cannot create directory ‘/usr/local/nginx/conf’: No such file or directory
mkdir:不能创建目录conf,为什么呢?因为/usr/local目录下并没有nginx
解决方案:如果相同时创建多级目录,必须使用-p选项,会从左向右一级一级创建目录
# mkdir -p /usr/local/nginx/conf
③ 使用mkdir同时创建多个目录
# mkdir 目录名称1 目录名称2 目录名称3 ...
案例:在当前目录下创建a、b、c三个目录
总结:
一个目录一个目录创建# mkdir 目录名称
多级目录一起创建# mkdir -p 目录名称1/目录名称2/…
同时创建多个目录# mkdir 目录名称1 目录名称2 目录名称3
扩展:Linux快捷键(方向键上下)
在终端中:
按方向键=>向上,其会返回上一次输入的命令
按方向键=>向下,其会返回下一次输入的命令
2、目录删除(必须是空目录)
① rmdir移除空目录
基本语法:
# rmdir 目录名称
rmdir = remove directory,移除目录
案例:把家目录下的itheima删除(空目录)
# rmdir itheima 只能移除空目录
② rmdir -p递归删除空目录
基本语法:
# rmdir -p 目录名称1/目录名称2/目录名称3/...
主要功能:从右向左一级一级删除空目录
案例:递归删除itheima文件夹中的yunwei文件夹中的shenzhen3
# rmdir -p itheima/yunwei/shenzhen3
③ 使用rmdir同时删除多个空目录
# rmdir 目录名称1 目录名称2 目录名称3 ...
案例:删除家目录中的a、b、c三个空目录
# rmdir a b c
总结:
# rmdir 目录名称,删除某个空目录
# rmdir -p 目录名称1/目录名称2/目录名称3/...,同时删除多级目录(从右向左一级一级删除)
# rmdir 目录名称1 目录名称2 目录名称3,同时删除多个空目录
3.文件创建
① touch创建文件
touch 文件名称
主要功能:在Linux系统中的当前目录下创建一个文件
案例:在当前目录下创建一个readme.txt文件
# touch readme.txt
② 使用touch命令同时创建多个文件
基本语法:
# touch 文件名称1 文件名称2 文件名称3 ...
案例:创建一个shop商城文件夹,然后在内部创建index.php/admin.php/config.php三个文件
# mkdir shop
# touch shop/index.php
# touch shop/admin.php
# touch shop/config.php
或
# touch shop/index.php shop/admin.php shop/config.php
提出问题:观察以下命令,看看有何区别?
第一种写法:touch shop/index.php shop/admin.php shop/config.php
代表在shop目录下首先创建一个index.php,在创建一个admin.php,最后config.php
第二种写法:touch shop/index.php admin.php config.php
代表在shop目录下首先创建index.php,然后在当前目录下创建admin.php,最后在当前目录下创建config.php
③ {1..5}根据序号同时创建多个文件
touch 文件名{开始序号..结束序号}
含义
根据提供开始序号结束序号,一个一个创建文件
案例:创建file1、file2、file3、file4、file5共5个文件
# touch file1
# touch file2
# touch file3
# touch file4
# touch file5
或
# touch file{1..5}
总结:
# touch 文件名称
# touch 文件名称1 文件名称2 文件名称3 ...
# touch 文件名称{开始序号..结束序号}
4.文件删除
① 普通删除
基本语法:
rm [选项]文件或文件夹名称
选项说明
-r 针对文件夹,代表递归删除,先把目录下所有文件删除,然后在删除文件夹
-f :强制删除,不提示,初学者一定要慎重!!!
案例:删除readme.txt文件
# rm readme.txt
rm: remove regular empty file ‘readme.txt’?这里可以回复y or n
y代表确认删除
n代表取消删除
案例:强制删除admin.php,不提示(慎重)
# rm -f admin.php
案例:删除非空的文件夹(-rf强制递归删除,不提示)
# rm -rf shop
提示信息:descend into directory ‘itheima/’?
含义:是否进入itheima目录?
提示信息:remvoe directory ‘itheima/’?
含义:是否删除itheima文件夹?
扩展:Ctrl + C在Linux下的使用方式
在Linux操作系统中,Ctrl + C不是复制,而是中断某个操作
总结:
# rm 文件名称
# rm 文件名称1 文件名称2 文件名称3 ...
# rm -f 文件名称 => 强制删除,不提示
# rm -rf 文件夹名称 => 递归删除文件夹
② 扩展:rm -rf /*,一定要慎重
② 扩展:rm -rf /*,一定要慎重
# rm -rf /* => 代表删除根目录下的所有文件(如果没有备份,恢复的几率不高)
rm :删除
-r :递归删除(无论文件夹是否为空)
-f :强制删除不提示
/ :代表根分区
* :所有
5、复制操作
① cp复制操作
语法
-r :递归复制,主要针对文件夹
cp = copy复制
案例:把readme.txt文件从当前目录复制一份放到/tmp文件夹中
# cp readme.txt /tmp/
② cp复制并重命名文件
基本语法:
# cp [选项] 源文件或文件夹 目标路径/新文件或文件夹的名称
案例:把readme.txt文件从当前目录复制一份放到/tmp文件夹中并重命名为readme.txt.bak
案例:把shop目录连通其内部的文件统一复制到/tmp目录下
# mkdir shop
# touch shop/index.php shop/admin.php shop/config.php
# cp -r shop /tmp/
总结:总结:
复制文件# cp 源文件名称 指定路径
复制文件并重命名# cp 源文件名称 指定路径/新文件名称
复制文件夹# cp -r 源文件夹 指定路径
6、剪切操作
mv 源文件或文件夹 目标路径
mv = move,剪切、移动的含义
案例:把readme.txt文件剪切到/tmp目录下
# rm -rf /tmp/readme.txt
# mv readme.txt /tmp/
案例:把shop文件夹移动到/usr/local/nginx目录下
# mkdir /usr/local/nginx
# mv shop /usr/local/nginx/
7、重命名操作
什么是重命名?简单来说,就是给一个文件或文件夹更改名称
基本语法:
mv 源文件或文件夹名称 新文件或文件夹名称
ls -d 查看当前文件夹的信息
案例:把readme.txt文件更名为README.md文件
# mv readme.txt README.md
案例:把shop文件目录更名为wechat目录
mkdir shop
mv shop wechat
总结:
剪切文件# mv 源文件名称 目标路径/
剪切文件夹# mv 源文件夹名称 目标路径/
重命名# mv 源文件或文件夹名称 新文件或文件夹名称
8、打包压缩与解压缩
① 几个概念
打包:默认情况下,Linux压缩概念一次只能压缩一个文件,针对多文件或文件夹无法进行直接压缩,所以需要提前对多个文件或文件夹打包,这样才能进行压缩操作
1.txt 5MB
2.txt 10MB
3.txt 15MB
1.txt + 2.txt + 3.txt = 打包 = 123.tar = 30MB
打包只是把多个文件或文件夹打包放在一个文件中,但是并没有进行压缩,所以其大小还是原来所有文件的总和。
压缩:也是一个文件与目录的集合,且这个集合被存储在一个文件中,但它们不同之处在于,压缩文件所占用的磁盘比集合中所有文件大小中和要小
1.txt 5MB
2.txt 10MB
3.txt 15MB
1.txt + 2.txt + 3.txt = 压缩 = 123.tar.gz = 20MB(体积变小了)
② Linux打包操作
# tar [选项] 打包后的名称.tar 多个文件或文件夹
-c 打包
-f :filename :打包后文件名称
-v :显示打包速度
-u update 缩写国内新能原打包文件
-t :查看打包文件内容
案例:把a.txt、b.txt、c.txt文件打包到abc.tar文件中
# tar -cvf abc.tar a.txt b.txt c.txt
案例:把wechat文件夹进行打包wechat.tar
# tar -cvf wechat.tar wechat
③ tar -tf以及tar -uf
# tar -tf 打包后的文件名称
主要功能:查看tar包中的文件信息
案例:查看abc.tar包中的文件信息
# tar -tf abc.tar
# tar -uf 打包后的文件名称
u = update,更新,如果还想往tar包中更新或追加内容都可以通过-u选项
案例:向abc.tar包中添加一个d.txt文件
# touch d.txt
# tar -uf abc.tar d.txt
查看是否添加成功
# tar -tf abc.tar
扩展:如何把tar包中的文件释放出来
打包
# tar -cf abc.tar a.txt b.txt c.txt
打包 => 释放(-c 变成 -x)
释放
# tar -xf abc.tar
释放到其他目录下
-C
释放user.tar 到tmp文件夹下
# tar -xf user.tar -C /tmp
④ 打包并压缩(学习的重点)
# tar [选项] 压缩后的压缩包名称 要压缩的文件或文件夹
-cf 对文件或文件夹进行打包
-v 显示压缩进度
-z :使用gzip压缩工具把打包后的文件压缩为.gz
-j : 使用bzip2压缩工具把打包后的文件压缩为.bz2
-j :使用xz压缩工具打包后文件压缩为.xz
压缩速度:gzip > bzip2 > xz
压缩率:gzip < bzip2 < xz
100M 90M 80M 70M
案例:把a.txt、b.txt、c.txt文件打包并压缩为abc.tar.gz
# tar -zcf abc.tar.gz a.txt b.txt c.txt
案例:把wechat文件夹压缩为wechat.tar.gz格式的压缩包
# tar -zcf wechat.tar.gz wechat
⑤ 对压缩包进行解压
解压过程非常简单,就是把压缩的参数中的c换成x就可以实现解压缩了
*.tar.gz格式的压缩包
# tar -zxf 名称.tar.gz
*.tar.bz2格式的压缩包
# tar -jxf 名称.tar.bz2
*.tar.xz格式的压缩包
# tar -Jxf 名称.tar.xz
案例:把abc.tar.gz格式的压缩包进行解压缩操作
# tar -zxf abc.tar.gz
案例:把wechat.tar.gz格式的压缩包进行解压缩操作
# tar -zxf wechat.tar.gz
9、zip压缩与解压缩
① zip压缩
zip [选项]压缩后文件名称.zip 文件或文件夹
-r :递归压缩,主要针对是文件夹
Linux下已经有gzip、bzip2以及xz压缩命令了,为什么还需要使用zip压缩呢?
答:zip格式在Windows以及Linux中都是可以正常使用的。
② unzip解压缩
# unzip 压缩包名称 => 解压到当前目录
# unzip 压缩包名称 -d 指定路径 => 解压到指定路径下
案例:对abc.zip文件进行解压缩
# unzip abc.zip
案例:把wechat.zip解压到/usr/local/nginx目录下
# unzip wechat.zip -d /usr/local/nginx/
总结:
在Linux操作系统中,其拥有很多压缩工具,如gzip、bzip2、xz等等,但是其有一个缺点:
一次只能压缩一个文件(而且无法压缩文件夹)
① 打包,把一个或多个文件打成tar包,并不是压缩,只是把文件合并在一个tar文件中
1.txt 5MB
2.txt 10MB
3.txt 15MB
打包123.tar = 5MB + 10MB + 15MB = 30MB
为什么要打包,就是为了后期的压缩操作。
② 打包并压缩
# tar -zcf 压缩包名称.tar.gz 文件或文件夹名称
# tar -jcf 压缩包名称.tar.bz2 文件或文件夹名称
# tar -Jcf 压缩包名称.tar.xz 文件或文件夹名称
③ 解压缩
# tar 把c参数更换为x,就可以实现解压缩 压缩包名称.tar.gz
扩展:
# tar -zxf 压缩包名称.tar.gz [参数] 指定路径
第一种解决思路:随用随查,百度、Google
# tar -zxf 压缩包名称.tar.gz -C 指定路径
第二种解决思路:可以使用man命令(manual缩写,手册)
# man tar命令
# tar -zxf 压缩包名称.tar.gz -C 指定路径
④ zip压缩与解压缩
给我们提供一种既可以在Windows中使用的,也可以提供一种在Linux中使用的通用的压缩格式。
# zip [-r] 压缩包名称.zip 要压缩的文件或文件夹
解压缩:
# unzip 压缩包名称.zip -d 指定路径
Linux文件管理(上)
一、VIM编辑器
1、vi概述
vi(visual editor)编辑器通常被简称为vi,它是Linux和Unix系统上最基本的文本编辑器,类似于Windows 系统下的notepad(记事本)编辑器。
2、vim编辑器
Vim(Vi improved)是vi编辑器的加强版,比vi更容易使用。vi的命令几乎全部都可以在vim上使用。
3、vim编辑器的安装
☆ 已安装
Centos通常都已经默认安装好了 vi 或 Vim 文本编辑器,我们只需要通过vim命令就可以直接打开vim编辑器了,如下图所示:
☆ 未安装
有些精简版的Linux操作系统,默认并没有安装vim编辑器(可能自带的是vi编辑器)。当我们在终端中输入vim命令时,系统会提示”command not found”。
解决办法:有网的前提下,可以使用yum工具对vim编辑器进行安装
yum install vim -y
4、vim编辑器的四种模式(重点)
☆ 命令模式
使用VIM编辑器,默认处于命令模式,在该模式下可以移动光标位置,可以通过快捷键对文件内容进行赋值,粘贴,删除
☆ 编辑模式或输入模式
在命令模式下输入小写字母a小写字母i进入编辑模式,在该模式下可以对内容进行编辑
☆ 末行模式
在命令模式下输入冒号可以进入末行模式,可以在末行输入命令对文件进行查找,替换,保存,退出
☆ 可视化模式(了解)
可以做一些列选操作(通过方向键选择某些列的内容)
二、VIM四种模式的关系
1、VIM四种模式
命令模式/编辑模式/末行模式/可视化模式
2、VIM四种模式的关系
默认进入的是命令模式
按下a 或 i 进入编辑模式
在命令模式下按v 进入可视化模式,按esc退出到命令模式
三、VIM编辑器的使用
1、使用vim打开文件
基本语法:
# vim 文件名称
① 如果文件已存在,则直接打开
②如果文件不存在,vim编辑器会自动在内存中创建一个新文件
案例:使用vim命令打开readme.txt文件
# vim readme.txt
2、vim编辑器保存文件
在任何模式下,连续按两次Esc键,即可返回到命令模式。然后按冒号:,进入到末行模式,输入wq,代表保存并退出。
3、vim编辑器强制退出(不保存)
在任何模式下,连续按两次Esc键,即可返回到命令模式。然后按冒号:,进入到末行模式,输入q!,代表强制退出但是不保存文件。
4、命令模式下的相关操作(重点)
☆ 如何进入命令模式
答:在Linux操作系统中,当我们使用vim命令直接打开某个文件时,默认进入的就是命令模式。如果我们处于其他模式(编辑模式、可视化模式以及末行模式)可以连续按两次Esc键也可以返回命令模式
☆ 命令模式下我们能做什么
① 移动光标 ② 复制 粘贴 ③ 剪切 粘贴 删除 ④ 撤销与恢复
☆ 移动光标到首行或末行(重点)
移动光标到首行 => gg
移动光标到末行 => G
☆ 翻屏
向上 翻屏,按键:ctrl + b (before) 或 PgUp
向下 翻屏,按键:ctrl + f (after) 或 PgDn
向上翻半屏,按键:ctrl + u (up)
向下翻半屏,按键:ctrl + d (down)
☆ 快速定位光标到指定行(重点)
行号 + G,如150G代表快速移动光标到第150行。
☆ 复制/粘贴(重点)
① 复制当前行(光标所在那一行)
按键:yy
粘贴:在想要粘贴的地方按下p 键【将粘贴在光标所在行的下一行】,如果想粘贴在光标所在行之前,则使用P键
② 从当前行开始复制指定的行数,如复制5行,5yy
粘贴:在想要粘贴的地方按下p 键【将粘贴在光标所在行的下一行】,如果想粘贴在光标所在行之前,则使用P键
☆ 剪切/删除(重点)
在VIM编辑器中,剪切与删除都是dd
如果剪切了文件,但是没有使用p进行粘贴,就是删除操作
如果剪切了文件,然后使用p进行粘贴,这就是剪切操作
① 剪切/删除当前光标所在行
按键:dd (删除之后下一行上移)
粘贴:p
注意:dd 严格意义上说是剪切命令,但是如果剪切了不粘贴就是删除的效果。
② 剪切/删除多行(从当前光标所在行开始计算)
按键:数字dd
粘贴:p
特殊用法:
③ 剪切/删除光标所在的当前行(光标所在位置)之后的内容,但是删除之后下一行不上移
按键:D (删除之后当前行会变成空白行)
☆ 撤销/恢复(重点)
撤销:u(undo)
恢复:ctrl + r 恢复(取消)之前的撤销操作【重做,redo】
总结
① 怎么进入命令模式(vim 文件名称,在任意模式下,可以连续按两次Esc键即可返回命令模式)
② 命令模式能做什么?移动光标、复制/粘贴、剪切/删除、撤销与恢复
首行 => gg,末行 => G 翻屏(了解) 快速定位 行号G,如150G
yy p 5yy p
dd p 5dd p
u
ctrl + r
5、末行模式下的相关操作(重点)
☆ 如何进入末行模式
进入末行模式的方法只有一个,在命令模式下使用冒号:的方式进入。
☆ 末行模式下我们能做什么
文件保存、退出、查找与替换、显示行号、paste模式等等
☆ 保存/退出(重点)
:w => 代表对当前文件进行保存操作,但是其保存完成后,并没有退出这个文件
:q => 代表退出当前正在编辑的文件,但是一定要注意,文件必须先保存,然后才能退出
:wq => 代表文件先保存后退出(保存并退出)
如果一个文件在编辑时没有名字,则可以使用:wq 文件名称,代表把当前正在编辑的文件保存到指定的名称中,然后退出
:q! => 代表强制退出但是文件未保存(不建议使用)
☆ 查找/搜索(重点)
切换到命令模式,然后输入斜杠/(也是进入末行模式的方式之一)
进入到末行模式后,输入要查找或搜索的关键词,然后回车
如果在一个文件中,存在多个满足条件的结果。在搜索结果中切换上/下一个结果:N/n (大写N代表上一个结果,小写n代表next)
如果需要取消高亮,则需要在末行模式中输入:noh
【no highlight】
☆ 文件内容的替换(重点)
第一步:首先要进入末行模式(在命令模式下输入冒号:)
第二步:根据需求替换内容
① 只替换光标所在这一行第一个满足条件的结果(只能替换1次)
:s/要替换的关键词/替换后的关键词 + 回车
案例:把hello centos中的centos替换为centos7.6
切换光标到hello centos这一行
:s/centos/centos7.6
② 替换光标所在这一行中的所有满足条件的结果(替换多次,只能替换一行)
:s/要替换的关键词/替换后的关键词/g g=global全局替换
案例:把hello centos中的所有centos都替换为centos7.6
切换光标到hello centos这一行
:s/centos/centos7.6/g
③ 针对整个文档中的所有行进行替换,只替换每一行中满足条件的第一个结果
:%s/要替换的关键词/替换后的关键词
案例:把每一行中的第一个hello关键词都替换为hi
:%s/hello/hi
④ 针对整个文档中的所有关键词进行替换(只要满足条件就进行替换操作)
:%s/要替换的关键词/替换后的关键词/g
案例:替换整个文档中的hello关键词为hi
:%s/hello/hi/g
☆ 显示行号
基本语法:
基本语法:
:set nu
nu = number,行号
取消行号 => :set nonu
☆ set paste模式(了解)
为什么要使用paste模式?
问题:在终端Vim中粘贴代码时,发现插入的代码会有多余的缩进,而且会逐行累加。原因是终端把粘贴的文本存入键盘缓存(Keyboard Buffer)中,Vim则把这些内容作为用户的键盘输入来处理。导致在遇到换行符的时候,如果Vim开启了自动缩进,就会默认的把上一行缩进插入到下一行的开头,最终使代码变乱。
在粘贴数据之前,输入下面命令开启paste模式
:set paste
总结
① 如何进入末行模式,必须从命令模式中使用冒号进行切换
② 末行模式下能做什么?保存、退出、查找、替换、显示行号以及paste模式
③ 保存 => :w
④ 退出 => :q,先保存后退出。:wq :wq 文件名称 :q!
⑤ 查找功能 => 命令模式输入/斜杠 + 关键词(高亮显示)=> :noh
⑥ 替换功能
?/要替换的关键词/替换后的关键词
?/要替换的关键词/替换后的关键词/g
:%s/要替换的关键词/替换后的关键词
:%s/要替换的关键词/替换后的关键词/g
⑦ 显示行号 => :set nu 取消行号 => :set nonu
⑧ paste模式 => 将来在粘贴代码的时候为了保存原格式 => 粘贴之前 => :set paste
四、编辑模式
1、编辑模式的作用
编辑模式
编辑模式主要实现对文件内容进行编辑模式
2、如何进入编辑模式
首先你需要进入到命令模式,然后使用小写字母a或小写字母i,进入编辑模式。
命令模式 + i : insert缩写,代表在光标之前插入内容
命令模式 + a : append缩写,代表在光标之后插入内容
3、退出编辑模式
在编辑模式中,直接按Esc,即可从编辑模式退出到命令模式。
五、可视化模式
1、如何进入到可视化模式
在命令模式中,直接按ctrl + v(可视块)或V(可视行)或v(可视),然后按下↑ ↓ ← →方向键来选中需要复制的区块,按下y 键进行复制(不要按下yy),最后按下p 键粘贴
退出可视模式按下Esc
2、可视化模式复制操作
第一步:在命令模式下,直接按小v,进入可视化模式
第二步:使用方向键↑ ↓ ← →选择要复制的内容,然后按y键
第三步:移动光标,停在需要粘贴的位置,按p键进行粘贴操作
3、为配置文件添加#多行注释(重点)
第一步:按Esc退出到命令模式,按gg切换到第1行
第二步:然后按Ctrl+v进入到可视化区块模式(列模式)
第三步:在行首使用上下键选择需要注释的多行
第四步:按下键盘(大写)“I”键,进入插入模式(Shift + i)
第五步:输入#号注释符
第六步:输入完成后,连续按两次Esc即可完成添加多行注释的过程
4、为配置文件去除#多行注释(重点)
第一步:按Esc退出到命令模式,按gg切换到第1行
第二步:然后按Ctrl+v进入可视化区块模式(列模式)
第三步:使用键盘上的方向键的上下选中需要移除的#号注释
第四步:直接按Delete键即可完成删除注释的操作
六、VIM编辑器实用功能
1、代码着色
之前说过vim 是vi 的升级版本,其中比较典型的区别就是vim 更加适合coding,因为vim比vi 多一个代码着色的功能,这个功能主要是为程序员提供编程语言升的语法显示效果,如下:
第一步:定义后缀名为网页文件的代码文件
# vim index.php
第二步:编写对应的PHP代码
在VIM编辑器中,我们可以通过:syntax on
或:syntax off
开启或关闭代码着色功能。
2、异常退出解决方案
什么是异常退出:在编辑文件之后并没有正常的去wq(保存退出),而是遇到突然关闭终端或者断电的情况,则会显示下面的效果,这个情况称之为异常退出:
温馨提示:每个文件的异常文件都会有所不同,其命名规则一般为
.文件名称.swp
解决办法:将交换文件(在编程过程中产生的临时文件)删除掉即可【在上述提示界面按下D 键或者使用rm 指令删除交换文件】
# rm .1.php.swp
3、退出vim编辑器
回顾:在vim中,退出正在编辑的文件可以使用:q
或者:wq
除了上面的这个语法之外,vim 还支持另外一个保存退出(针对内容)方法:x
① :x
在文件没有修改的情况下,表示直接退出(等价于:q),在文件修改的情况下表
示保存并退出(:wq)
② 如果文件没有被修改,但是使用wq 进行退出的话,则文件的修改时间会被更新;但是如果文件没有被修改,使用x 进行退出的话,则文件修改时间不会被更新的;主要是会混淆用户对文件的修改时间的认定。
七、查看文件的内容
1、cat命令
☆ 输出文件内容
基本语法:
# cat 文件名称
111
222
333
444
主要功能:正序输出文件的内容
☆ 合并多个文件内容
基本语法:
# cat 文件名称1 文件名称2 ... > 合并后的文件名称
主要功能:把文件名称1、文件名称2、…中的内容的合并到一个文件中
2、tac命令
基本语法:
# tac 文件名称
444
333
222
111
主要功能:倒序输出文件的内容
3、head命令
基本语法:
# head -n 文件名称
主要功能:查看一个文件的前n 行,如果不指定n,则默认显示前10 行
案例:查询linux.txt文件中的前10行
# head linux.txt
案例:查询linux.txt文件中的前3行
# head -3 linux.txt
4、tail命令
基本语法:
# tail -n 文件名称
主要功能:查看一个文件的最后n 行,如果不指定n,则默认显示最后10 行
案例:查询linux.txt文件的最后10行
# tail linux.txt
案例:查询linux.txt文件的最后3行
# tail -3 linux.txt
5、tail -f命令
基本语法:
# tail -f 文件名称
主要功能:动态查看一个文件内容的输出信息(主要用于将来查询日志文件的变化)
例:查询系统的/var/log/messages文件的日志信息
# tail -f /var/log/messages
退出方式可以直接按快捷键:Ctrl + C,中断操作
判断题详解
1.Linux创建压缩工具zip,gzip都只能对单个文件进行压缩对吗?
答案是错
zip 文件名 ,多个文件
gzip,bzip,xz,只能对单个文件压缩,压缩前要打包tar
zip可以对多个文件进行打包并压缩
2.当要递归删除一目录时,可以选哪个选项
A. -p
B. -r
C. -f
D. -d
答案:-r
解析
当删除递归删除一个空目录时 rmdir -p
当删除一个目录,rmdir -r
题目里面没说是空目录
Linux文件管理与用户管理
一、查看文件内容
1、回顾之前的命令
cat命令、tac命令、head命令、tail命令、扩展:tail -f动态查看一个文件的内容
2、more分屏显示文件内容(了解)
基本语法:
# more 文件名称
特别注意:more命令在加载文件时并不是一点一点进行加载,而是打开文件时就已经把文件的全部内容加载到内存中了。如果打开文件较大,则可能会出现卡顿情况。
more命令拥有一些交互功能,可以通过快捷键进行操作这个more的阅读器。
回车键 | 向下移动一行。 |
---|---|
d | 向下移动半页。 |
空格键 | 向下移动一页。 |
b | 向上移动一页,后期引入功能,早期more只能前进不能后退 |
q | 退出 more。 |
早期more命令没有现在这么强大,其只能前进不能后退
3、less分屏显示文件内容(重点)
基本语法:
# less 文件名称
特别注意:less命令不是加载整个文件到内存,而是一点一点进行加载,相对而言,读取大文件时,效率比较高。
另外:less可以通过上下方向键显示上下内容,退出时不会在Shell中留下刚显示的内容
less 命令的执行也会打开一个交互界面,下面是一些常用交互命令(和more类似):
按键 | 功能 |
---|---|
回车键 | 向下移动一行。 |
d | 向下移动半页。 |
空格键 | 向下移动一页。 |
b | 向上移动一页。 |
上下方向键 | 向上与向下移动,less命令特有功能键 |
less -N 文件名称 | 显示行号 |
/ 字符串 | 搜索指定的字符串。 |
q | 退出less |
cat,more,less三者的对比:
cat | more | less | |
---|---|---|---|
作用 | 显示小文件(一屏以内) | 显示大文件(超过一屏) | 显示大文件(超过一屏) |
交互命令 | 无 | 有 | 有 |
上下键翻行 | 无 | 无 | 有 |
二、文件统计命令
1、wc命令
基本语法:
# wc [选项] 文件名称
选项说明:
-l:表示lines,行数(以回车/换行符为标准)
-w:表示words,单词数 依照空格来判断单词数量
-c:表示bytes,字节数(空格,回车,换行)
案例:统计linux.txt文件的总行数
# wc -l linux.txt
案例:统计linux.txt文件中的单词数
# wc -w linux.txt
案例:统计文件的字节数(数字、字母一般1个字符=1个字节,中文和编码格式有关,如utf-8编码格式,1个汉字占用3个字节)
# wc -c linux.txt
扩展:wc [选项] 文件的名称可以统计一个文件的信息,实际情况下,我们选项还可以一起使用
案例:统计一个文件的总行数、总单词数以及总字节数
# wc -wlc linux.txt
或
# wc -lwc linux.txt
或
# wc -clw linux.txt
2、du命令
基本语法:
# du [选项] 统计的文件或文件夹
选项说明:
-s :summaries,只显示汇总的大小,统计文件夹的大小
-h :以较高的可读性显示文件或文件夹的大小,(KB/MB/GB/TB)
主要功能:查看文件或目录(会递归显示子目录)占用磁盘空间大小
案例:显示readme.txt文件的大小(占用磁盘空间,不显示文件大小的单位)
# du readme.txt
案例:显示readme.txt文件的大小(占用磁盘空间,显示文件大小的单位)
# du -h readme.txt
案例:统计wechat文件夹的大小
# du -sh wechat
案例:统计/etc目录的大小
# du -sh /etc
三、文件处理命令
1、find命令
find 搜索路径
-name :指定要搜索文件名称 支持 *通配符 (shift +8)
-type 代表搜索的文件类型 f代表普通文件 d 代表文件夹 ->加快检索速度
主要功能:当我们要查找一个文件时,必须使用
案例:搜索/var目录中boot.log文件(普通文件)
# find /var -name "boot.log" -type f
案例:全盘搜索ssh目录
# find / -name "ssh" -type d
特别注意:实际工作时,尽量减少全盘检索,比较消耗资源
扩展功能:find实现模糊查询(必须结合通配符)
案例:搜索/var/log目录下的所有的以”.log”结尾的文件信息
# find /var/log -name "*.log" -type f
* :通配符,代表任意个任意字符。如*.log代表以.log结尾的文件,apache*代表搜索以apache开头的文件信息
2、grep命令
grep [选项] 要搜索关键词,搜素文件名称
-n :代表显示包含关键词行号信息
单位:行,一行一行向下搜索
主要功能:在文件中直接找到包含指定关键词那些行,并把这些信息高亮显示
案例:在initial-setup-ks.cfg文件中搜索包含关键词”network”的行
# grep network initial-setup-ks.cfg
案例:在initial-setup-ks.cfg文件中搜索包含关键词”network”的行,然后显示行号信息
# grep -n network initial-setup-ks.cfg
扩展语法:
# grep 要搜索的关键词 多个文件的名称
主要功能:在多个文件中查找包含指定关键词的那些行,并高亮显示出来
案例:搜索/var/log目录下所有文件,找到包含关键词”network”的所有行信息
# grep network /var/log/*
3、echo命令
基本语法:
# echo "文本内容"
主要功能:在终端中输入指定的文本内容
案例:在终端中,输出hello world字符串
# echo "hello world"
4、输出重定向
场景:一般命令的输出都会显示在终端中,有些时候需要将一些命令的执行结果想要保存到文件中进行后续的分析/统计,则这时候需要使用到的输出重定向技术。
> 标准输出重定向:覆盖输出,会覆盖前文件内容
>> 追加重定向:追加输出,不会覆盖原始文件内容,会在原始内容末尾继续添加
案例:把echo输出的”hello world”写入到readme.txt文件中
# echo "hello world" > readme.txt
以上程序的主要功能代表把echo命令的执行结果,输出写入到readme.txt文件中,如果readme.txt文件中存在内容,则首先清空,然后在写入hello world
四、Linux操作系统用户和组的概念
1、为什么需要了解用户和组
服务器要添加多账户的作用
针对不同用户分配不同权限,不同权限可以限制用户可以访问到系统资源
提高系统安全性
帮助系统管理员对使用系统用户进行跟踪
2、用户和组的关系
理论上Linux系统中的每个用户在创建时都应该有一个对应的用户组,这个组就称之为用户的主组。同时,有些情况下,某个用户需要临时使用某个组的权限,那这个组就称之为这个用户的附属组或附加组。
主组只能拥有一个,但是附属组或附加组可以同时拥有多个 => 亲爹,干爹(多个)
3.用户组操作
用户组操作:用户组添加,操作,删除
组:group
添加:add
修改:mod
删除:del
☆ 用户组的添加
基本语法:
# groupadd [选项] 用户组的组名称
选项说明:
-g :代表用户组的组ID编号,自定义组必须从1000开始,不能重复
案例:在系统中添加一个hr的用户组
# groupadd hr
案例:在系统中添加一个test的用户组并指定定编号1100
# groupadd -g 1100 test
问题:我们刚才创建的hr以及test用户组到底添加到哪里了?
答:默认情况下,我们添加的用户组都会放在一个系统文件中,文件位置=>/etc/group
# tail -3 /etc/group
root:x:0:
itheima:x:1000:
☆ /etc/group文件解析
由以上命令的执行结果可知,在/etc/group文件中,其一共拥有三个冒号,共四列。每列含义:
第一列:用户组的组名称
第二列:用户组的组密码,使用一个x占位符
第三列:用户组的组ID编号,1-999代表系统用户组的组编号,1000以后的代表自定义组的组编号
CentOS6 => 1-499,500...
CentOS7 => 1-999,1000...
第四列:用户组内的用户信息(如果一个用户的附属组或附加组为这个组名,则显示在此位置)
☆ 用户组的修改
基本语法:
# groupmod [选项 选项的值] 原来组的组名称
-g :gid缩写,设置一个自定义的用户组ID数字,1000以后
-n :name缩写,设置新的用户组的名称
案例:把hr用户组更名为szhr
# groupmod -n szhr hr
案例:把test用户组的组编号由1100更改为1003
# groupmod -g 1003 test
案例:把itcast组的组名称更改为admin且用户组的组编号更改为1004
# groupmod -g 1004 -n admin itcast
☆ 用户组的删除
基本语法:
# groupdel 用户组名称
案例:使用groupdel删除test用户组
# groupdel test
4、用户操作
用户:user
添加:add
修改:mod
删除:del
☆ 用户的添加
基本语法:
# useradd [选项 选项的值] 用户名称 可以添加多个选项
选项说明
-g :代表提那家用户时指定用户所属的组的主组,唯一的组信息(重要)
-s:代表指定用户可以使用的Shell类型,默认是/bin/bash (拥有大部分权限)还可以是/sbin/noligin ,代表账号创建成功,但是不能用于登录操作系统
/bin/bash ->给人使用
/sbin/nologin ->给软件使用
-G :代表添加用户时指定用户所属组的附属组或附加组,可以指定多个,用逗号隔开
-u :代表提那家用户时指定用户的ID编号,CentOS6从500开始,CentOS7中从1000开始(了解)
-c :代表用户备注信息,cqw:123456:(陈权伟的账号)
-d :代表用户家目录,默认是/home/用户名称,可以用-d进行更改
-n :取消建立用户名称为名的群组
案例:在系统中创建一个linuxuser账号
# useradd linuxuser
问题:我们并没有为linuxuser账号指定所属的主组,可以成功创建账号么?
答:可以,因为在创建账号时,如果没有明确指定用户所属的主组,默认情况下,系统会自动在用户组中创建一个与用户linuxuser同名的用户组,这个组就是这个用户的主组。
问题:刚才创建的linuxuser账号能不能用于登录操作系统
答:不行,因为Linux的登录账号必须要求有密码,如果一个账号没有密码是无法登录操作系统的。
案例:在系统中创建一个账号zhangsan,指定用户所属的主组为itheima
第一步:查询一下itheima的组ID编号
# tail -5 /etc/group
itheima:x:1000:
第二步:根据组的编号添加用户
# useradd -g 1000 zhangsan
案例:在系统中创建一个账号lisi,指定主组为itheima,此用户只能被软件所使用,不能用于登录操作系统
# useradd -g 1000 -s /sbin/nologin lisi
案例:在系统中创建一个wangwu,指定主组为wangwu,附属组为itheima
# useradd -G 1000 wangwu
☆ 用户信息查询
基本语法:
# id 用户名称
主要功能:查询某个指定的用户信息
案例:查询linuxuser用户的信息
# id linuxuser
uid=1002(linuxuser) gid=1005(linuxuser) groups=1005(linuxuser)
uid:用户编号
gid:用户所属的主组的编号
groups:用户的主组以及附属组信息,第一个是主组,后面的都是附属组或附加组信息
Linux用户管理与远程管理
一、用户管理
1、回顾用户组管理
groupadd :组添加
groupmod: 组修改
groupdel:组删除
与用户组相关文件 /etc/group ,一共有四列
itheima:x:1000:
1-组名称
2-组密码
3-组编号
4-组内用户信息(这个组必须是这个用户的附属组或附加组)
2、回顾用户管理
useradd用户添加
useradd [选项 选项的值]用户名称
选项说明
-g :指定用户组主组编号信息
-s :指定用户可以使用的Shell类型
/bin/bash 给人
/sbin/nologin 给软件
-G 指定附属组ID编号,如果有多个附属组,可以使用逗号隔开
-d :指定用户家 /home/itheima,useradd -d /itheima itheima
-u :指定用户的ID编号,默认是自动生成的
-c :comment,注释信息,scj:x:uid:gid:宋楚杰的账号
-n :取消以用户名称命名的组信息
id命令
# id itheima
3、与用户相关的用户文件
组:/etc/group文件
用户:/etc/passwd文件,每创建一个用户,其就会在此文件中追加一行
vim /etc/passwd
root:x:0:0:root:/root:/bin/bash
第1列:用户名称
第2列:用户名密码,使用一个x占位符,密码存储在/etc/shadow(1-用户名,2-加密密码)
第3列:数字,用户ID编号
第4列:数字,用户的主组ID编号
第5列:代表注释信息,useradd -c "备注信息" 用户名称
第6列:用户家目录,默认在 /home/用户名称
第7列 :用户可以使用的Shell类型,useradd -s /bin/bash或 /sbin/nologin 用户名称
4、用户修改操作
用户:user,添加:add,修改:mod,删除:del
基本语法:
# useradd [选项 选项的值] 用户名称
选项说明
-g :修改用户所属主组的编号
-l :login name修改用户名称
-s :修改用户可以使用的Shell类型,如/bin/bash => /sbin/nologin
-L :锁定用户,锁定用户无法登录lock
-U:解锁用户unlock
-G
案例:修改zhangsan账号信息,更名为zs
# usermod -l zs zhangsan
案例:修改wangwu账号信息,把用户的主组的编号更新为1000(itheima)
# usermod -g 1000 wangwu
案例:禁止linuxuser账号登录Linux操作系统
# usermod -s /sbin/nologin linuxuser
案例:禁止linux用户登录操作(Ctrl + Alt + F2 ~ F6)
Linux系统除了默认的图形化界面,其实还有5个隐藏的字符界面,按Ctrl + Alt + F1~F6
有些电脑开启Fn功能键,所以如果Ctrl + Alt + F1~F6不生效,则可以按Ctrl + Alt + Fn + F1~F6
# usermod -L linux
案例:解锁linux用户
# usermod -U linux
问题:账号已经解锁,但是无法登录
① 当前账号没有设置密码,因为Linux操作系统不允许没有密码的操作进行登录
② 当前用户的Shell类型为/sbin/nologin,所以其无法登录
5、passwd命令
基本语法:
# passwd 用户名称
主要功能:为某个用户设置密码(添加或修改),可以给自己也可以给别人设置
案例:修改自己的密码
[root@yunwei ~]# passwd
案例:为linux账号添加一个密码,密码:123456
[root@yunwei ~]# passwd linux
特别注意:在Linux操作系统中,如果一个账号没有密码,则无法登录操作系统。
6、su命令
基本语法:
# su [-] root
选项:
- :横杠(减号),代表切换用户的同时,切换目录到用户的家
主要功能:切换用户的账号
从超级管理员切换到普通用户,root => itheima,不需要输入itheima的密码
从普通账号切换到超级管理员,itheima => root,需要输入root的密码
从普通账号切换到普通账号,itheima => linuxuser,也需要输入linuxuser密码
7、wheel组(了解)
Linux系统中,理论上只有在wheel组中的普通用户,才可以通过su命令切换到root账户,默认所有普通用户都能切换到root,只要知道root密码,换句话说,默认此配置不生效
8、用户删除操作
基本语法:
# userdel [选项] 用户名称
选项说明:
-r :删除用户的同时,删除用户的家(默认不删除)
案例:删除用户但是不删除用户的家目录
# userdel zs
案例:删除用户的同时删除用户的家目录
# userdel -r lisi
删除账号流程:① 删除账号 ② 确认是否删除用户家 ③ 删除用户主组(没有其他用户)
扩展:当我们想要删除某个账号时,系统提示当前账号正在被某个进程所使用
解决方案:
找到这个登录的用户,然后直接注销
第二种方案:
# kill [-9] 进程的ID编号
选项说明:-9代表强制结束某个进程
主要功能:用于结束某个进程的继续运行
案例:结束11565进程
简单粗暴,kill 对应用户的全部进程(尽量斩草除根,结束父进程)
# ps -ef |grep linux
ps命令:查看进程
-ef :查看系统的所有进程
|:管道命令
grep linux:搜索包含了linux关键词的所有进程
结束完成后,再次使用userdel删除即可
二、管道(重点)
1、管道符
“|” 竖线
作用:管道是一种通信机制,通常用于进程之间的通信,表现出来的形式将前面每一个进程输出直接作为下一个进程输入
0 : 标准输入,程序或命令需要外部的某些程序传递相应的参数,才能正常运行
1:标准输出,程序或命令正确执行的结果,我们就称之为标准输出
2:标准错误:程序命令错误执行结果,我们就称之为标准错误
2、过滤(筛选)功能
基本语法:
# 前一个命令 | 后一个命令
案例:获取/根目录下包含关键字”y”的文件信息
ls / | grep y
解析
| :管道符号,作用 => 把ls / 的正确执行结果作为参数传递给grep命令
ls /:管道左边命令
grep y :管道右边的命令
grep命令的基本语法 => grep 关键字 文件名称
案例:检索系统中的已安装文件,只筛选mariadb软件信息
# rpm -qa | grep mariadb
-q :query,查询
-a :all,所有
案例:在系统的进程中进行查找,查找与itheima相关的进程信息
# ps -ef | grep itheima
ps -ef :查询系统中所有正在运行的进程
3、特殊功能
回顾:wc命令,word count ,文件统计功能
# wc [选项] 文件名称
选项说明:
-l :统计总行数
-w :word总单词数
-c :统计总字节数
案例:统计/根目录下一共有多少个文件0
# ls / | wc -l
案例:用户在计算机中有一个配置文件(/etc/passwd),一般情况下,一个用户会占用一行配置,请你使用现学的管道统计当前计算机中一共有多少个用户个信息(一个用户一行)
# cat /etc/passwd | wc -l
5、xargs命令扩展
问题:为什么需要xargs命令?
答:之所以能用到这个命令,关键是由于很多命令不支持 | 管道来传递参数,而日常工作中又有这个必要,所以就有了 xargs 命令。
简单来说,xargs命令就相当于对管道命令进行了一个扩展,让所有命令都支持管道
案例:搜索/etc目录下的所有”.conf”结尾的文件信息,然后以详细列表形式显示
# find /etc -name "*.conf" | ls -l 查询不准确
解决方案,在ls命令之前添加一个xargs命令,这样ls命令就支持管道了,可以用于接收前一个命令的执行结果
# find /etc -name "*.conf" | xargs ls -l
三、Linux网络管理
1、获取计算机的网络信息
基本语法:
ifconfig
Windows => ipconfig Linux => ifconfig
第一步:连接网络
第二步:使用ifconfig命令,获取计算机的网络信息
# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.1.1.16 netmask 255.255.255.0 broadcast 10.1.1.255
inet6 fe80::e472:7b78:c871:8e12 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:48:bf:f9 txqueuelen 1000 (Ethernet)
RX packets 254 bytes 54837 (53.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 287 bytes 42006 (41.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
解析:inet 10.1.1.16 netmask 255.255.255.0 broadcast 10.1.1.255
inet 10.1.1.16 :代表ens33网卡的IP地址,将来远程连接就是用这个IP
netmask :子网掩码,一般为255.255.255.0
broadcast :广播地址,10.1.1.255
CentOS6 => eth0 , CentOS7 => ens33
ens33 :是默认的网卡,我们获取的IP也要从这个网卡中获取
lo(loop,循环):表示回环网卡,只有一个固定的IP地址,127.0.0.1代表本机
virbr0:虚拟网络接口,因为咱们使用vmware虚拟机安装Centos,所以其会产生virbr0虚拟网络接口
2、与网卡相关的配置文件
Linux系统中,一切皆文件。所以保存网络信息的也是通过一个文件来完成的。
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO="dhcp"
NAME="ens33"
UUID="6c809893-d12c-46af-9987-4c05b2773c91"
DEVICE="ens33"
ONBOOT="yes"
参数解析
TYPE :网络类型 Ethernet以太网
BOOTPROTO: IP获取方式,dhcp代表自动获取,static/none手工设置
NAME :网卡的名称:ens33
UUID :代表网卡的UUID编号(必须是唯一的)
DEVICE :设备名称
ONBOOT :代表网卡是否随计算机开启启动,yes随计算机开机启动,no代表不启动
3、查询计算机的网络状态
基本语法:
# systemctl status network
systemctl = system + control = 系统控制
主要功能:查询计算机网络的状态,网络是否正常连接。
主要功能:查询计算机网络的状态,网络是否正常连接。
Active : active(正常)或 inactive(dead,网络状态不正常没有连接)
4、systemctl启动/重启/停止网络
systemctl start network
systemctl stop network
systemctl restart network
start :启动
stop :停止
restart :重启
1、为什么需要远程连接
2、SSH协议
ssh 是一种网络协议,用于计算机加密登录
3、sshd服务
当我们在计算机中安装了sshd软件,启动后,就会在进程中产生一个sshd进程,其遵循计算机的SSH协议。默认情况下,sshd服务随系统自动安装的。
# systemctl status sshd
4、sshd服务的端口号
SSH协议,其规则了远程连接与传输的端口号,所以sshd服务启动后,就会占用计算机的22号端口。
端口号能解决什么问题?答:能让我们的计算机区分出不同的服务
5、使用MX软件连接Linux服务器
Putty
PuTTY为一开放源代码软件,主要由Simon Tatham维护,使用MIT licence授权。
SecureCRT
官网:www.vandyke.com
SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件。(颜色方案不是特别好看)
XShell
Xshell是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。
缺点:收费
MobaXterm
官网:https://mobaxterm.mobatek.net/
① 获取Linux的的IP地址
# ifconfig
10.1.1.16
② 打开MX软件,单击Session,创建一个SSH远程连接
③ 设置书签(给这台服务器起个名字)
④ 输入CentOS7.6的root管理员密码
管理员:root
密 码:123456
6、使用MX实现文件传输
判断题解析
主组中有账号不能删除 对
如果一个组里面有成员,这个组是可以删除的 对
单选题
6、使用vim编辑器将文件中所有的/bin/bash替换成heima,以下哪个命令可以实现? ()提示=>替换的分隔符,除了斜杠/还可以使用#号,如:s#要替换的关键字#替换后的关键字#g [单选题]
:%s#/bin/bash#heima#g
Linux的权限管理操作
一、权限概述
1、权限的基本概念
在多用户计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权利。
在Linux 中分别有读、写、执行权限:
权限针对文件 | 权限针对目录 | |
---|---|---|
读r | 表示可以查看文件内容;cat | 表示可以(ls)查看目录中存在的文件名称 |
写w | 表示可以更改文件的内容;vim 修改,保存退出 | 表示是否可以删除目录中的子文件或者新建子目录(rm/touch/mkdir) |
执行x | 表示是否可以开启文件当中记录的程序,一般指二进制文件(.sh) => 绿色 | 表示是否可以进入目录中(cd) |
注:一般给予目录读权限时,也将会给其执行权限,属于“套餐”组合
可读权限 read => r(简写),可写权限 write => w(简写),可执行权限 excute => x(简写)
2、为什么要设置权限
- 服务器中国数据价值
- 员工职责分工不同
- 应对外部的攻击
- 内部管理需要
3、Linux用户身份类别
Linux系统一般将文件权限分为三类
read 读
write 写
execute 执行
4、user文件拥有者
文件的拥有者:默认情况下,谁创建了这个文件谁就是文件的拥有者。文件的拥有者可以进行更改并不是一成不变的。
裴凯 => linux.txt,默认情况下,裴凯就是linux.txt文件的拥有者
5、group文件所属组内用户
group所属组内的用户与文件所属组相同的组内用户
比如,裴凯与罗新兴、周卓都同属于一个itheima的用户组,罗新兴和周卓就是这个文件的组内用户。
6、other其他用户
other其他用户代表这些人既不是文件的拥有者,也不是文件所属组内的用户,我们把这些人就称之为other其他用户。
7、特殊用户root
在Linux操作系统中,root最高权限(针对所有文件),所以设置权限对root账号没有效果
在Linux系统中,三大类用户也可以拥有简写形式user(u)、group(g)、other(o)
二、普通权限管理
1、ls -l命令查看文件权限
基本语法:
# ls -l
或
# ll
备注:ll命令是红帽以及CentOS系统特有的一个命令,在其他操作系统中可能并不支持
2、文件类型+权限解析
Linux一共有7种文件类型,分别如下:
-:普通文件
d: 目录文件
l :软链接(类似Windows的快捷方式)
特殊文件
b: block 块设备文件(硬盘,光驱)
p: 管道文件
c: 字符设备文件(串口设备)
s:套接字文件/数据接口文件(例如启动一个MySql服务器时会产生个mysql.sock文件)
3、文件或文件夹权限设置(字母)
基本语法:ch = change mod简单理解权限
# chmod [选项] 权限设置 文件或目录的名称
选项说明:
-R :递归设置,针对文件夹(目录)
重点:字母设置并不难,重点看三方面
第一个:确认要给哪个身份设置权限,u/g/o/ugo(a)
第二个:确认是添加权限(+),修改权限还是赋予权限(=),删除权限(-)
第三个:确认给这个用户针对这个文件或文件夹设置什么样的权限,r、w、x
案例:给readme.txt文件的拥有者,增加一个可执行权限
# chmod u+x readme.txt
案例:把readme.txt文件的拥有者的可执行权限去除
# chmod u-x readme.txt
案例:为readme.txt中的所属组内用户赋予rw权限
# chmod g=rw readme.txt
案例:给shop目录及其内部的文件统一添加w可写权限
# chmod -R ugo+w shop
或
# chomd -R a+w shop
案例:给shop目录设置权限,要求拥有者rwx,组内用户r-x,其他用户r-x
# chmod -R u=rwx,g=r-x,o=r-x shop
4、文件或文件夹权限设置(数字)
经常会在技术网站上看到类似于# chmod 777 a.txt 这样的命令,这种形式称之为数字形式权限。
文件权限与数字的对应关系,我们会发现没有7这个数字
权限 | 对应数字 | 意义 |
---|---|---|
r | 4 | 可读 |
w | 2 | 可写 |
x | 1 | 可执行 |
– | 0 | 没有权限 |
777 :
第一个数字7:代表文件拥有者权限
第二个数字7,代表文件所属组内用户权限
第三个数字7,代表其他用户权限
rwx = 4 + 2 + 1 = 7
rw = 4 + 2 = 6
rx = 4 + 1 = 5
案例:给readme.txt设置权限,文件的拥有者rwx,组内用户rw,其他用户r
rwx = 7
rw = 6
r = 4
# chmod 764 readme.txt
案例:给shop文件夹设置777权限
# chmod -R 777 shop
5、奇葩权限
问题:用超级管理员设置文档的权限命令是# chmod -R 731 shop,请问这个命令有没有什么不合理的地方?
答:731权限进行拆解
7 = 4 + 2 + 1 = rwx
3 = 2 + 1 = wx
1 = x
问题在权限731中的3权限,3表示写+执行权限,但是写又必须需要能打开之后才可以写,因此必须需要具备可读权限,因此此权限设置不合理。
注:实际工作中,各位小伙伴在设置权限时一定不要设置这种”奇葩权限”,一般情况下,单独出现2、3的权限数字一般都是有问题的权限。
6、练习题
1)使用root 用户设置文件夹/root/shop 的权限为:属主全部权限,属组拥有读和执行权限,其他用户没有权限,请使用数字权限的形式设置
rwx=7,rx=4+1=5,0
# chmod -R 750 /root/shop
2)请置文件/root/readme.txt 的权限,权限要求为:
属主拥有全部权限,属组要求可以读写,其他用户只读,要求使用数字形式;
rwx=7,rw=4+2=6,r=4
# chmod 764 /root/readme.txt
3)请设置/root/email.doc权限,权限要求只有属主可以读写,除此之外任何人没有权限;
rw=6,0,0
# chmod 600 /root/email.doc
7、特殊权限说明
在Linux中,如果要闪出一个文件,不是看文件有没有对应的权限,而是看文件所在的目录是否有写权限,如果有才可以删除(同时具备执行权限)
/shell/readme.txt
我们想删除readme.txt文件,必须要对shell目录具有可写权限,否则文件无法删除
三、文件拥有者以及文件所属组设置
文件所有者:属主
文件所属组:属组
1、什么是属主与属组
属主:所属的用户,文档所有者,这是一盒账户,这是一个人
属组:所属用户组,这是一个组
2、文件拥有者与所属组的查看
# ls -l
或
# ll
3、了解文件的拥有者与文件所属组来源
在Linux操作系统中,每个文件都是由Linux系统用户创建的。
在Linux操作系统中,每个用户都具有一个用户名称以及一个主组的概念
# su - itheima
# touch readme.txt
# ll readme.txt
-rw-rw-r--. 1 itheima itheima 0 Mar 20 15:17 readme.txt
4、为什么需要更改文件拥有者与所属组
一个财务表格,以前由胡一菲进行更新,她有读写权限,现在胡一菲去阿拉善沙漠找曾老师了,改权限没用,需要把属主改成诸葛大力,由诸葛大力更新。
5、文件拥有者设置
基本语法:ch = change ,own = owner
# chown [选项] 新文件拥有者名称 文件名称
选项说明:
-R :代表递归修改,主要针对文件夹
案例:把/root/readme.txt文件的拥有者更改为itheima
# chown itheima /root/readme.txt
案例:把/root/shop文件夹的拥有者更改为linuxuser
# chown -R linuxuser /root/shop
6、文件所属组的设置
基本语法: ch = change , group,chgrp
# chgrp [选项] 新文件所属组名称 文件名称
选项说明:
-R : 代表递归修改,主要针对文件夹
案例:把/root/readme.txt文件的所属组名称更改为itheima
# chgrp itheima /root/readme.txt
案例:把/root/shop文件夹的所属组名称也更改为itheima
# chgrp -R itheima /root/shop
7、chown同时修改属主与属组
基本语法:
# chown [选项] 文件拥有者名称:文件所属组名称 文件名称
或
# chown [选项] 文件拥有者名称.文件所属组名称 文件名称
选项说明:
-R : 代表递归修改,主要针对文件夹
案例:readme.txt文件的拥有者与所属组同时更改为root
# chown root:root readme.txt
或
# chown root.root readme.txt
案例:更改shop目录的拥有者以及所属组为root
# chown -R root:root shop
或
# chown -R root.root shop
四、特殊权限(扩展)
1、设置位S(针对二进制文件)
☆ 设置位S的作用
为了让一般使用者临时具有该文件所属主/组的执行权限
主要针对二进制文件(命令)
例如:/usr/bin/passwd在执行它的时候需要去修改/etc/passwd和/etc/shadow等文件,这些文件除了root外,其他用户都没有写权限,但是又为了能让普通用户修改自己的密码,该怎么办呢?
whereis命令,主要功能就是查询某个命令所在的路径,基本语法 => whereis passwd
itheima普通账号 => 执行/usr/bin/passwd => 修改/etc/shadow文件(存放用户的密码)
/etc/shadow文件比较特殊,其权限为— — —(000),除root外,其他人都没有权限
☆ 去除S位权限
# chmod u-s /usr/bin/passwd
☆ 添加S位权限
# chmod u+s /usr/bin/passwd
或者
# chmod 4755 /usr/bin/passwd
2、沾滞位T(针对文件夹)
☆ 粘滞位作用
基本语法:
# chmod -R o+t 文件夹的名称
或
# chmod -R 1777 文件夹的名称
主要功能:只允许文件的创建者和root用户删除文件(防止误删除权限位)
案例:/tmp文件夹,拥有最高权限777,比如itheima创建了一个文件在此目录,linuxuser用户可以对其进行删除操作,这种显然不太合适。
7 = r + w + x = 可读、可写、可执行
案例:使用ls -l命令查看/tmp目录权限
# ls -ld /tmp
或
# ll -d /tmp
☆ 移除粘滞位
# chmod -R o-t /tmp
或
# chmod -R 0777 /tmp
☆ 添加粘滞位
# chmod -R o+t /tmp
或
# chmod -R 1777 /tmp
五、ACL访问控制
1、为什么需要ACL
ACL,是 Access Control List(访问控制列表)的缩写,在 Linux 系统中, ACL 可实现对单一用户设定访问文件的权限。
扩展:ACL权限可以针对某个用户,也可以针对某个组。ACL优势就是让权限控制更加的精准。
2、获取某个文件的ACL权限
基本语法:
# getfacl 文件或目录名称
3、给某个文件设置ACL权限
# setfacl [选项] 文件或目录名称
选项说明:
-m : 修改acl策略
-x : 去掉某个用户或者某个组的权限
-b : 删除所有的acl策略
-R :递归,通常用在文件夹
案例:针对readme.txt文件给linuxuser设置一个权限=>可读
# setfacl -m u:linuxuser:r readme.txt => 针对某个用户开通ACL权限
案例:针对shop文件夹给itheima组设置一个权限=>可读可写权限rw
# setfacl -R -m g:itheima:rw shop => 针对某个用户组开通ACL权限
案例:把linuxuser用户权限从readme.txt中移除掉
# setfacl -x u:linuxuser readme.txt
案例:把itheima用户组权限从shop中移除掉
# setfacl -x -R g:itheima shop
案例:把readme.txt文件中的所有ACL权限全部移除
# setfacl -b readme.txt
六、umask(了解,不要更改!!!)
1、什么是umask
umask表示创建文件时的默认权限(即创建文件时不需要设置而天生的权限)
root用户下,touch a ,文件a的默认权限是644
普通用户下,touch b ,文件b的默认权限是664
644和664我们并没有设置,其中的关键因素就是umask
扩展:实际上我们创建一个普通文件最高权限666。而创建一个文件夹其最高权限777
实际文件权限 = 最高权限 – umask的值
2、获取用户的umask值
# umask
0022
注:0022中第一位0代表特殊权限位,可以不设置。
umask的默认值,在root和普通用户下是不一样的,分别是022和002
为什么文件在root下创建就是644,在itheima下就是664
root : 666 – 022 = 644
itheima:666 – 002 = 664
3、修改umask值(一定不要改)
☆ 临时修改(重启后失效)
# umask 002
777 - 002 = 775
☆ 永久修改
# vim ~/.bashrc
① 在文件末尾添加umask 002
② 保存退出
③ su切换用户则立即生效
Linux自有服务与软件包管理
服务是一些特定的进程,自有服务就是系统开机后就自动运行的一些进程,一旦客户发出请求,这些进程就自动为他们提供服务,windows系统中,把这些自动运行的进程,称为”服务”
举例:当我们使用SSH客户端软件连接linux的时候,我们的服务器为什么会对连接做出响应?是因为SSH服务开机就自动运行了。
所谓自有服务,简单来说,可以理解为Linux系统开机自动运行的服务(程序)。
一、systemctl管理系统服务
1、systemctl概述
CentOS6版本:
service命令(管理服务开启、停止以及重启)+ chkconfig(定义开机启动项)
# service network start|stop|restart
CentOS7版本:
systemctl命令 = system系统 + control控制(服务管理+开启启动项管理)
# systemctl start|stop|restart network
2、显示系统服务
基本语法:
# systemctl [选项]
选项说明:
list-units --type service --all:列出所有服务(包含启动的和没启动的)
list-units --type service:列出所有启动的服务
案例:列出Linux系统中所有的服务(包含启动的和没启动的)
# systemctl list-units --type service --all
案例:只列出已经启动的Linux系统服务
# systemctl list-units --type service
案例:把systemctl显示系统服务与管道命令相结合,筛选我们想要的服务信息
# systemctl list-units --type service | grep sshd
3、Linux系统服务管理
☆ status查看状态
查看系统服务的状态
# systemctl status 系统服务的名称
案例:查询系统中网络服务的状态信息
# systemctl status network
案例:查询系统中sshd服务的状态信息
# systemctl status sshd
☆ stop停止服务
# systemctl stop 系统服务的名称
案例:使用systemctl命令停止network网络服务
# systemctl stop network
☆ start启动服务
# systemctl start 系统服务的名称
案例:使用systemctl命令启动network网络服务
# systemctl start network
☆ restart重启服务
# systemctl restart 系统服务的名称
等价于
# systemctl stop 系统服务的名称
# systemctl start 系统服务的名称
案例:使用systemctl命令重启crond计划任务的服务信息
# systemctl restart crond
☆ reload热重载技术
# systemctl reload 系统服务名称
reload:重新加载指定服务的配置文件(并非所有服务都支持reload,通常使用restart)
有些服务,如Nginx,更改了配置文件,但是不能重启Nginx服务,只是想立即让我们配置文件的更改生效,则就可以使用热重载技术了。
案例:使用热重载技术重新加载crond服务
# systemctl reload crond
4、服务持久化(开机自启与开机不自启)
所谓服务持久化,就是服务在开机时候,是否自动启动
☆ 开机自启
# systemctl enable 系统服务名称
案例:把network网络服务设置为开机自启动
# systemctl enable network
network.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig network on
以上提示代表network.service不是一个本地的系统服务,所以想设置开机自启需要使用/sbin/chkconfig进行操作
# /sbin/chkconfig network on
案例:把crond计划任务的服务信息添加到开机自启动中
# systemctl enable crond
☆ 开机不自启
# systemctl disable 系统服务的名称
案例:把crond计划任务的服务信息从开机自启动中移除
# systemctl disable crond
systemctl参数总结
参数 | 含义 |
---|---|
list-units –type service –all | 列出所有服务 |
list-units –type service | 列出所有启动的服务 |
start | 启动指定服务 |
stop | 停止指定服务 |
status | 检查指定服务的运行状况 |
restart | 重启指定服务 |
reload | 重新加载指定服务的配置文件(并非所有服务都支持reload,通常使用restart) |
enable | 指定服务开机自动启动 |
disable | 取消服务开机自动启动 |
二、扩展:系统运行级别
1、什么是运行级别
运行级别(Running Level):代表Linux系统不同运行模式
2、CentOS6的运行级别
# vim /etc/inittab
0 系统关机状态 halt (Do NOT set initdefault to this)
1 单用户工作状态 Single user mode (类似Windows的安全模式,Linux忘记密码)
2 多用户状态(没有NFS) Multiuser, without NFS (The same as 3, if you do not have networking)
3 多用户状态(有NFS) Full multiuser mode (字符模式,服务基本都是此模式)
4 系统未使用,留给用户 unused
5 图形界面 X11 (图形模式,个人计算机都是此模式)
6 系统正常关闭并重新启动 reboot (Do NOT set initdefault to this)
3、CentOS7的运行级别
0 shutdown.target
1 emergency.target
2 rescure.target
3 multi-user.target 字符模式
4 无
5 graphical.target 图形模式
6 无
4、init命令(临时更改运行模式)
# init 模式编号
案例:立即关机
# shutdown -h 0或now
或
# halt -p
或
# init 0
案例:立即重启
# reboot
或
# init 6
案例:把计算机切换到字符模式(黑窗口)
# init 3
案例:把计算机切换到图形模式(图形界面)
# init 5
5、CentOS6中的chkconfig
问题:在CentOS7中,设置network开机启动时,系统要求使用chkconfig命令
# chkconfig network on
设置完成后,怎么查看network有没有随开机自动启动呢?
# chkconfig --list |grep network
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
0 关机模式
1 单用户模式
2 多用户模式(无NFS)
3 字符模式
4 自定义模式
5 图形模式
6 重启模式
三、NTP时间同步服务
1、什么是NTP服务
NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。
工作场景:
公司开发了一个电商网站,由于访问量很大,网站后端由100台服务器组成集群。50台负责接收订单,50台负责安排发货,接收订单的服务器需要记录用户下订单的具体时间,把数据传给负责发货的服务器,由于100台服务器时间各不相同,记录的时间经常不一致,甚至会出现下单时间是明天,发货时间是昨天的情况。
2、NTP时间同步的原理
问题:标准时间是哪里来的?
现在的标准时间是由原子钟报时的国际标准时间UTC(Universal Time Coordinated,世界协调时),所以NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。
在NTP中,定义了时间按照服务器的等级传播,Stratum层的总数限制在15以内
工作中,通常直接使用各个组织提供的,现成的NTP服务器
备注:千万不要改Windows系统时间!
3、从哪里找合适的NTP服务器呢?
NTP授时网站:http://www.ntp.org.cn/pool.php
4、NTP时间同步操作
☆ 手工同步
# ntpdate NTP 服务器IP地址或域名
案例:查看Linux系统时间
# date
案例:从NTP服务器中同步系统时间
# ntpdate cn.ntp.org.cn
☆ 自动同步
基本语法:
① 启动ntpd服务
# systemctl start ntpd
② 把ntpd服务追加到系统开机启动项中
# systemctl enable ntpd
问题1:启动ntpd服务后,是不是时间就自动同步了?
启动后就自动同步了
问题2:需不需要让ntpd服务,开机自动运行?
需要
ntpd服务配置文件位置 /etc/ntp.conf
四、Linux下的软件包管理
1、什么是软件包
这是什么?
由以上图解可知,这个PCQQ2019.exe是Windows中的软件安装包。
所谓的Linux软件包就是Linux下软件的安装程序
2、Linux下软件的安装方式
① RPM软件包安装 => 软件名称.rpm
② YUM包管理工具 => yum install 软件名称 -y
③ 源码安装 => 下载软件的源代码 => 编译 => 安装(最麻烦的,但是也最稳定)
3、二进制软件包
二进制包,也就是源码包经过成功编译之后产生的包
二进制包是Linux下默认的软件安装包,目前主要有以下两大主流的二进制包管理系统
- RPM 包管理系统:功能强大,安装、升级、査询和卸载非常简单方便,因此很多 Linux 发行版都默认使用此机制作为软件安装的管理方式,例如 Fedora、CentOS、SuSE 等。
- DPKG 包管理系统:由 Debian Linux 所开发的包管理机制,通过 DPKG 包,Debian Linux 就可以进行软件包管理,主要应用在 Debian 和 Ubuntu 中。
RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写
作用:rpm 的作用类似于豌豆荚,华为应用市场,App Store,主要作用是对linux 服务器上的软件包进行对应管理操作,管理分为:查询、卸载、安装/更新。
4、获取*.rpm软件包
a. 去官网去下载(http://rpm.pbone.net);
b. 不介意老版本的话,可以从光盘(或者镜像文件)中读取;CentOS7.6*.iso
5、查询系统中已安装的rpm软件
# rpm -qa |grep 要搜索的软件名称
选项说明:
-q :query,查询操作
-a :all,代表所有
案例1:查询计算机中已安装的rpm软件包
# rpm -qa
案例2:搜索计算机中已安装的firefox软件包
# rpm -qa |grep firefox
6、卸载CentOS系统中的rpm软件包
# rpm -e 软件名称 [选项]
选项说明:
--nodeps :强制卸载
案例:把系统中的firefox浏览器进行卸载操作
案例:把系统中的firefox浏览器进行卸载操作
# rpm -qa |grep firefox
firefox-60.2.2-1.el7.centos.x86_64
# rpm -e firefox-60.2.2-1.el7.centos.x86_64
7、rpm软件包的安装
基本语法:
# rpm -ivh 软件包的名称.rpm
选项说明:
-i:install,安装
-v:显示进度条
-h:表示以"#"形式显示进度条
8、rpm软件包的获取(光盘)
第一步:在VMware虚拟机中加载CentOS7.6的安装光盘
第二步:使用 # lsblk(list block devices)或者df -T 查看块状设备的信息
# lsblk
[root@yunwei ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 4.3G 0 rom /run/media/itheima/CentOS 7 x86_64
由以上图解可知,/dev/sr0代表光驱设备 => 挂载点 => /run/media/itheima/CentOS 7 x86_64文件夹
或
# df -T
Linux操作系统的中所有存储设备必须先挂载后使用
第三步:使用cd命令,切换到挂载目录
# cd /run/media/itheima/CentOS\ 7\ x86_64
第四步:使用cd命令,切换到Packages软件包中
# cd Packages
第五步:查询我们要安装的软件包
# ls |grep firefox
firefox-60.2.2-1.el7.centos.x86_64.rpm
第六步:使用rpm -ivh命令安装软件
# rpm -ivh firefox-60.2.2-1.el7.centos.x86_64.rpm
输入firefox + Tab,让其自动补全
9、rpm软件包的升级
基本语法:
# rpm -Uvh 升级后的软件包名称.rpm
选项说明:
-U :Update,更新操作
案例:使用rpm -Uvh对firefox-60.2.2版本进行升级
# rpm -Uvh firefox-68.4.1-1.el7.centos.x86_64.rpm
10、rpm扩展
☆ 依赖关系
一个软件必须先有其他软件才能运行,例如之前xmind启动过程中提示的缺少DLL,称之为依赖
WAMP(Windows + Apache + MySQL + PHP)安装前必须先安装VC++ 2014 x86_64,这种情况就称之为有依赖关系。
60.8.0的firefox可以更新成功
下面我们尝试更新到68.4.1的版本
用法:rpm -Uvh 软件包名称
# rpm -Uvh firefox-68.4.1-1.el7.centos.x86_64.rpm
使用rpm命令,安装68.4.1版本的软件包
错误提示:
error:Failed dependencies:
提示安装68版本的firefox需要依赖nspr4.21的版本,nss的3.44的版本,这就是我们说的依赖关系。
为了解决依赖关系的问题,有另外一个管理工具叫做yum,后面我们会讲到。
A软件
A软件 => 需要依赖B软件
B软件 => 需要依赖C软件
C软件
依赖关系的解决:使用YUM软件包管理工具对其进行安装(自动解决依赖关系)
# yum install firefox -y
☆ 查看文件所属的包名
基本语法:f = file
# rpm -qf 文件名称
主要功能:判断某个文件所属的包名称
案例:查询/etc/ntp.conf 属于哪个软件包
# rpm -qf /etc/ntp.conf
ntp-4.2.6p5-28.el7.centos.x86_64
☆ 查询软件安装完成后,生成了哪些文件
基本语法:l = list,显示这个软件安装后生成了哪些文件
# rpm -ql 软件名称
案例1:查询firefox软件生成了哪些文件
# rpm -ql firefox
特别说明:软件安装完成后,一共生成了以下几类文件
配置文件类:/etc目录
程序文件本身,二进制文件命令:/usr/bin或/usr/sbin目录
文档手册:/usr/share/doc或man目录
案例2:查询openssh软件生成了哪些文件
# rpm -ql openssh
11、光盘的挂载与解挂
在Linux操作系统中,所有的存储设备都必须先挂载然后才能使用。
问题:为什么当我们直接访问/run/media/itheima/CentOS 7 x86_64就相当于访问光盘
答:主要原因就是因为CentOS7的操作系统自动把光驱设备挂载到此目录了,访问这个目录就相当于访问光盘。
☆ 解挂
# cd ~
# umount /run/media/itheima/CentOS\ 7\ x86_64
常见问题:当我们执行以上命令时,系统提示target is busy!
出现以上问题的主要原因在于我们当前所在的目录为挂载目录。
☆ 挂载
# mount 设备文件 挂载目录
提示:光驱的设备文件为/dev/sr0
案例:把光驱挂载到/mnt/cdrom目录
# mkdir /mnt/cdrom
# mount /dev/sr0 /mnt/cdrom
mount: /dev/sr0 is write-protected, mounting read-only
案例:把/mnt/cdrom进行解挂操作
# cd ~
# umount /mnt/cdrom
判断题解析
在RPM管理工具中,我们可以使用rpm -qf来查询某个软件在系统中生成哪些文件,对吗?
答案是:错
原因rpm -qf是查询某个软件在系统中所属包名
特殊权限主要作用是为了防止误删除操作,只有文件拥有者才能删除自己文件,其他用户一律不能删除对吗
答案是:错
解析:如果设置了特殊权限 ,用户权限都是777 理论上可以删除的,但是在设置粘滞位情况下 O+T ,就不能删除,所以应该是特殊权限T
想要删除目录文件file1,file1文件必须具备对该用户具备的w权限对吗
答案是错
解析
文件是否能删除应该是看,这个文件所在的目录是否具有w权限,而不是看文件本身是否具有w权限
Linux系统自有服务
一、Linux中防火墙firewalld
1、什么是防火墙
防火墙:防范网络攻击,软件防火墙,硬件防火墙
防火墙选择让正常请求通过,从而保证网络安全性。
Windows防火墙:
Windows防火墙的划分与开启、关闭操作:
2、防火墙的作用
3、Linux中的防火墙分类
CentOS5、CentOS6 => 防火墙 => iptables防火墙
CentOS7 => 防火墙 => firewalld防火墙
firewalld = fire火 wall墙 daemon守护进程
4、firewalld防火墙
☆ 区域
所谓区域是指,firewall 预先准备几套防火墙策略集合,策略模板,可以根据需求选择区域
常见区域及相应策略规则(规则:哪些端口或服务可以通过防火墙,哪些不能通过)
区域 | 默认策略 |
---|---|
trusted | 允许所有数据包 |
home | 拒绝流入的流量,除非与流出的流量相关,允许ssh,mdns,ippclient,amba-client,dhcpv6-client服务通过 |
internal | 等同于home |
work | 拒绝流入的流量,除非与流出的流量相关,允许ssh,ipp-client,dhcpv6-client服务通过 |
public | 拒绝流入的流量,除非与流出的流量相关,允许ssh,dhcpv6-client服务通过 |
external | 拒绝流入的流量,除非与流出的流量相关,允许ssh服务通过 |
dmz | 拒绝流入的流量,除非与流出的流量相关,允许ssh服务通过 |
block | 拒绝流入的流量,除非与流出的流量相关,非法流量采取拒绝操作 |
drop | 拒绝流入的流量,除非与流出的流量相关,非法流量采取丢弃操作 |
案例:在Linux系统中安装httpd服务(Web服务),占用计算机的80端口
# yum install httpd -y
# systemctl start httpd
安装启动完成后,在浏览器中,输入http://服务器的IP地址/即可访问httpd服务页面
以上操作只能使用Google浏览器、360浏览器或者Firefox火狐浏览器,一定不要使用IE
以上问题的原因在于:firewalld防火墙已经把httpd(80端口)屏蔽了,所以没有办法访问这台服务器的80端口(httpd服务)
临时解决办法:
# systemctl stop firewalld
☆ 运行模式和永久模式
运行模式:此模式下,配置防火墙策略立即生效,但是不写入配置文件
永久模式:此模式下,配置防火墙策略写入配置文件,但是需要reload重新加载才能生效
firewalld默认采用运行模式
==
5、防火墙设置
☆ 防火墙的启动、停止以及查看运行状态
查看运行状态
# systemctl status firewalld
停止防火墙(学习环境任意操作,生产环境一定不要停止防火墙)
# systemctl stop firewalld
记住:防火墙一旦停止,其设置的所有规则会全部失效!
启动防火墙
# systemctl start firewalld
☆ 防火墙重启与重载操作
重启操作
# systemctl restart firewalld
restart = stop + start,重启首先停止服务,然后在重新启动服务
重载操作
# systemctl reload firewalld
我们对防火墙的配置文件做了更改(永久模式),需要使用reload进行重载让其立即生效
reload并没有停止正在运行的防火墙服务,只是在服务的基础上变换了防火墙规则
☆ 把防火墙设置为开机启动与开机不启动
开机启动
# systemctl enable firewalld
开机不启动
# systemctl disable firewalld
6、firewalld防火墙规则
☆ firewalld管理工具
firewall -cmd [选项1][选项2][]
☆查看防火墙默认的区域
firewall -cmd --get=default-zone
运行效果:
☆ 查看所有支持的区域(zones)
# firewall-cmd --get-zones
运行结果:
为什么要有区域的概念:其实不同的区域就是不同的规则
☆ 查看当前区域的规则设置
# firewall-cmd --list-all
☆ 查看所有区域的规则设置
# firewall-cmd --list-all-zones
运行结果:
运行结果:
☆ 添加允许通过的服务或端口(重点)
① 通过服务的名称添加规则
# firewall-cmd --zone=public --add-service=服务的名称
备注:服务必须存储在/usr/lib/firewalld/services目录中
案例:把http服务添加到防火墙的规则中,允许通过防火墙
扩展:把http服务从防火墙规则中移除,不允许其通过防火墙
# firewall-cmd --zone=public --remove-service=http
# firewall-cmd --list-all
![image-20200323143838389](media/image-20200323143838389.png
② 通过服务的端口号添加规则
# firewall-cmd --zone=public --add-port=端口号/tcp
案例:把80/tcp添加到防火墙规则中,允许通过防火墙
# ss -naltp |grep httpd
httpd :::80
# 允许80端口通过firewalld防火墙
# firewall-cmd --zone=public --add-port=80/tcp
运行效果:
案例:从firewalld防火墙中把80端口的规则移除掉
# firewall-cmd --zone=public --remove-port=80/tcp
☆ 永久模式permanent
在Linux的新版防火墙firewalld中,其模式一共分为两大类:运行模式(临时模式)+ 永久模式。
运行模式:不会把规则保存到防火墙的配置文件中,设置完成后立即生效
永久模式:会把规则写入到防火墙的配置文件中,但是其需要reload重载后才会立即生效
# 根据服务名称添加规则(永久)
# firewall-cmd --zone=public --add-service=服务名称 --permanent
# firewall-cmd --reload
# 根据端口号添加规则(永久)
# firewall-cmd --zone=public --add-port=服务占用的端口号 --permanent
# firewall-cmd --reload
案例:把80端口添加到firewalld防火墙规则中,要求永久生效
# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --reload
# firewall-cmd --list-all
二、Linux中的计划任务
1、什么是计划任务
作用:操作系统不可能24 小时都有人在操作,有些时候想在指定的时间点去执行任务(例如:每天凌晨 2 点去重新启动httpd=>阿帕奇),此时不可能真有人每天夜里 2 点去执行命令,这就可以交给计划任务程序去执行操作了。
在指定的时间执行指定的操作!
2、Windows中计划任务
开始 => 控制面板=> 管理工具
Windows10 => Windows键 + X
案例:在Windows中创建一个计划任务
第一步:创建基本任务
第二步:设置计划任务名称
第三步:创建任务触发器(什么时间触发这个任务)
第四步:设置具体的时间
第五步:可以做的工作
第六步:设置要启动的程序
3、Linux中的计划任务
基本语法:
# crontab [选项]
-l :list 显示目前已经设置的计划任务
-e :使用vim编辑器编辑计划任务的文件
案例:显示当前账号下的计划任务
# crontab -l
no crontab for root => root账号下没有创建计划任务
案例:编写计划任务
# crontab -e
4、计划任务的编辑
crontab -e进入计划任务编辑文件
打开计划任务编辑文件后,可以在此文件中编写我们自定义的计划任务:
计划任务的规则语法格式,以行为单位,一行则为一个计划
分 时 日 月 周 要执行的命令(要求必须使用命令的完整路径,可以使用which查看)
取值范围(常识):
分:0~59
时:0~23
日:1~31
月:1~12
周:0~7,0 和 7 表示星期天
四个符号:
*:表示取值范围中的每一个数字
-:做连续区间表达式的,要想表示1~7,则可以写成:1-7
/:表示每多少个,例如:想每 10 分钟一次,则可以在分的位置写:*/10
,:表示多个取值,比如想在 1 点,2 点 6 点执行,则可以在时的位置写:1,2,6
5、几个小案例
问题1:每月1、10、22 日的4:45 重启network 服务
第一步:定制格式
分 时 日 月 周 /usr/bin/systemctl restart network
第二步:定制时间
45 4 1,10,22 * * /usr/bin/systemctl restart network
问题2:每周六、周日的1:10 重启network 服务
第一步:定制格式
分 时 日 月 周 /usr/bin/systemctl restart network
第二步:定制时间
10 1 * * 6,7 /usr/bin/systemctl restart network
问题3:每天18:00 至23:00 之间每隔30 分钟重启network 服务
第一步:定制格式
分 时 日 月 周 /usr/bin/systemctl restart network
第二步:定制时间
*/30 18-23 * * * /usr/bin/systemctl restart network
问题4:每隔两天的上午8 点到11 点的第3 和第15 分钟执行一次重启
第一步:定制格式
分 时 日 月 周 /usr/sbin/reboot
第二步:定制时间
3,15 8-11 */2 * * /usr/sbin/reboot
案例:每1 分钟往 root 家目录中的 readme.txt 中输一个1,为了看到效果使用追加输出【输出使用echo 命令,语法:# echo 输出的内容】
# crontab -e
* * * * * /usr/bin/echo 1 >> /root/readme.txt
提示:为了看到计划任务的效果,你可以单独开一个选项卡,使用tail -f /root/readme.txt
6、计划任务
常见的一个操作:定时备份(定时把数据库中的数据导出到某个文件中)
Linux计划任务以及进程检测与控制
一、Linux计划任务
1、计划任务权限
☆ 黑名单
crontab 是任何用户都可以创建计划任务,但是超级管理员可以通过配置来设置某些用户不允许设置计划任务
提出问题:如果我们想限定某个用户(如itheima)使用计划任务,如何处理呢?
答:可以使用计划任务的黑名单,黑名单文件路径 => /etc/cron.deny文件
案例:把普通账号itheima加入到cron.deny黑名单中,禁止其创建计划任务
第一步:切换到超级管理员root
# su - root
第二步:使用vim打开/etc/cron.deny文件
# vim /etc/cron.deny
第三步:把你需要禁止的用户名单,加入此文件(如itheima)
itheima
切换到itheima账号,测试是否可以使用crontab命令
☆ 白名单
在Linux计划任务中,除了黑名单,还有白名单,作用,允许哪些用户使用计划任务
白名单文件的路径 => /etc/cron.allow,但是要特别注意,此文件需要手工创建。
注意:白名单优先级高于黑名单,如果一个用户同时存在两个名单文件中,则会被默认允许创建计划任务。
2、查看计划任务保存文件
问题:计划任务文件具体保存在哪里呢?
答:/var/spool/cron/用户名称
,如果使用root用户编辑计划任务,则用户文件名为root
# ll /var/spool/cron
total 4
-rw-------. 1 itheima itheima 0 Mar 24 09:50 itheima
-rw-------. 1 root root 40 Mar 24 10:21 root
3、计划任务的日志程序
问题:在实际应用中,我们如何查看定时任务运行情况?
答:通过计划任务日志,日志文件位于/var/log/cron
案例:演示计划任务的日志程序
第一步:使用root账号创建一个计划任务
# su - root
# crontab -e
* * * * * echo 1 >> ~/readme.txt
第二步:使用tail -f命令监控/var/log/cron日志程序
# tail -f /var/log/cron
4、扩展内容:at命令
在Linux系统下,有两个命令可以实现计划任务:crontab与at(第三方需要额外安装)
crontab :每天定时执行计划任务(最小单元分钟)
at:一次性定时执行任务
☆启动底层服务
# systemctl start atd
# systemctl enable atd
atd = at + d = at命令 + daemon缩写
☆ 案例演示
案例1:三天后下午5点执行/bin/ls
# at 5pm+3 days
at>/bin/ls >/root/readme.txt
at>按Ctrl+D
am = 上午、pm = 下午、3 days = 3天
案例2:明天17点,输出时间到指定的文件中
# at 17:00 tomorrow
at>date>/root/readme.txt
at>按Ctrl+D
tomorrow = 明天
案例3:使用atq查看没有执行的计划任务
# atq
atq = at + q = at命令 + query查询
案例4:删除指定的计划任务
# atq
# atrm 任务号
atrm = at + rm = at命令 + remove移除
二、Linux进程与程序
1、了解一下进程与程序的关系
进程是正在执行的一个程序或命令,每个进程都是一个运行的实体,并占用一定系统资源,程序是人使用计算机语言编写可以实现特定目标解决特定问题代码集合
简单来说,程序是人使用计算机语言编写的,可以实现一定功能,并且可以执行的代码集合。进程是正在执行中的程序。
举例:谷歌浏览器是一个程序,当我们打开谷歌浏览器,就会在系统中看到一个浏览器的进程,当程序被执行时,程序的代码都会被加载入内存,操作系统给这个进程分配一个 ID,称为 PID(进程 ID)。我们打开多个谷歌浏览器,就有多个浏览器子进程,但是这些进程使用的程序,都是chrome
PID = Process ID = 进程编号
2、Linux下的进程管理工作
进程查看,通过查看,判断健康状态
进程终止
进程优先级控制
三、Linux下进程管理命令
1、任务背景
工作场景:
小黑入职到一家公司,接到的第一项任务,就是监控生产服务器的性能,提到服务器性能,我们首先想到的就是CPU,内存和磁盘。
2、使用top命令动态监测CPU信息
基本语法:
# top
3、系统的整体情况
☆ 第一行
内 容 | 说 明 |
---|---|
10:12:28 | 系统当前时间 |
up 13:05 | 系统的运行时间.本机己经运行 13 小时 05 分钟 |
3 users | 当前登录了三个用户 |
load average: 0.00,0.01,0.05 | 系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 |
☆ 第二行
Tasks: 230 total | 系统中的进程总数 |
---|---|
1 running | 正在运行的进程数 |
229 sleeping | 睡眠的进程数 |
0 stopped | 正在停止的进程数 |
0 zombie | 僵尸进程数。如果不是 0,则需要手工检查僵尸进程 |
☆ 第三行
内 容 | 说 明 |
---|---|
Cpu(s): 0.1 %us | 用户模式占用的 CPU 百分比 |
0.1%sy | 系统模式占用的 CPU 百分比 |
0.0%ni | 改变过优先级的用户进程占用的 CPU 百分比 |
99.7%id | idle缩写,空闲 CPU 占用的 CPU 百分比 |
0.1%wa | 等待输入/输出的进程占用的 CPU 百分比 |
0.0%hi | 硬中断请求服务占用的 CPU 百分比 |
0.1%si | 软中断请求服务占用的 CPU 百分比 |
0.0%st | st(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比 |
问题:如果我的机器有4核CPU,我想查看每一核心分别的负载情况怎能办?
答:交换快捷键 “1”
CPU负载测试 => cat /dev/urandom |md5sum
☆ 第四行
内 容 | 说 明 |
---|---|
Mem: 1863252 total | 物理内存的总量,单位为KB |
829960 used | 己经使用的物理内存数量 |
68352 free | 空闲的物理内存数量。我们使用的是虚拟机,共分配了 628MB内存,所以只有53MB的空闲内存 |
96490 buff/cache | 作为缓冲的内存数量 |
扩展:真正剩余内存 = free + buff/cache,真正使用内存 = used – buff/cache
☆ 第五行
内 容 | 说 明 |
---|---|
Swap: 2097148 total | 交换分区(虚拟内存)的总大小 |
3336 used | 已经使用的交换分区的大小 |
2093812 free | 空闲交换分区的大小 |
622420 avail Mem | 可用内存 |
在Linux操作系统分区时,最少需要3个分区:
① /boot分区 : 系统分区
② swap交换分区 :一般情况下为内存的1~2倍,但是尽量不要超过2G
③ /分区 :根分区,所有文件都存放于此
swap分区:就是当计算机的内存不足时,系统会自动从硬盘中划出一块区域充当内存使用。
我们通过 top 命令的整体信息部分,就可以判断服务器的健康状态。如果 1 分钟、5 分钟、15 分钟的平均负载高于CPU核数,说明系统压力较大。如果物理内存的空闲内存过小,则也证明系统压力较大。
问题:根据以上信息,目前我们的系统压力如何?
答:看CPU负载及内存的使用情况
问题:如果我们发现CPU负载过大,接下来怎么办?
答:如果1分钟、5分钟以及15分钟全部超过CPU的总核心数(必须引起警觉),这个时候就要查看底部的进程信息了。
经验之谈:如果一个总核数=8核心的CPU,理论上平均负载达到16,也还可以坚持很长一段时间。
4、系统的进程信息
PID | 进程的 ID。 |
---|---|
USER | 该进程所属的用户。 |
PR | 优先级,数值越小优先级越高。 |
NI | NICE优先级,数值越小优先级越高,取值范围-20到19,默认都是0 |
VIRT | 该进程使用的虚拟内存的大小,单位为 KB。 |
RES | 该进程使用的物理内存的大小,单位为 KB。 |
SHR | 共享内存大小,单位为 KB。计算一个进程实际使用的内存 = 常驻内存(RES)- 共享内存(SHR) |
S | 进程状态。其中S 表示睡眠,R 表示运行 |
%CPU | 该进程占用 CPU 的百分比。 |
%MEM | 该进程占用内存的百分比。 |
TIME+ | 该进程共占用的 CPU 时间。 |
COMMAND | 进程名 |
问题:如果我们发现CPU负载过大,接下来怎么办?
答:查看占用CPU最多的进程
问题:如何查看占用CPU最多的进程?
答:交互操作快捷键P,P(大写):,表示将结果按照CPU 使用率从高到低进行降序排列
问题:如果我们发现内存可用量很小,接下来怎么办?
答:查看占用内存最多的进程,使用交互快捷键M(大写):表示将结果按照内存(MEM)从高到低进行降序排列
问题:当我们查看完系统状态,需要做什么?
答:退出,使用q,按键盘上的q,就会回到#提示符的状态。
5、free查看内存使用情况
基本语法:
# free [选项] 1GB = 1024MB 1MB = 1024KB
选项说明:
-m : 以MB的形式显示内存大小
案例:显示计算机的内存使用情况
# free -m
和Centos6相比,buffer和cached被合成一组,加入了一个available。
关于此available,即系统可用内存,用户不需要去计算buffer/cache,即可以看到还有多少内存可用,更加简单直观
6、df查看磁盘剩余空间
# df [选项]
-h :以较高的可读性显示磁盘剩余空间大小
df = disk free = 磁盘 剩余
这几列依次是:
Filesystem | 磁盘名称 |
---|---|
Size | 总大小 |
Used | 被使用的大小 |
Avail | 剩余大小 |
Use% | 使用百分比 |
Mounted on | 挂载路径(相当于Windows 的磁盘符) |
7、ps查看系统进程信息
top : 动态查看系统进程的信息(每隔3s切换一次)
ps : 静态查看系统进程的信息(只能查询运行ps命令瞬间,系统的进程信息)
基本语法:
# ps [选项]
选项说明:
-e : 等价于“-A”,表示列出全部(all)的进程
-f : 表示full,显示全部的列(显示全字段)
案例:显示当前系统中所有进程的信息
# ps -ef
UID | 该进程执行的用户ID |
---|---|
PID | 进程ID |
PPID | 该进程的父级进程ID,如果找不到,则该进程就被称之为僵尸进程(Parent Process ID) |
C | Cpu的占用率,其形式是百分数 |
STIME | 进程的启动时间 |
TTY | 终端设备,发起该进程的设备识别符号,如果显示“?”则表示该进程并不是由终端设备发起 |
TIME | 进程实际使用CPU的时间 |
CMD | 该进程的名称或者对应的路径 |
经验之谈:我们在实际工作中使用ps命令其实主要用于查询某个进程的PID或PPID
工作场景
小黑用学到的命令,发现某个进程占用CPU很高,希望进一步查看这个简称的信息。
ps -ef 会列出全部进程,但是我们发现进程非常多,我们很难找到自己想要看的进程。这里需要使用过滤命令grep,来过滤掉我们不需要的信息。
基本语法:
用法:ps -ef |grep 想要看到的进程名
示例代码:
# ps -ef |grep crond
含义:查看crond进程的详细情况
注意:查询结果中,如果只有一条则表示没查到对应的进程(这1 条表示刚才ps 指令的自身)。只有查到的结果多余1 条,才表示有对应的进程。
案例:查询crond的进程信息
案例:查询crond的进程信息
# ps -ef |grep crond
root 7102 1 0 Mar23 ? 00:00:04 /usr/sbin/crond -n
root 24752 12881 0 16:34 pts/2 00:00:00 grep --color=auto crond
问题:以上信息只有第一行是crond的进程,第二行,实际是管道命令发起时,grep所启动的进程,如何去掉?
# ps -ef |grep crond |grep -v "grep"
root 7102 1 0 Mar23 ? 00:00:04 /usr/sbin/crond -n
grep -v 需要去除的相关信息 : 去除包含指定关键词的那一行
扩展:ps aux命令
# ps aux
# man ps
1 UNIX options, which may be grouped and must be preceded by a dash. ps -ef
2 BSD options, which may be grouped and must not be used with a dash. ps aux
USER:该 process 属于哪个使用者账号
PID :该 process 的ID
%CPU:该 process 使用掉的 CPU 资源百分比
%MEM:该 process 所占用的物理内存百分比
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该程序目前的状态,主要的状态有
R :该程序目前正在运作,或者是可被运作
S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
T :该程序目前正在侦测或者是停止了
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
START:该 process 被触发启动的时间
TIME :该 process 实际使用 CPU 运作的时间
COMMAND:该程序的实际指令
8、netstat/ss查询网络访问信息
基本语法:
基本语法:
# netstat [选项] |grep 进程名称
选项说明:
-t:表示只列出tcp 协议的连接(tcp协议与udp协议)
-n:表示将地址从字母组合转化成ip 地址,将协议转化成端口号来显示 10.1.1.10:80
-l:表示过滤出"state(状态)"列中其值为LISTEN(监听)的连接
-p:表示显示发起连接的进程pid 和进程名称
案例:查询Web Server(httpd)服务的端口信息
# netstat -tnlp |grep httpd
基本语法:
# ss -naltp |grep 进程名称
案例:查询sshd服务的端口信息
# ss -naltp |grep sshd
netstat与ss区别?① netstat信息比较简洁,ss更加丰富 ② ss执行效率比netstat略高一些
9、kill/killall杀死进程
☆ 根据pid杀掉进程
命令:kill
语法:kill [信号] PID
作用:kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作
经验:kill经常结合ps命令一起使用
kill命令用于杀死某个进程,这其实只是其一个功能。kill命令的实质是向进程发送信号
信号种类:
信号编号 | 含义 |
---|---|
9 | 杀死进程,即强制结束进程。 |
15 | 正常结束进程,是 kill 命令的默认信号。 |
案例:使用kill命令杀死crond进程
# ps -ef |grep crond
7102
# kill 7102
备注:在互联网中,经常看到kill -9 进程PID,强制杀死某个进程,kill -9 pid
☆ 根据进程名称杀掉进程
基本语法:
# killall [信号编号] 进程名称
案例:使用killall命令杀死crond进程
# killall crond
案例:使用killall命令杀死httpd进程
# killall httpd
判断题
rpm强制卸载
rpm -e 文件名 –nodeps
rpm -e vim-enhanced-7.4.629-8.el7_9.x86_64 --nodeps
进程的优先级与LAMP项目部署实战
一、进程的优先级(扩展)
1、什么是进程的优先级
Linux是一个多用户、多任务的操作系统,系统中通常运行着非常多的进程。哪些进程先运行,哪些进程后运行,就由进程优先级来控制
思考:什么时候需要用到进程的优先级呢?
答:当CPU负载过高时,如CPU的使用率>=90%以上。这个时候进程的优先级就会起作用。
2、查看进程的优先级
PR优先级,数值越小优先级越高。
NI 优先级,数值越小优先级越高,可以人为更改。(NI = NICE = Nice)
讲个小故事:Nice值 = 0,Nice值越高,代表这个人越绅士(Nice值越高,优先级越低)
NI值有一个范围 -20 ~ 19
问题:这两个数值是在哪里看到的?
答:top命令
3、调整进程的优先级
☆ 使用top调整进程的优先级
第一步:使用top命令获取你要调整的进程信息(PID编号)
# top -bn 1
PID COMMAND
7107 atd(at命令的底层服务)
第二步:运行top命令,然后按“r”,输入要调整进程的PID编号
# top
按r,输入要调整进程的PID编号,按回车
第三步:根据提示,重置NICE值
Renice PID 7107 to value : -5
第四步:按q退出top模式,然后使用top -p PID编号,只查询某个进程的信息
# top -p 7107
☆ 使用renice命令调整进程的优先级
基本语法:
# renice [NI优先级设置的数字] 想调整的进程ID
案例:使用renice调整atd的优先级
第一步:通过ps或top命令获取atd的PID编号
# ps -ef |grep atd
7107
第二步:使用renice命令调整7107的NICE值
# renice -10 7107
7107 (process ID) old priority 0, new priority -10
注意:NICE值取值范围-20 ~ 19,不能使用小数
☆ 使用nice命令调整进程的优先级
基本语法:
# nice [NI优先级设置的数字] 想调整的进程名称
注意:nice命令只能调整没有运行的程序
nice实际操作三步走:
第一步:将程序停止
# ps -ef |grep crond
# kill PID
或
# systemctl stop crond
第二步:启动并制定优先级(使用nice)
# nice -n -10 crond
nice命令包含两个功能:① 启动进程 ② 调整进程的优先级
第三步:确认优先级(查看优先级)
# ps -ef |grep crond
PID
# top -p PID
二、YUM
1、什么是YUM
在CentOS系统中,软件管理方式通常有三种方式:rpm安装
、yum安装
以及编译安装
。
编译安装,从过程上来讲比较麻烦,包需要用户自行下载,下载的是源码包,需要进行编译操作,编译好了才能进行安装,这个过程对于刚接触Linux的人来说比较麻烦,而且还容易出错。好处在于是源码包,对于有需要自定义模块的用户来说非常方便。(就业班会着重讲解)
难度:编译安装 > rpm安装 > yum安装(有网络 + yum源支持)
Yum(全称为 Yellow dog Updater, Modified
)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。
基于rpm包管理,能够从指定的服务器(yum源)自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
rpm和yum区别?答:① yum底层也是基于rpm进行安装的(yum安装的软件,可以通过rpm -qa进行查询) ② yum相对于rpm最大的优势,可以解决依赖关系。
A => B => C
2、YUM源配置
YUM源配置文件所在路径 => /etc/yum.repos.d文件夹
-rw-r--r--. 1 root root 1991 Mar 28 2017 CentOS-Base.repo 网络yum源配置文件
-rw-r--r--. 1 root root 647 Mar 28 2017 CentOS-Debuginfo.repo 内核相关的更新包
-rw-r--r--. 1 root root 289 Mar 28 2017 CentOS-fasttrack.repo 快速通道
-rw-r--r--. 1 root root 630 Mar 28 2017 CentOS-Media.repo 本地yum源配置文件
-rw-r--r--. 1 root root 7989 Mar 28 2017 CentOS-Vault.repo 最近版本加入老本的YUM配置
扩展:在YUM镜像源中添加阿里云镜像源
第一步:备份CentOS-Base.repo这个源(更改后缀名.repo => .repo.bak)
# mv CentOS-Base.repo CentOS-Base.repo.bak
第二步:使用wget命令下载阿里云的镜像文件
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
选项说明:
-O :指定文件下载的位置以及名称
第三步:清理YUM缓存
# yum clean all
第四步:重新建立缓存(让新YUM源生效)
# yum makecache
3、yum命令详解
☆ 搜索要安装的软件
# yum search 软件名称的关键词
案例:搜索阿里云仓库中的vim软件
# yum search vim
案例:搜索firefox火狐浏览器
# yum search firefox
☆ 使用yum安装软件
基本语法:
# yum install 软件名称关键词 [选项]
选项:
-y :yes缩写,确认安装,不提示。
案例:使用yum命令安装vim编辑器
# yum install vim -y
案例:使用yum命令安装firefox浏览器
# yum install firefox -y
☆ 使用yum卸载软件
# yum remove 软件名称关键词 [选项]
选项:
-y :yes缩写,确认卸载,不提示。
案例:把firefox火狐浏览器进行卸载操作
# yum remove firefox -y
案例:把httpd软件进行强制卸载
# yum remove httpd -y
☆ 使用yum更新软件
基本语法:
# yum update 软件名称关键词 [选项]
选项:
-y :yes缩写,确认更新,不提示
案例:把vim编辑器进行更新操作
# yum update vim -y
案例:把firefox火狐浏览器进行更新操作
# yum update firefox -y
三、LAMP概述
1、什么是LAMP
1、什么是LAMP
LAMP:Linux + Apache + MySQL + PHP LAMP 架构(组合)
LNMP:Linux + Nginx + MySQL + php-fpm LNMP 架构(组合)
LNMPA:Linux + Nginx(80) + MySQL + PHP + Apache Nginx 代理方式
Apache:Apache是世界使用排名第一的Web服务器软件。
PHP:一种专门用于Web开发的编程语言。
MySQL:MySQL是一个关系型数据库管理系统,主要用于永久存储项目数据。
2、AMP三者之间的关系
Apache:用于接收用户的请求(输入网址,返回网页=>结果)
PHP:注册、登录、加入购物车、下单、支付等动态功能(有编程语言的支持)
MySQL:永久保存数据,比如你在网站上注册的用户和密码、你加入购物车的产品、你的产品订单
LAMP = Linux + APache + PHP + MySQL
四、阿里云详解
要想部署一个互联网上可以访问到的环境,必须先具备以下内容 :
服务器(IP、帐号密码、终端)、相应的软件、域名(备案、解析)、代码等。
代码:前端工程师 + 后端工程师进行开发提供的!
1、注册阿里云账号
阿里云官网:https://www.aliyun.com/
特别说明:云服务器的厂商特别多,你可以进行任意选择 => 阿里云、百度云、腾讯云、华为云…
注册时建议使用支付宝,方便快捷。最重要:付款方便
2、实名认证(上传身份证照片)
第一步:单击账号下方的实名认证(选择个人认证)
第二步:选择支付宝授权认证(及时开通,无需等待)
第三步:勾选同意,点击提交
第四步:使用手机支付宝扫描二维码,进行授权
第五步:填写相关信息(住址)
填写完毕,即可完成认证。
3、购买阿里云的ECS云服务器
第一步:回到阿里云首页,找到弹性计算 => ECS云服务器
第二步:单击立即购买,购买ECS服务器(选区域、选配置)
第三步:选择付费模式、选择CPU与内存的配置
第四步:选择镜像(CentOS7.6)与云盘(硬盘)
第四步:设置网络、公网IP以及安全组(重要)
用户 => 阿里云安全组 => firewalld防火墙 => Linux服务器
第五步:设置root账号密码(一定要选择自定义密码)
8 – 30 个字符,必须同时包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号),其中 Windows 实例不能以斜线号(/)为首字符
第六步:设置释放时间 => 什么时候删除这台服务器(不收钱)
特别说明:只有个人购买的ECS服务器可以设置释放时间,生产环境一定不要设置释放时间,否则后果自负!!!
第七步:进入管理控制台,找到我们刚才购买的ECS服务器,如下图所示:
使用MX软件,直接连接公网IP + root账号 + 自定义的密码即可连接
4、使用MX连接ECS服务器
5、使用yum安装sl小工具
安装过程:
# yum install sl -y
使用sl命令:
# sl
LAMP项目部署实战
一、LAMP环境部署
1、回顾LAMP
LAMP = Linux + Apache + MySQL + PHP
Apache:主要用于接收用户的请求,处理业务逻辑,返回结果给客户端(浏览器)
PHP:编程语言的一种,主要应用于Web开发。主要实现注册、登录、加入购物车、下单、支付等功能
MySQL:数据库,删库到跑路,这里的”库”就是指数据库。永久保存数据
2、LAMP部署前期准备
☆ 关闭防火墙
# systemctl stop firewalld
# systemctl disable firewalld
☆ 关闭SELinux
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。
获取SELinux的状态:
# getenforce
临时关闭SElinux:重启后SELinux还会自动启动
# setenforce 0
永久关闭SELinux:编辑SELinux的配置文件
# vim /etc/selinux/config
SELINUX=disabled
☆ 检查系统中是否已安装Apache
# rpm -qa |grep httpd
# rpm -e httpd-2.4.6-90.el7.centos.x86_64
# rpm -e httpd-tools-2.4.6-90.el7.centos.x86_64
☆ 检查系统中是否已安装MySQL
# rpm -qa |grep mysql
☆ 检查系统中是否已安装PHP
# rpm -qa |grep php
AMP安装指南:在Linux中安装AMP必须先安装Apache,在安装MySQL,最后安装PHP
3、LAMP环境之Apache安装
Apache:阿帕奇,Apache基金会
httpd软件 => 前身apache,随着时间的推移以及互联网行业的发展,越来越多的软件加入到了Apache的基金会。
第一步:安装httpd软件
# yum install httpd -y
第二步:配置/etc/httpd/conf/httpd.conf文件
# vim /etc/httpd/conf/httpd.conf
/ServerName => 搜索
96 ServerName localhost:80
localhost : 代表本机,对应的IP地址可以使127.0.0.1或本机的公网IP
第三步:启动httpd服务
# systemctl start httpd
第四步:把httpd服务添加到开机启动项中
# systemctl enable httpd
第五步:使用ss或netstat命令查询httpd占用的端口
# netstat -tnlp |grep httpd
或
# ss -naltp |grep httpd
第六步:在浏览器中,使用公网IP访问阿里云服务器
4、LAMP环境之MySQL安装
☆ 下载MySQL的官网yum源
由于yum源上默认没有mysql-server。所以必须去官网下载后在安装
# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
☆ 安装MySQL的官网镜像源
# rpm -ivh mysql-community-release-el7-5.noarch.rpm
☆ 使用yum安装mysql最新版软件
# yum install mysql-community-server -y
MySQL软件是一个C/S架构的软件,拥有客户端与服务器端。mysql-server服务器端(内部也包含了客户端),community代表社区版(免费开源)
☆ 启动mysql,查看端口占用情况
# systemctl start mysqld
# netstat -tnlp |grep mysqld
☆ MySQL数据库初始化(重要)
默认情况下,数据库没有密码,也没有任何数据,必须要初始化
① 初始化数据,设置root密码(MySQL管理员)
# mysql_secure_installation
扩展:以上说的root和Linux中的root不是同一个用户,这个root代表MySQL数据库的管理员,只不过这个管理员也叫root。
学习环境下,密码越简单越好。生产环境下越复杂越好。
② 把mysqld服务添加到开机启动项
# systemctl enable mysqld
默认已经开机启动,这里可以跳过
③ 连接MySQL数据库,测试
# mysql -u root -p 回车
Enter password:输入刚才设置的密码,如123,回车
mysql> show databases; => 代表显示所有数据库
mysql> exit
5、LAMP环境之PHP安装
☆ 使用yum命令安装php软件
# yum install php -y
☆ 使用systemctl启动php软件(重启Apache)
# systemctl restart httpd
为什么启动php就是重启Apache呢?答:因为LAMP架构中,PHP是以模块的形式追加到Apache的内核中,所以启动php就相当于重置Apache软件
☆ 测试LAMP环境是否可以使用
第一步:使用cd命令进入/var/www/html目录
# cd /var/www/html
Apache的项目目录 => /var/www/html,以后程序员开发的代码都是放置于此目录
第二步:使用vim命令创建demo.php文件
# vim demo.php
第三步:编写php代码
<?php
echo 'hello world';
?>
编写完成后,保存退出,然后在浏览器中使用http://公网IP/demo.php
二、部署Discuz!论坛
1、Discuz!论坛概述
Discuz!论坛是基于PHP + MySQL进行开发的一套开源的论坛系统。
2、下载源代码
下载地址:https://gitee.com/ComsenzDiscuz/DiscuzX (码云)
3、使用MX软件把Discuz源代码上传
阿里云:
本地Linux类似
4、安装unzip解压缩软件
# yum install unzip -y
5、使用unzip对discuz.zip压缩包进行解压
# unzip discuz.zip
6、复制discuz中的文件到/var/www/html目录
# mv discuz/* /var/www/html/
或
# cp -vRp disczu/* /var/www/html/
7、打开浏览器,输入公网IP地址
8、单击同意许可,继续安装
9、给/var/www/html目录设置可写权限
# chmod -R a+w /var/www/html
注意:以上操作是给所有文件添加一个w权限,但是生产环境尽量针对指定文件添加权限。
10、解决PHP扩展问题
以上提示代表,安装PHP时没有按照php-mysqli扩展,所以会出现以上问题。
# yum install php-mysqli -y
# systemctl restart httpd
11、设置运行环境
12、设置MySQL数据库的相关信息
13、设置管理员账号和密码
14、安装完成后,访问论坛首页
部署后,访问论坛首页,如下图所示:
三、域名与解析
1、为什么需要域名
我们现在访问论坛是通过IP地址实现的,但是IP地址比较复杂,更重要的是不方便用户记忆。
域名 => 代替公网IP地址
2、购买域名
登录控制台,然后选择域名菜单:
找到域名注册菜单:
找到想要注册的域名,然后加入清单,然后进行立即结算:
购买完成后,进入域名控制台:
3、把域名解析到公网IP
进入解析菜单,然后添加记录:
① 把www.itcast.top解析到公网IP
② 把itcast.top解析到公网IP
以上记录添加完成后,等待10分钟左右,即可使用域名访问论坛项目了!
4、域名备案
如果在国内运行项目,我们使用的域名必须要进行备案操作。
备案就是向工信部提交网站运行的相关资料,比如域名的证书、持有者的身份证号码,以及真人手持身份证照片(背景图)
由于现在监管比较严格,提交资料后,大概5-7个工作日进行审核,完全备案完成大概2周左右。
如果不想进行域名备案,可以购买中国香港、中国台湾以及国外的服务器,可以免备案。但是其运行速度略慢