分类 技术 下的文章

如果你想调试或排除任何问题,你需要一个像 lnav 这样的高级日志文件查看器。它在任何 Linux 系统的终端都能创造奇迹。

lnav: 日志文件查看器

lnav 可以即时解压缩所有的压缩日志文件,并将它们合并在一起进行漂亮的显示。显示是根据错误/警告的类型进行解析和格式化的,这有助于快速浏览成千上万的日志,特别是在服务器中。

在分析日志的时候,时间戳是非常重要的。所以 lnav 会根据时间戳合并多个日志,这对追踪系统问题很有帮助。

大多数重要的日志文件格式检测都是内置的,包括如下:

  • 通用网络访问日志 Common Web Access Log 格式
  • CUPS page\_log
  • Syslog
  • Glog
  • VMware ESXi/vCenter 日志
  • dpkg.log
  • uwsgi
  • “通用”:任何以时间戳开头的信息
  • Strace
  • sudo
  • GZIP、BZIP

这还不是全部,lnav 还能实现以下功能,使其成为 Linux 系统的重要应用:

  • 根据正则表达式过滤消息
  • 错误日志的时间轴视图
  • 漂亮的打印视图,这有助于重新格式化
  • 使用 SQL 查询日志
  • 在搜索时,日志会实时更新
  • 通过正则表达式高亮显示语法(比如你想在整个日志中找出一个 IP 地址)
  • 显示的日志中任何单词的 Tab 补全!!

lnav 在 ubuntu 中运行

要查看上述功能的截图和了解更多信息,请访问 本页面

如何安装

这个程序在 Ubuntu、Debian 的官方仓库中可以找到。使用以下命令安装它。

sudo apt install lnav

而对于 Fedora、RHEL 用户,使用下面的命令:

sudo dnf install lnav

另外,开发者还提供了一个离线的独立可执行文件,你不需要安装。你可以从 GitHub 发布页 下载压缩包,然后按以下方式执行:

./lnav

注意:它也可用于 macOS,你可以在上述 GitHub 页面找到。

lnav: 如何使用(基础)

简单的命令语法是:

lnav [options] [logfile1 logfile2 …]

如果你直接运行 lnav 命令,它会显示你系统中的所有日志(/var/log/messages/var/log/syslog)

lnav

要查看任何特定的日志文件,在命令行中输入:

lnav /var/log/syslog

使用 -t 参数在你的日志输出中添加时间戳:

lnav -t /var/log/syslog

以下是 lnav 的一些关键开关:

  • -d file:将调试信息写入给定的文件。
  • -a:加载所有最新的日志文件类型。
  • -r:也加载较早的轮转的日志文件。
  • -t:在标准输入中读入的数据行上预加时间戳。
  • -w file:将标准输入的内容写入该文件。
  • -c cmd:在文件加载后执行命令。
  • -f path:执行给定文件中的命令。
  • -n:不使用 curses UI 运行(无头模式)。

lnav 在 Ubuntu 22.04 中运行

要进一步阅读和探索,请访问 官方文档


via: https://www.debugpoint.com/advanced-log-file-viewer-lnav-ubuntu-linux/

作者:Arindam 选题:lkxed 译者:geekpi 校对:wxy

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

Linux Mint 是我最喜欢的发行版之一,其旗舰版的默认 Cinnamon 桌面是我如此喜欢它的原因。

Cinnamon 桌面提供的用户体验可能并不炫目花哨。但是,用户有充分的理由喜欢这个桌面环境,并可以轻松地用它来完成工作。

在日复一日工作中,我们想要的是,一个能按预期工作且不造成妨碍的用户界面。

我认为 Cinnamon 桌面做对了几件事,可以给你带来了令人兴奋的体验。让我在这里介绍其中一些。

如果你还不知道,Cinnamon 桌面是由 Linux Mint 的创建者 Clement Lefebvre 于 2011 年创建的 GNOME 3 复刻版,并经过多年的改进。

