MobaXterm远程连接服务器命令:ssh [email protected]
-- 关于windows
ipconfig
ipconfig /all
-- 【注】 windows命令都是拼接 /
-- 【注】 linux命令都是拼接 -
-- 绝对路径 从根开始的
/etc/services
-- 相对路径 不是从根开始的
etc/services
./test.txt
ro 替换 rw
init=/bin/bash
en_US.UTF-8
zh_CN.UTF-8
ctrl+x
passwd
vi /etc/selinux/config
# enforing-dis
touch /.autorelabel
exex /sbin/init
-- 查看虚拟机型号
cat /etc/redhat-release
-- 查看具体配置
lscpu 或 lsblk
-- 关闭服务器(是关闭的服务器不是Tomcat服务)
Shutdown -h
-- 服务器操作
shutdown -h now -- 立即关机
shutdown -r now -- 立即重启
cd -- 切换目录
cd / -- 根目录
cd ~ -- 家目录:进入home文件夹下面
cd . -- 当前目录
cd .. -- 返回上一层目录
cd - -- 上一次的目录
pwd -- 查看当前目录
ls -al -- 显示目录、文件
find /home -iname 1.sql -- 在目录下搜索文件或目录
locate -- 文件资料库中查找文件
ls -lh -- 人类可见查询
-- 查看全部
ls 或 ll 或 ls -l 或 ls -ls
-- 查看全部
ls -a 点和点点也会显示
ls -A 点和点点不显示 点表示当前目录
touch -- 创建空文件
touch /home/a.txt
touch a b c
mkdir -- 创建空目录
mkdir /usr/java -- 在usr下创建java目录
In -- 创建链接文件
rmdir -- 删除空目录
rm -f -- 删除文件
rm –r filename
rm -rf -- 删除目录
rm -rf filename
cp -- 文件拷贝
cp -r -- 目录拷贝
mv -- 文件、目录移动或者重命名
mv apache-tomcat-8.5.55 /usr/local/tomcat1 -- 移动并重命名
-- lrzsz unzip
联网安装:yum install -y lrzsz unzip
rz -- 上传到linux win -- > linux 直接拖拽(默认拖拽到当前目录)
sz -- 下载文件到win linux -- > win
-- tar包指的是档案文件 (会压缩权限等信息) 推荐
tar –cvf filename_2022.tar filename -- 打tar包的方法
tar –xvf filename_2022.tar -- 解tar包的方法
-- gz包指的是压缩包文件 (压缩之后权限不可读不可写)
tar –czvf filename_2022.tar.gz filename -- 打压缩包的方法
tar –xzvf filename_2022.tar.gz -- 解压缩包方法
-- zip压缩包 【注】linux没有zip解压命令,需要联网下载 yum install unzip
zip –r filename_2022.zip filename -- 打zip压缩包
unzip filename_2022.zip -- 解压zip
/*
缺少GCC都无法安装Nginx、Redis
检查是否有 gcc 编译器 gcc -v
联网安装命令 yum install gcc gcc-c++
*/
-- 压缩并且排除某一个文件夹
tar –czvf apache-tomcat.tar.gz apache-tomcat/ --exclude=webapps/webroot/backup
-- 将/home/html/ 这个目录下所有文件和文件夹打包为当前目录下的html.zip
zip –q –r html.zip /home/html
-- 如果在/home/html目录下,可以执行一下命令
zip –q –r html.zip
# 从linux 192.168.11.150 远程拷贝到window本地d盘myfile文件夹
# 本地打开cmd,输入:
scp root@192.168.11.150:/tmp/pan.in.io.tar.gz d:/myfile
# linux从一台服务器拷贝到另一台服务器
# 打开目标服务器,输入:
scp -r root@192.168.11.150:/root/csv /usr/zhangQY
# 其中[email protected]:/etc/zhangQY.tar是源文件ip信息和路径
scp -r root@192.168.11.150:/etc/zhangQY.tar /tmp
scp /etc/passwd root@192.168.211.152:/tmp
-- 打印当前登录用户
whoami
-- 切换root用户
su root
-- 删除poc用户 【需要登录root最高用户进行操作】
userdel –r poc
-- 添加用户
useradd zhangsan
-- 添加密码
passwd 123456
-- 首先:cd/ ll
-- 给文件夹赋予最高权限
chmod –R 777 logs /app/tomcat/logs
-- 把logs文件夹所有者修改为admin
chown admin logs /app/tomcat/logs
-- 修改当前文件夹下面所有的所有者,进入根目录
chown –R admin /app/tomcat/logs
-- 修改用户组
chgrp appadmin app /app
chown admin /app
-- 改变用户组
chown -R user:group filelist
chown -R.group filelist
-- r4 w2 x1 排除第一个字母,每三个为一组
drwxr-xr-x 三个为一组:代表755
lr-xr-xr-x 三个为一组:代表555
chmod 755 -- 目录权限
chmod 644 -- 普通文件
-- 基于访问控制列表(ACL)授权
setfactl
getfacl
-- SELinux权限
-- 基于应用程序权限
setenforce 0
setenforce 1 -- 开启
-- 配置文件
修改/etc/selinux/config使得SELinux=disabled
-- 基于文件属性的权限
chattr +i file
chattr -i file
chattr +a file
a:append
-- 查找进程号
jps
-- 杀掉进程
kill -9 22433
-- 查找历史命令
history
-- 根据端口号查进程
lsof –i:端口号
-- 根据进程号查看端口号
netstat –anop | grep pid
-- 查看所有启动端口情况
netstat -ntpl
-- 查询根目录文件存储空间空间使用情况
df -Th(人性化) 或 df -h
-- 查询当前文件夹下的内存占用量
du –lh --max-depth=1
-- 查询当前文件夹总大小
du -sh
-- 查询当前文件夹下每个文件的总大小
du -sh *
du -sm -- 以M的单位显示
-- 清理前查看内存使用情况
free –m
-- 切换为root用户清理内存命令
sudo echo 1 > /proc/sys/vm/drop_caches
sudo echo 2 > /proc/sys/vm/drop_caches
sudo echo 3 > /proc/sys/vm/drop_caches
-- 首先,查看tomcat的pid
ps –ef | grep tomcat
-- 其次,cd到jdk的bin目录下,输入:
jstack –l pid > 1.txt -- 【注】这里的-l是小写的字母L 不是数字1)
jstack –l pid > 2.txt -- 每隔三秒打一次,一共打三次,打的时候改文件名
jstack –l pid > 3.txt
-- 最后,到jdk的bin目录下找到这些文件即可
特殊情况 堆栈打完提示-F 意思是没有权限 可以到app下面打堆栈
jstack –l pid >>1.txt
-- 开放8080端口
firewall-cmd --zone=public --add-port=8080/tcp –-permanent
-- 重启防火墙 【注】开放完端口需要重启防火墙
systemctl restart firewalld.service
-- 查看防火墙状态
systemctl status firewalld (Active:inactive(dead)表示防火墙关闭状态)
-- 开启防火墙
systemctl start firewalld (Active:active(running)成功启动)
-- 关闭防火墙
systemctl stop firewalld
-- 查找是否存在tomcat进程
ps –ef | grep tomcat
-- 启动服务器 并且 启动日志文件夹
./startup.sh && tailf ../logs/catalina.out
-- 【注】
查看Tomcat版本号:tomcat/lib/catalina.jar 解压后看MANIFEST.MF文件信息
-- 查看是否设置了JDK环境变量
echo $JAVA_HOME
-- 查看java版本
java –version
-- 查看jdk后台进程
ps –ef | grep java
-- 修改配置文件命令 【注】首先要ESC退出命令框,才可以输入保存或退出命令
vi 或 vim
进入后,按i,屏幕下方会出现insert字样,此时可以修改内容
按ESC,退回命令模式
:x 是保存退出
:q! 是不保存退出
:wq! 保存并退出
-- 修改配置文件之后需要重启配置文件
source /etc/profile
-- linux部署两个tomcat 需要在etc/profile文件下配置tomcat环境变量
#tomcat1
export CATALINA_HOME=/usr/local/tomcat1
export CATALINA_BASE=/usr/local/tomcat1
export TOMCAT_HOME=/usr/local/tomcat1
#tomcat2
export CATALINA_HOME2=/usr/local/tomcat2
export CATALINA_BASE2=/usr/local/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat2
-- 底线命令模式
: set nu 加行号
: set nonu 去掉行号
: s/string/replaced
-- 例:
: 0,$s/string/replaced
: 222/s/string/replaced
:x 存盘退出 = wq
:q! 不存盘退出
! shellcommmd
!! 重复执行上次命令
: r 重新读取
: e 修改下一个文件
-- 命令模式
u: 撤销 恢复
dd 删除一行
5dd 删除5行
10000dd 全删除
-a 并且
p 粘贴
yy 复制
vi source.sh
# !/bin/bash
表达式:
- a 并且
- o 或者
- d 目录
- f 文件
- e
- s 不为空
marriage boy 有房,有车,有存款
if [marriage = "boy"]
if [$1="有房" -a $2="有车" -a $3="有存款"]
then echo "0"
else
then echo "1"
fi
else
then echo "是女孩,暂无判断!"
fi
echo -- 用于将输入的字符串送往标准输出
echo $? -- 表示上一次命令的输出(执行成功,返回值是0;执行失败,返回值是0以外的值)
echo $$ -- 表示当前进程的进程号
# 案例:输出信息到屏幕(标准输出)
[root@master1 home]# echo hellow
hellow
[root@master1 home]# echo {1...10}
{1...10}
[root@master1 home]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
# 案例:输出信息到文件中
# >重定向符号(漏斗),先清空文件内容,然后写入信息
[root@master1 /]# echo {1..10} >/home/zhangQY/test01.txt
[root@master1 /]# cat /home/zhangQY/test01.txt
1 2 3 4 5 6 7 8 9 10
# >>追加重定向符号(漏斗),直接把信息写入到文件结尾
[root@master1 zhangQY]# echo {a..z} >>/home/zhangQY/test01.txt
[root@master1 zhangQY]# cat /home/zhangQY/test01.txt
1 2 3 4 5 6 7 8 9 10
a b c d e f g h i j k l m n o p q r s t u v w x y z
# 输出重定向
> 一个大于号:清空并写入
>> 二个大于号:追加并写入
合并输出流:2>$1 >$2
/dev/null:null设备,永远都是0字节
# 输入重定向
< 一个小于号:文件内容作为输入
<< 二个小于号:eof之间内容作为输入
cat << eof > a
a
b
c
eof
<<< 三个小于号:直接内容作为输入
mysql <<< "select 1;"
# 例:
ls -l 1>screen
# 删除a,并且错误把2打印到2文件 正确的把1打印到1文件
rm a 2>2 1>1
1正确输出 2错误输出
# 查出etc文件夹下面的conf文件,如果有错误全部输入到error,正确的是text
cat /etc/*conf 2>error >text
cat /etc/*conf 2>text >&2
-- cat 显示文件内容
cat /etc/services 显示文件内容
cat 不带文件名称 直接从键盘读取
-- nl 带行号显示文件内容
nl /etc/services 代行号显示文件内容
-- ctrl_c:由系统中断
-- ctrl_d:文件结束,正常终止
-- tac tac同cat相反显示
tac(cat的反序)命令以行为单位反序输出文件内容;即第一行最后显示,最后一行先显示。
输出内容和 cat 命令相反
# head 显示文件前n行(默认显示文件前10行)
# 查看文件头部2行 (两种写法)
head -2 /etc/services
head -n2 /etc/services 或 head -n 2 /etc/services
# tail 显示文件最后n行(默认显示文件最后10行)
# 查看文件尾部2行(两种写法)
tail -2 /etc/services
tail -n2 /etc/services 或 tail -n 2 /etc/services
# 案例:tail实时显示(看日志)
# 窗口01 写入内容
echo abc ab cabc >>/home/zhangQY/test01.txt
# 窗口02 查看内容
tail -f /home/zhangQY/test01.txt
-- 翻页查看文件,特别是文件比较大,比较方便
-- more 查看文件内容,查看到文件结尾自动退出
more /etc/services
-- less 查看文件内容,查看到文件结尾还可以继续查看
-- less和more基本一样,功能比more强大,除了空格换页,上下键也可以滚动
less /etc/services
快速定位到文件第一行 g
快速定位到文件最后一行 G
搜索 /
/ssh
继续向下搜索 n
继续向上搜索 N
退出 q
# 案例01:统计文件的信息
[root@master1 zhangQY]# wc /etc/services
11176 61033 670293 /etc/services
# 案例02: 只显示行数
[root@master1 zhangQY]# wc -l /etc/services
11176 /etc/services
[root@master1 zhangQY]# wc -l /etc/services /etc/passwd
11176 /etc/services
54 /etc/passwd
11230 total
# 案例03:通过wc -l统计个数(通过wc命令 把是否存在-->数字)
ps -ef | wc -l # 显示所有进程数量
# 只查看ssh服务
ps -ef | grep ssh
# 只查看ssh服务 进程数量
ps -ef | grep ssh | wc -l
sort -u -- 去重
sort -n -- 排序
sort -n -r -- 降序
sort -k -- 按列排序
-k 3 -- 指定某一列
-k 3.1 -- 根据第3列的第1个字符排序
-k 3.1,3.2 -- 根据第3列的第1个字符到第2个字符排序
-t -- 指定分隔符(每一列之间通过什么分割)
# 案例01:sort排序数字
[root@master1 zhangQY]# seq 20 | sort
1
10
11
12
13
14
15
16
17
18
19
2
20
3
4
5
6
7
8
9
# 错误原因:sort命令默认按照一位一位(字符)的进行排序 按照1开头,在2开头。。。
# 解决:使用sort -n 选项
seq 20 | sort -n
# 案例02:按照数字逆序排序
[root@master1 zhangQY]# sort -nr /home/zhangQY/test02.txt
1004 zhangsan 10000
1003 zhaoliu 50000
1002 lisi 90000
1001 wangwu 950000
# 案例03:指定某一列进行排序
# sort -n -k3 指定按照第3列排序
[root@master1 zhangQY]# sort -n -k3 /home/zhangQY/test02.txt
1004 zhangsan 10000
1003 zhaoliu 50000
1002 lisi 90000
1001 wangwu 950000
# sort -n -k3 指定按照第1列排序,第3列排序
[root@master1 zhangQY]# sort -n -k1 -k3 /home/zhangQY/test02.txt
1001 wangwu 950000
1002 lisi 90000
1003 zhaoliu 50000
1004 zhangsan 10000
#案例04:ip地址
192.168.3.3
192.168.2.3
192.168.3.4
# 按照第3列,第4列排序(如果第3列相同,则按照第4列排序)
错误示例:sort -t '.' -n k3 k4 /home
正确示例:sort -t '.' -n k3.1,3.1 k4 /home
uniq uniq.txt -- 去重
uniq -c uniq.txt -- 分组统计【这里必须是连续的内容】
# 案例:
unqi.txt文件中的内容如下:
a
a
a
a
b
b
b
c
c
d
# 去重
[root@master1 zhangQY]# uniq uniq.txt
a
b
c
d
# 统计个数 分组统计
[root@master1 zhangQY]# uniq -c uniq.txt
4 a
3 b
2 c
1 d
2
# 注意:以上是因为uniq.txt中的内容aaabbbcc是连续的,如果不连续,怎么写?
# 思路:先排序 在分组统计
sort uniq.txt | uniq
sort uniq.txt | uniq -c
# 案例:
sort ip.txt | uniq -c | sort -nrk1 | head 10
通过sort相同的在一起 | 去重统计次数 | 对次数进行排序 | 取次数最多的前10名
find # 查看当前文件夹下所有文件【默认递归 递归所有】
-type # 查找什么类型的文件 f(file文件)、d(directory目录)、l(softlink软连接 快捷方式)
-name # 指定文件名
-size # 大小或范围 + (大于) - (小于)
-mtime # 修改时间 +7(表示7天之前) -7(表示最近7天)
字节 Byte 1个字节 1个英文状态的字符
1KB = 1024Bytes
1MB = 1024KB = 1024 ^2Bytes
1GB = 1024MB = 1024 ^3Bytes
1TB = 1024GB = 1024 ^4Bytes
1PB = 1024TB = 1024 ^5Bytes
# 查找etc下名称以conf结尾的目录
find /etc -name "*conf" -type -d
# 查找etc下名称以conf结尾的文件
find /etc -name '*conf' -type f
# 大小 查找etc下大于10M的文件
find /etc -size +10M
# 范围 大于10M小于50M
find /etc -size +10M -size -50M
# 时间
find /etc -atime +20 -ctime -20
# xargs 一般和管道一起使用,多命令不支持|管道来传递参数,所以需要使用xargs。一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
# 案例:多行输入单行输出
[root@master1 zhangQY]# cat test02.txt
1004 zhangsan 10000
1002 lisi 90000
1001 wangwu 950000
1003 zhaoliu 50000
[root@master1 zhangQY]# cat test02.txt | xargs
1004 zhangsan 10000 1002 lisi 90000 1001 wangwu 950000 1003 zhaoliu 50000
# 将文件testfile中的小写字母全部转换成大写字母
cat testfile |tr a-z A-Z
# 案例: 把test02中的文件中的1004替换为1005
[root@master1 zhangQY]# cat test02.txt
1004 zhangsan 10000
1002 lisi 90000
1001 wangwu 950000
1003 zhaoliu 50000
[root@master1 zhangQY]# cat test02.txt | tr 1004 1005
1005 zhangsan 10000
1002 lisi 90000
1001 wangwu 950000
1003 zhaoliu 50000
-- grep
env | grep PATH
-i -- 大小写不区分
-l -- 只显示文件名称
-h -- 不显示文件名称
-c -- 匹配的行有多少行
-v -- 取反
-q -- 不显示任何信息
-n -- 显示行号
-o -- 只显示匹配的单词,不显示整行
-r -- 递归
-E -- 扩展正则表达式
env | grep -i PATH -- i表示不区分后面的大小写
find /etc/services |grep -v ^# --查找/etc conf文件中不以#号开头
例:查找etc目录下以conf结尾的文件,如果包含linux,就输出文件名称
grep -i linux `find /etc/ -name "*conf"`
grep -i linux `find /etc/ -name "*conf"` | xargs cat
grep -li linux `find /etc/ -name "*conf"` |xargs cat |wc -l
# sed sed打头对所有的行进行替换
sed -e... -e ...
# 语法:sed 's/ / /g' test
sed 's/ 找到字符 / 替换的字符 /g' test
cat /etc/services |sed 's/[^#]#.*//g'
# 语法:sed -e '[0-9].*$' -e 表示后面拼接表达式
# 案例:删除example文件的第二行
$ sed '2d' example 。
s/ 替换(在前面)
/d 删除(在后面)
/a 增加(在后面):在指定的行上一行增加一行指定内容
修改(在后面)
# 取数 只取第1列
awk '{print $1}'
# 案例:计算etc目录下所有文件大小的总和
find /etc -type -f |xargs ls -l |awk '{sum=sum+$5}end{print sum}'
# 案例:查询etc下面以conf结尾并且文件中包含centos内容 并输出行数
grep -li centos `find /etc -name "*conf"` |wc -l
-- $? 上一次命令的输出(成功:0 失败:除0以外所有值)
echo $?
-- $$ 表示当前进程的进程号
echo $$
-- && 如果第一个命令成功,执行第二个命令
touch a && cat a
-- || 如果第一个命令失败,执行第二个命令
rm a || echo "a not deleted"
(cat a || touch a && cat a) 2>/dev/null
-- $((表达式))
两个圆括号可以直接计算且引用变量
-- $() 表示执行
'' 单引号不解析里面的代码
"" 双引号解析
# `` 相当于子查询
find /etc -name "*conf" -type f -size +2k -exec cp {} . \; 2>/dev/null
cp `find /etc -name "*conf" -type f -size +2k 2>/dev/null`.
rm -f $(ls -l) = rm -f `ls -l`
# 案例:
tar -cvf zhangQY.tar `find /etc -name '*conf' -type f -size +1k`
$SID
$SHELL
$USER
$PATH
%PATH%
PATH路径,环境变量
所有的命令所在的地方
PATH=$PATH
$name:$叫占位符
a=5
echo $a
^ 开头
$ 结尾
[] 范围
-- [a-z|0-9] 在a-z或者0-9之间
-- [^a-z] 不是a-z
-- ^[^a-z] 不是以a-z开头的
-- [a|b] a或者b
. 任意字符串,也可以是0个字符串
{n,m} 重复n到m次
\s 只要出现空白就匹配
\S 非空白就匹配
+ 前面的字符重复1次到无数次
* 前面的字符重读0次到无数次
## 安装ansible
yum install epel-release ## 安装依赖包
yum install ansible
## hosts文件 做分类
[k8s]
192.168.12.134
[middle] # 中间件
192.168.12.134
[host]
192.168.12.134
[all:vars] # vars变量
ansible_ssh_pass='1' ## 免密
cd /etc/ansible
vi ansible.cfg
# 修改配置文件中的forks=5,其中forks参数,表示控制并发数量
## 控制并发数量
ansible -i hosts all -m ping ## ansible -i 指定主机清单
ansible -i hosts k8s -m ping
ansible -i hosts middle -m ping
#第一个 需要上传的文件路径
#第二个 要上传到某个文件路径下
ansible -i hosts all -m copy -a 'src=/etc/hostname dest=/opt'
k8s本质上是去管理容器技术docker(具有代表性)
-- 运维部署业务场景
1.集群架构,至少2台机器,master(主节点)管理节点,node工作节点
master根据维护者,写的yaml,对容器的运行描述,创建具体的容器,到node工作节点
2.该容器管理平台,应该自动识别,目标节点的状态,选择最合适得节点部署到新的容器
3.容器管理平台,能实现确保,应用副本数是否健康,正确的,后端得容器数量
4.容器的负载均衡,反向代理,如何配置(k8s的组件就可以实现)
-- Kubernetes主要由以下几个核心组件组成
api-server 接口
提供了资源操作的唯一入口,并提供认证,授权,访问控制,API注册和发现机制
etcd 数据库
保存了整个集群的状态,分布式高性能数据库。
controller manager 资源管理控制器
负责维护集群的状态,比如故障检测,自动扩展滚动更新等
scheduler 调度器:决定容器部署到那个节点(部署在主节点上)
负责资源的调度,按照预定的调度策略将Pod调度到相应的Node机器上
Kubelet
负责维护容器的生命周期 1。拉取镜像 2.运行容器
Kubectl
在master节点上敲打的命令,就和docker命令一样;客户端命令和api-server交互
Pods 封装一组容器,容器都是被pod管理
Deployment 维护一组容器,由多个pod组成
比如:nginx容器,要求容器数量是4个,挂了2个会自动拉起服务,不需要手动命令开启;
k8s运行的一组nginx容器,基于组件deployment运行的一组保证容器的副本数量
1.pod运行状态概念
waiting(等待) running(运行中) terminated(已终止)
2.label标签概念
node打标签,作用于部署pod
比如:创建mysql-pod的node选择器 描述k8s所有的配置文件都是走yaml语法
写yaml,描述mysql-pod如何部署时,加入一个条件,nodeSelector,节点选择器,diskType:ssd
3.namespace(资源组) 名称空间
k8s在创建资源的时候,可以单独创建一个资源
kubectl create namespace crm-all nginx
mysql
php
这一类pod都属于crm-all这个资源组
增删改查,都得制定在crm-all才能创建,删除,查看
kubectl get pod # 查看当前默认资源组下,有多少个pod
kubectl -n crm-all get pod # 查看crm-all资源组下有多少个pod信息