IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux 编写shell脚本记录操作用户日志信息 -> 正文阅读

[系统运维]Linux 编写shell脚本记录操作用户日志信息

一、为了更好的管理服务器,分配了不同的用户信息,记录不同的用户服务器操作日志

遇见问题
1、windows编辑脚本,linux运行报错

history.sh: line 6: $'\r': command not found

2、当前操作用户可以查看自己日志文件,并修改
目录属性设置权限为300,可以在目录中创建日志文件
文件书香设置权限为200,只可以在文件中新增日志,不可查看和删除
3、测试过程中出现,刚登录服务器,提示文件不存在

-bash:目录/用户/日志文件: No such file or directory

二、shell脚本

1、定义储存的日志目录,根据登录用户创建目录,每天生成一个文件

user=`whoami`
hislog_dir="/var/log/history/${user}"
# 创建存放日志文件
export HISTFILE="${hislog_dir}/$(date '+%F').his"

2、判断目录是否存在,如果不存在创建目录,并赋当前用户权限 可写可执行(2+1),禁止当前用户查看日志,删除日志

[ -d ${hislog_dir} ] || mkdir -p -m 300 ${hislog_dir} 

3、创建日志文件,并赋当前操作用户权限,可写(2)

# -x 判断文件是否有执行权限;-w 文件是否有写入权限; -r 文件是否有读取权限
[ -e  ${hislog_dir}/$(date '+%F').his  ] || touch ${hislog_dir}/$(date '+%F').his
[ -x  ${hislog_dir}/$(date '+%F').his  ] || chmod 200 -R ${hislog_dir}/$(date '+%F').his

4、记录当前用户,当前文件目录的操作命令

#定义保存的命令日志文件
export HISTTIMEFORMAT='%F %T '
#定义命令日志格式
export PROMPT_COMMAND='user=$(who am i | sed "s/[ ][ ]*/ /g"); history 1 | { read x date time cmd; echo "${date} ${time} ${user} $(whoami) $(pwd) ${cmd}";} >> $HISTFILE'

三、整体代码

整体代码

# 创建目录
user=`whoami`
hislog_dir="/var/log/history/${user}"

[ -d ${hislog_dir} ] || mkdir -p -m 300 ${hislog_dir} 

# 创建存放日志文件
export HISTFILE="${hislog_dir}/$(date '+%F').his"
# -x 判断文件是否有执行权限;-w 文件是否有写入权限; -r 文件是否有读取权限
[ -e  ${hislog_dir}/$(date '+%F').his  ] || touch ${hislog_dir}/$(date '+%F').his
[ -x  ${hislog_dir}/$(date '+%F').his  ] || chmod 200 -R ${hislog_dir}/$(date '+%F').his

#定义保存的命令日志文件
export HISTTIMEFORMAT='%F %T '
#定义命令日志格式
export PROMPT_COMMAND='user=$(who am i | sed "s/[ ][ ]*/ /g"); history 1 | { read x date time cmd; echo "${date} ${time} ${user} $(whoami) $(pwd) ${cmd}";} >> $HISTFILE'

日志文件

2022-08-31 10:27:04 gitAuto pts/10 2022-08-31 10:26 (IP) gitAuto /home cd ../
2022-08-31 10:27:04 gitAuto pts/10 2022-08-31 10:26 (IP) gitAuto /home ll
2022-08-31 10:27:08 gitAuto pts/10 2022-08-31 10:26 (IP) gitAuto / cd ..

四、遇到问题

1、windows编辑脚本,linux运行报错

history.sh: line 6: $'\r': command not found

原因windows的换行“回车(CR)”和“换行(LF)”,linux的“换行(LF)”,sh文件在每行都会多了一个CR,所以Linux下运行时就会报错找不到命令

解决办法

在Linux上编辑文件,set ff 查看当前文件编辑系统,set ff=unix,设置当前文件编辑系统

# 打开当前文件,进入编辑
vim history.sh
# 进入命令行模式,查看当前文件的编辑系统
:set ff
# 提示当前信息,表示windows系统编辑
fileformat=dos 
# 设置当前文件的编辑系统
:set ff=unix
# 再查看当前文件的编辑系统
 fileformat=unix 

2、当前操作用户可以查看自己日志文件,并修改

目录属性设置权限为300,可以在目录中创建日志文件

# 先判断文件是否存在,不存在创建,并赋予权限
[ -d ${hislog_dir} ] || mkdir -p -m 300 ${hislog_dir}

文件书香设置权限为200,只可以在文件中新增日志,不可查看和删除

# 判断文件的执行权限,不可以执行,赋予权限
[ -x  ${hislog_dir}/$(date '+%F').his  ] || chmod 200 -R ${hislog_dir}/$(date '+%F').his

3、测试过程中出现,每天第一次登录服务器,提示文件不存在 No such file or directory

-bash:目录/用户/日志文件: No such file or directory
chmod: cannot access '目录文件': No such file or directory
# 第一次登录,未创建,就直接赋权导致的,判断文件是否存在,不存在,先创建文件
[ -e  ${hislog_dir}/$(date '+%F').his  ] || touch ${hislog_dir}/$(date '+%F').his
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:48:04  更:2022-09-04 01:49:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 20:02:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计