Skip to content

Latest commit

 

History

History
947 lines (610 loc) · 27.1 KB

File metadata and controls

947 lines (610 loc) · 27.1 KB

Linux

网络连接的三种方式

  1. **桥接模式:**虚拟系统可以和外部系统通讯,但是容易造成IP冲突
  2. **NAT模式:**网络地址转换模式,虚拟系统可以和外部系统通讯,不造成IP冲突。但是外部系统无法和虚拟系统通讯
  3. **主机模式:**独立的系统,不和外部系统通讯

虚拟机快照

目录结构

级层式的树状目录结构

“在Linux世界里,一切皆文件”

Linux会把硬件映射成文件来进行管理

[root@Jomo01 ~]# useradd jack
[root@Jomo01 ~]# userdel -r jack

远程登录

vi和vim编辑器

关机、重启和用户登录注销指令

su jomo #切换到jomo用户
exit #退出jomo用户到root
exit #再exit就是退出shell回话了

用户管理

指定运行级别

找回root密码

帮助指令

文件目录指令

时间日期类

查找指令

压缩和解压

Linux组的介绍

所有者

所有组

修改所在组

Linux_rwx权限

案例:

[root@Jomo01 home]# groupadd police && groupadd bandit
[root@Jomo01 home]# useradd -g police jack && useradd -g police jerry
[root@Jomo01 home]# useradd -g bandit xh && useradd -g bandit xq
[jack@Jomo01 home]$ cd ~
[jack@Jomo01 ~]$ vim jack.txt
[jack@Jomo01 ~]$ ll
总用量 4
-rw-r--r--. 1 jack police 6 4月  16 15:16 jack.txt
[jack@Jomo01 ~]$ chmod 640 jack.txt
[jack@Jomo01 ~]$ ll
总用量 4
-rw-r-----. 1 jack police 6 4月  16 15:16 jack.txt
[jack@Jomo01 ~]$ chmod o=r,g=r jack.txt
[jack@Jomo01 ~]$ ll
总用量 4
-rw-r--r--. 1 jack police 6 4月  16 15:16 jack.txt
[jack@Jomo01 ~]$ chmod o=r,g+w jack.txt
[jack@Jomo01 ~]$ ll
总用量 4
-rw-rw-r--. 1 jack police 6 4月  16 15:16 jack.txt

[root@Jomo01 home]# groupadd sx
[root@Jomo01 home]# groupadd yg
[root@Jomo01 home]# useradd ts
[root@Jomo01 home]# useradd wk
[root@Jomo01 home]# useradd bj
[root@Jomo01 home]# useradd ss
[root@Jomo01 home]# passwd ts
[root@Jomo01 home]# passwd wk
[root@Jomo01 ~]# passwd bj
[root@Jomo01 ~]# passwd bj
[root@Jomo01 ~]# usermod -g yg wk
[root@Jomo01 ~]# usermod -g yg bj
[root@Jomo01 ~]# usermod -g sx ts
[root@Jomo01 ~]# usermod -g sx ss
[root@Jomo01 ~]# su wk
[wk@Jomo01 root]$ cd ~
[wk@Jomo01 ~]$ vim monkey.java
[wk@Jomo01 ~]$ ll
总用量 4
-rw-r--r--. 1 wk yg 12 4月  16 15:41 monkey.java
[wk@Jomo01 ~]$ chmod g+w monkey.java

对文件夹的rwx:
r:可以使用ls指令展示目录
w:可以对文件夹增删
x:bj和wk是同一个组,如果wk对同组人只开启执行权限x,那么bj进入wk目录后,无法展示目录文件,但是依然可以读写文件

Linux_crond快速入门

应用实例

案例1:
#编辑crond任务调度
crontab -e
#每隔1分钟就将date重定义输出到mydate文件里,内容如下
*/1 * * * * date >> /tmp/mydate

案例2:
#1.写一个shell脚本my.sh,内容如下:
date >> /home/mycal
cal >> /home/mycal
#2.目前没有my.sh的执行权限,手动添加,x就是执行权限
chmod u+x my.sh
#3.执行my.sh,home目录下出现mycal文件
./my.sh
#4.目标:每隔一分钟执行一次my.sh
crontab -e
#内容如下:
*/1 * * * * /home/my.sh

案例3:
#1.编辑crond
crontab -e
#2.内容如下:(0 2)->(2时0分,24h制)
0 2 * * * mysqldump -u root -proot testdb > /home/db.bak

Linux_at任务调度机制

#检测atd是否在运行
ps -ef | grep atd

应用实例

