From d77fce2febc205ca95cee5b2c0d690659337e87e Mon Sep 17 00:00:00 2001 From: "qfzy1233@163.com" Date: Thu, 21 May 2020 16:59:45 +0800 Subject: [PATCH 01/10] Update 20200428 Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md --- ...Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20200428 Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md b/sources/tech/20200428 Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md index 73e60dc17a..1f803fc2ca 100644 --- a/sources/tech/20200428 Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md +++ b/sources/tech/20200428 Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md @@ -7,7 +7,7 @@ [#]: via: (https://itsfoss.com/lubuntu-20-04-review/) [#]: author: (Dimitrios Savvopoulos https://itsfoss.com/author/dimitrios/) -Lubuntu 20.04 Review: Lightweight, Minimalistic, Polished +Lubuntu 20.04 简述: 轻量, 简约, 文雅 ====== _**Lubuntu 20.04 LTS is significantly different than its previous LTS version. It is aiming to give you a more polished experience rather than just focusing on older computer. Read more about it as I review Lubuntu 20.04.**_ From 1d3ea1677e89fe5cce98f42db79b9341704fa20e Mon Sep 17 00:00:00 2001 From: qfzy1233 Date: Thu, 21 May 2020 21:09:25 +0800 Subject: [PATCH 02/10] Update 20200428 Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md --- ...ew- Lightweight, Minimalistic, Polished.md | 128 +++++++++--------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/sources/tech/20200428 Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md b/sources/tech/20200428 Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md index 1f803fc2ca..a303a3853f 100644 --- a/sources/tech/20200428 Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md +++ b/sources/tech/20200428 Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md @@ -10,118 +10,118 @@ Lubuntu 20.04 简述: 轻量, 简约, 文雅 ====== -_**Lubuntu 20.04 LTS is significantly different than its previous LTS version. It is aiming to give you a more polished experience rather than just focusing on older computer. Read more about it as I review Lubuntu 20.04.**_ +_**Lubuntu20.04 LTS 与之前的 LTS 版本有很大的不同。它的旨在给你一个更完善的体验,而不仅仅是关注旧的电脑。阅读更多关于Lubuntu20.04的内容。**_ -### Lubuntu 20.04 Review: First LTS release with LXQt +### Lubuntu 20.04 一览: 第一个基于 LXQt 的长期支持版 -I have been using Lubuntu 20.04 from a few days before the release. I usually dwell in Arch world with Manjaro and Cinnamon desktop so using Lubuntu was a pleasant change for me. +我在 Lubuntu20.04 发行前几天就已经开始使用它了。我通常使用 Arch 阵营中 Manjaro 和 Cinnamon desktop,所以使用 Lubuntu 对我来说是一个愉快的改变。 -Here’s what I have noticed and felt about Lubuntu 20.04. +以下是我在使用 Lubuntu 20.04.时的一些感受和注记。 -#### Bye bye LXDE, Hello LXQt! +#### 再见LXDE,你好LXQt! -For a long time, [Lubuntu][1] relied on [LXDE][2] to provide a lightweight Linux experience. It now uses LXQt desktop environment. +很长一段时间以来,[Lubuntu][1]都依赖于[LXDE][2]来提供轻量级的Linux体验。现在它使用LXQt桌面环境。 -[LXDE][3] is based on GTK (the libraries used by GNOME) and more specifically on GTK+ 2 which is dated in 2020. Dissatisfied with GTK+ 3, LXDE developer Hong Jen Yee decided to port the entire desktop to Qt (the libraries used by KDE). LXDE, the Qt port of it, and the [Razor-qt][4] project were combined to form [LXQt][5]. Although today, LXDE and LXQt coexist as separate projects. +[LXDE][3]是基于 GTK (GNOME使用的库),更具体地说是基于2020年的 GTK+ 2。LXDE 开发人员 Hong Jen Yee 不满意 GTK+ 3,决定将整个桌面移植到Qt (KDE使用的库)。LXDE、it的Qt端口和[Razor-qt][4]项目合并形成[LXQt][5]。所以现在,LXDE和LXQt作为单独的项目共存。 -Since LXDE developer itself is focusing on LXQt, it makes no sense for Lubuntu to stick with a desktop environment that had its last stable release more than three years ago. +由于 LXDE 开发者本身关注于 LXQt ,所以 Lubuntu 死磕桌面环境是没有意义的,因为上一次稳定发行版已经是三年多以前的事情了。 -Lubuntu 18.04 is the last version of with [LXDE][3]. Fortunately it’s a long term support edition. It will be supported officially by Lubuntu team till 2021. +Lubuntu 18.04是[LXDE][3]的最后一个版本。幸运的是,这是一个长期支持版本。Lubuntu团队将提供支持直到2021年。 ![][6] -#### Not exclusively for older machines +#### 不仅适于老机器 -As the definition of “older machine” has changed in 2020 Lubuntu 18.04 is the last 32bit version. Nowadays even a 10 year old machine comes with at least 2 gigabytes of ram and a dual-core 64bit processor. +由于“老机器”的定义在2020年发生了变化,Lubuntu 18.04是最后一个32位版本。现在,即使是一台10年前的老机器也至少有2g的内存和一个双核64位处理器。 -As per that, [Lubuntu Team will no longer provide minimum system requirements and will no longer primarily focus on older hardware][7]. Although LXQt is still a lightweight, classic yet polished and feature rich desktop environment. +因此,Lubuntu 团队将不再提供最低的系统需求,也不再主要关注旧的硬件。尽管 LXQt 仍然是一个轻量级的、经典的、完善的、功能丰富的桌面环境。 -The First Lubuntu release with LXQt was 18.10, giving the developers three standard releases to perfect the LXQt desktop before the Lubuntu 20.04 LTS release, which is a good development strategy. +Lubuntu 的第一个 LXQt 发行版是18.10,在Lubuntu20.04 LTS 发行版之前,开发人员经历了三个标准发行版来完善 LXQt 桌面,这是一个很好的开发策略。 -#### Not the regular Ubiquity, Lubuntu 20.04 uses Calamares installer +#### 与以往不同的是 Lubuntu 20.04 使用 Calamares 安装器 -![Lubuntu 20.04 Calamares Installer][8] +![Lubuntu 20.04 Calamares 安装器][8] -A fresh installation begins with the new [Calamares][9] installer, in place of the Ubiquity installer that other [official Ubuntu flavors][10] use. +在新版本中全新的[Calamares][9]安装器,取代了其他[Ubuntu官方版本][10]使用的普遍安装程序。 -The whole process is done in approximately 10 minutes, slightly faster than the previous Lubuntu releases. +整个安装过程在大约10分钟内完成,比之前Lubuntu的版本稍微快一些。 -As the .iso comes with the essential applications pre-installed you can get your system fully configured pretty fast too. +由于镜像文件附带了预先安装的基本应用程序,你也可以很快地完全配置您的系统。 -#### No upgrade from Lubuntu 18.04 to Lubuntu 20.04 +#### 不要直接从 Lubuntu 18.04 升级到 Lubuntu 20.04 -Normally, you can [upgrade Ubuntu from one LTS to another LTS release][11]. But Lubuntu team advises not to upgrade from Lubuntu 18.04 to 20.04. They recommend a fresh install and rightly so. +通常,你可以[将Ubuntu从一个LTS版本升级到另一个LTS版本][11]。但是 Lubuntu 团队建议不要从 Lubuntu18.04升级到20.04。他们建议重新安装,这才是正确的。 -Lubuntu 18.04 used LXDE desktop while 20.04 uses LXQt. Due to the extensive changes in the desktop environments, upgrading to 20.04 from 18.04 will result in a broken system. +Lubuntu 18.04使用LXDE桌面,20.04使用LXQt。由于桌面环境的巨大变化,从18.04升级到20.04将导致系统崩溃。 -#### **More KDE and Qt applications** +#### **更多的KDE和Qt应用程序** ![][12] -Here are some of the applications that are available by default in this new release and as I can see, not all of them are lightweight and most of them are Qt-based. +下面是在这个新版本中默认可用的一些应用程序,正如我们所看到的,并非所有应用程序都是轻量级的,而且大多数应用程序都是基于qt的。 -Even the software center used is KDE’s Discover instead of Ubuntu’s GNOME software center. +甚至使用的软件中心也是 KDE 的 Discover,而不是 Ubuntu 的 GNOME 软件中心。 - * Ark – archive manager - * Bluedevil – bluetooth connector - * Discover Software Center – package management system - * FeatherPad – text editor - * FireFox – web browser - * K3b – CD/DVD burner - * Kcalc – calculator - * KDE partition manager – partition manager - * LibreOffice – Office suite (Qt interface version) - * LXimage-Qt – image viewer and screenshot tool - * Muon – package manager + * Ark – 压缩文件管理器 + * Bluedevil – 蓝牙连接管理 + * Discover Software Center – 包管理系统 + * FeatherPad – 文本编辑器 + * FireFox – 浏览器 + * K3b – CD/DVD 刻录器 + * Kcalc – 计算器 + * KDE partition manager – 分区管理工具 + * LibreOffice – 办公套件 (Qt 接口版本) + * LXimage-Qt – 图片查看及截图制作 + * Muon – 包管理器 - * Noblenote – note taker - * PCManFM-Qt – File manager - * Qlipper – clipboard manager - * qPDFview – PDF viewer - * PulseAudio – audio controller - * Qtransmission – bittorrent client (Qt interface version) - * Quassel – IRC client - * ScreenGrab – Screenshot creator - * Skanlite – scanning - * Startup Disk Creator – USB boot disk maker - * Trojita – email client - * VLC – media player + * Noblenote – 笔记工具 + * PCManFM-Qt – 文件管理器 + * Qlipper – 剪贴板管理工具 + * qPDFview – PDF 阅读器 + * PulseAudio – 音频控制器 + * Qtransmission – BT下载工具 (Qt 接口版本) + * Quassel – 实时聊天客户端 + * ScreenGrab – 截屏制作工具 + * Skanlite – 扫描工具 + * Startup Disk Creator – USB 启动盘制作工具 + * Trojita – 邮件客户端 + * VLC – 媒体播放器 * [MPV video player][13] -#### Testing Lubuntu 20.04 LTS +#### 测试 Lubuntu 20.04 LTS -Boot times on the LXQt version of Lubuntu are under a minute, booting from an SSD though. +LXQt 版Lubuntu的启动时间不到一分钟,不过是从SSD启动的。 -LXQt currently requires slightly more memory than the Gtk+ v2-based LXDE, but the alternative Gtk+ v3 toolkit would also have required more memory. +LXQt 目前需要的内存比基于 Gtk+ v2 的LXDE稍微多一点,但是另一种 Gtk+ v3 工具包也需要更多的内存。 -After a reboot the system runs approximately at a very low of 340 MB for the modern standards, 100 MB more than LXDE. +在重新启动之后,系统以非常低的内存占用情况运行,大约只有340 MB(按照现代标准),比LXDE多100 MB。 -![htop running on Lubuntu 20.04][14] +![htop 在 Lubuntu 20.04 上运行][14] -LXQt is not only for users with an older hardware but also for those who are seeking a simple and classic experience at their new machine. +LXQt 不仅适用于使用旧硬件的用户,也适用于那些希望在新机器上获得简单而经典体验的用户。 -The desktop layout looks similar to KDE’s Plasma desktop, don’t you think? +桌面布局看起来类似于 KDE 的 Plasma 桌面,你不这样认为吗? -![Lubuntu 20.04 Desktop][15] +![Lubuntu 20.04 桌面环境][15] -There’s an application menu in the lower-left corner, a taskbar for pinned and active applications, and a system tray in the lower-right corner. +在左下角有一个应用程序菜单,一个用于固定和活动应用程序的任务栏,右下角有一个系统托盘。 -Lubuntu in its LXQt version can be easily customized and everything is in the menu under preferences, with most key items under LXQt Settings. +Lubuntu 的 LXQt 版本可以很容易的定制,所有的东西都在菜单的首选项下,大部分的关键项目都在 LXQt 设置下。 -It is worth-mentioning that LXQt uses the popular [Openbox window manager][16] by default. +值得一提的是, LXQt 在默认情况下使用流行的[ Openbox 窗口管理器][16]。 -Like the last three releases, 20.04 LTS comes with a default dark theme Lubuntu Arc, but it is quick and easy to change it if it doesn’t suit your taste. +与前三个发行版一样,20.04 LTS 附带了一个默认的黑暗主题 Lubuntu ,但是如果不适合你的口味,可以快速、轻松地更改它。 -In daily use, Lubuntu 20.04 has proven to me completely trouble-free as every Ubuntu flavour in fact. +就日常使用而言,Lubuntu20.04 已经向我证明了它是完全没有问题的,因为它是 Ubuntu 的一个版本。 -#### Conclusion +#### 结论 -Lubuntu team has successfully made the transition to a modern, still lightweight and minimal desktop environment. LXDE looks like abandoned and it is a good thing to move away to an active project. +Lubuntu团队已经成功地过渡到一个现代的、依然轻量级的、最小的桌面环境。LXDE看起来被遗弃了,迁移到一个活跃的项目也是一件好事。 -I hope that Lubuntu 20.04 makes you as much enthusiastic as I am, and if so don’t hesitate to let me know at the comments below. Stay tuned! +我希望Lubuntu 20.04能够像我一样让你充满热情,如果是这样,请在下面的评论中告诉我。请继续关注! -------------------------------------------------------------------------------- @@ -129,7 +129,7 @@ via: https://itsfoss.com/lubuntu-20-04-review/ 作者:[Dimitrios Savvopoulos][a] 选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) +译者:[qfzy1233](https://github.com/qfzy1233) 校对:[校对者ID](https://github.com/校对者ID) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From a800366dee5e9a4ccf433ee486934f309410338c Mon Sep 17 00:00:00 2001 From: qfzy1233 Date: Thu, 21 May 2020 21:12:13 +0800 Subject: [PATCH 03/10] Rename sources/tech/20200428 Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md to translated/tech/20200428 Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md --- ...8 Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {sources => translated}/tech/20200428 Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md (100%) diff --git a/sources/tech/20200428 Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md b/translated/tech/20200428 Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md similarity index 100% rename from sources/tech/20200428 Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md rename to translated/tech/20200428 Lubuntu 20.04 Review- Lightweight, Minimalistic, Polished.md From 5296c06b50143be1aecf58c0fe4e4f47ebb73bde Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Thu, 21 May 2020 21:32:36 +0800 Subject: [PATCH 04/10] APL --- .../tech/20190510 Learn to change history with git rebase.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/sources/tech/20190510 Learn to change history with git rebase.md b/sources/tech/20190510 Learn to change history with git rebase.md index 4d46fef81f..7e2f6c943e 100644 --- a/sources/tech/20190510 Learn to change history with git rebase.md +++ b/sources/tech/20190510 Learn to change history with git rebase.md @@ -1,8 +1,5 @@ -Translating by Scoutydren.... - - [#]: collector: (lujun9972) -[#]: translator: (Scoutydren) +[#]: translator: (wxy) [#]: reviewer: ( ) [#]: publisher: ( ) [#]: url: ( ) From 01c8c99e9a86603429dc0a1c2353eae3ee70f39d Mon Sep 17 00:00:00 2001 From: geekpi Date: Fri, 22 May 2020 08:41:57 +0800 Subject: [PATCH 05/10] translated --- ... MySQL-MariaDB Database Server on Linux.md | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) rename {sources => translated}/tech/20200506 Three Methods to Check Uptime of MySQL-MariaDB Database Server on Linux.md (66%) diff --git a/sources/tech/20200506 Three Methods to Check Uptime of MySQL-MariaDB Database Server on Linux.md b/translated/tech/20200506 Three Methods to Check Uptime of MySQL-MariaDB Database Server on Linux.md similarity index 66% rename from sources/tech/20200506 Three Methods to Check Uptime of MySQL-MariaDB Database Server on Linux.md rename to translated/tech/20200506 Three Methods to Check Uptime of MySQL-MariaDB Database Server on Linux.md index a2070192d0..247a2806c4 100644 --- a/sources/tech/20200506 Three Methods to Check Uptime of MySQL-MariaDB Database Server on Linux.md +++ b/translated/tech/20200506 Three Methods to Check Uptime of MySQL-MariaDB Database Server on Linux.md @@ -7,26 +7,26 @@ [#]: via: (https://www.2daygeek.com/check-mysql-mariadb-database-server-uptime-linux/) [#]: author: (Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/) -Three Methods to Check Uptime of MySQL/MariaDB Database Server on Linux +在 Linux 上检查 MySQL/MariaDB 数据库正常运行时间的三种方法 ====== -We all know the purpose of the uptime command in Linux. +我们都知道在 Linux 中使用 uptime 命令的目的。 -This is used to check the **[uptime of the Linux system][1]** and how long the system runs without restarting. +它用于检查 **[Linux 系统的正常运行时间][1]**以及系统未重启运行的时间。 -The Linux admin job is to keep the system up and running. +Linux 管理员的工作是保持系统正常运行。 -If you want to check how long other services like **[Apache][2]**, MySQL, MariaDB, sftp, etc., are running on Linux, how do you do that? +如果要检查 Linux 上的其他服务(例如 **[Apache][2]**、MySQL、MariaDB、sftp 等)运行了多长时间,该怎么做? -Each service has their own command to check the uptime of service. +每个服务都有自己的命令来检查服务的正常运行时间。 -But you can also use other commands for this purpose. +但是你也可以为此使用其他命令。 -### Method-1: How to Check the Uptime of a MySQL/MariaDB Database Server on Linux Using the ps Command +### 方法 1:如何使用 ps 命令在 Linux 上检查 MySQL/MariaDB 数据库的正常运行时间 -The **[ps command][3]** stands for process status. This is one of the most basic commands that shows the system running processes with details. +**[ps命令][3]**代表进程状态。这是最基本的命令之一,它显示了系统正在运行的进程的详细信息。 -To do so, you first need to find the PID of **[MySQL][4]**/MariaDB using the **[pidof command][5]**. +为此,你首先需要使用 **[pidof 命令][5]查找 **[MySQL][4]**/MariaDB的 PID。 ``` # pidof mysqld | cut -d" " -f1 @@ -34,9 +34,9 @@ To do so, you first need to find the PID of **[MySQL][4]**/MariaDB using the **[ 2412 ``` -Once you have the MySQL/[**MariaDB**][6] PID, use the “etime” option with the ps command and get the uptime. +获取 MySQL/[**MariaDB**][6] 的 PID 后,请在 ps 命令中使用 “etime” 选项获得正常运行时间。 - * **etime:** elapsed time since the process was started, in the form of [[DD-]hh:]mm:ss. + * **etime:**自进程启动以来经过的时间,形式为 [[DD-]hh:]mm:ss。 @@ -47,7 +47,7 @@ Once you have the MySQL/[**MariaDB**][6] PID, use the “etime” option with th 2-08:49:30 ``` -Alternatively, use the “lstart” option with the ps command to get the uptime of a given PID. +或者,在 ps 命令中使用 “lstart” 选项来获取指定 PID 的正常运行时间。 ``` # ps -p 2412 -o lstart @@ -56,17 +56,17 @@ Alternatively, use the “lstart” option with the ps command to get the uptime Sat May 2 03:02:15 2020 ``` -The MySQL/MariaDB process has been running for 2 days, 03 hours, 02 minutes and 15 seconds. +MySQL/MariaDB 进程已经运行了 2 天 03 小时 02 分 15 秒。 -### Method-2: How to Check the Uptime of a MySQL/MariaDB Database Server on Linux Using the Systemctl Command +### 方法 2:如何使用 Systemctl 命令在 Linux 上检查 MySQL/MariaDB 数据库的正常运行时间 -The **[systemctl command][7]** is used to control the systemd system and service manager. +**[systemctl 命令][7]** 用于控制 systemd 系统和服务管理器。 -systemd is a new init system and system manager, that was adopted by most of Linux distributions now over the traditional SysVinit manager. +systemd 是新的 init 系统和系统管理器,现在大多数 Linux 发行版都淘汰了传统的 SysVinit 管理器而采用了systemd。 ``` # systemctl status mariadb -or +或者 # systemctl status mysql ● mariadb.service - MariaDB 10.1.44 database server @@ -95,13 +95,13 @@ Warning: Journal has been rotated since unit was started. Log output is incomple Hint: Some lines were ellipsized, use -l to show in full. ``` -### Method-3: How to Check the Uptime of a MySQL/MariaDB Database Server on Linux Using the MySQLAdmin Command +### 方法 3:如何使用 MySQLAdmin 命令在 Linux 上检查 MySQL/MariaDB 数据库的正常运行时间 -**[MySQLAdmin][8]** is a command-line utility for MySQL Server that is installed when installing the MySQL package. +**[MySQLAdmin][8]** 是安装 MySQL 软件包时安装的 MySQL 服务器命令行程序。 -The MySQLAdmin client allows you to perform some basic administrative functions on the MySQL server. +MySQLAdmin 客户端允许你在 MySQL 服务器上执行一些基本的管理功能。 -It is used to create a database, drop a database, set a root password, change the root password, check MySQL status, verify MySQL functionality, monitor mysql processes, and verify the configuration of the server. +它用于创建数据库、删除数据库、设置 root 密码、更改 root 密码、检查 MySQL 状态、验证 MySQL 功能、监视 mysql 进程以及验证服务器的配置。 ``` # mysqladmin -u root -pPassword version @@ -126,7 +126,7 @@ via: https://www.2daygeek.com/check-mysql-mariadb-database-server-uptime-linux/ 作者:[Magesh Maruthamuthu][a] 选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) +译者:[geekpi](https://github.com/geekpi) 校对:[校对者ID](https://github.com/校对者ID) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From 857b4a97909200aba0d174447499fbdad66806ad Mon Sep 17 00:00:00 2001 From: geekpi Date: Fri, 22 May 2020 09:14:28 +0800 Subject: [PATCH 06/10] translating --- ...thon templating languages you should (probably) never use.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20200401 3 Python templating languages you should (probably) never use.md b/sources/tech/20200401 3 Python templating languages you should (probably) never use.md index e23b443b0d..7d73216ea5 100644 --- a/sources/tech/20200401 3 Python templating languages you should (probably) never use.md +++ b/sources/tech/20200401 3 Python templating languages you should (probably) never use.md @@ -1,5 +1,5 @@ [#]: collector: (lujun9972) -[#]: translator: ( ) +[#]: translator: (geekpi) [#]: reviewer: ( ) [#]: publisher: ( ) [#]: url: ( ) From 34ea82a55a2721f03e5812add565ff1ad0d58fc8 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 22 May 2020 10:17:58 +0800 Subject: [PATCH 07/10] PRF @lxbwolf --- ... Go binaries by prohibiting comparisons.md | 62 +++++++++---------- 1 file changed, 30 insertions(+), 32 deletions(-) diff --git a/translated/tech/20200509 Ensmallening Go binaries by prohibiting comparisons.md b/translated/tech/20200509 Ensmallening Go binaries by prohibiting comparisons.md index ba2e321bb3..b9fabc8f27 100644 --- a/translated/tech/20200509 Ensmallening Go binaries by prohibiting comparisons.md +++ b/translated/tech/20200509 Ensmallening Go binaries by prohibiting comparisons.md @@ -1,6 +1,6 @@ [#]: collector: (lujun9972) [#]: translator: (lxbwolf) -[#]: reviewer: ( ) +[#]: reviewer: (wxy) [#]: publisher: ( ) [#]: url: ( ) [#]: subject: (Ensmallening Go binaries by prohibiting comparisons) @@ -10,25 +10,27 @@ 通过禁止比较让 Go 二进制文件变小 ====== -大家常规的认知是,Go 程序中声明的类型越多,生成的二进制文件就越大。这个符合直觉,毕竟如果你写的代码不去操作定义的类型,那么定义一堆类型就没有意义了。然而,链接器的部分工作就是检测程序没有引用的函数,比如仅仅有某个功能的子功能使用的库中的某些函数,然后把他们从最后的编译产出中删除。常言道,“类型越多,二进制文件越大“,对于多数 Go 程序还是正确的。 +![](https://img.linux.net.cn/data/attachment/album/202005/22/101617lcha7vvqzhh7d565.jpg) -本文中我会深入讲解在 Go 程序的上下文中相等的意义,以及为什么[像这样][1]的修改会对 Go 程序的大小有重大的影响。 +大家常规的认知是,Go 程序中声明的类型越多,生成的二进制文件就越大。这个符合直觉,毕竟如果你写的代码不去操作定义的类型,那么定义一堆类型就没有意义了。然而,链接器的部分工作就是检测没有被程序引用的函数(比如说它们是一个库的一部分,其中只有一个子集的功能被使用),然后把它们从最后的编译产出中删除。常言道,“类型越多,二进制文件越大”,对于多数 Go 程序还是正确的。 + +本文中我会深入讲解在 Go 程序的上下文中“相等”的意义,以及为什么[像这样][1]的修改会对 Go 程序的大小有重大的影响。 ### 定义两个值相等 -Go 的语法定义了赋值和相等的概念。赋值是把一个值赋给一个标识符的行为。并不是所有声明的标识符都可以被赋值,如常量和函数就不可以。相等是通过检查标识符的内容是否相等来比较两个标识符的行为。 +Go 的语法定义了“赋值”和“相等”的概念。赋值是把一个值赋给一个标识符的行为。并不是所有声明的标识符都可以被赋值,如常量和函数就不可以。相等是通过检查标识符的内容是否相等来比较两个标识符的行为。 作为强类型语言,“相同”的概念从根源上被植入标识符的类型中。两个标识符只有是相同类型的前提下,才有可能相同。除此之外,值的类型定义了如何比较该类型的两个值。 -例如,整型是用算数方法进行比较的。对于指针类型,是否相等是指他们指向的地址是否相同。map 和 channel 等引用类型,跟指针类似,如果它们有相同的地址,那么就认为它们是相同的。 +例如,整型是用算数方法进行比较的。对于指针类型,是否相等是指它们指向的地址是否相同。映射和通道等引用类型,跟指针类似,如果它们指向相同的地址,那么就认为它们是相同的。 -上面都是按位比较相等的例子,即值占用的位模式内存是相同的,那么这些值就相等。这个就是 memcmp,全称为 memory comparison,相等是通过比较两个内存区域的内容来定义的。 +上面都是按位比较相等的例子,即值占用的内存的位模式是相同的,那么这些值就相等。这就是所谓的 memcmp,即内存比较,相等是通过比较两个内存区域的内容来定义的。 -记住这个思路,我会很快回来的。 +记住这个思路,我过会儿再来谈。 ### 结构体相等 -除了整型、浮点型和指针等标量类型,还有复合类型;结构体。所有的结构体以程序中的顺序被排列在内存中。因此下面这个声明 +除了整型、浮点型和指针等标量类型,还有复合类型:结构体。所有的结构体以程序中的顺序被排列在内存中。因此下面这个声明: ``` type S struct { @@ -41,7 +43,7 @@ type S struct { ``` a := S{1, 2, 3, 4} b := S{1, 2, 3, 4} -fmt.Println(a == b) // prints true +fmt.Println(a == b) // 输出 true ``` 编译器在底层使用 memcmp 来比较 `a` 的 32 个字节和 `b` 的 32 个字节。 @@ -61,38 +63,38 @@ type S struct { func main() a := S{1, 2, 3, 4} b := S{1, 2, 3, 4} - fmt.Println(a == b) // prints true + fmt.Println(a == b) // 输出 true } ``` -编译代码后,这个比较表达式的结果还是 true,但是编译器在底层并不能仅依赖比较 `a` 和 `b` 的位模式,因为结构体有*填充*。 +编译代码后,这个比较表达式的结果还是 `true`,但是编译器在底层并不能仅依赖比较 `a` 和 `b` 的位模式,因为结构体有*填充*。 -Go 要求结构体的所有字段都对齐。2 字节的值必须从偶数地址开始,4 字节的值必须从 4 的倍数地址开始,以此类推[1][2]。编译器根据字段的类型和底层平台加入了填充来确保字段都*对齐*。在填充之后,编译器实际上看到的是[2][3]: +Go 要求结构体的所有字段都对齐。2 字节的值必须从偶数地址开始,4 字节的值必须从 4 的倍数地址开始,以此类推 [^1]。编译器根据字段的类型和底层平台加入了填充来确保字段都*对齐*。在填充之后,编译器实际上看到的是 [^2]: ``` type S struct { a byte - _ [7]byte // padding + _ [7]byte // 填充 b uint64 c int16 - _ [2]int16 // padding + _ [2]int16 // 填充 d uint32 } ``` 填充的存在保证了字段正确对齐,而填充确实占用了内存空间,但是填充字节的内容是未知的。你可能会认为在 Go 中 填充字节都是 0,但实际上并不是 — 填充字节的内容是未定义的。由于它们并不是被定义为某个确定的值,因此按位比较会因为分布在 `s` 的 24 字节中的 9 个填充字节不一样而返回错误结果。 -Go 通过生成相等函数来解决这个问题。在这个例子中,`s` 的相等函数只比较函数中的字段略过填充部分,这样就能正确比较类型 `s` 的两个值。 +Go 通过生成所谓的相等函数来解决这个问题。在这个例子中,`s` 的相等函数只比较函数中的字段略过填充部分,这样就能正确比较类型 `s` 的两个值。 ### 类型算法 -嚄,需要做很多准备工作才能解释原因,对于 Go 程序中定义的每种类型,编译器都会生成几个支持它的函数,编译器内部把它们识别为类型的算法。如果类型是一个 map 的 key,那么除相等函数外,编译器还会生成一个哈希函数。为了维持稳定,哈希函数在计算结果时也会像相等函数一样考虑诸如填充等因素。 +呵,这是个很大的设置,说明了为什么,对于 Go 程序中定义的每种类型,编译器都会生成几个支持函数,编译器内部把它们称作类型的算法。如果类型是一个映射的键,那么除相等函数外,编译器还会生成一个哈希函数。为了维持稳定,哈希函数在计算结果时也会像相等函数一样考虑诸如填充等因素。 -凭直觉判断编译器什么时候生成这些函数实际上很难,有时并不明显,(因为)这超出了你的预期,而且链接器也很难消除没有被使用的类型,因为反射往往导致链接器在裁剪类型时变得更保守。 +凭直觉判断编译器什么时候生成这些函数实际上很难,有时并不明显,(因为)这超出了你的预期,而且链接器也很难消除没有被使用的函数,因为反射往往导致链接器在裁剪类型时变得更保守。 ### 通过禁止比较来减小二进制文件的大小 -现在,我们能解释 Brad 的修改了。向类型添加一个不可比较的字段[3][4],结构体也随之变成不可比较的,从而强制编译器不再生成相等和哈希算法、规避了链接器对那些类型的消除、在实际应用中减小了生成的二进制文件的大小。作为这项技术的一个例子,下面的程序: +现在,我们来解释一下 Brad 的修改。向类型添加一个不可比较的字段 [^3],结构体也随之变成不可比较的,从而强制编译器不再生成相等函数和哈希函数,规避了链接器对那些类型的消除,在实际应用中减小了生成的二进制文件的大小。作为这项技术的一个例子,下面的程序: ``` package main @@ -101,7 +103,7 @@ import "fmt" func main() { type t struct { - // _ [0][]byte uncomment to prevent comparison + // _ [0][]byte // 取消注释以阻止比较 a byte b uint16 c int32 @@ -112,28 +114,24 @@ func main() { } ``` -用 Go 1.14.2(darwin/amd64)编译,大小从 2174088 降到了 2174056,节省了 32 字节。单独看节省的这 32 字节似乎微不足道,但是考虑到你的程序中每个类型及其传递闭包都会生成相等和哈希函数,还有他们的依赖,这些函数的大小随类型大小和复杂度的不同而不同,禁止它们会大大减小最终的二进制文件的大小,效果比之前使用 `-ldflags="-s -w"` 还要好。 +用 Go 1.14.2(darwin/amd64)编译,大小从 2174088 降到了 2174056,节省了 32 字节。单独看节省的这 32 字节似乎微不足道,但是考虑到你的程序中每个类型及其传递闭包都会生成相等和哈希函数,还有它们的依赖,这些函数的大小随类型大小和复杂度的不同而不同,禁止它们会大大减小最终的二进制文件的大小,效果比之前使用 `-ldflags="-s -w"` 还要好。 -最后总结一下,如果你不想把类型定义为可比较的,像这样的入侵可以在源码层级强制实现,而且会使生成的二进制文件变小。 +最后总结一下,如果你不想把类型定义为可比较的,可以在源码层级强制实现像这样的奇技淫巧,会使生成的二进制文件变小。 * * * -附录:在 Brad 的推动下,[Cherry Zhang][5] 和 [Keith Randall][6] 已经在 Go 1.15 做了大量的改进来修复最恶名昭彰的消除无用相等和哈希函数失败(虽然我猜想这也是为了避免这类 CL 的扩散)。 - - 1. 在 32 位平台上 `int64` 和 `unit64` 的值可能不是按 8 字节对齐的,因为平台原生的是以 4 字节对齐的。查看 [issue 599][7] 了解内部详细信息[][8]。 - 2. 32 位平台会在 `a` 和 `b` 的声明中填充 `_ [3]byte`。查看前面的内容[][9]。 - 3. Brad 使用的是`[0]func()`,但是所有能限制和禁止比较的类型都可以。添加了一个有 0 个元素的数组的声明后,结构体的大小和对齐不会受影响。[][10] - +附录:在 Brad 的推动下,[Cherry Zhang][5] 和 [Keith Randall][6] 已经在 Go 1.15 做了大量的改进,修复了最严重的故障,消除了无用的相等和哈希函数(虽然我猜想这也是为了避免这类 CL 的扩散)。 +[^1]: 在 32 位平台上 `int64` 和 `unit64` 的值可能不是按 8 字节对齐的,因为平台原生的是以 4 字节对齐的。查看 [议题 599][7] 了解内部详细信息。 +[^2]: 32 位平台会在 `a` 和 `b` 的声明中填充 `_ [3]byte`。参见前一条。 +[^3]: Brad 使用的是`[0]func()`,但是所有能限制和禁止比较的类型都可以。添加了一个有 0 个元素的数组的声明后,结构体的大小和对齐不会受影响。 #### 相关文章: - 1. [Go 运行时如何高效地实现 map(不使用泛型)][11] + 1. [Go 运行时如何高效地实现映射(不使用泛型)][11] 2. [空结构体][12] 3. [填充很难][13] - 4. [Go 中有类型的 nil 2][14] - - + 4. [Go 中有类型的 nil(2)][14] -------------------------------------------------------------------------------- @@ -142,7 +140,7 @@ via: https://dave.cheney.net/2020/05/09/ensmallening-go-binaries-by-prohibiting- 作者:[Dave Cheney][a] 选题:[lujun9972][b] 译者:[lxbwolf](https://github.com/lxbwolf) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From d1ffed9a8a149524f00d34ab2816f2f7c6b827f1 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 22 May 2020 10:18:30 +0800 Subject: [PATCH 08/10] PUB @lxbwolf https://linux.cn/article-12238-1.html --- ...509 Ensmallening Go binaries by prohibiting comparisons.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename {translated/tech => published}/20200509 Ensmallening Go binaries by prohibiting comparisons.md (99%) diff --git a/translated/tech/20200509 Ensmallening Go binaries by prohibiting comparisons.md b/published/20200509 Ensmallening Go binaries by prohibiting comparisons.md similarity index 99% rename from translated/tech/20200509 Ensmallening Go binaries by prohibiting comparisons.md rename to published/20200509 Ensmallening Go binaries by prohibiting comparisons.md index b9fabc8f27..1d1a6b1590 100644 --- a/translated/tech/20200509 Ensmallening Go binaries by prohibiting comparisons.md +++ b/published/20200509 Ensmallening Go binaries by prohibiting comparisons.md @@ -1,8 +1,8 @@ [#]: collector: (lujun9972) [#]: translator: (lxbwolf) [#]: reviewer: (wxy) -[#]: publisher: ( ) -[#]: url: ( ) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-12238-1.html) [#]: subject: (Ensmallening Go binaries by prohibiting comparisons) [#]: via: (https://dave.cheney.net/2020/05/09/ensmallening-go-binaries-by-prohibiting-comparisons) [#]: author: (Dave Cheney https://dave.cheney.net/author/davecheney) From c341228e692fae3ff3fd6fb629473e5526489ce0 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 22 May 2020 11:41:39 +0800 Subject: [PATCH 09/10] PRF @geekpi --- ...r getting around your Linux file system.md | 55 +++++++++---------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/translated/tech/20200326 Tricks for getting around your Linux file system.md b/translated/tech/20200326 Tricks for getting around your Linux file system.md index 3883ab5c8d..474b6886dd 100644 --- a/translated/tech/20200326 Tricks for getting around your Linux file system.md +++ b/translated/tech/20200326 Tricks for getting around your Linux file system.md @@ -1,34 +1,36 @@ [#]: collector: (lujun9972) [#]: translator: (geekpi) -[#]: reviewer: ( ) +[#]: reviewer: (wxy) [#]: publisher: ( ) [#]: url: ( ) [#]: subject: (Tricks for getting around your Linux file system) [#]: via: (https://www.networkworld.com/article/3533421/tricks-for-getting-around-your-linux-file-system.html) [#]: author: (Sandra Henry-Stocker https://www.networkworld.com/author/Sandra-Henry_Stocker/) -使用 Linux 文件系统的技巧 +在 Linux 文件系统中导航的技巧 ====== -cd 命令可能是任何 Linux 用户学习的前 10 个命令之一,但这并不是在 Linux 文件系统中切换的唯一方法,这里还有其他一些方法。 + +> cd 命令可能是任何 Linux 用户学习的前 10 个命令之一,但这并不是在 Linux 文件系统中导航的唯一方法,这里还有其他一些方法。 + +![](https://img.linux.net.cn/data/attachment/album/202005/22/114058yrzlx94rz9lbx974.jpg) 无论你是在文件系统中四处查看、寻找文件还是尝试进入重要目录,Linux 都可以提供很多帮助。在本文中,我们将介绍一些技巧,使你可以在文件系统中移动,查找和使用所需的命令也更加轻松。 -### 添加到 $PATH +### 添加到 \$PATH -确保你不必花费大量时间在 Linux 系统上查找命令的最简单、最有用的方法之一就是在 $PATH 变量中添加适当的目录。但是,添加到 $PATH 变量中的目录顺序非常重要。它们确定系统在目录中查找要运行命令的目录顺序--在找到第一个匹配项时停止。 +确保你不必花费大量时间在 Linux 系统上查找命令的最简单、最有用的方法之一就是在 `$PATH` 变量中添加适当的目录。但是,添加到 `$PATH` 变量中的目录顺序非常重要。它们确定系统在目录中查找要运行命令的目录顺序--在找到第一个匹配项时停止。 例如,你可能希望将家目录放在第一个,这样,如果你创建的脚本与其他可执行文件有相同的名称,那么只要输入该脚本的名称,它便会运行。 -要将家目录添加到 $PATH 变量中,可以执行以下操作: +要将家目录添加到 `$PATH` 变量中,可以执行以下操作: ``` $ export PATH=~:$PATH ``` -**~** 字符代表家目录。 - -如果将脚本保存在 bin 目录中,下面的会有效: +`~` 字符代表家目录。 +如果将脚本保存在 `bin` 目录中,下面的会有效: ``` $ export PATH=~/bin:$PATH @@ -36,14 +38,12 @@ $ export PATH=~/bin:$PATH 然后,你可以运行位于家目录中的脚本,如下所示: -[][2] - ``` $ myscript Good morning, you just ran /home/myacct/bin/myscript ``` -**重要提示:**上面的命令_添加_搜索路径因为 $PATH (当前路径)包含了。它们不会覆盖它。你的搜索路径应该在 **.bashrc** 文件中配置,任何持久更改也需要在这里添加。 +**重要提示:**上面显示的命令会添加到你的搜索路径中,因为 `$PATH`(当前路径)被包含在内。它们不会覆盖它。你的搜索路径应该在你的 `.bashrc` 文件中配置,任何你打算永久化的更改也应该添加到那里。 ### 使用符号链接 @@ -53,17 +53,17 @@ Good morning, you just ran /home/myacct/bin/myscript ln -s /var/www/html www ``` -参数的顺序很重要。第一个(/var/www/html)是目标,第二个是你创建的链接的名称。如果你当前不在家目录中,那么以下命令将执行相同的操作: +参数的顺序很重要。第一个(`/var/www/html`)是目标,第二个是你创建的链接的名称。如果你当前不在家目录中,那么以下命令将执行相同的操作: ``` ln -s /var/www/html ~/www ``` -设置好之后,您可以使用 “cd www” 进入 **/var/www/html**。 +设置好之后,你可以使用 `cd www` 进入 `/var/www/html`。 ### 使用 shopt -**shopt** 命令还提供了一种让移动到其他目录更加容易的方法。当你使用 **shopt** 的 **autocd** 选项时,只需输入名称即可转到目录。例如: +`shopt` 命令还提供了一种让移动到其他目录更加容易的方法。当你使用 `shopt` 的 `autocd` 选项时,只需输入名称即可转到目录。例如: ``` $ shopt -s autocd @@ -79,23 +79,23 @@ $ pwd /home/myacct/bin ``` -在上面的第一组命令中,启用了 shopt 命令的 autocd 选项。输入 **www**,然后调用 “cd www” 命令。由于此符号链接是在上面的 **ln** 命令示例之一中创建的,因此将我们移至 **/var/www/html**。 **pwd -P** 命令显示实际位置。 +在上面的第一组命令中,启用了 `shopt` 命令的 `autocd` 选项。输入 `www`,就会调用 `cd www` 命令。由于此符号链接是在上面的 `ln` 命令示例之一中创建的,因此将我们移至 `/var/www/html`。 `pwd -P` 命令显示实际位置。 -在第二组中,键入 **~/bin** 会在用户家目录调用 **cd** 进入 **bin** 目录。 +在第二组中,键入 `~/bin` 会调用 `cd` 进入在用户家目录的 `bin` 目录。 -请注意,当你输入的是命令时,**autocd** 行为将_不会_生效,即使它也是目录的名称。 +请注意,当你输入的是命令时,`autocd` 行为将*不会*生效,即使它也是目录的名称。 -**shopt** 是 bash 内置,它有很多选项。这只是意味着你不必在要进入每个目录的名称之前输入 “cd”。 +`shopt` 是 bash 内置命令,它有很多选项。这只是意味着你不必在要进入每个目录的名称之前输入 `cd`。 -要查看 **shopt** 的其他选项,只需输入 “shopt”。 +要查看 `shopt` 的其他选项,只需输入 `shopt`。 -### 使用 $CDPATH +### 使用 \$CDPATH -进入特定目录的最有用技巧之一可能是将你希望能够轻松进入的路径添加到 **$CDPATH** 中。这将创建一个只需输入完整路径名的一部分即可进入的目录列表。 +可能进入特定目录的最有用技巧之一,就是将你希望能够轻松进入的路径添加到 `$CDPATH` 中。这将创建一个目录列表,只需输入完整路径名的一部分即可进入。 -一方面,这可能有点棘手。你的 **$CDPATH** 需要包含要移动到的目录的目录,而不是目录本身。 +一方面,这可能有点棘手。你的 `$CDPATH` 需要包含要移动到的目录的父目录,而不是目录本身。 -例如,假设你希望仅通过输入 “cd html” 就可以移至 **/var/www/html** 目录,并仅使用 “cd” 和简单目录名即可移至 /var/log 中的子目录。在这种情况下,此 **$CDPATH** 将起作用: +例如,假设你希望仅通过输入 `cd html` 就可以移至 `/var/www/html` 目录,并仅使用 `cd` 和简单目录名即可移至 `/var/log` 中的子目录。在这种情况下,此 `$CDPATH` 就可以起作用: ``` $ CDPATH=.:/var/log:/var/www @@ -110,9 +110,9 @@ $ cd html /var/www/html ``` -当你输入的不是完整路径时,**$CDPATH** 就会生效。它向下查看其目录列表,以查看指定的目录是否存在于其中一个目录中。找到匹配项后,它将带你到那里。 +当你输入的不是完整路径时,`$CDPATH` 就会生效。它向下查看其目录列表,以查看指定的目录是否存在于其中一个目录中。找到匹配项后,它将带你到那里。 -保持 “.” 在 **$CDPATH** 开头意味着你可以进入本地目录,而不必在 **$CDPATH** 中定义它们。 +在 `$CDPATH` 开头保持 `.` 意味着你可以进入本地目录,而不必在 `$CDPATH` 中定义它们。 ``` $ export CDPATH=".:$CDPATH" @@ -123,7 +123,6 @@ cd -- Videos 在 Linux 文件系统键切换并不难,但是如果你使用一些方便的技巧轻松地到达各个位置,那你可以节省一些大脑细胞。 -加入 [Facebook][3] 和 [LinkedIn][4] 上的 Network World 社区,评论热门主题。 -------------------------------------------------------------------------------- @@ -132,7 +131,7 @@ via: https://www.networkworld.com/article/3533421/tricks-for-getting-around-your 作者:[Sandra Henry-Stocker][a] 选题:[lujun9972][b] 译者:[geekpi](https://github.com/geekpi) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From a069d4c1d32f3b475c4a9a9d987f260b14a100ef Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 22 May 2020 11:42:17 +0800 Subject: [PATCH 10/10] PUB @geekpi https://linux.cn/article-12239-1.html --- ...200326 Tricks for getting around your Linux file system.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename {translated/tech => published}/20200326 Tricks for getting around your Linux file system.md (98%) diff --git a/translated/tech/20200326 Tricks for getting around your Linux file system.md b/published/20200326 Tricks for getting around your Linux file system.md similarity index 98% rename from translated/tech/20200326 Tricks for getting around your Linux file system.md rename to published/20200326 Tricks for getting around your Linux file system.md index 474b6886dd..d9d6cf1006 100644 --- a/translated/tech/20200326 Tricks for getting around your Linux file system.md +++ b/published/20200326 Tricks for getting around your Linux file system.md @@ -1,8 +1,8 @@ [#]: collector: (lujun9972) [#]: translator: (geekpi) [#]: reviewer: (wxy) -[#]: publisher: ( ) -[#]: url: ( ) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-12239-1.html) [#]: subject: (Tricks for getting around your Linux file system) [#]: via: (https://www.networkworld.com/article/3533421/tricks-for-getting-around-your-linux-file-system.html) [#]: author: (Sandra Henry-Stocker https://www.networkworld.com/author/Sandra-Henry_Stocker/)