分类 技术 下的文章

一些简单的 Linux 命令能让你根据需要分割以及重新组合文件,来适应存储或电子邮件附件大小的限制。

Marco Verch

Linux 系统提供了一个非常易于使用的命令来分割文件。在将文件上传到限制大小的存储网站或者作为邮件附件之前,你可能需要执行此操作。要将文件分割为多个文件块,只需使用 split 命令。

$ split bigfile

默认情况下,split 命令使用非常简单的命名方案。文件块将被命名为 xaaxabxac 等,并且,大概地,如果你将足够大的文件分割,你甚至可能会得到名为 xzaxzz 的块。

除非你要求,否则该命令将无任何反馈地运行。但是,如果你想在创建文件块时看到反馈,可以使用 --verbose 选项。

$ split –-verbose bigfile
creating file 'xaa'
creating file 'xab'
creating file 'xac'

你还可以给文件命名前缀。例如,要将你原始文件分割并命名为 bigfile.aabigfile.ab 等,你可以将前缀添加到 split 命令的末尾,如下所示:

$ split –-verbose bigfile bigfile.
creating file 'bigfile.aa'
creating file 'bigfile.ab'
creating file 'bigfile.ac'

请注意,上述命令中显示的前缀的末尾会添加一个点。否则,文件将是 bigfileaa 之类的名称,而不是 bigfile.aa

请注意,split 命令不会删除你的原始文件,只是创建了文件块。如果要指定文件块的大小,可以使用 -b 选项将其添加到命令中。例如:

$ split -b100M bigfile

文件大小可以是 KB、MB,GB,最大可以是 YB!只需使 K、M、G、T、P、E、Z 和 Y 这些合适的字母。

如果要基于每个块中的行数而不是字节数来拆分文件,那么可以使用 -l(行)选项。在此示例中,每个文件将有 1000 行,当然,最后一个文件可能有较少的行。

$ split --verbose -l1000 logfile log.
creating file 'log.aa'
creating file 'log.ab'
creating file 'log.ac'
creating file 'log.ad'
creating file 'log.ae'
creating file 'log.af'
creating file 'log.ag'
creating file 'log.ah'
creating file 'log.ai'
creating file 'log.aj'

如果你需要在远程站点上重新组合文件,那么可以使用如下所示的 cat 命令轻松地完成此操作:

$ cat x?? > original.file
$ cat log.?? > original.file

上面所示的分割和组合命令适合于二进制和文本文件。在此示例中,我们将 zip 二进制文件分割为 50KB 的块,之后使用 cat 重新组合了它们,然后比较了组合后的文件和原始文件。diff 命令验证文件是否相同。

$ split --verbose -b50K zip zip.
creating file 'zip.aa'
creating file 'zip.ab'
creating file 'zip.ac'
creating file 'zip.ad'
creating file 'zip.ae'
$ cat zip.a? > zip.new
$ diff zip zip.new
$                    <== 无输出 = 无差别

我唯一要提醒的一点的是,如果你经常使用 split 并使用默认命名,那么某些文件块可能会覆盖其他的文件块,甚至会比你预期的更多,因为有些是更早之前分割的。


via: https://www.networkworld.com/article/3489256/breaking-linux-files-into-pieces-with-the-split-command.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:geekpi 校对:wxy

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

在之前的文章中我们已经讨论过 如何在 Linux 中找出内存消耗最大的进程。你可能也会遇到在 Linux 系统中找出 CPU 占用高的进程的情形。如果是这样,那么你需要列出系统中 CPU 占用高的进程列表来确定。我认为只有两种方法能实现:使用 top 命令ps 命令。出于一些理由,我更倾向于用 top 命令而不是 ps 命令。但是两个工具都能达到你要的目的,所以你可以根据需求决定使用哪个。这两个工具都被 Linux 系统管理员广泛使用。

1) 怎样使用 top 命令找出 Linux 中 CPU 占用高的进程

在所有监控 Linux 系统性能的工具中,Linux 的 top 命令是最好的也是最知名的一个。top 命令提供了 Linux 系统运行中的进程的动态实时视图。它能显示系统的概览信息和 Linux 内核当前管理的进程列表。它显示了大量的系统信息,如 CPU 使用、内存使用、交换内存、运行的进程数、目前系统开机时间、系统负载、缓冲区大小、缓存大小、进程 PID 等等。默认情况下,top 命令的输出结果按 CPU 占用进行排序,每 5 秒中更新一次结果。如果你想要一个更清晰的视图来更深入的分析结果,以批处理模式运行 top 命令 是最好的方法。同时,你需要 理解 top 命令输出结果的含义 ,这样才能解决系统的性能问题。

# top -b | head -50

