liunx学习笔记
Linux学习阶段
-
基础命令阶段
- 各个配置、网络配置,用户配置
- 开发环境搭建,如:javaee PYthon
- 基本shell脚本【重点】
- 安全设置
- 深入理解Linux内核【重点】
Linux应用领域:
- 项目部署
- 嵌入式
- 运维
- 服务器
Linux常用发型版本
乌班图、CentOS、红帽
Linux分区
Linux主要分区:文件系统ext4
-
boot分区(引导分区) 大小1G
- 交换分区(虚拟内存) 和内存大小一致
- 根分区
虚拟机Linux中安装VMtools
- 进入CentOS
- 点击VM菜单的-> install vmware tools
- CentOs会出现一个VM的安装包
- 拷贝到/opt
- 使用解压命令tar,得到一个安装文件
cd /opt,tar -zxvf xx.tar.gz - 进入vm解压的目录,
cd vmware.. - 安装
./vmwaee-install.pl - 全部使用默认设置即可,就可以安装成功
注意:安装vmtools,需要有gcc支持 ,GCC检查命令gcc -v
9. 然后虚拟机中点击该系统,设置->选项->共享文件夹->点击总是开启->选择文件夹即可
10. 在CentOS里如何找到共享文件夹目录是:`/mnt/hgfs/共享文件夹`
Linux基础目录
-
/bin:装有常用的指令 -
/sbin:存放系统管理员使用的系统管理程序命令 -
/home:存放普通用户的主目录,在linux中一个用户就会在该目录下创建一个与用户名相同的文件夹 -
/root:系统管理员主目录 -
/lib:系统开机所需要的基本的动态链接库 -
/lost+found:这个目录一般是空的,当系统非法关闭后,这里就存放一些文件 -
/etc:所有系统管理所需要的配置文件和子目录my.conf -
/usr:这是一个非常重要的目录,用户的很多应用程序和文件都会放在这个目录下。类似windows下的program files目录 -
/boot:存放启动Linux时使用的一些核心文件,包括一些连接文件和镜像文件 -
/proc:虚拟目录,是系统内存的映射,访问这个目录来获取系统信息 -
/srv:service缩写,该目录存放一些服务启动之后需要提取的数据 -
/sys:这是linux2.6内核的一个很大变化,该目录下安装了Linux2.6内核中新出现的一个文件系统sysfs -
/tmp:这个目录是存放一些临时文件的 -
/dev:类似于windows的设备管理器,所有硬件用文件形式存储 -
/media:linux系统会自动识别一些设备,如U盘,光驱,识别后会把设备挂载到该目录下 -
/mnt:系统提供该目录是为了让用户临时挂载别的文件系统,我们可以将外部的存储挂载到/mnt上,然后进入该目录就可以查看内容了。 -
/opt:这是给主机额外安装软件所存放的目录,如ORACLE数据库就可以放到该目录下。默认为空 -
/usr/local:这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装程序 -
/var:这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件 -
/selinux:SELinux是一种安全子系统,它能控制程序只能访问特点文件,有三种工作方式
vim基本使用
三种模式
插入模式
按下i进入插入模式
正常模式
vim打开文件后进入的就是正常模式,通过esc或i来进入不同的模式
命令模式
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
-
i 切换到输入模式,以输入字符。
-
x 删除当前光标所在处的字符。
-
: 切换到底线命令模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
基本使用
- 拷贝当前行
yy,按p粘贴。拷贝当行下5行输入5yy - 删除当前行
dd,删除当前行下的5行5dd - 在文件中查找,在正常模式下输入
/你要查找的内容,n是下一个 - 设置文件的行号,取消文件的行号,命令分别是:
:set nu和:set nonu - 跳到最末行
G,跳到首行gg - 撤销命令是
u,相当于Ctrl+Z - 光标移动到20行,正常模式下:输入20,然后直接shift + g

