目录
1、Linux基本篇
1、Linux目录结构
2、vi和vim
2.1 基本介绍
所有的linux系统都会内建vi文本编辑器
vim具有程序编辑neglect,可以看做是vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补全、编译和错误跳转等方便变成的功能特别丰富,在程序员中被广泛使用。
2.2 常见的三种模式及转换
2.3练习案例
# 1、练习复制、粘贴
进入一般模式 -> 复制几行就选几yy -> 按pp粘贴
# 2、练习删除
进入一般模式 -> 删除几行就选几dd
# 3、查找
进入命令模式 -> 输入/ -> 输入查找内容 ->得到第一个匹配位置 -> 输入n -> 下一个匹配位置
# 4、设置和取消行号
进入命令模式 -> 输入:nu -> 行号显示 -> 输入:nonu ->行号消失
# 5、光标调转到首行或尾行
进入正常模式 -> 输入gg -> 跳转到首行 -> 输入G -> 跳转到尾行
# 6、撤销动作
进入正常模式 -> 输入u -> 刚刚输入的内容被撤销
# 7、跳转到指定行
进入正常模式 -> 输入:set nu(也可以不显示行号) -> 输入想要跳转的行 -> shift + g -> 跳转成功
3、开机、重启、登录、注销
4、用户管理
linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统
linux的用户至少要属于一个组
4.1 添加用户
# 添加用户
useradd [-d:指定目录] 用户名
# 指定密码
passwd 用户名
4.2 删除用户
# 只删除用户
userdel 用户名
# 删除用户及目录
userdel -r 用户名
在删除用户时,一般不将目录删除
4.3 查询用户信息
# 查询用户信息
id 用户名
4.4 切换用户
# 切换用户
su 用户名
从权限高的用户切换到权限低的用户,不需要输入密码。反之,则要。
4.5 用户组
# 添加组
groupadd 组名
# 删除组
groupdel 组名
# 添加用户的时候添加组
useradd -g 组名 用户名
# 修改用户的组
usermod -g 新组名 用户名
5、实用指令
5.1 指定运行级别
常用的运行级别是3和5,要修改默认的运行级别可改文件/etc/inittab 的id:5:initdefault:这一行中的数字
# 切换运行级别
init [012356]
5.2 例子:如何找回root密码
思路:进入单用户模式,然后修改root密码
注意:该种方式重置密码必须要到实体机上操作,不能远程操作。
5.3 帮助指令
# 外部命令使用
man
# 内部命令使用
help
5.4 文件目录类
1、pwd
# 显示当前目录的绝对路径
pwd
2、ls
# 显示当前文件和目录
ls [-a:显示所有] [-l:以列表形式显示]
3、cd
# 回到家目录
cd ~
# 返回上一级
cd ..
4、mkdir
# 创建目录
mkdir 目录名
# 创建多级目录
mkdir -p 目录名
# 删除目录(目录下为空)
rmdir 目录名
# 如果删除非空目录
rm -rf
5、touch
# 创建文件
touch 文件名1,文件名2...
6、cp
# 拷贝文件
[\:强制覆盖]cp [-r:递归复制整个文件夹] 原文件 目标目录
7、rm
# 删除文件或目录
rm [-r:递归删除整个文件夹] [-f:强制删除不提示]
8、mv
# 移动文件
mv 文件名路径 文件夹路径
# 重命名
mv 文件名 新文件名
9、cat
# 查看文件内容
cat [-n:显示行号] 文件名
# 分页查看文件内容(按空格查看下一页)
cat 文件名 | more
10、>和>>
“>” : 输出重定向
“>>” : 追加
# 将列表的内容写入到文件中(覆盖写)
ls -l > 文件
# 将列表的内容写到文件中(追加)
ls -l >> 文件
# 将文件1的内容覆盖到文件2
cat 文件1 > 文件2
# 将内容追加到文件中
echo "内容" >> 文件
11、echo
# 输出内容到控制台
echo "内容"
#例子:输出环境变量
echo $PATH
12、head
# 输出文件前面10行内容(默认查看10条)
head 文件名
# 输出文件的前5行
head -n 5 文件名
13 、tail
# 输出文件后面10行的内容(默认查看10条)
tail 文件名
# 数据文件后面5行
tail -n 5 文件名
# 实时追踪该文档的所有更新
tail -f 文件名
14、ln
软链接也叫符号链接,类似于windows里的快捷方式,主要存放链接其他文件的路径
当我们使用pwd指令查看目录时,仍然看到的是软链接所在的目录
# 创建软连接
ln -s 文件 软链接名
# 删除软链接
rm -rf 软链接名
15、history
# 查看所有执行过的命令
history
# 查看最近使用过的5条命令
history 5
# 执行历史命令中的第5条命令
!5
5.5 时间日期类
1、date
# 显示当前时间
date
# 分别显示当前年月日,时分秒
date "+%Y"
date "+%m"
date "+%d"
date "+%H"
date "+%M"
date "+%S"
# 显示当前时间
date "+%Y年%m月%d %H时%M分%S秒"
# 设置当前系统时间为2018-10-10 11:22:22
date -s "2018-10-10 11:22:22"
2、cal
# 显示当前日历
cal
# 显示2020年日历
cal 2020
5.6 搜索查找类
1、find
find指令将从指定的目录下向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端
# 按文件名查找
find 目录 -name 文件名
例:查找/下后缀为.txt的文件
find / -name *.txt
# 按拥有者来查找
find 目录 -user 用户名
# 按文件的大小来查找
find 目录 -size [+大于 -小于 null等于]指定大小和单位
例:在/下查找大于20M的文件
find / -size +20M
2、locate
#1、安装mlocate
yum install mlocate
#2、创建locate数据库
updatedb
#3、查询
locate 文件名
3、grep指令和“|”
-- 查找文件中配置的值
cat 文件名 | grep [-n:显示行号] [-i:忽略大小写] 查找的值
5.7 压缩和解压缩
1、gzip/gunzip
# 压缩(压缩的文件不保存)
gzip 文件名
# 解压
gunzip 文件名
2、zip/unzip
# 压缩
zip [-r:递归压缩,即压缩目录] 压缩后的文件名 压缩目录
# 解压
unzip [-d:指定解压目录] 文件名
3、tar
# 压缩
tar -zcvf 压缩名.tar.gz 压缩文件1,2...
# 解压
tar -zxvf 文件名
# 解压到指定目录(目录要存在)
tar -zxvf 文件名 -C 目录名
5、组管理和权限管理
1、查看文件所有者
# 查看文件所有者
ls -ahl
2、修改文件所有者
# 修改文件所有者(组不会发生变化)
chown 用户名 文件名
3、修改文件所在的组
# 修改文件所在的组
chgrp 组名 文件名
4、修改用户所在的组
# 修改用户所在组
usermod -g 组名 用户名
5、权限基本介绍
6、修改文件或目录的权限
# 举例:
#1、给abc.txt 文件的所有者添加读写的权限,给所在组读执行权限,给其他组读执行权限
chmod u=rw,g=x,o=r abc.txt
#2、给abc.txt文件的所有者除去执行的权限,增加组写的权限
chmod u-x,g+w abc.txt
#3、给abc.txt文件的所有用户添加读的权限
chmod a+r abc.txt
6、磁盘管理
# 查询系统整体磁盘使用情况
df -h
# 查询自动目录磁盘使用情况
du -h [-s:指定目录占用大小汇总] [-h:带计量单位] [-as:含文件] [--masx-depth=1:子目录深度] /目录
#统计指定目录下有多少个文件(不包括文件夹中的)
ls -l /home | grep "^-" | wc -l
#统计指定目录下有多少个目录(不包括文件夹中的)
ls -l /home | grep "^d" | wc -l
#统计指定目录下有多少个文件(包括文件夹中的)
ls -lR /home | grep "^-" | wc -l
#统计指定目录下有多少个目录(包括文件夹中的)
ls -lR /home | grep "^d" | wc -l
#以树形显示文件结构
yum instal tree
tree
7、网络配置原理
linux网络环境配置
第一种方式(自动获取): 登录后,通过界面来设置自动获取ip
特点:linux启动后会自动获取ip,缺点是每次自动获取的ip地址可能不一样
第二种方式(指定固定的ip)
说明:直接修改配置文件来指定ip,并可以链接到外网,编辑/etc/sysconfig/network-scripts/ifcfg-eth0
要求:将ip地址配置为静态的,ip地址为192.168.183.130
8、进程管理
1、显示系统执行的进程
# 查看父进程
ps -ef
# 查看指定进程的父进程
ps -ef | grep 进程名
# 查看进程树
pstree [-p:显示进程的pid] [-u:显示进程的所属用户]
2、杀进程
# 杀进程
kill [-9:强制进程立即停止] 进程号
# 杀所有的进程(支持通配符)
killall 进程名称
# 案例1 踢掉某个非法登录用户
# 查找到用户的pid
ps -aux | grep 进程名
kill 进程号
# 案例2 终止远程登录服务sshd,在适当的时候再次重启sshd服务
kill 进程号
# 案例3 终止多个gedit编辑器
kill gedit
# 案例4 强制杀掉一个终端
kill -9 进程号
3、服务管理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ixFuzg6Z-1620961371093)(C:\Users\22846\AppData\Roaming\Typora\typora-user-images\image-20210508121158391.png)]
# 查看防火墙的状态,关闭防火墙和重启防火墙
service iptables status
service iptables stop
service ipdatbles start
# telnet指令检查linux的某个端口是否在监听,并且可以访问
telnet ip 端口
# 查看有哪些服务可用
ls -l /etc/init.d/
4、运行级别的开启和关闭
#通过chkconfig命令可以给每个服务的各个运行级别设置自启动/关闭
#查看服务
chkconfig --list | grep 服务名
chkconfig 服务名 --list
#设置开启或关闭
chkconfig --level 5 服务名 on/off
# 应用案例
#1 请显示当前系统所有服务的各个运行级别
chkconfig --list
#2 请查看sshd服务的运行状态
service sshd status
#3 将sshd服务在运行级别5下设置为不自动启动,看看有什么效果
chkconfig --level 5 sshd no
#4 当运行级别为5时,关闭防火墙
chkconfig --level 5 iptables off
#5 在所有的运行级别下,关闭防火墙
chkconfig iptables off
#6 在所有的运行级别下,开启防火墙
chkconfig iptables on
5、动态监控
1、查看系统状态
#举例
# 1、监视特定用户
输入top -> 按u ,输入用户名
# 2、终止指定的进程
输入top -> 按k ,输入进程号
# 3、指定系统状态更新时间(每隔10秒自动更新,默认是3秒)
top -d 10
2、查看网络状态
netstat [-an:按一定顺序排列输出] [-p:显示哪个进程在调用]
# 查看系统所有的网络信息
netstat -anp | more
# 查看服务名为sshd的服务的信息
netstat -anp | grep sshd
9、rpm 和yum
1、rpm
# 查询已经安装的rpm列表
rpm -qa | grep xx
# 卸载rpm包
rpm -e xxx
# 安装rpm包
rpm -rvh
2、yum
# 查看软件列表
yum list
# 安装指定的yum包
yum install xx
10、shell编程
1、hello world
# 创建一个shell脚本,输出hello world!
vim myShell.sh
# myShell.sh中放入下面内容
#!/bin/bash
# 在执行之前要加权限
chmod 744 myShell.sh
# 两种方式执行(绝对路径和相对路径)
./myShell.sh
/opt/myShell.sh
# 也可以不加执行权限,但是要加sh才能执行
sh ./myShell.sh
sh /opt/myShell.sh
2、shell变量的介绍
shell中的变量可以分为:系统变量和用户自定义变量
系统变量: H O M E 、 HOME 、 HOME、PWD 、 S H E L L 、 SHELL 、 SHELL、USER
echo "PATH=$PATH" echo "user=$USER"
自定义变量:
(1) 定义变量 :变量 = 值
(2) 撤销变量 : unset 变量
(3) 声明静态变量 : readonly 变量,注意;不能unset
3、定义变量的规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头
(2)等号两侧不能用空格
(3)变量名称一般习惯为大写
将命令的返回值赋给变量
A=`ls -la` 反引号,运行里面的命令,并把结构返回给变量A
A=$(ls -la)等价于反引号
4、设置环境变量
4.1 基本语法
export 变量名=变量值(将shell变量输出为环境变量)
source 配置文件(让修改后的配置信息立即生效)
echo $变量名 (查询环境变量的值)
4.2 多行注释
5、 位置参数变量
6、 预定义变量
7、 运算符的使用
# 计算(2+3)* 4的值
$(((2+3)*4))
$[(2+3)*4]
TEMP=`expr 2 + 3`
RESULT `expr $TEMP \* 4`
echo "result=$RESULT"
# 请求出命令行的两个参数[整数]的和
SUM=$[$1+$2]
echo "SUM=$SUM"
8、 if-else
# 案例1 "ok" 是否为"ok"
if [ "ok" = "ok"]
then
echo "equal"
fi
# 案例2 23是否大于22
if [ 23 -gt 22]
then
echo "大于",
fi
# 案例3 、/root/shell/aaa.txt目录中的文件是否存在
if [ -e /root/shell/aaa.txt ]
then
echo "存在"
fi
9、for
第一种方式:
for 变量 in 值1 值2 值3
do
程序
done
# 打印命令行输入的参数
for i in "$*"
do
echo "the num is $i"
done
第二种方式
for ((初始值;循环控制条件;变量变化))
do
程序
done
# 从1加到100的值输出显示
SUM=0
for ((i=1;i<=100;i++))
do
SUM = $[$SUM+$i]
done
echo "sum=$SUM"
10、while
# 从命令行输入一个数n,统计1+..+n的值是多少
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "sum=$SUM"
11、read读取控制台的输入
# 读取控制台输入的num值
read -p "请输入值:" NUM1
echo "您输入的值是num1=$NUM1"
# 读取控制台输入一个num值,在10秒内输入
read -t 10 -p "请输入值:" NUM1
echo "您输入的值是num1=$NUM1"
12、函数
12.1 basename
12.2 dirname
12.3 自定义函数
# 计算两个参数的和(read),getSum
function getSum(){
SUM=$[$n1+$n2]
echo "和是$SUM"
}
# 调用方式
read -p "请输入第一个数n1:" n1
read -p "请输入第二个数n2:" n2
getSum $n1 $n2
11、综合案例
然后执行定时任务
crontab -e
10 2 * * * /usr/sbin/mysql_db_backup.sh