top - 00:19:17 up 14:23,  1 user,  load average: 2.46, 2.18, 1.97
Tasks: 306 total,   1 running, 305 sleeping,   0 stopped,   0 zombie
%Cpu0  : 10.4 us,  3.0 sy,  0.0 ni, 83.9 id,  0.0 wa,  1.3 hi,  1.3 si,  0.0 st
%Cpu1  : 17.0 us,  3.0 sy,  0.0 ni, 78.7 id,  0.0 wa,  0.3 hi,  1.0 si,  0.0 st
%Cpu2  : 13.0 us,  4.0 sy,  0.0 ni, 81.3 id,  0.0 wa,  0.3 hi,  1.3 si,  0.0 st
%Cpu3  : 12.3 us,  3.3 sy,  0.0 ni, 82.5 id,  0.3 wa,  0.7 hi,  1.0 si,  0.0 st
%Cpu4  : 12.2 us,  3.0 sy,  0.0 ni, 82.8 id,  0.7 wa,  0.3 hi,  1.0 si,  0.0 st
%Cpu5  :  6.4 us,  2.7 sy,  0.0 ni, 89.2 id,  0.0 wa,  0.7 hi,  1.0 si,  0.0 st
%Cpu6  : 26.7 us,  3.4 sy,  0.0 ni, 68.6 id,  0.0 wa,  0.7 hi,  0.7 si,  0.0 st
%Cpu7  : 15.6 us,  4.0 sy,  0.0 ni, 78.8 id,  0.0 wa,  0.7 hi,  1.0 si,  0.0 st
KiB Mem : 16248556 total,  1448920 free,  8571484 used,  6228152 buff/cache
KiB Swap: 17873388 total, 17873388 free,        0 used.  4596044 avail Mem
PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 2179 daygeek   20     3106324 613584 327564 S  79.5   3.8  14:19.76 Web Content
 1714 daygeek   20     4603372 974600 403504 S  20.2   6.0  65:18.91 firefox
 1227 daygeek   20     4192012 376332 180348 S  13.9   2.3  20:43.26 gnome-shell
18324 daygeek   20     3296192 766040 127948 S   6.3   4.7   9:18.12 Web Content
 1170 daygeek   20     1008264 572036 546180 S   6.0   3.5  18:07.85 Xorg
 4684 daygeek   20     3363708   1.1g   1.0g S   3.6   7.2  13:49.92 VirtualBoxVM
 4607 daygeek   20     4591040   1.7g   1.6g S   3.0  11.0  14:09.65 VirtualBoxVM
 1211 daygeek    9 -11 2865268  21032  16588 S   2.0   0.1  10:46.37 pulseaudio
 4562 daygeek   20     1096888  28812  21044 S   1.7   0.2   4:42.93 VBoxSVC
 1783 daygeek   20     3123888 376896 134788 S   1.3   2.3  39:32.56 Web Content
 3286 daygeek   20     3089736 404088 184968 S   1.0   2.5  41:57.44 Web Content

上面的命令的各部分解释:

  • top:命令
  • -b:批次档模式
  • head -50:显示输出结果的前 50 个
  • PID:进程的 ID
  • USER:进程的归属者
  • PR:进程的等级
  • NI:进程的 NICE 值
  • VIRT:进程使用的虚拟内存
  • RES:进程使用的物理内存
  • SHR:进程使用的共享内存
  • S:这个值表示进程的状态: S = 睡眠,R = 运行,Z = 僵尸进程
  • %CPU:进程占用的 CPU 比例
  • %MEM:进程使用的 RAM 比例
  • TIME+:进程运行了多长时间
  • COMMAND:进程名字

如果你想看命令的完整路径而不是命令名字,以运行下面的格式 top 命令:

# top -c -b | head -50

top - 00:28:49 up 14:33,  1 user,  load average: 2.43, 2.49, 2.23
Tasks: 305 total,   1 running, 304 sleeping,   0 stopped,   0 zombie
%Cpu0  : 11.7 us,  3.7 sy,  0.0 ni, 82.3 id,  0.0 wa,  1.0 hi,  1.3 si,  0.0 st
%Cpu1  : 13.6 us,  3.3 sy,  0.0 ni, 81.1 id,  0.7 wa,  0.3 hi,  1.0 si,  0.0 st
%Cpu2  : 10.9 us,  2.6 sy,  0.0 ni, 85.1 id,  0.0 wa,  0.3 hi,  1.0 si,  0.0 st
%Cpu3  : 16.0 us,  2.6 sy,  0.0 ni, 80.1 id,  0.0 wa,  0.3 hi,  1.0 si,  0.0 st
%Cpu4  :  9.2 us,  3.6 sy,  0.0 ni, 85.9 id,  0.0 wa,  0.3 hi,  1.0 si,  0.0 st
%Cpu5  : 15.6 us,  2.9 sy,  0.0 ni, 80.5 id,  0.0 wa,  0.3 hi,  0.7 si,  0.0 st
%Cpu6  : 11.6 us,  4.3 sy,  0.0 ni, 82.7 id,  0.0 wa,  0.3 hi,  1.0 si,  0.0 st
%Cpu7  :  8.0 us,  3.0 sy,  0.0 ni, 87.3 id,  0.0 wa,  0.7 hi,  1.0 si,  0.0 st
KiB Mem : 16248556 total,  1022456 free,  8778508 used,  6447592 buff/cache
KiB Swap: 17873388 total, 17873388 free,        0 used.  4201560 avail Mem
PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
18527 daygeek   20     3151820 624808 325748 S  52.8   3.8  59:26.72 /usr/lib/firefox/firefox -contentproc -childID 18 -isForBrowser -prefsLen 10002 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /+
 1714 daygeek   20     4764668 910940 443228 S  21.5   5.6  68:59.33 /usr/lib/firefox/firefox --new-window
 1227 daygeek   20     4193108 377344 181404 S  11.6   2.3  21:47.36 /usr/bin/gnome-shell
 1170 daygeek   20     1008820 572700 546844 S   5.6   3.5  19:05.10 /usr/lib/Xorg vt2 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -nolisten tcp -background none -noreset -keeptty -verbose 3