基础命令
关机与重启
shutdown -h now 立刻关机
shutdown -h 1 1分钟后关机
shutdown -r now 立刻重启
reboot 立刻重启
halt 关机,和上面一样
sync 把内存数据同步到磁盘
注意事项:shutdown和reboot等命令在执行前都已经执行sync命令,但是小心为妙,建立还是在关机或重启的时候使用命令sync
登陆与注销
当需要切换管理用户时,使用命令
su - root 之后就会切换到root用户
当需要退出(注销)用户时,使用命令
logout 注销当前用户
注意事项:logout指令在图形运行时无效,只有在运行级别3的时候才有效。
用户管理
用户添加
useradd 用户名
添加用户的时候指定组名
useradd -g 组名 用户名
密码设置
passwd 用户名
用户删除
userdel 用户名 默认不删除该用户的家目录
userdel -r 用户名 删除家目录,但不推荐使用
查询用户
id 用户名
查询当前登录的用户
whoami
who am i
修改用户到用户组
usermod -g 用户组 用户名
用户组
添加用户组
groupadd 组名
删除用户组
groupdel 组名
用户和组相关文件
/etc/passwd文件
用户user配置文件,记录用户的各种信息
每行的含义:用户名:用户标识号:组标号:注释性描述:生目录:登陆Shell
/etc/shadow文件
口令的配置文件
每行的含土登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group文件
组( (group)的配置文件
录 Linux包含的组的信息每行含义:组名:口令:组标识号:组内用户列表
运行级别
运行级别基本介绍
0 关机
1 多用户
2 多用户无网络服务
3 多用户有网络服务
4 系统未使用保留给用户
5 图形界面
6 系统重启
CentOS进行了简化
multi-user.target: analogous to runlevel 3
graphical.target: analogous to runlevel 5
获取当前级别
systemctl get-default
设置默认级别
systemctl set-default TARGET.target
帮助指令
man 命令或配置文件
help 命令(获取shell内置命令
在linux中以点开头的是影藏文件
文件目录指令
pwd 获取当前路径
ls 获取该目录下所有文件
参数 -a 显示所有文件,包括影藏
-l 以列表方式显示信息
-h 以M、B、G人类看的显示文件大小
cd 切换路径
cd ~ 进入家目录
cd .. 返回上级目录
mkdir 创建目录
参数 无参 只能创建一个目录
-p 创建多级目录
mkdir -p /home/tom/aaa/bbb
rmdir 删除目录
参数 -r 强制删除
-f 无提示
如果要删除非空目录需要使用rm -rf 目录
touch 创建文件
cp 复制文件
参数 -r 递归复制整个文件夹
将/home/bbb整个目录拷贝到/opt下 cp -r /home/bbb /opt
rm 删除文件或目录
参数 -r
-f
mv 剪切或重名令文件目录和文件
cat 查看文件内容 一下全显示来
参数 -n 显示行号
通过cat 文件 | more 来分页显示
more 指令以全屏幕方式显示文件内容内置很多指令来操作
参数
Enter 向下n行,需要定义。默认为1行
Ctrl+F 向下滚动一屏
空格键 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
V 调用vi编辑器
!命令 调用Shell,并执行命令
q 退出more
less 指令,比cat指令更加强大,使用分屏来查看文件内容
参数
空格 向下翻一页
Page Up 向上翻一页
PagedDown 向下翻一页
/字符串 向下查找字符串 n向下 N向上查找
?字符串 向上查找字符串 n向下 N向上查找
q 退出less
echo 输出内容到控制台
1. 输出环境变量 echo $PATH
2. 打印字符串 echo "hello,world"
head 显示文件开头的部分内容
参数 -n 数值 ,数值是几就显示几行,默认是10行
tail 显示文件尾部部分内容
参数 -n 数值,显示尾部几行
作用二:实时监控文件,看到文件变化时,会向控制台打印
tail -f /home/mydata.txt 然后用另一个控制台修改文件就可以监听到了
>输出重定向 和 >>追加
重定向:就像echo "Hello"命令 此命令输出到控制台,通过重定向可以写到文件中
如:echo "Hello, world" > /home/mydata.txt
如果使用>> 那就是追加
ln 软连接指令,类似win快捷方式,
使用举例:ln -s /root /home/myroot
myroot指向/root目录
删除的话 rm /home/myroot
history 查看历史使用过的指令
也可以通过!编号重新使用用过的指令
时间日期指令
查看当前时间
date 查看当前时间
date +%Y 查看当前年份
date +%m 查看当前月
date +%d 查看当前日
date "+%Y-%m-%d %H:%M:%S" 显示当前时间如2021-6-14
设置当前时间
date -s "字符串时间" 如
date -s "2021-06-14 18:37:10"
查询当前日历
cal 查看当前月
cal 年份
如cal 2021 输出2021年每月日历
搜索或查找
查找文件或目录
find 搜索范围 选项
参数
-name 根据文件名查找
-size 根据文件大小查找
-user 查看用户名的文件 +n大于 -n小于 单位有K M G
-atime 根据时间查找
find /home -name hello.txt 在/home目录下查找hello.txt文件包括子目录文件(递归查找)
find /opt -user Tom 在/opt目录下查找所有文件的所属者是Tom的文件
find /opt -size +200M 在/opt目录下查找所有大于200M的文件
find /opt/ -atime +10 -name "*.tar.gz" 查找10天前的以tar.gz后缀的文件
快速获取文件路径
locate指令的原理是linux对每一个文件名以及路径存储到数据库中,然后通过locate指令快速查找。不过使用该指令前提是需要先更新一下数据库
更新指令updatedb,更新以及创建locate数据库
查找hello.txt文件的路径
1. 首先更新以及创建数据库
updatedb
2. 开始查找
locate hello.txt
根据文件内容查找关键字
grep 是一个过滤查找,管道符| 表示将前一个命令处理结果传递给后面的命令
参数 -n 显示行号
-i 不区分大小写
使用
cat hello.txt | grep -n "hello"
压缩和解压
gzip/gunzip
gzip 压缩文件,只能压缩文件,不能压缩目录
gzip 文件路径
gunzip 解压文件
gunzip 文件路径
zip/unzip
zip 压缩文件和目录
参数
-r 递归压缩
unzip 解压
参数
-d<目录> 指定解压后的文件存放目录
tar
tar是压缩命令,也可以根据参数解压,最后文件格式 XXX.tar.gz文件
参数
-c 产生.tar的打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解压.tar文件
-C 指定解压目录
1. 压缩多个文件 将pig.txt和cat.txt 压缩成pc.tar.gz
tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt
2. 将home文件夹压缩成myhome.tar.gz
tar -zcvf myhome.tar.gz /home
3. 解压pc.tar.gz到当前目录
tar -zxvf pc.tar.gz
4. 将myhome.tar.gz 解压到opt/tmp2目录下
tar -zxvf myhome.tar.gz -C /opt/tmp2
组管理和权限管理
linux中每个用户必须属于一个组,不能独立组外。在Linux中每个文件有
- 所有者
- 所在组
- 其他组
- 改变用户所在组
以上4种概念
文件(包括目录)的创建者,谁创建的文件,就自然称为该文件的所有者,同时创建者所在的所在组称为文件的所在组
查看文件所有者
ll
ls -alh

修改文件所有者
chown 用户名 文件
chown Tom hello.txt
组的创建
看用户管理章节
查看文件/目录所在组
ll
ls -lah
修改文件/目录所在组
chgrp 组名 文件名
其他组
除文件的所有者和所在组的用户外,系统的其他用户就是其他组
权限基本介绍
使用ll命令,显示内容如下
dr-xr-xr-x. 5 root root 4096 May 21 11:39 boot
0-9位说明
第0位确定文件类型
l是链接,相当于windows快捷方式
d是目录,相当于Windows的文件夹
c是字符设备文件,鼠标,键盘
b是块设备,比如硬盘
-是普通文件
第1-3位是该文件所有者的权限
第4-6位是所属组的权限
第7-9位是其他组的权限
rwx权限介绍
rwx作用到文件
- r 代表可读,查看
- w 代表可写,但不代表可删除该文件,删除一个文件的前提条件是对该文件所在目录拥有写权限,才能删除该文件
- x 代表执行权限,可以被执行
rwx作用到目录
- r 代表可读
- w 代表可修改,,对目录内创建+删除+重命名目录
- x 代表可以进入该目录
文件及目录权限修改-chmod
通过chmod指令,可以修改文件或目录的权限
方式一:+ - = 变更权限
u所有者、g所有组、o其他人、a所有人(u、g、o)总和
chmod u=rwx,g=rw,o=r 文件/目录名
chmod o+w 文件/目录名
chmod a-x 文件/目录名
方式二:通过数字更改权限
r=4 w=2 x=1 rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 文件/目录名
相当于chmod 751 文件/目录名
定时任务
crontab
任务调度:是系统在某个时间执行特定的命令和程序
任务调度分类
- 系统工作,有些重要的工作必须周而复始执行,如扫毒
- 用户需求,如备份MYSQL数据库
基本用法
crontab [选项]
参数
-e 编辑crontab定时任务(创建任务)
-l 查询crontab任务
-r 删除当前用户所有的crontab任务
service crond restart 重启任务调度
快速入门
设置任务调度文件:etc/crontab
设置个人任务调度。执行crontab -e命令
接着输入任务
命令要带上路径
crontab -e
*/1 * * * * /usr/bin/ls -lah > /tmp/to.txt
意思是说每小时的每分钟执行ls -lah > /tmp/to.txt 文件中
*号说明
| 字段名称 | 说明 | 取值范围 |
|---|---|---|
| 第一个“*” | 每小时的第几分钟执行 | 0-59 |
| 第二个“*” | 每日的第几个小时执行 | 0-23 |
| 第三个“*” | 每月的第几天执行 | 1-31 |
| 第四个“*” | 每年的第几月执行 | 1-12 |
| 第五个“*” | 每周的第几天执行 | 0-6 |
特殊符号说明
| 符号 | 说明 |
|---|---|
| * | 表示任何时刻 |
| , | 表示分割 |
| - | 表示一个段,如第二段里: 1-5,就表示1到5点 |
| /n | 表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1. |
特殊时间举例

at一次性任务
概述
- at命令是一次性定时计划任务,at的守护进程atd会在后台运行,检查作业队列来运行
- 默认情况下,atd每60秒检测一次作业队列,有作业时,如果时间与当前作业时间匹配,则运行作业
- 在使用at任务的时候,一定要保证atd进程在后台执行,可以使用命令查看
ps -ef | grep atd
at [选项] [时间]
Ctrl + D 结束at任务命令的输入,输出两次
查询当前没有执行的任务 atq
删除已经创建还没有执行的任务 atrm 编号
选项
| 选项 | 含义 |
|---|---|
| -m | 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出 |
| -I | atq的别名 |
| -d | atrm的别名 |
| -v | 显示任务将被执行的时间 |
| -c | 打印任务的内容到标准输出 |
| -V | 显示版本信息 |
| -q<列队> | 使用指定的列队 |
| -f<文件> | 从指定文件读入任务而不是从标准输入读入 |
| -t<时间参数> | 以时间参数的形式提交要运行的任务 |
at指定时间的方法
- 接受在当前的hh:mm(小时:分钟)这种方式的时间指定。假如该时间已过去,那么就第二天执行。
- 使用
midnight(深夜),noon中午、teatime一般下午4点,等比较模式的词语来指定时间 - 采用12小时计时,即在时间后面加上AM(上午)或PM(下午)来说是上午还是下午。例如
12pm - 指定命令执行的具体日期,指定格式为
月 日或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)指定的日期必须跟在指定时间的后面。例如04:00 2021-03-01 - 使用相对计时法,指定格式为
now + count time-unis,now是当前时间,time-units是时间单位,这里能够是minutes分钟、hous小时、days天、weeks星期。count是时间的数量,几天,几小时。例如now + 5minutes - 直接使用today(今天)、tomorrow明天来制定完成命令的时间
使用举例
-
2天后的下午5点执行 /bin/ls /home
at 5pm + 2days at> ls /home -
明天17点执行
at 5pm + tomorrow at> date > /home/date.txt
磁盘分区、挂载
分区原理
- Linux来说无论有几个分区,分给哪一个目录使用,它归根结底就只有一个目录,一个独立唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
- Linux采用了一种叫“载入”的处理方法,它的整个文件系统包含了一整套的文件和目录,且将一个分区和一个目录联系起来,这时要载入一个分区将使它的存储空间在一个目录下获取
简答的说,Linux要插入U盘、硬盘,步骤就是挂载,让U盘与系统中某个目录联系起来,联系起来的过程就叫做挂载。将一个分区和一个目录联系起来
查看所有设备的挂载情况
lsblk 或
lsblk -f 这个命令显示的信息更加详细,文件类型 UUID 挂载点
挂载的流程
如果是一个新的硬盘的话,那么挂载如下
插入新硬盘->建立分区->格式化->挂载->设置自动挂载
插入新硬盘
拿虚拟机举例,添加新硬盘,然后重启系统 reboot
分区
使用命令,查看新插入的硬盘
lsblk -f
拿到新硬盘的名字
然后使用命令进行分区
fdisk /dev/sdb 比如sdb是新硬盘
参数
m 显示命令列表
p 显示磁盘分区,同 fdisk -l
n 新增分区
d 删除分区
w 写入并保存
开始分区后,输入n,新增分区,然后选择p,分区类型为主分区,两次回车默认全部空间,之后w写入保存
格式化并挂载
格式化磁盘
mkfs -t ext4 /dev/sbd1
说明
ext4 是文件类型
后面的是要格式化的分区
挂载
挂载:将一个分区与一个目录联系起来
mount 设备名称 挂载目录
如:mount /dev/sdb1 /newdisk
卸载挂载
umount 设备名称 或 挂载目录
如:umount /dev/sdb1
umount /newdisk
以命令行挂载的分区和目录都是一次性的作用,重启后会失效,要想永久挂载,就必须写入文案
永久挂载
写入文件,路径/etc/fstab,然后执行 mount -a即刻生效
如图,可以和上面格式一样的添加,也可以直接写硬盘路径
如:/dev/sdb1 挂载点 文件类型 defaults 00
磁盘情况查询
查询系统整体磁盘使用情况
df -h

查看指定目录的磁盘占用情况
基本语法
du -h
参数
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
--max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值
磁盘情况-工作使用指令
1. 统计/opt文件夹下文件个数
ls -l /opt | grep "^-" | wc -l
2. 统计/opt文件夹下目录格式
ls -l /opt | grep "^d" | wc -l
3. 统计/opt文件夹下文件的个数,包括子文件夹里的
ls -lR /opt | grep "^-" | wc -l
4. 统计/opt文件夹目录的个数,包括子文件夹的
ls -lR /opt | grep "^d" | wc -l
5. 以树状显示目录结构 tree目录,注意tree需要安装
安装tree: yum install tree
tree /home
网络配置
NAT网络配置
Linux主机访问网络,先通过虚拟机的网关,再到主机的网卡,再到局域网,之后就是互联网
Linux修改网络两种方式
Linux中获取ip的命令
ifconfig
方式一自动获取
登录后通过页面来设置自动获取方式,缺点是IP地址经常更换,不利于做服务器
方式二:指定ip
这个方式就需要修改Linux中的文件了,位置是/etc/sysconfig/network-scripts/ifcfg-ens33
将ip地址配置成静态的,比如ip地址为192.168.200.130
ifcfg-ens33文件说明 网卡文件
DEVICE=etho # 接口名,设备网卡
HWADDR=00:0C:2x:6x:0x:xx #MAC地址
TYPE=Ethernet #网络类型(通常是Ethernet)
UUID=926a57ba92c6-423l-bacb-127e5e6a9f44 #随机的id
# 系统启动的时候接口是否有效(yes/no)
ONBOOT=yes
# IP的配置方法 [none|static|bootp|dhcp](引导时不适用协议|静态分配IP|BOOTP协议|DHCP协议)
BOOTPROTO=static
# IP地址
IPADDR=192.168.200.130
# 网关
GATEWAY=192.168.200.2
# 域名解析器
DNS1=192.168.200.2
重启网络服务或者重启系统生效
service network restart
reboot
设置主机名和hosts映射
修改主机名
为了方便记忆,可以给linux设置主机名,也可以根据需求修改主机名。一般用于分布式
指令
hostname 查看主机名
修改主机名,修改文件在/etc/hostname,修改后重启就行
设置hosts映射
作用:就是通过ping 对方的主机名就可以找到它的IP地址
Windows中映射
在C:\Windows\System32\drivers\etc/hosts文件中加入你的映射即可
如192.168.200.130 hspedu100
linux中映射
文件路径:/etc/hosts
如上面的一样插入即可
主机名解析过程分析(Hosts、DNS)
Hosts是什么
一个文本文件,用来记录IP和HOstname(主机名)的映射关系
DNS
DNS,就是域名系统,是互联网上作为域名和IP地址相呼应映射的一个分布式数据库
实例
用户在浏览器输入了百度的网址www.baidu.com,
- 浏览器先检查缓存中有没有该域名的IP地址,有就先调用,如果没有,就检查DNS解析器缓存,如果有直接返回IP完成解析。
- windows上的指令:
ipconfig /displaydnsDNS域名解析缓存 ipconfig /flushdns手动清理dns缓存- 如果本地缓存解析器没有,就去检查Hosts文件,如果也没有就回去互联网上的DNS服务器解析
进程
查看进程
ps
参数:
-a 显示当前中断的所有进程信息
-u 以用户的格式显示进程信息
-x 显示后台进程运行的参数
ps -aux 和 ps -ef 都可以使用
字段说明
- USER: 行程拥有者
- PID: pid
- %CPU: 占用的 CPU 使用率
- %MEM: 占用的内存使用率
- VSZ: 占用的虚拟内存大小
- RSS: 占用的内存大小
- TTY: 终端的次要装置号码 (minor device number of tty)
- STAT: 该行程的状态:
- D: 无法中断的休眠状态 (通常 IO 的进程)
- R: 正在执行中
- S: 静止状态
- T: 暂停执行
- Z: 不存在但暂时无法消除(僵死进程)
- W: 没有足够的内存分页可分配
- <: 高优先序的行程
- N: 低优先序的行程
- L: 有内存分页分配并锁在内存内 (实时系统或捱A I/O)
- START: 行程开始时间
- TIME: 执行的时间
- COMMAND:所执行的指令
终止进程
终止进程的话有两种方式,一种是根据进程PID号来终止,还有一种是根据进程名字终止所有进程(父与子进程)
kill [选项] 进程号
killall 进程名字 (通过名字终止进程,也支持通配符,通常服务器负载大的时候用)
常用选项
-9 :表示强制终止进程
进程树查看
pstree [参数] # 可以更加直观的看进程信息
参数
-p 显示进程的PID
-u 显示进程的所属用户
服务管理
服务的状态
服务一共有5中状态
- start:开启
- stop:关闭
- restart:重启
- status:查看服务状态
systemctl管理指令
基本语法
systemctl [start | stop | restart | status]
systemctl 指令管理的服务在/usr/lib/systemd/system查看
systemctl设置服务的自启动状态
systemctl list-unit-files # 查看服务开机启动状态,grep可以过滤
systemctl enable 服务名 # 设置服务自启动
systemctl disable 服务名 #关闭服务开机启动
systemctl is-enable 服务名 # 查询某个服务是否是自启动
systemctl status 服务名 # 查看服务状态
使用举例
拿防火墙举例
# 查看防火墙状态
systemctl status firewalld
# 终止防火墙
systemctl stop firewalld
# 开启防火墙
systemctl start firewalld
注意:这种方式只是临时生效,当重启后,还是回归以前的服务,如果希望永久关闭就需要设置,使用systemctl disable firewalld
防火墙打开或关闭指定端口
如果Linux防火墙开启的话,要是使用某个端口,就只能通过命令来打开它
1. 打开端口
firewall-cmd --permanent --add-port=端口号/协议
2. 关闭端口
firewall-cmd --permanent --remove-port=端口号/协议
3. 重新载入,才能生效
firewall-cmd-reload
4. 查看端口是否开启
firewall-cmd-query-port=端口/协议
动态监控进程
top命令是动态的监控进程,对于进程的CPU占用率、内存使用是动态刷新的
top 参数
参数:
-d 秒数 : 以多长时间更新,默认是3秒
-i : 是top不显示任何闲置和僵死进程
-p : 通过指定监控进程PID来仅仅监控某个进程的状态
top:现在时间
up:已开机时间
user:当前几个用户
load average:负载值
Tasks:当前任务树
Mib Mem:当前内存使用情况,前面是已用,后面是剩余
MiB Swap:交换分区使用情况,前面是已用,后面是剩余
交互操作说明
在top命令下,按什么键代表不同操作
P 以CPU使用率排序,默认是此
M 以内存使用率排序
N 以PID排序
q 退出top
k 然后输入要杀死的进程PID
监控网络状态
查看网络系统情况netstat
基础语法
netstat [参数]
参数
-an 按照一定顺序排列输出
-p 显示哪个进程在调用
这个作用就是说查看当前网络情况,可以根据最后面的PID终止某个链接
rpm和yum
rpm
rpm常用命令
rpm -qa | grep XXX 查看已安装的rpm列表
rpm -qa :查询所安装的所有rpm软件包
rpm -qa | more
rpm -qa | grep XXX
rpm -q 软件报名,查看软件包是否安装
rpm -q firefox
rpm -qi 软件包名 查询软件包信息
rpm -qf 文件全路径名,查询文件所属软件包
卸载rpm包
rpm -e 软件包名
注意事项
- 强制删除代码是
rpm -e --nodeps 软件包名 - 一般一个包依赖于另一个包,如果某个包你强制删除了,那么另个包运行应该会有问题
安装rpm
rpm -ivh RPM包全路径名
参数
-i 表示安装
v 提示
h 显示进度条
yum
yum是一个Shell前端软件包管理器,它是能够从互联网下载并且自动解决依赖在线安装包的东西
基本使用
yum list 显示所有可安装的包
yum list | grep XXX 你要安装软件的列表
安装
yum install XXX 下载安装
Java环境搭建
安装Java
使用yum来安装
使用yum来安装的话,就需要安装两个包
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
路径为:/usr/lib/jvm/
添加环境变量
吸入/etc/profile文件内
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
export PATH=$JAVA_HOME/bin:$PATH
重新载入文件source /etc/profile
最后测试一下就行
tar包安装Java
将安装包上传到/opt/java目录下,然后解压
tar -zxvf 包名
然后移动文件到/uer/lib/jvm目录下,
最后配置环境变量就行
Tomcat安装
从官网上下载Tomcat的安装包,解药到/opt目录下,然后运行就行
可以添加环境变量
export Tomcat_HOME=/opt/apache-tomcat-8.5.68
export PATH=$JAVA_HOME/bin:$PATH:$Tomcat_HOME/bin
Mysql安装
使用wget工具下载就行
wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
1. 解压
tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
2. 按照顺序安装
rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
3. 安装第4个包的时候rpm包,需要一个perl依赖,下载安装就行
yum -y install perl.x86_64
yum install -y libaio.x86_64
yum -y install net-tools.x86_64
4. 查看随机密码
grep "password" /var/log/mysqld.log
5. 修改当前密码
set global validate_password_policy=LOW; #修改安全策略
set global validate_password_length=6; # 修改密码长度
set password for 'root'@'localhost' =password('你的密码');
6. 运行flush privileges;使密码设置生效
CentOS中对MySQL的配置
Mysql的配置文件在/etc/my.cnf,这里主要对于编码的设置
[client]
port=3306
default-character-set=utf8mb4
[mysqld]
skip-grant-tables
port=3306
character_set_server=utf8mb4
Shell编程
Sh的第一个程序
#!/bin/bash
echo "Hello bash~"
之后保存,给他提升可执行权限chmod u+x hello.sh
就可以直接执行了
还有一种方式,是不用给它提升可执行权限,不过在sh脚本前加上sh 文件名这样使用
变量
变量的规范
- 变量名同意大写
- 等号两边不能有空格
变量的分类
Linux中有普通变量,静态变量,以及全局变量
- 普通变量可直接定义,也可以使用
unset 变量名来销毁 - 静态变量,不可以销毁,但需要使用
readonly来定义 - 全局变量也叫环境变量,定义在
/etc/profile文件内,需要使用export 变量名=值来定义,不过需要使用指令source /etc/profile来刷新
代码演示
#!/bin/bash
# 定义普通变量
A=100
echo $A
echo "A=$A"
# 消除变量
unset A
# 定义静态变量,静态变量不能销毁
readonly B=200
echo "B=$B"
# 输出全局变量
echo $Tomcat_HOME
# 命令的返回值给变量
C=`date`
echo "C=$C"
# 另外一种写法
D=$(date)
echo "D=$D"
将命令的返回值给变量
两种方式
# 方式一:
A=`date`
# 方式二:
B=$(date)
位置参数变量
说明:就是说在执行脚本的时候,希望给脚本程序指定参数,让程序接受。这就是位置参数变量
比如:./myshell.sh 100 200 后面的两个数字就是传给脚本的值
基本语法
$n:根据变量位置,获取对应的变脸,比如上面的100,200,那么获取就是$1 $2- 具体说明:n为数字,$0代表命令本身,$1~$9代表第一到9个参数,十以上的参数,需要使用大括号,如
${10}
- 具体说明:n为数字,$0代表命令本身,$1~$9代表第一到9个参数,十以上的参数,需要使用大括号,如
$*:获取所有参数,把所有参数看成一个整体$@:也是获取所有参数,不过$@把每个参数区分对待@#:获取所有参数的个数
# 获取参数
echo "0=$0 1=$1 2=$2"
# 获取所有参数,是一个整体
echo "获取所有参数 $*"
# 获取所有参数,是区分对待
echo "所有参数获取:$@"
# 获取参数个数
echo "$#"
预定义变量
就是shell设计者预先定义好的变量,可以让我们直接使用
$$:获取当前进程的PID$!:后台运行的最后一个进程PID$?:获取最后一个执行命令的返回状态。0是正确执行,非0是执行错误- 如果执行某个程序 后面加一个
&那么久表示该程序在后台运行 - 如:
./myshell.sh &表示在后台执行该脚本
代码演示
#!/bin/bash
echo "当前程序的PID=$$"
# &该符号表示后台执行
/root/shCode/01-hello.sh &
echo "hello的PID=$!"
echo "上一条指令的状态=$?"
运算符
运算符使用的三种方式
$(( 运算符 )):需要注意的是,运算符两边都必须有空格$[ 运算符 ]:推荐使用这种,编写方便,但是两边也必须有空格expr m - n:m和n都是数值,然后两边都必须有空格- expr的运算符号:+、-、
\*、/、%对应的是加减乘除以及取余
- expr的运算符号:+、-、
案例
- 计算(2+3)*4的结果
- 请求出命令行两个参数的和 20 50
#!/bin/bash
# 案例1:计算(2+3)*4的值,使用三种运算方式
# 方式一:
SUM1=0
SUM1=$(( (2+3)*4 ))
echo "Sum1的结果为:$SUM1"
# 方式二
SUM2=0
SUM2=$[ (2+3)*4 ]
echo "Sum2=$SUM2"
# 方式三
SUM3=0
TEMP=` expr 2 + 3 `
SUM3=` expr $TEMP \* 4 `
echo "SUM3=$SUM3"
# 案例二:接受位置参数,并计算和
SUM4=$[ $1+$2 ]
echo "位置参数的结果为:$SUM4"
条件判断
Linux中的条件判断有三种方式,一个是单if,一个是多if...elif,最后一个是case
判断条件
常用判断
| 符号 | 作用 |
|---|---|
| = | 判断字符串是否相等 |
| -lt | 小于 接下来都是判断整数的 |
| -le | 小于等于 |
| -eq | 等于 |
| -gt | 大于 |
| -ge | 大于等于 |
| -ne | 不等于 |
按照文件权限进行判断
| 符号 | 作用 |
|---|---|
| -r | 有读权限 |
| -w | 有写权限 |
| -x | 有执行权限 |
按照文件类型进行判断
| 符号 | 作用 |
|---|---|
| -f | 文件存在并且是一个常规的文件 |
| -e | 文件存在 |
| -d | 文件存在并是一个目录 |
单if
if [ 判断条件 ] # 注意[]里的判断条件两边必须有空格
then
#...代码
fi #代表结束
多if
if [ 判断条件1 ]
then
#代码
elif [ 条件二 ]
then
# 代码
if # 表示结束
注意事项:[]为非空就是ture也就是0,如果为假就是大于1;空格也代表非空
case的基本语法
case $变量名 in
"值1")
...代码
;;
"值2")
...代码
;;
*) #相当于default除了上面之外的
...代码
esac # 表示结束
代码演示-if的简单使用
#!/bin/bash
# 案例1:判断ok是否等于ok
if [ "OK" = "OK" ]
then
echo "相等"
fi
# 案例2:23是否大于等于22
if [ 23 -ge 22 ]
then
echo "是大于"
fi
# 案例3:判断/root/shCode/aaa.txt目录下是否有aaa.txt文件
if [ -f /root/shCode/aaa.txt ]
then
echo "有aaa.txt文件"
fi
多个if的使用
#!/bin/bash
# 案例:编写程序输入大于60输出及格,小于60输出不及格
if [ $1 -ge 60 ]
then
echo "成绩及格!"
elif [ $1 -lt 60 ]
then
echo "不及格!!!"
fi
case的使用
#!/bin/bash
# 案例:当命令行参数是1时,输出周一,2时输出周二,其他输出other
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac
循环
循环的有三种方式
-
for 变量 in 值1 值2... # 就是说变量的值是值1或值2里面的 do 程序代码 done -
for (( 初始值;循环控制;变量变化 )) do 程序代码 done -
while [ 条件判断式 ] # 需要注意的是 while与[之间有空格 do 程序代码 done
代码使用案例
#!/bin/bash
# 案例:打印命令行输入的参数,这个可以看出$*和$@区别
:<<!
$*是表示把命令行输入的参数看作一个整体
$@是表示命令行输入的参数是一个一个的
!
for i in $*
do
echo "number is $i"
done
echo "==========================="
for j in $@
do
echo "number is $j"
done
#!/bin/bash
# 案例:从1到命令行的$1的值之间的和
RESULT=0
for(( i=1;i<=$1;i++ ))
do
RESULT=$[ $RESULT + $i ]
done
echo "最终结果为:$RESULT"
#!/bin/bash
RESULT=0
i=0
while [ $i -le $1 ]
do
RESULT=$[ $RESULT + $i ]
i=$[ $i + 1 ]
done
echo "计算的结果:$RESULT"
read读取控制台-与控制台交互
就是说在脚本执行的时候,有的脚本是需要和用户交互的,比如给某个变量一个值。
read 参数 变量名
参数:
-p 给用户的提示
-t 指定的时间(秒)规定时间内没有输入,程序就不等待了
#!/bin/bash
# 案例1:读取控制台输入的NUM1值
read -p "请您输入一个数值:" NUM1
echo "你刚才输入的数值是:$NUM1"
# 案例2:读取控制台输入的NUM2的值,并限制10秒时间
read -p "请您在输入数值,这次有时间限制了:" -t 10 NUM2
echo "您第二次输入的数值为:$NUM2"
注意:如果没有输入的话,变量的值是空
函数
系统函数
basename 路径 后缀 作用:返回完整路径的最后/部分,常用语获取文件名
路径的话是:/home/tom/aaa.txt 函数返回aaa.txt
如果加上后缀的话,.txt 就是返回aaa
dirname 和上面的相反,返回路径不包括文件
/home/tom/aaa.txt 返回/home/tom
自定义函数
格式
function 函数名(){
代码;
返回值return int;
}
备份MySQL数据库
首先,了解MySQL数据库是使用什么指令来备份的
在不是mysql交互中,使用命令
mysqldump -u 用户名 -p 密码 -host数据库地址 数据库名称 > 你的路径
# 先来写上关键信息
FILE_PATH=/data
#DATETIME=$(date +%Y-%m-%d_%H:%M:%S) 不能以这种格式的时间,tar会报错
DATETIME=$(date +%Y-%m-%d_%H-%M-%S)
# echo $DATETIME
# Mysql信息
USERNAME=root
USERPD=root
LOCAL=localhost
DATABASENAME=blog
# 创建目录
[ ! -d $FILE_PATH/$DATETIME ] && mkdir -p $FILE_PATH/$DATETIME
# 使用mysqldump命令来对数据库进行备份
mysqldump -u$USERNAME -p$USERPD --host=$LOCAL $DATABASENAME > $FILE_PATH/$DATETIME/$DATETIME.sql
# 进行压缩,压缩时间目录
cd $FILE_PATH
tar -zcvf $DATETIME.tar.gz ./$DATETIME
# 将目录删除,只保留*.tar.gz
rm -rf ./$DATETIME
# 删除前10天的压缩文件
find $FILE_PATH -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "数据库$DATABASENAME备份成功"
mysql数据库恢复
mysql -u 用户名 -p 密码 < sql文件位置
日志
在Linux中日志是非常重要的一部分,包括了用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务的相关信息
日志一般存在/var/log/目录下
系统常用日志
| 日志文件 | 说明 |
|---|---|
| /var/log/boot.log | 系统启动日志 |
| /var/log/cron | 记录与系统定时任务相关的日志 |
| /var/log/cups | 记录打印信息的日志 |
| /var/log/dmesg | 记录系统在开机时内核自检的信息。也可以使用dmesg直接查看内核自检信息 |
| /var/log/btmp | 记录错误登录的日志。这个文件是二进制存放需要使用lastb命令查看 |
| /var/log/lasllog | 记录系统中所有用户最后一次的登陆时间的日志。这个文件也是二进制文件,需使用lastlog |
| /var/log/mailog | 记录邮件信息的日志 |
| /var/log/message | 记录系统重要消息的日志,这个日志会记录Linux系统的绝大多数重要信息,如系统出现问题,首先要检查的应该就是这个日志文件 |
| /var/log/secure | 记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录,比如系统的登录,ssh登录、su切换用户、sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
| /var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件,是二进制需要使用last命令查看 |
| /var/tun/ulmp | 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销而不断变化,只记录当前用户的登录信息,这个文件不能用vi查看,而是使用w、who、users等命令查看 |
案例
使用root登录,故意输入错误密码,然后查看/var/log/secure日志
日志服务程序
上图就是rsyslog管理的所有日志文件
CentOS7以后日志服务是rsyslogd,就是说在使用日志的时候,需要看它有没有被启动,如果没有启动,那么Linux就不会记录日志
ps -aux | grep rsyslogd
# 查看rsyslogd 服务的自启动状态
systemctl list-unit-files | grep rsyslog
既然rsyslog管理着日志,那么就可以通过它的配置文件,来自定义日志,或者设置日志的级别
配置文件所在路径:/etc/rsyslog.conf
编辑文件格式为:*.* 存放日志文件
其中第一*代表日志类型,第二个*代表日志级别
日志类型
| 日志类型 | 说明 |
|---|---|
| auth | pam产生的日志 |
| authpriv | ssh、ftp等登录的验证信息 |
| corn | 时间任务相关 |
| kern | 内核 |
| lpr | 打印 |
| 邮件 | |
| mark(syslog)-rsyslog | 服务内部的信息,时间标识 |
| news | 新闻组 |
| user | 用户程序产生的相关信息 |
| uucp | unix to nuix copy主机之间相关的通信 |
| local 1-7 | 自定义的日志设备 |
日志级别
| 级别 | 说明 |
|---|---|
| debug | 有调试信息,日志信息最多 |
| info | 一般信息日志,最常用 |
| notice | 最具有重要性的普通条件的信息 |
| warning | 警告级别 |
| err | 错误级别,阻止某个功能或模块不能正常工作的信息 |
| crit | 严重级别,阻止整个系统或整个软件不能正常工作的信息 |
| alert | 需要立刻修改的信息 |
| emerg | 内核崩溃等重要信息 |
| none | 什么都不记录 |
注意:从上到下,是从最低级别到最高级别,信息越来越少
日志字段说明
由日志服务rsyslogd记录的日志文件,日志文件的格式包含以下4列
- 事件产生的时间
- 产生事件的服务器的主机名
- 产生事件的服务名或程序名
- 事件的具体信息
日志轮替
简单说日志轮替就是,删除时间过早的日志,节省磁盘空间,如果不删除旧的日志,那么日志的信息会越来越大,占用空间也是如此,所以就需要日志轮替
如果日志轮替配置文件中有dateext参数,那么日志就会使用时间来作为日志的后缀。如果没有该参数,那么就会使用日志名.1的方式
日志轮替有两种方式:
- 全局配置,路径在
/etc/logrotate.conf文件 - 对单个日志文件进行配置,路径在
/etc/logrotate.d,新建立个文件即可
logrotate.conf文件说明
# see "man logrotate" for details
# 每周轮换日志文件
weekly
# 保留4份日志,当建立新的日志文件时,旧的就会删除
rotate 4
# 创建新的空的日志文件,在日志轮替后
create
# 使用日期作为日志轮替文件的后缀
dateext
# 日志是否压缩,如果取消注释,则日志会在轮替转存的同时进行压缩
#compress
# 如果所有日志配置都在此文件,那么就不好维护,所以有一个目录,目录下存放对应的日志轮替规则
include /etc/logrotate.d
# 包含 /etc/logrotate.d/目录中所有的子配置文件。也就是说会把这个目录所有子配置文件读取进来
单个配置日志的轮替规则
语法:在/etc/logrotate.d/目录下创建文件,文件内容如下
对应日志路径 {
规则
}
/var/log/wtmp {
monthly # 每月对日志文件进行一次轮替
create 0664 root utmp # 建立新的日志文件,权限是0664,所有者是root 所属组是root组
minsize 1M # 日志文件最小轮替大小是1MB。也就是日志一定要超过1M才会轮替,否则就算时间到1个月,也不进行日志轮替
rotate 1 # 仅保留一份日志,也就是只有 wtmp和wtmp.1日志保留
}
| 参数 | 说明 |
|---|---|
| daily | 日志的轮替周期是天 |
| weekly | 日志的轮替周期是每周 |
| monthly | 日志的轮替周期是每月 |
| rotate 数字 | 保留的日志文件的个数,0指没有备份 |
| compress | 日志轮替时,旧的日志进行压缩 |
| create mode owner group | 建立新日志,同时指定新日志的权限和所有者与所属组 |
| mail address | 当日志轮替时,输出内容通过邮件发送到指定的邮箱地址 |
| missingok | 如果日志不存在,则忽略该日志的警告信息 |
| notifempty | 如果日志为空文件,则不进行日志轮替 |
| minsize 大小 | 日志轮替的最小值 |
| size 大小 | 日志只有大于指定大小,才会轮替,而不是按照时间轮替 |
| dateext | 使用日期作为日志轮替文件的后缀 |
| sharedscripts | 在此关键字之后的脚本只执行一次 |
| prerotate/endscript | 在日志轮替之前执行脚本命令 |
| postrotate/endscript | 在日志轮替之后执行脚本命令 |
把自己的日志加入日志轮替
- 在
/etc/logrotate.conf文件中,写上类型和级别 以及自己日志的路径 - 配置日志轮替规则,在
/etc/logrotate.d/目录下创建xiaohong文件,然后编辑,将下面的写入文件中
在/etc/logrotate.d/目录中建立该日志的轮替文件,因为该目录的所有文件都会被include到主配置文件中
在/etc/logrotate.d/目录下新建xiaohong然后配置上
/var/log/xiaohong.log {
missingok
daily
copytruncate
rotate 7
notifempty
}
日志轮替机制原理
原理:就是使用crontab定时任务,在/etc/cron.daily/目录下,就会发现这个目录是有logrotate可执行文件的,logrotate通过这个文件依赖定时任务执行的
查看内存日志
内存日志重启就会消失
journalctl # 查看全部
journalctl -n 3 # 查看最新3条
journalctl --since 19:00 --until 19:10 # 查看起始时间到结束时间的日志
journalctl -p err # 报错日志
journalctl -o verbose # 日志详细内容
journalctl _PID=123 _COMM=sshd # 查看包含这些参数的日志(在详细日志看) 或者 journalctl | grep sshd
内核
# 查看当前内核版本
uname -a
# 检测内核版本,显示可以升级的内核版本
yum info kernel -q
# 升级内核
yum update kernel
# 查看已安装的内核
yum list kernel -q
备份与恢复
备份命令:dump
恢复命令:restore
安装dump和restore
yum -y install dump
yum -y install restore
dump基本使用
dump支持分卷和增量备份。
增量备份:就是在原本备份的基础上,加入修改或新增过的文件
注意:dump只对分区支持增量备份,对文件和目录不支持增量备份,及只能使用0级别备份
dump命令使用
dump [ -cu] [-123456789] [-f 备份后的文件名] [-T 日期] [ 目录或文件系统 ]
参数说明
-c : 创建新的归档文件,并将由一个或多个文件参数所指定的内容写入归档文件的开头
-0123456789: 备份的级别,0是完整备份,若0以上的级别,则备份上一级修改或添加新的文件备份,到9之后,可以再次轮替
-f 备份后文件名: 指定备份后文件名
-j : 调用bzlib库压缩备份文件,也就是bz2格式,让文件更小
-T 日期: 指定开始备份的时间与日期
-u : 备份完成后,在/etc/dumpdares中记录备份的文件系统,层次,日期与时间等
-t : 指定文件名,若该文件已存在备份文件中,则列出名称
-W: 显示需要备份的文件及其最后一次备份的级别,时间,日期
-w : 与-W类似,但仅显示需要备份的问阿金
使用举例
将/boot分区所有内容备份到/opt/boot.bak0.bz2文件中,备份层级为0
常用的可视化管理工具
webmin
webmin是一个web网页,管理员可以通过网页来对Linux进行控制
下载地址:http://download.webmin.com/download/yum/
从上面网址下载一个就行
然后,安装webmin,rpm -ivh webmin,如果在安装的时候出现问题,可以先安装yum install perl-Encode-Detect,具体看返回的错误。或者:https://www.webmin.com/rpm.html
yum -y install perl perl-Net-SSLeay openssl perl-IO-Tty perl-Encode-Detect
修改密码:
/usr/libexec/webmin/changepass.pl /etc/webmin root 你的密码 # 注意这里的root并不是OS的,而是webmin的
然后修改默认端口,登录即可
vim /etc/webmin/miniserv.conf # 修改端口
将port 和 listen 随意改下
/etc/webmin/restart # 重启
/etc/webmin/start # 启动
/etc/webmin/stop # 停止
然后对服务器开放端口,用浏览器IP:端口打开即可
bt
直接官网上,就有安装命令 https://www.bt.cn/
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
安装之后会给你网址,以及登录密码

如果没有记录的话,可以输入指令获取
bt default

浙公网安备 33010602011771号