1、熟悉的用户界面

Linux Mint 21

构建 Cinnamon 的主要目的是为了保持 GNOME 2 的桌面风格。

而这就是为什么与最流行的消费级桌面操作系统 Windows 相比,你会看到一个熟悉的桌面布局。

当然,随着时间的推移,Windows 11 已经进化了它的通常布局。但是,访问开始菜单、任务栏、托盘中的系统图标和几个窗口装饰使其易于掌握。

无论你是 Windows 用户还是 macOS 用户,Cinnamon 的桌面布局都不应该让你感到有什么挑战。

Linux Mint 欢迎屏幕

为了进一步帮助你,Linux Mint 的 “欢迎屏幕” 为你迅速提供了各种信息。

2、轻量级

为了获得舒适的 Cinnamon 桌面体验(通常使用 Linux Mint),有以下最低系统要求:

  • 4GB 内存
  • 100 GB 的磁盘空间
  • 1024×768 分辨率的屏幕

在现代计算时代,这些规格应该适合几乎所有人。所以,你不必担心需要一个疯狂的内存或磁盘空间来运行由 Cinnamon 驱动的 Linux 发行版。

当然,你可以尝试 在 Ubuntu 上安装 Cinnamon 桌面

但是,在本文中,我们认为 Linux Mint 是理想的使用案例。

3、快速的性能而不牺牲用户体验

当我们想到一个轻量级的桌面环境时,我们通常会想象一个注重性能的、平淡无奇的用户界面。

Linux Mint 首选项

在 Cinnamon 桌面上,情况并非如此。它确实包括了各种细微的动画和特色的图标/主题,即使不是最好的,其外观也相当现代。

它以极简的方式让你看起来很赏心悦目。

通常情况下,我很喜欢漂亮的用户界面,但我仍然可以接受 Linux Mint 的简单直接的用户体验,并在双显示器设置(1440p + 1080p)上运行它。

它可能不是 Linux Mint Cinnamon 版最好的双显示器体验(对我来说,第二个屏幕上没有停靠区和面板),但需要改进地方不多。

4、默认的自定义选项

你可能已经知道,在提供开箱即用的定制能力方面,KDE 可能是最棒的。

如果你对这种方式感到好奇,我们有超级有用的指南:

但是,对于许多用户来说,这有些过于复杂了。

我认为 Linux Mint 给出了适量的额外控制/定制,你也可以在它的欢迎屏幕上了解到这些。

Cinnamon 主题定制

一些你可以轻松定制的元素包括:

  • 桌面颜色(强调色)
  • 浅色/深色主题切换
  • 面板布局
  • 图标、按钮和鼠标指针

你可以前往系统设置,并导航到 “主题”,找到必要的调整项。

推荐阅读:

在 Linux 上定制 Cinnamon 桌面的 7 种方法

5、为你的体验增色的官方附加组件

Cinnamon 桌面部件

Linux Mint 支持各种插件来增强你的体验。这些都是 Cinnamon 调味品 产品的一部分。它们包括:

  • 主题
  • 扩展程序
  • 小程序 Applet
  • 桌面组件 Desklet

小程序和桌面组件是小型程序,你可以分别在面板(靠近系统托盘)和桌面上添加。

小程序

你可以管理系统默认的小程序,也可以从官方软件库下载更多的小程序。

小程序

同样,你可以从可用的默认程序中添加桌面组件,或者从软件库中获得新的。

桌面组件

大量有价值的实用程序可以用来监控系统资源、检查天气,以及更多。

此外,你还可以访问社区构建的各种主题,可以很容易地给你一个你一直想要的外观。

Cinnamon 主题

通过补充上述所有的 “调味品”,你可以使用扩展来使面板透明,在桌面上添加水印,启用窗口平铺,并添加一些令人兴奋的窗口动画。

Linux Mint 扩展

6、兼容和无缝的用户体验