18324 daygeek   20     3300288 789344 127948 S   5.0   4.9   9:46.89 /usr/lib/firefox/firefox -contentproc -childID 16 -isForBrowser -prefsLen 10002 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /+
 4684 daygeek   20     3363708   1.1g   1.0g S   3.6   7.2  14:10.18 /usr/lib/virtualbox/VirtualBoxVM --comment CentOS7 --startvm 002f47b8-2af2-48f5-be1d-67b67e03514c --no-startvm-errormsgbox
 4607 daygeek   20     4591040   1.7g   1.6g S   3.0  11.0  14:28.86 /usr/lib/virtualbox/VirtualBoxVM --comment Ubuntu-18.04 --startvm e8c32dbb-8b01-41b0-977a-bf28b9db1117 --no-startvm-errormsgbox
 1783 daygeek   20     3132640 451924 132168 S   2.6   2.8  39:49.66 /usr/lib/firefox/firefox -contentproc -childID 1 -isForBrowser -prefsLen 1 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/l+
 1211 daygeek    9 -11 2865268  21272  16828 S   2.0   0.1  11:01.29 /usr/bin/pulseaudio --daemonize=no
 4562 daygeek   20     1096888  28812  21044 S   1.7   0.2   4:49.33 /usr/lib/virtualbox/VBoxSVC --auto-shutdown
16865 daygeek   20     3073364 430596 124652 S   1.3   2.7   8:04.02 /usr/lib/firefox/firefox -contentproc -childID 15 -isForBrowser -prefsLen 10002 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /+
 2179 daygeek   20     2945348 429644 172940 S   1.0   2.6  15:20.90 /usr/lib/firefox/firefox -contentproc -childID 6 -isForBrowser -prefsLen 7821 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /us+

2) 怎样使用 ps 命令找出 Linux 中 CPU 占用高的进程

ps 进程状态 process status 的缩写,它能显示系统中活跃的/运行中的进程的信息。它提供了当前进程及其详细信息,诸如用户名、用户 ID、CPU 使用率、内存使用、进程启动日期时间、命令名等等的快照。

# ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%cpu | head

  PID  PPID %MEM %CPU CMD
18527  1714  4.2 40.3 /usr/lib/firefox/firefox -contentproc -childID 18 -isForBrowser -prefsLen 10002 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 1714 true tab
 1714  1152  5.6  8.0 /usr/lib/firefox/firefox --new-window
18324  1714  4.9  6.3 /usr/lib/firefox/firefox -contentproc -childID 16 -isForBrowser -prefsLen 10002 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 1714 true tab
 3286  1714  2.0  5.1 /usr/lib/firefox/firefox -contentproc -childID 14 -isForBrowser -prefsLen 8078 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 1714 true tab
 1783  1714  3.0  4.5 /usr/lib/firefox/firefox -contentproc -childID 1 -isForBrowser -prefsLen 1 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 1714 true tab
 1227  1152  2.3  2.5 /usr/bin/gnome-shell
 1170  1168  3.5  2.2 /usr/lib/Xorg vt2 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -nolisten tcp -background none -noreset -keeptty -verbose 3
16865  1714  2.5  2.1 /usr/lib/firefox/firefox -contentproc -childID 15 -isForBrowser -prefsLen 10002 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 1714 true tab
 2179  1714  2.7  1.8 /usr/lib/firefox/firefox -contentproc -childID 6 -isForBrowser -prefsLen 7821 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 1714 true tab

上面的命令的各部分解释:

  • ps:命令名字
  • -e:选择所有进程
  • -o:自定义输出格式
  • –sort=-%cpu:基于 CPU 使用率对输出结果排序
  • head:显示结果的前 10 行
  • PID:进程的 ID
  • PPID:父进程的 ID
  • %MEM:进程使用的 RAM 比例
  • %CPU:进程占用的 CPU 比例
  • Command:进程名字

如果你只想看命令名字而不是命令的绝对路径,以运行下面的格式 ps 命令:

# ps -eo pid,ppid,%mem,%cpu,comm --sort=-%cpu | head

  PID  PPID %MEM %CPU COMMAND
18527  1714  4.1 40.4 Web Content
 1714  1152  5.7  8.0 firefox
18324  1714  4.9  6.3 Web Content
 3286  1714  2.0  5.1 Web Content
 1783  1714  3.0  4.5 Web Content
 1227  1152  2.3  2.5 gnome-shell
 1170  1168  3.5  2.2 Xorg
16865  1714  2.4  2.1 Web Content
 2179  1714  2.7  1.8 Web Content

via: https://www.2daygeek.com/how-to-find-high-cpu-consumption-processes-in-linux/

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

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

像日志或源代码这样的大文件可能会多达成千上万行,这使得在文件内导航非常困难,尤其是在终端上。此外,大多数终端仿真器的回滚缓冲区只有几百行。这可能使得无法使用打印到标准输出的实用程序(例如 catheadtail)在终端中浏览大型文件。在计算时代的早期,程序员通过开发用于以虚拟“页面”形式显示文本的实用程序来解决这些问题,该实用程序被形象地描述为 分页器 pager

分页器提供了许多使文本文件导航更加简单的功能,包括滚动、搜索功能,以及作为命令管道的一部分而具有的功能。与大多数文本编辑器相比,某些终端分页器不需要加载整个文件即可查看,这使得它们更快,特别是对于非常大的文件。

在现代 Linux 计算时代,终端仿真器比以往更加复杂。它们提供了对缤纷的色彩、终端尺寸调整以及许多其它功能的支持,这些功能使得辨析屏幕上的文本变得更加轻松和高效。从诸如 pgmore 这样极其简单的 UNIX 实用程序,到涵盖各种使用场景的、功能广泛的复杂程序,终端分页器也经历了类似的演变。考虑到这一点,我们或“多”或“少”地汇总了一些最受欢迎的终端分页实用程序的列表。

