标签 会话 下的文章

这个众所周知的话题我们早已经写过了足够多的文章。即使这样,我们今天也要去讨论相同的话题。

其他的工具都是在本地运行的,但是 Asciinema 可以以相同的方式在本地和 Web 端运行。我的意思是我们可以在 Web 上分享这个录像。

默认情况下,每个人都更愿意使用 history 命令来回看、调用之前在终端内输入的命令。不过,不行的是,这个命令只展示了我们运行的命令却没有展示这些命令上次运行时的输出。

在 Linux 下有很多的组件来记录终端会话活动。在过去,我们也写了一些组件,不过今天我们依然要讨论这同一类心的工具。

如果你想要使用其他工具来记录你的 Linux 终端会话活动,你可以试试 Script 命令Terminalizer 工具Asciinema 工具

不过如果你想要找一个 GIF 录制工具,可以试试 GifineKgifPeek

什么是 Asciinema

asciinema 是一个自由开源的用于录制终端会话并将它们分享到网络上的解决方案。

当你在你的终端内运行 asciinema rec 来启动录像时,你输入命令的时候,终端内的所有输出都会被抓取。

当抓取停止时(通过按下 Ctrl-D 或输出 exit),抓取的输出将会被上传到 asciinema.org 的网站,并为后续的回放做准备。

Asciinema 项目由多个不同的完整的部分组成,比如 asciinema 命令行工具、asciinema.org API 和 JavaScript 播放器。

Asciinema 的灵感来自于 scriptscriptreplay 命令。

如何在 Linux 上安装 Asciinema

Asciinema 由 Python 写就,在 Linux 上,推荐使用 pip 安装的方法来安装。

确保你已经在你的系统里安装了 python-pip 包。如果没有,使用下述命令来安装它。

对于 Debian/Ubuntu 用户,使用 Apt 命令Apt-Get 命令 来安装 pip 包。

$ sudo apt install python-pip

对于 Archlinux 用户,使用 Pacman 命令 来安装 pip 包。

$ sudo pacman -S python-pip

对于 Fedora 用户,使用 DNF 命令 来安装 pip 包。

$ sudo dnf install python-pip

对于 CentOS/RHEL 用户,使用 YUM 命令 来安装 pip 包。

$ sudo yum install python-pip

对于 openSUSE 用户,使用 Zypper 命令 来安装 pip 包。

$ sudo zypper install python-pip

最后,运行如下的 pip 命令 来在 Linux 上安装 Asciinema 工具。

$ sudo pip3 install asciinema

如何使用 Asciinema 工具来记录你的终端会话

一旦你成功的安装了 Asciinema,只需要运行如下命令来开始录制:

$ asciinema rec 2g-test
asciinema: recording asciicast to 2g-test
asciinema: press "ctrl-d" or type "exit" when you're done

出于测试的目的,运行一些简单的命令,并看一看它是否运行良好。

$ free
              total        used        free      shared  buff/cache   available
Mem:          15867        2783       10537        1264        2546       11510
Swap:         17454           0       17454

$ hostnamectl
   Static hostname: daygeek-Y700
         Icon name: computer-laptop
           Chassis: laptop
        Machine ID: 31bdeb7b833547368d230a2025d475bc
           Boot ID: c84f7e6f39394d1f8fdc4bcaa251aee2
  Operating System: Manjaro Linux
            Kernel: Linux 4.19.8-2-MANJARO
      Architecture: x86-64

$ uname -a
Linux daygeek-Y700 4.19.8-2-MANJARO #1 SMP PREEMPT Sat Dec 8 14:45:36 UTC 2018 x86_64 GNU/Linux

