linux学习笔记

710 阅读51分钟

一.终端组成部分

root:该位置表示当前终端登入的用户名

@:表示“在”

localhost:表示当前登入的主机名

桌面:当前终端的工作目录

#:表示身份识别符号,如果用超级管理员用户登入则显示#,否则显示$s

二.vm备份的两种方式快照和克隆

1.快照:又称还原点,就是保存在拍快照时候的系统的状态(包含了所有的内容),在后期的 时候随时可以恢复。【侧重在于短期备份,需要频繁备份的时候可以使用快照,做快照的时 侯虚拟机操作系统一般处于开启状态】

(1).路径:在菜单"虚拟机"-“快照”-“拍摄快照”

2.克隆:就是复制的意思。【侧重长期备份,做克隆的时候必须得关闭】

(1).路径:先关机-右键需要克隆的虚拟机-管理-克隆(克隆类型:选择完整克隆)

三.linux系统文件

1.文件和文件夹(目录) linux一切皆文件,日常工作中,一般创建文件.编辑文件.保存文件.关闭文件.重命名文件.删除文件.恢复文件

2.linux文件目录

bin:全称binary,含义是二进制。该目录中存储的都是些二进制文件,文件都是可以被运行的, 里面放的都是一些可执行程序

dev:该目录中主要放的是外接设备,例如盘,其他光盘等。在其中的外接设备是不能直接被使用的, 需要挂载(类似windows下的分配盘符)

mnt:当外接设备需要挂载的时候,就需要挂载到mnt目录下

etc:该目录主要存储一些配置文件(所有配置信息)

home:表示"家",表示除了root用户以外其他用户的家目录,类型于windows下的C:/User/用户目录。

proc:全称process,表示进程,该目录中存储的是linux运行时候的进程

root:该目录表示的是root用户自己的家目录

sbin:全称super binary,该目录也是存储一些可以被执行的二进制文件,但是必须有super权限的 的用户才能执行(只有超级管理员才能执行)

tmp:表示"临时"的,当系统运行时候产生的临时文件会在这个目录存着。

usr:存放的是用户自己安装的软件。类型于windows下的 program files

var:存放的是程序系统日志文件的目录

四.linux的基本指令

1.概念:指在linux终端(命令行)中输入的内容就称之为指令

2.基础命令

(1).ls指令

用法1:#ls

含义:列出当前工作目录下的所有文件/文件夹的名称

注意:ls 列出的结果颜色说明,蓝色的表示文件夹,白色的表示文件

用法2:#ls 路径

含义:列出指定文件夹下的所有文件/文件夹名称

路径:路径分为两种绝对路径和相对路径

相对路径:相对路径首先需要一个参照物(一般指当前工作路径)

绝对路径:绝对路径不需要参照物,直接从根目录"/"开始寻找对应路径

相对路径的写法:在相对路径中通常用到2个符号:"./" "../"

用法3:#ls 选项 路径

含义列出指定路径下的文件/文件夹名称,并以指定的格式来显示

常见的语法:

#ls -l 路径:表示以详细列表的形式进行展示

#ls -a 路径:表示显示所有文件/文件夹(包括隐藏文件和文件夹)

上述列中第一列字符表示文档的类型,"-"表示文档类型为文件,"d"表示文档类型为文件夹

上面表示文档所属的用户和用户组

上面这个表示文档的大小,单位是字节

上面这个表示月份.日期.时间

上面表示文档,其中以"."开头的文档表示隐藏文档

用法4:ls -lh 路径

含义:列出指定路径下所有的文件/文件夹,以列表的形式并且在显示文档大小的时候以可读性 较高的形式显示

(2).pwd

用法:#pwd (print working directory,打印当前工作目录)

(3).cd 用法:#cd 路径 (change directory,改变目录)

补充:linux有个特殊的符号"~",表示我们当前用户的家目录

切换方式:cd ~

(4).mkdir

用法:mkdir (make directory,创建目录)

语法1:mkdir 路径(创建单个目录/文件夹)

语法2:mkdir -p 路径(创建多层目录/文件夹)

语法3:mkdir 路径1 路径2 路径3...(一次性创建多个目录/文件夹)

(5).touch

用法:touch (创建文件)

语法1:#touch 文件路径(不能带-p不能创建多层)

语法2:#touch 文件路径1 文件路径2 文件路径3(创建多个文件)

(6).cp

用法:cp (copy,复制文件和文件夹)

语法1:#cp 被复制的文档路径 文档被复制到的路径

语法2:#cp -r 被复制的文档路径 文档被复制到的路径(复制文件夹)

注意:

1.linux在复制的时候可以对新文件进行重命名的,如果不是特别需要,尽量该名字

2.当使用cp命令对文件夹进行复制操作的时候需要添加选项"-r"【表示递归复制】,否则文件夹将会忽略

(7).mv

用法:mv (move,移动->相当于windows剪切,移动文档到新的位置)

语法1:#mv 被移动的文档路径文档被移动到的路径(移动文件夹的时候不需要加"-r")

注意:

1.linux在移动的时候可以对新文件进行重命名的,如果不是特别需要,尽量该名字

2.在linux中重命名的语法也是mv和移动的语法一样

(8).rm

用法:#rm(remove,删除文档)

语法1:#rm 路径 (普通删除,需要二次确定)

语法2:#rm -r 路径 (递归删除,需要二次确认)

语法3:#rm -f 路径 (强制删除,不需要二次确认)

语法4:#rm -rf 路径 (强制递归删除,不需要二次确认)

语法5:#rm -rf 路径* (强制递归删除共性的文件或者文件夹)

注意:

1.删除一个目录的时候需要递归删除,并且一般不需要二次确认,所以在删除 目录的时候用 #rm -rf

2.可以同时删除同个文档

(9).vim

用法:#vim (vim是一个文本编辑器,作用打开文件)

语法1:#vim 文件路径 (打开文件,这个文件可以有,也可以没有)

(10).输出重定向

一般命令的输出都会显示在终端,有些时候需要将一些命令的执行结果保存到文件中 进行后续的分析以及统计,则这个时候需要用到输出重定向技术

1.>:覆盖输出 会覆盖掉原先的文件内容

2.>>:追加输出 不会覆盖原始内容,会在原始内容的末尾继续输出

语法:#正常执行的指令 >/>> 文件路径

注意:文件路径可以不存在,如果不存在默认会创建

(11).cat

用法:#cat (直接打开一个文件)

语法1:#cat 文件路径 (打开单个文件)

语法2:#cat 待合并文件路径1 待合并文件路径2....待文件路径n > 文件文件路径(表示对文件进行合并成一个新文件)

3.进阶指令(重点)

(1).df

用法:#df (查看磁盘空间)

语法1:#df 查看磁盘的属性

语法2:#df -h 查看磁盘的详细属性

Size:大写

Userd:被使用的

Avail:可用的

User%:已使用的百分比

Mouted on:挂载点

(2).free

用法:#free (查看内存的使用使用情况)

语法1:#free (普通查看)

语法2:#free -m (查看内存的使用情况,以mb为单位查看)

剩余的真实可用的内存为1665,单位是mb

Swap:用于临时内存,当我们系统内存不够用的时候,可以临时使用磁盘空间来充当内存

(3).head

用法:#head (查看一个文件的前n行,如果不指定n,默认显示10行)

语法1:#head -n 文件路径

语法2:# head -n 文件路径 >/>> 文件文件路径(表示对文件进行合并成一个新文件)

(4).tail

用法:#tail (查看一个文件的后n行,如果不指定n,默认显示后10行)

语法1:#tail -n 文件路径 (查看一个文件的后n行)

语法2:#tail -n 文件路径 >/>> 文件文件路径(表示对文件进行合并成一个新文件)

语法3:#tail -f 文件路径 (动态显示文件的实时变化,变化的内容不能是我们自己手动增加的,该命令一般用来查看日志)

(5).less

用法:#less (查看文件以较少的内容进行输出,按下辅助功能键可以查看更多:数字+回车,回车,空格,上下键盘)

语法:#less 需要查看的文件路径

退出命令:q

(6).wc

用法:#wc (用来统计文件的内容信息,包括行数 单词数 字节数)

语法:#wc -lwc 需要统计的文件路径

-l:表示lines 行数

-w:表示 words 单词数 (依照空格来统计单词的个数)

-c:表示bytes 字节数

(7).date

用法:#date (表示操作时间.日期,读取和设置)

语法1:#date (表示显示当前时间,不常用)

这里的CST指的是当地时间

语法2:#date +%F (表示显示当前时间年月日,常用格式)

等价于:#date +%Y-%m-%d