more

more 是最早的分页器之一,最初在 3.0 BSD 版本中出现。more 的第一个实现由 Daniel Halbert 编写于 1978 年。从那时起,more 已成为许多操作系统的普遍功能,包括 Windows、OS/2,MacOS 和大多数 Linux 发行版。

more 是一个非常轻量级的实用程序。util-linux 软件包中提供的版本只有不到 2100 行的 C 语言代码。但是,这种较小的代码大小是有代价的。大多数版本的 more 的功能相对有限,不支持向后滚动或搜索。命令也同样精简:按回车键可滚动一行,或按空格键滚动一页。其他一些有用的命令包括:

  • 在阅读时按 v 键以在默认的终端编辑器中打开当前文件。
  • /模式 可以让你搜索下一个出现的“模式”。
  • 以多个文件作为参数调用 more 时,:n:p 将分别打开下一个和上一个文件 ### less

less 最初被认为是 more 的继承者,解决了它的一些局限性。lessmore 的功能为基础,增加了许多有用的功能,包括向后滚动、向后搜索。它也更适合窗口大小调整。

less 中的导航方式与 more 类似,尽管 less 也从 vi 编辑器借用了一些有用的命令。用户可以使用熟悉的 主行导航键 home row navigational keys (LCTT 译注:指 左手的 ASDF 和右手的 JKL;,及大拇指所在的空格键)浏览文档。看一眼 less 的手册页,就会发现相当多的可用命令。一些特别有用的示例包括:

  • ?模式 可让你在文件中向后搜索“模式”。
  • &模式 仅显示具有“模式”特征的行。这对于发现自己经常要使用 $ grep 模式 | less 的人特别有用。
  • 使用 -s(或 –sqeueeze-blank-lines)标志来调用 less,使你可以查看空白较大的文本文件。 多个换行符被简化为单个中断行。
  • 在该程序中调用的 s 文件名 将输入保存到 文件名中(如果输入来自管道)。
  • 或者,使用 -o 文件名 标志来调用 less 将把 less 的输入保存到 文件名 中。 随着这些增强的功能也带来了体积的略微增大。在写作本文时,Fedora 随附的 less 版本大约有 25000 行源代码。当然,除非是受存储限制最大的系统,在所有其它的系统上这都不是问题。lessmore 功能更多。

most

less 旨在扩展 more 的现有功能,而 most 采用另一种方法。most 不是在传统的单个文件视图上进行扩展,而是使用户能够将其视图拆分为“窗口”。每个窗口以不同的查看模式包含不同的文件。

重要的是,most 考虑了其输入文本的宽度。默认的查看模式是不换行的(less 中的 -S 参数),此功能在处理“宽”文件时特别有用。尽管对于某些用户来说,这些设计决策可能代表着与传统的重大偏离,但最终结果却非常强大。

除了 more 提供的导航命令外,most 使用直观的助记符进行文件导航。例如,t 移至文件的顶部(Top),而 b 移至底部(Bottom)。这样,不熟悉 vi 及其衍生品的用户会发现 most 非常简单好用。

most 的与众不同之处在于它能够快速轻松地拆分窗口和上下文。例如,可以使用以下命令打开两个不同的文本文件:

$ most textFile1.txt textFile2.txt

为了水平拆分屏幕,请使用组合键 Ctrl+x, 2Ctrl+w, 2:n 命令将在给定窗口中打开下一个文件参数,提供两个文件的分屏视图:

如果在一个窗口中关闭自动换行,它不会影响其他窗口的行为。(行末的)\ 字符表示换行或折叠,而 $ 字符表示文件超出了当前窗口的限制。

pspg

使用 SQL 数据库的人员通常需要能够一目了然地检查数据库的内容。许多流行的开源 DBMS(例如 MySQL 和 PostGreSQL)的命令行界面都使用系统默认的分页器来查看无法显示在单个屏幕上的输出。诸如 moreless 之类的实用程序是围绕呈现文本文件的想法而设计的,但是对于更结构化的数据,还有一些不足之处。天真的文本分页程序没有宽的表格数据的概念,当处理大型查询时,这可能会令人感到沮丧。

pspg 试图通过为用户提供在查看时冻结列、原位排序数据并为输出着色的功能来解决此问题。尽管pspg 最初是专门用作 psql 的分页器的替代品,但该程序还支持查看 CSV 数据,并且是 mysqlpgcli 的合适的直接替代品。

Vim

在现代的颜色鲜明的终端中,无休止的黑色页面上的灰色文字感觉太过时了。强大的文本编辑器(如 vim)提供的语法高亮显示选项对于浏览源代码很有用。此外,vim 提供的搜索功能远远超过了竞争对手。考虑到这一点,vim 附带了一个 shell 脚本 less.sh,该脚本可以使 vim 替代传统的分页器。

要将 vim 设置为手册页的默认分页器,请将以下内容添加到 shell 的配置中(如果使用默认的bash shell 的话是 ~/.bashrc):

export MANPAGER="/bin/sh -c \"col -b | vim -c 'set ft=man ts=8 nomod nolist nonu noma' -\""

或者,要将 vim 设置为系统范围内的默认分页器,请找到 less.sh 脚本。(你可以在当前 Fedora 系统上的 /usr/share/vim/vim81/macros/ 找到它。)将此位置导出为变量 PAGER 以将其设置为默认值,或者将其设置为别名以显式调用它。


via: https://fedoramagazine.org/5-cool-terminal-pagers-in-fedora/

