目录
前言
本文主要介绍在Linux上项目出错时,如何根据日志查找错误、分析日志的过程用常用的快捷键。
其他内容主要是记录一下工作上线手册会涉及到的内容。例如:创建用户、关闭防火墙、时钟同步、NAS挂载、软件安装、开机自启动等。
也会记录一下Linux上常用到的一些命令,具体的可见参考文档。
一、日志分析
背景:项目使用logback写日志,业务处理过程中设置流水号跟踪业务处理过程。
Linux命令主要用到tail和find 和grep 命令。
1.问题能够复现,可使用tail命令实时查看文件内容。-nf从倒数多少行开始展示,新内容实时刷新。ctrl+c结束命令。
tail [参数] [文件名]
#-100展示文件末尾100行,-f实时追加最新内容。示例:
tail -100f /log/app.log
2.发现问题,需要分析问题出现的原因。情况一,能定位到具体的错误日志文件,无法定位到文件中错误位置。vi 打开文件/内容 查找。
#vi/vim命令编辑模式下查找内容,示例在app.log文件中查error或者业务流水号关键字内容。
vi app.log
执行上面命令进入编辑模式,使用下面步骤查找错误点
- 按/
- 输入搜索模式或者字符串。如:输入error
- 按Enter执行搜索。
- 按n查找 下一个或N查找上一个。
- G定位到文件末尾。
3.发现问题,需要分析问题出现的原因。情况二,不能定位到具体的错误日志文件。使用grep命令用于根据给定的正则表达式搜索文本,并将匹配的行打印出来。
grep [参数] 查找内容 [文件]
#查找内容和文件名支持正则,忽略大小写在当前目录下的.log文件中查询 error内容。
grep -ri error *.log
定位到错误 文件,接下来参考2定位到具体错误内容。
常用参数说明:
-i
:忽略大小写进行匹配。-v
:反向查找,只打印不匹配的行。-n
:显示匹配行的行号。-r
:递归查找子目录中的文件。-l
:只打印匹配的文件名。-c
:只打印匹配的行数。
4.补充,具体命令用法可使用命令 --help。参考
find 命令在指定目录下查找文件和目录,结合管道| 和grep 命令查找内容。适用,不知道具体日志文件目录和内容时。
find [路径] [匹配条件] [动作]
#查找当前目录下所有20240110日志文件中的error内容
find -name "*20240110.log"|xargs grep error
#查找log目录下root用户写的文件
find -user root
#在data目录下删除所有.running的文件
find /log -name "*.running" -exec rm {} \;
【路径】:不填时,默认为当前路径。
【匹配条件】常用:
-name name
:按文件名查找,支持使用通配符*
和?
。-user username
:按文件所有者查找。-group groupname
:按文件所属组查找。-type type
:按文件类型查找,可以是f
(普通文件)、d
(目录)、l
(符号链接)等。-size [+-]size[cwbkMG]
:按文件大小查找,支持使用+
或-
表示大于或小于指定大小,单位可以是c
(字节)、w
(字数)、b
(块数)、k
(KB)、M
(MB)或G
(GB)。-mtime days
:按修改时间查找,支持使用+
或-
表示在指定天数前或后,days 是一个整数表示天数。
二、常用操作
- 登录
常用工具:WindTerm、MobaXterm等。
登录后切换用户:
su - test
说明:一般root用户登录,其他sudo权限用户登录后,切换其他用户时 sudo su - test
#切换到root用户
sudo -i
#当前用户退出
exit
#查看当前用户
whoami
2.创建test用户组和用户
groupadd -g 2024 test
useradd -u 2024 -g 2024 test
3.时钟同步
使用chronyc 做时间同步。
#查看时间同步源
chronyc -n sources -v
chronyc tracking
#修改配置
vi /etc/chrony.conf
#添加
server IP iburst
#时钟服务状态
service chronyd status
service chronyd restart
4. 关闭防火墙
#查看
getenforce
#临时关闭
setenforce 0
#永久关闭
vi /etc/selinux/config
SELINUX=disabled
#关闭firewalld
systemctl disable firewalld
5.配置环境变量
#配置全局环境变量
vi /etc/profile
#添加内容
export MAVEN_HOME=/usr/local/maven
#添加alias(当常用命令快捷键使用)
alias web="cd $APP_HOME/app/vue-web"
alias log="tail -f /log/app.log"
#配置用户环境变量
vi ~/.bash_profile
#同上
7.配置定时任务
#配置定时任务
crontab -e
#常用的定时任务写法
#每天1点定时备份
0 0 * * * mysqldump -uroot -p12356 test > /mysql/backup/test_all.sql;
#每天8点执行test脚本(读取环境变量,将执行内容记录日志)
0 8 * * * source /etc/profile /tmp/test.sh >> /tmp/test.log 2>&1
#reboot重启执行test脚本
@reboot /tmp/test.sh
8.开机自启动
#使用自启动
systemctl enable mysql
#启动
systemctl start mysql
#停止
systemctl stop mysql
#重启
systemctl restart mysql
#禁用开机自启动
systemctl disable mysql
9.挂载nas
10.应用备份
#编写脚本
su - test << EOF
rsync -rtopgvvP --delete-after /test/app/* /test/backup
EOF
11.打包和解压
压缩:
#示例:压缩test下app和cfg目录下的文件(排除app下的log目录)为app.类型。
#压缩tar
tar -cvf app.tar app cfg --exclude=/test/app/log/*
#压缩tar.gz.其中-c 表示创建压缩文件,-z 表示使用 gzip 压缩,-v 表示显示压缩进度,-f 表示指定压缩文件名。
tar -zcvf app.tar.gz app cfg --exclude=/test/app/log/*
#压缩.zip
zip -rv app.zip app cfg -x=/test/app/log/*
解压:
#示例:解压上面打包的文件app.类型到指定目录/test1。
#解压tar
tar -xpvf app.tar -C=/test1
#解压tar.gz.其中-C 表示指定目录,-p 表示使用原来的目录和权限。
tar -zxpvf app.tar.gz -C=/test1
#解压.zip
unzip -o app.zip -d /test1
12.复制文件
cp -arv /test/app/* /test/backup
13.文件权限
文件权限分为三级:文件所有者(Owner)、用户组(Group)、其它用户(Other Users)
数字分三段,对应所有者、用户组、其他用户;权限按下表进行累加。比如:777 所有级别都有读写执行权限,755:所有者有读写执行权限,其他级别有读和执行权限。
权限 | rwx | 十进制 | 二进制 |
读 | r-- | 4 | 100 |
写 | -w- | 2 | 010 |
执行 | --x | 1 | 001 |
无 | --- | 0 | 000 |
14.文件授权
chmod mode file...
#给app目录下所有文件都授权755
chmod -R 755 /test/app
#所有用户减x执行权限
chmod a-x `find * -name "*.*"`
#所有.sh文件添加x权限
chmod a+x `find * -name "*.sh"`
15.文件传输
scp [可选参数] file_source file_target
scp test.tar root@10.131.11.11:/tmp
16.软件安装
#yum安装jdk11为例
#查看是否安装
yum installed|grep jdk11
#查找yum源中是否有安装包
yum -qa|grep jdk11
#安装
yum -y install java-11-*
#验证
java -version
17.创建文件查看目录等
#创建目录
mkdir /test/a
#创建文件a.txt和b.txt
touch a.txt
>b.txt
#重命名a.txt为c.txt
mv a.txt c.txt
#复制目录a到b
cp -ra /test/a /test/b
#删除b目录下所有文件
rm -rf /text/b/
#查看当前目录路径
pwd
#查看当前目录下文件
ls -a
ls命令参数如下:
- -a 显示所有文件及目录 (. 开头的隐藏文件也会列出)
- -d 只列出目录(不递归列出目录内的文件)。
- -l 以长格式显示文件和目录信息,包括权限、所有者、大小、创建时间等。
- -r 倒序显示文件和目录。
- -t 将按照修改时间排序,最新的文件在最前面。
- -A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
- -F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
- -R 递归显示目录中的所有文件和子目录。
参考
Linux命令行与shell脚本编程大全.第3版(需要的可私信留言)