$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
Address sizes:       39 bits physical, 48 bits virtual
CPU(s):              8
On-line CPU(s) list: 0-7
Thread(s) per core:  2
Core(s) per socket:  4
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               94
Model name:          Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz
Stepping:            3
CPU MHz:             800.047
CPU max MHz:         3500.0000
CPU min MHz:         800.0000
BogoMIPS:            5186.00
Virtualization:      VT-x
L1d cache:           32K
L1i cache:           32K
L2 cache:            256K
L3 cache:            6144K
NUMA node0 CPU(s):   0-7
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_add fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp flush_l1d

当你完成后,简单的按下 CTRL+D 或输入 exit 来退出录制。这个结果将会被保存在同一个目录。

$ exit
exit
asciinema: recording finished
asciinema: asciicast saved to 2g-test

如果你想要保存输出到不同的目录中,就需要提醒 Asciinema 你想要保存文件的目录。

$ asciinema rec /opt/session-record/2g-test1

我们可以使用如下命令来回放录制的会话。

$ asciinema play 2g-test

我们能够以两倍速来回放录制的会话。

$ asciinema play -s 2 2g-test

或者,我们可以以正常速度播放录制的会话,限制空闲时间为 2 秒。

$ asciinema play -i 2 2g-test

如何在网络上分享已经录制的会话

如果你想要分享录制的会话给你的朋友,只要运行下述命令上传你的会话到 asciinema.org,就可以获得一个唯一链接。

它将会在被上传 7 天后被归档。

$ asciinema upload 2g-test
View the recording at:

    https://asciinema.org/a/jdJrxhDLboeyrhzZRHsve0x8i

This installation of asciinema recorder hasn't been linked to any asciinema.org
account. All unclaimed recordings (from unknown installations like this one)
are automatically archived 7 days after upload.

If you want to preserve all recordings made on this machine, connect this
installation with asciinema.org account by opening the following link:

    https://asciinema.org/connect/10cd4f24-45b6-4f64-b737-ae0e5d12baf8

如果你想要分享录制的会话在社交媒体上,只需要点击页面底部的 “Share” 按钮。

如果任何人想要去下载这个录制,只需要点击页面底部的 “Download” 按钮,就可以将其保存在你系统里。

如何管理 asciinema.org 中的录制片段

如果你想要留存所有在这个机器上录制的片段,点击上述显示的链接并使用你在 asciinema.org 的账户登录,然后跟随这个说明继续操作,来将你的机器和该网站连接起来。

https://asciinema.org/connect/10cd4f24-45b6-4f64-b737-ae0e5d12baf8

如果你早已录制了一份,但是你没有在你的 asciinema.org 账户界面看到它,只需要运行 asciinema auth 命令来移动它们。

$ asciinema auth

Open the following URL in a web browser to link your install ID with your asciinema.org user account:

https://asciinema.org/connect/10cd4f24-45b6-4f64-b737-ae0e5d12baf8

This will associate all recordings uploaded from this machine (past and future ones) to your account, and allow you to manage them (change title/theme, delete) at asciinema.org.

如果你想直接上传文件而不是将其保存在本地,直接运行如下命令:

$ asciinema rec
asciinema: recording asciicast to /tmp/tmp6kuh4247-ascii.cast
asciinema: press "ctrl-d" or type "exit" when you're done

出于测试目的,运行下述命令,并看一看它是否运行的很好。

$ free
              total        used        free      shared  buff/cache   available
Mem:          15867        2783       10537        1264        2546       11510
Swap:         17454           0       17454

$ hostnamectl
   Static hostname: daygeek-Y700
         Icon name: computer-laptop
           Chassis: laptop
        Machine ID: 31bdeb7b833547368d230a2025d475bc
           Boot ID: c84f7e6f39394d1f8fdc4bcaa251aee2
  Operating System: Manjaro Linux
            Kernel: Linux 4.19.8-2-MANJARO
      Architecture: x86-64

$ uname -a
Linux daygeek-Y700 4.19.8-2-MANJARO #1 SMP PREEMPT Sat Dec 8 14:45:36 UTC 2018 x86_64 GNU/Linux

