文章主要讲解:Linux7.6
本文章来自:优极限
计算机硬件软件体系
冯诺依曼体系结构
计算机硬件组成
输入设备
输入设备用来将人们熟悉的信息形式转换为机器能够识别的信息形式
- 常见的有键盘,鼠标等
输出设备
- 输出设备可以将机器运算结果转换为人们熟悉的信息形式
- 打印机输出,显示器输出等
存储器
- 存储器用来存放数据和程序
RAM(random access memory)即随机存储内存:
- 速度快,容量小
- 掉电易失
- 逻辑IO
ROM(Read-Only Memory)即只读内存硬盘:
- 容量大,速度相对较慢
- 长久保存
- 物理IO
CPU(中央处理器)
控制器
- 控制器主要用来控制和指挥程序和数据的输入运行,以及处理运算结果
运算器
- 运算器主要运行算数运算和逻辑运算,并将中间结果暂存到运算器中
硬盘的分类
硬盘按照存储介质的不同可以分为如下两种
读写速度的区别
- 固态硬盘的读取速度普遍可以达到400M/s,写入速度也可以达到130M/s以上,
- 其读写速度是普通机械硬盘的3-5倍。
机械硬盘的数据读写
顺序读写与随机读写
网络连接概念
IP地址IPADDR
IP地址是一种逻辑地地址,用来标识网络中一个个主机
- IP地址=网络地址+主机地址
- IP地址是一个 4 * 8bit(1字节)由 0/1 组成的数字串(IP4协议)
子网掩码NETMASK
- 网掩码只有一个功能,就是将IP地址划分为网络地址和主机地址两部分。
子网掩码用来判断任意两台计算机的IP地址是否在同一个子网中的根据
- A 192.168.7.111 B 192.168.8.222
- 255.255.0.0
默认网关GATEWAY
- 连接两个不同的网络的设备都可以叫网关设备;网关的作用就是实现两个网络之间进行通讯与控制。
- 网关地址就是网关设备的IP地址
域名服务器DNS
- DNS是域名服务器,用来解析域名的(域名和IP之间的解析)。
- 如果没有这东西,登陆某个网站时就必须输入该网站的IP地址,有了DNS就可以直接输入网址。
网络连接模式
host-only(主机模式)
- 在某些特殊的网络调试环境中,要求将真实环境和虚拟环境隔离开,这时你就可采用host-only模式。
- 在host-only模式中,所有的虚拟系统是可以相互通信的,但虚拟系统和真实的网络是被隔离开的。
- 在host-only模式下,虚拟系统的TCP/IP配置信息都是由VMnet1(host-only)虚拟网络的DHCP服务器来动态分配的
bridged(桥接模式)
- VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器。
- 使用桥接模式的虚拟系统和宿主机器的关系,就像连接在同一个Hub上的两台电脑。
当前主机IP 为 192.168.8.100 虚拟机 192.168.8.xxx
- 学习期间为了防止IP冲突,所以不选择这种模式
NAT(网络地址转换模式)
软件分类
应用软件
- 就是为了实现某些业务功能
应用软件要基于对应的系统软件
- 不同的操作系统要安装不同的软件
系统软件
- 就是为了和硬件打交道
- 屏蔽应用软件与硬件的差异
系统软件的分类
Window
- 用户量全球最大
- 收费,不开源,民用较多
- 各种软件比较齐全
Mac
- 只限定于某些苹果的品牌机
- ios--自成一家
GNU/Linux
GNU是一个开源软件组织,世界上所有的软件都应该开源免费
- GNU Is Not Unix
- GCC++
- 托瓦兹 林纳斯 Linus -- Linux(Linux is not unix)
- Logo是企鹅
Linux分支
RedHat(收费)
CentOS
- 完全开源免费
- 不要使用最新版的CentOS
- 主要用于服务器版本
Debain(免费)
Linux下载
官网
下载页面
CentOS7.6下载地址
镜像的分类
everything
- This image contains the complete set of packages for CentOS Linux 7. It can be used for installing or populating a local mirror.
minimal
- The aim of this image is to install a very basic CentOS 6.5 system with the minimum of packages needed to have a functional system.
netinstall
- This is the network install and rescue image.
操作系统的位数
- 优先选择64位,将来安装软件有更好兼容性
虚拟机安装与配置
虚拟化技术
- 可以更好的利用计算机闲置的资源
- 我们可以在计算机中虚拟出多台虚拟机帮助我们执行程序或者业务
- 虚拟机的各种组成理论上和真实主机是一样的
如果要使用这种技术只需要安装对应的软件即可
- Virtualbox
- VirtualMachine
安装软件
创建虚拟主机
安装操作系统
配置常见参数
网络
查看自己虚拟网卡地址
- 编辑-->虚拟机网络编辑器-->vmnet8
修改网络配置信息
vi编辑器简单使用
操作文档
- 光标位置
- dd 删除一行
- i 将文档变成可修改模式
- esc 退出编辑
- :wq 保存并退出
修改网络信息
- vi /etc/sysconfig/network-scripts/ifcfg-ens33
--修改 ONBOOT=yes BOOTPROTO=static //静态网络IP dhcp 动态获取网络IP --添加 IPADDR=192.168.58.100 NETMASK=255.255.255.0 GATEWAY=192.168.58.2 DNS1=114.114.114.114 删除------
- ![image-20200615175138675](https://s4.51cto.com/images/blog/202201/18154059_61e66f0b63f9e96246.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) - 重启网卡重新加载配置文件 - ip addr - systemctl restart network.service - ping www.baidu.com - ctrl+c 终止命令的执行 #### 防火墙
- 保护本机的端口不被别人访问
- 如果端口需要被别人访问到,需要添加端口的防火墙例外
关闭防火墙
软件安装限制
- 操作系统对未知软件的安装有可能拒绝或者警告,我们需要禁用这个功能
vi /etc/selinux/config
关机
关机
halt
- 直接拔掉电源
poweroff
- 直接关闭机器,但是有可能当前虚拟机其他人在使用
shutdown -h now
- 马上关闭计算机 ,但是可以给其他用户发送消息
reboot
- 重启虚拟机
快照与克隆
拍摄快照
- 记录当前虚拟机的状态
- 拍摄快照的时候一定要关机
转到
- 回到某一个历史快照的节点
克隆
- 复制某一个历史快照节点
克隆的方式
链接克隆
- 当前节点文件夹只存储差异性数据
- 相同数据存放在原始节点上
- 优点:节省硬盘空间 缺点:耦合性大
完整克隆
- 就是基于原始节点完全拷贝到新节点的文件夹中
- 优点:耦合性抵 缺点:硬盘空间使用大
- 推荐使用完整克隆
修改克隆机配置
网络信息
参考2.4.1的修改网络信息
主机名
vi /etc/hostname
- 修改完成后需要重启生效
hostname bd16
- 本次启动中有效,重启虚拟机还是使用原来的名字
连接Linux服务器
Xshell
- 负责向虚拟机输入命令
XFtp
- 如则向虚拟机传输文件
Linux的命令
命令学习法
- Linux命令与参数之间必须用空格隔开
- Linux命令是区分大小写的
如果输入了错误的命令
- -bash: abcd: command not found
- 命令敲错了
- 命令未安装
type 命令的类型
- cd is a shell builtin
- ping is /bin/ping
- ll is aliased to `ls -l --color=auto'
- for is a shell keyword
命令的帮助文档
help
- 内置命令的帮助文档
man
- 外部命令的帮助文档
- 因为当前系统为minimal的,very basic 没有man包
需要手动安装man
- yum install man man-pages -y
将来工作中如果遇到生疏的命令,直接百度
- 如果不是为了装C,完全没必要查看命令手册
常用的命令
- whereis 查询命令文件的位置
- file 查看文件的类型
- who 查看当前在线的用户
- whoami 我是谁
- pwd 我在那
- uname -a 查看内核信息
- echo 类似于 sout syso ,打印语句
- clear 清屏
history 历史
特殊字符
.点:
- 如果文件的开始是.说明当前文件是一个隐藏文件
- . 指向当前目录
- ..指向当前目录的上级目录
$
说明这是一个变量
- $PATH Linux的环境变量
*星号
- 通配符
~
- 当前用户的家目录
- 每个用户的家目录是不同的
- root用户家目录在系统根目录下
- 其他用户的家目录在/home/用户名为家目录
空格
- Linux的命令与参数用空格隔开
/
- 整个Linux的文件根目录
命令的参数
- 如果是单词 一般加--
- 如果是字母或者缩写 一般加 -
修改Xshell字体颜色
PS1='\[\e[36;40m\][\u@\h \W]\[\e[0m\]\\$ ' echo "PS1='\[\e[36;40m\][\u@\h \W]\[\e[0m\]\\$ '" >> ~/.bashrc
Linux的文件系统
万事万物皆文件
文件系统:
- 操作系统如何管理文件,内部定义了一些规则或者定义
- 所以在Linux中所有的东西都是以文件的方式进行操作
- 在Linux中,文件的访问不和Window的一样。window依靠的是通过盘符进行访问
Linux维护着一个树状结构的文件模型
- 只有一个根节点 ,他的名字叫做 /
- 一个节点上可以有多个子节点
查找文件的方式
相对路径
- 以当前路径为基准点,查找其他资源
- vi ../etc/sysconfig/network
绝对路径
- 以根目录为基准点,查找其他资源
- vi /etc/sysconfig/network-scripts/ifcfg-ens33
- 日常使用中,只要找到路径即可,但是如果是一些配置文件,尽量写绝对路径
可以随意的挂载磁盘
mount /dev/disk1 /usr/download disk1 1T mount /dev/disk2 /usr/upload disk2 100T mount /dev/disk3 /usr/upload/photo
### Linux文件目录
/bin: bin是Binary的缩写, 这个目录存放着最经常使用的命令。 /boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。 /dev : dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。 /etc: 这个目录用来存放所有的系统管理所需要的配置文件和子目录。 /home: 用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。 /lib: 这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。 /lost+found: 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。 /media: linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。 /mnt: 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。 /opt: 这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。 /proc: 这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件, 比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器: echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all /root: 该目录为系统管理员,也称作超级权限者的用户主目录。 /sbin: s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。 /selinux: 这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。 /srv: 该目录存放一些服务启动之后需要提取的数据。 /sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。 sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。 当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。 /tmp: 这个目录是用来存放一些临时文件的。 /usr: 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。 /usr/bin: 系统用户使用的应用程序。 /usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。 /usr/src: 内核源代码默认的放置目录。 /var: 这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。 /run: 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
Linux的文件操作
cd
- 改变当前工作目录
ls ll
- 显示出指定目录下所有的文件
文件的类型
- -普通文件
- d文件夹
- l软连接
- -rw-r--r--. 1 root root 3384 Nov 11 23:51 install.log.syslog
mkdir
- 创建文件目录
- mkdir -p a/b/c/d/e/f 会自动创建文件父目录
- mkdir -p xxx/{1234}ls 一次可以创建多个子目录
rmdir
删除空文件夹
- rmdir: failed to remove ‘a1’: Directory not empty
- rmdir: failed to remove ‘baidu’: Not a directory
- 可以安全的删除文件目录
cp
- 拷贝文件或者文件目录
cp 源文件 目标目录
- cp abcd /opt
- cp /opt/abcd ./
拷贝文件夹
- cp -r xxx /opt
- 拷贝文件夹下所有的内容
- cp: omitting directory ‘/root/a1’
mv
移动文件或者文件夹
- mv a1 /opt
- mv abc /opt
修改文件名称
- mv a abcd
rm
删除文件
- rm install.log
- rm -f install.log
删除文件夹
- rm -r abcd
- rm -rf abcd 谨慎使用,从删库到跑路
touch
- 如果没有就创建一个文件
- 如果该文件已经存在,修改文件的三个时间,将三个时间改为当前时间
stat
- 查看文件的状态
- Inode 当前文件在文件系统的唯一标识,类似于ID
时间
- access 访问时间
- modify 修改文件内容时间
change 修改文件元数据信息时间
- 文件大小 ,文件所有者 ,文件权限
- 对于文件的描述信息
ln
读取文件信息
cat
- 将整个文档加载到内存中,并进行一次性显示
- 除非后面使用管道,传递数据
tac
- 将整个文档加载到内存中,并进行一次性按行逆序显示
more less
- 分页查看文档内容
快捷键
- 回车 下一行
- 空格 下一页
- b 回退
- q 退出
head
- 从文章开始读取N行
- 默认如果超过10行读取10行,否则读取现在行数
- head -5 profile
tail
- 从文章末尾读取N行
head -3 profile | tail -1
- 利用管道只读取第N行
- 管道的作用就相当于把前面的结果以参数的方式传递给后面的命令
读取新增数据
- ping www.baidu.com >>baidu
- tail -F baidu
如果f:
- 它会监听指定inode的文件数据变化,但是当文件被删除后
- 即使创新创建,inode也会发生变化,于是监听失败
如果F
- 他会监听指定名字的文件,如果文件被删除后,重新创建
- 他会重新监听新文件的数据变化,监听不受影响
find
- 查找指定的文件
- find 要查找的范围 -name 名字
- find /etc -name profile
VI和VIM编辑器
打开文件
正常打开
- vi profile
打开文件,并将光标置于第8行
- vi +8 profile
打开最后一行
- vi + profile
- 按n查找下一个,按N查找上一个
打开指定搜索单词的位置
- vi +/if profile
三种模式
编辑模式
- 编辑模式中,每一个按键都有其他的功能
输入模式
- 每一个按键按下什么,就像文本中数据输入什么
末行(命令行)模式
- 我们可以直接在VI中输入特定的命令
三种模式切换
编辑模式-->输入模式
- i在当前位置插入数据
- a追加数据
- o在当前行后面开启一个新的输入行
- I 行首
- A 行尾
- O 上一行
输入模式-->编辑模式
- 按下ESC
编辑模式-->末行模式
- :
末行模式-->编辑模式
- 按下ESC
编辑模式
- G最后一行
- gg 跳转到第一行
- 数字gg 跳转到第数字行
- w 下个单词
- 数字w
- dw 删除一个单词
- 3dw 删除三个单词
- dd 删除一行
- 3dd 删除三行
- u回退到前面的操作
- .回退u执行的操作
- yw 复制一个单词
- 3yw 赋值三个单词
- yy 复制一行
- 3yy复制三行
- p粘贴
- 6p 粘贴6次
- x 剪切
- 3x 剪切三个字符
- r 替换,然后输入一个字符替换
- 3r 替换三个
- hjkl 方向键
- ZZ 保存并退出
- ctrl+s 锁屏 ctrl+q 解锁
输入模式
- 没得讲。按啥是啥
末行模式
- set nu 设置行号
- set nonu 取消行号
- w 保存
- q 退出
- wq 保存并退出
- q!强制退出,但是不保存
如果上次异常退出会保留同名隐藏文件,每次启动会给与提示
- 如果确定当前文件没问题,请删除隐藏文件
/pattern
- 搜索指定的字符串
- /usr n向下查找 N逆向查找
s/p1/p2/g
计算机间的数据传输
Window--Linux
lrzsz
需要手动安装
- yum install lrzsz -y
rz
- 将文件从window上传到Linux
sz 文件
- 将文件从Linux传输到Window
xftp
- 较为通用的文件传输方式
Linux--Linux
- scp 源数据地址(source) 目标数据地址(target)
- scp apache-tomcat-7.0.61.tar.gz [email protected]:/opt
- scp [email protected]:/opt/apache-tomcat-7.0.61.tar.gz ./
- scp -r apache-tomcat-7.0.61 [email protected]:/opt
文件大小
分区信息
- df -h
指定文件目录大小
- du -h --max-depth=1 apache-tomcat-7.0.61
swap
- 一个特殊分区,以硬盘代替内存
- 当内存使用满的时候,可以将一部分数据写出到swap分区
文件压缩
tar
- 主要针对的文件是 xxx.tar.gz
解压缩
- tar -zx(解压)v(过程)f(文件) xxx.tar.gz
压缩
- tar -zc(压缩)f(文件) tomcat.tar.gz(压缩后的名字) apache-tomcat-7.0.61(源文件)
tar -zxf tomcat.tar.gz -C /opt/
- -C 指定解压缩的文件目录
zip和unzip
安装
- yum install zip unzip -y
压缩
- zip -r tomcat.zip apache-tomcat-7.0.61
解压缩
- unzip tomcat.zip
Linux的网络信息
主机名称
临时修改
- hostname school
长久修改
- vi /etc/hostname
DNS解析
- 域名解析服务
- 可以将域名转换为IP地址
DNS域名劫持
- window --> C:\Windows\System32\drivers\etc\hosts
- 123.56.138.186 www.baidu.com
123.56.138.186 www.taodao.com
修改主机域名
- vi /etc/hosts
- 将来我们需要把所有的虚拟机都配置hosts文件
- 192.168.31.101 bd1601
- 192.168.31.102 bd1602
网络相关命令
ifconfig
- 查看当前网卡的配置信息
- 这个命令属于 net-tools中的一个命令,但是Centos7中minimal版并没有集成这个包
- 所以7的时候需要自己手动安装
- 如果没有ifconfig ,可以使用ip addr 临时代替
netstat
- 查看当前网络的状态信息
- 一个机器默认有65536个端口号[0,65535]
- 这是一个逻辑的概念,将来我们需要使用程序监听指定的端口,等待别人的访问
- 一个端口只能被一个程序所监听, 端口已经被占用
- netstat -anp
- netstat -r 核心路由表 == route
ping
- 查看与目标IP地址是否能够连通
telnet
- 查看与目标IP的指定端口是否能够连通
- yum install telnet -y
- telnet 192.168.31.44 22
curl
- restful 我们所有的资源在网络上中都有唯一的定位
- 那么我们可以通过这个唯一定位标识指定的资源
- http://localhost:8080/xxx/use...
- curl -X GET http://www.baidu.com
加密算法
不可逆加密算法
- 可以通过数据计算加密后的结果,但是通过结果无法计算出加密数据
应用场景
- Hash算法常用在不可还原的密码存储、信息完整性校验。
- 文档、音视频文件、软件安装包等用新老摘要对比是否一样(接收到的文件是否被修改)
- 用户名或者密码加密后数据库存储(数据库大多数不会存储关键信息的明文,就像很多登录功能的忘记密码不能找回,只能重置)
案例
- 123456
- e10adc3949ba59abbe56e057f20f883e
- md5(md5(123456))-----md5(654321)
对称加密算法
- Symmetric Key Encryption
- 代表性算法叫做 DES、3DES、Blowfish、IDEA、RC4、RC5、RC6和AES
特点
- 加密和解密使用相同的秘钥
优点
- 生成密钥的算法公开、计算量小、加密速度快、加密效率高、密钥较短
缺点
- 双方共同的密钥,有一方密钥被窃取,双方都影响
- 如果为每个客户都生成不同密钥,则密钥数量巨大,密钥管理有压力
应用场景
- 登录信息用户名和密码加密、传输加密、指令加密
案例:
- 原文:今晚八点学校小树林见
- 密钥: xxx
- xqscCQo+bQ7XJPxjr3jHmgAgPDhaOeJAkjiFv37Q0wU=
非对称加密算法
- Asymmetric Key Encryption
非对称加密算法需要一对密钥(两个密钥):
- 公开密钥(publickey)和私有密钥(privatekey)(简称公钥,私钥)。
- 公开密钥与私有密钥生成时是一对
- 用公钥加密只能是对应的私钥解密,同理用私钥加密只能用对应的公钥解密。
- 代表性算法叫做 RSA、ECC、Diffie-Hellman、El Gamal、DSA(数字签名用)
优点:
- 安全高(几乎很难破解)
缺点
- 加解密相对速度慢、密钥长、计算量大、效率低
应用场景
- HTTPS(ssl)证书里制作、CRS请求证书、金融通信加密、蓝牙等硬件信息加密配对传输、关键的登录信息验证。
http://tool.chacuo.net/cryptr...
-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjlHREYDiL9p5bAPBsMCy+UIaH e4MAm7djkuHYW3aGQLgG9Rc1CSRaFeNXBw+llDsnIgBPgoUI4S8N2m87n25zJ5jH 7pEyWoZsAeTgpqJ6fzfciRpGHsawZ+AxVs0PeIvBMVIIZfpP4tIK5WVau7mVt0gy /bU+PtX35wVymIKy7QIDAQAB -----END PUBLIC KEY-----
-----BEGIN PRIVATE KEY----- MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAOOUdERgOIv2nlsA 8GwwLL5Qhod7gwCbt2OS4dhbdoZAuAb1FzUJJFoV41cHD6WUOyciAE+ChQjhLw3a bzufbnMnmMfukTJahmwB5OCmonp/N9yJGkYexrBn4DFWzQ94i8ExUghl+k/i0grl ZVq7uZW3SDL9tT4+1ffnBXKYgrLtAgMBAAECgYBOkrvNu7bqQ/yKiPl5MOzRzHWW I0OomxqnC1hkXbe/RGsFI+ueSQi+/Z2fN3XkghgmO6wFx5ds6GpZixgqarIz8z/Z AixGVx7BgUgAzIZ4OOsm7uLpPs7WEVLWn1I4/59HxnzWX85ShBsfJc4tFb566Bc2 /5SaBurNXlOURFFs9QJBAPUL/qCWZ5JljXEtlLqaumEY54WT6+dJpL0j2bsmvktk CkMpzqCKy8ymiFPa5FyZDRsZfLQBoHWv7SVKD0wOFMcCQQDtwJcAsOrxWApQ19tr 9wrrv0QB0XPkJjOL85x/I+6Q6CMd2YQs8ze2ex+J45VWtADQYi2VixgmtI9pNmW7 eJ6rAkAe2s/I8KdB67+PjKm5hVoKd9RPIX0GtmMj3avAwPQdEg+ovU7jMBbRQfbQ eDNg5XSdAOyOzdWie/BkTZr3fJ5pAkEAr9OVGOK97ZxRjLYGRNMfVXdOwRV4YorJ 5j9URkZ5gNrcVY/uixuX4TEvAte3MrbOP03MLmL+imlQAdxD4h/zHwJBANY0vxVf 8tzwPdXcNWK8ZCqmWLR8sDTrzRdwNejBraYb00yEngGy1uALsDNevXtzrRkh8dzV QI5y+RliuFYWd14= -----END PRIVATE KEY-----
IpaC8/W8s3UL9wDuz8pRUA3bG3jE0Ch0MqCiVd3LXHBXSDRVckvD20cUEnBkiG0N85NfY6rvM0iyb4fNkic4BhmLQg6AsV4L8LEIptSwPJwlVqJprqh7MHN+R9y/PekSmpZYAxitTaFFfgJPDhGYl45TmWLj2vhGoOQy/INK9lY=
今晚八点学校小树林见
主机间的相互免秘钥
- 可以通过ssh命令免秘钥连接到其他的主机
如果是第一次建立连接,需要输入yes
- 在 ~/.ssh/known_hosts 文件记录了以前访问地址(ip hostname)的信息
- 在访问地址的时候如果没有收录到known_hosts文件中,就需要输入yes
- 如果以前收录到known_hosts中,直接输入密码即可
需要输入密码
生成秘钥
- 如果你想免秘钥登录谁,只需要把自己的公钥传递给对方主机即可
这个秘钥要放在 ~/.ssh/authorized_keys
- ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
- 相互面秘钥工作流程
主机名与Host校验
- 错误原因:
- Cannot determine realm for numeric host
解决方案1--本次
- ssh -v -o GSSAPIAuthentication=no [email protected]
解决方案2--所有
- 修改/etc/ssh/ssh_config文件的配置,以后则不会再出现此问题
- 最后面添加:
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
日期与时间
时间命令
date
- 查看当前系统时间
cal 查看日历
- cal 2020
修改时间
- date -s 11:11:11
- date -s 2019-11-11
- date -s '2019-11-11 11:11:11'
- clock -w
日期自动同步
自动同步时间
- yum install ntp -y
- ntpdate cn.ntp.org.cn
命令执行时间统计
#!/bin/bash start=$(date +%s) nmap man.linuxde.net &> /dev/null end=$(date +%s) difference=$(( end - start )) echo $difference seconds.
用户-组-权限
用户
新增用户
- useradd xxxly
- 会创建同名的组和家目录
设置密码
- passwd xxxly
删除用户
- userdel -r xxxly
- 级联删除家目录和组
修改用户信息
usermod -l xxxss xxxls 修改用户名
- 家目录和组名称是不会被修改的
- usermod -L xxxss 锁定用户名
- usermod -U xxxss 解锁用户名
常用文件
cat /etc/shadow
- 用户名和密码
cat /etc/passwd
- 用户名,编号,组编号,家目录,命令码,目录
- 6.5系统0-499 普通 500+
- 7.6系统0-999 普通 1000+
切换账户
- su xxxly
组
创建组
- groupadd xxx
删除组
- groupdel xxx
修改组名字
- groupmod -n school xxx
查看用户对应的组
- groups
groups schoolly
- 当我们创建用户的时候,会默认创建一个同名的主组
修改用户的组
- usermod -g xxx schoolly (主组)
- usermod -G xxx schoolls (附属组)
权限
查看文件的权限
- drw-r-xr-x 9 n1 m1 4096 Nov 13 00:30 apache-tomcat-7.0.61
三组权限,每组3个字母
- r :读取权限
- w :写入权限
- x :执行权限
- -:没有权限
- root :所属用户(属主)
- root:所属的组(属组)
权限的UGO模型
- 三组权限
- 属主的权限:属组的权限:其他的权限
- 所有说:将来修改文件的权限 可以从rwx和ugo两个方面进行修改
修改文件的权限
修改文件所属
- chown n1 /var/xxx1
- chown n1:m1 /var/xxx2
修改文件夹时,让子目录迭代修改
- chown -R n1:m1 school
chgrp m2 xxx3
- 当用户的组被修改之后,需要重新登录才能获取新组的权限
修改文件的rwx
- chmod o+w xxx4
- chmod ug+rw xxx4
- chmod ugo-rw xxx4
(权限RWX分别对应数字 4 2 1 5= 4+0+1 r-x)
- chmod 664 xxx4 ->(rw- rw-r--)
权限赋予
- 我们可以将管理用的权限分配给普通用户
- 文件位置在 vim /etc/sudoers
但是修改这个文件需要使用命令
- visudo
- 修改 Line 99
- n1 ALL=(root) /sbin/useradd
- n1 ALL=(root) /sbin/*
如何使用
- su n1
- sudo chkconfig iptables off
管道与重定向
管道
- 将前面命令的结果作为参数传递给后面的命令
grep
- 强大的文本搜索工具
- cat profile | grep if
- ls / | grep ^t
重定向
- 改变数据输出的位置,方向
0 in 1 out 2 err
- ls / 1> xxx 标准输出
- ls / > xxx 标准输出
- ls abcd 2>xxx 错误输出
> 替换 >> 追加
- ls / 1>> xxx
- ls / 1> xxx
结合使用
- ls /etc /abc > xxx 2>&1
- ls /etc /abc >> xxx 2>&1
信息黑洞
- ls /etc /abc >> /dev/null 2>&1
Linux的系统进程
进程信息
ps -ef
- UID PID PPID C STIME TTY TIME CMD
- UID 所属用户
- PID 当前进程编号
- PPID 当前进程编号的父进程编号
- ps -ef | grep redis
ps -aux
- 所有信息
- ps -aux --sort -pcpu
top
- 当前服务器内存使用率
后台进程
只需要在命令的后面添加一个 & 符号
- ping www.baidu.com >> baidu &
jobs -l
- 可以查看当前的后台进程
- 但是只有当前用户界面可以获取到
nohup 可以防止后台进程被挂起
- nohup ping www.baidu.com >> baidu 2>&1 &
杀死进程
kill -9 17599
Linux的软件安装
环境变量
当我们执行一个命令的时候,默认从当前路径开始查找
如果当前路径找不到对应的命令文件,从环境变量$PATH查找
$PATH的配置文件在 /etc/profile
window 路径与路径之间用;(分号)连接
Linux路径与路径之间用:(冒号)连接
Linux每次修改完成之后,需要重新加载文件 source /etc/profile
软件的安装方式
- 解压就可以使用
使用安装包安装(window-exe Linux-rpm)
- 自己下载安装包
- 使用统一的软件帮助我们安装
通过源码安装
RPM安装
- RedHat Package Manager,它属于红帽的一种包管理方式
通过RPM命令安装软件
- rpm -ivh jdk-7u67-linux-x64.rpm
可以查询软件
- rpm -qa | grep jdk
- rpm -q jdk
卸载
- rpm -e jdk-1.7.0_67-fcs.x86_64
需要手动配置Java的环境变量
- vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.7.0_67
- 重新加载配置文件 - source /etc/profile
压缩包解压安装
解压文件
- tar -zxf apache-tomcat-7.0.61.tar.gz
拷贝到/opt/school目录下
- mkdir -p /opt/xxx
- cp -r apache-tomcat-7.0.61 /opt/school
启动tomcat
- cd /opt/school/apache-tomcat-7.0.61/bin/
- ./startup.sh
YUM安装
yum的作用
- 可以帮我们管理RPM包
- 可以帮我们安装软件,
- 如果软件有其他依赖,会帮我们安装依赖后在安装软件
- 类似于Maven
yum命令
- search 查询命令或者软件
info
- 查看包的信息
list / list jdk
- 查询安装的rpm包,或者只查询某一周
更换yum源
首先安装wget
- yum install wget -y
将系统原始配置文件失效
- mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
使用Wget获取阿里yum源配置文件
- wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/rep...
- wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/rep...
清空以前yum源的缓存
- yum clean all
获取阿里云的缓存
- yum makecache
安装Mysql数据库
Mysql的下载地址
#----------安装Mysql依赖【perl net-tools】
yum install perl net-tools -y
#----------卸载mariadb
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
#----------安装mysql
tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
rpm -ivh mysql-community-common-8.0.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.18-1.el7.x86_64.rpm
#----------启动mysql
systemctl start mysqld
#----------查找密码并登陆Mysql
cat /var/log/mysqld.log | grep password
mysql -u root -p
#----------修改Mysql密码
set global validate_password.policy=low;
set global validate_password.length=6;
alter user root@localhost identified by '123456';
#----------修改Mysql链接地址
use mysql;
update user set host='%' where user = 'root';
commit;
exit;
systemctl restart mysqld;
#----------使用Navicat连接Mysql
Linux的三剑客
普通剑客
cut
- 用指定的规则来切分文本
- cut -d':' -f1,2,3 passwd | grep school
sort
sort xxx
- 对文本中的行进行排序
sort -t' ' -k2 xxx
- 对每一行的数据进行切分,按照第二列进行排序
sort -t' ' -k2 -r xxx
- 逆序
sort -t' ' -k2 -n xxx
- 按照数值大小进行排序,如果有字母,字母在前
wc
- 统计单词的数量
- wc xxx
4 15 79 xxx
- -l line
- -w word
- -c char
剑客1号:grep
- 可以对文本进行搜索
同时搜索多个文件
- 从文档中查询指定的数据
- grep adm passwd
- grep school passwd xxx
显示匹配的行号
- grep -n school passwd
显示不匹配的忽略大小写
- grep -nvi school passwd --color=auto
使用正则表达式匹配
- grep -E "[1-9]+" passwd --color=auto
剑客2号:sed
- sed 是Stream Editor(字符流编辑器)的缩写,简称流编辑器
- Sed软件从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行...
- 一次一行的设计使得sed软件性能很高
- vi命令打开文件是一次性将文件加载到内存
了解即可
行的选择模式
- 10 第十行
- m,n --> 第m行到第n行 [m,n]
- m,+n-->第一行到第四行 [m,m+n]
- m~n-->从m行开始,依次累加n
- m,$ -->从m开始到最后一行
- /school/ -->匹配到school的行
- /u1/,/u4/-->从匹配u1到匹配u4
增
- sed '2a xxxisgood' passwd
sed '2i xxxisgood' passwd
- 打印到控制台
sed -i '2a xxxisgood' passwd
- 直接修改到文件
删
- sed '3,10d' passwd
改
整行替换
- sed '3,20c hahaha' passwd
- sed '3~1c hehehe' passwd
字符替换
- sed '1,5s/root/xxx/g' passwd
- sed '1,5s#/#-#g' passwd
剑客3号:awk
- 它不是一个剑客,它是一门语言
了解即可
模式与动作
- awk -F ":" 'NR>=2&&NR<=6' /etc/passwd
- awk -F ":" '{print NR,$1}' /etc/passwd
- awk -F ":" 'NR>=2&&NR<=6 {print NR,$1}' /etc/passwd
- awk -F ":" 'NR==1{print NR,$1}NR==2{print NR,$NF}' /etc/passwd
Linux的Shell编程
名词解释
Kernel
- Linux内核主要是为了和硬件打交道
Shell
- Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
- Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell环境
- 只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)--默认
- C Shell(/usr/bin/csh)
#! 声明
- 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序
执行Shell的方式
./shxxx.sh
- 执行的必须是一个可执行文件
- chmod u+x shxxx.sh
sh shxxx.sh
- 执行的文件可以是一个普通文件
source shxxx.sh
- 直接在当前进程执行脚本
- 当我们执行bash的时候开启一个子进程,当脚本中出现ping的时候又开启了一个子进程
shell语法
变量
export : 可以将当前进程的变量传递给子进程去使用
- 将来配置profile的时候 所有的变量前必须加export
#! /bin/bash echo -e "\e[1;31m【----------在opt和var创建xxx文件夹】\e[0m" echo -e "\e[1;31m【----------禁用防火墙】\e[0m" echo -e "\e[1;32m【----------修改selinux】\e[0m" echo -e "\e[1;32m【----------安装wget】\e[0m" echo -e "\e[1;33m【----------修改yum源】\e[0m" echo -e "\e[1;33m【----------安装常用软件man man-pages ntp vim lrzsz zip unzip】\e[0m" echo -e "\e[1;34m【----------DNS域名配置】\e[0m" echo -e "\e[1;34m【----------安装JDK】\e[0m" echo -e "\e[1;35m【----------安装Tomcat】\e[0m" echo -e "\e[1;35m【----------安装Mysql】\e[0m" echo -e "\e[1;36m【----------设置开机启动项】\e[0m" echo -e "\e[1;36m【----------删除文件】\e[0m" shutdown -h now
Linux的启动流程
系统启动流程
启动计算机的硬件(BIOS)
- 读取时间
- 选择对应的启动模式(USB HDD EFI)
- 如果是Linux系统,回去找/boot目录.引导这个系统启动
计算机系统开始启动,读取初始化配置文件
- vim /etc/inittab
- 启动时控制着计算机的运行级别 runlevel
-
0 halt (关机) 1 Single user mode(单用户模式) 2 Multiuser, without NFS(多用户模式,但是无网络状态) FS-->FileSystem 3 Full multiuser mode(多用户完整版模式) 4 unused (保留模式) 5 X11(用户界面模式) 6 reboot(重启模式) - id:3:initdefault: 默认runlevel为3
- 以runlevel=3开始启动对应的服务和组件
开始默认引导公共的组件或者服务
- vim /etc/rc.d/rc.sysinit
开始加载对应runlevel的服务
vi /etc/rc3.d/
- K:关机时需要关闭的服务
- S:启动时需要开启的服务
- 数字代表了开启或者关闭的顺序
- 所有的文件都是软链接,链接的地址为 /etc/init.d
当启动完毕,所有的服务也被加载完成
系统服务
- 我们可以使用chkconfig命令查看当前虚拟机的服务
- 通过查看可以得知不同的级别对应到每一个服务确定本次开机自动启动
开机结束后,我们需要使用service(Centos6)Systemctl(Centos7)命令控制服务的开启或者关闭
开机自启动服务
rc.local
首先创建脚本存放的文件夹
- mkdir -p /usr/local/scripts
在文件夹中创建脚本文件
- vim hello.sh
- 给予执行权限
去/etc/rc.d/rc.local文件中添加脚本的绝对路径
- 给予rc.local执行权限
chkconfig
- 创建开机自启动脚本文件
- vim schoolntpdate.sh
#!/bin/bash #chkconfig: 2345 88 99 #description:auto_run # 开机自启动同步时间
- 给其设置执行权限 - chmod u+x schoolntpdate.sh - 将脚本拷贝到 /etc/init.d目录下 - cp schoolntpdate.sh /etc/init.d/ - 添加到服务 - chkconfig --add /etc/init.d/schoolntpdate.sh - 重启服务器 - reboot
定时任务
在系统服务中心,crond负责周期任务
- systemctl status crond.service
添加任务,编辑当前用户的任务列表
- crontab -e
编辑任务
星 星 星 星 星 command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用或者 /1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令*:表示任意时间都,实际上就是“每”的意思。可以代表00-23小时或者00-12每月或者00-59分
-:表示区间,是一个范围,00 17-19 * cmd,就是每天17,18,19点的整点执行命令
,:是分割时段,30 3,19,21 * cmd,就是每天凌晨3和晚上19,21点的半点时刻执行命令
/n:表示分割,可以看成除法,/5 * cmd,每隔五分钟执行一次30 21 * * * /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每晚的21:30重启apache。 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每月1、10、22日的4 : 45重启apache。 10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每周六、周日的1 : 10重启apache。 0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart 上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。 0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每星期六的11 : 00 pm重启apache。 * */2 * * * /usr/local/etc/rc.d/lighttpd restart 每两小时重启apache * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart 晚上11点到早上7点之间,每隔一小时重启apache 0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart 每月的4号与每周一到周三的11点重启apache 0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
重启crontab,使配置生效
- systemctl restart crond.service
通过crontab -l
- 查看当前的定时任务
查看任务的历史
- vim /var/spool/mail/root
清除任务
- crontab -r
虚拟机初始化脚本
#!/bin/bash ## -bash: ./shxxx.sh: /bin/bash^M: bad interpreter: No such file or directory ## vim或者vi的命令模式下,输入命令 set fileformat=unix 即可解决换行问题 echo -e "\e[1;31m【----------------------------------------在opt和var创建xxx文件夹】\e[0m" sleep 5 mkdir -p /opt/xxx mkdir -p /var/xxx mkdir -p /usr/local/script
echo -e "\e[1;31m【----------------------------------------禁用防火墙】\e[0m"
sleep 5
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
echo -e "\e[1;32m【----------------------------------------修改selinux】\e[0m"
sleep 5
sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
echo -e "\e[1;32m【----------------------------------------安装wget】\e[0m"
sleep 5
yum install wget -y
echo -e "\e[1;33m【----------------------------------------修改yum源】\e[0m"
sleep 5
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/rep...
yum clean all
yum makecache
echo -e "\e[1;33m【----------------------------------------安装常用软件】\e[0m"
yum install man man-pages ntp vim lrzsz zip unzip telnet perl net-tools -y
echo -e "\e[1;34m【----------------------------------------同步系统时间】\e[0m"
yum info ntp && ntpdate cn.ntp.org.cn
echo -e "\e[1;34m【----------------------------------------DNS域名配置】\e[0m"
sleep 5
echo "192.168.58.100 basenode" >> /etc/hosts
echo "192.168.58.161 bd1601" >> /etc/hosts
echo "192.168.58.162 bd1602" >> /etc/hosts
echo "192.168.58.163 bd1603" >> /etc/hosts
echo -e "\e[1;34m【----------------------------------------安装JDK】\e[0m"
sleep 5
rpm -ivh jdk-8u231-linux-x64.rpm
echo 'export JAVA_HOME=/usr/java/jdk1.8.0_231-amd64' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
echo -e "\e[1;35m【----------------------------------------安装Tomcat】\e[0m"
sleep 5
tar -zxf apache-tomcat-8.5.47.tar.gz
mv apache-tomcat-8.5.47 /opt/xxx/
echo -e "\e[1;35m【----------------------------------------安装Mysql】\e[0m"
sleep 5
rpm -e --nodeps rpm -qa | grep mariadb
tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
systemctl start mysqld
systemctl enable mysqld
temppasswd=grep "A temporary password" /var/log/mysqld.log | awk '{ print $NF}'
mysql -uroot -p$temppasswd --connect-expired-password << EOF
set global validate_password_policy=low;
set global validate_password_length=6;
alter user root@localhost identified by '123456';
use mysql;
update user set host='%' where user = 'root';
commit;
quit
EOF
systemctl restart mysqld
echo -e "\e[1;35m【----------------------------------------安装Nginx】\e[0m"
sleep 5
echo -e "\e[1;36m【----------------------------------------设置开机启动项】\e[0m"
sleep 5
touch /usr/local/script/auto_ntpdate.sh
echo '#!/bin/bash' >> /usr/local/script/auto_ntpdate.sh
echo 'yum info ntp && ntpdate cn.ntp.org.cn' >> /usr/local/script/auto_ntpdate.sh
chmod u+x /usr/local/script/auto_ntpdate.sh
echo '/usr/local/script/auto_ntpdate.sh' >> /etc/rc.local
chmod u+x /etc/rc.local
echo -e "\e[1;36m【----------------------------------------删除文件】\e[0m"
sleep 5
rm -rf apache-tomcat-8.5.47.tar.gz
rm -rf jdk-8u231-linux-x64.rpm
rm -rf mysql*
rm -rf *.sh
echo -e "\e[1;36m【----------------------------------------关闭计算器,拍快照】\e[0m"
sleep 5
shutdown -h now
## 虚拟机相互免秘钥
三台主机分别生成秘钥
【123】ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
host验证
【123】vim /etc/ssh/ssh_config 在最后添加
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
将秘钥分别拷贝给自己和别人
【123】ssh-copy-id -i ~/.ssh/id_rsa.pub root@node01
【123】ssh-copy-id -i ~/.ssh/id_rsa.pub root@node02
【123】ssh-copy-id -i ~/.ssh/id_rsa.pub root@node03
123456
关闭主机拍摄快照
power off
感谢大家的认同与支持,小编会持续转发《**优极限**》优质文章