Linux中记录终端(Terminal)输出到文本文件四种方法

2023-05-16

Linux中记录终端(Terminal)输出到文本文件

    • Linux中记录终端(Terminal)输出到文本文件
  • 一,如何把命令运行的结果保存到文件当中?
  • 二、command > file 2>&1
  • 三、如何能在输出信息的同时把信息记录到文件中?
  • 四,多个命令的输出都需要记录,可以用script

Linux中记录终端(Terminal)输出到文本文件

使用tee转向实时输出终端输出信息到这个log.txt,包含标准报错信息,终端输出信息还存在,包含输出时间信息和文件信息。

2>&1 | tee $(date "+%Y%m%d_%H%M%S").log

使用转向输出符号 > 实时输出终端输出信息到这个log.txt,包含标准报错信息,终端输出信息不存在。

log.txt 2>&1

使用tee转向实时输出终端输出信息到这个log.txt,包含标准报错信息,终端输出信息还存在。

| tee log.txt 2>&1

一,如何把命令运行的结果保存到文件当中?

用 > 把输出转向就可以了。
例子:

在这里插入图片描述

说明: > 是把输出转向到指定的文件,如文件已存在的话也会重新写入,文件原内容不会保留
		>> 是把输出附向到文件的后面,文件原内容会保留下来

二、command > file 2>&1

首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。

三、如何能在输出信息的同时把信息记录到文件中?

我们在上面的例子中可以看到,我们使用输出转向,命令在终端上的输出转向到了文件中,但如果我希望能同时在终端上看到输出信息怎么办?
我们可以使用这个命令: tee
解释一下tee的作用:
read from standard input and write to standard output and files
它从标准输入读取内容并将其写到标准输出和文件中

看例子:
  在这里插入图片描述
  
备注:使用 tee时,如果想保留目标文件原有的内容怎么办?
可以使用 -a参数
-a, --append
append to the given FILEs, do not overwrite
附加至给出的文件,而不是覆盖它

四,多个命令的输出都需要记录,可以用script

script这个命令很强大,可以记录终端的所有输出到相应的文件中
  
  看例子:
  在这里插入图片描述

说明:
1,我们在启动script时没有指定文件名,它会自动记录到当前目录下一个名为 typescript的文件中。

也可以用 -a参数 指定文件名

例子:
在这里插入图片描述

此时终端的输出内容被记录到 example.txt这个文件中

2,退出script时,用exit
	感到奇怪吗?事实上script就是启动了一个shell脚本。
	看一下ps auxfww 的信息就知道了
	lhd 17738 0.1 3.2 152028 33328 ? Sl 18:30 0:03 /usr/bin/konsole
  lhd 17740 0.0 0.1 6372 1720 pts/1 Ss 18:30 0:00 \_ /bin/bash
  lhd 17900 0.0 0.0 5344 628 pts/1 S 19:01 0:00 | \_ script
  lhd 17901 0.0 0.0 5348 464 pts/1 S 19:01 0:00 | \_ script
  lhd 17902 0.5 0.1 6372 1688 pts/2 Ss 19:01 0:00 | \_ bash -i

3,查看typescript的内容,可以看到它同时记录下了script的启动和结束时间

4,用script录制并播放session的内容
	我们可以用 script把整个终端会话的所有操作和输出录制下来,然后再用scriptreplay进行播放。
	如果录制时记录下来了操作时的时间数据,那么播放时和操作时的使用时间完全相同。
	这个很有用吧,比如:我们可以把安装软件时编译的过程记录下来,然后给别人进行演示.

看例子:
  在这里插入图片描述

	说明: 
		-t 2>example.time -t是把时间数据输出到标准错误(standard error),所以我们使用 2>example.time 把数据转向到 example.time这个文件当中。

如何播放所记录的内容?
第一步:安装scriptreplay

下载

	wget linux/utils/util-linux/util-linux-2.12r.tar.bz2">ftp://ftp.kernel.org/pub/linux/utils/util-linux/util-linux-2.12r.tar.bz2

解压

	tar -jxvf util-linux-2.12r.tar.bz2

之后复制文件到系统的命令目录中即可
  
  [root@root下载]# cp util-linux-2.12r/misc-utils/scriptreplay.pl /usr/bin/scriptreplay
  [root@root下载]# chmod 755 /usr/bin/scriptreplay
  备注: fedora 10的util-linux-ng-2.14.1-3.2.fc10.i386.rpm 此包中已包含 scriptreplay,已

无需另行安装
  
  第二步:播放所录制的session内容
  [root @root ~]$ scriptreplay example1.time example1.txt
  [root @root ~]$ ls
  1.gtkrc-2.0 c.tar jeffray_lee@hotmAIl.com pass
  [root@root ~]$ abcd
  bash: abcd: command not found

