1.linux简介
-
基于unix免费版本发展的 多线程 多核cpu 多任务 操作系统
-
linux内核开源的 公共的
-
linux发行版包括社区版本以及商业版本(技术支持)
2.linux下载与安装
-
双系统 BIOS启动时 会进行菜单选择
-
虚拟机 (模拟多个操作系统) 软件实现操作系统全部模拟
-
centos7.9.x 服务器 不带界面 类似于dos控制台
-
mobaxterm ssh(security shell 安全的脚本 cmd) ftp
-
网络环境设置
-
nat
-
host only
-
briage
3.linux操作系统
-
超级用户 root 管理员
-
普通用户
-
[mike@mikeos bin] $ 其中mike表示当前用户名 mikeos表示操作系统主机名 bin表示当前操作所在目录 $表示当前用户为普通用户
-
文件目录 树形结构
-
linux中间所有内容全部是以文件的方式体现的
-
home(对应windows中间的用户目录) 普通用户 每个用户对应一个用户名的文件夹 mike(个人资料)
-
bin(二进制命令目录) 放置可普通用户的执行命令
-
boot 系统启动目录(最好不要修改) 类似于windows中间的bios
-
dev (device) 设备 管理设备
-
etc (enviroment config) 环境变量设置
-
lib-> usr/lib lib64 -> usr/lib64(library 库文件) 对应usr目录中的映射文件
-
media 媒体
-
mnt 挂载(mount)多数用于扩充容量
-
opt(optional 可选的) 多用于安装第三方软件
-
proc(process 进程) 对应操作系统中实时运行的进程 类似于windows中间的任务管理器
-
root 表示超级管理员用户
-
sbin->usr/sbin 针对root用户对应的专属命令
-
srv (service) 存放源代码对应执行的服务
-
sys 等价于 windows中 system目录
-
tmp 临时目录
-
usr(user software) linux核心目录 安装软件会在中间自动生成相关目录
-
var(variable 变量)
4.linux常用命令
1.基础命令
clear 清屏
who am i 我是谁
man 帮助手册
time 时间
date 日期
history 列表显示历史命令 也可以通过键盘上下键切换
tab快捷键补全命令 路径
2.文件及目录操作命令
<!--目录操作-->
pwd 获取用户所在位置
cd (change directory )切换目录 支持相对路径和绝对路径 .表示当前目录 ..表示上级目录 ~表示当前用户对应的用户名录
ls (ls -al l列表形式展示文件并显示隐藏文件) 当前工作目录文件列表
mkdir “目录路径” 创建文件夹
rmdir -r "目录路径" 删除文件夹 #-r表示支持递归操作
<!--文件操作 -->
touch 1.txt 创建空文件1.txt
rm -rf(remove)删除文件 #强制递归删除
echo hello,world > echo.txt 显示信息>表示讲要显示的信息输出到文件中 # >表示将新的内容覆盖文件 >>表示文件内容追加
mv(move 剪切)
cp 源文件 目标文件 #复制文件
<!--文件内容查看-->
cat echo.txt 显示文件内容
more 分屏显示文件内容
less 最少显示多少文件内容
head 查看文件内容头部信息
tail(尾巴) 强制持续查看文件末尾内容 看日志
3.vi或者vim编辑器
命令模式(光标移动 复制 删除 剪切) ----> i-------->编辑模式
------>:------------>末行模式
编辑模式 i-------> esc退出编辑模式 回到命令模式
末行模式(文件保存 退出) :wq!(强制保存并退出) :q!(不保存退出)
4.系统相关命令
shutdown 关机
reboot 重启
id(identity 身份证) 查看当前登录的用户信息
logname 查看用户登录名
hostname 查看主机名
systemctl 表示linux服务管理
who #管理员关机或者重启之前查看系统当前在线用户情况
5.用户管理(只有root超级用户具有创建普通用户的权限)
对应的配置文件是 /etc/passwd
口令配置文件 /etc/shadow 文件格式为登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
useradd 创建用户
userdel 删除用户
usermod 修改用户
passwd 设置用户口令
su(switch user) 用户切换
sudo 用户切换并且执行
6.用户组管理(同组的用户通常对于文件的操作权限基本保持一致)
groupadd 新增组(*) #groupadd 组名
groupdel 删除组 #groupdel 组名
groupmod 修改组 #groupmod -n 新的组名 旧的组名
groups 查询组 # groups "用户名"
gpasswd 向组中添加用户
gpasswd -a user1 music #正在将用户“user1”加入到“music”组中
linux中操作流程 1.创建用户 2.生成口令 3.将用户加入组
**通常普通用户需要使用超级用户的权限 多数使用su或者sudo命令操作**
7.文件权限说明及操作
drwxrwxr-x. a文件夹
-rw-rw-r--. echo.txt文件
第一列共计10个字母其中第一个字母 d表示目录 -表示文件
剩余的9个字母代表该文件属性对应的操作权限 其中每三个字母为一组
表示的含义从左到右分别为 文件创建者权限|组权限|其他组权限
权限中主要包括rwx三种权限 分别的含义为 r(read 只读) w(write 只写) x(excute 执行)
实际工作中需要经常修改文件属性权限
linux提供两种类型操作文件权限的方式 数字形式 字母形式
数字方式:r=4 w=2 x=1 -=0 #加入权限为3 则表示具有-wx w+x=2+1=3 r-x (推荐方式)
字母形式: u(user) g(group) o(other) a(all)
权限设置过程中通过运算符 结合字母方式设置 u+x 表示用户新增针对文件的可执行权限
例如
u-x ,g=rwx,o=r #通过运算符分别针对不同类别进行权限设定
a=rw- #表示对所有类别设置同样的权限 只读 只写
chgrp(change group) #修改文件所属的组 sudo chgrp -v sport a 将a目录的所属的组修改为sport
chown (change owner) #修改文件的所有者 sudo chown -Rv user1:new_music a 将啊目录的所有者修改为user1 将所属的组修改为new_music
chmod #修改文件权限
8.软链接和硬链接(重点)
软链接 类似于windows中间的快捷方式 用于替换路径较长的文件或者目录
硬链接 cp(复制)+自动同步 多任务多用户操作系统 用于·多用户对指定文件修改 可以共享最新文件内容
知识点拓展:扇区(sector)512kb 块(block)一次性读取8个扇区 4m ---------->存储数据
元数据------->包括文件数据存放位置(指针) 创建时间 修改时间 上次访问时间 用户 权限........
inode对应元数据 文件索引节点 加快查找速度
文件访问流程------->打开指定文件名------------->文件名通过和inode之间的映射关系找到元数据-------------->元数据中通过查询文件数据存放位置找到真实数据指针地址------------------------->通关真实地址访问文件内容
ln (link) #链接指令
stat 文件名 #统计文件元数据信息
软链接的iNode编号和源文件不用 为新的编号 删除源文件会导致软链接无法访问 删除软链接不会对源文件产生任何影响
硬链接inode编号与源文件相同 新增或者删除硬链接会导致硬链接的数量发生变化 删除硬链接对源文件内容不会产生影响 但是当文件的inode中硬链接数值为0时 系统会自动回收inode所占据的空间进行重新分配
9.操作系统进程命令(任务管理器)
top #动态显示正在运行的进程 实时刷新
ps #静态显示运行的进程 可以指定显示格式
ps -ef |grep mike #抓取进程信息中含有mike的行的记录 其中grep为抓取命令 多用于进程信息过滤查询以及文本内容查询
ps -aux
kill -9 进程id #杀死进程 1.查找进程id号码 2.根据号码杀死进程 kill中总计包括64种信号
10.linux中压缩与解压,打包
gzip 单一文件名 #gzip多用于压缩单个文件 压缩后文件的后缀*.gz
gunzip 单一文件名
tar #tar主要作用于文件打包 并不是压缩命令 自动调用gzip协助压缩(推荐)
tar -cf myzip.tar a/b/c/helloc #将helloc打包并压缩生成文件myzip.tar
tar -tvf myzip.tar # 查看压缩文件中条目的内容
zip #zip是唯一于windows通用的压缩格式 适用于批量文件打包 文件后缀为*.zip
zip -rv aoo.zip a #批量递归压缩a文件夹生成 zoo.zip文件 如何查看压缩后的条目信息
zipinfo -1 aoo.zip #查看压缩文件条目信息
unzip 压缩文件名称 #unzip aoo.zip
bzip2 单一文件 #bzip2为压缩命令 和zip命令相比 bzip2压缩率更高(压缩文件尺寸更小),压缩时间较长(算法优于zip的压缩算法)
bunzip2
11.linux系统环境变量
用户变量 该环境变量的设置只针对当前用户有效 ~/.bash_profile
系统变量 该环境变量针对操作系统所有用户有效 /etc/profile 推荐以shell脚本方式修改环境变量放置在/etc/profile.d/目录中
1.使用vim编辑器修改对应的环境变量配置文件
2.修改完毕后需要是环境变量生效 source 环境变量配置文件 (在不重启系统情况下重新加载环境比变量 )
12.应用程序安装与卸载(重点)
which 命令 #查询软件命令所处的位置
whereis 命令 #查询该命令对应软件安装位置 yum进行软件标准化安装的时候linux要求需要将不同内容放置到不同位置
rpm (redhat package manager) 红帽包管理器 先要下载安装包----》上传到linux服务器-------》使用rpm命令进行安装
rpm只能安装单一软件 如果软件有相关性 不太推荐此方式
yum(yellow dog updater modifier)在线操作 能够自动解决软件相关性(推荐)
yum源 软件相关性定义
配置yum源 默认软件访问地址国外镜像地址 常规操作配置阿里的yum源头 保持版本对应
centos中yum源对应配置文件位置 /etc/yum.repos.d/CentOS-Base.repo
1.备份原始yum源文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
2.下载阿里yum源文件 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 其中-O表示将下载的内容保存到本地文件
3.yum clean all 清除本地yum源
4.yum mackcache 生成新的yum源缓存
yum命令操作程序的安装.卸载,查询,更新
yum -y -v install 软件名称 #安装软件
yum list 软件名称 #列出相关软件列表
yum erase 软件名称 #卸载软件
yum reinstall 软件名称 #重装软件
yum update 软件名称 #更新软件
yum search 软件名称 #在yum源头中查找需要安装的软件 如果在yum源头中无法找到需要安装的软件 只能使用rpm命令进行安装
yum deplist #列出软件包的依赖关系
13.find和grep
find用于在指定目录中搜索文件
grep用于查询文件内容
14.awk分词工具 多数类似于数据库
15.网络命令
ping ip #网络是否连接
ifconfig #查看网卡信息
netstat #网络状况统计
16.磁盘管理
df -f #磁盘信息管理
lsblk #块列表管理
mount #挂载
unmount
5.linux设置实战(修改配置文件 熟悉linux操作系统)
1.设置linux启动级别
启动项配置文件 /etc/inittab
在centos7中此配置文件已经不支持修改 替换方式为使用命令切换启动级别
查看启动级别配置文件 cat /etc/inittab
设置启动级别命令 systemctl set-default multi-user.target
设置启动级别的控制台返回的结果
Removed symlink /etc/systemd/system/default.target. Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
查看默认启动级别 systemctl get-default
验证设置是否成功 reboot
2.设置网卡
网卡默认配置文件位置 /etc/sysconfig/network-scripts/ifcfg-ens33
修改网卡配置文件 需要在配置文件中添加以下内容
TYPE=ethernet #网卡类型
BOOTPROTO=static #网卡启动类型
DEVICE=ens33 #设备名称
ONBOOT=yes #网卡是否启动
IPADDR=192.168.235.128 #ip地址设置
NETMAST=255.255.255.0 #子网掩码
GATWAY=192.168.235.2 #网关
DNS1=192.168.235.2 #域名 DNS1 DNS2 DNS3....
网卡配置完成后 需要重启
systemctl restart network
最后验证网卡配置是否成功
ifconfig 查看ens33网卡的信息是否配置成功
其中 systemctl 用于管理linux中系统服务(停止 启动 重启 暂停 恢复) 类似于windows中的服务
systemctl start xxx 启动某项服务
systemctl stop xxx 停止某项服务
systemctl restart xxx 重启某项服务
systemctl pause xxx 暂停某项服务
systemctl resume xxx 恢复某项服务
3.修改主机名称
vi /etc/hostname
检测 hostname
重启生效
4.ls -al 执行该命令可以显示当前工作目录下的隐藏文件
.bash_logout 登出
.bash_profile 概要文件
.bashrc 当前工作目录的环境变量
5.配置当前用户java环境变量(*)
6.centos中使用yum安装java并运行HelloWorld(带有包名)
java默认安装后配置文件位置 /etc/java/java.conf
java安装的根路径为/usr/lib/jvm/java
使用yum安装java后 会自动进行环境变量设置,需要在用户环境变量中设置JAVA_HOME及其对应的bin目录
# Get the aliases and functions #if [ -f ~/.bashrc ]; then # . ~/.bashrc #fi # User specific environment and startup programs # 指定java安装根目录 JAVA_HOME=/usr/lib/jvm/java PATH=$PATH:$HOME/.local/bin:$HOME/bin:$JAVA_HOME/bin export PATH
在用户家目录下编辑HelloWorld.java文件带有包名
package com.whxh; public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello,World!"); } }
编译
javac -d ./ HelloWorld.java #表示在当前目录下编译并生成对应包
运行
java com.whxh.HelloWorld #运行时需要携带包的名字
7.服务器集群搭建(免密登录)
服务器资源规划
编号 | ip地址 | 服务器名称 | 备注 |
---|---|---|---|
1 | 192.168.235.151 | node1 | |
2 | 192.168.235.152 | node2 | |
3 | 192.168.235.153 | node3 |
-
搭建服务器 克隆服务器
-
修改主机ip 集群中主机ip需要保持连贯性
-
测试主机之间的连通性
-
修改主机名并配置本地化的主机名与ip的映射关系(类似域名解析)
vi /etc/hostname #修改主机名
reboot now #立即重启
hostname #查看当前主机名,需要重启 此处可以通过客户端工具同时在多个ssh窗口进行统一操作
-
将此配置信息在集群中共享
scp -r /etc/hosts node2:/etc/hosts #从当前主机服务器将域名解析文件复制到远程的其它服务器(从当前主机复制文件到node2对应的主机) scp命令用于远程复制
-
生成密钥 集群中分发密钥
ssh-keygen -t rsa #保持默认回车即可 在当前主机生成密钥 使用统一的用户名(普通用户)
ssh-copy-id -i ssh_user@node2 #将node1生成的公钥远程拷贝到node2服务器上
ssh node2 # 表示远程免密连接node2所代表的服务器
logout #退出当前连接
ssh简介
Secure Shell是一种安全外壳协议,是建立在应用层和传输层上的安全协议,是目前应用较多的,主要用于远程登录会话和其它安全网络服务的安全层协议,可以有效的防止远程登录等过程中可能出现的安全信息泄露的问题。
支持多种系统,最初是Unix系统上使用的一个程序,因为它的便捷性和安全性的原因很快被移植到不同的其它操作系统中 采用加密且压缩传输的方式进行数据传输,不是telnet、FTP之类的应用中使用明文传递口令数据,SSH的安全性、传输速率等优势就很明显了,所以目前进行远程登录等操作中基本上都会选择使用SSH。当然在具体使用中会选择使用一些支持SSH的客户端工具 SSH加密技术有2种:1、对称加密:加密密匙与解密密匙相同,例如DES、AES。2、非对称加密:加密密匙与解密密匙不同,例如RSA,有公钥和私钥。
密钥认证流程:
1、首先在C上生成一对密钥
2、将公钥拷贝给S一份并重命名为authorized_keys
3、C向S发送一个连接请求,信息包括ip、用户名
4、S得到C的信息后,会到authonized_keys中查找,如果有相应的ip和用户名S会随机生成一个字符串,例如:abcd
5、S将使用公钥对字符串abcd进行加密,发给C
6、得到S发来的消息后,C会使用私钥进行解密,然后将解密后的字符串发送给S
7、接收到解密后的字符串会跟先前生成的字符串进行对比,如果一致,就允许免密码登录
生成密钥:
-rw-------. 1 ssh_user ssh_user 1679 9月 21 10:28 id_rsa -rw-r--r--. 1 ssh_user ssh_user 396 9月 21 10:28 id_rsa.pub
8.服务器时间统一检验
集群服务器中需要不间断的进行时间校验
1.实验时可以直接在虚拟机软件中设置时间同步 服务器的时间会跟宿主机的时间保持一致
服务器虚拟机设置 vmtools中设置服务器时间与宿主机时间同步(宿主机的时间未必是标准时间)
2.ntp(network time protocal 网络时间协议)
集群中不是所有的服务器都能访问外网 局域网中选择时间服务器集群作为内部服务器的时间标准
时间服务器充当服务器及客户端的角色 对内充当服务器 对外充当客户端
timedatectl #日期 时间 时间区域 时差 ntp功能是否开启 其中包括四种格式时间
我们可以通过配置方式修改时间服务器校验地址 /etc/ntp.conf配置文件
6.shell编程
1.shell脚本编写与执行
shell脚本的文件后必须是.sh结尾 譬如说xxx.sh
shell脚本文件开头 必须包括 #! /bin/bash
shell脚本编写完毕后 必须修改文件执行权限 否则无法运行 chmod +x ./xxx.sh
执行shell脚本
在当前路径下 ./xxx.sh
或者 sh xxx.sh
shell主要使用#进行单行注释
2.shell变量
shell是一种解释性语言 按照每行进行解释并且执行 shell中没有具体的数据类型 属于弱类型语言
赋值语法: 变量名=值 (=号两边没有空格)
设置变量: readonly $变量名
删除变量: unset $变量名
使用变量: echo 变量名
在字符串中多数使用""包裹 那么其中的$变量名会被转换为实际的变量内容
字符串拼接不要特殊符号 直接将字符号连接即可
3.字符串
获取字符串长度
str="abcd"
echo "字符串长度 :"${#str} //输出4表示4个字符
提取字符串
string="runoob is a great site" echo ${string:1:4} # 输出 unoo
4.数组
定义数组
语法: 数组的变量名=()
arr=() #空数组 动态向数组中添加元素(直接元素,关联元素(hashmap))
数组元素赋值
arr[index]=值 #index表示数组下标 从0开始计数
获取数组元素的值
echo arr[index]
将数组预算的值赋值给其他变量
var=${arr[index]}
数组相关属性获取
length=${#arr} #表示获取数组arr的长度赋值给length变量
5.流程控制语句
if语句
语法:
if ((表达式))
then
command...
elif ((表达式))
then
command...
else
command...
fi
for语句
语法:
for var in 数组
do
command...
done
示例如下:
for item in ${arr[@]}
do
echo $item
done
for i in $(seq 0 ${#arr[@]}) #可以操作数组的下标
do
echo $i"-------"${arr[$i]}
done
while语句
语法:
while ((表达式)) #此表达式中可以直接进行条件判断 类似于java
do
command....
done
while true #无限循环 do command done
case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac
echo '输入 1 到 4 之间的数字:' echo '你输入的数字为:' read aNum case $aNum in 1) echo '你选择了 1' ;; 2) echo '你选择了 2' ;; 3) echo '你选择了 3' ;; 4) echo '你选择了 4' ;; ***)** echo '你没有输入 1 到 4 之间的数字' ;; esac
循环跳出与继续(多用于处理case语句的外层循环 跳出或者继续)
break
continue
6.test判断语句
字符串比较
参数 | 说明 |
---|---|
= | 等于则为真 |
!= | 不相等则为真 |
-z 字符串 | 字符串的长度为零则为真 |
-n 字符串 | 字符串的长度不为零则为真 |
实例
num1="ru1noob" num2="runoob" if test $num1 = $num2 then echo '两个字符串相等!' else echo '两个字符串不相等!' fi
输出结果:
两个字符串不相等!
文件测试
参数 | 说明 |
---|---|
-e 文件名 | 如果文件存在则为真 |
-r 文件名 | 如果文件存在且可读则为真 |
-w 文件名 | 如果文件存在且可写则为真 |
-x 文件名 | 如果文件存在且可执行则为真 |
-s 文件名 | 如果文件存在且至少有一个字符则为真 |
-d 文件名 | 如果文件存在且为目录则为真 |
-f 文件名 | 如果文件存在且为普通文件则为真 |
-c 文件名 | 如果文件存在且为字符型特殊文件则为真 |
-b 文件名 | 如果文件存在且为块特殊文件则为真 |
实例
cd /bin if test -e ./**bash** then echo '文件已存在!' else echo '文件不存在!' fi
输出结果:
文件已存在!
另外,Shell 还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为: ! 最高, -a 次之, -o 最低。例如:
实例
cd /bin if test -e ./notFile -o -e ./**bash** then echo '至少有一个文件存在!' else echo '两个文件都不存在' fi
输出结果:
至少有一个文件存在! 7.文件包含 文件中包含其它的shell脚本 . ./文件名.sh source ./文件名.sh (推荐) 8.函数及其参数传递 函数定义参考js代码 参数传递在shell中需要使用特殊字符 9.文件处理 awk(推荐) 内置变量 内置函数 sed cut string 10.printf格式化问题