Himanshu Arora 发布的文章

在 Linux 系统上,有时你可能想从命令行快速地了解系统的已使用和未使用的内存空间。如果你是一个 Linux 新手,有个好消息:有一条系统内置的命令可以显示这些信息:free

在本文中,我们会讲到 free 命令的基本用法以及它所提供的一些重要的功能。文中提到的所有命令和用法都是在 Ubuntu 16.04LTS 上测试过的。

Linux free 命令

让我们看一下 free 命令的语法:

free [options]

free 命令的 man 手册如是说:

free 命令显示了系统的可用和已用的物理内存及交换内存的总量,以及内核用到的缓存空间。这些信息是从 /proc/meminfo 中得到的。

接下来我们用问答的方式了解一下 free 命令是怎么工作的。

Q1. 怎么用 free 命令查看已使用和未使用的内存?

这很容易,您只需不加任何参数地运行 free 这条命令就可以了:

free

这是 free 命令在我的系统上的输出:

view used and available memory using free command

这些列是什么意思呢?

  • total - 安装的内存的总量(等同于 /proc/meminfo 中的 MemTotalSwapTotal
  • used - 已使用的内存(计算公式为:used = total - free - buffers - cache
  • free - 未被使用的内存(等同于 /proc/meminfo 中的 MemFreeSwapFree
  • shared - 通常是临时文件系统使用的内存(等同于 /proc/meminfo 中的 Shmem;自内核 2.6.32 版本可用,不可用则显示为 0
  • buffers - 内核缓冲区使用的内存(等同于 /proc/meminfo 中的 Buffers
  • cache - 页面缓存和 Slab 分配机制使用的内存(等同于 /proc/meminfo 中的 CachedSlab
  • buff/cache - bufferscache 之和
  • available - 在不计算交换空间的情况下,预计可以被新启动的应用程序所使用的内存空间。与 cache 或者 free 部分不同,这一列把页面缓存计算在内,并且不是所有的可回收的 slab 内存都可以真正被回收,因为可能有被占用的部分。(等同于 /proc/meminfo 中的 MemAvailable;自内核 3.14 版本可用,自内核 2.6.27 版本开始模拟;在其他版本上这个值与 free 这一列相同)

Q2. 如何更改显示的单位呢?

如果需要的话,你可以更改内存的显示单位。比如说,想要内存以兆为单位显示,你可以用 -m 这个参数:

free -m

free command display metrics change

同样地,你可以用 -b 以字节显示、-k 以 KB 显示、-m 以 MB 显示、-g 以 GB 显示、--tera 以 TB 显示。

Q3. 怎么显示可读的结果呢?

free 命令提供了 -h 这个参数使输出转化为可读的格式。

free -h

用这个参数,free 命令会自己决定用什么单位显示内存的每个数值。例如:

diplsy data fromm free command in human readable form

Q4. 怎么让 free 命令以一定的时间间隔持续运行?

您可以用 -s 这个参数让 free 命令以一定的时间间隔持续地执行。您需要传递给命令行一个数字参数,做为这个时间间隔的秒数。

例如,使 free 命令每隔 3 秒执行一次:

free -s 3

如果您需要 free 命令只执行几次,您可以用 -c 这个参数指定执行的次数:

free -s 3 -c 5

上面这条命令可以确保 free 命令每隔 3 秒执行一次,总共执行 5 次。

注:这个功能目前在 Ubuntu 系统上还存在 问题,所以并未测试。

Q5. 怎么使 free 基于 1000 计算内存,而不是 1024?

如果您指定 free 用 MB 来显示内存(用 -m 参数),但又想基于 1000 来计算结果,可以用 --sj 这个参数来实现。下图展示了用与不用这个参数的结果:

How to make free use power of 1000 (not 1024) while displaying memory figures

Q6. 如何使 free 命令显示每一列的总和?

如果您想要 free 命令显示每一列的总和,你可以用 -t 这个参数。

free -t

如下图所示:

How to make free display total of columns

请注意 Total 这一行出现了。

总结

free 命令对于系统管理来讲是个极其有用的工具。它有很多参数可以定制化您的输出,易懂易用。我们在本文中也提到了很多有用的参数。练习完之后,请您移步至 man 手册了解更多内容。


via: https://www.howtoforge.com/linux-free-command/

作者:Himanshu Arora 译者:jessie-pang 校对:wxy

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

最近,我们介绍过 gnome-screenshot 工具,这是一个很优秀的屏幕抓取工具。但如果你想找一个在命令行运行的更好用的截屏工具,你一定要试试 Scrot。这个工具有一些 gnome-screenshot 没有的独特功能。在这篇文章里,我们会通过简单易懂的例子来详细介绍 Scrot。

请注意一下,这篇文章里的所有例子都在 Ubuntu 16.04 LTS 上测试过,我们用的 scrot 版本是 0.8。

关于 Scrot

ScrotSCReenshOT) 是一个屏幕抓取工具,使用 imlib2 库来获取和保存图片。由 Tom Gilbert 用 C 语言开发完成,通过 BSD 协议授权。

安装 Scrot

scort 工具可能在你的 Ubuntu 系统里预装了,不过如果没有的话,你可以用下面的命令安装:

sudo apt-get install scrot

安装完成后,你可以通过下面的命令来使用:

scrot [options] [filename]

注意:方括号里的参数是可选的。

Scrot 的使用和特点

在这个小节里,我们会介绍如何使用 Scrot 工具,以及它的所有功能。

如果不带任何选项执行命令,它会抓取整个屏幕。

使用 Scrot

默认情况下,抓取的截图会用带时间戳的文件名保存到当前目录下,不过你也可以在运行命令时指定截图文件名。比如:

scrot [image-name].png

获取程序版本

你想的话,可以用 -v 选项来查看 scrot 的版本。

scrot -v

这是例子:

获取 scrot 版本

抓取当前窗口

这个工具可以限制抓取当前的焦点窗口。这个功能可以通过 -u 选项打开。

scrot -u

例如,这是我在命令行执行上边命令时的桌面:

用 scrot 截取窗口

这是另一张用 scrot 抓取的截图:

用 scrot 抓取的图片

抓取选定窗口

这个工具还可以让你抓取任意用鼠标点击的窗口。这个功能可以用 -s 选项打开。

scrot -s

例如,在下面的截图里你可以看到,我有两个互相重叠的终端窗口。我在上层的窗口里执行上面的命令。

选择窗口

现在假如我想抓取下层的终端窗口。这样我只要在执行命令后点击窗口就可以了 —— 在你用鼠标点击之前,命令的执行不会结束。

这是我点击了下层终端窗口后的截图:

窗口截图

注意:你可以在上面的截图里看到,下层终端窗口的整个显示区域都被抓去下来了,甚至包括了上层窗口的部分叠加内容。

在截屏时包含窗口边框

我们之前介绍的 -u 选项在截屏时不会包含窗口边框。不过,需要的话你也可以在截屏时包含窗口边框。这个功能可以通过 -b 选项打开(当然要和 -u 选项一起)。

scrot -ub

下面是示例截图:

截屏时包含窗口边框

注意:截屏时包含窗口边框同时也会增加一点额外的背景。

延时截屏

你可以在开始截屏时增加一点延时。需要在 --delay-d 选项后设定一个时间值参数。

scrot --delay [NUM]

scrot --delay 5

例如:

延时截屏

在这例子里,scrot 会等待 5 秒再截屏。

截屏前倒数

这个工具也可以在你使用延时功能后显示一个倒计时。这个功能可以通过 -c 选项打开。

scrot –delay [NUM] -c

scrot -d 5 -c

下面是示例截图:

延时截屏示例

图片质量

你可以使用这个工具来调整截图的图片质量,范围是 1-100 之间。较大的值意味着更大的文件大小以及更低的压缩率。默认值是 75,不过最终效果根据选择的文件类型也会有一些差异。

这个功能可以通过 --quality-q 选项打开,但是你必须提供一个 1 - 100 之间的数值作为参数。

scrot –quality [NUM]

scrot –quality 10

下面是示例截图:

截屏质量

你可以看到,-q 选项的参数更靠近 1 让图片质量下降了很多。

生成缩略图

scort 工具还可以生成截屏的缩略图。这个功能可以通过 --thumb 选项打开。这个选项也需要一个 NUM 数值作为参数,基本上是指定原图大小的百分比。

scrot --thumb NUM

scrot --thumb 50

注意:加上 --thumb 选项也会同时保存原始截图文件。

例如,下面是我测试的原始截图:

原始截图

下面是保存的缩略图:

截图缩略图

拼接多显示器截屏

如果你的电脑接了多个显示设备,你可以用 scort 抓取并拼接这些显示设备的截图。这个功能可以通过 -m 选项打开。

scrot -m

下面是示例截图:

拼接截屏

在保存截图后执行操作

使用这个工具,你可以在保存截图后执行各种操作 —— 例如,用像 gThumb 这样的图片编辑器打开截图。这个功能可以通过 -e 选项打开。下面是例子:

scrot abc.png -e 'gthumb abc.png'

这个命令里的 gthumb 是一个图片编辑器,上面的命令在执行后会自动打开。

下面是命令的截图:

截屏后执行命令

这个是上面命令执行后的效果:

示例截图

你可以看到 scrot 抓取了屏幕截图,然后再启动了 gThumb 图片编辑器打开刚才保存的截图图片。

如果你截图时没有指定文件名,截图将会用带有时间戳的文件名保存到当前目录 —— 这是 scrot 的默认设定,我们前面已经说过。

下面是一个使用默认名字并且加上 -e 选项来截图的例子:

scrot -e 'gthumb $n'

scrot 截屏后运行 gthumb

有个地方要注意的是 $n 是一个特殊字符串,用来获取当前截图的文件名。关于特殊字符串的更多细节,请继续看下个小节。

特殊字符串

scrot 的 -e(或 --exec)选项和文件名参数可以使用格式说明符。有两种类型格式。第一种是以 % 加字母组成,用来表示日期和时间,第二种以 $ 开头,scrot 内部使用。

下面介绍几个 --exec 和文件名参数接受的说明符。

$f – 让你可以使用截图的全路径(包括文件名)。

例如:

scrot ashu.jpg -e ‘mv $f ~/Pictures/Scrot/ashish/’

下面是示例截图:

示例

如果你没有指定文件名,scrot 默认会用日期格式的文件名保存截图。这个是 scrot 的默认文件名格式:%yy-%mm-%dd-%hhmmss_$wx$h_scrot.png

$n – 提供截图文件名。下面是示例截图:

scrot $n variable

$s – 获取截图的文件大小。这个功能可以像下面这样使用。

scrot abc.jpg -e ‘echo $s’

下面是示例截图:

scrot $s 变量

类似的,你也可以使用其他格式字符串 $p$w$h$t$$ 以及 \n 来分别获取图片像素大小、图像宽度、图像高度、图像格式、输入 $ 字符、以及换行。你可以像上面介绍的 $s 格式那样使用这些字符串。

结论

这个应用能轻松地安装在 Ubuntu 系统上,对初学者比较友好。scrot 也提供了一些高级功能,比如支持格式化字符串,方便专业用户用脚本处理。当然,如果你想用起来的话有一点轻微的学习曲线。


via: https://www.howtoforge.com/tutorial/how-to-take-screenshots-in-linux-with-scrot/

作者:Himanshu Arora 译者:zpl1025 校对:wxy

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

7z 无疑是一个功能强大的强大的归档工具(声称提供最高的压缩比)。在 HowtoForge 中,我们已经已经讨论过如何安装和使用它。但讨论仅限于你可以使用该工具提供的“功能字母”来使用基本功能。

在本教程中,我们将扩展对这个工具的说明,我们会讨论一些 7z 提供的“开关”。 但在继续之前,需要说明的是,本教程中提到的所有说明和命令都已在 Ubuntu 16.04 LTS 上进行了测试。

注意:我们将使用以下截图中显示的文件来执行使用 7zip 的各种操作。

ls from test directory

包含文件

7z 工具允许你有选择地将文件包含在归档中。可以使用 -i 开关来使用此功能。

语法:

-i[r[-|0]]{@listfile|!wildcard}

比如,如果你想在归档中只包含 “.txt” 文件,你可以使用下面的命令:

$ 7z a ‘-i!*.txt’ include.7z

这是输出:

add files to 7zip

现在,检查新创建的归档是否只包含 “.txt” 文件,你可以使用下面的命令:

$ 7z l include.7z

这是输出:

Result

在上面的截图中,你可以看到 “testfile.txt” 已经包含到归档中了。

排除文件

如果你想要,你可以排除不想要的文件。可以使用 -x 开关做到。

语法:

-x[r[-|0]]]{@listfile|!wildcard}

比如,如果你想在要创建的归档中排除 “abc.7z” ,你可以使用下面的命令:

$ 7z a ‘-x!abc.7z’ exclude.7z

这是输出:

exclude files from 7zip

要检查最后的归档是否排除了 “abc.7z”, 你可以使用下面的命令:

$ 7z l exclude.7z

这是输出:

result of file exclusion

上面的截图中,你可以看到 “abc.7z” 已经从新的归档中排除了。

专业提示:假设任务是排除以 “t” 开头的所有 .7z 文件,并且包含以字母 “a” 开头的所有 .7z 文件。这可以通过以下方式组合 -i-x 开关来实现:

$ 7z a '-x!t*.7z' '-i!a*.7z' combination.7z

设置归档密码

7z 同样也支持用密码保护你的归档文件。这个功能可以使用 -p 开关来实现。

$ 7z a [archive-filename] -p[your-password] -mhe=[on/off]

注意-mhe 选项用来启用或者禁用归档头加密(默认是“off”)。

例子:

$ 7z a password.7z -pHTF -mhe=on

无需多说,当你解压密码保护的归档时,工具会向你询问密码。要解压一个密码保护的文件,使用 e 功能字母。下面是例子:

$ 7z e password.7z

protect 7zip archive with a password

设置输出目录

工具同样支持解压文件到你选择的目录中。这可以使用 -o 开关。无需多说,这个开关只在含有 e 或者 x 功能字母的时候有用。

$ 7z [e/x] [existing-archive-filename] -o[path-of-directory]

比如,假设下面命令工作在当前的工作目录中:

$ 7z e output.7z -ohow/to/forge

-o 开关的值所指的那样,它的目标是解压文件到 ./how/to/forge 中。

这是输出:

7zip output directory

在上面的截图中,你可以看到归档文件的所有内容都已经解压了。但是在哪里?要检查文件是否被解压到 ./how/to/forge,我们可以使用 ls -R 命令。

result

在上面的截图中,我们可以看到 .7z 中的内容都被解压到 ./how/to/forge 中。

创建多个卷

借助 7z 工具,你可以为归档创建多个卷(较小的子档案)。当通过网络或 USB 传输大文件时,这是非常有用的。可以使用 -v 开关使用此功能。这个开关需要指定子档案的大小。

我们可以以字节(b)、千字节(k)、兆字节(m)和千兆字节(g)指定子档案大小。

$ 7z a [archive-filename] [files-to-archive] -v[size-of-sub-archive1] -v[size-of-sub-archive2] ....

让我们用一个例子来理解这个。请注意,我们将使用一个新的目录来执行 -v 开关的操作。

这是目录内容的截图:

7zip volumes

现在,我们运行下面的命令来为一个归档文件创建多个卷(每个大小 100b):

7z a volume.7z * -v100b

这是截图:

compressing volumes

现在,要查看创建的子归档,使用 ls 命令。

list of archives

如下截图所示,一共创建四个卷 - volume.7z.001、volume.7z.002、volume.7z.003 和 volume.7z.004

注意:你可以使用 .7z.001 归档文件来解压。但是,要这么做,其他所有的卷都应该在同一个目录内。

设置归档的压缩级别

7z 允许你设置归档的压缩级别。这个功能可以使用 -m 开关。7z 中有不同的压缩级别,比如:-mx0-mx1-mx3-mx5-mx7-mx9

这是这些压缩级别的简要说明:

  • mx0 = 完全不压缩 - 只是复制文件到归档中。
  • mx1 = 消耗最少时间,但是压缩最小。
  • mx3 = 比 -mx1 好。
  • mx5 = 这是默认级别 (常规压缩)。
  • mx7 = 最大化压缩。
  • mx9 = 极端压缩。

注意:关于这些压缩级别的更多信息,阅读这里

$ 7z a [archive-filename] [files-to-archive] -mx=[0,1,3,5,7,9]

例如,我们在目录中有一堆文件和文件夹,我们每次尝试使用不同的压缩级别进行压缩。作为一个例子,这是当使用压缩级别 “0” 时创建存档时使用的命令。

$ 7z a compression(-mx0).7z * -mx=0

相似地,其他命令也这样执行。

以下是输出档案(使用 “ls” 命令生成)的列表,其名称表示其创建中使用的压缩级别,输出中的第五列显示压缩级别对其大小的影响。

7zip compression level

显示归档的技术信息

如果需要,7z 还可以在标准输出中显示归档的技术信息 - 类型、物理大小、头大小等。可以使用 -slt 开关使用此功能。 此开关仅适用于带有 l 功能字母的情况下。

$ 7z l -slt [archive-filename]

比如:

$ 7z l -slt abc.7z

这是输出:

指定创建归档的类型

如果你想要创建一个非 7z 的归档文件(这是默认的创建类型),你可以使用 -t 开关来指定。

$ 7z a -t[specify-type-of-archive] [archive-filename] [file-to-archive]

下面的例子展示创建了一个 .zip 文件:

7z a -tzip howtoforge *

输出的文件是 “howtoforge.zip”。要交叉验证它的类型,使用 file 命令:

因此,howtoforge.zip 的确是一个 ZIP 文件。相似地,你可以创建其他 7z 支持的归档。

总结

你将会认识到, 7z 的 “功能字母” 以及 “开关” 的知识可以让你充分利用这个工具。我们还没有完成开关的部分 - 其余部分将在第 2 部分中讨论。


via: https://www.howtoforge.com/tutorial/understanding-7z-command-switches/

作者:Himanshu Arora 译者:geekpi 校对:wxy

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

Linux 中的 comm 命令可以让用户按行比较两个已经排序好的文件。在本教程中,我们将使用一些浅显易懂的例子来讨论这个命令行工具。在开始之前,请注意,本教程中提到的所有例子都已经在 Ubuntu 16.04LTS 版本中测试过。

下面的例子将会告诉你 comm 命令是如何工作的。

1、 如何使用 comm 比较两个排序好的文件

要使用 comm 命令比较两个排序好的文件,只需要把它们的名字作为 comm 命令的参数。下面是通常的语法:

comm [name-of-first-file] [name-of-second-file]

比如,假设 file1file2 是这种情况下的两个文件。前者包含下面几行内容:

001
056
127
258

而后者包含下面几行内容:

002
056
167
369

此时,comm 命令的输出如下图所示:

comm file1 file2

你可以看到,输出包含 3 列。第一列是仅包含在 file1 中的内容,第二列是仅包含在 file2 中的内容,最后,第三列是两个文件中均包含的内容。

2、 如何不输出 comm 命令输出中的某些列

如果你想,你可以不输出 comm 命令输出中的某些列。对于该特性,你有三个命令行选项可用:-1-2-3 。正如你所猜想的,这些数字表示你不想输出的列。

比如,下面这个命令将会不输出上面例子中的第三列:

comm -3 file1 file2

因此,你可以看到,第三列并没有输出。

注意,你可以通过一个单一命令同时不输出多列内容。比如:

comm -12 file1 file2

上面这个命令将会不输出第一、二列。

3、 如何使用 comm 命令比较两个未排序好的文件

正如我们所知道的,comm 只可用于排序好的文件。如果发现其中一个文件未排序好,那么便会在输出中产生一条信息来告诉用户。比如,我们交换 file1 的第一行和第二行,然后与 file2 进行比较。下面是该命令的输出:

你可以看到,这个命令产生一个输出告诉我们:file1 还没有排序好。此时,如果你不想让这个工具检查输入是否已经排序好,那么你可以使用 --nocheck-order 选项:

comm --nocheck-order file1 file2

你可以看到,前面出现的提示信息已经消失了。

注意,如果你想明确告诉 comm 命令来检查输入文件是否排序好,那么你可以使用 --check-order 选项。

4、 如何用自定义字符串分隔 comm 命令的输出列

默认情况下,comm 命令的输出列之间是以空格分隔的。然而,如何你想使用一个自定义字符串作为分隔符,那么你可以使用 --output-delimiter 选项。使用该选项时需要指定你想用来作为分隔符的字符串。

comm --output-delimiter=+ file1 file2

比如,我们使用加号来作为分隔符:

5、 如何使 comm 的输出行以 NUL 字符终止

默认情况下,comm 命令的输出行以新行终止。然而,如果你想,那么你可以改为以 NUL 字符终止,只需要使用 -z 选项即可:

comm -z file1 file2

结论

comm 命令并没有特别多的特性性,我们在这儿已经讨论了它的绝大多数命令行选项。只需要理解和练习在这篇教程中讨论的内容,那么你便可以在日常工作中知道如何使用这个工具了。如果你有任何问题或者疑问,请前往该命令的 man 手册,或者在下面评论。


via: https://www.howtoforge.com/linux-comm-command/

作者:Himanshu Arora 译者:ucasFL 校对:wxy

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

在应用市场中有好几种屏幕截图工具,但其中大多数都是基于 GUI 的。如果你经常在 linux 命令行上工作,而且正在寻找一款优秀的功能丰富的基于命令行的屏幕截图工具,你可能会想尝试 gnome-screenshot。在本教程中,我将使用易于理解的例子来解释这个实用程序。

请注意,本教程中提到的所有例子已经在 Ubuntu 16.04 LTS 上测试过,测试所使用的 gonme-screenshot 版本是 3.18.0。

关于 Gnome-screenshot

Gnome-screenshot 是一款 GNOME 工具,顾名思义,它是一款用来对整个屏幕、一个特定的窗口或者用户所定义一些其他区域进行捕获的工具。该工具提供了几个其他的功能,包括对所捕获的截图的边界进行美化的功能。

Gnome-screenshot 安装

Ubuntu 系统上已经预安装了 gnome-screeshot 工具,但是如果你出于某些原因需要重新安装这款软件程序,你可以使用下面的命令来进行安装:

sudo apt-get install gnome-screeshot

一旦软件安装完成后,你可以使用下面的命令来启动它:

gnome-screenshot

Gnome-screenshot 用法/特点

在这部分,我们将讨论如何使用 gnome-screenshot ,以及它提供的所有功能。

默认情况下,使用该工具且不带任何命令行选项时,就会抓取整个屏幕。

Starting Gnome Screenshot

捕获当前活动窗口

如何你需要的话,你可以使用 -w 选项限制到只对当前活动窗口截图。

gnome-screenshot -w

Capturing current active window

窗口边框

默认情况下,这个程序会将它捕获的窗口的边框包含在内,尽管还有一个明确的命令行选项 -b 可以启用此功能(以防你在某处想使用它)。以下是如何使用这个程序的:

gnome-screenshot -wb

当然,你需要同时使用 -w 选项和 -b 选项,以便捕获的是当前活动的窗口(否则,-b 将没有作用)。

更重要的是,如果你需要的话,你也可以移除窗口的边框。可以使用 -B 选项来完成。下面是你可以如何使用这个选项的一个例子:

gnome-screenshot -wB

下面是例子的截图:

Window border

添加效果到窗口边框

在 gnome-screenshot 工具的帮助下,您还可以向窗口边框添加各种效果。这可以使用 --border-effect 选项来做到。

你可以添加这款程序所提供的任何效果,比如 shadow 效果(在窗口添加阴影)、bordor 效果(在屏幕截图周围添加矩形区域)和 vintage 效果(使截图略微淡化,着色并在其周围添加矩形区域)。

gnome-screenshot --border-effect=[EFFECT]

例如,运行下面的命令添加 shadow 效果:

gnome-screenshot –border-effect=shadow

以下是 shadow 效果的示例快照:

Adding effects to window borders

请注意,上述屏幕截图主要集中在终端的一个角落,以便您清楚地看到阴影效果。

对特定区域的截图

如何你需要,你还可以使用 gnome-screenshot 程序对你电脑屏幕的某一特定区域进行截图。这可以通过使用 -a 选项来完成。

gnome-screenshot -a

当上面的命令被运行后,你的鼠标指针将会变成 '+' 这个符号。在这种模式下,你可以按住鼠标左键移动鼠标来对某个特定区域截图。

这是一个示例截图,裁剪了我的终端窗口的一小部分。

example screenshot wherein I cropped a small area of my terminal window

在截图中包含鼠标指针

默认情况下,每当你使用这个工具截图的时候,截的图中并不会包含鼠标指针。然而,这个程序是可以让你把指针包括进去的,你可以使用 -p 命令行选项做到。

gnome-screenshot -p

这是一个示例截图:

Include mouse pointer in snapshot

延时截图

截图时你还可以引入时间延迟。要做到这,你不需要给 --delay 选项赋予一个以秒为单位的值。

gnome-screenshot –delay=[SECONDS]

例如:

gnome-screenshot --delay=5

示例截图如下:

Delay in taking screenshots

以交互模式运行这个工具

这个工具还允许你使用一个单独的 -i 选项来访问其所有功能。使用这个命令行选项,用户可以在运行这个命令时使用这个工具的一个或多个功能。

gnome-screenshot -i

示例截图如下:

Run the tool in interactive mode

你可以从上面的截图中看到,-i 选项提供了对很多功能的访问,比如截取整个屏幕、截取当前窗口、选择一个区域进行截图、延时选项和特效选项等都在交互模式里。

直接保存你的截图

如果你需要的话,你可以直接将你截的图片从终端中保存到你当前的工作目录,这意味着,在这个程序运行后,它并不要求你为截取的图片输入一个文件名。这个功能可以使用 --file 命令行选项来获取,很明显,需要给它传递一个文件名。

gnome-screenshot –file=[FILENAME]

例如:

gnome-screenshot --file=ashish

示例截图如下:

Directly save your screenshot

复制到剪切板

gnome-screenshot 也允许你把你截的图复制到剪切板。这可以通过使用 -c 命令行选项做到。

gnome-screenshot -c

Copy to clipboard

在这个模式下,例如,你可以把复制的图直接粘贴到你的任何一个图片编辑器中(比如 GIMP)。

多显示器情形下的截图

如果有多个显示器连接到你的系统,你想对某一个进行截图,那么你可以使用 --then 命令行选项。需要给这个选项一个显示器设备 ID 的值(需要被截图的显示器的 ID)。

gnome-screenshot --display=[DISPLAY]

例如:

gnome-screenshot --display=VGA-0

在上面的例子中,VAG-0 是我正试图对其进行截图的显示器的 ID。为了找到你想对其进行截图的显示器的 ID,你可以使用下面的命令:

xrandr --query

为了让你明白一些,在我的例子中这个命令产生了下面的输出:

$ xrandr --query
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
VGA-0 connected primary 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 194mm
1366x768 59.8*+
1024x768 75.1 75.0 60.0 
832x624 74.6 
800x600 75.0 60.3 56.2 
640x480 75.0 60.0 
720x400 70.1 
HDMI-0 disconnected (normal left inverted right x axis y axis)

自动化屏幕截图过程

正如我们之前讨论的,-a 命令行选项可以帮助我们对屏幕的某一个特定区域进行截图。然而,我们需要用鼠标手动选取这个区域。如果你想的话,你可以使用 gnome-screenshot 来自动化完成这个过程,但是在那种情形下,你将需要使用一个名为 xdotol 的工具,它可以模仿敲打键盘甚至是点击鼠标这些事件。

例如:

(gnome-screenshot -a &); sleep 0.1 && xdotool mousemove 100 100 mousedown 1 mousemove 400 400 mouseup 1

mousemove 子命令自动把鼠标指针定位到明确的 X 坐标和 Y 坐标的位置(上面例子中是 100 和 100)。mousedown 子命令触发一个与点击执行相同操作的事件(因为我们想左击,所以我们使用了参数 1),然而 mouseup 子命令触发一个执行用户释放鼠标按钮的任务的事件。

所以总而言之,上面所示的 xdotool 命令做了一项本来需要使用鼠标手动执行对同一区域进行截图的工作。特别说明,该命令把鼠标指针定位到屏幕上坐标为 100,100 的位置并选择封闭区域,直到指针到达屏幕上坐标为 400,400 的位置。所选择的区域随之被 gnome-screenshot 捕获。

这是上述命令的截图:

screenshot of the above command

这是输出的结果:

Screenshot output

想获取更多关于 xdotool 的信息,请到这来

获取帮助

如果你有疑问或者你正面临一个与该命令行的其中某个选项有关的问题,那么你可以使用 --help、-? 或者 -h 选项来获取相关信息。

gnome-screenshot -h

总结

我推荐你至少使用一次这个程序,因为它不仅对初学者来说比较简单,而且还提供功能丰富的高级用法体验。动起手来,尝试一下吧。


via: https://www.howtoforge.com/tutorial/taking-screenshots-in-linux-using-gnome-screenshot/

作者:Himanshu Arora 译者:zhousiyu325 校对:jasminepeng

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

早前的一篇文章中,我们深入讨论了 sudo 命令的相关内容。同时,在该文章的末尾有提到相关的命令 su 的部分内容。本文,我们将详细讨论关于 su 命令与 sudo 命令之间的区别。

在开始之前有必要说明一下,文中所涉及到的示例教程都已经在 Ubuntu 14.04 LTS 上测试通过。

Linux su 命令

su 命令的主要作用是让你可以在已登录的会话中切换到另外一个用户。换句话说,这个工具可以让你在不登出当前用户的情况下登录为另外一个用户。

su 命令经常被用于切换到超级用户或 root 用户(因为在命令行下工作,经常需要 root 权限),但是 - 正如前面所提到的 - su 命令也可以用于切换到任意非 root 用户。

如何使用 su 命令切换到 root 用户,如下:

不带命令行参数的 su 命令

如上,su 命令要求输入的密码是 root 用户的密码。所以,一般 su 命令需要输入目标用户的密码。在输入正确的密码之后,su 命令会在终端的当前会话中打开一个子会话。

su -

还有一种方法可以切换到 root 用户:运行 su - 命令,如下:

su - 命令

那么,su 命令与 su - 命令之间有什么区别呢?前者在切换到 root 用户之后仍然保持旧的(或者说原始用户的)环境,而后者则是创建一个新的环境(由 root 用户 ~/.bashrc 文件所设置的环境),相当于使用 root 用户正常登录(从登录屏幕登录)。

su 命令手册页很清楚地说明了这一点:

可选参数 - 可提供的环境为用户在直接登录时的环境。

因此,你会觉得使用 su - 登录更有意义。但是, su 命令也是有用的,那么大家可能会想知道它在什么时候用到。以下内容摘自 ArchLinux wiki 网站 - 关于 su 命令的好处和坏处:

  • 有的时候,对于系统管理员(root)来讲,使用其他普通用户的 Shell 账户而不是自己的 root Shell 账户更会好一些。尤其是在处理用户问题时,最有效的方法就是是:登录目标用户以便重现以及调试问题。
  • 然而,在多数情况下,当从普通用户切换到 root 用户进行操作时,如果还使用普通用户的环境变量的话,那是不可取甚至是危险的操作。因为是在无意间切换使用普通用户的环境,所以当使用 root 用户进行程序安装或系统更改时,会产生与正常使用 root 用户进行操作时不相符的结果。例如,以普通用户安装程序会给普通用户意外损坏系统或获取对某些数据的未授权访问的能力。

注意:如果你想在 su - 命令的 - 后面传递更多的参数,那么你必须使用 su -l 而不是 su -。以下是 --l 命令行选项的说明:

-, -l, --login

提供相当于用户在直接登录时所期望的环境。

当使用 - 时,必须放在 su 命令的最后一个选项。其他选项(-l--login)无此限制。

su -c

还有一个值得一提的 su 命令行选项为:-c。该选项允许你提供在切换到目标用户之后要运行的命令。

su 命令手册页是这样说明:

-c, --command COMMAND

使用 -c 选项指定由 Shell 调用的命令。

被执行的命令无法控制终端。所以,此选项不能用于执行需要控制 TTY 的交互式程序。

参考示例:

su [target-user] -c [command-to-run]

示例中,command-to-run 将会被这样执行:

[shell] -c [command-to-run]

示例中的 shell 类型将会被目标用户在 /etc/passwd 文件中定义的登录 shell 类型所替代。

sudo vs. su

现在,我们已经讨论了关于 su 命令的基础知识,是时候来探讨一下 sudosu 命令之间的区别了。

关于密码

两个命令的最大区别是:sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码。

很明显,就安全而言,sudo 命令更好。例如,考虑到需要 root 访问权限的多用户使用的计算机。在这种情况下,使用 su 意味着需要与其他用户共享 root 用户密码,这显然不是一种好习惯。

此外,如果要撤销特定用户的超级用户/root 用户的访问权限,唯一的办法就是更改 root 密码,然后再告知所有其他用户新的 root 密码。

而使用 sudo 命令就不一样了,你可以很好的处理以上的两种情况。鉴于 sudo 命令要求输入的是其他用户自己的密码,所以,不需要共享 root 密码。同时,想要阻止特定用户访问 root 权限,只需要调整 sudoers 文件中的相应配置即可。

默认行为

两个命令之间的另外一个区别是其默认行为。sudo 命令只允许使用提升的权限运行单个命令,而 su 命令会启动一个新的 shell,同时允许使用 root 权限运行尽可能多的命令,直到明确退出登录。

因此,su 命令的默认行为是有风险的,因为用户很有可能会忘记他们正在以 root 用户身份进行工作,于是,无意中做出了一些不可恢复的更改(例如:对错误的目录运行 rm -rf 命令!)。关于为什么不鼓励以 root 用户身份进行工作的详细内容,请参考这里

日志记录

尽管 sudo 命令是以目标用户(默认情况下是 root 用户)的身份执行命令,但是它们会使用 sudoer 所配置的用户名来记录是谁执行命令。而 su 命令是无法直接跟踪记录用户切换到 root 用户之后执行了什么操作。

灵活性

sudo 命令比 su 命令灵活很多,因为你甚至可以限制 sudo 用户可以访问哪些命令。换句话说,用户通过 sudo 命令只能访问他们工作需要的命令。而 su 命令让用户有权限做任何事情。

sudo su

大概是因为使用 su 命令或直接以 root 用户身份登录有风险,所以,一些 Linux 发行版(如 Ubuntu)默认禁用 root 用户帐户。鼓励用户在需要 root 权限时使用 sudo 命令。

然而,您还是可以成功执行 su 命令,而不用输入 root 用户的密码。运行以下命令:

sudo su

由于你使用 sudo 运行命令,你只需要输入当前用户的密码。所以,一旦完成操作,su 命令将会以 root 用户身份运行,这意味着它不会再要求输入任何密码。

PS:如果你想在系统中启用 root 用户帐户(强烈反对,因为你可以使用 sudo 命令或 sudo su 命令),你必须手动设置 root 用户密码,可以使用以下命令:

sudo passwd root

结论

当你需要可用的工具来提升(或一组完全不同的)权限来执行任务时,这篇文章以及之前的教程(其中侧重于 sudo 命令)应该能给你一个比较好的建议。 如果您也想分享关于 susudo 的相关内容或者经验,欢迎您在下方进行评论。


via: https://www.howtoforge.com/tutorial/sudo-vs-su/

作者:Himanshu Arora 译者:zhb127 校对:wxy

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