为什么我再次强调用户体验?

Cinnamon 桌面最棒的地方在于它以尊重和支持所有功能的方式发展。

例如,如果你想安装一个你在 KDE Plasma 上喜欢使用的应用程序,它在这里也应该以同样的方式工作。Cinnamon 桌面没有什么特别之处,会破坏这种体验。

GNOME 账户应用

同样地,该桌面增加了一些试图与其他桌面环境的服务共存的功能。例如,支持使用 GNOME 在线账户的日历事件。

7、面板定制

Linux Mint 面板

停靠区、任务栏或面板是用户界面的一个组成部分。

是的,其他的桌面环境也允许你在某种程度上同样定制这些。但在 Cinnamon 中,你可以得到大量的控制权来调整它。

我认为你可以得到一个用户想要的所有基本选项。

总结

GNOME 和 KDE Plasma 是流行的桌面环境。然而,Cinnamon 在提供最佳用户体验的基本部分上并不逊色。

你对 Cinnamon 桌面环境有什么看法?你更喜欢用 Linux Mint 来尝试它吗?在下面的评论部分分享你的想法。


via: https://itsfoss.com/why-cinnamon/

作者:Ankush Das 选题:lkxed 译者:wxy 校对:wxy

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

这是一份关于如何理解 Linux 和 BSD 中 whereis 命令的初学者指南,还包括几个例子。

这篇文章是 Linux 命令 学习系列的一部分。

whereis 命令

whereis 命令是一个命令行程序,可以帮助你找出任何二进制可执行文件、源文件或手册页的路径或位置。

在告诉你如何使用 whereis 命令之前,让我们先看看其语法。

语法

以下是 whereis 命令的语法:

whereis [OPTIONS] FILE_NAME

whereis 命令的参数是你要搜索的程序名或文件名。该参数是必须的。

默认情况下,它在环境变量(如 HOMEUSERSHELL 等)中定义的路径中搜索程序。

让我们看下一些例子。

Linux 和 BSD 中 whereis 命令的例子

下面是 whereis 命令的一个简单例子,我试图搜索 firefox。在下面的输出中,你可以看到包含 firefox 文件或可执行文件的路径列表。

$ whereis firefox

firefox: /usr/bin/firefox /usr/lib64/firefox /etc/firefox /usr/share/man/man1/firefox.1.gz

Linux 中 whereis 命令的简单例子

带有选项 -l 的命令会显示其搜索的路径列表。比如:

$ whereis -l

bin: /usr/bin
bin: /usr/sbin
bin: /usr/lib
bin: /usr/lib64
bin: /etc
bin: /usr/games
bin: /usr/local/bin
bin: /usr/local/sbin
bin: /usr/local/etc
bin: /usr/local/lib
bin: /usr/local/games

如果 whereis 命令没有找到任何东西,它只显示参数的名称。例如,如果我在 Linux 中搜索 nano,它没有安装,它的输出如下:

$ whereis nano
nano:

如果你想搜索更多的参数,你可以随时添加多个参数。例如,下面的命令同时搜索 bashnano,输出结果是这样的:

$ whereis bash nano

bash: /usr/bin/bash /usr/share/man/man1/bash.1.gz /usr/share/info/bash.info.gz
nano: /usr/bin/nano /usr/share/nano /usr/share/man/man1/nano.1.gz /usr/share/info/nano.info.gz

你也可以使用 -b 选项搜索特定的文件类型,比如二进制文件。下面的命令只告诉你 nano 的二进制路径。

$ whereis -b nano

nano: /usr/bin/nano /usr/share/nano

同样,-s 选项可以搜索源文件,而 -m 选项可以搜索手册页。

$ whereis -m nano

nano: /usr/share/man/man1/nano.1.gz /usr/share/info/nano.info.gz

你也可以结合上面的选项来进行更广泛的搜索。例如,下面的命令可以搜索 nanofirefox 的二进制、手册页;而对于 bash,只搜索手册页。