作者:Jacob Burns 选题:lujun9972 译者:wxy 校对:wxy

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

本文是 24 天 Linux 桌面特别系列的一部分。GNOME 是大多数现代 Linux 发行版的默认桌面,它干净、简单、组织良好。

GNOME 项目理所应当是 Linux 桌面的宠儿。它起初是专有桌面(当时包括 KDE)的自由开源的桌面替代品,此后一直发展强劲。GNOME 采用了由 GIMP 项目开发的 GTK+,并将其开发为强大的通用 GTK 框架。该项目开创了用户界面的先声,挑战了桌面“应有”外观的先入之见,并为用户提供了新的范例和选项。

在大多数主流现代 Linux 发行版(包括 RHEL、Fedora、Debian 和 Ubuntu)中,GNOME 作为默认桌面而广泛使用。如果你的发行版不提供它的某个版本,那么你可以从软件仓库中安装 GNOME。但是,在执行此操作之前,请注意,为了提供完整的桌面体验,这会随桌面一起安装许多 GNOME 应用。如果你在用其他桌面,那么你可能会发现有冗余的应用(两个 PDF 阅读器、两个媒体播放器、两个文件管理器,等等)。如果你只想尝试 GNOME 桌面,请考虑在虚拟机,如 GNOME Boxes,中安装 GNOME 发行版。

GNOME 功能

GNOME 桌面很干净,顶部有一个简单的任务栏,右上角的系统托盘中只有很少的图标。GNOME 上没有桌面图标,这是设计使然。如果你是喜欢在桌面上保存任何东西的用户,那么你可能会意识到桌面会定期地变得混乱,而且,更糟糕的是,由于你的应用掩盖了桌面,因此桌面永远不会显示出来。

GNOME 解决了两个问题:(在功能上)没有桌面,并且动态生成新的虚拟工作区,因此你可以在全屏模式下运行应用。如果你常把屏幕弄乱,那么可能需要一些时间来习惯,但实际上,从各个方面来说,这都是一种改进的工作流程。你将学习如何使文件井井有条(或者将它们分散在家目录中),并且可以像在手机上一样快速地在屏幕之间切换。

当然,并非所有应用都设计为在全屏模式下运行,因此,如果你更喜欢单击切换窗口,也可以这样做。

 title=

GNOME 哲学褒扬了 Canonical 对常见任务的解决方案。在 GNOME 中,你通常不会发现“回字有四种写法”。你会找到一种或两种官方方法来完成一项任务,你了解了这些方法后,便只需记住这些即​​可。它非常简单,但由于它在 Linux 上运行,因此在技术上也很灵活(毕竟,你不必因为运行 GNOME 桌面而必须要使用 GNOME 应用)。

应用菜单

要访问名为“活动”的应用菜单,请在桌面的左上角单击。此菜单将占满整个屏幕,屏幕最左侧有一栏常见应用的 dock,或可以在网格中浏览应用的图标。你可以通过浏览已安装的应用,或输入软件的头几个字母来过滤列表,然后来启动应用。

 title=

GNOME 应用

GNOME 不仅是桌面。它是一个桌面以及一组丰富的集成应用,例如 Gedit 文本编辑器、Evince PDF 查看器、Web 浏览器、图像查看器、Nautilus 文件管理器等等。GNOME 应用(例如桌面本身)遵循 GNOME 人机界面指南,因此用户体验既愉悦又一致。无论你是否使用 GNOME 桌面,都可能使用 GTK 应用,也可能会使用 GNOME 应用。

GNOME 3 及更高版本

GNOME 项目进展顺利,还有几个令人兴奋的项目(例如 MATE 和 Cinnamon)。它流行、令人舒适,被视为 Linux 桌面的代表。


via: https://opensource.com/article/19/12/gnome-linux-desktop

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

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

即将进行系统管理员工作面试吗?阅读本文,了解你可能会遇到的一些问题以及可能的答案。

作为一个经常与计算机打交道的极客,在硕士毕业后在 IT 行业选择我的职业是很自然的选择。因此,我认为走上系统管理员之路是正确的路径。在我的职业生涯中,我对求职面试过程非常熟悉。现在来看一下对该职位的预期、职业发展道路,以及一系列常见面试问题及我的回答。

系统管理员的典型任务和职责

组织需要了解系统工作原理的人员,以确保数据安全并保持服务平稳运行。你可能会问:“等等,是不是系统管理员还能做更多的事情?”

你是对的。现在,一般来说,让我们看一下典型的系统管理员的日常任务。根据公司的需求和人员的技能水平,系统管理员的任务从管理台式机、笔记本电脑、网络和服务器到设计组织的 IT 策略不等。有时,系统管理员甚至负责购买和订购新的 IT 设备。

那些寻求系统管理工作以作为其职业发展道路的人可能会发现,由于 IT 领域的快速变化是不可避免的,因此难以保持其技能和知识的最新状态。所有人都会想到的下一个自然而然的问题是 IT 专业人员如何掌握最新的更新和技能。

简单的问题

这是你将遇到的一些最基本的问题,以及我的答案:

1、你在 *nix 服务器上登录后键入的前五个命令是什么?

  • lsblk 以查看所有的块设备信息
  • who 查看谁登录到服务器
  • top,以了解服务器上正在运行的进程
  • df -khT 以查看服务器上可用的磁盘容量
  • netstat 以查看哪些 TCP 网络连接处于活动状态

2、如何使进程在后台运行,这样做的好处是什么?