语法3:#date "+%F %T" (引号表示让"年月日时分秒"成为一个不可分割的整体,表示显示当前时间年月日时分秒)

等价于:#date "+%Y-%m-%d %H:%M:%S"

语法4:#date -d "-1 day" "+%Y-%m-%d %H:%M:%S"

-d:表示获取之前的或者之后的某个参数

(8).cal

用法:#cal (用来操作日历)

语法1:#cal 等价于 #cal -s,等价于 #cal -1 (直接输出当前月份的日历)

语法2:#cal -3 (表示输出当前于上一个月,当前月,下个月,三个月的日历)

语法3:#cal -y 2020 (表示输出2020年全年的日历)

(9).clear

用法:#clear 或者快捷键 ctrl+l (清除终端已经存在的命令或结果)

(10).|

用法:#ls /|grep y (管道符辅助指令,当前这个指令意思过滤带y字母的文件或者目录)

4.高阶指令

(1).hostname

用法:#hostname (用来操作服务器的主机明 读取或者设置)

语法1:#hostname (表示输出完整的主机名)

语法2:#hostname -f (表示输出当前主机名的FQDN->权限定域名)

(2).id

用法:#id (查看一个用户的基本信息,包含用户id,用户组id,附加组id->如果不知道用户默认显示当前用户信息)

语法1:#id (默认显示当前执行该命令用户的基本信息)

语法2:#id 用户名 (指定用户的基本信息)

(3).whoami

用法:#whoami (显示当前的用户名,一般用户shell脚本,用于获取当前的操作的用户名方便于记录日志)

(4).ps -ef

用法:#ps -ef (用于查看服务器的进程信息)

-e 等价于 "-A"(显示全部的进程,相当于行)

-f (显示全字段,相当于列)

UID:该进程执行的用户id

PID:进程id

PPID:该进程的父级进程id,如果一个程序的父级进程找不到,该程序的进程称之为僵尸进程

C:cpu的占用率,其形式为百分数

STIME:该进程的一个启动时间

TTY:终端设备,发起该进程的设备识别符号,如果显示的是?表示该进程并不是由终端发起

TIME:表示进程的执行时间

CMD:这个进程的名称或者对应的一个路径

