首页 > 其他分享 >script

script

时间:2023-07-20 13:12:57浏览次数:30  
标签:log 23 -- script command zfb

script

记录终端会话的所有操作

补充说明

script 用于在终端会话中,记录用户的所有操作和命令的输出信息。简而言之,记录终端会话发生的一切信息,如同一台终端录像机。例如,用户在输入某条命令时,字符的键入和删除也都会被记录。用户在终端的所有操作、终端的回显等信息会被以 raw 格式存储在日志文件,称为终端数据文件。命令的时间信息会被单独以另一种结构储存为日志文件,称为时间日志文件。使用命令exit或者快捷键Ctrl + D停止记录。

语法

script(选项)(参数)

选项

-a, --append              # 对终端会话的操作信息,以追加方式写入文件(保留原文件内容)
-c, --command command     # 只运行 command 命令而不打开交互终端。相当于开启 script ,执行 command ,再退出 script
                          # command 可以是任意能够在终端会话执行的命令
-e, --return              # 返回子进程的退出状态码
-f, --flush               # 每次终端的内容发生变动,立马写入日志文件
--force                   # 允许默认输出终端数据文件为符号链接
-o, --output-limit size   # 限制终端数据文件和时间日志文件的大小,当文件大小达到此限制就会退出子进程
                          # size 的单位可以设置为:KiB(=1024)、KB(=1000)、MiB(1024*1024)、MB(=1000*1000)
                          # 同理还支持 GiB TiB PiB EiB ZiB YiB GB TB PB EB ZB YB
-q, --quiet               # 安静模式。启动和退出script命令不显示任何提示
-t[file], --timing[=file] # 输出时间日志信息到标准错误(stderr)或者文件
-V, --version             # 显示版本信息并退出
-h, --help                # 显示帮助文本并退出

参数

  • 终端数据文件:设置存储终端数据信息的文件名称

实例

script                             # 开启记录,默认会在当前目录创建名称为 typescript 的文件来保存终端数据文件
script command.log                 # 开启记录,在当前目录创建名称为 command.log 的文件来保存终端数据文件
script -t 2>time.file command.log  # 开启记录,在当前目录创建名称为 command.log 的文件来保存终端数据文件
                                   # 在当前目录创建名称为 time.file 的文件来保存时间日志文件

以追加模式记录终端信息

zfb@localhost:~$ script -t 2>time.file -a -f command.log
Script started, file is command.log
zfb@localhost:~$ echo "hello, world"
hello, world
zfb@localhost:~$ echo $(date "+%Y-%m-%d %H:%M:%S")
2020-12-23 20:48:46
zfb@localhost:~$ echo "Bye"
Bye
zfb@localhost:~$ ls -al
total 20
drwxr-xr-x  2 zfb zfb 4096 Dec 23 20:48 .
drwxr-xr-x 37 zfb zfb 4096 Dec 23 20:49 ..
-rw-r--r--  1 zfb zfb    0 Dec 23 19:03 a.txt
-rw-r--r--  1 zfb zfb   12 Dec 23 19:04 b.txt
-rw-r--r--  1 zfb zfb 2744 Dec 23 20:49 command.log
-rw-r--r--  1 zfb zfb  790 Dec 23 20:49 time.file
zfb@localhost:~$ exit
Script done, file is command.log
zfb@localhost:~$

然后,用户可以查看终端数据文件,使用方法如下

zfb@localhost:~$ cat command.log
Script started on 2020-12-23 20:48:25+08:00 [TERM="xterm-256color" TTY="/dev/pts/0" COLUMNS="75" LINES="30"]
zfb@localhost:~$ echo "hello, world"
hello, world
zfb@localhost:~$ echo $(date "+%Y-%m-%d %H:%M:%S")
2020-12-23 20:48:46
zfb@localhost:~$ echo "Bye"
Bye
zfb@localhost:~$ ls -al
total 20
drwxr-xr-x  2 zfb zfb 4096 Dec 23 20:48 .
drwxr-xr-x 37 zfb zfb 4096 Dec 23 20:49 ..
-rw-r--r--  1 zfb zfb    0 Dec 23 19:03 a.txt
-rw-r--r--  1 zfb zfb   12 Dec 23 19:04 b.txt
-rw-r--r--  1 zfb zfb 2744 Dec 23 20:49 command.log
-rw-r--r--  1 zfb zfb  790 Dec 23 20:49 time.file
zfb@localhost:~$ exit

Script done on 2020-12-23 20:49:04+08:00 [COMMAND_EXIT_CODE="0"]
zfb@localhost:~$

其中,只有命令cat command.log是用户输入,其他均为自动呈现。通过查看上面输出的时间2020-12-23 20:48:46,可以证明,这是重现的记录,而非重新执行一遍命令。也就是说,可以把time.filecommand.log文件移动到任意一台机器上,都可以重现命令输入与终端回显。