[root@root ~]$ exit

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux中记录终端(Terminal)输出到文本文件四种方法 的相关文章

  • 无法在 Ubuntu 16.04.2 LTS 上启动 docker(初始化 graphdriver 时出错)

    使用systemctl启动docker时遇到以下错误 Job for docker service failed because the control process exited with error code See systemct
  • 无法在 Ubuntu 14.04 LTS 上的 wget 上建立 SSL 连接

    我尝试通过 wget 下载图像 但出现错误 无法建立 SSL 连接 wget https www website com image jpg 2015 02 26 01 30 17 https www website com image j
  • open() 尝试打开管道进行读取时会阻塞

    我有两个进程 一个服务器和一个客户端 它们应该通过管道 C Linux 进行通信 服务器打开管道O RDONLY标志 以及客户端O WRONLY 然而 服务器阻塞在open函数 而客户端似乎运行成功 open函数返回成功 因此write功能
  • 执行Linux命令并获取PID

    通常我使用 os popen du folder gt gt 1 txt read 一切正常 但是当我想获取子进程ID时 它返回空值 os popen du folder gt gt 1 txt read Notice the symbol
  • 如何让 Icecast 在端口 80 上运行 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在尝试让 Icecast 在端口 80 上工作时遇到问题 它在默认情况下工作 但当我尝试将其设置为端口 80 时 一切都中断了 我已确保
  • 如何在Linux中使用相对路径打开文件?

    我有一个程序 它使用相对路径 例如 打开文件 现在的问题是 当我从另一个目录执行程序时 相对路径不是相对于程序而是相对于工作目录 因此 如果我使用 path to program myprog 启动程序 它将无法找到该文件 有没有办法独立于
  • VS Code 刷新集成终端环境变量,无需重新启动/注销

    如果您在 Windows 上添加 更改某些环境变量 例如 PATH 即使重新启动 VS Code 后 它也不会在 VS Code 集成终端中可用 但是 如果您从 Windows 命令提示符 Powershell 打开该终端 它将具有这些新的
  • 比较不同文件中的列并打印那些不匹配的列

    我有两个文件 file1 和 file2 我想将 file1 的几列 1 2 3 和 4 与 file2 的几列 1 2 3 和 4 进行比较 并打印 file2 中与 file1 中任何行都不匹配的那些行 E g file1 aaa bb
  • I2C 驱动程序应如何在 ACPI 中与 HID PRP0001 匹配

    我正在尝试实例化这个传感器 https elixir bootlin com linux v5 2 source drivers iio proximity vl53l0x i2c c在 ACPI 中使用设备特定数据 即Name DSD 并
  • Linux bash 中波浪号的含义(不是主目录)

    首先 我知道 是主目录 CD 至 or 带我到主目录 然而 cd X带我去一个特别的地方 在那里X似乎是什么 在 bash 中 如果我点击 cd 然后点击选项卡 它会显示一堆可能的 X选项如 mail and postgres and ss
  • 如何在汇编程序中使用 C 库?

    我想知道如何用汇编语言编写文本编辑器 但现代操作系统需要 C 库 特别是对于它们的窗口系统 我找到了这个page http pengu1n is programmer com posts 8304 html 这对我有很大帮助 但我想知道是否
  • fopen() 在 Linux 上创建文件失败

    我正在尝试通过创建一个文件fopen 如下 但不创建该文件并让我 Can t create file P S 我在 Linux Ubuntu 上使用 LAMP 服务器 在创建该文件之前我已经尝试过以下命令 sudo chmod R 755
  • 将多页 PDF 转换为单个图像

    我必须将多页 PDF 文档转换为 png 图像 我尝试使用 ImageMagick 但无法获得最终结果 convert document pdf document png or convert adjoin document pdf doc
  • 是否可以在由同一父进程创建的两个子进程之间建立管道(LINUX,POSIX)

    我有多个孩子由同一个父母 分叉 我尝试构建pipe所有这些子进程之间的连接就像一个链表结构 孩子 1 向孩子 2 发送数据 孩子 2 向孩子 3 孩子 N 向孩子 1 发送数据 有没有正确的方法可以做到这一点 此外 如果我在进程之间创建和通
  • pctl(PR_SET_PDEATHSIG) 竞争条件

    据我了解 当父进程死亡时终止子进程的最佳方法是通过prctl PR SET PDEATHSIG 至少在 Linux 上 父进程退出后如何让子进程终止 https stackoverflow com questions 284325 how
  • 在远程机器上执行多个命令

    在下面的命令中 我尝试 ssh 命令并执行多个命令 如果任何命令失败 即如果 command1 退出 那么如果 command1 和 commnd 2 退出 否则在远程计算机上执行命令 3 我如何退出 我怎样才能做到这一点 ssh logi
  • Boost 更新失败,现在不确定我拥有哪个版本

    在 Ubuntu 22 04 上运行此命令以获得 Boost 1 82 sudo add apt repository ppa mhier libboost latest sudo apt update sudo apt install l
  • 使用 Shell 脚本自动安装 R-Studio

    有没有办法在 Linux 系统上自动安装 R Studio 它应该自动检测操作系统并安装具有所需依赖项的 R 和 R Studio 谢谢 我准备了以下 shell 脚本来使安装完全自动化 bin bash Program R Studio
  • 如何在终端中显示图像?

    是否有任何类型的实用程序可以用来将图像转换为 ASCII 然后在我的终端中打印 我寻找过 但似乎没有找到 一个名为cacaview http linux die net man 1 cacaview允许您执行此操作 它是交互式的 允许您平移
  • Linux 中的 C 聊天室 / Socket 编程

    我有一个简单的服务器和客户端 C 代码来使用线程 pthread 库 为多客户端创建一个聊天室 我一直遇到的问题是 我无法想出一种方法让服务器将客户端通过套接字发送到所有其他客户端的每条消息写入 我在这里读过其他类似的帖子 但很无奈 请帮助

随机推荐