tail -f 日志文件路径主要用于查看实时的日志记录,属于动态记录查看。
创新互联于2013年开始,是专业互联网技术服务公司,拥有项目网站建设、网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元垦利做网站,已为上家服务,为垦利各地企业和个人服务,联系电话:18980820575
cat日志路径主要用于查看静态的历史日志记录,一般跟路径名称,常见的这周类型的日志记录一般用管道符进行过滤筛选自己所需的记录。
dmesg主要用于调试脚本或者命令,出现异常中断来排查错误原因显示的。
tail -n 10 test.log,查询日志尾部最后10行的日志。
tail -n +10 test.log,查询10行之后的所有日志。
head -n 10 test.log,查询日志文件中的头10行日志。
head -n -10 test.log,查询日志文件除了最后10行的其他所有日志。
操作命令
首先介绍一个名词“控制台(console)”,它就是我们通常见到的使用字符操作界面的人机接口,例如dos。我们说控制台命令,就是指通过字符界面输入的可以操作系统的命令。
例如dos命令就是控制台命令。要了解的是基于Linux操作系统的基本控制台命令。有一点一定要注意,和dos命令不同的是,Linux的命令(也包括文件名等等)对大小写是敏感的,也就是说,如果你输入的命令大小写不对的话,系统是不会做出你期望的响应的。
由于ubuntu日志文件syslog 和 kern.log 时刻在增长,一会儿就使得根目录文件夹不够用了,需使用如下命令清理
sudo -i
然后输入密码,执行:
echo /var/log/syslog
echo /var/log/kern.log
就可以了.
打开日志文件夹:cd /var/log,
输入du -sh可以查看占用的磁盘空间(du -h --max-depth=1 /var/log/*)
输入du -sm查看文件总数
使用sudo find /var/log/ -type f -mtime +30 -exec rm -f {} \;删除30天之前的旧文件(P.S:这里的天数30可以修改为其它值):
ubuntu系统日志查看器
在系统日志里,可以查看系统相关事件记录,出错信息等;
1、系统日志查看器
1)点菜单“系统 - 系统管理 - 系统日志查看器”,打开系统日志查看器窗口;
2)窗口左侧是项目,右边是详细记录;
3)其中 Xorg 是显示服务,auth是安全验证,boot是启动,daemon是进程,kern是内核,messages是消息,syslog是系统,user是用户;
4)有新消息的项目会以粗体显示,查看以后恢复正常;
ubuntu日志管理方法
ubuntu下var-log下各个日志文件的作用说明
/var/log/alternatives.log-更新替代信息都记录在这个文件中
/var/log/apport.log -应用程序崩溃记录
/var/log/apt/ -用apt-get安装卸载软件的信息
/var/log/auth.log -登录认证log
/var/log/boot.log -包含系统启动时的日志。
/var/log/btmp -记录所有失败启动信息
/var/log/Consolekit - 记录控制台信息
/var/log/cpus - 涉及所有打印信息的日志
/var/log/dist-upgrade - dist-upgrade这种更新方式的信息
/var/log/dmesg -包含内核缓冲信息(kernel ringbuffer)。在系统启动时,显示屏幕上的与硬件有关的信息
/var/log/dpkg.log - 包括安装或dpkg命令清除软件包的日志。
/var/log/faillog - 包含用户登录失败信息。此外,错误登录命令也会记录在本文件中。
/var/log/fontconfig.log -与字体配置有关的log。
/var/log/fsck - 文件系统日志
/var/log/faillog -包含用户登录失败信息。此外,错误登录命令也会记录在本文件中。
/var/log/hp/
/var/log/install/
/var/log/jokey.log
/var/log/kern.log –包含内核产生的日志,有助于在定制内核时解决问题。
/var/log/lastlog —记录所有用户的最近信息。这不是一个ASCII文件,因此需要用lastlog命令查看内容。
/var/log/faillog –包含用户登录失败信息。此外,错误登录命令也会记录在本文件中。
/var/log/lightdm/
/var/log/mail/ – 这个子目录包含邮件服务器的额外日志。
/var/log/mail.err -类似于上面的
/var/log/news/
/var/log/pm-powersave.log
/var/log/samba/ –包含由samba存储的信息。
/var/log/syss.log
/var/log/speech-dispacher/
/var/log/udev
/var/log/ufw.log
/var/log/upstart/
/var/log/uattended-upgrades/
/var/log/wtmp —包含登录信息。使用wtmp可以找出谁正在登陆进入系统,谁使用命令显示这个文件或信息等。
/var/log/xorg.*.log— 来自X的日志信息。
在生产环境中,往往没有条件给我们去debug排查,更多时候我们是通过日志来看具体的报错日期。
但是日志往往是一直在实时更新,而且记录条数庞大,很难直接定位到错误信息。这个时候,就可以利用sed命令来截取指定时间段内的日志(也是网上大多数博主的做法)。
具体命令如下:
这条命令可以查询2020.10.13号当天9点到9点十分中间的所有的日志信息。
但是这条命令的使用有两个前提(很多网上的博主都没有提到)
第一,日志输出的日期格式是要满足命令中的格式 ,如果不是的话就跟着实际的格式改
第二,输入的日期必须要真实存在!!! ,比如说9点整刚好没有日志输出,那么这条命令就会失效
更加通配的命令可以是这样, 使用 号*
这样无论九点整的时候是否有日志产生,就都可以获取到9点整到现在的所有日志了
使用 ,将截取到的内容输出到指定的文件中,方便进一步查看
ps:在实际操作中,我们一般会在后面加grep命令做进一步的关键字过滤
nohup命令 将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。一般用于将程序的输出、报错信息重定向到一个指定路径的指定文件。
语法 :nohup [command] [args] []
nohup命令 最后要带个作为结束
例:nohup python XXX.py abc/def/XXX.log 21
args: 0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ;
21是将标准错误(2)重定向到标准输出(1),标准输出(1)再被重定向输入到文件,即XXX.log中。
nohup命令的缺点:日志文件文件越来越大,占内存且查看麻烦。因为这个日志文件和程序是共生死的,因为只要程序运行起来,就一直对log文件进行读写,直接删除XXX.log会导致程序也被结束了。
目前想到的一些相关方法如下,并未完全解决问题。
参考: linux下nohup日志输出过大问题解决方案
split命令:
参数:-b:值为每一输出档案的大小,单位为 byte。
-C:每一输出档中,单行的最大 byte 数。
-d:使用数字作为后缀。默认这个数字后缀是两位的,例如00,01,11. -a: 指定位数,例如 -a 4表示后缀是四位的。
-l:值为每一输出档的列数大小。
PREFIX:代表前导符,可作为切割文件的前导文件。
例如:
可以用split命令把很大的日志文件分成多个小文件,分割完成后 原文件不变 。不会影响nohup运行的程序。
缺点:split文件分割依赖手动,当程序出故障或调试时,将日志分割以便查看最新的日志信息。没法定时做到定时自动清理。
首先介绍find命令的参数
参考: linux find命令详解
在这里主要用到的是这几个参数:
-atime n 查找系统中最后n*24小时访问的文件
-ctime n 查找系统中最后n*24小时被改变文件状态的文件
-mtime n 查找系统中最后n*24小时被改变文件数据的文件
+n: n天前; -n: n天之内
find命令还可以和下一条命令连用(xargs或exec)
或
注:{}表示find到的东西;{}和 \;之间要有一个空格
我感觉exec不是很好用,怪怪的
cat dev/null
在 Linux 中, null 设备基本上被用来丢弃某个进程不再需要的输出流,或者作为某个输入流的空白文件,这些通常可以利用重定向机制来达到。
所以 /dev/null 设备文件是一个特殊的文件,它将清空送到它这里来的所有输入,而它的输出则可被视为一个空文件。另外,你可以通过使用 cat 命令显示 /dev/null 的内容然后重定向输出到某个文件,以此来达到清空该文件的目的。通过使用cat /dev/null,文件大小为0字节。
用cat删除文件:
但是我发现对于nohup的程序的日志,这样是无效的。因为nohup的程序持续不断地在读写日志文件,此时无法重定向,我试了几次,日志文件都压根没动。
crontab用于设置定时任务
参考: linux crontab定时执行shell脚本
crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
语法
crontab(选项)(参数)
选项
-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u用户名称:指定要设定计时器的用户名称。
参数
crontab文件:指定包含待执行任务的crontab文件。
首先crontab -e,就会进入vi编辑界面。然后直接把新的命令输进去就行了。
minute hour day month week command /XXX/XXX.log 顺序:分 时 日 月 周
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
/n表示每个n的单位执行一次
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
意为每周的1:00执行,且输出重定向到黑洞目录。
1.做自动部署系统时精简的一个脚本,主要功能是清理所有目录的日志
2.根据给定日志目录,删除时间 结合crontab进行清理日志,清理完成后,后在/var/log/deltelog/ 生成按照月的清理日志
3.扩展,因为脚本采用mtime(最后修改时间)进行删除,所以可以适用于删除过期备份等,不受文件名称的限制
shell小窍门
find –type f –print 时会根据换行或者空格来输出查找的文件,在不同的sh下有不同的`反应,如果不做处理结合xargs 进行删除 更改操作,会有影响
所以需要增加 –print0 用 null来 作为边界符号,才敢结婚 xargs –o 来格式化输入
使用find 的时候 遵循最小结果集原则,find解析式从左到右,所有确保你在最左边的过滤符号能够过滤最大数据
你可以根据你的需要增加到crontab中
shell脚本
复制代码 代码如下:
#!/bin/sh
###########################
# log blog.duplicatedcode.com
# in_day_num: like 1 2 is 2day ago logs
# in_log_path like tomcat log home
###########################
in_log_path=${1}
in_day_num=${2}
tmp__log=/var/log/log/"`date +%Y%m`.log"
Log()
{
inner_num=${1}
#find log
echo "[`date`] start logs---" $tmp__log
find ${in_log_path} -type f -mtime ${inner_num} -print0 | xargs -0 rm -rf
echo "[`date`] end logs---" $tmp__log
}
init()
{
mkdir -p /var/log/log/
}
main()
{
init
if [ -z ${in_log_path} ];then
echo "[`date`] error log_path not init---" $tmp__log
return
fi
inner_day_num=+7
if [[ -n ${in_day_num} ]] [[ ${in_day_num} -ge 1 ]] ; then
${inner_day_num}=${in_day_num}
fi
Log ${inner_day_num}
}
main