你可以通过在命令末尾添加特殊字符 来使进程在后台运行。通常,执行时间太长并且不需要用户交互的应用程序可以放到后台,以便我们可以在终端中继续工作。(引文

3、以 root 用户身份运行这些命令是好事还是坏事?

由于两个主要问题,以 root 身份运行(任何命令)是不好的。第一个是风险。当你以 root 身份登录时,无法避免你由于粗心大意而犯错。如果你尝试以带有潜在危害的方式更改系统,则需要使用 sudo,它会引入一个暂停(在你输入密码时),以确保你不会犯错。

第二个原因是安全。如果你不知道管理员用户的登录信息,则系统更难被攻击。拥有 root 的访问权限意味着你已经能够进行管理员身份下的一半工作任务。

4、rmrm -rf 有什么区别?

rm 命令本身仅删除指明的文件(而不删除目录)。使用 -rf 标志,你添加了两个附加功能:-r(或等价的 -R--recursive)标志可以递归删除目录的内容,包括隐藏的文件和子目录;而 -f(或 --force)标志使 rm 忽略不存在的文件,并且从不提示你进行确认。

5、有一个大小约为 15GB 的 Compress.tgz 文件。你如何列出其内容,以及如何仅提取出特定文件?

要列出文件的内容:

tar tf archive.tgz

要提取特定文件:

tar xf archive.tgz filename

有点难度的问题

这是你可能会遇到的一些较难的问题,以及我的答案:

6、什么是 RAID?什么是 RAID 0、RAID 1、RAID 5、RAID 6 和 RAID 10?

RAID( 廉价磁盘冗余阵列 Redundant Array of Inexpensive Disks )是一种用于提高数据存储性能和/或可靠性的技术。RAID 级别为:

  • RAID 0:也称为磁盘条带化,这是一种分解文件并将数据分布在 RAID 组中所有磁盘驱动器上的技术。它没有防止磁盘失败的保障。(引文
  • RAID 1:一种流行的磁盘子系统,通过在两个驱动器上写入相同的数据来提高安全性。RAID 1 被称为镜像,它不会提高写入性能,但读取性能可能会提高到每个磁盘性能的总和。另外,如果一个驱动器发生故障,则会使用第二个驱动器,发生故障的驱动器需要手动更换。更换后,RAID 控制器会将可工作的驱动器的内容复制到新驱动器上。
  • RAID 5:一种磁盘子系统,可通过计算奇偶校验数据来提高安全性和提高速度。RAID 5 通过跨三个或更多驱动器交错数据(条带化)来实现此目的。在单个驱动器发生故障时,后续读取可以从分布式奇偶校验计算出,从而不会丢失任何数据。
  • RAID 6:通过添加另一个奇偶校验块来扩展 RAID 5。此级别至少需要四个磁盘,并且可以在任何两个并发磁盘故障的情况下继续执行读/写操作。RAID 6 不会对读取操作造成性能损失,但由于与奇偶校验计算相关的开销,因此确实会对写入操作造成性能损失。
  • RAID 10:RAID 10 也称为 RAID 1 + 0,它结合了磁盘镜像和磁盘条带化功能来保护数据。它至少需要四个磁盘,并且跨镜像对对数据进行条带化。只要每个镜像对中的一个磁盘起作用,就可以检索数据。如果同一镜像对中的两个磁盘发生故障,则所有数据将丢失,因为带区集中没有奇偶校验。(引文

7、ping 命令使用哪个端口?

ping 命令使用 ICMP。具体来说,它使用 ICMP 回显请求和应答包。

ICMP 不使用 UDP 或 TCP 通信服务:相反,它使用原始的 IP 通信服务。这意味着,ICMP 消息直接承载在 IP 数据报数据字段中。

8、路由器和网关之间有什么区别?什么是默认网关?

路由器描述的是一种通用技术功能(第 3 层转发)或用于该目的的硬件设备,而网关描述的是本地网段的功能(提供到其他地方的连接性)。你还可以说“将路由器设置为网关”。另一个术语是“跳”,它描述了子网之间的转发。

术语默认网关表示局域网上的路由器,它的责任是作为对局域网外部的计算机通信的第一个联系点。

9、解释一下 Linux 的引导过程。

BIOS -> 主引导记录(MBR) -> GRUB -> 内核 -> 初始化 -> 运行级

10、服务器启动时如何检查错误消息?

内核消息始终存储在 kmsg 缓冲区中,可通过 dmesg 命令查看。

引导出现的问题和错误要求系统管理员结合某些特定命令来查看某些重要文件,这些文件不同版本的 Linux 处理方式不同:

  • /var/log/boot.log 是系统引导日志,其中包含系统引导过程中展开的所有内容。
  • /var/log/messages 存储全局系统消息,包括系统引导期间记录的消息。
  • /var/log/dmesg 包含内核环形缓冲区信息。

11、符号链接和硬链接有什么区别?

符号链接软链接)实际是到原始文件的链接,而硬链接是原始文件的镜像副本。如果删除原始文件,则该软链接就没有用了,因为它指向的文件不存在了。如果是硬链接,则完全相反。如果删除原始文件,则硬链接仍然包含原始文件中的数据。(引文

12、如何更改内核参数?你可能需要调整哪些内核选项?

要在类 Unix 系统中设置内核参数,请首先编辑文件 /etc/sysctl.conf。进行更改后,保存文件并运行 sysctl -p 命令。此命令使更改永久生效,而无需重新启动计算机

13、解释一下 /proc 文件系统。

/proc 文件系统是虚拟的,并提供有关内核、硬件和正在运行的进程的详细信息。由于 /proc 包含虚拟文件,因此称为“虚拟文件系统”。这些虚拟文件具有独特性。其中大多数显示为零字节。

虚拟文件,例如 /proc/interrupts/proc/meminfo/proc/mounts/proc/partitions,提供了系统硬件的最新信息。其他诸如 /proc/filesystems/proc/sys 目录提供系统配置信息和接口。

14、如何在没有密码的情况下以其他用户身份运行脚本?

例如,如果你可以编辑 sudoers 文件(例如 /private/etc/sudoers),则可以使用 visudo 添加以下内容

user1 ALL =(user2)NOPASSWD:/opt/scripts/bin/generate.sh

15、什么是 UID 0 toor 帐户?是被入侵了么?

toor 用户是备用的超级用户帐户,其中 toorroot 反向拼写。它预期与非标准 shell 一起使用,因此 root 的默认 shell 不需要更改。

此用途很重要。这些 shell 不是基本发行版的一部分,而是从 ports 或软件包安装的,它们安装在 /usr/local/bin 中,默认情况下,位于其他文件系统上。如果 root 的 shell 位于 /usr/local/bin 中,并且未挂载包含 /usr/local/bin 的文件系统,则 root 无法登录以解决问题,并且系统管理员必须重新启动进入单用户模式来输入 shell 程序的路径。

更难的问题

这是你可能会遇到的甚至更困难的问题:

16、tracert 如何工作,使用什么协议?

命令 tracert(或 traceroute,具体取决于操作系统)使你可以准确地看到在连接到最终目的地的连接链条中所触及的路由器。如果你遇到无法连接或无法 ping 通最终目的地的问题,则可以使用 tracert 来帮助你确定连接链在何处停止。(引文

通过此信息,你可以联系正确的人;无论是你自己的防火墙、ISP、目的地的 ISP 还是中间的某个位置。 tracert 命令像 ping 一样使用 ICMP 协议,但也可以使用 TCP 三步握手的第一步来发送 SYN 请求以进行响应。

17、使用 chroot 的主要优点是什么?我们何时以及为什么使用它?在 chroot 环境中,mount /devmount /procmount /sys 命令的作用是什么?

chroot 环境的优点是文件系统与物理主机是隔离的,因为 chroot 在文件系统内部有一个单独的文件系统。区别在于 chroot 使用新创建的根目录(/)作为其根目录。

chroot 监狱可让你将进程及其子进程与系统其余部分隔离。它仅应用于不以 root 身份运行的进程,因为 root 用户可以轻松地脱离监狱。

该思路是创建一个目录树,在其中复制或链接运行该进程所需的所有系统文件。然后,你可以使用 chroot() 系统调用来告诉它根目录现在位于此新树的基点上,然后启动在该 chroot 环境中运行的进程。由于该命令因此而无法引用修改后的根目录之外的路径,因此它无法在这些位置上执行恶意操作(读取、写入等)。(引文

18、如何保护你的系统免遭黑客攻击?

遵循最低特权原则和这些做法:

  • 使用公钥加密,它可提供出色的安全性。
  • 增强密码复杂性。
  • 了解为什么要对上述规则设置例外。
  • 定期检查你的例外情况。
  • 让具体的人对失败负责。(它使你保持警惕。)(引文

19、什么是 LVM,使用 LVM 有什么好处?

LVM(逻辑卷管理)是一种存储设备管理技术,该技术使用户能够合并和抽象化组件存储设备的物理布局,从而可以更轻松、灵活地进行管理。使用设备映射器的 Linux 内核框架,当前迭代(LVM2)可用于将现有存储设备收集到组中,并根据需要从组合的空间分配逻辑单元。

20、什么是粘性端口?

粘性端口是网络管理员最好的朋友,也是最头痛的事情之一。它们允许你设置网络,以便通过将交换机上的每个端口锁定到特定的 MAC 地址,仅允许一台(或你指定的数字)计算机在该端口上进行连接。

21、解释一下端口转发?

尝试与安全的网络内部的系统进行通信时,从外部进行通信可能非常困难,这是很显然的。因此,在路由器本身或其他连接管理设备中使用端口转发表可以使特定流量自动转发到特定目的地。例如,如果你的网络上运行着一台 Web 服务器,并且想从外部授予对该服务器的访问权限,则可以将端口转发设置为该服务器上的端口 80。这意味着在 Web 浏览器中输入你的(外网)IP 地址的任何人都将立即连接到该服务器的网站。

请注意,通常不建议允许从你的网络外部直接访问服务器。

22、对于 IDS,误报和漏报是什么?

当入侵检测系统(IDS)设备为实际上没有发生的入侵生成警报时,这是 误报(假阳性) false positive 。如果设备未生成任何警报,而入侵实际上已发生,则为 漏报(假阴性)

23、解释一下 :(){ :|:& };:,如果已经登录系统,如何停止此代码?

这是一枚复刻炸弹。它分解如下:

  • :() 定义了函数,以 : 作为函数名,并且空括号表示它不接受任何参数。
  • {} 是函数定义的开始和结束。
  • :|: 将函数 : 的副本加载到内存中,并将其输出通过管道传递给函数 : 的另一个副本,该副本也必须加载到内存中。
  • 使前一个命令行成为后台进程,因此即使父进程被自动杀死,子进程也不会被杀死。
  • : 执行该函数,因此连锁反应开始。

保护多用户系统的最佳方法是使用特权访问管理(PAM)来限制用户可以使用的进程数。

复刻炸弹的最大问题是它发起了太多进程。因此,如果你已经登录系统,我们有两种尝试解决此问题的方法。一种选择是执行一个 SIGSTOP 命令来停止进程,例如:

killall -STOP -u user1

如果由于占用了所有进程而无法使用命令行,则必须使用 exec 强制其运行:

exec killall -STOP -u user1

对于复刻炸弹,最好的选择是防患于未然。

24、什么是 OOM 杀手,它如何决定首先杀死哪个进程?

如果内存被进程彻底耗尽,可能会威胁到系统的稳定性,那么 内存不足 out of memory (OOM)杀手就登场了。

OOM 杀手首先必须选择要杀死的最佳进程。最佳在这里指的是在被杀死时将释放最大内存的进程,并且对系统来说最不重要。主要目标是杀死最少数量的进程,以最大程度地减少造成的损害,同时最大化释放的内存量。

为了实现此目标,内核为每个进程维护一个 oom_score。你可以在 /proc 文件系统中的 pid 目录下的看到每个进程的 oom_score

$ cat /proc/10292/oom_score

任何进程的 oom_score 值越高,在内存不足的情况下被 OOM 杀手杀死的可能性就越高。(引文

总结

系统管理人员的薪水差别很大,有些网站上说年薪在 70,000 到 100,000 美元之间,具体取决于地点、组织的规模以及你的教育水平以及多年的工作经验。系统管理的职业道路最终归结为你对使用服务器和解决那些酷问题的兴趣。现在,我要说,继续前进,实现你的梦想之路吧!


via: https://opensource.com/article/19/7/sysadmin-job-interview-questions

作者:DirectedSoul 选题:lujun9972 译者:wxy 校对:wxy

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

需要知道重要事件发生前有多少天吗?让 Linux bash 和 date 命令可以帮助你!

随着即将来临的重要假期,你可能需要提醒你还要准备多久。

幸运的是,你可以从 date 命令获得很多帮助。在本篇中,我们将研究 date 和 bash 脚本如何告诉你从今天到你预期的事件之间有多少天。

首先,在进行之前有几个提示。date 命令的 %j 选项将以 1 至 366 之间的数字显示当前日期。如你所想的一样,1 月 1 日将显示为 1,12 月 31 日将显示为 365 或 366,这取决于是否是闰年。继续尝试。你应该会看到以下内容:

$ date +%j
339

但是,你可以通过以下方式,在 date 命令中得到一年中任何一天的数字:

$ date -d "Mar 18" +%j
077

要记住的是,即使该日期是过去的日期,上面命令也会向你显示当年的日期。但是,你可以在命令中添加年来修复该问题:

$ date -d "Apr 29" +%j
119
$ date -d "Apr 29 2020" +%j
120

在闰年中,4 月 29 日将是一年的 120 天,而不是 119 天。

如果你想倒数圣诞节之前的日子并且不想在挂历上留下指纹,你可以使用以下脚本:

#!/bin/sh

XMAS=`date -d "Dec 25" +%j`
TODAY=`date +%j`
DAYS=$(($XMAS - $TODAY))

case $DAYS in
  0) echo "It's today! Merry Christmas!";;
  [0-9]*) echo "$DAYS days remaining";;
  -[0-9]*) echo "Oops, you missed it";;
esac

在此脚本中,我们获取 12 月 25 日和今天的日期,然后相减。如果结果是正数,我们将显示剩余天数。如果为零,则发出 “Merry Christmas” 的消息,如果为负,那么仅告诉运行脚本的人他们错过了假期。也许他们沉迷在蛋酒中了。

case 语句由用来打印信息的语句组成,当剩余时间等于 0,或任意数字或以 - 符号开头的数字(也就是过去)分别打印不同的信息。

对于人们想要关注的任何日期,都可以使用相同方法。实际上,我们可以要求运行脚本的人员提供日期,然后让他们知道从现在到那天还有多少天。这个脚本是这样的。

#!/bin/sh

echo -n "Enter event date (e.g., June 6): "
read dt
EVENT=`date -d "$dt" +%j`
TODAY=`date +%j`
DAYS=`expr $EVENT - $TODAY`

case $DAYS in
  0) echo "It's today!";;
  [0-9]*) echo "$DAYS days remaining";;
  -[0-9]*) echo "Oops, you missed it";;
esac

使用此脚本会遇到的一个问题,如果运行该脚本的人希望知道到第二年这个特殊日子还有多少天,他们会感到失望。即使他们输入日期时提供了年,date -d 命令仍将仅提供今年中的天数,而不会提供从现在到那时的天数。

计算从今天到某年的日期之间的天数可能有些棘手。你需要包括所有中间年份,并注意那些闰年。

使用 Unix 纪元时间

计算从现在到某个特殊日期之间的天数的另一种方法是利用 Unix 系统存储日期的方法。如果将自 1970 年 1 月 1 日开始的秒数转换为天数,那么就可以很容易地执行此操作,如下脚本所示:

#!/bin/bash

echo -n "Enter target date (e.g., Mar 18 2021)> "
read target_date
today=`echo $(($(date --utc --date "$1" +%s)/86400))`
target=`echo $(($(date --utc --date "$target_date" +%s)/86400))`
days=`expr $target - $today`
echo "$days days until $target_date"

解释一下,86400 是一天中的秒数。将自 Unix 纪元开始以来的秒数除该数即为天数。

$ ./countdown
Enter target date (e.g., Mar 18 2021)> Mar 18 2020
104 days until Mar 18 2020

via: https://www.networkworld.com/article/3487712/counting-down-the-days-using-bash.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:geekpi 校对:wxy

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