案例1:
at 5pm + 2 days
#输入
at> /bin/ls /home
#输入后,连续输入ctrl+d两次!!
#输出
at> /bin/ls /home<EOT>
job 1 at Wed May  3 17:00:00 2023

案例2:
#查询
atq
#输出
1	Wed May  3 17:00:00 2023 a root

案例3:
at 5pm tomorrow
#输入
at> date > /root/date.log
#输出
at> date > /root/date100.log<EOT>
job 3 at Tue May  2 17:00:00 2023

案例4:
at now + 2 minutes
#输入
at> date > /root/date200.log
#输出
at> date > /root/date200.log<EOT>
job 4 at Mon May  1 10:49:00 2023

案例5:
#删掉编号是1的任务
atrm 1

总结:

  • crond任务调度是周期性的
  • at任务调度是一次性的

Linux_磁盘分区机制

Linux_增加磁盘应用实例

磁盘情况查询

Linux_NAT网络原理图

Linux_进程管理

终止指定进程输入进程ID后,还需要输入信号量,输入9强制终止

如果用户退出后,连接不会立马断掉,因为TCP协议下,外部端口可能会认为是网络延迟导致没有信息收发,所以会从ESTABLISHED转成TIME_WAIT,超时了才会断开

Linux_RPM与YUM

image-20230519154918363

image-20230519155235133

image-20230519155552871

image-20230519155835363

image-20230519165254693

image-20230519165921877

Linux_搭建环境

搭建JavaEE环境

image-20230520144754048

9.注意后面还要加上原先的PATH,即¥PATH

10.注意需要让新的环境变量失效

image-20230520145824270

image-20230520172902502

安装mysql注意事项:

1.解压后,会出现一系列rpm安装包,但是centos有自带的默认数据库mariadb,需要先删掉

2.手动启动mysqld服务

3.root默认密码是随机的,输入grep "password" /var/log/mysqld.log获取默认密码

Linux_Shell编程

image-20230523151258042

image-20230523151752851

image-20230523152518871

#!/bin/bash
#案例1:定义变量A,等号左右不能有空格
A=100
#输出变量需要加上$
echo A=$A
echo "A=$A"

#案例2:撤销变量A
unset A
echo "A=$A"

#案例3:声明静态的变量B=2,不能unset
readonly B=2
echo "B=$B"
unset B

#./var.sh输出如下:
[root@Jomo100 shcode]# vim var.sh
[root@Jomo100 shcode]# ./var.sh 
A=100
A=100
A=
B=2
./var.sh: 第 15 行:unset: B: 无法反设定: 只读 variable

image-20230523152831954

image-20230523153911705

image-20230523154303083

#~/bin/bash
echo "0=$0 1=$1 2=$2"
echo "所有的参数$*"
echo "$@"
echo "参数的个数=$#"

[root@Jomo100 shcode]# ./myshell.sh 100 200
0=./myshell.sh 1=100 2=200
所有的参数100 200
100 200
参数的个数=2

image-20230523154751946

#!/bin/bash
echo "当前执行的进程id=$$"
#以后台的方式运行一个脚本,并获取它的进程号
/root/shcode/myshell.sh &
echo "最后一个后台方式运行的进程id=$!"
echo "执行的结果是=$?"

[root@Jomo100 shcode]# ./preVar.sh 
当前执行的进程id=9219
最后一个后台方式运行的进程id=9220
执行的结果是=0
0=/root/shcode/myshell.sh 1= 2=
所有的参数

参数的个数=0

image-20230524164933807

#!/bin/bash
#案例1:计算(2+3)×4的值
#使用第一种方式
RES1=$(((2+3)*4))
echo "RES1=$RES1"
#使用第二种方式,推荐使用
RES2=$[(2+3)*4]
echo "RES2=$RES2"
#使用第三种方式expr
TEMP=`expr 2 + 3`
RES3=`expr $TEMP \* 4`
echo "RES3=$RES3"

#案例2:请求出命令行的两个参数[整数]的和 20 50
SUM=$[$1+$2]
echo "SUM=$SUM"


[root@Jomo100 shcode]# ./oper.sh 20 50
RES1=20
RES2=20
RES3=20
SUM=70

image-20230524165241380

image-20230524170459001

#!/bin/bash
if [ "ok" = "ok" ]
then
        echo "equal"
fi

if [ 23 -ge 22 ]
then
        echo "ge"
fi

if [ -f /root/shcode/aaa.txt ]
then
        echo "exist"
fi


[root@Jomo100 shcode]# ./ifdemo.sh 
equal
ge
[root@Jomo100 shcode]# touch aaa.txt
[root@Jomo100 shcode]# ./ifdemo.sh 
equal
ge
exist