如果你完成了,简单的按下 CTRL+D 或输入 exit 来停止录制,然后按下回车来上传文件到 asciinema.org 网站。

这将会花费一些时间来为你的录制生成唯一链接。一旦它完成,你会看到和下面一样的样式:

$ exit
exit
asciinema: recording finished
asciinema: press "enter" to upload to asciinema.org, "ctrl-c" to save locally

View the recording at:

 https://asciinema.org/a/b7bu5OhuCy2vUH7M8RRPjsSxg

via: https://www.2daygeek.com/linux-asciinema-record-your-terminal-sessions-share-them-on-web/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:Bestony 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Facebook、 Gmail、 Twitter 是我们每天都会用的网站(LCTT 译注:才不是呢)。它们的共同点在于都需要你登录进去后才能做进一步的操作。只有你通过认证并登录后才能在 twitter 发推,在 Facebook 上评论,以及在 Gmail上处理电子邮件。

gmail, facebook login page

那么登录的原理是什么?网站是如何认证的?它怎么知道是哪个用户从哪儿登录进来的?下面我们来对这些问题进行一一解答。

用户登录的原理是什么?

每次你在网站的登录页面中输入用户名和密码时,这些信息都会发送到服务器。服务器随后会将你的密码与服务器中的密码进行验证。如果两者不匹配,则你会得到一个错误密码的提示。如果两者匹配,则成功登录。

登录时发生了什么?

登录后,web 服务器会初始化一个 会话 session 并在你的浏览器中设置一个 cookie 变量。该 cookie 变量用于作为新建会话的一个引用。搞晕了?让我们说的再简单一点。

会话的原理是什么?

服务器在用户名和密码都正确的情况下会初始化一个会话。会话的定义很复杂,你可以把它理解为“关系的开始”。

session beginning of a relationship or partnership

认证通过后,服务器就开始跟你展开一段关系了。由于服务器不能象我们人类一样看东西,它会在我们的浏览器中设置一个 cookie 来将我们的关系从其他人与服务器的关系标识出来。

什么是 Cookie?

cookie 是网站在你的浏览器中存储的一小段数据。你应该已经见过他们了。

theitstuff official facebook page cookies

当你登录后,服务器为你创建一段关系或者说一个会话,然后将唯一标识这个会话的会话 id 以 cookie 的形式存储在你的浏览器中。

什么意思?

所有这些东西存在的原因在于识别出你来,这样当你写评论或者发推时,服务器能知道是谁在发评论,是谁在发推。

当你登录后,会产生一个包含会话 id 的 cookie。这样,这个会话 id 就被赋予了那个输入正确用户名和密码的人了。

facebook cookies in web browser

也就是说,会话 id 被赋予给了拥有这个账户的人了。之后,所有在网站上产生的行为,服务器都能通过他们的会话 id 来判断是由谁发起的。

如何让我保持登录状态?

会话有一定的时间限制。这一点与现实生活中不一样,现实生活中的关系可以在不见面的情况下持续很长一段时间,而会话具有时间限制。你必须要不断地通过一些动作来告诉服务器你还在线。否则的话,服务器会关掉这个会话,而你会被登出。

websites keep me logged in option

不过在某些网站上可以启用“保持登录”功能,这样服务器会将另一个唯一变量以 cookie 的形式保存到我们的浏览器中。这个唯一变量会通过与服务器上的变量进行对比来实现自动登录。若有人盗取了这个唯一标识(我们称之为 cookie stealing),他们就能访问你的账户了。

结论

我们讨论了登录系统的工作原理以及网站是如何进行认证的。我们还学到了什么是会话和 cookies,以及它们在登录机制中的作用。

我们希望你们以及理解了用户登录的工作原理,如有疑问,欢迎提问。


via: http://www.theitstuff.com/sessions-cookies-user-login-work

作者:Rishabh Kandari 译者:lujun9972 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