$ whereis -bm nano firefox -m bash

nano: /usr/bin/nano /usr/share/nano /usr/share/man/man1/nano.1.gz /usr/share/info/nano.info.gz
firefox-m:
bash: /usr/bin/bash /usr/share/man/man1/bash.1.gz /usr/share/info/bash.info.gz

下面是选项的摘要:

选项描述
-b只搜索二进制文件。
-m只搜索手册页部分。
-s只搜索源码。
-u搜索不寻常的条目。如果一个文件没有所要求的每种类型的条目,就被称为不寻常。因此,whereis -m -u * 会查询当前目录中没有文档的那些文件。
-B改变或限制 whereis 搜索二进制文件的地方。
-M更改或限制 whereis 搜索手册的位置。
-S更改或以其他方式限制 whereis 搜索源码的位置。
-f终止上一个目录列表并指示文件名的开始,并且必须在使用任何 -B-M-S 选项时使用。

总结

我希望这篇文章能够帮助你理解 whereis 命令及其基本原理。你也可以阅读 whereis 手册页 来了解更多。如果你有任何问题,请告诉我。


via: https://www.debugpoint.com/whereis-command-linux/

作者:Arindam 选题:lkxed 译者:geekpi 校对:wxy

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

跟随这个演示,学习如何在 Rust 中使用文件系统模块。

知道如何读写文件对各种用途都很有用。在 Rust 中,这项任务是通过标准库中的文件系统模块(std::fs)完成的。在这篇文章中,我将向你介绍如何使用这个模块。

为了演示这项任务,我准备了一些示例代码,也可以在 GitHub 上找到。

准备工作

在使用 Rust 时,失败的函数会返回 Result 类型。尤其是文件系统模块会返回专门的类型 std::io::Result<T, Error>。有了这些知识,你可以从 main() 函数中返回相同的类型:

fn  main() ->  std::io::Result<()> {
/* ...code comes here... */

Rust 文件写入

在 Rust 中执行文件的 I/O 操作是相对容易的。写入文件可以简化为一行:

use  std::fs;
fs::write("favorite_websites.txt", b"opensource.com")?;
Ok(())

使用错误传播操作符 (?),错误信息被传递到调用函数中,随后可以处理错误。由于 main() 是调用栈中唯一的其他函数,如果写操作失败,错误信息将被传递到控制台输出。

fs::write 函数的语法是非常先进的。第一个参数是文件路径,它必须是 std::path::Path 类型。第二个参数是内容,它实际上是一个字节切片([u8])。Rust 将传递的参数转换为正确的类型。幸运的是,这些类型基本上是下面的例子中所处理的唯一类型。

使用文件描述符类型 std::fs::File 可以实现对写操作更简洁的访问:

let mut file = fs::File::create("favorite_websites.txt")?;
file.write_all(b"opensource.com\n")?;
Ok(())

由于文件类型实现了 Write 特性,所以可以使用相关的方法来写入文件。然而,create 方法可以覆盖一个已经存在的文件。

为了获得对文件描述符的更多控制,必须使用 std::fs::OpenOptions 类型。这提供了类似于其他语言中的打开模式:

let mut file = fs::OpenOptions::new()
                            .append(true)
                            .open("favorite_websites.txt")?;
                            
file.write_all(b"sourceforge.net\n")?;

Rust 文件读取

适用于写的东西也适用于读。读取也可以通过简单的一行代码来完成:

let websites = fs::read_to_string("favorite_websites.txt")?;

以上一行读取文件的内容并返回一个字符串。除了读取字符串,还有 std::fs::read 函数,如果文件包含二进制数据,该函数会将数据读成一个字节向量。

下一个例子显示了如何将文件的内容读入内存,随后逐行打印到控制台:

let file = fs::File::open("favorite_websites.txt")?;
let lines = io::BufReader::new(file).lines();

for line in lines {
    if let Ok(_line) = line {
        println!(">>> {}", _line);
    }
}

总结

如果你已经熟悉了其他编程语言,你可能已经注意到没有 close- 函数(或类似的)来释放文件句柄。在 Rust 中,当相关变量超出作用域,文件句柄就会被释放。为了定义关闭行为,可以在文件表示的周围应用作用域 ({ })。我建议你熟悉 ReadWrite 特性,因为你可以在许多其他类型中找到这个特性的实现。


via: https://opensource.com/article/23/1/read-write-files-rust

作者:Stephan Avenwedde 选题:lkxed 译者:geekpi 校对:wxy

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

这个 "猜数字 "游戏是学习新编程语言的一个很好的入门程序,因为它以一种相当直接的方式锻炼了几个常见的编程概念。

当你想 学习一种新的编程语言 时,把注意力放在编程语言的共同点上是很好的:

  • 变量
  • 表达式
  • 语句

这些概念是大多数编程语言的基础。一旦你理解了它们,你就可以开始琢磨其他的东西了。因为编程语言通常有相似之处,一旦你知道一种语言,你就可以通过了解其差异来学习另一种语言的基础知识。

学习新语言的一个好方法是用一个标准程序进行练习。这使你能够专注于语言,而不是程序的逻辑。在这个系列文章中,我使用了一个“猜数字”的程序,在这个程序中,计算机在 1 到 100 之间挑选一个数字,并要求你猜出来。程序循环进行,直到你猜对数字为止。

这个程序锻炼了编程语言中的几个概念:

  • 变量
  • 输入
  • 输出
  • 条件判断
  • 循环

这是一个学习新的编程语言的很好的实践实验。

安装 Ada

Ada 编程语言 是一种独特的、高度结构化的语言,有专门一群开发者使用它。Ada 的工具链是 GNU Ada 开发环境,多被称为 GNAT。

你可以使用你的发行版的包管理器在 Linux 上安装 GNAT。在 Fedora、CentOS 或类似系统上:

$ sudo dnf install gcc-gnat

在 Debian、Linux Mint 及衍生版上:

$ sudo apt install gnat

在 macOS 和 Windows 上,你可以从 Adacore 网站 下载一个安装程序(从下拉菜单中选择你的平台)。

在 Ada 中猜数字

创建一个名为 game.adb 的文件。

这个程序使用的两个内置 Ada 库:Text_IONumerics.Discrete_Random

with Ada.Text_IO;
use Ada.Text_IO;
with Ada.Numerics.Discrete_Random;

过程头

过程 procedure 的名称必须与文件的名称一致。第一部分是定义变量。

注意,discrete_random 是专门针对特定范围的。在这里,允许数字范围:

procedure Game is
   type randRange is range 1..100;
   package Rand_Int is new ada.numerics.discrete_random(randRange);
   use Rand_Int;
   gen : Generator;
   num : randRange;
   incorrect: Boolean := True;
   guess: randRange;

过程逻辑

该逻辑从 reset(gen) 开始。这将初始化随机数发生器,确保每次运行程序时,用 random(gen) 初始化的数字将是不同的。

下一步是运行循环:

  • 输出猜测的指令
  • 读取该行
  • 将其转换为 randRange
  • 将其与数字进行核对

如果数字匹配,incorrect 被设置为 False,导致循环的下一次迭代退出。

最后,程序在退出前会打印出对猜测正确性的确认:

begin
   reset(gen);
   num := random(gen);
   while incorrect loop
       Put_Line ("Guess a number between 1 and 100");
       declare
          guess_str : String := Get_Line (Current_Input);
       begin
          guess := randRange'Value (guess_str);
       end;
       if guess < num then
           Put_line("Too low");
       elsif guess > num then
           Put_line("Too high");
       else
           incorrect := False;
       end if;
   end loop;
   Put_line("That's right");
end Game;

编译程序

编译 Ada 程序的最简单方法是使用 gnatmake

$ gnatmake game.adb
aarch64-linux-gnu-gcc-10 -c game.adb
aarch64-linux-gnu-gnatbind-10 -x game.ali
aarch64-linux-gnu-gnatlink-10 game.ali

这将生成一个名为 game 的二进制文件。

运行程序

程序的每次运行都会有一些不同。这是一个例子:

$ ./game 
Guess a number between 1 and 100
50
Too low
Guess a number between 1 and 100
75
Too low
Guess a number between 1 and 100
82
Too low
Guess a number between 1 and 100
90
Too high
Guess a number between 1 and 100
87
Too low
Guess a number between 1 and 100
88
That's right

学习 Ada

这个“猜数字”游戏是学习新的编程语言的一个很好的入门程序,因为它以一种相当直接的方式锻炼了几个常见的编程概念。通过在不同的编程语言中实现这个简单的游戏,你可以展示这些语言的一些核心概念,并比较它们的细节。

你有喜欢的编程语言吗?你会如何用它来写“猜数字”的游戏?请关注本系列文章,看看你可能感兴趣的其他编程语言的例子吧!


via: https://opensource.com/article/23/1/learn-ada-simple-game

作者:Moshe Zadka 选题:lkxed 译者:geekpi 校对:wxy

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

下面是一份关于理解 Linux 和 BSD 中的 w 命令的初学者指南,并附有几个例子。

这篇文章是 Linux 命令学习系列的一部分。

w 命令

w 命令是 Linux 中的一个工具,它显示当前登录到系统中的用户及其进程的信息。它显示谁已登录,以及他们正在做什么活动。这意味着它可以显示他们在系统中运行什么进程。

语法

下面是 w 命令的基本语法:

w [options] [username]

w 命令接受一个可选的选项列表,然后是一个可选的用户名。如果指定了用户名,w 将只显示该用户拥有的进程信息。

w 命令的例子及其用法

下面是一些使用 w 命令的例子。

当你只用 w 运行它时,它显示以下输出:

$ w
 21:45:07 up 1 day, 12:48,  1 user,  load average: 1.05, 0.85, 0.56
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
debugpoi tty2       Thu08   36:48m  0.03s  0.03s /usr/libexec/gnome-session-binary

Linux 中 w 命令的基本输出

解释:USER 列给出了用户名,然后是终端号、登录日期时间、空闲时间、CPU 使用率,以及用户正在执行的进程。

  • USER - 在你的 Linux 或 BSD 系统中登录的用户名称。
  • TTY - 当前会话的终端标识符号。
  • FROM - 用户的主机名或 IP 地址。
  • LOGIN@ - 用户登录的时间。它有时会根据你的系统设置显示日期。
  • IDLE - 用户与终端交互后的空闲时间。
  • JCPU - 该会话的所有用户进程使用的 CPU 时间。
  • PCPU - 该用户的进程(在 WHAT 字段中提到)使用的时间。
  • WHAT - 当前带参数的进程。

下面是 w 命令的另一个例子,有两个用户在虚拟机环境中登录。正如你所看到的,显示了两个用户名与当前运行的带有进程参数的独立进程。

演示多用户环境的 w 命令输出

让我们看一下这个命令的一些选项。

要停止显示标题,使用 -h 选项。它与 --no-header 开关相同。

$ w -h

-f 选项可以在输出中切换 FROM 字段的可见性。

$ w -f

使用 -s 选项打印一个简短的输出,不包括 JCPUPCPULOGIN@ 信息。

$ w -s

要显示一个特定用户(例如,debugpoint)拥有的所有进程的列表:

$ w debugpoint

结束语

我希望这篇文章能帮助你了解 w 命令及其基本原理。你也可以阅读 w 手册页 来了解更多。如果你有任何问题,请告诉我。


via: https://www.debugpoint.com/w-command-linux-examples/

作者:Arindam 选题:lkxed 译者:geekpi 校对:wxy

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