image-20230524171237751

#!/bin/bash
if [ $1 -ge 60 ]
then
        echo "及格了"
elif [ $1 -lt 60 ]
then
        echo "不及格"
fi

[root@Jomo100 shcode]# ./ifCase.sh 70
及格了
[root@Jomo100 shcode]# ./ifCase.sh 50
不及格

image-20230524171739491

#!/bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac

[root@Jomo100 shcode]# ./testCase.sh 1
周一
[root@Jomo100 shcode]# ./testCase.sh 2
周二
[root@Jomo100 shcode]# ./testCase.sh 3
other
[root@Jomo100 shcode]# ./testCase.sh 4
other

image-20230524172431360

#!/bin/bash
#$*是把输入的参数当作一整个,所以只会输出一句话
for i in "$*"
do
        echo "num is $i"
done

echo "====================================="

#$@是把输入的参数区别对待,有几个参数就输出几句
for i in "$@"
do
        echo "num is $i"
done

[root@Jomo100 shcode]# ./testFor1.sh 100 200 300
num is 100 200 300
=====================================
num is 100
num is 200
num is 300


#!/bin/bash
SUM=0;
for((i=1;i<=100;i++))
do
        SUM=$[$SUM+$i]
done
echo "SUM=$SUM"

[root@Jomo100 shcode]# ./testFor2.sh
SUM=5050


#!/bin/bash
SUM=0;
for((i=1;i<=$1;i++))
do
	SUM=$[$SUM+$i]
done
echo "SUM=$SUM"

./testFor2.sh 100
SUM=5050

image-20230524173758817

#!/bin/bash
i=1;
SUM=0;
while [ $i -le $1 ]
do
	SUM=$[$SUM+$i]
	i=$[$i+1]
done
echo "SUM=$SUM"

[root@Jomo100 shcode]# ./testWhile.sh 100
SUM=5050

Linux_read获取输入

image-20230602215407398

#!/bin/bash
#案例1:读取控制台输入一个NUM1值
read -p "请输入一个数NUM1=" NUM1
echo "你输入的NUM1=$NUM1"
#案例2:读取控制台输入一个NUM2值,在10秒内输入
read -t 10 -p "请输入一个数NUM2=" NUM2
echo "你输入的NUM2=$NUM2"

Linux_系统函数

image-20230602215811180

image-20230602215905734

image-20230602220316955

#!/bin/bash
function getSum(){
        SUM=$[$n1+$n2]
        echo "SUM=$SUM"
}

#输入两个值
read -p "请输入一个数n1=" n1
read -p "请输入一个数n2=" n2

#调用自定义函数
getSum $n1 $n2

Linux_定时备份数据库

image-20230602221123252

mysql_back_db.sh

#!/bin/bash
#备份目录
BACKUP=/data/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME
#数据库的地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=12onetwo
#备份的数据库名
DATABASE=jomoedu

#创建备份目录,如果不存在就创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"

#备份数据库
mysqldump  -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz

#将文件处理成tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
#删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}

#删除10天欠的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "备份数据库${DATABASE}成功~"

crontab -e

30 2 * * * /usr/sbin/mysql_db_backup.sh

Linux_Python定制篇

image-20230605171016051

image-20230605171708356

image-20230605174043080

image-20230605175144762

image-20230605175154870

image-20230605175746529

Linux_centos8

image-20230613235839036

Linux_日志

image-20230614222114624

image-20230614234030785

image-20230614234852286

image-20230614234551840

通过提取日志信息的关键字来分类不同日志的记录文件

image-20230614235057158

image-20230614235108492

image-20230615000642033

image-20230621170953200

image-20230621171055350

image-20230621171234269

image-20230621171309528

image-20230621171624501

image-20230621172117095

Linux_定制自己的Linux系统

image-20230621172422271

image-20230621172654123

Linux_内核源码

image-20230621225114445

image-20230621225349164

Linux_面试题

image-20230621233029739

第一题:

image-20230621233205379

image-20230621233245787

image-20230621233320662

第二题:

image-20230621233632265

image-20230621233749619

第一题,忘记mysql登录密码:

image-20230621233950763

image-20230621234007793

image-20230621234029224

输入空密码就可以进入

image-20230621234055188

image-20230621234115475

接下来,注销第一步my.cnf里的跳过mysql登录验证权限,然后继续重启mysqld

第二题:

image-20230621234548867

第三题:

image-20230621235044456

image-20230621235144134

image-20230622001758482

image-20230622005532523

image-20230622010756184

image-20230622011239884

image-20230622011631246

image-20230622011912574

image-20230622012518830