昨天我在编写我的 vimrc 的时候了解到一个很酷的 vim 功能!(主要为了添加 fzf 和 ripgrep 插件)。这是一个内置功能,不需要特别的插件。

所以我画了一个漫画。

基本上你可以用下面的命令保存所有你打开的文件和当前的状态

:mksession ~/.vim/sessions/foo.vim

接着用 :source ~/.vim/sessions/foo.vim 或者 vim -S ~/.vim/sessions/foo.vim 还原会话。非常酷!

一些 vim 插件给 vim 会话添加了额外的功能:

这是漫画:


via: https://jvns.ca/blog/2017/09/10/vim-sessions/

作者:Julia Evans 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

问题:我经常使用screen命令来运行多个伪终端会话。好多次,我发现都记不得自己是否在一个screen会话中,还是在一个常规终端中。是否有一种简便的方法来检查我是否在一个运行着的screen会话中?

一个快捷而又简单的方法来检查你是否处于一个screen伪终端中,还是在一个常规终端中,就是检查STY环境变量。当调用了screen,就会把STY变量值设置为会话名。因此,如果STY环境变量被设置为任何非空字符串,就意味着你正处于一个screen会话中。

 $ echo $STY 
2858.pts-3.my\_host

然而,请注意,上面的方法只有当你是在本地计算机上运行screen命令的时候。如果你从本地计算机的screen会话中SSH到任何远程计算机上,远程计算机上的STY变量不会被设置,尽管在技术上看,你仍然处于一个screen会话中。

事实上,一个更为可靠的检查你是否处于一个screen会话中的方法,是按“Ctrl-a”+“Ctrl-t”。如果你处于screen会话中,终端会在底部显示时间信息。


via: http://ask.xmodulo.com/check-running-screen-session.html

译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

有些时候你可能想要记录一个终端会话,也许是为了保存一个复杂的命令行操作为将来使用的参考,或者是为了知识分享。你可能也希望记录的文件尺寸尽可能的小一点,并且希望当播放记录文件时可以做一个快速回放。在这个文章中我们将讨论两个命令行工具( ttyrecttyplay )来让你记录、保存和播放终端会话。

ttyrec & ttyplay

看名字就知道ttyrec命令是用来记录终端会话的,ttyplay是用来播放ttyrec记录的会话的。

这里是这些工具的man截图:

> ttyrec

> ttyplay

测试环境

  • 系统 – Ubuntu 13.04
  • Shell – Bash 4.2.45
  • 应用 – ttyrec 1.0.8-5 & ttyplay 1.0.8-5

简明教程

下面告诉你怎么用这些命令来记录和播放一个终端会话。

步骤-1

开始记录一个终端会话,只需要运行下面的命令:

$ ttyrec [文件名] 

参数 [文件名] (上面显示的命令)是一个选项,可以指定你想要的任何名字。这个记录文件将会用这个名字保存下来。如果你没有指定一个文件名,ttyrec就会用 ttyrecord 作为缺省文件名。

步骤-2

当你想要记录的时候你就可以运行这个命令,就开始记录会话了。ttyrec命令甚至可以记录命令行类似vi,nano,emacs,lynx等这些命令行工具的会话。

步骤-3

到你想要结束终端会话的时候,只需要运行 exit 命令,这个会话记录就会结束。记录文件将会保存在当前文件夹下。

你可以运行下面的命令播放这个文件:

$ ttyplay [文件名] 

参数 [文件名] 就是记录文件名,就是上面通过 ttyrec 命令给定参数的那个名字。如果没有指定文件名,那么缺省文件名就是 ttyrecord

当你运行ttyplay,回放会话记录就会开始。这里给出一些当你回放会话的时候你可以用的快捷键。

  • ‘+’或‘f’键可以加速到两倍正常播放速度。
  • ‘-’或‘s’键可以减慢到一般正常播放速度。
  • ‘0’可以暂停。
  • ‘1’可以回到正常播放速度。

这有一些其它ttyrec和ttyplay命令支持的选项:

> ttyrec

ttyplay

还有另一个小工具 ttytime 可以用来显示用ttyrec工具会话记录的时间。很容易使用并且只需要记录文件名作为命令行参数。

举一个例子:

$ ttytime record_file
 29 record_file 

这样你就可以看到ttytime命令显示会话记录文件record\_file的时间。

这有一个ttyrec和ttyplay命令的很有用的视频:

下载/安装/配置

这有一些关于这些工具的重要的链接:

你可以使用任何命令行下载管理器比如apt-get或者yum来下载ttyrec,ttyplay和ttytime。Ubuntu用户也可以通过Ubuntu软件中心下载安装这些工具。

优点

  • 轻量级并且易用
  • 可以记录多种流行的命令行工具比如vi,nano,lynx等
  • 没有学习曲线。

缺点

  • 不能在IRIX6.4下工作(译注:这还算事吗?)
  • 依赖终端尺寸
  • 大多数Linux发行版没有预装。

结论

如果你正在找一些Linux轻量级命令行工具用来记录播放终端会话,那么ttyrec和ttyplay是理想的工具。我真的喜欢使用它们带来的轻松。试一下这些工具,你不会失望的。

你使用过ttyrec,ttyplay或者其它的终端记录/播放 工具?分享你的经历给我们吧。


via: http://mylinuxbook.com/ttyrec-ttyplay-record-and-play-terminal-sessions-in-linux/

译者:flsf 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Tmux 是一个 C 语言编写的终端,它能够在单一窗口中同时访问和控制多个终端。它是一个类似于 GNU Screen 的工具。使用它,用户可以在 Linux 系统上管理多个任务和命令行程序,而不用同时打开多个终端窗口,Tmux 还可以切换到后台在需要的时候在调用到前台来。

在 Debian 和 Ubuntu 下安装 Tmux 的命令:

sk@sk:~$ sudo apt-get install tmux

在 CentOS 和 RHEL 中,它不存在于官方的软件源中,所以需要添加 EPEL 库。添加命令:

[root@server ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

添加完毕后,可以用下面的命令来安装它:

[root@server ~]# yum install tmux

安装完毕后,只需要执行如下命令就可以使用它了:

[root@server ~]# tmux

执行这个命令后,您将会被转移到 Tmux 的会话中。转移到会话中后,您需要先按下 Ctrl+B 才能执行其他的命令。您可以先按下 Ctrl+B 后按 "?" 来查看所有支持的命令。

https://img.linux.net.cn/data/attachment/album/201307/01/220317dodu2dvgugddgdib.png

建立一个新 Tmux 会话命令:

先按下 Ctrl+B 后在按下 "c",您将建立一个新的会话。

https://img.linux.net.cn/data/attachment/album/201307/01/220318tiqeu0a5shiksz7x.png

在新的会话界面,您可以在底部看到绿色的 Tmux 会话记录,* 号标记的会话表示当前的会话。

您可以在所列出的会话之间切换,按下 Ctrl+B 然后在按 "w",然后使用箭头来移动到你需要的会话,然后在回车,就可以切换到相应的会话中。如果要退出当前的会话,只需要键入"exit"命令即可。

https://img.linux.net.cn/data/attachment/album/201307/01/220319wqm3nwoqe7jmupom.png

如果您想拆分两个会话窗口,可以按下 Ctrl+B 后在按下 "%" 来实现。

https://img.linux.net.cn/data/attachment/album/201307/01/220321bb1trtd82bzqd6ft.png

要从会话脱离,可以按下 Ctrl+B 后接着按 "d" 。将脱离所有的会话返回原来的终端屏幕。

如果要恢复脱离的会话,您可以输入如下命令来恢复:

[root@server ~]# tmux attach

这样,你将恢复链接到原来的会话中。

更详细的使用命令,可以查看 Tmux 的 man 来得到。

[root@server ~]# man tmux

试试这个工具吧。