Linux基础
目录结构
树状目录结构,最上层是根目录
/
/bin,binary,存放常用命令/sbin,super user binary,存放管理员使用的管理程序/home,存放普通用户主目录/root,系统管理员的主目录/lib,存放动态链接库/etc,存放配置文件/proc,系统内存映射,数字命名的都是一个进程/sys,系统内核的驱动结构/srv,service,存放服务启动后需要提取的信息/tmp,存放临时文件/dev,管理设备/mnt,用于临时挂载文件/opt,额外安装软件/usr/local,安装软件,一般以编译源码方式安装/var,存放不断扩充的东西,包括日志/selinux,安全子系统
基本操作
vim
分为一般模式(默认),插入模式,命令行模式
- 在一般模式通过
i等进入插入模式 - 在插入模式按
Esc退出插入模式,进入一般模式 - 在一般模式输入
:或/进入命令行模式
常用快捷键:
yy,拷贝当前行,5yy拷贝当前行向下的五行p,粘贴dd,删除当前行gg,定位到最首行G,定位到最末行
常用命令:
:wq,保存并退出,:wp!,强制保存退出:q,退出- 查找:
/进入命令行模式后直接输入要查找的关键词,输入n查找下一个,N查找上一个 set nu,设置行号set nonu,取消行号
关机&重启
sync,同步内存中的数据到磁盘,关机或重启前要做的shutdown -h now,立即关机shutdown -r now,立即重启shutdown -h 1,1分钟后关机halt,关机reboot,重启
找回root密码
- 进入Linux,按
e - 再
linux16开头的行,行尾输入init=bin/sh - 按
Ctrl+X进入运行级别1(单用户模式) - 输入
mount -o remount,rw /,回车 - 输入
passwd,回车 - 修改密码
- 输入
touch /.autorelabel,回车 - 输入
exec /sbin/init,回车,然后系统自动重启
用户管理
用户
添加用户后会自动生成对应的家目录
useradd 用户名,添加用户useradd -d 主目录 用户名,添加用户并指定主目录useradd -g 用户组 用户名,添加用户并指定用户组usermod -g 用户组 用户名,修改用户所在组usermod -d 主目录 用户名,修改用户的主目录passwd 用户名,设置密码userdel 用户名,删除用户userdel -r 用户名,删除用户及其主目录id 用户名,查询用户信息su - 用户名,切换用户logout/eixt,回到原来的用户,logout在运行级别3下有效whoami,查看当前用户
用户组
groupadd 组名:添加组groupmod -g 用户组 用户名:修改用户的用户组groupdel 组名:删除组
相关配置文件
/etc/passwd文件,用户的配置文件,每行:用户名:口令:用户id:组id:描述:主目录:登录 Shell/etc/group文件,用户组的配置文件,每行:组名:口令:组id:组内用户列表/etc/shadow文件,口令配置文件,每行:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
运行级别
- 0:关机
- 1:单用户,可以找回密码
- 2:多用户,没有网络服务
- 3:多用户,有网络服务
- 4:系统未使用,保留给用户
- 5:图形界面
- 6:重启
切换运行级别:
-
init 运行级别,运行级别为数字 -
systemctl isolate <target> -
multi-user.target:运行级别3 -
graphical.target:运行级别5 -
systemctl get-default,查看默认运行级别 -
systemctl set-default TARGET.target,设置默认运行级别,比如multi-user.target
常用命令
man [选项] 命令或函数等:手册1:用户命令2:系统调用3:C库函数4:设备和特殊文件5:文件格式和约定6:游戏和演示7:杂项8:系统管理命令
文件相关
ls [选项] [目录或文件]:显示文件-a:显示所有,包括隐藏文件-l:以列表方式显示-lh:以人类理解的方式显示文件大小-li:查看inode号
cd 目录:切换工作目录- 可以是相对目录或绝对目录,
~家目录,..上一级目录
- 可以是相对目录或绝对目录,
mkdir [选项] 目录:创建目录-p创建多级目录
rmdir [选项] 目录:删除空目录- 删除非空目录用
rm -rf 目录
- 删除非空目录用
touch 文件名:创建空文件cp [选项] 源文件或目录 目标:拷贝-r递归拷贝\cp强制覆盖不警告
rm [选项] 文件或目录:移除-r递归删除-f强制删除不提示
mv 源文件或目录 目标文件或目录:移动,可以实现重命名cat [选项] 文件名:查看文件内容
-n显示行号,一般配合more用cat 文件名 | moremore:文本过滤器空格键:向下翻页Enter:向下一行=:输出当前行号q:退出more
less:文本过滤器,但不一次加载完所有文件,更强大空格键:向下翻页pagedown:向下翻页pageup:向上翻页/关键字:查找q:退出less
head 文件名:输出文件前10行内容head -n 6 文件名:输出文件前6行内容
tail 文件名:输出文件后10行内容tail -n 5 文件名:输出文件后5行内容tail -f 文件名:实时跟踪文件的所有更新
> 目标文件名输出重定向:将内容覆盖到目标文件名中ls -l > 文件名cat 文件名 > 文件名echo 内容 > 文件名
>> 目标文件名:覆盖写入ln [选项] 原文件或目录 目标链接名:创建链接,默认是硬链接,inode号相同,即文件正文相同-s:软链接,符号链接,文件正文存储目标文件的路径信息,原文件改名后软连接会失效
scp [选项] 源文件 目标路径:基于ssh登录的远程拷贝数据- 目标路径:
用户名@主机ip:目标主机下的路径
- 目标路径:
wc [选项] [文件]:计数,不指定文件默认从标准输入读取-l:行数-c:字节数-w:字数
控制台相关
echo 内容,输出内容到控制台history,查看历史命令history 10,查看最近使用的10个命令!6,执行编号为6的历史命令
时间相关
date:显示当前时间date +%Y:显示当前年份date +%m:显示当前月份date +%d:显示当前日期date "+%Y-%m-%d %H:%M:%S":按格式显示当前时间date -s "2026-6-20 21:15:10":设置系统时间
cal:显示本月日历cal 2026:显示2026年日历
查找相关
find [搜索目录] [选项]:沿指定目录递归向下查找-name 文件名:按指定文件名查找-user 用户名:按指定所有者查找-size 文件大小:按文件文件大小查找,+大于-小于,-size +200M大于200M的文件
locate 文件名:根据locate数据库快速定位文件路径updatedb:更新locate数据库,管理员需要定期更新,第一次运行前需要更新
|:管道符,将前一个命令的处理结果输出传递给后面的命令处理grep [选项] 查找内容 源文件:过滤查找-n:显示行号-i:忽略字母大小写-v:反向匹配cat ./hello.txt | grep "mofei"
压缩&解压类
gzip和gunzipgzip 文件名:将文件压缩为.gz文件gunzip 前缀.gz:解压文件
zip和unzipzip [选项] 前缀.zip 压缩目标:将文件或目录压缩为.zip文件-r:递归压缩,压缩目录
unzip [选项] 前缀.zip:解压-d 目录:指定解压后存放的目录
tar [选项] 前缀.tar.gz|前缀.tar 打包目标:将目标打包(可以同时压缩),目标可以是多个-c:产生.tar打包文件-v:显示详细信息-f:指定包文件名,必须放在选项列表最后-z:使用gzip方式压缩/解压-x:解包.tar文件
网络类
ifconfig:查看ip地址ip addr:查看ip地址ping 地址:测试网络连接netstat [选项]:查看系统网络情况,可以用grep过滤-an:按一定顺序排列输出-p:显示哪个进程在调用netstat -ltnp | grep mysqld:查找mysql的端口号Proto:连接协议Local Address:主机ip地址以及端口号Foreign Address:外部ip地址以及端口号
telnet 主机 端口:远程终端,可用作TCP连接测试客户端,连接后输出请求报文并按两次回车可以发送请求nc [选项] 主机 端口:建立TCP/UDP连接,监听端口,传输数据等,连接后输出请求报文并按两次回车可以发送请求-v:只显示连接结果-z:只检查连接,不发送数据-u:对于UDP
lsof [选项] [路径或条件]:列出进程打开的文件+D:递归检查目录-p pid:查看某个进程打开的文件-u user:查看某个用户打开的文件-iTCP:查看TCP连接-iUDP:查看UDP连接
curl [选项] url:向url发送请求并接收响应tcpdump [选项] [过滤表达式]:抓包工具-D:列出可用的接口-i 接口名:指定接口实时抓包host 主机ip:按主机过滤tcp:只抓TCP的包port 端口号:按端口号过滤
权限管理
每个用户必须属于一个组,每个文件有所有者,所在组,其他组
- 所有者就是创建文件的用户
- 用户创建文件后文件的所在组默认是所有者的所在组
文件信息
-
0位:文件类型
l:软链接,相当于快捷方式d:目录c:字符设备文件b:块设备文件,如硬盘-:普通文件s:套接字文件p:管道文件
-
1-3位:所有者权限,user
-
4-6位:所在组权限,group
-
7-9位:其他用户权限,other
-
硬链接:文件名到磁盘正文区的映射关系(inode号),多个文件名可以有同一个inode号
-
软链接:独立的文件,文件正文是一个字符串,表示目标文件的路径信息,目标路径信息改变了软连接就失效
rwx权限
数字表示:
r=4,w=2,x=1
作用到文件
r:可读取w:可修改,不一定可以删除文件,删除前提是对该文件所在目录有写权限x:可执行
作用到目录
r:可以读取,ls查看目录内容w:可修改,对目录内创建,删除,重命名目录x:可以进入该目录
修改权限
chmod:修改权限,u所有者,g所在组,o其他人,a所有人chmod u=rwx,g=rx,o=x 目标chmod o+w 目标:所有者增加读权限chmod a-x 目标:所有用户删除执行权限chmod 751 目标
修改所有者
chown 用户 目标:修改所有者chown 用户:组 目标:修改所有者和所在组chown -R 用户 目标:递归修改,对于目录
修改所在组
chgrp 组 目标:修改所在组chgrp -R 组 目标:递归修改,对于目录
定时任务调度
任务调度:系统在某个时间执行的特定的命令或程序
分类:
- 系统工作,如病毒扫描
- 用户工作,如mysql数据库备份
crond任务调度
需要保证文件有足够的权限
crontab [选项]-e:编辑contab定时任务-l:查询contab定时任务-r:删除当前用户所有的contab任务
systemctl restart crond:重启任务调度
设置crontab:
*/1 * * * * 命令:每分钟执行一次命令- 第一个参数:一小时中的第几分钟
- 第二个参数:一天中的第几小时
- 第三个参数:一个月中的第几天
- 第四个参数:一年中的第几个月
- 第五个参数:一周中的第几天
*:任何时间,:不连续的时间-:连续的时间段*/n:每n个单位时间
at定时任务
at命令是一次性定时任务,at的守护进程atd在后台运行,检查作业队列atd默认每60秒检查作业队列,如果有作业且时间匹配,运行该作业- 使用
at命令需要保证atd运行ps -ef | grep atd:检查atd是否正在运行
设置at:
at [选项] 时间:在某个时间设置命令,按Ctrl+D结束输入atq:查看作业队列atrm 编号:删除编号对应的作业
指定时间:
小时:分钟,如果当天该时间已过去,第二天执行midnight,noon,teatime等模糊时间年-月-日,日期必须在时间后面now + n 时间单位:从现在开始n个时间单位,比如minutes,hours,days,weeks等today,tomorrow
磁盘分区
- Linux只有一个根目录,每个分区组成文件系统中的一部分
- 通过挂载将一个硬盘分区映射到一个目录下
硬盘
- Linux硬盘分为IDE硬盘和SCSI硬盘等
- 硬盘表示符
硬盘类型+盘号+分区- 硬盘类型:
hd表示IDE硬盘,sd表示SCSI硬盘 - 盘号:
a基本盘,b从属盘,c辅助盘,d辅助从属盘 - 分区:1-4表示主分区或扩展分区,5开始是逻辑分区
- 硬盘类型:
lsblk -f:查看所有设备
挂载
分区
- 通过
lsblk -f找到新添加的硬盘名称,即/dev下的对应目录名,fdisk -l查看磁盘详细信息 fdisk 目录:对目录对应的硬盘分区m:显示命令列表p:显示硬盘分区n:新增分区d:删除分区w:写入并退出q:不保存退出
格式化分区
注意是给分区格式化不是给硬盘格式化
mkfs -t ext4 /dev/目标:以ext4方式格式化分区
挂载
将硬盘分区挂载到目录下
mount 设备名称 挂载目录:挂载,用命令挂载重启后会失效umount 设备名称 挂载目录:取消挂载- 永久挂载:修改
/etc/fstab,添加/dev/目标 挂载目录 其他参数,保存后执行mount -a生效
硬盘情况查询
df -h:查询系统整体磁盘使用情况du [选项] 目录:查询指定目录的磁盘占用情况,默认为工作目录-h:以人类理解的方式显示文件大小-a:含文件-s:汇总--max-depth=n:设置子目录深度为n-c:显示汇总值
ls -l /opt | grep "^-" | wc -l:统计/opt下文件的个数ls -l /opt | grep "^d" | wc -l:统计/opt下目录的个数ls -lR /opt | grep "^-" | wc -l:统计/opt下文件的个数,包括子目录里的ls -lR /opt | grep "^d" | wc -l:统计/opt下目录的个数,包括子目录里的tree:以树状结构显示目录
NAT网络配置
原理
- 桥接模式:虚拟器和主机有相同的地位,可以访问外网
- NAT模式:虚拟机隐藏在主机后面,通过虚拟网卡(vmnet8)连接主机,通过主机访问外网,主机不需要有无线网卡和有线网卡
- 主机模式:和主机通过纯虚拟封闭网络(vmnet1)连接,不能访问外网
指定ip
设置ip地址需要和虚拟网卡保持在同一网段且不超过设置的范围
- 编辑
/etc/sysconfig/network-scripts/ifcfg-ens33文件DEVICE:接口名(设备,网卡)HWADDR:MAC地址TYPE:网络类型ONBOOT:设备启动时网络接口是否有效BOOTPROTO:网络配置方法none:引导时不使用协议static:静态分配ipbootp:BOOTP协议dhcp:DHCP协议
IPADDR:ip地址GATEWAY:网关DNS1:域名解析器NETMASK:子网掩码
- 设置
BOOTPROTO为static - 设置ip地址
- 设置子网掩码
- 设置网关
- 设置DNS地址
systemctl restart NetworkManager:重启服务生效
设置主机名和host映射
主机ip地址 主机名- Linux:在
/etc/hosts设置主机名和host映射,hosts文件记录ip和主机名的映射关系 - Windows:在
C:\Windows\System32\drivers\etc\hosts设置主机名和host映射
进程管理
- 每个执行的程序都为一个进程,每个进程分配一个pid进程号
- 每个进程以前台和后台两种方式存在,一般系统的服务以后台形式存在
操作
ps
ps -aux:System V风格显示所有(含其他用户)的进程ps -aux | grep "sshd":查看sshs服务是否在运行USER:用户名PID:进程号%CPU:CPU占用百分比%MEM:内存占用百分比VSZ:占用虚拟内存大小(KB)RSS:占用物理内存大小(KB)TTY:终端名称,若是?表示不依赖终端而存在STAT:进程状态S:睡眠s:会话的先导进程N:比普通优先级低R:正在运行R+:正在前台运行D:短期等待Z:僵尸进程T:被追踪或停止等待
START:启动时间TIME:使用CPU时间COMMAND:启动进程所用的命令和参数
ps -ajx:BSD显示所有(含其他用户)的进程PGID:进程组idSID:会话组id
ps -ef:BSD风格显示所有(含其他用户)的进程PPID:父进程idC:CPU 用于计算执行优先级的因子,数值越大,表明进程是 CPU 密集型运算,执行优先级会降低;数值越小,表明进程是 I/O 密集型运算,执行优先级会提高STIME:启动时间CMD:启动进程所用的命令和参数
pstree [选项]:树状显示进程信息-p:显示进程号-u:显示进程所属用户
kill
可以向进程发送信号
kill [选项] 进程号:杀死进程kill -l:显示可以发送的信号- 可以发送62个信号,前32个是稳定信号,后30个是不稳定信号
- 常用信号:
SIGHUP:当进程所在的终端被关闭后,终端会给运行在当前终端的每个进程发送该信号,默认结束进程SIGINT:中断信号,当用户输入Ctrl + C时发送SIGQUIT:退出信号,当用户输入Ctrl + /时发送,退出进程SIGKILL:强制杀死指定的进程SIGSEGV:当指针出现越界访问时发送,表示段错误SIGPIPE:当管道破裂时发送该信号SIGALRM:当定时器超时后发送该信号SIGSTOP:暂停进程,当用户输入Ctrl+C时发发送SIGTSTP:暂停进程SIGUSR1,SIGUSR2:留给用户自定义的信号,没有默认操作SIGCHLD:当子进程退出后,会向父进程发送该信号
- 特殊信号:
SIGKILL,SIGSTOP:不能被捕获和忽略
kill -信息号 进程号:发送信号到进程
killall 进程名称:通过进程名称匹配杀死进程
top
top [选项]:动态监控进程-d 秒数:刷新时间间隔,默认3秒-i:不显示僵尸进程和闲置进程-p 进程号:指定监控进程
交互:load average:三个值的平均值大于0.7说明负载比较大P:以CPU使用率排序,默认M:以内存使用率排序N:以进程号排序u:监视特定用户k:杀死进程q:退出
进程状态切换
jobs -l:查看当前终端所有停止的进程的作业号和进程号bg 作业号:将暂停的作业在后台运行fg 作业号:将后台运行的作业切换到前台运行
service服务
service(守护进程)本质上是后台进程,通常会监听某个窗口,等待其他程序的请求
service 服务名 [start|restart|reload|status]- CentOS7后常用
systemctl service指令管理的服务在/etc/init.d目录下
- CentOS7后常用
chkconfig --list:列出所有服务chkconfig 服务名 --listchkconfig --level 运行级别 服务名 [on|off]:设置某个服务在某个运行级别下自启动或关闭自启动,需要重启生效
systemctl [start|stop|restart|status] 服务名systemctl指令管理的服务在/usr/lib/systemd/system目录下systemctl list-unit-files:查看每个服务开机启动状态,可以用grep过滤systemctl [enable|disable] 服务名:设置或关闭服务开机自启动systemctl is-enabled 服务名:查询服务是否开机自启动
防火墙
firewall-cmd --permanent --add-port=端口号或协议:打开端口,需要重建防火墙firewall-cmd --permanent --remove-port=端口号或协议:关闭端口,需要重建防火墙firewall-cmd --query-port=端口号或协议:查询端口打开状态firewall-cmd --list-ports:列出所有打开的端口firewall-cmd --reload:重建防火墙
rpm和yum
包管理工具
rpm
包名格式
firefox-60.2.2-1.el7.centos.x86_64firefox:名称60.2.2:版本号el7.centos.x86_64:适用操作系统i686,i386:32位系统x86_64:64位系统noarch:通用
查询
rpm -qa:列出所有rpm软件包rpm -q 包名:查询软件包是否安装rpm -qi 包名:查询软件包信息rpm -ql 包名:查询软件包中的文件rpm -qf 文件全路径名:查询文件所属的软件包
安装&卸载
rpm -ivh 包名:安装软件包-i:安装-v:提示-h:显示进度条
rpm -e 包名:卸载软件包--nodeps:无视依赖强制卸载
yum
基于rpm的Shell前端软件包管理器,能自动处理依赖关系,自动从指定的服务器下载rpm包并安装
yum list:列出可安装软件列表yum list installed:列出已安装软件列表yum install 包名:安装软件包-y:自动应答所有yes
yum remove 包名:卸载软件包yum update:升级所有软件包
环境搭建
安装mysql5.7
安装并处理环境
- 在
/opt目录下载mysql的rpm包cd /optwget rpm链接- 若
wget不可用,下载yum -y install wget - rpm链接参考:
https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
- 若
- 安装mysql的yum源:
yum -y localinstall mysql57-community-release-el7-11.noarch.rpm - 安装mysql
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022yum -y install mysql-community-serve
- 启动mysql服务
systemctl start mysqldsystemctl daemon-reload重载配置
- 修改mysql密码,最开始密码为空:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root123'; - 允许其他主机登录:在mysql中:
USE mysql;:使用mysql数据库UPDATE user SET host='%' WHERE user='root';,修改user表中的host字段FLUSH PRIVILEGES;:刷新配置
- 打开
3306/tcp端口firewall-cmd --permanent --add-port=3306/tcpfirewall-cmd --reload
- 配置mysql默认编码为utf8,在
/etc/my.cnf文件中的[mysqld]下添加配置:character_set_server=utf8init_connect='SET NAMES utf8'
- 重启mysql:
systemctl restart mysqld - 在mysql查看编码:
SHOW VARIABLES LIKE '%character%';
修改root密码
- 在
/etc/my.cnf文件中的[mysqld]下修改配置:skip-grant-tables=1,设置免密登录,设置后密码为空 - 重启mysql
- 免密登录mysql后修改用户密码为空:
USE mysql;UPDATE user SET autentication_string='' WHERE user='root';
- 将
/etc/my.cnf中skip-grant-tables=1注释掉 - 重启mysql
- 进入mysql后修改root密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root123';
Shell编程
Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面面系统级程序,用户可以用 Shell 来启动,挂起,停止,编写一些程序
Shell脚本
#!/bin/bash
echo "hello world"
脚本要求:
- 以
#!/bin/bash开头 - 脚本有可执行权限
脚本执行方式:
- 给脚本可执行权限,直接用文件名执行
./hello.sh - 不用给可执行权限,直接用
sh 文件名执行 - 以后台方式运行在最后加
&
变量
Shell变量分为系统变量和用户自定义变量
系统中的变量:$HOME,$PWD,$SHELL,$USER等
set:显示当前Shell中的所有变量
定义变量
变量名=值:定义变量readonly 变量名=值:定义静态变量,不能撤销- 变量名可以由字母,数字,下划线组成,不能以数字开头,一般为大写
- 赋值的等号两边不能有空格
- 将命令的返回值赋值给变量:
A=`date`A=$(cal)
unset 变量名:撤销变量- 使用变量在变量名前面加上
$
设置环境变量
export 变量名=值:将变量输出为环境变量(全局变量)source 配置文件:使配置文件立即生效echo $变量名:查询环境变量的值
位置参数变量
获取命令行的参数信息
$n:1-9代表第1到9个参数,0是命令本身,10以上的参数要用大括号${10}$*:命令行中的所有参数,把所有参数看作一个整体$@:命令行中的所有参数,把每个参数区分对待$#:命令行中所有参数个数
预定义变量
可以直接在Shell脚本中使用
$$:当前进程的进程号$!:后台运行的最后一个进程的进程号$?:最后一次执行的命令的返回状态- 值为 0,说明上一个命令正确执行
- 值为非 0(具体是哪个数,由命令自己来决定),说明上一个命令执行不正确
运算符
$((运算式))或$[运算式]或expr 运算式- 使用
expr后面的运算式的运算符左右两边要有空格 - 使用
expr方式且要赋值给变量需要加反引号:`expr 运算式`
- 使用
条件判断
[ 条件 ]- 条件左右有空格,条件运算符的左右两边也有空格
- 非空返回true,可以用
$?验证(0为true,>1为false)
常用判断条件:
=:两个字符串或两个整数比较-lt:小于-le:小于等于-eq:等于-gt:大于-ge:大于等于-ne:不等于-r:有读权限-w:有写权限-x:有可执行权限-f:文件存在且是一个常规文件-e:文件存在-d:目录存在
流程控制
if
if [ 条件 ]
then
代码
fi
if [ 条件 ]
then
代码
elif [ 条件 ]
then
代码
fi
case
case $变量名 in
"值1")
代码
;;
"值2")
代码
;;
*) #默认分支
代码
;;
esac
for
for 变量名 in 值1 值2 值3
do
代码
done
for i in $@
do
echo "para is $i"
done
for((初始值;控制条件;变量变化))
do
代码
done
while
while [ 条件 ]
do
代码
done
读取控制台输入
read [参数] 变量:将读取到的值赋给变量-p 提示词:指定提示词-t 秒数:指定等待时间,超过等待时间不再等待
函数
系统函数
basename 文件完整路径名 [后缀]:删去包括最后一个/的所有前缀并返回- 若指定了后缀,也会删掉后缀
dirname 文件完整路径名:返回最后一个/前面的前缀
自定义函数
函数名()
{
代码;
[return 返回值;]
}
- 函数名前面可以加
function - 可以不带返回值,返回值介于0-255
- 通过位置参数获取函数参数
- 函数调用:
函数名 参数
备份数据库
日志管理
日志是记录重大事件的工具
- 记录用户登录信息,系统启动信息,系统安全信息,邮件相关信息,各种服务相关信息等
- 通过日志检查错误发生原因
/var/log目录是系统存放日志的位置
常用日志
| 日志文件 | 说明 |
|---|---|
| /var/log/boot.log | 系统启动 |
| /var/log/cron | 与系统定时任务相关 |
| /var/log/cups/ | 打印信息 |
| /var/log/dmesg | 系统在开机时内核自检的信息,可以使用dmesg命令直接查看内核自检信息 |
| /var/log/btmp | 错误登陆,是二进制文件,要使用lastb命令查看 |
| /var/log/lastlog | 系统中所有用户最后一次的登录时间,是二进制文件,要使用lastlog命令查看 |
| /var/log/maillog | 邮件信息 |
| /var/log/message | 系统重要消息,记录系统的绝大多数重要信息;系统出问题首先要检查的日志 |
| /var/log/secure | 验证和授权方面的信息,只要涉及账户和密码的程序都会记录,包括添加用户和修改用户密码 |
| /var/log/wtmp | 永久记录所有用户的登陆、注销信息,系统的启动、重启、关机事件,是二进制文件,要使用last命令查看 |
| /var/tun/ulmp | 当前已经登录的用户的信息,要使用w、who、users等命令查看 |
rsyslogd
rpm -q rsyslog:检查rsyslog服务是否安装ps -aux | grep "rsyslog" | grep -v "grep":检查服务是否启动systemctl list-unit-files | grep "syslog":查询服务自启动状态/etc/rsyslog.conf:配置文件- 格式:
*.* 存放日志文件,第一个*是日志类型,第二个*是日志级别,*代表所有类型
- 格式:
日志类型
auth:pam 产生的日志authpriv:ssh、ftp 等登录信息的验证信息corn:时间任务相关kern:内核lpr:打印mail:邮件mark(syslog)-rsyslog:服务内部的信息,时间标识news:新闻组user:用户程序产生的相关信息uucp:unix to nuix copy 主机之间相关的通信local数字:自定义的日志设备,数字为1-7
日志级别
从上到下,级别从低到高,记录的信息越来越少
debug:有调试信息的,日志通信最多info:一般信息日志,最常用notice:最具有重要性的普通条件的信息warning:警告级别err:错误级别,阻止某个功能或者模块不能正常工作的信息crit:严重级别,阻止整个系统或者整个软件不能正常工作的信息alert:需要立刻修改的信息emerg:内核崩溃等重要信息none:什么都不记录
自定义日志
- 在
/etc/rsyslog.conf文件中按照格式添加规则 - 创建存放日志的日志文件
日志轮替
把旧的日志文件移动并改名,建立新的空的日志文件,旧的日志文件超出大小范围就删除
原理:通过可执行文件/etc/cron.daily/logrotate依赖定时任务执行日志轮替
配置
配置文件:全局配置文件/etc/logrotate.conf,子配置文件目录/etc/logrotate.d/,子配置优先级更高
子配置规则也可以写在/etc/logrotate.conf里面
include /etc/logrotate.d:表示包含这个目录下的所有子配置文件
存放日志的文件{
轮替规则
}
参数:
daily:每天轮换weekly:每周轮换monthly:每月轮换rotate 数字:备份个数,0表示不备份compress:将旧日志压缩create [权限] [所有者] [所在组]:建立新日志,可以指定权限,所有者,所在组mail 地址:将输出内容发到邮件地址missingok:如果日志不存在,则忽略该日志的警告信息notifempty:如果日志为空文件,则不进行日志轮替minsize 大小:执行日志轮替的日志文件大小的最小值size 大小:日志大于某个大小才轮替,忽略时间轮替dateext:使用日期作为日志轮替文件的后缀sharedscripts:在此关键字之后的脚本只执行一次prerotate 脚本文件 endscript:在日志轮替之前执行脚本postrotate 脚本文件 endscript:在日志轮替之后执行脚本
内存日志
通过
journalctl查看内存日志,系统重启会清空
journalctl:查看全部内存日志journalctl -n 5:查看最新5条journalctl --since 15:00 --until 17:30:指定时间段journalctl -p err:报错日志journalctl -o verbose:日志详细内容journalctl _PID=1234 _COMM=sshd:在详细内容中指定参数

浙公网安备 33010602011771号