记录服务器用户会话操作

root身份编辑文件/etc/profile,在文件末尾追加以下内容

if [ $UID -ge 0 ]
then
    exec /usr/bin/script -t 2>/var/log/script-records/$USER-$UID-`date +%Y%m%d`.time -a -f -q /var/log/script-records/$USER-$UID-`date +%Y%m%d`.log
fi

然后再以root身份创建文件夹用于存储服务器上的各个用户在终端的所有操作信息

sudo mkdir -p /var/log/script-records/
sudo chmod 733 /var/log/script-records/

最后,执行命令source /etc/profile即可。任意用户(UID ≥ 0)在终端执行的所有操作都会被安静地记录下来,以天为单位存储。

标签:log,23,--,script,command,zfb
From: https://www.cnblogs.com/linuxcmd/p/script.html

相关文章

  • kettle javascript获取变量
    kettlejavascript获取变量在Kettle(也称为PentahoDataIntegration)中,JavaScript是一种非常强大的编程语言,可以用于在ETL过程中执行各种复杂的数据处理和转换任务。JavaScript可以帮助我们访问和操作变量,以及在转换过程中进行条件判断和控制流程。本文将介绍如何在Kettle的JavaScr......
  • JavaScript学习 -- Promise的使用
    在JavaScript中,Promise是一种用于处理异步操作的对象。它表示某个异步操作的最终完成或失败,并提供了一种优雅的方式来处理异步操作的结果。本文将介绍JavaScript如何使用Promise,并提供一个实际的例子。什么是PromisePromise是一种异步操作的解决方案,它有三种状态:pending(等待)、re......
  • 58.请使用vue3+vite+typescript+element-plus+setup语法糖,使用xlsx和file-saver实现保
    1<template>2<div>3<el-table4:data="mergedTableData"5border6stripe7>8<!--表头-->9<el-table-column10prop="date"11label="......
  • Javascript和jQuery有什么不同?
     Javascript和jQuery都是前端开发必备的语言和框架,但他们之间有很多不同。下面我们来详细的分析一下。Javascript是一种脚本语言,可以在浏览器端直接运行。它的语法简单,可以操作HTML和CSS,实现动态效果,如表单验证、动态创建元素等。Javascript的核心是ECMAScript标准,它定义了语......
  • JavaScript和Java如何进行通信
     JavaScript和Java是两种不同的编程语言,但是它们可以通过一些技术手段进行通信。在Web开发领域,JavaScript和Java的交互性十分重要,因为它们可以实现复杂的交互操作和数据处理,为Web应用程序带来更好的用户体验。一、Java与JavaScript的通信方式1.JavaappletJavaapplet是一......
  • JavaScript汉字转码原理解析
     JavaScript是一种高级编程语言,广泛应用于Web、移动应用开发等领域。其中,涉及到的汉字编码问题一直备受关注。本篇文章将从JavaScript汉字转码的原理解析入手,为读者深入剖析这一现象。什么是汉字编码?汉字编码是指计算机用二进制形式来表示中文字符的方式。由于计算机只能识别......
  • JavaScript函数中嵌套函数的使用方法及技巧
     在JavaScript编程中,函数是用来封装可重用代码的一种重要工具。但是,有时候在函数内部需要创建另一个函数来完成一些特定的功能。这种在函数内部定义的函数被称为嵌套函数。本文将讨论JavaScript函数中嵌套函数的使用方法及技巧。1.嵌套函数的定义在JavaScript中,嵌套函数可以......
  • JavaScript函数重载实现方法
     在编写JavaScript代码时,我们常常遇到需要编写多个名称相同但参数类型不同的函数的情况。这时,我们可以使用JavaScript函数重载来实现这一功能。函数重载是指在同一个作用域内定义多个同名函数,但参数类型和数量各不相同。在调用函数时,根据传入的参数类型和数量,自动匹配对应的函......
  • 如何使用AJAX实现JavaScript文件下载
    如何使用AJAX实现JavaScript文件下载AJAX(AsynchronousJavaScriptandXML)技术是一种通过JavaScript异步地向服务器发送请求,更新网页内容的技术。在Web开发中,AJAX是非常常用的技术之一,它可以使网页交互更加流畅,也可以实现一些复杂的交互操作。本文将介绍如何使用AJAX实现JavaScri......
  • JavaScript学习笔记01(包含ES6语法)
    Js简介什么是Js?Js最初被创建的目的是“使网页更生动”。Js写出来的程序被称为脚本,Js是一门脚本语言。被直接写在网页的HTML中,在页面加载的时候自动执行脚本被以纯文本的形式提供和执行,不需要特殊的准备或编译即可运行(JINcompiler)Js不仅可以在浏览器中执行,也可以......