linux操作系统
冯若依曼体系
- 运算器
- 控制器
- 存储器
- 输入
- 输出
RAM
逻辑io
速度快,容量小
断电会丢失数据
ROM
只读内存
容量大,速度慢
长久保存,物理IO
CPU
控制器&运算器
ROM两种
机械&固态硬盘
机械原理(HDD)
磁片,被磁化为1,未磁化0
怕摔
固态硬盘(SSD)
闪存颗粒(固态电子存储芯片阵列)
2.网络连接概念
- IP地址
- 子网掩码
- 默认网关(不需要外网可以省略)
- DNS适配器(不需要外网可以省略)
1.IP地址是一种逻辑地址,用来标识网络中的一个个主机
- IP地址=网络地址+主机地址
- IP地址是4*8bit(IP4协议)
2.子网掩码
把IP地址分成网络地址和主机地址
3.网关
相当于海关,向更高一级如外网的请求都需要由网关代理转发
4.DNS域名解析
3.网络连接模式
bridged(桥接模式)
- vm也能访问外网,外网也能访问vm
- 缺点容易IP地址冲突
NAT(网络地址转换模式)
- vm能访问外网,外网不能访问vm
软件分类
1.应用软件
只负责业务
调系统接口来与硬件打交道
2.系统软件
与硬件打交道
GNU/linux
托瓦兹.林纳斯
Linux
- redhead
- centos
- diebian
- ubantu
直接百度linux.org进行下载
第二个相当于迷你版本的linux
配置网络文件
进入vi编辑状态
ctrl+s锁屏
Ctrl+Q解锁
锁屏就是视窗不动,但输入的东西实际存在
键入 ip addr 查看IP信息
host:basenode
键入reboot重启
3.修改网络配置
修改etc/sysconfig/network-scripts/ifcfg-ens33
先删除UUID
然后把boot修改为static
然后添加IPADDR=192.168.188.100
NETMASK=255.255.255.0
GATEWAY=192.168.188.2
DNS1=114.114.114.114
键入 systemctl restart network.service重启网络服务
4.配置防火墙
1.本次服务内禁用防火墙
systemctl stop firewalld
2.查看防火墙状态
systemctl status firewalld
3.禁用防火墙(永久,下次重启开始生效)
systemctl disable firewalld
5.软件安装限制
文件位置:/etc/selinux/config
vi config
改成SELINUX=disabled
6.关机&重启
键入 poweroff
键入 shutdown -h now
键入reboot
7.拍摄快照/克隆
完整克隆就是全部克隆
链接克隆只是克隆不同的地方
8.修改主机名
长久修改
文件路径:/etc/hostname
或者键入
临时修改
hostname 想要改成的名字
9.登出
键入exit
结论:配置文件基本上都在etc文件夹里
10.xshell
在默认窗口键入
ssh ip addr
即可连接主机
11.查找包命令
yun search ifconfig
12.判断命令是自带的还是应用
type cd
[root@basenode ~]# type cd cd is a shell builtin [root@basenode ~]# type for for is a shell keyword [root@basenode ~]# type ping ping is /usr/bin/ping
如果是内置命令
可以键入help查看文档
如果是外部命名
可以键入man查看文档
13.查找该命令在哪个位置
whereis ping
[root@basenode ~]# whereis ping ping: /usr/bin/ping /usr/share/man/man8/ping.8.gz
14.查看文件类型
file /usr/bin/ping
[root@basenode ~]# file /usr/bin/yum /usr/bin/yum: Python script, ASCII text executable
15.查看当前用户
who
[root@basenode ~]# who root pts/0 2022-03-27 06:46 (192.168.188.1)
whoami
我是谁
16.查看当前所在文件夹位置
pwd
[yeshifu@basenode ~]$ pwd /home/yeshifu
[root@basenode ~]# pwd /root
17.查看内核信息
uname -a
[root@basenode ~]# uname -a Linux basenode 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
18.打印echo 清屏 clear
输出彩色文字
给输出的字符指定颜色
一般格式\033[3x;4xm输出内容\033[0m
前后都有**\033[xm**
echo -e "\033[33mthis is yellow \033[0m"
echo -e "\033[32;47mhello world\033[0m"
echo -e "\033[32;45mhello world\033[0m"
echo -e "\033[3mhello world\033[0m"
echo -e "\033[1;3;4;5;31;47mhello world\033[0m"
30表示黑色。
31表示红色。
32表示绿色。
33表示黄色。
34表示蓝色。
35表示紫色。
36表示浅蓝色。
37表示灰色。
给输出的字符指定背景颜色
40表示背景为黑色。
41表示背景为红色。
42表示背景为绿色。
43表示背景为黄色。
44表示背景为蓝色。
45表示背景为紫色。
46表示背景为浅蓝色。
47表示背景为灰白色。
其它常用的ANSI控制码
\033[1m让输出的字符高亮显式
\033[3m输出斜体字
\033[4m给输出的字符加上下划线
\033[5m让输出的字符闪烁显式
\033[7m设置反显效果,即把背景色和字体颜色反过来显示
19.history敲命令的历史
history -c清除历史
2.常用文件标识符
1..表示隐藏文件
一个点接文件名是隐藏文件
一个点表当前目录
两点表上级目录
2.$表示环境变量
[yeshifu@basenode ~] echo name name [yeshifu@basenode ~]name**
liqingzao
3.*通配符
[yeshifu@basenode ~]$ ll -a /etc/a*
把所以符合a开头的结果返回
[yeshifu@basenode ~]$ ll /etc/*d
把所有符合d结尾的返回
4.~家目录
超级管理员家目录在/root
普通用户家目录在/home/username
5./整个linux的根目录
[root@basenode /]# cd / [root@basenode /]# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
6.命令参数
如果是一个单词就双杠
yum --help
如果是一个简写就单杠
yum -h
3.linux文件系统
1.挂载磁盘
mount /dev/disk1 /usr/download
2.查看进程
ps -ef
$$表示当前进程编号
echo $$查看当前进程编号
3.二级目录的作用
- bin 可执行文件目录
- boot 引导分区
- dev 设备信息
- etc 配置文件
- home 普通用户的家目录
- lib 类库,库文件目录
- media 多媒体
- mnt 硬盘默认挂载位置
- opt 软件安装位置
- proc 进程信息
- root root用户的家目录
- run 运行时的系统环境变量
- sbin 管理员可执行的命令
- srv 系统运行时的临时变量
- sys 系统内核信息
- tmp 临时文件目录(关机会清除)
- var 临时文件目录(关机不会清除)
- usr 用户共享信息
4.文件夹操作
1.切换目录
cd
2.显示当前目录下的文件
ll 详细信息
ls 简略信息
前缀信息
- -文件
- d目录
- l快捷方式
例子:
-rw-r--r-- 表示文件可操作权限
drwxr-x--- 表示目录
lrwxrwxrwx 表示快捷方式
3.创建&删除文件夹
mkdir
[root@basenode ~]# mkdir a/b/c mkdir: cannot create directory ‘a/b/c’: No such file or directory
mkdir -p 当父级目录不存在时会根据需要创建
mkdir -p poet/shiren{libai,dufu}
**shiren{libai,dufu}**创建两个或多个目录包含{}的前缀
mkdir -p poet/{libai,dufu}
rmdir
仅仅只能删除空文件夹
不能删除有数据的文件夹,也不能删除文件
5.文件操作
1.复制文件
cp 源文件路径 目标路径
参数:
- -a 拷贝全部
- -r 拷贝文件夹
[root@basenode ~]# cp -r poet /opt*
2.剪切文件
mv 源文件路径 目标路径
3.重命名
mv 目标文件 重命名
[root@basenode opt]# mv a abc
4.删除文件
rm -rf
参数:
- -f 强制删除
- -r 删除文件夹(递归的删除)
rm -rf /*
这是一个非常危险的操作适合提桶跑路
5.创建文件
touch 文件名
**stat ** 文件名 文件元数据
cat 查看文件内容
6.链接
ln 文件名 链接名
重点:最好链接绝对地址
参数:
- -s 创建软链接,原文件丢失则失效
例子:
软链接
[root@basenode ~]# ln -s libai slink [root@basenode ~]# ll total 8 -rw-------. 1 root root 1559 Mar 27 06:11 anaconda-ks.cfg -rwxr-xr-x 1 root root 66 Mar 27 23:39 libai drwxr-xr-x 5 root root 46 Mar 27 23:13 shiren lrwxrwxrwx 1 root root 5 Mar 27 23:41 slink -> libai [root@basenode ~]# cat slink 天生我才必有用 昨日之日不可留 今日之日多烦忧
硬链接
[root@basenode ~]# ln libai hlink [root@basenode ~]# ll total 12 -rw-------. 1 root root 1559 Mar 27 06:11 anaconda-ks.cfg -rwxr-xr-x 2 root root 66 Mar 27 23:39 hlink -rwxr-xr-x 2 root root 66 Mar 27 23:39 libai drwxr-xr-x 5 root root 46 Mar 27 23:13 shiren lrwxrwxrwx 1 root root 5 Mar 27 23:41 slink -> libai
总结:
软连接不添加link数目
硬链接添加
原文件删除软连接不能访问
硬链接直接引用内存地址
软连接引用变量值
硬链接可以保护文件不被恶意删除
7.查看文件
cat 文件路径
[root@basenode ~]# cat lslink 天生我才必有用 千金散尽还复来 昨日之日不可留 今日之日多烦忧
tac 文件路径
按行号倒序输出
[root@basenode ~]# tac lslink 今日之日多烦忧 昨日之日不可留 千金散尽还复来 天生我才必有用
more 文件路径
- 按回车一行一行的翻
- 按空格一页一页的翻
- 按B回退
- 按H提供帮助相当于--help
- 按q直接退出
less 文件路径
- 按回车一行一行的翻
- 按空格一页一页的翻
- 按B回退
- 按H提供帮助相当于--help
- 按q直接退出
理论上来说用more和less没啥区别
head -行数 文件路径
显示文件前几行
[root@basenode ~]# head -10 profile
tail -行数 文件路径
显示文件后几行
[root@basenode ~]# tail -1 profile
head 与 tail 组合通过管道运算符
可以只显示第多少行
[root@basenode ~]# head -8 profile | tail -1
/etc/profile.d/ to make custom changes to your environment, as this
重要
tail -F 文件名
可以监控文件变化
tail -f 文件名
功能有限,根据Inode进行监控
tail -F则根据文件名进行监控
8.搜索文件
find 查找范围 -name 文件名
这种差不多够用
[root@basenode ~]# find / -name libai /root/shiren/libai /opt/libai
[root@basenode ~]# find /etc -name a*a /etc/sysconfig/anaconda /etc/selinux/targeted/active/modules/100/alsa /etc/selinux/targeted/active/modules/100/amanda /etc/selinux/targeted/active/modules/100/anaconda
4.vi编辑器
1.打开文件
vi 文件名
- +相当于定位
- /相当于匹配
例子:
- vi +8 文件名
- 打开直接定位到第8行
- vi + 打开直接定位最后一行
- vi +/if 打开直接定位到if
2.vi编辑器的三种模式
- 编辑模式
- 编辑模式,每个按键都有其他功能
- 输入模式
- 按什么输入什么
- 末行模式
- 我们可以在vi中输入特定的命令
3.vi三种模式的切换
1.由编辑模式进入输入模式(快捷键)
- a 追加 输入的内容位于光标后
- i 插入 输入的内容位于光标前
- o 下一行
- I 行首
- A 行尾
- O上一行
2.由输入模式回退到编辑模式
按下ESC
3.由编辑模式进入末行模式
按下:
4.由末行模式回退编辑模式
按下ESC
注意:末行模式不能与输入模式直接切换
5.编辑模式常用快捷键
- gg 快速定位行
- 20 gg快速定位到20行
- G定位到最后一行
- dd 删除一行
- 10 dd删除10行
- w 一个词一个词的跳
- d w 删掉一个词
- 3 d w删掉三个词
- yy 复制一行
- 3yy 复制三行
- p粘贴
- p粘贴
- 2p 复制两遍
- yw复制一个单词
- 3yw 复制三个单词
- u 撤销
- . 前进
- h左移光标
- j下
- k上
- l右
- ^行首
- $行尾
- PGUp上一页
- PGUp下一页
- shift zz保存并退出(ZZ)
- r替换
- 3r j 把当前光标位置替换成三个j
- x剪切
- 3x 剪切3个字母
6.末行模式常用命令
1.保存和退出
- w 临时保存一次
- q 退出
- ! 强制执行
- :q!强制退出
2.查找与替换
/libai 查找字符串libai
/表示匹配的意思
n next下一个
s/libai/dufu
把libai替换成dufu
注意只是当前行
且一次只替换一个
s/libai/dufu/g
可以把当前行全部换掉
后面的/g全部替换
注意只是当前行
g/libai/s//wanglun/g
全局替换所以李白
第一个g表示全局匹配
中间双杠转义/
最后一个g全部替换
3.设置/取消行号
:set nu
:set nonu
7..文件名.swp
如异常退出的时候会默认保存一个隐藏文件
这种情况直接回车可以回到原来的
也可以找到该隐藏文件删除
或者在提示页面键入D删除隐藏文件
在提示页面键入R可以恢复错误关闭的内容
5.系统间的数据传输
1.window~~~~linux
1.xftp
直接使用xftp非常简单
2.lrzsz
yum install lrzsz -y
加个-y
yes的意思,默认执行
不需要手动确认
安装这个软件
- rz接收文件
- r(receive)接收的意思
- sz 文件名 发送文件
- s(send)发送的意思
2.linux~~~~linux
scp 源文件地址 目标地址
-r 传文件夹
1.把文件传到另一台主机
scp 文件路径 用户名@ip地址:保存的文件路径
scp forward.txt root@192.168.188.101:/opt/
2.把别的主机文件拿过来
scp root@192.168.188.100:/root/profile /opt
6.查看文件目录所占空间
1.查看分区信息df
df -h
更好看了,数据更容易理解
[root@basenode ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 1.2G 16G 7% /
devtmpfs 898M 0 898M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.6M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda1 1014M 146M 869M 15% /boot
tmpfs 182M 0 182M 0% /run/user/0
2.查看目录大小du
du -h --max-depth=1 /etc
--max-depth=1最大深度为1
[root@basenode ~]# du -h --max-depth=1 /root 8.0K /root/shiren 4.0K /root/.ssh 0 /root/person 72K /root
7.压缩包
1.tar
-c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
-z:有gzip属性的 -j:有bz2属性的
-Z:有compress属性的 -v:显示所有过程 -O:将文件解开到标准输出
下面的参数-f是必须的
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
反正不会的就查百度
常用
- tar -xvf 文件名 也能自动解压
- tar -cf 压缩后的包名 文件夹 能自动压缩
1.解压缩 -zx(解压)v(过程)f(文件) -zxvf
仅支持tgz即tar.gz文件
[root@basenode ~]# tar -zxvf 409-晨午晚体温监测.tgz
tar -xvf node.tar.xz -C /usr/local/node --strip-components 1
解压到指定的目录并去除最外层目录
2.压缩 -zc(压缩)f -zcf
tar -zcf 压缩后的名字 要压缩的文件夹
[root@basenode ~]# tar -zcf test.tgz 409-晨午晚体温监测
2.zip&unzip
安装包
yum install zip unzip -y
1.压缩
zip -r 压缩后的名称 要压缩的文件
2.解压
unzip 文件名
8.网络命令
1.DNS劫持
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
2.网络命令
yum install net-tools -y
安装网络配置模块
没安装之前用
ip addr查看ip地址
安装后
1.ifconfig 查看网络配置信息
2.netstat 查看路由状态
- -anp 查看被监听的端口
- -r 查看核心路由表
[root@basenode ~]# netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default gateway 0.0.0.0 UG 0 0 0 ens33 192.168.188.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
3.ping查看主机能否连同
4.telnet查看端口能否连同
yum install telnet -y
[root@basenode ~]# telnet node01 8888 Trying 192.168.188.101... telnet: connect to address 192.168.188.101: Connection refused
5.curl能直接获取restful API资源
[root@basenode ~]# curl -X GET www.baidu.com
注意:curl功能很强大
3.防火墙
防火墙就是用来保护端口的,防止某些端口被恶意访问
1.查看防火墙状态
systemctl status firewalld
2.禁用防火墙(此次开机有效)
systemctl stop firewalld
3.禁用防火墙(以后每次开机生效)
systemctl disable firewalld
4.开启防火墙
systemctl start firewalld
5.防火墙常用命令
firewall-cmd --state ##查看防火墙状态
firewall-cmd --reload ##重新载入配置
firewall-cmd --get-zones ##列出支持的zone
firewall-cmd --get-services ##列出支持的服务
firewall-cmd --query-service ftp ##是否支持ftp
firewall-cmd --add-service=ftp ##临时开放ftp服务
firewall-cmd --add-service=ftp --permanent ##永久开放ftp服务
firewall-cmd --remove-service=ftp --permanent ##永久移除ftp服务
firewall-cmd --add-port=80/ftp --permanent ##永久开放80端口
firewall-cmd --list-all #查看已配置规则
6.开启一个端口的正确操作
#添加
firewall-cmd --zone=public --add-port=80/tcp --permanent
#重新载入
firewall-cmd --reload
#查看
firewall-cmd --zone=public --query-port=80/tcp
#删除
firewall-cmd --zone=public --remove-port=80/tcp --permanent
4.加密算法
1.不可逆加密算法
数据经过加密后不能通过结果计算出原始数据
hash
md5
2.对称加密算法
秘钥只有一个,即是加密也是解密
不安全
管理麻烦
AES
DES
3.非对称加密算法
公钥和私钥
公钥进行加密
私钥进行解密
加密解密相对较慢
RSA
5.相互免秘钥
从当前主机登录到另一台主机
当前主机生成公钥和私钥,把公钥发送给要免密登录的主机/root/.ssh/authorized_keys
1.生成公钥私钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
2.发送给要免密登录的主机
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.188.101
3.主机名与host校验
不需要手动验证
修改**/etc/ssh/ssh_config**文件
在末尾添加这两行
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
4.互通免秘钥流程
6.日期和时间
1.时间命令
- date 查看当前时间
- date -s 2019-11-11修改日期
- date -s 11:11:11 修改时间
2.时间同步策略
安装时间自动同步组件
yum install ntp -y
同步时间命令
ntpdate cn.ntp.org.cn
3.给本地提供ntp服务
service ntpd start
开启之后可以给本地局域网提供服务
[root@basenode .ssh]# service ntpd start Redirecting to /bin/systemctl start ntpd.service
9.用户-组-权限
1.用户
1.添加用户
useradd libai
会创建同名的组和家目录
2.设置密码
passwd libai
3.删除用户
userdel -r libai
不会删除组
4.切换用户
su libai
5.修改用户信息
usermod -l libai dufu
修改用户名,家目录和组名称不会被修改
usermod -L dufu锁定用户名
usermod -U dufu解锁用户名
6.常用文件
cat /etc/shadow
用户名和密码
cat /etc/passwd
用户名、编号、组编号、家目录、命令目录
普通用户1000+
2.组
1.新建组
groupadd zhangsan
2.删除组
groupdel zhangsan
3.查看组文件
cat /etc/group
最后几条一般为用户组
4.给用户分配组
usermod -g userlist libai
给libai分配主组userlist
usermod -G song libai
给libai分配附属组song
3.用户组权限
drwxr-xr-x
三个一组
第一位的文件类型
r读
w写
x执行
没有的那一位的权限用-表示
常见权限
- "rwx"
- "rw-"
- "r--"
- "r-x"
- "---"
三组含义(UGO)
- 第一组所属用户权限
- 第二组所属组权限
- 第三组其他
简称UGO模型
2.修改用户权限
1.更换文件所属主
语法
chown [-R] ownname:groupname filename
-R递归遍历文件夹
例子:
chown dufu file
-rw-r--r-- 1 dufu root 50 Mar 31 22:48 file
chown :dufu file
只修改G
chown -R dufu:libai shiren
修改该文件夹全部UG
drwxr-xr-x 3 dufu libai 15 Mar 31 23:21 shiren
2.更改UGO模型权限
chmod o+w file
chmod u=rwx,go=rx file
chmod a-x file
chmod o=rx file
3.修改文件所属组
chgrp libai file
更改文件附属组即g模型
chgrp -R dufu shiren
加个**-R**会更改该文件夹下的所有文件
10.重定向和管道
1.|管道
|管道符能够传递参数
grep if
grep强大的搜索工具
cat profile | grep if
2.>重定向
改变默认输出的位置
ll > test
输出的test文件,没有文件则创建
ll >>test
注意:一个箭头是覆盖,两个是追加
ll /op 2>tset
把错误信息输出到test
注意:
- 1>是正常输出可以省略1不写
- 2>是错误输出不可以省略2
王炸:在最后加 2>&1不管是正确还是错误都能输出到文件
王炸:信息黑洞,不要的数据往里扔,把数据输入到**/dev/null**里面
11.linux的系统进程
1.查看进程ps
ps(process status)
1.-ef
[root@basenode ~]# ps -ef | grep baidu root 8072 8051 0 04:45 pts/1 00:00:00 ping www.baidu.com root 8074 7995 0 04:45 pts/0 00:00:00 grep --color=auto baidu
2.-aux
ps -aux | grep baidu
2.查看进程top
3.杀死一个进程kill -9
kill -9 8072
4.后台进程
在指令末尾加&开启后台进程模式
[root@basenode ~]# ping www.baidu.com >> /dev/null 2>&1 & [1] 8087
在当前开启后台进程的主机键入jobs
可以查看后台进程
在指令最前面加nohup 可以挂起程序
[root@basenode ~]# nohup ping www.baidu.com >>/dev/null 2>&1 & [1] 8106
12.软件安装
1.环境变量
系统环境变量:/etc/profile
用户环境变量:~/.bash_profile
2.rpm安装软件
- 首先把rpm安装包上传上去
- rpm -ivh jdk-18_linux-x64_bin.rpm
- rpm -qa 查询所有安装的软件
- rpm -qa |grep jdk
3.卸载软件
rpm -e 软件名
rpm -qa |grep jdk
切记是查询到的软件名
4.配置环境变量
- 查找安装文件位置一般在**/usr**下
- 复制路径
- 修改**/etc/profile或者~/.bash_profile**文件
- 末尾加下面两行代码
- export NAME_HOME=路径
- export PATH=PATH
- source /etc/profile 重新加载文件
5.压缩包安装
- 上传到服务器
- tar -Jxvf node-v16.14.2.tar.xz 解压
- tar -axvf 文件名 自动识别类型解压
- mv node-v16.14.2 /opt 剪切到opt目录
- 配置环境变量
13.yum包管理器
1.查看
yum search 命令或包
yum info 包名 查看此包的信息
yum list 查看最近一周装的包
yum list installed 查看安装过的包
2.更换yum源
wget下载工具使用详解
- 先下载w(web)get包
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 mirrors.aliyun.com/repo/Centos…
- 清空以前的yum源的缓存
- yum clean all
- 获取阿里云的缓存
- yum makecache
3.安装mysql
1.安装mysql依赖
yum install perl net-tools -y
2.卸载mariadb
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
3.下载安装包
wget 官网下载链接tar -xvf 解压
4.移动目录
必须安装到/usr/local/下
mv mysql /usr/local/mysql 移动到指定目录
在mysql下创建data目录
5.添加环境变量
vim /etc/profile 把mysql/bin目录添加到环境变量
ln -s /usr/local/mysql/support_files/mysql.server /etc/init.d/mysql
6.创建用户和组
groupadd mysql
useradd -g mysql mysql
8.初始化mysql
--user=mysql 指定用户(很关键) --basedir=/usr/local/mysql/ 指定安装目录 --datadir=/usr/local/mysql/data/ 指定初始化数据目录
mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
[root@databasenode ~]# mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
2022-04-03T10:44:36.295478Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.28) initializing of server in progress as process 8051
2022-04-03T10:44:36.309932Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-04-03T10:44:37.221356Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2022-04-03T10:44:38.784347Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: PBp*=0hq+yhf
#最后的是临时密码
9.启动服务
service mysql start
9.重置密码
mysql -u root -p
然后键入临时密码
用临时密码登录mysql后
alter user root'@'localhost' identified by '123456';
by后面输入您想设置的密码
10.开启任意端口都能访问
在mysql shell下
1.use mysql;
- select user,host from user;查看端口
- update user set host='%' where user='root'; 把root端口改成全部允许访问
- flush privileges;立即生效
14.三剑客
1.普通三剑客
cut -d ':' -f1,2,3 passwd
以:切分文件前三列
[root@basenode ~]# cut -d ':' -f1,2,3 passwd
root:x:0
bin:x:1
daemon:x:2
sort passwd
- -t ':'按字符切分
- -k 3按第几列排序
- -n 以数字大小排
- -r 逆序
按字典序对数据排序
[root@basenode ~]# sort -t ':' -k3 passwd
先按:切分 按切分后第三位排列
wc 文件名
- -l line
- -w word 按空格分隔单词
- -c char
[root@basenode ~]# wc passwd 22 30 967 passwd
2.三大剑客
1.grep
grep root passwd
- -n 显示行号
- -v 显示不匹配的
- -i 显示不匹配的
- -nvi 不匹配忽略大小写
- -E "[1-9]+"正则表达式匹配
从passwd文件中找到关于root的哪一行
2.sed 文本操作
3.awk 文本操作
2.shell编程
1.编写文件
在文件最开头加
#!/bin/bash
2.执行
- ./hello.sh 必须有执行权限
- sh hello.sh
- source hello.sh
注意source 不会新开一个bash进程
3.shell基础入门
1.变量
#! /bin/bash
age=18 #声明普通变量
readonly name=zhangsan #声明只读变量
echo $name
echo $age
unset age #删除一个变量
echo $age
2.shell字符串
#! /bin/bash
username="yeshifu"
#双引号可以引用变量,跟js有点像用${}或者直接$就能引用
username1="hello ${username}"
#单引号不能使用变量会原文输出
username2='hello ${username}'
echo $username1
echo $username2
#在变量名前面加个#表示字符串长度
echo ${#username2}
#对该字符串切片
echo ${username2:1:5}
3.数组
#! /bin/bash
#定义数组
#注意,每个元素之间是空格不是逗号
favs=("libai" "dufu" "bnaijuyi")
echo ${favs[1]}
#取数组长度
#favs[*]输出所有元素再取#才能正确取数组长度
echo ${#favs[*]}
echo ${#favs[@]}
4.shell的参数传递
shell通过位置参数(positional parameters)来给脚本文件传递参数,就是从命令行中传进来的参数,1, 3... 其中:
- $0 是该脚本文件的名字
- 2 是第 2 个参数...
注意:
- {10}, {12}...
另外,还有几个特殊字符用来处理参数:
| 参数处理 | 说明 |
|---|---|
| $# | 传递到脚本的参数个数 |
| $* | 以一个单字符串显示所有向脚本传递的参数。 |
| $@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
| $$ | 脚本运行的当前进程ID号 |
| $! | 后台运行的最后一个进程的ID号 |
| $- | 显示Shell使用的当前选项,与set命令功能相同 |
| $? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
$* 与 $@ 区别:
- 相同点:都表示引用所有的位置参数;
- 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
5.运算符
Bash支持的运算符有:
- 数学运算符
- 关系运算符
- 布尔运算符
- 逻辑运算符
- 字符串运算符
- 文件测试运算符
数学运算符
| 数学运算符 | 说明 |
|---|---|
| + | 加法 |
| - | 减法 |
| * | 乘法 |
| / | 除法 |
| % | 取余 |
| = | 赋值 |
| == | 相等测试,相等则返回true |
| != | 不相等测试,不相等则返回true |
注意: 乘号*前边必须加反斜杠 \ 才能实现乘法运算
关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字
| 关系运算符 | 说明 |
|---|---|
| -eq | (equal) 检测两个数是否相等,相等则返回 true |
| -ne | (not equal)检测两个数是否相等,不相等则返回 true |
| -gt | (greater than)检测左边的数是否大于右边的,如果是,则返回 true |
| -lt | (lower than) 检测左边的数是否小于右边的,如果是,则返回 true |
| -ge | (greater equal)检测左边的数是否大于等于右边的,如果是,则返回 true |
| -le | (lower equal) 检测左边的数是否小于等于右边的,如果是,则返回 true |
布尔运算符
| 布尔运算符 | 说明 |
|---|---|
| -a | 与运算,两个表达式都为 true 才返回 true |
| -o | 或运算,有一个表达式为 true 则返回 true |
| ! | 非运算,表达式为 true 则返回 false,否则返回 true |
逻辑运算符
| 逻辑运算符 | 说明 |
|---|---|
| && | 逻辑与 |
| II | 逻辑或 |
字符串运算符
| 字符串运算符 | 说明 | 举例 (a="abc" b="def") |
|---|---|---|
| = | 检测两个字符串是否相等,相等返回 true | [ b ] 返回 false |
| != | 检测两个字符串是否相等,不相等返回 true | [ b ] 返回 true |
| -z | 检测字符串长度是否为0,为0返回 true | [ -z $a ] 返回 false |
| -n | 检测字符串长度是否为0,不为0返回 true | [ -n $a ] 返回 true |
| str_name | 检测字符串是否为空,不为空返回 true | [ $a ] 返回 true |
文件测试运算符
文件测试运算符用于检测 Unix 文件的各种属性
| 文件测试运算符 | 说明 |
|---|---|
| -b file | 检测文件是否是块设备文件,如果是,则返回 true |
| -c file | 检测文件是否是字符设备文件,如果是,则返回 true |
| -d file | 检测文件是否是目录,如果是,则返回 true |
| -f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true |
| -g file | 检测文件是否设置了 SGID 位,如果是,则返回 true |
| -k file | 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true |
| -p fill | 检测文件是否是命名管道,如果是,则返回 true |
| -u file | 检测文件是否设置了 SUID 位,如果是,则返回 true |
| -r file | 检测文件是否可读,如果是,则返回 true |
| -w file | 检测文件是否可写,如果是,则返回 true |
| -x file | 检测文件是否可执行,如果是,则返回 true |
| -s file | 检测文件是否为空(文件大小是否大于0),不为空返回 true |
| -e file | 检测文件(包括目录)是否存在,如果是,则返回 true |
注意:``里的内容被当做命令去执行
4.test
test相当于if前置语句等于[ ]是评估的结束
功能:检查文件和比较值
5.流程控制语句
可以参考菜鸟教程
1.if语句
#! /bin/bash
num1=$1
num2=$2
if [ $num1 -lt $num2 ]
then
echo "$num1<$num2"
elif [ $num1 -gt $num2 ]
then
echo "$num1 > $num2"
else
echo "$num1 = $num2"
fi
总结
- 每次判断之后的命令前要加个then
- else不用加then
- 最后一定要用fi结束
2.for循环
#! /bin/bash
numlist=("1" "2" "3" "4")
for item in ${numlist[*]}
do
echo $item
done
#echo ${numlist[@]}
##类c的写法
#! /bin/bash
for(( i=0;i<10;i++))
do
echo $i
done
总结:
- 跟js中的for in很像
- 执行命令前加do
- 结束需要加done
3.while循环
#! /bin/bash
num=0
while (($num<=10))
do
echo $num
let "num++"
done
4.case ... esac
case ... esac 为多选择语句,与其他语言中的 switch ... case 语句类似,是一种多分支选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case ... esac 语句,esac(就是 case 反过来)作为结束标记。
可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。
case ... esac 语法格式如下:
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
5.跳出循环
跟其他语言一样
break
continue
6.shell函数
shell函数跟JavaScript中的函数很相似
不过没有形参和实参
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值
注意,{10}。当n>=10时,需要使用${n}来获取参数。
另外,还有几个特殊字符用来处理参数:
| 参数处理 | 说明 |
|---|---|
| $# | 传递到脚本或函数的参数个数 |
| $* | 以一个单字符串显示所有向脚本传递的参数 |
| $$ | 脚本运行的当前进程ID号 |
| $! | 后台运行的最后一个进程的ID号 |
| $@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
| $- | 显示Shell使用的当前选项,与set命令功能相同。 |
| $? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
#! /bin/bash
function rehobby(){
case $1 in
1)echo "黑丝长腿御姐";;
2)echo "giaogiao";;
*)echo "黑长直yyds";;
esac
return 123
}
read num
rehobby $num
echo $?
shell编程不怎么常用,会写就行,不会再来看看
7.系统任务设置
1.系统启动流程
查看菜鸟教程有详细解释
2.chkconfig
可以查看每个运行级别下服务是否自动开启
3.开机自启动服务
1.rc.local
- 创建存放脚本的文件夹
- mkdir -p /usr/local/scripts
- 在文件夹中创建脚本文件给予执行权限
- 将脚本绝对路径添加到rc.local末行
- 给予rc.local可执行权限
2.chkconfig
-
创建开机自启动脚本
-
vim makedir.sh
-
#! /bin/bash #chkconfig: 2345 88 99 #description:auto_run 脚本命令 -
将脚本拷贝到/etc/init.d/目录下
-
添加到服务
-
chkconfig --add /etc/init.d/makedir.sh
-
reboot
4.定时任务
1.在系统服务中心,crond负责周期任务
systemctl status crond
2.添加任务,编辑当前用户的任务列表
crontab -e
3.语法
crontab [ -u user ] file
或
crontab [ -u user ] { -l | -r | -e }
说明:
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。
参数说明:
- -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
- -r : 删除目前的时程表
- -l : 列出目前的时程表
时间格式如下:
f1 f2 f3 f4 f5 program
#分 时 日 月 周 命令
- 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
- 当 f1 为 *** 时表示每分钟都要执行 program**,f2 为 * 时表示每小时都要执行程序,其馀类推
- 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
- 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
- 当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
使用者也可以将所有的设定先存放在文件中,用 crontab file 的方式来设定执行时间。
4.sleep 5
等待5秒钟
5.写脚本
如果脚本报错,可能是window格式问题
vim 该文件末行模式
set fileformat=unix
8.实践过程中的学习
1.read命令
read 是 Shell 内置命令,用来从标准输入中读取数据并赋值给变量。如果没有进行重定向,默认就是从键盘读取用户输入的数据;如果进行了重定向,那么可以从文件中读取数据。
后续我们会在《Linux Shell重定向》一节中深入讲解重定向的概念,不了解的读者可以不用理会,暂时就认为:read 命令就是从键盘读取数据。
read 命令的用法为:
read [-options] [variables]
options表示选项,如下表所示;variables表示用来存储数据的变量,可以有一个,也可以有多个。
options和variables都是可选的,如果没有提供变量名,那么读取的数据将存放到环境变量 REPLY 中。
| 选项 | 说明 |
|---|---|
| -a array | 把读取的数据赋值给数组 array,从下标 0 开始。 |
| -d delimiter | 用字符串 delimiter 指定读取结束的位置,而不是一个换行符(读取到的数据不包括 delimiter)。 |
| -e | 在获取用户输入的时候,对功能键进行编码转换,不会直接显式功能键对应的字符。 |
| -n num | 读取 num 个字符,而不是整行字符。 |
| -p prompt | 显示提示信息,提示内容为 prompt。 |
| -r | 原样读取(Raw mode),不把反斜杠字符解释为转义字符。 |
| -s | 静默模式(Silent mode),不会在屏幕上显示输入的字符。当输入密码和其它确认信息的时候,这是很有必要的。 |
| -t seconds | 设置超时时间,单位为秒。如果用户没有在指定时间内输入完成,那么 read 将会返回一个非 0 的退出状态,表示读取失败。 |
| -u fd | 使用文件描述符 fd 作为输入源,而不是标准输入,类似于重定向。 |
2.select in循环
select in 循环用来增强交互性,它可以显示出带编号的菜单,用户输入不同的编号就可以选择不同的菜单,并执行不同的功能。
注意,select 是无限循环(死循环),输入空值,或者输入的值无效,都不会结束循环,只有遇到 break 语句,或者按下 Ctrl+D 组合键才能结束循环。
完整实例
select in 通常和 case in 一起使用,在用户输入不同的编号时可以做出不同的反应。
修改上面的代码,加入 case in 语句:
#!/bin/bash
echo "What is your favourite OS?"
select name in "Linux" "Windows" "Mac OS" "UNIX" "Android"
do
case $name in
"Linux")
echo "Linux是一个类UNIX操作系统,它开源免费,运行在各种服务器设备和嵌入式设备。"
break
;;
"Windows")
echo "Windows是微软开发的个人电脑操作系统,它是闭源收费的。"
break
;;
"Mac OS")
echo "Mac OS是苹果公司基于UNIX开发的一款图形界面操作系统,只能运行与苹果提供的硬件之上。"
break
;;
"UNIX")
echo "UNIX是操作系统的开山鼻祖,现在已经逐渐退出历史舞台,只应用在特殊场合。"
break
;;
"Android")
echo "Android是由Google开发的手机操作系统,目前已经占据了70%的市场份额。"
break
;;
*)
echo "输入错误,请重新输入"
esac
done
用户只有输入正确的编号才会结束循环,如果输入错误,会要求重新输入。
3.shell(())
双小括号 (( )) 是 Bash Shell 中专门用来进行整数运算的命令,它的效率很高,写法灵活,是企业运维中常用的运算命令。
注意:(( )) 只能进行整数运算,不能对小数(浮点数)或者字符串进行运算。后续讲到的 bc 命令可以用于小数运算。
Shell (( )) 的用法
双小括号 (( )) 的语法格式为:
((表达式))
通俗地讲,就是将数学运算表达式放在((和))之间。
表达式可以只有一个,也可以有多个,多个表达式之间以逗号,分隔。对于多个表达式的情况,以最后一个表达式的值作为整个 (( )) 命令的执行结果。
可以使用$获取 (( )) 命令的结果,这和使用$获得变量值是类似的。
| 运算操作符/运算命令 | 说明 |
|---|---|
| ((a=10+66) ((b=a-15)) ((c=a+b)) | 这种写法可以在计算完成后给变量赋值。以 ((b=a-15)) 为例,即将 a-15 的运算结果赋值给变量 c。 注意,使用变量时不用加$前缀,(( )) 会自动解析变量名。 |
| a=((a-15)) c=$((a+b)) | 可以在 (( )) 前面加上$符号获取 (( )) 命令的执行结果,也即获取整个表达式的值。以 c=`就不能取得表达式的结果。 |
| ((a>7 && b==c)) | (( )) 也可以进行逻辑运算,在 if 语句中常会使用逻辑运算。 |
| echo $((a+10)) | 需要立即输出表达式的运算结果时,可以在 (( )) 前面加$符号。 |
| ((a=3+5, b=a+10)) | 对多个表达式同时进行计算。 |
在 (( )) 中使用变量无需加上$前缀,(( )) 会自动解析变量名,这使得代码更加简洁,也符合程序员的书写习惯。
4.let 命令
let 命令和双小括号 (( )) 的用法是类似的,它们都是用来对整数进行运算,读者已经学习了《Shell (())》,再学习 let 命令就相当简单了。
注意:和双小括号 (( )) 一样,let 命令也只能进行整数运算,不能对小数(浮点数)或者字符串进行运算。
Shell let 命令的语法格式为:
let 表达式
或者
let "表达式"
或者
let '表达式'
它们都等价于((表达式))。
推荐使用(())替代let
5.tar解压到指定目录并且重名原始目录名
tar -xvf node.tar.xz -C /usr/local/node --strip-components 1
-C 解压到指定目录
--strip-components 1 去除1层目录即最外层目录
6.git安装
1.下载
wget -O git.tar.gz https://github.com/git/git/archive/refs/tags/v2.34.1.tar.gz
从官网上下载最新git版本
2.解压
mkdir git
tar -xvf git.tar.gz
#安装依赖
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker -y
3.编译
cd git
make prefix=/usr/local/git all
4.安装
make profix=/usr/local/git install
5.配置环境变量并重新加载
vim /etc/profile
最末尾添加
export GIT_HOME=/usr/local/git/bin
export PATH=$PATH:$GIT_HTME
重新加载
source /etc/profile
git --version
6.配置git
(1) 配置用户名(提交时会引用)
git config --global user.name “cnj666”
#请把cnj替换成自己的用户名
(2) 配置邮箱(提交时会引用)
git config --global user.email "cnj666@qq.com"
(3) 其他配置
git config --global merge.tool “kdiff3”
#要是没安装KDiff3就不用设这一行
git config --global core.autocrlf false
#让Git不要管windows/Unix换行符转换的事
(4) 编码配置
git config --global gui.encoding utf-8
#避免git gui中的中文乱码
git config --global core.quotepath off
#避免git status显示的中文文件名乱码
git config --list
列出所以配置项
git config --global --unset user.password
删除用户密码
1.生成ssh key
生成密钥对并指定保存路径
ssh-keygen -t rsa -C "你的邮箱" -f ~/.ssh/git_rsa
2.把公钥放到github上面
cat ~/.ssh/git_rsa.pub
把打印的内容直接复制到github上面
3.尝试与github建立连接
ssh-agent bash
ssh -v git@github.com
ssh-agent -s
4.添加ssh私钥
ssh-add ~/.ssh/git_rsa
会出现下面内容
[root@basenode .ssh]# ssh-add ~/.ssh/git_rsa
Identity added: /root/.ssh/git_rsa (/root/.ssh/git_rsa)
5.验证
ssh -T git@github.com
Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.
出现上面内容表示成功