案例:100%使用的案例,在ps结果中过滤出某个进程(#ps -ef | grep XXX)

(5).top

用法:#top (查看服务器的进程占用资源)

语法:#top (动态显示)

退出命令:q

排序:M (按照内存排序),P(按照CPU的使用率从高到底排序),1(当你的linux有多个CPU的时候可以使用1快捷键来展开显示各个CPU的详细信息)

(6).du -sh

用法:#du -sh (查看目录的真实大小)

语法:#du -sh 目录路径

-s, summaries(只显示汇总的大小)

-h (表示以较高可读性的形式显示)

(7).find

用法:#find (用于查找文件,其参数有55个)

语法:#find 路径范围 选项 选项的值

-nama:按照文档名称进行搜索(支持模糊查询)

-type:按照文档类型进行搜索(文档类型:"-"表示文件(在使用的时候需要用"f"来代替"-"),"d"表示文件夹)

(8).service

用法#service (用于控制一些软件的服务启动/停止/重启)

语法:#service 服务名 start/stop/restart

(9).kill

用法:#kill (表示杀死进程,当遇到僵尸进程或出于某些原因需要关闭进程的时候)

语法1:#kill 进程PID (语法需要配合ps一起使用)

语法2:#killall 服务名 (根据服务名称杀死进程)

(10).ifconfig

用法:#ifconfig (用于操作网卡的相关命令)

语法1:#ifconfig (获取网卡信息)

(11).reboot

用法:#reboot (重新启动)

语法1:#reboot (重启)

语法2:#reboot -w (模拟重启,只写入关机和开机的日志,但是不重启,主要用来测试)

(12).shutdown

用法:#shutdown (关闭计算机,慎用)

语法1:#shutdown -h now "关机提示" (立刻关机)

语法2:#shutdown -h 12:00 "关机提示"(定时关机)

如果想取消关机计划的话,则可以按照下面方式操作

①.针对于centos7.0版本之前

ctrl+c

②.centos7.0版本之后

shutdown -c

除了shutdown关机以外还有以下几个关机命令

#init0

#halt

#poweroff

(13).uptime

用法:#uptime (输出计算机的持续在线时间,计算机从开机到现在运行的时间)

语法:#uptime

标红的表示已经运行的时间

(14).uname

用法:#uname (获取计算机操作系统相关的信息)

语法1:#uname (获取操作系统的类型)

语法2:uname -a (all表示获取全部的系统信息,类型,全部的主机名,内核版本,发布时间,开源计划)

(15).netStat -tnpl

用法:#netstat -tnlp (查看网络链接状态)

语法:#netstat -tnlp

-t:表示只列出tcp协议的协议的链接

-n:将地址从字母组合转化成ip地址,将协议转化成端口号显示输出

-l:表示过滤出"state(状态)",列中其值为LISTEN(监听)的链接

-p:表示显示发起链接的进程pid和进程名称

(16).man

用法:#man (手册,包含了linux中全部命令的手册,英文的)

语法:#man 命令 (按下q键可以退出手册)

五.vim编辑器

1.vim的三种模式

概念:vim中存在三种模式(大众熟知的) 命令模式 编辑模式 末行模式

命令模式:在该模式下不能对文件进行直接编辑,可以输入快捷键进行一些操作 (删除行,复制行,粘贴等等);【打开文件默认进入的模式】

编辑模式:在模式下可以对文件的内容进行编辑;

末行模式:可以在末行输入命令来对文件进行编辑操作(搜索.替换.保存.退出.撤销.高亮等等);

2.vim的打开方式(4种)

(1).vim 文件路径 (打开指定的文件)

(2).vim +数字 文件的路径 (打开指定的文件,并把光标移动到指定行)

(3).vim +/关键词 文件路径 (打开指定的文件,并高亮显示关键词)

(4).vim 文件路径1 文件路径2... (打开多个指定的文件)

3.命令模式

注意:该模式是打开文件默认第一个看到的模式(打开文件即可进入)

(1).光标移动

光标移动到行首->按键:shift+^

光标移动到行尾->按键:shift+$

光标移动到首行->按键:gg

光标移动到尾行->按键:G

向上翻屏->按键:ctrl+b

向下翻屏->按键:ctrl+f

(2).复制操作

①.复制光标所在行

按键:yy

②.以光标所在行为准向下复制指定行数(包含当前行)

按键:数字yy

③.可视化复制

按键:ctrl+v,然后按 ↑ ↓ ← → 方向键来选中需要复制的区块,按yy进行复制

(3).剪切/删除

①.剪切或删除光标所在行

按键:dd (剪切或删除后,下一行往上移动)

注意:dd严格意义上来说是剪切命令,但如果剪切了不粘贴就是删除命令

②.剪切或删除光标所在行为准(包括当前行),向下删除或剪切指定的行

按键:数字dd (删除以后,下一行上移)

③.剪切或删除光标所在的当前行(删除以后光标不上移)

按键:D

(4).粘贴:在想要粘贴的地方按p键

(5).撤销/恢复

末行模式下撤销:":u"

恢复:ctrl+r (恢复/取消之前的撤销操作)

(6).扩展(光标的快速移动)

①.快速将光标移动到指定的位置

   按键:数字G
  
②.以当前光标为准向上或向下移动指定的行数

  按键:数字↑,数字↓
  
③. 以当前光标为准,向左向右移动多少个字符

  按键:数字←,数字→
  
④.末行模式下快速移动的方式

  按键:":数字"

4.模式之间的切换

5.末行模式

进入方式:由命令模式进入,按":"或者"/"(表示查找)即可进入

退出方式:①.按一下esc ②.按两下esc ③.删除末行去不得字符

(1).保存操作(write):

输入":w"         保存文件

输入:":w 路径"    另存文件

(2).退出操作(quit):

输入:":q"         退出文件

(3).保存并退出:

输入:":wq"        保存并退出文件

(4).强制(!):

输入:":q!"        强制退出,刚才修改的不保存

(5).调用外部命令:

输入:"! 外部命令"

(6).搜索/查询

输入:"/关键词"

在搜索结果中切换"上/下"结果"N/n"

(7).取消高亮

输入:":nohl"

(8).替换

输入:":s/搜索的关键词/替换后的关键词"   (替换光标所在行的第一个关键词)

输入:":s/搜索的关键词/替换后的关键词/g" (替换光标所在行的所有关键词)

输入:"%s/搜索的关键词/替换后的关键词"   (替换所有行的第一个关键词)

输入:"%s/搜索的关键词/替换后的关键词/g" (替换所有行的所有个关键词)

%:表示整个文件

g:表示全局(global)

(9).显示行号(临时操作)

输入:":set nu" (number)

如果向取消显示行号->输入:":set nonu"

(10).使用vim打开多个文件,在末行模式下进行切换

①.查看当前已经打开的文件名称":files"

②. %a的位置有两种显示的可能

%a:a=active,表示当前正在打开的文件

#:表示上一个打开的文件

③. 指定切换文件的名称,则输入":open 文件名"

④.可以通过其他命令来切换上一个文件/下一个文件

输入:":bn"切换到下一个文件(back next)

输入:":bp"切换到上一个文件(back prev)

6.编辑模式

7.实用功能

(1).代码着色

案例:首先创建一个c语言程序

如何控制着色显示与否? (临时操作)

显示:":syntax on"

关闭显示:":syntax off"

(2).vim中计算器的使用

当我们在编辑文件的时候突然需要用到计算器去算一些公示,则此时就需要用到计算器了, 但是需要退出,vim给我们集成了一个计算器

a.进入编辑模式

b.按下按键:"ctrl+R",然后输入"=",此时光标会变到最后一行

c.输入需要计算的内容按下回车

六.linux自有服务

1.概念:自有服务,即不需要用户去按照软件,而是系统安装好后可以直接使用的服务(内置)

2.运行模式

运行模式也可以被称为运行级别

在linux中存在一个进程init (initialize,初始化,进程id是1)

查看进程:ps -ef | grep init

该进程存在对应的配置文件:inittab(系统的运行级别配置文件,位置:/etc/inittab)

文件主要内容:

根据上述描述可以得知,cenos6.5中存在这7种运行级别模式

0-表示关机级别 (不要将默认的运行级别设置成这个值)

1-单用户模式

2-多用户模式,不带NFS(Network file Syetem)

3-多用户模式,完全的多用户模式(不带桌面的纯命令行模式)

4-没有被使用的模式(被保留模式)

5-X11,完全图形化界面模式

6-表示重启级别(不要将默认运行级别这只成这个值)

与该级别相关的命令:

#init 0  表示关机

#init 3 表示切换到不带桌面的模式,也就是多用户模式

#init 5 表示切换到图形界面模式

#init 6 重启电脑

注意:init 指令需要超级管理员权限,普通用户无法执行


这些命令都是调用的init进程,将数字(运行级别)传递给进程,进程去读这个配置文件,执行对应的操作

a.切换到纯命令行模式(临时切换重启之后又恢复)

#init 3

b.回到桌面模式

#init 5

c.设置永久模式

将/etc/inittab文件中的initdefault的值设置成3,然后重启操作系统

3.用户与用户组

(1).概念

注意三个文件

/etc/passwd     存储用户的关键信息

/etc/group      存储用户组的关键信息

/etc/shadow     存储用户密码的信息

(2).用户管理

添加用户:

常用语法:#useradd 选项 用户名
常用选项:
-g:表示指定用户主组,选项的值可是是用户组的id,也可以是组名
-G:表示指定用户的附加组,选项的值可是是用户组的id,也可以是组名
-u:uid,用户的id(用户的标识符),系统默认会从500之后按顺序分配uid,如果不想继    
续使用系统默认分配的,可以通过选项自定义
-c:(comment)添加注释的

案例:创建用户zhangsan 不带任何选项

验证是否成功:
  a.验证/etc/passwd的最后一行查看是否有zhangsan的信息
  b.验证是否在家目录(在centos下创建好一个用户后随之产生一个同名的家目录)

注意:在不添加任何选项,执行useradd之后会做一系列的操作

a.创建同名的家目录
b.创建id同名的用户组

案列:添加选项,创建用户lisi,让李四属于主组:501,附加组:500,自选id:666

修改用户:

常用语法:#usermod 选项 用户名
常用选项:
-g:表示指定用户主组,选项的值可是是用户组的id,也可以是组名
-G:表示指定用户的附加组,选项的值可是是用户组的id,也可以是组名
-u:uid,用户的id(用户的标识符),系统默认会从500之后按顺序分配uid,如果不想继    
续使用系统默认分配的,可以通过选项自定义
-l:修改用户名

1.修改用户主组和附加组
   案例:修改张三 主组501改成500,附加组改成501(不能写0)

主组:

附加组:

2.修改用户名
  修改命令:
  语法: usermod -l 新的用户名 旧的用户名

修改后主组信息:

修改后附加组信息:

设置密码

linux是不允许没有用户密码的用户登入系统,因此前面创建的用户目前都处于锁定状态,需要设置密码后才能登入系统

常用语码:#passwd

案例:设置wangerma的用户密码

在设置密码的时候也没有任何提示,放心输入的密码一致按下回车即可

也可以设置弱密码,但不建议

用户密码的位置:设置密码之后shadow文件中的体现,能够看出李四用户没有密码

在设置完密码之后可以登入账号,类如此处需要登入wangerma

切换用户注意点:
   a.从root用户切换到普通用户不需要密码,反之需要
   b.切换用户之后前后的用户名不变
   c.普通用户没有办法访问root家目录,但是反之则可以

删除用户

常用语法:#userdel 选项 用户名
userdel:user delete(用户删除)

常用选项:
 -r:表示删除用户的同时,删除家目录
 
案例:删除一个用户

如果当前用户正在登入,需要先杀掉进程然后才能删除

提示

所有跟用户操作的命令除了passwd命令外,只有root管理员有权限执行

(3).用户组管理

文件结构:

用户组名:密码:用户组id:组内用户名
密码:x表示占位符,虽然用户组可以设置密码,但是绝大多数情况不设置密码
组内用户名:表示附加组是该组的用户名称

a.用户组的添加

常用语法:#groupadd 选项 用户组名

常用选项:
      -g:类似于用户添加里的"-u","-g"表示自己设置一个自定义的用户组id数字,
      如果自己不指定默认500之后梯增

b.用户组编辑

常用语法:groupmod 选项 用户组名

常用选项:

-g:类似于用户修改的"-u","-g"表示选择自己设置的一个自定义的用户组id数字
-n:类似于用户组的"-l",表示设置新的用户组的名称

c.用户组删除

常用的语法:#groupdel 用户组名

4.网络设置

首先要知道网卡的配置文件位置:etc/sysconfig/network-scripts

在目录中网卡配置文件的命名格式:ifcfg-网卡名称

ONBOOT: 是否开机启动

BOOTPROTO:ip地址分配方式,DHCP 表示动态主机你分配协议

HWADDR:硬件地址 mac地址

如果后续需要重启重启命令需要怎么操作呢?

#service network restart

在有的分支版本可能没有 service命令来快速操作服务,但是有个共性的目录 就是:/etc/int.d ,这个目录放着一些服务的快捷方式.

#/etc/init.d/network restart

扩展:如果修改网卡的配置文件,但是配置文件目录层次很深,此时可以在浅的目录文件

创建一个快捷方式(软连接),方便以后去查找

#ln -s(-s表示创建软连接) 原始文件路径 快捷方式的路径

通过ls -l可以列出如下的效果:

其中,文件类型位置的"l"表示其类型为link(链接类型),后面的箭头"->",指向的是原始文件的位置

扩展2:如何去除单个网卡?

停止某个网卡:#ifdown 网卡名

开启某个网卡:#ifup 网卡名

提示:在工作的时候不要随意去禁网卡

5.ssh服务(重点)

ssh(secure shell,安全外壳协议),该协议有两个常用的作用,远程链接协议,远程文件传输协议

协议使用端口号:默认是22

可以被修改的,如果修改,则需要修改ssh配置文件服务的配置文件

配置文件位置:etc/ssh/ssh_config

端口号可以修改但是要注意两个事项:

a.注意范围:端口的范围是从0-65535

b.不能使用别的服务已经占用的端口号

服务的启动/关闭/重启

#service sshd start/stop/restart

#/etc/init.d/sshd start/stop/restart

1.常见的终端工具

终端工具用来帮助运维人员链接服务器,主要的终端工具有:xshell,secureCRT,putty等。以putty为列:

<1>.获取服务器的ip地址,可以通过ifconfig命令进行查看,然后顺手测试ip的链接相通性

<2>.打开putty输入相关的信息

<3>.在弹出key的时候点击"是",以后不会在提示

<4>.输入登入信息

2.ssh服务文件传输

可视化界面传输工具:Filezilla

安装好之后可以查看到桌面图标

<1>.选择"文件"-"站点管理器(ctrl+s)"

<2>.链接好之后的效果:

<3>.从windows上传文件到linux上方式

支持直接拖拽文件,也可以右键本地需要上传的文件点击上传,然后点击"上传"即可

<4>.从linux上下载文件到windows同上反之即可

扩展:通过命令行工具来来传输文件和文件夹

工具:PSCP.exe(必须通过cmd命令行打开),为了使用方便可以将其放入环境变量中去

如果不清楚哪些路径是环境变量路径,只需要将其放到C:/windows目录下即可,因为

C:/windows目录就是环境变量目录(系统自带的不需要我们配置)

用法:

1.pscp 选项 用户名@linux主机地址:资源路径 windows本地地址  (从服务器下载东西)

2.pscp 选项 资源路径 用户名@linux主机地址:远程的路径 (本地上传到服务器)

3.pscp 选项 -ls   用户名@linux主机地址  (列出远程路径下的结构)

案列:

1.下载到本地的windows,要求将远程的linux服务器下的/etc整个目录下载到本地的E:/tmp目录

#pscp -r root@192.168.21.128:/etc E:/tmp

在cmd输入之后

2.上传文件到linux,将"E:\coursedocs\运维学科\北京运维01期\01-基础班\20180329_Linux自有服务"
所有的内容传输到linux下root用户的家目录

#pscp -r "E:\coursedocs\运维学科\北京运维01期\01-基础班\20180329_Linux自有服务" root@192.168.21.128:/root

6.设置主机名

1.临时设置主机名(立竿见影),但是需要切换一下用户使之生效

#hostname 需要设置的主机名

2.永久设置主机名,需要重启

先找到一个文件

<1>./etc/sysconfig/network 【主机名的配置文件】

<2>.修改其中的HOSTNAME为自己需要设置的永久主机名

<3>.修改我们的linux文件的hosts文件,将运维指向本地(设置FQDN)

hosts文件的位置:etc/hosts

<4>.不设置FQDN会怎么样

很多开源服务器无法使用(类如Apache),则无法启动,或者出现报错

方便记忆,看到主机名对其作用就有了个大概的判断

如果不设置怎会影响本地的域名解析(本地访问)

7.chkconfig

作用:相当于windows下的 "安全卫士","电脑管家" 之类的安全辅助工具,提供"开机启动项"的一个管理服务

在linux下不是所有的软件安装完成之后都需要开机启动服务,有的可能需要自己添加 除此之外还可以查看和删除

<1>.开机启动服务查询

#chkconfig --list

其中0-6表示启动级别

列如: 以httpd为列,其中3的级别为关闭(off),表示其在3启动形式下默认开机不启动, 5对应的也是关闭,其表示在其桌面环境也是开机不启动

<2>.删除服务

#chkconfig --del 服务名

列如chkconfig --del

<3>.添加开机服务

#chkconfig --add 服务名 【必须保证服务能正常运行】

<4>.设置某个服务某个级别下开机启动/不启 【重点命令】

#chkconfig --level 连在一起的级别 服务名 on/off

案列:设置httpd在级别3和5级别的情况下开机启动

#chkconfig --level 35 httpd on

8.ntp服务

ntp最要作用于服务器的时间同步管理操作

时间对服务器来说是很重要的,一般很多网站都需要读取服务时间来记录相关信息, 如果时间不准,则可能造成很大的影响

列如:当虚拟机李里的linux时间是不准的

同步服务器方式有两种:一次性同步(手动同步),通过服务器自动同步

上游概念:

<1>.一次性同步时间(简单)

#ntpdate 时间服务器的域名或者地址

ip地址产看可以访问:www.ntp.org.cn.pool.php

<2>.设置时间同步的服务

服务名:ntpd

启动ndtp服务

service ntpd start 或者 /etc/init.d/ntpd start

设置ntpd 服务开机启动

#chkconfig --list|grep ntpd

#chkconfig --level 35 ntpd on

9.iptables(防火墙)服务

防火墙:防范一些网络攻击,有软件防火墙和硬件防火墙之分

防火墙选择性的让网络通过,从而保证网络的安全性

在当前centos6.5中防火墙又一个名称 iptables 【7.x中默认使用的是firewalld】

<1>.产看iptables是否开机启动

<2>.iptables服务的启动/重启/关闭(两种方式)

service iptables start/restart/stop

/etc/init.d/iptables start/restart/stop

<3>.产看防火墙的状态

service iptables status 

如果iptables 没有启动,则提示服务没有启动,如果已经启动,则显示防火墙的规则信息

<4>.查看规则命令

iptables -L -n

-L:表示列出规则
-n:表示将单词表达形式改成数字形式显示

<5>.简单设置我们的防火墙规则

列如我们需要80端口通过防火墙,则规则可以用以下命令来设置
#iptables -A INPUT -p tcp -dport 80 -j ACCEPT #允许访问80端口
#iptables -I INPUT -p tcp -dport 80 -j ACCEPT #允许访问80端口

iptables:主命令
-I:添加规【最前面】

-A:add,添加规则【最后】

INPUT:进站请求 【出战 OUTPUT】

-p:protocol,指定协议 (icmp/tcp/udp/)

--dport:指定端口号

-j:指定行为结果  允许(accept)/禁止(reject)

警告:操作完必须保存,否则重启就没了

测试80端口的访问:

<6>.防火墙保存操作

service iptables save

/etc/init.d/ iptables save

10.rpm管理(重点)

作用:rpm类似于windows上的电脑管家中的"软件管理",安全卫士里面"软件管家"等产品,主要作用是对linux服务器上的软件包进行一个对应管理操作,管理分为:查询.卸载.安装

<1>.查询某个软件的安装情况 #rpm -qa |grep 关键词

选项:-q 查询 query

     -a 全部 all

案列:查询linux上是否安装火狐浏览器

案例:查询linux上是否安装qq

<2>.卸载某个软件 #rpm -e 软件的名称

火狐卸载的时候是没有依赖关系的,所以可以直接卸载。

但是在卸载Apache的时候提示无法卸载(存在依赖关系):

当存在依赖关系的时候又不想去解决这个问题的时候就可以:

#rpm -e 软件包名 --nodeps

<3>.软件的安装

要想装软件和windows下一样,先得找到安装包

软件包的获得方式:

a.去官方网站下载

b.不介意老版本,可以从光盘中读取;

此处以光盘设备为列:

查看块状设备的信息:

#lsblk (list block devices) 查看块状设备的信息

Name:名称

Size:设备的大小

Type:类型

MountPoint:挂载点(类似于 windows盘符的概念)

扩展:光盘的挂载和解挂

a.解卦操作

命令:umount

语法:#umount 当前设备的挂载点

此时相当于u盘在windows上已经被弹出了,但是没有拔下电脑的USB接口。

b.挂载光盘

命令:mount

语法:#mount 设备原始地址 设备要挂载的位置

设备原始地址:地址统一都在/dev下,然后根据大小确定具体的name值,拼筹在一起组成原始地址,
列如当前:"dev/sro"

要挂载的位置路径:挂载路径一般都在mnt下,也可以在mnt下建目录,此处以"/mnt/dvd"为列

安装软件的命令:

#rpm -ivh软件包完整名称

选项: -i install 安装

      -v 显示进度条
      
      -h 表示以###形式显示进度条

10.cron/crontab计划任务(重点)

操作系统不可能24小时都有人操作,有些时候想在指定的时间点执行任务(列如:每天夜里2点重新启动Apache),此时不可能有人每天夜里2点去执行命令,那么我们此时就可以交给计划任务程序去执行操作

语法:#crontab选项

常用选项:
      -l:list 列出指定用户计划任务列表
      -e:edit 编辑指定用户计划列表
      -u:user 指定用户名,如果不指定,表示当前用户
      -r:remove 删除指定用户的计划列表

<1>.列出:

<2>.编辑计划任务(重点)

计划任务语法规则格式,以行为单位,一行则为一个计划

分 时 日 周 需要执行的命令1
分 时 日 周 需要执行的命令2
分 时 日 周 需要执行的命令3

列如每天的0点0分执行reboot指令,则可以写成:

0 0 * * * reboot

取值范围:

分:0~59
时:0-23
日:1-31
月:1-12
周:0~6 0表示星期天

四个符号:

*:表示取值范围里的每一个数字
-:做区间表达式的,想要表示1~7,则可以写出1-7
/:表示每多少个  列如有个任务想每10分钟一次,则可以在分的位置写: */10
,:表示多个取值,比如说我想在 1点,2点,6点执行,则可以在时的位置上写 1,2,6

案列:真实测试案列,每分钟往root家目录中的RT.txt中输入当前的时间信息,为了看到效果使用追加效果

计划任务:* * * * * ls~ >> /RT.txt

Crontab 权限问题

本身是任何用户都可以创建自己的计划任务,但是超级管理员可以通过配置来设置某些用户不允许设置计划任务(黑名单)

配置文件位置

/etc/cron/deny  (里面写用户名一行一个)

还有个配置文件(白名单)

/etc/cron/allow (本身不存在,自己创建)

注意:白名单的优先级高于黑名单,如果说一个用户同时存在两个文件名单中,则会默允许创建计划任务

七.linux权限管理操作

linux的权限操作与用户以及用户组是兄弟操作

1.权限概述

总述:Linux系统一般将文件可存/取访问的身份分为3个类别为:owner,group,others,且 3种身份各有read write execute等权限

<1>.权限介绍

什么是权限?

在多用户(可以同时)计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权利,像是文件夹、特定系统
指令的使用或存储量的限制。

在linux分别又读、写、执行的权限

读权限:
   对于文件夹来说,读权限影响用户是否能够列出目录结构
   对于文件来说,读权限影响客户是否可以查看文件内容
   
写权限:
   对于文件夹来说,写权限影响用户是否可以在文件夹下"创建/删除/复制到/移动到"文档
   
   对于文件来说,写权限影响用户是否可以去编辑文件的内容
   
执行权限:
   执行权限一般是对于文件来说的,特别是脚本文件

<2>.身份的介绍

Owner身份(文件所有者,默认为文档的创建者)

  由于Linux是多用户,多任务的操作系统,因此可能常常有人同时在某平台主机工作,但是每个人,均可以在主
  机上设置文件权限,让其成为个人的"私密文件",即个人所有者,因为设置了适当的文件权限,除本人(文件所有
  者)之外的用户无法查看文件的内容。
  
  列如如某个MM给你发一封Email情书,你将情书,你将情书转为文件之后存档在自己的主文件夹中,为了不让别
  人看到情书的内容,你可以利用所有者的身份去设置文件的适当权限,这样即使你的情敌想偷看你的情书内容也
  做不到的

Group 身份(与文件所有者同组的用户)

   与文件所有者同组最有用的功能就体现在多人团队在同一台主机上开发资源的时候,列如主机上有A,B两个团
   队,A中有a1,a2,a3 B中有b1,b2两个成员,这两个团体需要共同完成一个报告F,由于设置了适当的权限,A 
   B两个团队的成员都能互相修改对方的数据,但是团队C的成员不能修改F的内容,甚至连查看的权限都没有,同
   时团体的成员也能设置自己的私密文件,让团队里的其他成员也读不了数据,在Linux中每个账户支持多个用
   户组。列如用户a1b1属于A用户组,也能属于B用户组【主组和附加组】

Others 身份(其他人,相对于所有者)

  这个是个相对概念,打个比方,大明、二明、小明一家三兄弟住在一间房,房产证上的登记者是大明,那么大明一
  家就是个用户组,这个组有大明、二明、小明三个成员,另外有个人张三和他们三没有关系,那么这个张三就是
  其他人
  
  同时大明、二明、小明都有各自的房间,三者虽然能自由进出各自的房间,但是小明不能让大明看到自己的情书
  、日记等,这就是文件所有者(用户)的意义
  
  
Root 用户(超级用户)

在Linux下还有一个神一样存在的用户,这就是root用户,因为在所有用户中,他拥有最大权限,所以管理着普通用户。

<3>.Linux权限介绍

要设置权限就需要知道文件的一些基本属性和权限分配规则,在Linux中,ls命令命令常用来查看文件的属性,用于显示文件的文件名和相关属性

ls -l 文件路径 (ls -l 等价于 ll)

Linux中存在用户、用户组、其他人的概念,各自有不同的权限,对于一个文件来说,其权限分配如下:

标红的部分Linux的文档属性权限信息

Linux中存在用户、用户组、其他人的概念,各自有不同的权限,对于一个文档来说,其权限具体分配如下:

十位字符的表示含义:

第1位:表示文档的类型,取值常见的有"d表示文件夹"、"-表示文件"、"l表示软链接或快捷方式"、"s表示套接字"...

第2-4位:表示文档所有者的权限的情况:
    第2位表示读权限的情况:取值有"r、-",如果是"r"表示可读,如果是"-"表示不可读
    第3位表示写权限的情况:取值有"w、-",如果是"w"表示可写,如果是"-"表示不可写
    第4位表示执行权限的情况:取值有"x、-",如果是"x"表示可执行,如果是"-"表示不可执行
第5-7位:表示与所有者同一个组的权限情况:
    第5位表示读权限的情况:取值有"r、-",如果是"r"表示可读,如果是"-"表示不可读
    第6位表示写权限的情况:取值有"w、-",如果是"w"表示可写,如果是"-"表示不可写
    第7位表示执行权限的情况:取值有"x、-",如果是"x"表示可执行,如果是"-"表示不可执行
第8-10位:表示除了上面的两部分用户之外的其他用户的权限情况:    
    第8位表示读权限的情况:取值有"r、-",如果是"r"表示可读,如果是"-"表示不可读
    第9位表示写权限的情况:取值有"w、-",如果是"w"表示可写,如果是"-"表示不可写
    第10位表示执行权限的情况:取值有"x、-",如果是"x"表示可执行,如果是"-"表示不可执行

权限分配中,均是rwx的三个参数组合,且位置顺序不会变化,没有对应的权限就用"-"代替。

例如:以下一个文档权限是这样的?

a.文件夹类型

b.所有者,拥有全部权限(读写执行)

c.同组用户,可读可执行

d.其他用户,可读可执行

2.权限的设置

#chmod 选项 权限模式 文档

注意实现:

常用选项:
  -R:递归设置权限(当文档类型为文件夹的时候) 
  
权限模式:就是该文档需要设置权限信息

文档:可以是文件,也可以是文件夹,可以是相对路径也可以是绝对路径。

注意点:如果想要给文档设置权限,那么操作者要么是root用户,要么就是文档的

所有者

<1>.字母形式:

选项                      字母                   介绍
(谁)                       u                     用户
(谁)                       g                     所属群体          
(谁)                       o                     其他人
(谁)                       a                     所有人(全部)
(作用)                     +                     增加权限
(作用)                     -                     减少权限
(作用)                     =                     确定权限
(权限)                     r                     可读
(权限)                     w                     可写
(权限)                     x                     可执行

给谁设置权限:
    u:表示所有者身份owner (user)
    g:表示给所有者同组用户设置(group)
    o:表示给其他用户设置权限(orhers)
    a:给所有人设置权限
      如果在设置权限的时候不指定给谁设置,则默认给所有用户设置

权限字符:
   r:读
   w:写
   x:执行
   -:没有权限
   
权限的分配方式:
   +:表示给具体的用户新增权限(相对当前权限)
   -:表示删除用户的权限(相当于当前权限)
   =:表示将权限设置成具体的值(注重的是结果)

例如:我需要去给anaconda-ks.cfg(-rw-------)文件设置一个权限,要求所有者拥有全部的权限,同组用户拥有读和执行权限,其他用户只读权限

答案:

(1).#chmod u+x,g+rx,o+r anaconda-ks.cfg

(2).#chmod u=rwx,g=rx,o=r anaconda-ks.cfg

注意:当所有者的文档拥有执行权限,其终端中文件夹的颜色为绿色

例如:如果anaconda-ks.cfg文件什么权限都没有,可以使root用户设置所有人都有执行权,则可以写成

#chmod +x anaconda-ks.cfg

#chmod a=x anaconda-ks.cfg

#chmod a+x anaconda-ks.cfg

<2>.数字形式 没有任何权限:- 0

读:r           4

写:w           2

执行:x         1

数值                   权限                         目录列表
 0                  不能读,不能写,不能执行           ---
 1                  不能读,不能写,可执行             --x
 2                  不能读,可写,不能执行             -w-
 3                  不能读,可写,可执行               -wx
 4                  可读,不能写,不能执行             r--
 5                  可读,不能写,可执行               r-x
 6                  可读,可写,不能执行               rw-
 7                  可读,可写,可执行                 rwx

例子:需要给anaconda-ks设置全部的权限,权限要求所有者拥有全部权限,同组用户拥有读执行权,其他用户只读

chmod 754 anaconda-ks

面试题:用超级管理员设置文档的权限命令是#chmod -R731 aaa 请问这个命令有没有什么不合法的地方?

拥有者:7=4+2+1=r+w+x

同组用户:3=2+1=w+x

其他人:1=x

在写权限的时候千万不要设置类似于上面那种"奇葩权限"。

3.注意事项

用root用户创建一个文件夹(/oo),权限默认

需要在oo目录下创建文件(oo/xx.txt)需要给它一个777权限

切换到test用户(不是文档所有者,也不是同组用户,属于other的部分)

问题1:test用户是否可以打开oo/xx.txt文件?【能打开】 问题2:test用户是否可以编辑oo/xx.txt文件?【可以】 问题3:test用户是否可以删除oo/xx.txt文件?【不可以,同样还不允许创建、移动、重命名、复制到】

在Linux中如果要删除一个文件,不是看文件有没有权限,而是看文件所在的目录是否有写权限

3.属主和属组设置

属主:表示所属的用户(文件的主人)

属组:所属的用户组

这两个信息是在文档创建的时候会使用创建者的信息(用户名,用户所属的主组的名称)

如果有时候需要删除某个用户,那么用户对应的文档所属主和所属组的信息休要修改

1.chown

作用:更改文档的所属用户

#chown  -R username 文档路径

案列:将刚才的root用户创建的oo目录,所有者更改为test

#chown -R test oo/

2.chgrp

语法:chgrp -R groupname  文档路径

案列:将刚才root用户创建的oo目录,所属用户组更改为test组

#chgrp -R test oo/

思考如何通过一个命令既可以更改所属的用户,也可以修改所属的用户组呢?

答:可以实现,通过chown命令

语法:#chown -R username:groupname 文件路径

案列:要求只使用chown指令把oo目录从test改回root用户

#chown -R root:root oo/

4.扩展

问题:reboot、shutdown、init、halt、user管理,在普通用户身上都操作不了,但是有些特殊情况下又需要有执行权,又不可能让root用户把密码告诉普通用户,这个问题该怎么解决?

该问题是可以被解决的?可以使用sudo(switch user do) 命令来进行权限设置,sudo可以让管理员(root)事先定义某些特殊的命令可以执行

默认sudo中是没有除了root之外用户的规则,要想使用先配置sudo.

sudo配置文件:/etc/sudodes

vim 发现root用只有只读的权限

a.配置sudo文件请使用"#visudo" 属于系统命令,sudo自带的,打开之后使用方法和vim一样

b.配置普通用户的权限

root:表示用户名,如果是用户组可以写成"%组名"

ALL:允许登入的主机(地址白名单)一般默认ALL不做限制

=:固定的,不用动

(ALL):一般以谁的身份去执行,ALL表示root身份,不指定默认就是root用户

ALL:表示当前的用户可以执行的命令,多个命令可以使用","分割

案列:本身test用户不能添加用户,要求使用sudo的配置,将其设置为可以添加用户,并且可以修改密码(但是不能修改root用户密码)

注意:一般在写sudo规则的时候不建议写直接形式的命令,而是写命令的完整路径,路径可以使用"#which"
命令来查看

在添加好可以切换用户了,切换到普通用户test,再去执行

报这个错是对的,因为此时使用的是test用户去执行的这个命令,此时要想使用刚才的规则,需要执行以下命令

#sudo 需要执行的命令

在输入sudo指令需要当前用户的密码进行操作,这里需要确认密码(不是root用户密码),输入后,五分钟内在执行sudo指令不要在输入输入密码

此处特别注意,此处按照案列要求,不能让test用户修改root用户密码,因此规则还需要调整,不然可以修改root用户密码

禁止修改root密码的配置:

test ALL=(ALL)  /usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root

补充:在普通用户下,怎么查看自己拥有一些特殊权限呢?

sudo -l 查看自己拥有哪些权限

最后:sudo不是任何linux分支都有的命令,常见的cenos与ubuntu都存在sudo命令

八.linux的网络基础

网络相关概述

1.网络的发展

信息传递
  远古时期,人们就通过简单的语言,壁画等方式交换信息
  千百年来,人们一直用语言,符号,神鼓,烟火,竹简,纸书等传递信息
  古代人的烽火狼烟,飞鸽传信,驿马邮递
  现在社会的交警的指挥手语,航海中的旗语
  这些信息的传递都靠的的是人的听觉和视觉
  
电的产生
  1831年,法拉第制造出了世界上第一台发电机
  1866年,德国人西门子,制成了世界第一台大功率发电子
  1837年美国人赛缪乐,莫乐斯成功的研制出了世界第一台电池上电报机
  1844年5月24号,莫乐斯在国会大厦联邦最高法院会议厅进行了用"摩尔斯电码",发出了人类历史上
  第一份电报,从而实现了长途电报的通信


网络的诞生
  1957年,前苏联发射了了第一颗人造卫星,震惊了美国
  1958年,美国成立了国防部高级研究计划署(Arpa,Advance,Research projects Agency 应对冷战形式),Arpa是一个管理结构,没有实验室和科学家

 1969年ARPANET(阿帕网)开始联机,因此1969年又被称为internet的元年

网络的分类

局域网(Local Area Network,LAN)是指范围在几百米到十几公里内办公楼群或校园内的计算机相互连接所构成的计算机网络.

城域网(Metropolitan Area Netework MAN) 所采用的技术基本上和局域网相似, 只是规模上要大一些,局域网既可以覆盖相距不远的几栋办公楼,也可以覆盖一个域

广域网:(Wide Area Network WAN) 通常跨界很大的物理范围,入一个国家

除了上诉划分,网络还可以按照所有者分为公网,私网是两种介入方式

公网的介入方式:上网计算机得到ip地址是internet上的非保留地址,公网的计算机和 internet 上的其他计算机可随意访问。私网则反之

2.IP地址(重点)

ip是英文 internet protocol的缩写,意思是网络之间的互相协议,也就是为计算机网络相互连接进行通信而设计的协议

ip地址分为公有地址和私有地址。

公有地址
 公有地址:(public address) 由Inter NIC(internet Network information Center 
 英特网信息中心)负责。这些ip地址的分配给注册并向inter NIC提出申请的组织机构,通过它直接访问英特网。

私有地址(重点)
 私有地址:私有地址属于非注册地址,专门为组织内部使用。以下列出留用的内部私有地址
 A.10.0.0.0-- 10.255.255.255
 B.172.16.0.0-- 172.31.255.255
 C.192.168.0.0-- 196.168.255.255

ip公有地址按类型分为三大类

3.网卡

网卡是一个网络组件,属于硬件的范畴,主要负责计算机之间的数据封装和解封

mac地址:网卡的物理地址,网卡设备的一个编号,默认情况下全球唯一的(16进制的)

与ip地址的区别: 长度不同,ip地址为32位,mac地址为48位 分配依据不同 网络寻址方式不同。osi参考模型,ip地址是基于第三层工作(网络层), mac地址是第二层(数据链路层)

4.网线

网线是连接局域网必不可少的,在局域网中常见的网线主要有双绞线(RJ45接口)、铜轴电缆、 光纤这三种

        双绞线                      铜轴电缆                        光纤

5.交换机

交换机的英文(switch)意为"开关",是一种用于电(光)信号转发的网络设备,交换机他可以为接入交换机的任意两个网络节点提供独享的电信号通路

目前,交换机品牌比较有名的是,华为、华三(h3c)、思科(思科认证)、锐捷

6.路由器

路由器(Router)又称网关设备(Gateway) 是用于连接多个逻辑上分开,相对独立的网络

7.拓扑结构图(扩展的)

所谓的"拓扑"就是把实体抽象成与其大小、形状无关的"点",而把连接实体的线路抽象成"线",进而以图的形式来表示这些点与线之间的关系的方法,其目的在于研究这些点、线之间的相连关系,表示点与线之间的关系图被称为拓扑结构图

常见的几种拓扑结构图:

蜂窝网络结构图

网络相关命令

1.ping

作用:检测当前主机与目标主机之间的一个连通性(不是百分之百准确,有些服务器是禁ping的)

语法: #ping (ip地址,主机名(适合内网用),域名等)

例如测试和baidu.com之间的连通性

该命令是跨平台的linux可以用,windows下也可以使用,语法一致(区别在于linux下一直默认发送,windows下默认发送四个数据包)

2.netstat

作用:表示查看网络的链接信息

语法#netstat -tnlp (-t:tcp协议、-n将字母转化为数字、-l:列出状态为监听的、-p表示进程相关信息)

#netstat -an(-a 表示all、-n将字母转为数字)

tcp/ip协议的时候也需要用到这个协议

3.traceroute

作用:查找当前主机与目标主机之间所有的网关(路由器,发送这个请求的时候会给沿途各个路由器发送icmp数据包,沿途的路由器可以选择给你响应也可以选择不给你响应)

该命令不是内置命令,需要自己安装,但是之前已经安装好了(在选择开发工具的时候)

语法:#traceroute 主机地址(ip、主机名、域名等)

类似于查看快递的跟踪路由

扩展:在windows也有类似的命令:tracert 主机地址

4.arp

地址解析协议,即ARP(Address Resolution Protocol),根据IP地址获取物理地址的协议

当一台主机发送数据的时,首先查看本机的mac地址缓存中有没有目标主机的mac地址, 如果有就使用缓存中的结果;如果没有,ARP协议就会发出一个广播包,该广播包要求查询目标主机ip地址对应的mac地址,拥有该ip地址的主机会发出回应,回应中包括了目标主机的mac地址,这样发送方就得到了目标主机的mac地址。如果目标主机不在本地的网中,则APR解析到的mac地址是默认网关的mac地址

#arp -a 查看本地缓存mac表

arp -d 主机地址 删除指定的一个缓存记录

5.tcpdump(了解)

作用:主要是用来抓包的

常用语法:

#tcpdump 协议 port 端口
#tcpdump 协议 port 端口 host地址
#tcpdump -i 网卡设备名称

案列:查看22端口的数据包

00:09:17.xxxxxx   表示监听数据的时分秒

ip                 使用的协议类型

192.168.21.1      是数据包的一个方向(来自)

">"               表示的是数据的流向

192.168.21.136    数据包的另一个方向(到达)

项目上线流程

1.服务器选购

项目上线的服务器必须是外网服务器

一般服务器有两种情况:购买真实服务器,购买云服务器

购买真实服务器一次性成本太高(独立ip,托管),所以现在基本都选云服务器

云服务厂商:阿里云、腾讯云、知道创宇(加速乐)、华为云、盛大云、新浪云(sae)、亚马逊云等等

以后以阿里云为列:

官网:www.aliyun.com

<1>.打开网站,选择产品里的云服务器ecs

选择具体的配置:

需要重制密码的话可以选择右侧的"更多"选择"重置密码",然后重新启动你的服务器,最后通过远程终端链接服务器了

2.域名购买

在首页产品中找到域名注册

域名注册得先查看是否可以注册

确认购买信息

3.域名的备案

当申请域名的这个人或者公司要想在国内使用域名,则需要想当地的通讯管理局(省级的)去申请报备

备案前提:想要使用境内服务器的话必须得备案,否则访问不了

在管理后台点击"icp备案系统"

点击新增主体备案

填写完基本信息,点击新增网站

备案服务号可以在我们控制台顶部去获取

申请到备案服务号后填写继续

会让一个用户下载一个图片"网站真实性核验单"

下载打印,填写好上传到阿里云的备案系统中

后面就是等待初审,初审通过后继续下一步(初审时间一般一天即可)

拍照:

上传照片:

等待管局审核(到这步骤基本通过,审核周期一般是15个工作日)

等待审核通过,就会收到工信部发送的短信与邮件通知,邮件中有备案号和备案密码(用来注销备案的)

4.域名解析

点击"解析"

解析:将域名绑定到一个服务器地址的操作

DNS:domain name server 域名解析服务器(将域名转化为ip的一个操作)

点击"添加解析"

选择记录类型:

例如需要将www.linux123.xyz解析到之前购买的云主机上,则解析可以设置如下

解析之后我们可以通过在线ping的命令来检测对应的一个效果

5.上传代码

此时需要使用上传工具:pscp filezilla

九.shell基础

关于shell

1.什么是shell

什么是shell?

shell(外壳)是一种用c语言编写的程序,他是用户使用linux的桥梁。shell既是一种命令语言,也是一种程序
设计语言

shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

什么是脚本?

简单的来说就是一条条的文字命令,这些文字命令是可以看到的(如可以用记事本打开查看、编辑)。

常见的脚本:javaScript(JS)、VBScript、ASP、JSP、PHP、SQL、Perl、Shell、Python、Ruby、
JavaFX、lua等

为什么学习和使用shell?

shell属于内置的一个脚本

程序开发效率非常高,依赖于功能强大的命令可以迅速的完成开发任务(批处理)
语法简单,代码写起来比较轻松,简单易学

常见的shell种类

在linux中有很多类型的shell,不同的shell具备不同的功能,shell还决定了,脚本中函数的语法,在
linux中默认的shell是/bin/bash(重点),流行的shell有:ash、bash、zsh、ksh、csh等,不同的
shell都有自己的特点,以及用途


csh:

C shell 使用的是"类C"语法,csh是具有c语言风格的一种shell,其内部命令有52个,较为庞大。目前
使用的并不多,已经被/bin/tcsh所取代

ksh:

Korn shell的语法与Bourne shell 相同,同时具备了C shell的易用特点。许多安装脚本都使用ksh,
ksh有42条内部命令,与bash比有一定的限制性


tcsh:

tcsh是csh的增强版,与cshell完全兼容。


sh:
sh是一个快捷方式已经完全被bash取代


nologin:
指用户不能登入

zsh:

zsh目前是Linux中最庞大的一种shell:zsh有84个内部命令,使用起来也比较复杂,一般情况下不会使用该shell


bash
大多数Linux系统默认使用的shell,bash shell是Bourne shell的一个免费版本,它是最早的
Unix shell,bash还有个特点可以通过help来查看帮助,包含的功能几乎可以涵盖shell的全部功能,
所以一般的shell都会指定它为执行路径

更改用户是否可以登入:

2.shell入门

编写规范:

代码规范
  #!/bin/bash          【指定告知系统当前的脚本要使用的shell解释器】
  
  shell的相关指令

文件命名规范
  文件名.sh            【.sh是linux下bash shell 的默认后缀】

使用流程:

1.创建.sh文件            touch/vim
2.编写shell代码
3.执行shell脚本          脚本必须得有执行权限

案列:创建test.sh,实现第一个shell脚本程序,输入hello Word

输出命令:#echo hello word

注意:输出的内容如果包含字母和符号(不包含变量)。则需要用引号括起来,如果是纯数字可以包也可以不包

案列2:使用root用户账号创建并执行test2.sh,实现创建一个shelltest用户,并在其家目录中新建文件try.html

脚本执行的另外一种方式:/bin/bash 脚本的路径

shell分为简单的写法(简单命令的堆积)和复杂的写法

shell进阶(重点)

1.变量

<1>.变量的含义

a.什么是变量

量就是数据

b.什么是变量

数据可以发生改变就是变量,在一个脚本周期内,其值可以发生改变的量就是变量

c.什么叫一个脚本周期呢?

一个脚本周期我们可以简单饿理解为当前的shell文件

变量是shell中不可缺少的一部分,也是最基础的,最重要的组成部分

<2>.变量的定义与使用

变量,先定义后使用

定义形如:class_name="yunwei"

使用形式:echo $class_name

变量是有两部分组成,一个是变量名(左边),另一个是变量值(右边)
变量名和变量值是什么关系??
变量名和变量值是使用和被使用的关系,我们用变量名来使用变量的值

在使用变量的时候一定要在变量名前添加一个$符号,该符号在其他语言中也是存在的(例如php)

案例1:使用变量写入门脚本中的第一个脚本

关于单双引号(变量名)的问题

双引号能够识别变量,双引号号能够现实转义(类似于"\*")
单引号是不能识别变量,只会原样输出,单引号是不能转义的

案列2:定义一个变量,输出当前时间,要求格式为"年-月-日 时:分:秒"

注意:反引号(esc下方的那个键),当在脚本中需要执行一些指令并且将执行的结果赋给变量的时候就需要使用"反引号"

<3>.只读变量

语法:readonly 变量名称

案列:定义变量a并且其值为10,随后设置其为只读变量,再去尝试重新赋值

<4>.接收用户输入

语法:接受用户输入(重点)

语法:read -p 提示信息 变量名

案列:编写一个脚本test6.sh,要求执行后提示用户输入文件的名称(路径),然后自动为用户创建该文件

<5>.删除变量(并非业务逻辑需要的话,一般用的也不多)

语法:unset 变量名

案列:定义个变量b=20,在输出b的值,随后删除b,最后在输出下b

2.条件判断语句

语法1(一个条件):

if condition

then command1 command2 ..... fi

单行写法(单行一般在命令行中执行的时候):if[condition];then command;fi

语法2(两个条件):

if condition

then command1 command2 ..... else command3 command4 ..... fi

语法3(多个条件):

if condition

then command1 command2 ..... elif condition command3 command4 ..... else command5 command6 ..... fi

3.运算符

在shell中,运算符和其他编程脚本一样,常有的有算数运算符、关系运算符、逻辑运算符、字符串运算符、文件测试运算符等

<1>.算术运算符

下表列出了常用的算术运算符,假定变量a为10,变量b为20

注意:条件表达式要放在括号之间,并且要有空格,例如[a==b]是错误的,必须写成[a ==b].

原生的bash不支持简单的数学运算,但是可以通过其他命令来实现,例如awk 和 expr,expr最常用

<2>.关系运算符

下表列出常用的关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字

下表列出了常用的关系运算符,假定变量a为10,变量b为20

-eq:     equal
-ne:    not equal
-gt:     great than
-lt:     less than
-ge:     great than or equal
-le:    less than or equal

案列:使用a=10 ,b=20 来实现本案列

<3>.逻辑运算符

下表列出了常用的布尔运算符,假定变量a为10,变量b为20

<4>.字符串运算符

下表列出了常用的字符串运算符,假定变量a 为"abc",变量b为"efg":

案列:将上述语法检验一下

<5>.文件测试运算符

文件测试运算符用来检测Unix/Linux文件的各种属性

属性描述如下

注意:权限几个判断,如果只有一个部分符合,则认为是有权限的

4.shell脚本附带选项(重点)

问题描述:在shell中如何处理tail -10 access.log这样的命令选项

步骤:

<1>.调用tail指令

<2>.系统吧后续的选项传递给tail

<3>.tail先去打开指定的文件

<4>.取出最后的10行

问题:我们自己写的shell是否也可以像内置的命令一样传递一些选项呢?

答案 可以的 传递方式跟上面的描述是一样的,关键怎么接受呢?

例如: 传递:#./test.sh a b c

      接受:脚本中可以用"$1"表示a,"$2"表示b,"$3"表示c,以此类推
      
      接受可以用"$"加上选项对应的序号即可。

测试:编写一个test14.sh,传递一个a b c 并输出其值

其实$1 $2 就是变量

练习:创建自定义的指令"user",可以直接执行,要求该指令要有以下语法和功能:

a.#user add 【添加用户】 b.#user del 【删除用户及其家目录】

同时题目中要求的是指令,所以我们再去添加一个别名

vim ~/.bashrc

mysql基础

一.关于数据库

1.什么是数据库

2.mysql的简介

mysql是一个关系型数据库管理系统,由瑞典mysql ab 公司开发,2008年被Sun公司收购,目前属于oracle旗下产品。 mysql是最流行的数据库管理系统之一,在WEB应用方面,mysql是最好的应用软件

3.常见的其他数据库软件

目前市场上还有oracle(重量级数据库)、MS SQL Server(微软)、Access(微软)、PostgreSQL、DB2、Mariable(mysql的分支)

二.mysql的安装与初始化

1.linux下安装的方式(初步)

a.源码包的方式

 优点:
 开源如果有足够能力可以修改源代码
 编译安装,更加适合自己的系统,稳定高效
 
 缺点:
 安装步骤较多容易出错
 编译过程时间较长

案列:使用源码安装ncurses(一种常用的终端库)

1.先将软件包传递到我们服务器上"/usr/local/src"

2.解压需要安装的源码包

#tar -zxvf ncurses-6.1.tar.gz

3.切换到源码文件,然后执行后续操作

<1>.配置(config/configure/bootstrap)

配置操作主要是指定软件的安装目录,需要的依赖在什么地方,指定不需要的依赖,配置文件路径,通用数据存储位置等

指定软件的安装路径:--prefix=路径

需要依赖的路径:--with-PACKAGE包名称=包所在的路径

不需要依赖包:--without-PACKAGE包名称

软件包配置:

# ./configure --prefix=/usr/local/ncurses

<2>.编译(make/bootstrapd)

#make(当前目录下)

<3>.安装(make install/bootstrapd/install)

#make install(当前目录下)

安装成功之后的效果(查看目录)

b.二进制安装

优点:包管理系统简单,只需要几个命令就能实现包的安装,升级,查询和卸载

缺点:经过编译,不再可以看源代码

回顾rpm相关指令

rpm -qa | grep 关键词 rpm -e 关键词 [nodeps] rpm -ivh 完整名称 rpm -uvh 完整名称 rpm -qf 文件路径 【查询指定文件属于哪个包】

案列:使用二进制包安装lynx (一款纯命令后的浏览器)

在光盘中就有这个包:

例如查看百度:#lynx --dump www.baidu.com

c.yum等傻瓜式安装

优点:安装简单,快捷

缺点:完全丧了自定义性

注意:如果不更改软件来源的话,需要联网才能使用

案例:使用yum指令卸载火狐浏览器

#yum remove firefox

案列:使用yum安装火狐浏览器

#yum install firefox

2.安装mysql(重点)

<1>.安装mysql服务端:#yum install mysql-server

这个步骤输入y

完成的一个效果

<2>.mysql的初始化操作

启动mysql

#service mysqld start

初始化mysql

(查看端口号:mysql默认端口号3306)

#mysql secure installation

表输入当前mysql root用户密码如果没有直接回车

是否设置root密码

是否移除匿名用户 y 移除掉

是否允许root远程登入(不管输入y或者n都不允许)

<3>.mysql的控制启动

语法:service mysqld start/restart/stop

进入mysql的方式:

#mysql -u 用户名 -p

退出mysql的方式:

#mysql>exit

<4>.mysql默认目录/文件位置(了解)

数据库存储目录:/var/lib/mysql 配置文件:/etc/my.cnf

3.数据库的备份与还原

<1>.备份

案例:备份整个库

#mysqldump -uroot -pqhabOfhlluB9 ->A/root/sql_202007090117.sql

案列:没一分钟备份一次数据库

计划任务脚本:

crontab -e

等待几分钟观察目录情况

<2>.还原

案列:人为删除xg表(模拟数据丢失),然后通过最后一次备份还原数据表

还原操作:

案列2:需要还原sql文件(mobile.sql 31万条数据)

设置mysql连接字符集: Mysql>set names utf-8; 【三码一致,服务器端+传输端+客户端】

4.扩展

mysql的远程管理工具:

分为两大类:B/S架构和C/S架构

B/S: B是指的浏览器,S指的服务器(例如百度搜索应用就属于B/S架构)

C/S: C指的的是客户端,S是指服务器(QQ WX等应用程序都是C/S架构)

C/S中比较典型的软件 navicat datagrip 

要解决的问题:允许mysql远程登入

a.先进入数据库选择mysql数据库:

b.执行sql select host,user from user;

c.将一个字段的host值改为"%",表示可以任何地方登入

b。修改 update user set host='%' where host='yunwei'

d.刷新权限表或者重启mysql

刷新权限:mysql>flush privileges;

e.登入成功

Yum项目上线实战(网站运维)

一.编译安装与卸载Nginx

Nginx:一款流行的web服务软件,类似Apache

1.安装nginx

<1>.下载nginx:nginx.org/

<2>.使用服务器端下载的方式下载

#wget 地址

例如我们当前需要下载nginx到/usr/local/src

#wget nginx.org/download/ng…

<3>.解压nginx

tar -zxvf nginx-1.19.1.tar.gz

<4>.进入nginx解压目录

开始进行配置 编译 安装操作

#./configure --prefix=/usr/local/nginx

在配置的时候报错没有pcre库(nginx的rewrite伪静态匹配规则用到正则,pcre就用来干这个)

直接yum安装pcre -devel:

#yum install pcre -devel

#./configure --prefix=/usr/local/nginx --with-pcre

在配置的时候又报错了缺少zlib库

直接yum安装zlib -devel:

#yum install zlib -devel

还需要自己去下载zlib的一个源码包

#./configure --prefix=/usr/local/nginx --with-pcre --with-zlib

报错:找不到选项:

最终的nginx配置命令:#./configure --prefix=/usr/local/nginx --with-pcre --with-zlib=/usr/local/src/zlib-1.2.11

开始编译:

#make

开始安装 #make install

安装好的目录

运行nginx(先停止apache,在启动nginx两个服务的接口都是80)

#/user/local/nginx/sbin/nginx 【启动命令】

#/user/local/nginx/sbin/nginx -s reload 【重载,配置文件】

了解:卸载编译安装的软件

注意:你要卸载一个编译好的软件必须先停止

rm -rf /usr/local/nginx

二.关于LAMP

Lamp:Linux + Apache + Mysql + Php LAMP架构(组合)

Lnmp:Linux + Nginx + Mysql + Php-fpm LNMP架构(组合)

Lnmpa:Linux + Nginx + Mysql + Php +Apahce Nginx代理方式