学习视频:https://www.bilibili.com/video/BV1Sv411r7vd/
记录笔记不易,感谢点赞哦❤️
Linux和Unix的联系:
安装VMware 破解版:
在VMware上安装Linux
分区:
Linux服务器是共享的
通过Linux进行项目的管理或开发
语法:
vim 指定的文件 :打开指定的文件
关机 / 重启之前运行sync
基本语法
useradd 用户名
默认该用户目录在/home/用户名
指定新用户的位置:
useradd -d 指定位置 用户名
passwd 用户名
userdel 用户名
userdel - r 用户名 : 删除用户以及该用户目录下的所有文件
id root :查看root的信息
id 用户名
切换管理员身份:su -用户名
su root 切换到管理员
logout:从管理员退回到客户用户(权限低一级的用户)
su 用户名 :切换到其他的普通用户下
who am I
whoami
对有共性 / 权限的多个用户进行统一的管理
groupadd 组名
groupdel 组名
useradd -g 用户组 用户名
添加zwj,到wudang组中
useradd -g wudang zwj
usermod -g 用户组 用户名
init[0,1,2,3,4,5,6]
查看当前的运行级别:
systemctl get-default
查看指定目标的运行级别
systemctl set-default TARGET.target
systemctl set-default mutl.target :3
systemctl set-default graph.target :5
[跟着文档来操作](E:\Linux\take notes\linux找回root密码.pdf)
man:获得帮助信息
man[命令或配置文件]
help:获得shell内置命令的帮助信息
help
查看另一个文档
创建文件的用户,就是该文件的所有者
查看文件的所有者
ls -ahl
修改文件的所有者
chown 用户名 文件名
查看文件 / 目录所在组
ls -ahl
groupadd 组名
案例:
groupadd master
useradd -g maser for
chgrp 组名 文件名
除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组
usermod -g 新组名 用户名
usermod -d 目录名 用户名 改变该用户登录的初始目录。具有进入到新目录的权限
数字表示权限:r =4 , w = 2 , x = 1
u :所有者 g:所有组 o:其他人,a:所有人(u、g、a的总和)
chmod u+r/w/x 指定的文件 添加权限
chmod u-r/w/x 指定的文件 去除权限
chmod u=r/w/x 指定的文件 复制权限
chmod u+r,g-r ,o+w 指定文件 三部分人的权限
chmod u=rwx,g=rx,o=rx 文件
chmod u=rwx,g=rx,o=rx 文件
chmod 755 文件
chown newowner 文件/目录 改变所有者
chown nerowner:newgroup 文件/目录 改变所有者和所在组
-R 向下递归子文件
chown -R tom /home/test
chgrp newowner 文件/目录
chgrp tom 文件/目录
chgrp -R tom 文件/目录 :递归向下修改
用户:
创建组
groupadd police
groupadd brandit
创建用户
useradd -g police jack
useradd -g police jerry
useradd -g bandit xh
useradd -g bandit xq
jack 创建一个文件,自己可以读r写w,本组人可以读r,其它组没人任何权限
jack登录
touch jack.txt
chmod 640 jack.txt
jack 修改该文件,让其它组人可以读,本组人可以读写
chmod o=r,g=r jack.txt
xh投靠警察,看看是否可以读写
usermod -g police xh
crontab [选项]
选项:
每一分钟执行一次
*/1 * * * * ls -l /etc/ > /tmp/to.txt
五个占位符的说明:
特殊符号意思:
特定时间执行任务
案例:
每隔一分钟,将当前的日期信息,追加到/tmp/mydate 文件中
*/1 * * * * date >> /tmp/mydate
每隔一分钟,将当前的日期和日历追加到/home/mycal 文件中 (使用脚本来执行)
(1) 编写脚本文件
vim /home/my.sh 代码:date >> /home/mycal 、cal >> /home/mycal
(2) 给my.sh增加执行权限,
chmod u+x my.sh
(3) 设置定时
crontab -e 添加内容:*/1 * * * * /home/my.sh
每天凌晨 2:00 将mysql 数据库testdb ,备份到文件中。
(1)设置定时
crontab -e
添加代码内容
0 2 * * * mysqldump -u root -proot testdb > /home/db.bak
at 命令格式
at [选项] [时间]
Ctrl + D 结束at命令的输入
选项
案例:
2天后的下午5点执行/bin/ls/home
atq命令来查看系统中没有执行的工作任务
明天17点钟,输出时间到指定文件内 比如/root/date100.log
2分钟后,输出时间到指定文件内 比如/root/date200.log
Linux 的硬盘主要有
IDE硬盘
标识符:hdx~
SCSI硬盘
标识符:sdx~
查看设备挂载情况
lsblk
lsblk -f
虚拟机添加硬盘
分区
fdisk /dev/sdb
开始对/sdb分区:依次输入以下
m:显示命令列表
p:显示磁盘分区 同 fdisk -l
n:新增分区
d:删除分区
w:写入并退出
说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。
格式化
mkfs -t ext4 /dev/sdb1
挂载
mount 设备名称 挂载目录
mount /dev/sdb /newdisk
umount 设备名称/挂载目录
umount /dev/sdb1
umount /nwedisk
umount :卸载挂载
设置自动挂载
永久挂载:通过修改/etc/fstab实现挂载
vim /etc/fstab
添加完成后执行mount -a即刻生效
df -h
du -h
查看opt目录深度为1
du -hac --max-depth=1 /opt
全格式显示当前所有的进程,查看进程的父进程
ps -ef :全格式显示当前所有的进程
基本语法
kill [选项] 进程号 :通过进程号杀死进程
killall 进程名称 填过进程名称杀死进程,也支持通配符
选项:
-9:强制杀死进程
杀死sshd之后,再次重启sshd服务
/bin/systemctl start sshd.service
终止多个gedit
killall gedit
pstree [选项]
service 服务名 [start | stop |restrat |reload |status]
关闭端口监听;service network stop
打开端口监听:service network start
查看服务名
setup
7中运行级别
开机流程
给服务的运行级别设置自 启动/关闭
查看服务
chkconfig --list [|grep xxx]
chkconfig 服务名 --list
chkconfig --level 0/1/2/3/4/5 服务名 on/off :将服务在指定的级别关闭或启动
服务在 /usr/lib/systemd/system查看
systemctl 服务名 [start | stop |restrat |reload |status]
systemctl设置服务的自启动状态
打开或关闭指定的端口
top 和 ps
top [选项]
在进入top 下:输入
netstat [选项]
netstat -anp | more
查看sshd 的服务信息
netstat -anp | grep sshd
检测主机链接命令ping
简单查询:rpm -qa | grep xx
语句
rpm -e RPM包名称
rpm -ivh RPM包全路径名称
基本指令
yum查询服务器是否需要的软件
yum list | grep XXX
安装
yum install xxx 下载安装
虚拟机链接网络
Windows下
ipconfig
Linux 下
ifconfig
IP在同一个网关才可以ping通
ping ip地址
自动获取
指定ip
vim /etc/sysconfig/network-scriipts/ifcfg-ens33
(1)在里面修改成如下
添加的内容:
#IP
IPADDR=192.168.20.132
#网关
GATEWAY=192.168.20.2
#域名服务器
DNS1=192.168.20.2
(2):修改虚拟机的子网网关,要与Linux一致
网关就上面设置的网关
(3) 重启网络服务或者重启系统生效
service network restart 、reboot
从Linux链接Windows时需要关闭网络防火墙
hostname :查看主机名
windows
linux
保存位置
/var/log/ 该目录就是系统常用的日志文件
红色的为重点掌握
CentOS7.6日志服务是rsyslogd,CentOS6.x日志服务是syslogd。rsyslogd功能更强大。rsyslogd的使用、日志文件的格式,和syslogd服务兼容的。原理示意图
查询Linux 中的rsyslogd 服务是否启动
ps aux | grep "rsyslog" | grep -v "grep"
grep -v :改变匹配的意义,只选择不匹配的行
查询 rsyslogd 服务的自启动状态
systemctl list-unit-files | grep rsyslog
编辑文件时的格式:*.*
存放日志文件
日志类型
日志级别
查看日志secure
/var/log/secure
在 /etc/log/的rsyslog.log 编写自己想要的日志服务信息
日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除
配置文件参数:
journalctl可以查看内存日志
journalctl :查看全部
journalctl -n 3 :查看最新3条
journalctl --since 19:00 --until 19:10:10 :查看起始时间到结束时间的日志可加日期
journalctl -p err :报错日志
journalctl -o verbose :日志详细内容
journalctl _PID=1245 _COMM=sshd :查看包含这些参数的日志(在详细日志查看)
journalctl l grep sshd
注意: journalctl查看的是内存日志,重启清空
在Linux的启动流程中,加载内核文件时关键文件:
【[看文档操作](E:\Linux\take notes\制作自己 mini linux.pdf)】
将需要的文件用tar打包,恢复时解压并覆盖就可以
使用dump 和restore
需先安装好这两个
yum -y install dump
yum -y install resrore
dump支持分卷和增量备份(所谓的增量备份就是上次备份后 修改/增加过的文件 ,也是差异备份)
案例:
将/boot分区所有内容备份到/opt/boot.bak0.bz2文件中,备份层级为“0"
dump -0uj -f /opt/boot.bak0.bz2 /boot
在/boot目录下增加一个文件,备份层级为“1”(只备份上次使用层次“O”备份后发生过改变的数据),注意比较看看这次生成的备份文件boot1.bak有多大
dump -1uj -f /opt/boot.bak1.bz2 /boot
通过dump命令在配合crontab可以实现无人值守备份
dump -W :查看备份的文件,以及最后一次备份的层级
查看备份时间文件
cat/etc/dumpdates
dump 备份目录或者文件,是不支持增量备份的,只能使用0级别进行备份,将文件上次到其他服务器
基本语法
restore [模式选项] [选项]
restore -C -f /opt/boot.bak1.bz2 进行恢复比较,和现在当前的文件进行比较
restore -r -f /opt/boot.bak0.bz2 进行还原恢复
restore -r -f 备份的文件 还原备份的文件/目录
下载地址
wget http://prdownloads.sourceforge.net/webadmin/webmin-1.997-1.noarch.rpm
安装指令
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
安装完成
==================================================================
Congratulations! Installed successfully!
==================================================================
外网面板地址: http://113.16.28.154:8888/c6d9af34
内网面板地址: http://192.168.20.132:8888/c6d9af34
username: jo4h5ky9
password: 1fd9ba16
If you cannot access the panel,
release the following panel port [8888] in the security group
若无法访问面板,请检查防火墙/安全组是否有放行面板[8888]端口
==================================================================
Linux入侵检测& 权限划分&系统优化
审计指令
last:这个命令可用于查看我们系统的成功登录、关机、重启等情况;这个命令就是将/var/log/wtmp文件格式化输出。
lastb:这个命令用于查看登录失败的情况;这个命令就是将/var/log/btmp文件格式化输出。
lastlog:这个命令用于查看用户上一次的登录情况;这个命令就是将/var/log/lastlog文件格式化输出。
who:这个命令用户查看当前登录系统的情况;这个命令就是将/var/log/utmp文件格式化输出。
w:与who命令一致。
日志查看
用户查看
进程查看
其他
权限划分
系统优化
分析日志t.log(访问量),将各个ip地址截取,并统计出现次数,并按从大到小排序
http://192.168.200.10/index1.html
http://192.168.200.10/index2.html
http://192.168.200.20/index1.html
http://192.168.200.30/index1.html
http://192.168.200.40/index1.html
http://192.168.200.30/order.html
http://192.168.200.10/order.html
首先把这些网站放入一个文件当中
vim interview.txt
cat interview.txt | cut -d '/' -f 3 |sort | uniq -c | sort -nr
统计连接到服务器的各个ip情况,并按连接数从大到小排序
netstat -an | grep ESTABLISHED | awk -F " " '{print $5}' | cut -d ":" -f 1 | sort | uniq -cl sort -nr
步骤:
mdir /opt/jdk
实用xftp7上传到/opt/jdk
解压tar -zxvf jdk1.8.0_333-linux-x64.tar.gz
mkdir /usr/local/java
mv /opt/jdk/jdk1.8.0_333 /usr/local/java
配置环境变量的配置文件 vim /etc/profile
进入了profile 之后,在文件的最后添加以下两句
$JAVA_HOME/bin: $
PATHsource /etc/profile [让文件生效] (刷新环境变量)
测试是否安装成功
步骤:
步骤:
测试:http://linuxip:8080
方法一 (https://blog.csdn.net/bai_shuang/article/details/122939884)
方法二:
https://blog.csdn.net/mqingo/article/details/84974535
https://blog.csdn.net/mqingo/article/details/83866618
开放 3306端口
格式要求 :
执行方式
赋予权限 +x 执行权限
chmod u+x(u用户执行权限、g、o) 文件名
sh+脚本
sh hello.sh
系统变量
$ HOME
、 $PWD
、$SHELL
等
显示当前shell中所有变量:set
用户自定义变量
定义变量语法:
变量 = 值
撤销变量
unset 变量
声明静态变量
readonly 变量
讲命令的结果返回赋值变量
C=`date`
D=$(cal)
echo "C=$C"
echo "D=$D"
语法
export 变量名=变量值 :讲shell变量输出为环境变量/全局变量
source 文件名 :让修改后的配置信息生效
echo $变量名 :查询环境变量的值
shell多行注释语句
:<
./myshell 100 200
基本语法
n : n 为数字, ‘ n :n为数字,` n:n为数字,‘0代表命令本身,
$1- 9 ‘ 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含:如 ‘ 9`代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含:如` 9‘代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含:如‘{10}`
∗ :命令行中的所有参数, ‘ *:命令行中的所有参数,` ∗:命令行中的所有参数,‘*` 把所有的参数看错一个整体
@ :命令行中所有的参数, ‘ @:命令行中所有的参数,` @:命令行中所有的参数,‘@` 把每一个参数区分对待
$#:代表命令行中所有参数的个数
基本语法
基本语法
( ( 运算式 ) ) 或 ‘ ((运算式)) 或 ` ((运算式))或‘[运算式]` 或 expr m + n //expression 表达式
# 计算(2+4)*4
#方式一
RES=$(((2+4)*4))
echo "RES1=$RES"
#方式二
RES=$[(2+4)*4]
echo "RES2=$RES"
#方式三
TEMP=`expr 2 + 3`
RES=`expr $TEMP \* 4`
echo "TEMP1=$RES"
# 计算两个参数求和
SUM=$[$1+$2]
echo "sum=$SUM"
./myshell.sh 20 30(传参数)
基本语法
[ condition ] #前后有空格
判断 “kkk"是否等于"kkk”
if [ "KKK" = "KKK" ]
then
echo "equal"
fi
判断 12是否大于等于15
if [ 12 -ge 15 ]
then
echo "大于了"
fi
判断文件是否存在指定路径
if [ -f /usr/a.txt ]
then
echo "存在该文件"
fi
if 判断
if [ 条件判断式 ]
then
代码块
fi
if [ 条件判断式 ]
then
代码块
elif [ 条件 ]
then
代码块
fi
例子
#!/bin/bash
if [ $1 -ge 60 ]
then
echo "及格了"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
case语句
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支.…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
实例:
#!/bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other day ..."
;;
esac
for循环
基本语法1
for 变量 in 值1 值2 值n...
do
程序/代码
done
基本语法2
for ((初始值;循环控制条件;变量变化))
do
程序/代码
done
案例
$*
、$@
)#!/bin/bash
for i in "$*"
do
echo "num is $i"
done
#!/bin/bash
for j in "$@"
do
echo "num is $j"
done
$*
是把所有参数看作一个整体$@
把每一个参数分开100的累加
#!/bin/bash
SUM=0
for (( i=1;i<=100;i++))
do
SUM=$[$SUM+$i]
done
echo "sum= $SUM"
# 指定数字的累加求和
for (( i=1;i<=$1;i++))
do
SUM=$[$SUM+$i]
done
echo "sum= $SUM"
while 循环
基本语法
while [ 条件判断 ] # []里面左右两侧有空格
do
代码
done
#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "sum=$SUM"
基本语法
read (选项)(参数)
#!/bin/bash
# 读取控制台的输入的一个num1值
read -p "请输入一个数num1=" NUM1
echo "您输入 NUM1 =$NUM1"
# 读取控制台的输入的一个num1值,在10秒内输入
read -t 10 -p "请输入一个数num2=" NUM2
echo "您输入的NUM2=$NUM2"
basename基本语法
功能返回完整路径最后 / 的部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix]
(功能描述:basename命令会删掉所有的前缀包括最后一个(‘T)字符,然后将字符串显示出来。
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
dirname
不包括文件名字的,只有目录
[ function ] funname[()]
{
Action;
[retuen int;]
}
# 调用函数名
funname [值]
案例:计算输入两个参数的和
function getSum(){
SUM=$[$n1+$n2]
echo "和为:$SUM"
}
# 输入两个数
read -p "请输入一个数n1=" n1
read -p "请输入一个数n2=" n2
#调用自定义函数
getSum $n1 $n2
mysql_db_backup.sh
#!/bin/bash
#备份的目录
BACKUP=/date/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H:%M:%S)
echo "$DATETIME"
#数据库地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=123456
#备份的数据库名
DATABASE=studydemo
#创建备份目录,如果不存在就创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
#备份数据库
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --datebases ${DATABASE} | gzip > "${BACKUP}/${DATETIME}/$DATETIME.tar.gz"
#将文件处理成tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
#删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}
#删除十天以前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm {} \;
echo "成功备份数据库 ${DATABASE}!!"
每天2:30执行文件
crondtab -e
30 2 * * * /usr/sbin/mysql_db_backup.sh
(不走这个方向,没有看视频)
Python专业开发平台 -Ubuntu
Ubuntu下开发Python开发环境
APT软件管理和远程登录
请输入一个数num1=" NUM1
echo “您输入 NUM1 =$NUM1”
read -t 10 -p “请输入一个数num2=” NUM2
echo “您输入的NUM2=$NUM2”
### 4.2.9 函数
#### 系统函数
basename基本语法
功能返回完整路径最后 / 的部分,常用于获取文件名
- basename [pathname] [suffix]
basename [string] [suffix]
(功能描述:basename命令会删掉所有的前缀包括最后一个(‘T)字符,然后将字符串显示出来。
- 选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
dirname
- 返回完整路径最后 / 的前面的部分,常用于==返回部分路径==
- dirname 文件绝对路径
==不包括文件名字的,只有目录==
#### 自定义函数
[ function ] funname[()]
{
Action;
[retuen int;]
}
funname [值]
案例:计算输入两个参数的和
~~~bash
function getSum(){
SUM=$[$n1+$n2]
echo "和为:$SUM"
}
# 输入两个数
read -p "请输入一个数n1=" n1
read -p "请输入一个数n2=" n2
#调用自定义函数
getSum $n1 $n2
mysql_db_backup.sh
#!/bin/bash
#备份的目录
BACKUP=/date/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H:%M:%S)
echo "$DATETIME"
#数据库地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=123456
#备份的数据库名
DATABASE=studydemo
#创建备份目录,如果不存在就创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
#备份数据库
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --datebases ${DATABASE} | gzip > "${BACKUP}/${DATETIME}/$DATETIME.tar.gz"
#将文件处理成tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
#删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}
#删除十天以前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm {} \;
echo "成功备份数据库 ${DATABASE}!!"
每天2:30执行文件
crondtab -e
30 2 * * * /usr/sbin/mysql_db_backup.sh
(不走这个方向,没有看视频)
Python专业开发平台 -Ubuntu
Ubuntu下开发Python开发环境
APT软件管理和远程登录