mirror of
https://github.com/LCTT/TranslateProject.git
synced 2024-12-26 21:30:55 +08:00
Merge remote-tracking branch 'LCTT/master'
This commit is contained in:
commit
41dc2313a6
@ -1,40 +1,42 @@
|
||||
|
||||
五种 DevSecOps 提升安全性
|
||||
DevSecOps 提升安全性的五种方式
|
||||
======
|
||||
|
||||
> 安全必须进化以跟上当今的应用开发和部署方式。
|
||||
|
||||
![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/security-lock-password.jpg?itok=KJMdkKum)
|
||||
|
||||
对于我们是否需要扩展 DevOps 以确实提升安全性,我们一直都有争议。毕竟,我们的想法是,DevOps 一直是一系列的新实践的简写,使用新工具(通常是开源的)并且在这之上构建更多的协作文化。为什么 DevBizOps 不能更好地满足商业的需求?或者说 DevChatOps 强调的是更快更好的沟通?
|
||||
对于我们是否需要扩展 DevOps 以确实提升安全性,我们一直都有争议。毕竟,我们认为,DevOps 一直是一系列的新实践的简写,使用新工具(通常是开源的)并且在这之上构建更多的协作文化。为什么 [DevBizOps][3] 不能更好地满足商业的需求?或者说 DevChatOps 强调的是更快更好的沟通?
|
||||
|
||||
在今年(译者注:此处是2018年)的早些时候写的关于他理解的 DevSecOps 术语,“我希望,有一天在世界范围内,我们能不再使用 DevSecOps 这个词,安全会是所有的服务交付讨论中理所应当的部分。直到那一天到来为止,在这一点上,我的一般性结论是,这个词只有三个新的特性。更重要的是,我们作为一个产业,在信息安全方面并没有做的很好,而这个名称切实地区分出了问题的状况”
|
||||
然而,如 [John Willis][4] 在今年(LCTT 译注:此处是 2018 年)的早些时候写的关于他对 [DevSecOps][5] 术语的理解,“我希望,有一天我们能在任何地方都不再使用 DevSecOps 这个词,安全会是所有关于服务交付的讨论中理所应当的部分。在那一天到来前,在这一点上,我的一般性结论是,这个词只是三个新的特性而已。更重要的是,我们作为一个产业,在信息安全方面并没有做的很好,而这个名称切实地区分出了问题的状况。”
|
||||
|
||||
所以,为什么我们在信息安全方面做的不好,在 DevSecOps 的语境下安全做的好又是什么意思呢?
|
||||
所以,为什么我们在[信息安全][6]方面做的不好,在 DevSecOps 的语境下安全做的好又是什么意思呢?
|
||||
|
||||
我们大概从未做好过信息安全,尽管(也可能是因为)复杂的工业点产品地址拥挤问题。我们仍然可以在这个时代把工作做得足够好,以此来防范威胁,这些威胁主要集中在一个范围内,网络的连接是有限的,而且大多数的用户都是公司的员工,使用的是公司提供的设备。
|
||||
尽管(也可能是因为)庞大的复杂行业的单点产品解决了特定方面的问题,但我们可以说是从未做好过信息安全。我们仍然可以在这个时代把工作做得足够好,以此来防范威胁,这些威胁主要集中在一个范围内,网络的连接是受限的,而且大多数的用户都是公司的员工,使用的是公司提供的设备。
|
||||
|
||||
这些年来,这些情况并没有能准确地描述出大多数组织的真实现状。但在现在这个时代,不止引入了 DevSecOps,也同时引入了新的应用架构模型,开发实践,和越来越多的安全威胁,这些一起定义了一个需要更快迭代的新常态。还没有应用得很多的 DevSecOps 在独立改变安全,但是 2018 年的信息安全需要新的方法。
|
||||
这些年来,这些情况并没有能准确地描述出大多数组织的真实现状。但在现在这个时代,不止引入了 DevSecOps,也同时引入了新的应用架构模型、开发实践,和越来越多的安全威胁,这些一起定义了一个需要更快迭代的新常态。与其说 DevSecOps 孤立地改变了安全,不如说信息安全公司在 2018 年需要新的方法。
|
||||
|
||||
请仔细思考下面这五个领域。
|
||||
|
||||
### 自动化
|
||||
|
||||
大量的自动化通常是 DevOps 的标志,这部分是关于速度的,如果你要快速移动(并且不会打坏东西),你需要有可重复的过程,而且这个过程不需要太多的人工干预。实际上,自动化是 DevOps 最好的切入点之一,甚至是在仍然主要工作在单片机电路程序的组织里也是如此。使用像 Ansible 这样易于使用的工具来自动化地处理相关的配置或者是测试,这是快速开始 DevOps 之路的常用方法。
|
||||
大量的自动化通常是 DevOps 的标志,这部分是关于速度的,如果你要快速变化(并且不会造成破坏),你需要有可重复的过程,而且这个过程不需要太多的人工干预。实际上,自动化是 DevOps 最好的切入点之一,甚至是在仍然主要使用老式的<ruby>独石应用<rt>monolithic app</rt></ruby>的组织里也是如此。使用像 Ansible 这样易于使用的工具来自动化地处理相关的配置或者是测试,这是快速开始 DevOps 之路的常用方法。
|
||||
|
||||
DevSecOps 也不例外,在今天,安全已经变成了一个持续性的过程,而不是在应用的生命周期里进行不定期的检查,甚至是每周、每月的检查。当漏洞被厂商发现并修复的时候,这些漏洞能被快速地应用是很重要的,因为利用这些漏洞的利用程序很快就会被淘汰。
|
||||
DevSecOps 也不例外,在今天,安全已经变成了一个持续性的过程,而不是在应用的生命周期里进行不定期的检查,甚至是每周、每月的检查。当漏洞被厂商发现并修复的时候,这些修复能被快速地应用是很重要的,这样对这些漏洞的利用程序很快就会被淘汰。
|
||||
|
||||
### "左转"
|
||||
### “左移”
|
||||
|
||||
在开发流程结束时,传统安全通常被视作一个守门人。检查所有的部分确保没有问题,然后这个应用程序就可以投入生产了。否则,就要再来一次。所以安全团队的声誉并不高。
|
||||
在开发流程结束时,传统的安全通常被视作一个守门人。检查所有的部分确保没有问题,然后这个应用程序就可以投入生产了。否则,就要再来一次。安全小组以说“不”而闻名。
|
||||
|
||||
因此,我们想的是,没什么不把安全这个部分提到前面呢(左边是一个典型的从左到右的开发流程图)?安全性可能仍然不行,但在开发的早期进行重构的影响要远远小于开发已经完成并且准备上线时进行重构的影响。
|
||||
因此,我们想的是,为什么不把安全这个部分提到前面呢(在一个典型的从左到右的开发流程图的“左边”)?安全团队仍然可以说“不”,但在开发的早期进行重构的影响要远远小于开发已经完成并且准备上线时进行重构的影响。
|
||||
|
||||
不过,我不喜欢“左移”这个词,这意味着安全仍然是一个只不过提前进行的一次性工作。在应用程序的整个生命周期里,从供应链到开发,再到测试,直到上线部署,安全都需要进行大量的自动化处理。
|
||||
|
||||
### 管理依赖
|
||||
|
||||
我们在现代应用程序开发过程中看到的一个最大的改变,就是你通常不需要去编写这个程序的大部分代码。使用开源的函数库和框架就是一个明显的例子。但是你也可以从公共的云服务商或其他来源那里获得额外的服务。在许多情况下,这些额外的代码和服务比你给自己写的要好得多。
|
||||
我们在现代应用程序开发过程中看到的一个最大的改变,就是你通常不需要去编写这个程序的大部分代码。使用开源的函数库和框架就是一个明显的例子。而且你也可以从公共的云服务商或其他来源那里获得额外的服务。在许多情况下,这些额外的代码和服务比你给自己写的要好得多。
|
||||
|
||||
因此,DevSecOps 需要你把重点放在你的软件供应链上,你是从可信的来源那里获取你的软件的吗?这些软件是最新的吗?它们已经集成到了你为自己的代码使用的安全流程中了吗?对于这些你能使用的代码和 API 你有哪些策略?你为自己的产品代码使用的组件是否有可用的商业支持?
|
||||
因此,DevSecOps 需要你把重点放在你的[软件供应链][8]上,你是从可信的来源那里获取你的软件的吗?这些软件是最新的吗?它们已经集成到了你为自己的代码所使用的安全流程中了吗?对于这些你能使用的代码和 API 你有哪些策略?你为自己的产品代码使用的组件是否有可用的商业支持?
|
||||
|
||||
没有一套标准答案可以应对所有的情况。对于概念验证和大规模的生产,它们可能会有所不同。但是,正如制造业长期存在的情况(DevSecOps 和制造业的发展方面有许多相似之处),供应链的可信是至关重要的。
|
||||
|
||||
@ -42,7 +44,7 @@ DevSecOps 也不例外,在今天,安全已经变成了一个持续性的过
|
||||
|
||||
关于贯穿应用程序整个生命周期里所有阶段的自动化的需求,我已经谈过很多了。这里假设我们能看见每个阶段里发生的情况。
|
||||
|
||||
有效的 DevSecOps 需要有效的检测,以便于自动化程序知道要做什么。这个检测分了很多类别。一些长期的和高级别的指标能帮助我们了解整个 DevSecOps 流程是否工作良好。严重威胁级别的警报需要立刻有人进行处理(安全扫描系统已经关闭!)。有一些警报,比如扫描失败,需要进行修复。我们记录了大量的参数来生成日志,以便事后进行分析(随着时间的推移,哪些发生了改变?导致失败的原因是什么?)。
|
||||
有效的 DevSecOps 需要有效的检测,以便于自动化程序知道要做什么。这个检测分了很多类别。一些长期的和高级别的指标能帮助我们了解整个 DevSecOps 流程是否工作良好。严重威胁级别的警报需要立刻有人进行处理(安全扫描系统已经关闭!)。有一些警报,比如扫描失败,需要进行修复。我们记录了许多参数的志以便事后进行分析(随着时间的推移,哪些发生了改变?导致失败的原因是什么?)。
|
||||
|
||||
### 分散服务 vs 一体化解决方案
|
||||
|
||||
@ -50,7 +52,7 @@ DevSecOps 也不例外,在今天,安全已经变成了一个持续性的过
|
||||
|
||||
这种方法确实带来了一些新的安全挑战,组件之间的交互可能会很复杂,总的攻击面会更大,因为现在应用程序通过网络有了更多的切入点。
|
||||
|
||||
另一方面,这种类型的架构还意味着自动化的安全和监视可以更加精细地查看应用程序的组件,因为它们不再深埋在一整个应用程序之中。
|
||||
另一方面,这种类型的架构还意味着自动化的安全和监视可以更加精细地查看应用程序的组件,因为它们不再深埋在一个独石应用程序之中。
|
||||
|
||||
不要过多地关注 DevSecOps 这个术语,但要提醒一下,安全正在不断地演变,因为我们编写和部署程序的方式也在不断地演变。
|
||||
|
||||
@ -61,7 +63,7 @@ via: https://opensource.com/article/18/9/devsecops-changes-security
|
||||
作者:[Gordon Haff][a]
|
||||
选题:[lujun9972](https://github.com/lujun9972)
|
||||
译者:[hopefully2333](https://github.com/hopefully2333)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
54
sources/talk/20190121 Booting Linux faster.md
Normal file
54
sources/talk/20190121 Booting Linux faster.md
Normal file
@ -0,0 +1,54 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Booting Linux faster)
|
||||
[#]: via: (https://opensource.com/article/19/1/booting-linux-faster)
|
||||
[#]: author: (Stewart Smith https://opensource.com/users/stewart-ibm)
|
||||
|
||||
Booting Linux faster
|
||||
======
|
||||
Doing Linux kernel and firmware development leads to lots of reboots and lots of wasted time.
|
||||
![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/tux_linux_penguin_code_binary.jpg?itok=TxGxW0KY)
|
||||
Of all the computers I've ever owned or used, the one that booted the quickest was from the 1980s; by the time your hand moved from the power switch to the keyboard, the BASIC interpreter was ready for your commands. Modern computers take anywhere from 15 seconds for a laptop to minutes for a small home server to boot. Why is there such a difference in boot times?
|
||||
|
||||
A microcomputer from the 1980s that booted straight to a BASIC prompt had a very simple CPU that started fetching and executing instructions from a memory address immediately upon getting power. Since these systems had BASIC in ROM, there was no loading time—you got to the BASIC prompt really quickly. More complex systems of that same era, such as the IBM PC or Macintosh, took a significant time to boot (~30 seconds), although this was mostly due to having to read the operating system (OS) off a floppy disk. Only a handful of seconds were spent in firmware before being able to load an OS.
|
||||
|
||||
Modern servers typically spend minutes, rather than seconds, in firmware before getting to the point of booting an OS from disk. This is largely due to modern systems' increased complexity. No longer can a CPU just come up and start executing instructions at full speed; we've become accustomed to CPU frequency scaling, idle states that save a lot of power, and multiple CPU cores. In fact, inside modern CPUs are a surprising number of simpler CPUs that help start the main CPU cores and provide runtime services such as throttling the frequency when it gets too hot. On most CPU architectures, the code running on these cores inside your CPU is provided as opaque binary blobs.
|
||||
|
||||
On OpenPOWER systems, every instruction executed on every core inside the CPU is open source software. On machines with [OpenBMC][1] (such as IBM's AC922 system and Raptor's TALOS II and Blackbird systems), this extends to the code running on the Baseboard Management Controller as well. This means we can get a tremendous amount of insight into what takes so long from the time you plug in a power cable to the time a familiar login prompt is displayed.
|
||||
|
||||
If you're part of a team that works on the Linux kernel, you probably boot a lot of kernels. If you're part of a team that works on firmware, you're probably going to boot a lot of different firmware images, followed by an OS to ensure your firmware still works. If we can reduce the hardware's boot time, these teams can become more productive, and end users may be grateful when they're setting up systems or rebooting to install firmware or OS updates.
|
||||
|
||||
Over the years, many improvements have been made to Linux distributions' boot time. Modern init systems deal well with doing things concurrently and on-demand. On a modern system, once the kernel starts executing, it can take very few seconds to get to a login prompt. This handful of seconds are not the place to optimize boot time; we have to go earlier: before we get to the OS.
|
||||
|
||||
On OpenPOWER systems, the firmware loads an OS by booting a Linux kernel stored in the firmware flash chip that runs a userspace program called [Petitboot][2] to find the disk that holds the OS the user wants to boot and [kexec][3][()][3] to it. This code reuse leverages the efforts that have gone into making Linux boot quicker. Even so, we found places in our kernel config and userspace where we could improve and easily shave seconds off boot time. With these optimizations, booting the Petitboot environment is a single-digit percentage of boot time, so we had to find more improvements elsewhere.
|
||||
|
||||
Before the Petitboot environment starts, there's a prior bit of firmware called [Skiboot][4], and before that there's [Hostboot][5]. Prior to Hostboot is the [Self-Boot Engine][6], a separate core on the die that gets a single CPU core up and executing instructions out of Level 3 cache. These components are where we can make the most headway in reducing boot time, as they take up the overwhelming majority of it. Perhaps some of these components aren't optimized enough or doing as much in parallel as they could be?
|
||||
|
||||
Another avenue of attack is reboot time rather than boot time. On a reboot, do we really need to reinitialize all the hardware?
|
||||
|
||||
Like any modern system, the solutions to improving boot (and reboot) time have been a mixture of doing more in parallel, dealing with legacy, and (arguably) cheating.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/1/booting-linux-faster
|
||||
|
||||
作者:[Stewart Smith][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/stewart-ibm
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://en.wikipedia.org/wiki/OpenBMC
|
||||
[2]: https://github.com/open-power/petitboot
|
||||
[3]: https://en.wikipedia.org/wiki/Kexec
|
||||
[4]: https://github.com/open-power/skiboot
|
||||
[5]: https://github.com/open-power/hostboot
|
||||
[6]: https://github.com/open-power/sbe
|
||||
[7]: https://linux.conf.au/schedule/presentation/105/
|
||||
[8]: https://linux.conf.au/
|
@ -1,262 +0,0 @@
|
||||
Translating by MjSeven
|
||||
|
||||
|
||||
tmux – A Powerful Terminal Multiplexer For Heavy Command-Line Linux User
|
||||
======
|
||||
tmux stands for terminal multiplexer, it allows users to create/enable multiple terminals (vertical & horizontal) in single window, this can be accessed and controlled easily from single window when you are working with different issues.
|
||||
|
||||
It uses a client-server model, which allows you to share sessions between users, also you can attach terminals to a tmux session back. We can easily move or rearrange the virtual console as per the need. Terminal sessions can freely rebound from one virtual console to another.
|
||||
|
||||
tmux depends on libevent and ncurses libraries. tmux offers status-line at the bottom of the screen which display information about your current tmux session suc[]h as current window number, window name, username, hostname, current time, and current date.
|
||||
|
||||
When tmux is started it creates a new session with a single window and displays it on screen. It allows users to create Any number of windows in the same session.
|
||||
|
||||
Many of us says it's similar to screen but i'm not since this offers wide range of configuration options.
|
||||
|
||||
**Make a note:** `Ctrl+b` is the default prefix in tmux so, to perform any action in tumx, you have to type the prefix first then required options.
|
||||
|
||||
**Suggested Read :** [List Of Terminal Emulator For Linux][1]
|
||||
|
||||
### tmux Features
|
||||
|
||||
* Create any number of windows
|
||||
* Create any number of panes in the single window
|
||||
* It allows vertical and horizontal splits
|
||||
* Detach and Re-attach window
|
||||
* Server-client architecture which allows users to share sessions between users
|
||||
* tmux offers wide range of configuration hacks
|
||||
|
||||
|
||||
|
||||
**Suggested Read :**
|
||||
**(#)** [tmate - Instantly Share Your Terminal Session To Anyone In Seconds][2]
|
||||
**(#)** [Teleconsole - A Tool To Share Your Terminal Session Instantly To Anyone In Seconds][3]
|
||||
|
||||
### How to Install tmux Command
|
||||
|
||||
tmux command is pre-installed by default in most of the Linux systems. If no, follow the below procedure to get installed.
|
||||
|
||||
For **`Debian/Ubuntu`** , use [APT-GET Command][4] or [APT Command][5] to install tmux.
|
||||
```
|
||||
$ sudo apt install tmux
|
||||
|
||||
```
|
||||
|
||||
For **`RHEL/CentOS`** , use [YUM Command][6] to install tmux.
|
||||
```
|
||||
$ sudo yum install tmux
|
||||
|
||||
```
|
||||
|
||||
For **`Fedora`** , use [DNF Command][7] to install tmux.
|
||||
```
|
||||
$ sudo dnf install tmux
|
||||
|
||||
```
|
||||
|
||||
For **`Arch Linux`** , use [Pacman Command][8] to install tmux.
|
||||
```
|
||||
$ sudo pacman -S tmux
|
||||
|
||||
```
|
||||
|
||||
For **`openSUSE`** , use [Zypper Command][9] to install tmux.
|
||||
```
|
||||
$ sudo zypper in tmux
|
||||
|
||||
```
|
||||
|
||||
### How to Use tmux
|
||||
|
||||
kick start the tmux session by running following command on terminal. When tmux is started it creates a new session with a single window and will automatically login to your default shell with your user account.
|
||||
```
|
||||
$ tmux
|
||||
|
||||
```
|
||||
|
||||
[![][10]![][10]][11]
|
||||
|
||||
You will get similar to above screenshot like us. tmux comes with status bar which display an information's about current sessions details, date, time, etc.,.
|
||||
|
||||
The status bar information's are below:
|
||||
|
||||
* **`0 :`** It is indicating the session number which was created by the tmux server. By default it starts with 0.
|
||||
* **`0:username@host: :`** 0 is indicating the session number. Username and Hostname which is holding the current window.
|
||||
* **`~ :`** It is indicating the current directory (We are in the Home directory)
|
||||
* **`* :`** This indicate that the window is active now.
|
||||
* **`Hostname :`** This shows fully qualified hostname of the server
|
||||
* **`Date& Time:`** It shows current date and time
|
||||
|
||||
|
||||
|
||||
### How to Split Window
|
||||
|
||||
tmux allows users to split window vertically and horizontally. Let 's see how to do that.
|
||||
|
||||
Press `**(Ctrl+b), %**` to split the pane vertically.
|
||||
[![][10]![][10]][13]
|
||||
|
||||
Press `**(Ctrl+b), "**` to split the pane horizontally.
|
||||
[![][10]![][10]][14]
|
||||
|
||||
### How to Move Between Panes
|
||||
|
||||
Lets say, we have created few panes and want to move between them. How to do that? If you don 't know how to do, then there is no purpose to use tmux. Use the following control keys to perform the actions. There are many ways to move between panes.
|
||||
|
||||
Press `(Ctrl+b), Left arrow` - To Move Left
|
||||
|
||||
Press `(Ctrl+b), Right arrow` - To Move Right
|
||||
|
||||
Press `(Ctrl+b), Up arrow` - To Move Up
|
||||
|
||||
Press `(Ctrl+b), Down arrow` - To Move Down
|
||||
|
||||
Press `(Ctrl+b), {` - To Move Left
|
||||
|
||||
Press `(Ctrl+b), }` - To Move Right
|
||||
|
||||
Press `(Ctrl+b), o` - Switch to next pane (left-to-right, top-down)
|
||||
|
||||
Press `(Ctrl+b), ;` - Move to the previously active pane.
|
||||
|
||||
For testing purpose, we are going to move between panes. Now, we are in the `pane2` which shows `lsb_release -a` command output.
|
||||
[![][10]![][10]][15]
|
||||
|
||||
And we are going to move to `pane0` which shows `uname -a` command output.
|
||||
[![][10]![][10]][16]
|
||||
|
||||
### How to Open/Create New Window
|
||||
|
||||
You can open any number of windows within one terminal. Terminal window can be split vertically & horizontally which is called `panes`. Each pane will contain its own, independently running terminal instance.
|
||||
|
||||
Press `(Ctrl+b), c` to create a new window.
|
||||
|
||||
Press `(Ctrl+b), n` move to the next window.
|
||||
|
||||
Press `(Ctrl+b), p` to move to the previous window.
|
||||
|
||||
Press `(Ctrl+b), (0-9)` to immediately move to a specific window.
|
||||
|
||||
Press `(Ctrl+b), l` Move to the previously selected window.
|
||||
|
||||
I have two windows, first window has three panes which contains operating system distribution information, top command output & kernal information.
|
||||
[![][10]![][10]][17]
|
||||
|
||||
And second window has two panes which contains Linux distributions logo information. Use the following commands perform the action.
|
||||
[![][10]![][10]][18]
|
||||
|
||||
Press `(Ctrl+b), w` Choose the current window interactively.
|
||||
[![][10]![][10]][19]
|
||||
|
||||
### How to Zoom Panes
|
||||
|
||||
You are working in some pane which is very small and you want to zoom it out for further work. To do use the following key binds.
|
||||
|
||||
Currently we have three panes and i'm working in `pane1` which shows system activity using **Top** command and am going to zoom that.
|
||||
[![][10]![][10]][17]
|
||||
|
||||
When you zoom a pane, it will hide all other panes and display only the zoomed pane in the window.
|
||||
[![][10]![][10]][20]
|
||||
|
||||
Press `(Ctrl+b), z` to zoom the pane and press it again, to bring the zoomed pane back.
|
||||
|
||||
### Display Pane Information
|
||||
|
||||
To know about pane number and it's size, run the following command.
|
||||
|
||||
Press `(Ctrl+b), q` to briefly display pane indexes.
|
||||
[![][10]![][10]][21]
|
||||
|
||||
### Display Window Information
|
||||
|
||||
To know about window number, layout size, number of panes associated with the window and it's size, etc., run the following command.
|
||||
|
||||
Just run `tmux list-windows` to view window information.
|
||||
[![][10]![][10]][22]
|
||||
|
||||
### How to Resize Panes
|
||||
|
||||
You may want to resize the panes to fit your requirement. You have to press `(Ctrl+b), :` then type the following details on the `yellow` color bar in the bottom of the page.
|
||||
[![][10]![][10]][23]
|
||||
|
||||
In the previous section we have print pane index which shows panes size as well. To test this we are going to increase `10 cells UPward`. See the following output that has increased the pane1 & pane2 size from `55x21` to `55x31`.
|
||||
[![][10]![][10]][24]
|
||||
|
||||
**Syntax:** `(Ctrl+b), :` then type `resize-pane [options] [cells size]`
|
||||
|
||||
`(Ctrl+b), :` then type `resize-pane -D 10` to resize the current pane Down for 10 cells.
|
||||
|
||||
`(Ctrl+b), :` then type `resize-pane -U 10` to resize the current pane UPward for 10 cells.
|
||||
|
||||
`(Ctrl+b), :` then type `resize-pane -L 10` to resize the current pane Left for 10 cells.
|
||||
|
||||
`(Ctrl+b), :` then type `resize-pane -R 10` to resize the current pane Right for 10 cells.
|
||||
|
||||
### Detaching and Re-attaching tmux Session
|
||||
|
||||
One of the most powerful features of tmux is the ability to detach and reattach session whenever you need.
|
||||
|
||||
Run a long running process and press `Ctrl+b` followed by `d` to detach your tmux session safely by leaving the running process.
|
||||
|
||||
**Suggested Read :** [How To Keep A Process/Command Running After Disconnecting SSH Session][25]
|
||||
|
||||
Now, run a long running process. For demonstration purpose, we are going to move this server backup to another remote server for disaster recovery (DR) purpose.
|
||||
|
||||
You will get similar output like below after detached tmux session.
|
||||
```
|
||||
[detached (from session 0)]
|
||||
|
||||
```
|
||||
|
||||
Run the following command to list the available tmux sessions.
|
||||
```
|
||||
$ tmux ls
|
||||
0: 3 windows (created Tue Jan 30 06:17:47 2018) [109x45]
|
||||
|
||||
```
|
||||
|
||||
Now, re-attach the tmux session using an appropriate session ID as follow.
|
||||
```
|
||||
$ tmux attach -t 0
|
||||
|
||||
```
|
||||
|
||||
### How to Close Panes & Window
|
||||
|
||||
Just type `exit` or hit `Ctrl-d` in the corresponding pane to close it. It's similar to terminal close. To close window, press `(Ctrl+b), &`.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.2daygeek.com/tmux-a-powerful-terminal-multiplexer-emulator-for-linux/
|
||||
|
||||
作者:[Magesh Maruthamuthu][a]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.2daygeek.com/author/magesh/
|
||||
[1]:https://www.2daygeek.com/category/terminal-emulator/
|
||||
[2]:https://www.2daygeek.com/tmate-instantly-share-your-terminal-session-to-anyone-in-seconds/
|
||||
[3]:https://www.2daygeek.com/teleconsole-share-terminal-session-instantly-to-anyone-in-seconds/
|
||||
[4]:https://www.2daygeek.com/apt-get-apt-cache-command-examples-manage-packages-debian-ubuntu-systems/
|
||||
[5]:https://www.2daygeek.com/apt-command-examples-manage-packages-debian-ubuntu-systems/
|
||||
[6]:https://www.2daygeek.com/yum-command-examples-manage-packages-rhel-centos-systems/
|
||||
[7]:https://www.2daygeek.com/dnf-command-examples-manage-packages-fedora-system/
|
||||
[8]:https://www.2daygeek.com/pacman-command-examples-manage-packages-arch-linux-system/
|
||||
[9]:https://www.2daygeek.com/zypper-command-examples-manage-packages-opensuse-system/
|
||||
[10]:data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
|
||||
[11]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-1.png
|
||||
[13]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-2.png
|
||||
[14]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-3.png
|
||||
[15]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-4.png
|
||||
[16]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-5.png
|
||||
[17]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-8.png
|
||||
[18]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-6.png
|
||||
[19]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-7.png
|
||||
[20]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-9.png
|
||||
[21]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-10.png
|
||||
[22]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-14.png
|
||||
[23]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-11.png
|
||||
[24]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-13.png
|
||||
[25]:https://www.2daygeek.com/how-to-keep-a-process-command-running-after-disconnecting-ssh-session/
|
@ -1,3 +1,5 @@
|
||||
Transltaing by MjSeven
|
||||
|
||||
How To Setup Static File Server Instantly
|
||||
======
|
||||
|
||||
|
@ -1,80 +0,0 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Bash 5.0 Released with New Features)
|
||||
[#]: via: (https://itsfoss.com/bash-5-release)
|
||||
[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
|
||||
|
||||
Bash 5.0 Released with New Features
|
||||
======
|
||||
|
||||
The [mailing list][1] confirmed the release of Bash-5.0 recently. And, it is exciting to know that it comes baked with new features and variable.
|
||||
|
||||
Well, if you’ve been using Bash 4.4.XX, you will definitely love the fifth major release of [Bash][2].
|
||||
|
||||
The fifth release focuses on new shell variables and a lot of major bug fixes with an overhaul. It also introduces a couple of new features along with some incompatible changes between bash-4.4 and bash-5.0.
|
||||
|
||||
![Bash logo][3]
|
||||
|
||||
### What about the new features?
|
||||
|
||||
The mailing list explains the bug fixed in this new release:
|
||||
|
||||
> This release fixes several outstanding bugs in bash-4.4 and introduces several new features. The most significant bug fixes are an overhaul of how nameref variables resolve and a number of potential out-of-bounds memory errors discovered via fuzzing. There are a number of changes to the expansion of $@ and $* in various contexts where word splitting is not performed to conform to a Posix standard interpretation, and additional changes to resolve corner cases for Posix conformance.
|
||||
|
||||
It also introduces some new features. As per the release note, these are the most notable new features are several new shell variables:
|
||||
|
||||
> The BASH_ARGV0, EPOCHSECONDS, and EPOCHREALTIME. The ‘history’ builtin can remove ranges of history entries and understands negative arguments as offsets from the end of the history list. There is an option to allow local variables to inherit the value of a variable with the same name at a preceding scope. There is a new shell option that, when enabled, causes the shell to attempt to expand associative array subscripts only once (this is an issue when they are used in arithmetic expressions). The ‘globasciiranges‘ shell option is now enabled by default; it can be set to off by default at configuration time.
|
||||
|
||||
### What about the changes between Bash-4.4 and Bash-5.0?
|
||||
|
||||
The update log mentioned about the incompatible changes and the supported readline version history. Here’s what it said:
|
||||
|
||||
> There are a few incompatible changes between bash-4.4 and bash-5.0. The changes to how nameref variables are resolved means that some uses of namerefs will behave differently, though I have tried to minimize the compatibility issues. By default, the shell only sets BASH_ARGC and BASH_ARGV at startup if extended debugging mode is enabled; it was an oversight that it was set unconditionally and caused performance issues when scripts were passed large numbers of arguments.
|
||||
>
|
||||
> Bash can be linked against an already-installed Readline library rather than the private version in lib/readline if desired. Only readline-8.0 and later versions are able to provide all of the symbols that bash-5.0 requires; earlier versions of the Readline library will not work correctly.
|
||||
|
||||
I believe some of the features/variables added are very useful. Some of my favorites are:
|
||||
|
||||
* There is a new (disabled by default, undocumented) shell option to enable and disable sending history to syslog at runtime.
|
||||
* The shell doesn’t automatically set BASH_ARGC and BASH_ARGV at startup unless it’s in debugging mode, as the documentation has always said, but will dynamically create them if a script references them at the top level without having enabled debugging mode.
|
||||
* The ‘history’ can now delete ranges of history entries using ‘-d start-end’.
|
||||
* If a non-interactive shell with job control enabled detects that a foreground job died due to SIGINT, it acts as if it received the SIGINT.
|
||||
* BASH_ARGV0: a new variable that expands to $0 and sets $0 on assignment.
|
||||
|
||||
|
||||
|
||||
To check the complete list of changes and features you should refer to the [Mailing list post][1].
|
||||
|
||||
### Wrapping Up
|
||||
|
||||
You can check your current Bash version, using this command:
|
||||
|
||||
```
|
||||
bash --version
|
||||
```
|
||||
|
||||
It’s more likely that you’ll have Bash 4.4 installed. If you want to get the new version, I would advise waiting for your distribution to provide it.
|
||||
|
||||
With Bash-5.0 available, what do you think about it? Are you using any alternative to bash? If so, would this update change your mind?
|
||||
|
||||
Let us know your thoughts in the comments below.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/bash-5-release
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://lists.gnu.org/archive/html/bug-bash/2019-01/msg00063.html
|
||||
[2]: https://www.gnu.org/software/bash/
|
||||
[3]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/01/bash-logo.jpg?resize=800%2C450&ssl=1
|
@ -1,5 +1,5 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
|
@ -0,0 +1,324 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Zipping files on Linux: the many variations and how to use them)
|
||||
[#]: via: (https://www.networkworld.com/article/3333640/linux/zipping-files-on-linux-the-many-variations-and-how-to-use-them.html)
|
||||
[#]: author: (Sandra Henry-Stocker https://www.networkworld.com/author/Sandra-Henry_Stocker/)
|
||||
|
||||
Zipping files on Linux: the many variations and how to use them
|
||||
======
|
||||
![](https://images.idgesg.net/images/article/2019/01/zipper-100785364-large.jpg)
|
||||
|
||||
Some of us have been zipping files on Unix and Linux systems for many decades — to save some disk space and package files together for archiving. Even so, there are some interesting variations on zipping that not all of us have tried. So, in this post, we’re going to look at standard zipping and unzipping as well as some other interesting zipping options.
|
||||
|
||||
### The basic zip command
|
||||
|
||||
First, let’s look at the basic **zip** command. It uses what is essentially the same compression algorithm as **gzip** , but there are a couple important differences. For one thing, the gzip command is used only for compressing a single file where zip can both compress files and join them together into an archive. For another, the gzip command zips “in place”. In other words, it leaves a compressed file — not the original file alongside the compressed copy. Here's an example of gzip at work:
|
||||
|
||||
```
|
||||
$ gzip onefile
|
||||
$ ls -l
|
||||
-rw-rw-r-- 1 shs shs 10514 Jan 15 13:13 onefile.gz
|
||||
```
|
||||
|
||||
And here's zip. Notice how this command requires that a name be provided for the zipped archive where gzip simply uses the original file name and adds the .gz extension.
|
||||
|
||||
```
|
||||
$ zip twofiles.zip file*
|
||||
adding: file1 (deflated 82%)
|
||||
adding: file2 (deflated 82%)
|
||||
$ ls -l
|
||||
-rw-rw-r-- 1 shs shs 58021 Jan 15 13:25 file1
|
||||
-rw-rw-r-- 1 shs shs 58933 Jan 15 13:34 file2
|
||||
-rw-rw-r-- 1 shs shs 21289 Jan 15 13:35 twofiles.zip
|
||||
```
|
||||
|
||||
Notice also that the original files are still sitting there.
|
||||
|
||||
The amount of disk space that is saved (i.e., the degree of compression obtained) will depend on the content of each file. The variation in the example below is considerable.
|
||||
|
||||
```
|
||||
$ zip mybin.zip ~/bin/*
|
||||
adding: bin/1 (deflated 26%)
|
||||
adding: bin/append (deflated 64%)
|
||||
adding: bin/BoD_meeting (deflated 18%)
|
||||
adding: bin/cpuhog1 (deflated 14%)
|
||||
adding: bin/cpuhog2 (stored 0%)
|
||||
adding: bin/ff (deflated 32%)
|
||||
adding: bin/file.0 (deflated 1%)
|
||||
adding: bin/loop (deflated 14%)
|
||||
adding: bin/notes (deflated 23%)
|
||||
adding: bin/patterns (stored 0%)
|
||||
adding: bin/runme (stored 0%)
|
||||
adding: bin/tryme (deflated 13%)
|
||||
adding: bin/tt (deflated 6%)
|
||||
```
|
||||
|
||||
### The unzip command
|
||||
|
||||
The **unzip** command will recover the contents from a zip file and, as you'd likely suspect, leave the zip file intact, whereas a similar gunzip command would leave only the uncompressed file.
|
||||
|
||||
```
|
||||
$ unzip twofiles.zip
|
||||
Archive: twofiles.zip
|
||||
inflating: file1
|
||||
inflating: file2
|
||||
$ ls -l
|
||||
-rw-rw-r-- 1 shs shs 58021 Jan 15 13:25 file1
|
||||
-rw-rw-r-- 1 shs shs 58933 Jan 15 13:34 file2
|
||||
-rw-rw-r-- 1 shs shs 21289 Jan 15 13:35 twofiles.zip
|
||||
```
|
||||
|
||||
### The zipcloak command
|
||||
|
||||
The **zipcloak** command encrypts a zip file, prompting you to enter a password twice (to help ensure you don't "fat finger" it) and leaves the file in place. You can expect the file size to vary a little from the original.
|
||||
|
||||
```
|
||||
$ zipcloak twofiles.zip
|
||||
Enter password:
|
||||
Verify password:
|
||||
encrypting: file1
|
||||
encrypting: file2
|
||||
$ ls -l
|
||||
total 204
|
||||
-rw-rw-r-- 1 shs shs 58021 Jan 15 13:25 file1
|
||||
-rw-rw-r-- 1 shs shs 58933 Jan 15 13:34 file2
|
||||
-rw-rw-r-- 1 shs shs 21313 Jan 15 13:46 twofiles.zip <== slightly larger than
|
||||
unencrypted version
|
||||
```
|
||||
|
||||
Keep in mind that the original files are still sitting there unencrypted.
|
||||
|
||||
### The zipdetails command
|
||||
|
||||
The **zipdetails** command is going to show you details — a _lot_ of details about a zipped file, likely a lot more than you care to absorb. Even though we're looking at an encrypted file, zipdetails does display the file names along with file modification dates, user and group information, file length data, etc. Keep in mind that this is all "metadata." We don't see the contents of the files.
|
||||
|
||||
```
|
||||
$ zipdetails twofiles.zip
|
||||
|
||||
0000 LOCAL HEADER #1 04034B50
|
||||
0004 Extract Zip Spec 14 '2.0'
|
||||
0005 Extract OS 00 'MS-DOS'
|
||||
0006 General Purpose Flag 0001
|
||||
[Bit 0] 1 'Encryption'
|
||||
[Bits 1-2] 1 'Maximum Compression'
|
||||
0008 Compression Method 0008 'Deflated'
|
||||
000A Last Mod Time 4E2F6B24 'Tue Jan 15 13:25:08 2019'
|
||||
000E CRC F1B115BD
|
||||
0012 Compressed Length 00002904
|
||||
0016 Uncompressed Length 0000E2A5
|
||||
001A Filename Length 0005
|
||||
001C Extra Length 001C
|
||||
001E Filename 'file1'
|
||||
0023 Extra ID #0001 5455 'UT: Extended Timestamp'
|
||||
0025 Length 0009
|
||||
0027 Flags '03 mod access'
|
||||
0028 Mod Time 5C3E2584 'Tue Jan 15 13:25:08 2019'
|
||||
002C Access Time 5C3E27BB 'Tue Jan 15 13:34:35 2019'
|
||||
0030 Extra ID #0002 7875 'ux: Unix Extra Type 3'
|
||||
0032 Length 000B
|
||||
0034 Version 01
|
||||
0035 UID Size 04
|
||||
0036 UID 000003E8
|
||||
003A GID Size 04
|
||||
003B GID 000003E8
|
||||
003F PAYLOAD
|
||||
|
||||
2943 LOCAL HEADER #2 04034B50
|
||||
2947 Extract Zip Spec 14 '2.0'
|
||||
2948 Extract OS 00 'MS-DOS'
|
||||
2949 General Purpose Flag 0001
|
||||
[Bit 0] 1 'Encryption'
|
||||
[Bits 1-2] 1 'Maximum Compression'
|
||||
294B Compression Method 0008 'Deflated'
|
||||
294D Last Mod Time 4E2F6C56 'Tue Jan 15 13:34:44 2019'
|
||||
2951 CRC EC214569
|
||||
2955 Compressed Length 00002913
|
||||
2959 Uncompressed Length 0000E635
|
||||
295D Filename Length 0005
|
||||
295F Extra Length 001C
|
||||
2961 Filename 'file2'
|
||||
2966 Extra ID #0001 5455 'UT: Extended Timestamp'
|
||||
2968 Length 0009
|
||||
296A Flags '03 mod access'
|
||||
296B Mod Time 5C3E27C4 'Tue Jan 15 13:34:44 2019'
|
||||
296F Access Time 5C3E27BD 'Tue Jan 15 13:34:37 2019'
|
||||
2973 Extra ID #0002 7875 'ux: Unix Extra Type 3'
|
||||
2975 Length 000B
|
||||
2977 Version 01
|
||||
2978 UID Size 04
|
||||
2979 UID 000003E8
|
||||
297D GID Size 04
|
||||
297E GID 000003E8
|
||||
2982 PAYLOAD
|
||||
|
||||
5295 CENTRAL HEADER #1 02014B50
|
||||
5299 Created Zip Spec 1E '3.0'
|
||||
529A Created OS 03 'Unix'
|
||||
529B Extract Zip Spec 14 '2.0'
|
||||
529C Extract OS 00 'MS-DOS'
|
||||
529D General Purpose Flag 0001
|
||||
[Bit 0] 1 'Encryption'
|
||||
[Bits 1-2] 1 'Maximum Compression'
|
||||
529F Compression Method 0008 'Deflated'
|
||||
52A1 Last Mod Time 4E2F6B24 'Tue Jan 15 13:25:08 2019'
|
||||
52A5 CRC F1B115BD
|
||||
52A9 Compressed Length 00002904
|
||||
52AD Uncompressed Length 0000E2A5
|
||||
52B1 Filename Length 0005
|
||||
52B3 Extra Length 0018
|
||||
52B5 Comment Length 0000
|
||||
52B7 Disk Start 0000
|
||||
52B9 Int File Attributes 0001
|
||||
[Bit 0] 1 Text Data
|
||||
52BB Ext File Attributes 81B40000
|
||||
52BF Local Header Offset 00000000
|
||||
52C3 Filename 'file1'
|
||||
52C8 Extra ID #0001 5455 'UT: Extended Timestamp'
|
||||
52CA Length 0005
|
||||
52CC Flags '03 mod access'
|
||||
52CD Mod Time 5C3E2584 'Tue Jan 15 13:25:08 2019'
|
||||
52D1 Extra ID #0002 7875 'ux: Unix Extra Type 3'
|
||||
52D3 Length 000B
|
||||
52D5 Version 01
|
||||
52D6 UID Size 04
|
||||
52D7 UID 000003E8
|
||||
52DB GID Size 04
|
||||
52DC GID 000003E8
|
||||
|
||||
52E0 CENTRAL HEADER #2 02014B50
|
||||
52E4 Created Zip Spec 1E '3.0'
|
||||
52E5 Created OS 03 'Unix'
|
||||
52E6 Extract Zip Spec 14 '2.0'
|
||||
52E7 Extract OS 00 'MS-DOS'
|
||||
52E8 General Purpose Flag 0001
|
||||
[Bit 0] 1 'Encryption'
|
||||
[Bits 1-2] 1 'Maximum Compression'
|
||||
52EA Compression Method 0008 'Deflated'
|
||||
52EC Last Mod Time 4E2F6C56 'Tue Jan 15 13:34:44 2019'
|
||||
52F0 CRC EC214569
|
||||
52F4 Compressed Length 00002913
|
||||
52F8 Uncompressed Length 0000E635
|
||||
52FC Filename Length 0005
|
||||
52FE Extra Length 0018
|
||||
5300 Comment Length 0000
|
||||
5302 Disk Start 0000
|
||||
5304 Int File Attributes 0001
|
||||
[Bit 0] 1 Text Data
|
||||
5306 Ext File Attributes 81B40000
|
||||
530A Local Header Offset 00002943
|
||||
530E Filename 'file2'
|
||||
5313 Extra ID #0001 5455 'UT: Extended Timestamp'
|
||||
5315 Length 0005
|
||||
5317 Flags '03 mod access'
|
||||
5318 Mod Time 5C3E27C4 'Tue Jan 15 13:34:44 2019'
|
||||
531C Extra ID #0002 7875 'ux: Unix Extra Type 3'
|
||||
531E Length 000B
|
||||
5320 Version 01
|
||||
5321 UID Size 04
|
||||
5322 UID 000003E8
|
||||
5326 GID Size 04
|
||||
5327 GID 000003E8
|
||||
|
||||
532B END CENTRAL HEADER 06054B50
|
||||
532F Number of this disk 0000
|
||||
5331 Central Dir Disk no 0000
|
||||
5333 Entries in this disk 0002
|
||||
5335 Total Entries 0002
|
||||
5337 Size of Central Dir 00000096
|
||||
533B Offset to Central Dir 00005295
|
||||
533F Comment Length 0000
|
||||
Done
|
||||
```
|
||||
|
||||
### The zipgrep command
|
||||
|
||||
The **zipgrep** command is going to use a grep-type feature to locate particular content in your zipped files. If the file is encrypted, you will need to enter the password provided for the encryption for each file you want to examine. If you only want to check the contents of a single file from the archive, add its name to the end of the zipgrep command as shown below.
|
||||
|
||||
```
|
||||
$ zipgrep hazard twofiles.zip file1
|
||||
[twofiles.zip] file1 password:
|
||||
Certain pesticides should be banned since they are hazardous to the environment.
|
||||
```
|
||||
|
||||
### The zipinfo command
|
||||
|
||||
The **zipinfo** command provides information on the contents of a zipped file whether encrypted or not. This includes the file names, sizes, dates and permissions.
|
||||
|
||||
```
|
||||
$ zipinfo twofiles.zip
|
||||
Archive: twofiles.zip
|
||||
Zip file size: 21313 bytes, number of entries: 2
|
||||
-rw-rw-r-- 3.0 unx 58021 Tx defN 19-Jan-15 13:25 file1
|
||||
-rw-rw-r-- 3.0 unx 58933 Tx defN 19-Jan-15 13:34 file2
|
||||
2 files, 116954 bytes uncompressed, 20991 bytes compressed: 82.1%
|
||||
```
|
||||
|
||||
### The zipnote command
|
||||
|
||||
The **zipnote** command can be used to extract comments from zip archives or add them. To display comments, just preface the name of the archive with the command. If no comments have been added previously, you will see something like this:
|
||||
|
||||
```
|
||||
$ zipnote twofiles.zip
|
||||
@ file1
|
||||
@ (comment above this line)
|
||||
@ file2
|
||||
@ (comment above this line)
|
||||
@ (zip file comment below this line)
|
||||
```
|
||||
|
||||
If you want to add comments, write the output from the zipnote command to a file:
|
||||
|
||||
```
|
||||
$ zipnote twofiles.zip > comments
|
||||
```
|
||||
|
||||
Next, edit the file you've just created, inserting your comments above the **(comment above this line)** lines. Then add the comments using a zipnote command like this one:
|
||||
|
||||
```
|
||||
$ zipnote -w twofiles.zip < comments
|
||||
```
|
||||
|
||||
### The zipsplit command
|
||||
|
||||
The **zipsplit** command can be used to break a zip archive into multiple zip archives when the original file is too large — maybe because you're trying to add one of the files to a small thumb drive. The easiest way to do this seems to be to specify the max size for each of the zipped file portions. This size must be large enough to accomodate the largest included file.
|
||||
|
||||
```
|
||||
$ zipsplit -n 12000 twofiles.zip
|
||||
2 zip files will be made (100% efficiency)
|
||||
creating: twofile1.zip
|
||||
creating: twofile2.zip
|
||||
$ ls twofile*.zip
|
||||
-rw-rw-r-- 1 shs shs 10697 Jan 15 14:52 twofile1.zip
|
||||
-rw-rw-r-- 1 shs shs 10702 Jan 15 14:52 twofile2.zip
|
||||
-rw-rw-r-- 1 shs shs 21377 Jan 15 14:27 twofiles.zip
|
||||
```
|
||||
|
||||
Notice how the extracted files are sequentially named "twofile1" and "twofile2".
|
||||
|
||||
### Wrap-up
|
||||
|
||||
The **zip** command, along with some of its zipping compatriots, provide a lot of control over how you generate and work with compressed file archives.
|
||||
|
||||
**[ Also see:[Invaluable tips and tricks for troubleshooting Linux][1] ]**
|
||||
|
||||
Join the Network World communities on [Facebook][2] and [LinkedIn][3] to comment on topics that are top of mind.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.networkworld.com/article/3333640/linux/zipping-files-on-linux-the-many-variations-and-how-to-use-them.html
|
||||
|
||||
作者:[Sandra Henry-Stocker][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.networkworld.com/author/Sandra-Henry_Stocker/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.networkworld.com/article/3242170/linux/invaluable-tips-and-tricks-for-troubleshooting-linux.html
|
||||
[2]: https://www.facebook.com/NetworkWorld/
|
||||
[3]: https://www.linkedin.com/company/network-world
|
268
sources/tech/20190118 Top 5 Linux Server Distributions.md
Normal file
268
sources/tech/20190118 Top 5 Linux Server Distributions.md
Normal file
@ -0,0 +1,268 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Top 5 Linux Server Distributions)
|
||||
[#]: via: (https://www.linux.com/blog/learn/2019/1/top-5-linux-server-distributions)
|
||||
[#]: author: (Jack Wallen https://www.linux.com/users/jlwallen)
|
||||
|
||||
Top 5 Linux Server Distributions
|
||||
======
|
||||
![](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/rockstor-main.jpg?itok=VNvfEIlf)
|
||||
|
||||
Ah, the age-old question: Which Linux distribution is best suited for servers? Typically, when this question is asked, the standard responses pop up:
|
||||
|
||||
* RHEL
|
||||
|
||||
* SUSE
|
||||
|
||||
* Ubuntu Server
|
||||
|
||||
* Debian
|
||||
|
||||
* CentOS
|
||||
|
||||
|
||||
|
||||
|
||||
However, in the name of opening your eyes to maybe something a bit different, I’m going to approach this a bit differently. I want to consider a list of possible distributions that are not only outstanding candidates but also easy to use, and that can serve many functions within your business. In some cases, my choices are drop-in replacements for other operating systems, whereas others require a bit of work to get them up to speed.
|
||||
|
||||
Some of my choices are community editions of enterprise-grade servers, which could be considered gateways to purchasing a much more powerful platform. You’ll even find one or two entries here to be duty-specific platforms. Most importantly, however, what you’ll find on this list isn’t the usual fare.
|
||||
|
||||
### ClearOS
|
||||
|
||||
What is ClearOS? For home and small business usage, you might not find a better solution. Out of the box, ClearOS includes tools like intrusion detection, a strong firewall, bandwidth management tools, a mail server, a domain controller, and much more. What makes ClearOS stand out above some of the competition is its purpose is to server as a simple Home and SOHO server with a user-friendly, graphical web-based interface. From that interface, you’ll find an application marketplace (Figure 1), with hundreds of apps (some of which are free, whereas some have an associated cost), that makes it incredibly easy to extend the ClearOS featureset. In other words, you make ClearOS the platform your home and small business needs it to be. Best of all, unlike many other alternatives, you only pay for the software and support you need.
|
||||
![](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/clearos.jpg?itok=knQkn5ch)
|
||||
There are three different editions of ClearOS:
|
||||
|
||||
* [ClearOS Community][1] - the free edition of ClearOS
|
||||
|
||||
* [ClearOS Home][2] - ideal for home offices
|
||||
|
||||
* [ClearOS Business][3] - ideal for small businesses, due to the inclusion of paid support
|
||||
|
||||
|
||||
|
||||
|
||||
To make the installation of software even easier, the ClearOS marketplace allows you to select via:
|
||||
|
||||
* By Function (which displays apps according to task)
|
||||
|
||||
* By Category (which displays groups of related apps)
|
||||
|
||||
* Quick Select File (which allows you to select pre-configured templates to get you up and running fast)
|
||||
|
||||
|
||||
|
||||
|
||||
In other words, if you’re looking for a Linux Home, SOHO, or SMB server, ClearOS is an outstanding choice (especially if you don’t have the Linux chops to get a standard server up and running).
|
||||
|
||||
### Fedora Server
|
||||
|
||||
You’ve heard of Fedora Linux. Of course you have. It’s one of the finest bleeding edge distributions on the market. But did you know the developers of that excellent Fedora Desktop distribution also has a Server edition? The Fedora Server platform is a short-lifecycle, community-supported server OS. This take on the server operating system enables seasoned system administrators, experienced with any flavor of Linux (or any OS at all), to make use of the very latest technologies available in the open source community. There are three key words in that description:
|
||||
|
||||
* Seasoned
|
||||
|
||||
* System
|
||||
|
||||
* Administrators
|
||||
|
||||
|
||||
|
||||
|
||||
In other words, new users need not apply. Although Fedora Server is quite capable of handling any task you throw at it, it’s going to require someone with a bit more Linux kung fu to make it work and work well. One very nice inclusion with Fedora Server is that, out of the box, it includes one of the finest open source, web-based interface for servers on the market. With Cockpit (Figure 2) you get a quick glance at system resources, logs, storage, network, as well as the ability to manage accounts, services, applications, and updates.
|
||||
|
||||
![Fedora Server][5]
|
||||
|
||||
Figure 2: Cockpit running on Fedora Server.
|
||||
|
||||
[Used with permission][6]
|
||||
|
||||
If you’re okay working with bleeding edge software, and want an outstanding admin dashboard, Fedora Server might be the platform for you.
|
||||
|
||||
### NethServer
|
||||
|
||||
NethServer is about as no-brainer of a drop-in SMB Linux server as you’ll find. With the latest iteration of NethServer, your small business will enjoy:
|
||||
|
||||
* Built-in Samba Active Directory Controller
|
||||
|
||||
* Seamless Nextcloud integration
|
||||
|
||||
* Certificate management
|
||||
|
||||
* Transparent HTTPS proxy
|
||||
|
||||
* Firewall
|
||||
|
||||
* Mail server and filter
|
||||
|
||||
* Web server and filter
|
||||
|
||||
* Groupware
|
||||
|
||||
* IPS/IDS or VPN
|
||||
|
||||
|
||||
|
||||
|
||||
All of the included features can be easily configured with a user-friendly, web-based interface that includes single-click installation of modules to expand the NethServer feature set (Figure 3) What sets NethServer apart from ClearOS is that it was designed to make the admin job easier. In other words, this platform offers much more in the way of flexibility and power. Unlike ClearOS, which is geared more toward home office and SOHO deployments, NethServer is equally at home in small business environments.
|
||||
|
||||
![NethServer][8]
|
||||
|
||||
Figure 3: Adding modules to NethServer.
|
||||
|
||||
[Used with permission][6]
|
||||
|
||||
### Rockstor
|
||||
|
||||
Rockstor is a Linux and Btfrs powered advanced Network Attached Storage (NAS) and Cloud storage server that can be deployed for Home, SOHO, as well as small- and mid-sized businesses alike. With Rockstor, you get a full-blown NAS/Cloud solution with a user-friendly, web-based GUI tool that is just as easy for admins to set up as it is for users to use. Once you have Rockstor deployed, you can create pools, shares, snapshots, manage replication and users, share files (with the help of Samba, NFS, SFTP, and AFP), and even extend the featureset, thanks to add-ons (called Rock-ons). The list of Rock-ons includes:
|
||||
|
||||
* CouchPotato (Downloader for usenet and bittorrent users)
|
||||
|
||||
* Deluge (Movie downloader for bittorrent users)
|
||||
|
||||
* EmbyServer (Emby media server)
|
||||
|
||||
* Ghost (Publishing platform for professional bloggers)
|
||||
|
||||
* GitLab CE (Git repository hosting and collaboration)
|
||||
|
||||
* Gogs Go Git Service (Lightweight Git version control server and front end)
|
||||
|
||||
* Headphones (An automated music downloader for NZB and Torrent)
|
||||
|
||||
* Logitech Squeezebox Server for Squeezebox Devices
|
||||
|
||||
* MariaDB (Relational database management system)
|
||||
|
||||
* NZBGet (Efficient usenet downloader)
|
||||
|
||||
* OwnCloud-Official (Secure file sharing and hosting)
|
||||
|
||||
* Plexpy (Python-based Plex Usage tracker)
|
||||
|
||||
* Rocket.Chat (Open Source Chat Platform)
|
||||
|
||||
* SaBnzbd (Usenet downloader)
|
||||
|
||||
* Sickbeard (Internet PVR for TV shows)
|
||||
|
||||
* Sickrage (Automatic Video Library Manager for TV Shows)
|
||||
|
||||
* Sonarr (PVR for usenet and bittorrent users)
|
||||
|
||||
* Symform (Backup service)
|
||||
|
||||
|
||||
|
||||
|
||||
Rockstor also includes an at-a-glance dashboard that gives admins quick access to all the information they need about their server (Figure 4).
|
||||
|
||||
![Rockstor][10]
|
||||
|
||||
The Rockstor dashboard in action.
|
||||
|
||||
[Used with permission][6]
|
||||
|
||||
### Zentyal
|
||||
|
||||
Zentyal is another Small Business Server that does a great job of handling multiple tasks. If you’re looking for a Linux distribution that can handle the likes of:
|
||||
|
||||
* Directory and Domain server
|
||||
|
||||
* Mail server
|
||||
|
||||
* Gateway
|
||||
|
||||
* DHCP, DNS, and NTP server
|
||||
|
||||
* Certification Authority
|
||||
|
||||
* VPN
|
||||
|
||||
* Instant Messaging
|
||||
|
||||
* FTP server
|
||||
|
||||
* Antivirus
|
||||
|
||||
* SSO authentication
|
||||
|
||||
* File sharing
|
||||
|
||||
* RADIUS
|
||||
|
||||
* Virtualization Management
|
||||
|
||||
* And more
|
||||
|
||||
|
||||
|
||||
|
||||
Zentyal might be your new go-to. Zentyal has been around since 2004 and is based on Ubuntu Server, so it enjoys a rock-solid base and plenty of applications. And with the help of the Zentyal dashboard (Figure 5), admins can easily manage:
|
||||
|
||||
* System
|
||||
|
||||
* Network
|
||||
|
||||
* Logs
|
||||
|
||||
* Software updates and installation
|
||||
|
||||
* Users/groups
|
||||
|
||||
* Domains
|
||||
|
||||
* File sharing
|
||||
|
||||
* Mail
|
||||
|
||||
* DNS
|
||||
|
||||
* Firewall
|
||||
|
||||
* Certificates
|
||||
|
||||
* And much more
|
||||
|
||||
![](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/zentyal.jpg?itok=Un9lpgh6)
|
||||
|
||||
|
||||
Adding new components to the Zentyal server is as simple as opening the Dashboard, clicking on Software Management > Zentyal Components, selecting what you want to add, and clicking Install. The one issue you might find with Zentyal is that it doesn’t offer nearly the amount of addons as you’ll find in the likes of Nethserver and ClearOS. But the services it does offer, Zentyal does incredibly well.
|
||||
|
||||
### Plenty More Where These Came From
|
||||
|
||||
This list of Linux servers is clearly not exhaustive. What it is, however, is a unique look at the top five server distributions you’ve probably not heard of. Of course, if you’d rather opt to use a more traditional Linux server distribution, you can always stick with [CentOS][11], [Ubuntu Server][12], [SUSE][13], [Red Hat Enterprise Linux][14], or [Debian][15]… most of which are found on every list of best server distributions on the market. If, however, you’re looking for something a bit different, give one of these five distos a try.
|
||||
|
||||
Learn more about Linux through the free ["Introduction to Linux" ][16]course from The Linux Foundation and edX.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.linux.com/blog/learn/2019/1/top-5-linux-server-distributions
|
||||
|
||||
作者:[Jack Wallen][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.linux.com/users/jlwallen
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.clearos.com/clearfoundation/software/clearos-7-community
|
||||
[2]: https://www.clearos.com/products/clearos-editions/clearos-7-home
|
||||
[3]: https://www.clearos.com/products/clearos-editions/clearos-7-business
|
||||
[4]: https://www.linux.com/files/images/fedoraserverjpg
|
||||
[5]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/fedoraserver.jpg?itok=phaAIRXW (Fedora Server)
|
||||
[6]: https://www.linux.com/licenses/category/used-permission
|
||||
[7]: https://www.linux.com/files/images/nethserverjpg
|
||||
[8]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/nethserver.jpg?itok=HO-CRbOV (NethServer)
|
||||
[9]: https://www.linux.com/files/images/rockstorejpg
|
||||
[10]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/rockstore.jpg?itok=EN_5oFxQ (Rockstor)
|
||||
[11]: https://www.centos.org/
|
||||
[12]: https://www.ubuntu.com/download/server
|
||||
[13]: https://www.suse.com/
|
||||
[14]: https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux
|
||||
[15]: https://www.debian.org/
|
||||
[16]: https://training.linuxfoundation.org/linux-courses/system-administration-training/introduction-to-linux
|
@ -0,0 +1,61 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Get started with HomeBank, an open source personal finance app)
|
||||
[#]: via: (https://opensource.com/article/19/1/productivity-tools-homebank)
|
||||
[#]: author: (Kevin Sonney https://opensource.com/users/ksonney (Kevin Sonney))
|
||||
|
||||
Get started with HomeBank, an open source personal finance app
|
||||
======
|
||||
Keep track of where your money is going with HomeBank, the eighth in our series on open source tools that will make you more productive in 2019.
|
||||
![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/math_money_financial_calculator_colors.jpg?itok=_yEVTST1)
|
||||
|
||||
There seems to be a mad rush at the beginning of every year to find ways to be more productive. New Year's resolutions, the itch to start the year off right, and of course, an "out with the old, in with the new" attitude all contribute to this. And the usual round of recommendations is heavily biased towards closed source and proprietary software. It doesn't have to be that way.
|
||||
|
||||
Here's the eighth of my picks for 19 new (or new-to-you) open source tools to help you be more productive in 2019.
|
||||
|
||||
### HomeBank
|
||||
|
||||
Managing my finances can be really stressful. I don't look at my bank balance every day and sometimes have trouble keeping track of where my money is going. I often spend more time managing my finances than I need to, digging into accounts and payment histories to figure out where my money went. Knowing my finances are OK helps keep me calm and allows me to focus on other things.
|
||||
|
||||
![](https://opensource.com/sites/default/files/uploads/homebank-1.png)
|
||||
|
||||
[HomeBank][1] is a personal finance desktop application that helps decrease this type of stress by making it fairly easy to keep track of your finances. It has some nice reports to help you figure out where you're spending your money, allows you to set up rules for importing transactions, and supports most modern formats.
|
||||
|
||||
HomeBank is available on most distributions by default, so installation is very easy. When you start it up for the first time, it will walk you through setup and allow you to create an account. From there, you can either import one of the supported file formats or start entering transactions. The transaction register itself is just that—a list of transactions. [Unlike some other apps][2], you don't have to learn [double-entry bookkeeping][3] to use HomeBank.
|
||||
|
||||
![](https://opensource.com/sites/default/files/uploads/homebank-2.png)
|
||||
|
||||
Importing files from your bank is handled with another step-by-step wizard, with options to create a new account or populate an existing one. Importing into a new account saves a little time since you don't have to pre-create all the accounts before starting the import. You can also import multiple files into an account at once, so you don't need to repeat the same steps for every file in every account.
|
||||
|
||||
![](https://opensource.com/sites/default/files/uploads/homebank-3.png)
|
||||
|
||||
The one pain point I've had with importing and managing accounts is category assignment. Categories are what allow you to break down your spending and see what you are spending money on, in general terms. HomeBank, unlike commercial services (and some commercial programs), requires you to manually set up all the assignments. But this is generally a one-time thing, and then the categories can be auto-applied as transactions are added/imported. There is also a button to analyze the account and auto-apply things that already exist, which speeds up categorizing a large import (like I did the first time). HomeBank comes with a large number of categories you can start with, and you can add your own as well.
|
||||
|
||||
HomeBank also has budgeting features, allowing you to plan for the months ahead.
|
||||
|
||||
![](https://opensource.com/sites/default/files/uploads/homebank-4.png)
|
||||
|
||||
The big win, for me, is HomeBank's reports feature. Not only is there a chart on the main screen showing where you are spending your money, but there are a whole host of other reports you can look at. If you use the budget feature, there is a report that tracks your spending against your budget. You can also view those reports as pie and bar charts. There is also a trend report and a balance report, so you can look back and see changes or patterns over time.
|
||||
|
||||
Overall, HomeBank is a very friendly, useful application to help you keep your finances in order. It is simple to use and really helpful if keeping track of your money is a major stress point in your life.
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/1/productivity-tools-homebank
|
||||
|
||||
作者:[Kevin Sonney][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/ksonney (Kevin Sonney)
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: http://homebank.free.fr/en/index.php
|
||||
[2]: https://www.gnucash.org/
|
||||
[3]: https://en.wikipedia.org/wiki/Double-entry_bookkeeping_system
|
@ -0,0 +1,92 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Akira: The Linux Design Tool We’ve Always Wanted?)
|
||||
[#]: via: (https://itsfoss.com/akira-design-tool)
|
||||
[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
|
||||
|
||||
Akira: The Linux Design Tool We’ve Always Wanted?
|
||||
======
|
||||
|
||||
Let’s make it clear, I am not a professional designer – but I’ve used certain tools on Windows (like Photoshop, Illustrator, etc.) and [Figma][1] (which is a browser-based interface design tool). I’m sure there are a lot more design tools available for Mac and Windows.
|
||||
|
||||
Even on Linux, there is a limited number of dedicated [graphic design tools][2]. A few of these tools like [GIMP][3] and [Inkscape][4] are used by professionals as well. But most of them are not considered professional grade, unfortunately.
|
||||
|
||||
Even if there are a couple more solutions – I’ve never come across a native Linux application that could replace [Sketch][5], Figma, or Adobe **** XD. Any professional designer would agree to that, isn’t it?
|
||||
|
||||
### Is Akira going to replace Sketch, Figma, and Adobe XD on Linux?
|
||||
|
||||
Well, in order to develop something that would replace those awesome proprietary tools – [Alessandro Castellani][6] – came up with a [Kickstarter campaign][7] by teaming up with a couple of experienced developers –
|
||||
[Alberto Fanjul][8], [Bilal Elmoussaoui][9], and [Felipe Escoto][10].
|
||||
|
||||
So, yes, Akira is still pretty much just an idea- with a working prototype of its interface (as I observed in their [live stream session][11] via Kickstarter recently).
|
||||
|
||||
### If it does not exist, why the Kickstarter campaign?
|
||||
|
||||
![][12]
|
||||
|
||||
The aim of the Kickstarter campaign is to gather funds in order to hire the developers and take a few months off to dedicate their time in order to make Akira possible.
|
||||
|
||||
Nonetheless, if you want to support the project, you should know some details, right?
|
||||
|
||||
Fret not, we asked a couple of questions in their livestream session – let’s get into it…
|
||||
|
||||
### Akira: A few more details
|
||||
|
||||
![Akira prototype interface][13]
|
||||
Image Credits: Kickstarter
|
||||
|
||||
As the Kickstarter campaign describes:
|
||||
|
||||
> The main purpose of Akira is to offer a fast and intuitive tool to **create Web and Mobile interfaces** , more like **Sketch** , **Figma** , or **Adobe XD** , with a completely native experience for Linux.
|
||||
|
||||
They’ve also written a detailed description as to how the tool will be different from Inkscape, Glade, or QML Editor. Of course, if you want all the technical details, [Kickstarter][7] is the way to go. But, before that, let’s take a look at what they had to say when I asked some questions about Akira.
|
||||
|
||||
Q: If you consider your project – similar to what Figma offers – why should one consider installing Akira instead of using the web-based tool? Is it just going to be a clone of those tools – offering a native Linux experience or is there something really interesting to encourage users to switch (except being an open source solution)?
|
||||
|
||||
**Akira:** A native experience on Linux is always better and fast in comparison to a web-based electron app. Also, the hardware configuration matters if you choose to utilize Figma – but Akira will be light on system resource and you will still be able to do similar stuff without needing to go online.
|
||||
|
||||
Q: Let’s assume that it becomes the open source solution that Linux users have been waiting for (with similar features offered by proprietary tools). What are your plans to sustain it? Do you plan to introduce any pricing plans – or rely on donations?
|
||||
|
||||
**Akira** : The project will mostly rely on Donations (something like [Krita Foundation][14] could be an idea). But, there will be no “pro” pricing plans – it will be available for free and it will be an open source project.
|
||||
|
||||
So, with the response I got, it definitely seems to be something promising that we should probably support.
|
||||
|
||||
### Wrapping Up
|
||||
|
||||
What do you think about Akira? Is it just going to remain a concept? Or do you hope to see it in action?
|
||||
|
||||
Let us know your thoughts in the comments below.
|
||||
|
||||
![][15]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/akira-design-tool
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.figma.com/
|
||||
[2]: https://itsfoss.com/best-linux-graphic-design-software/
|
||||
[3]: https://itsfoss.com/gimp-2-10-release/
|
||||
[4]: https://inkscape.org/
|
||||
[5]: https://www.sketchapp.com/
|
||||
[6]: https://github.com/Alecaddd
|
||||
[7]: https://www.kickstarter.com/projects/alecaddd/akira-the-linux-design-tool/description
|
||||
[8]: https://github.com/albfan
|
||||
[9]: https://github.com/bilelmoussaoui
|
||||
[10]: https://github.com/Philip-Scott
|
||||
[11]: https://live.kickstarter.com/alessandro-castellani/live-stream/the-current-state-of-akira
|
||||
[12]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/01/akira-design-tool-kickstarter.jpg?resize=800%2C451&ssl=1
|
||||
[13]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/01/akira-mockup.png?ssl=1
|
||||
[14]: https://krita.org/en/about/krita-foundation/
|
||||
[15]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/01/akira-design-tool-kickstarter.jpg?fit=812%2C458&ssl=1
|
@ -0,0 +1,263 @@
|
||||
tmux - 适用于重度命令行 Linux 用户的强大终端复用器
|
||||
======
|
||||
|
||||
tmux 是终端复用的缩写,它允许用户在单个窗口中创建或启用多个终端(垂直或水平),当你处理不同的问题时,可以在单个窗口中轻松访问和控制。
|
||||
|
||||
它使用客户端-服务器模型,允许用户之间共享会话,也可以将终端连接到 tmux 会话。我们可以根据需要轻松移动或重新排列虚拟控制台。终端会话可以从一个虚拟控制台自由切换到另一个。
|
||||
|
||||
|
||||
tmux 依赖于 `libevent` 和 `ncurses` 库。tmux 在屏幕底部提供了一个状态行,它显示当前 tmux 会话的有关信息,例如当前窗口编号,窗口名称,用户名,主机名,当前时间和日期。
|
||||
|
||||
启动 tmux 时,它会在一个单独窗口上创建一个新的会话,并将其显示在屏幕上。它允许用户在同一个会话中创建任意数量的窗口。
|
||||
|
||||
许多人说它相当于一块屏幕,但我不这么认为,因为它提供了许多配置选项。
|
||||
|
||||
**注意:** `Ctrl+b` 是 tmux 中的默认前缀,因此,要在 tmux 中执行任何操作,你必须先输入前缀然后输入所需的选项。
|
||||
|
||||
**建议阅读:** [适用于 Linux 的终端仿真器列表][1]
|
||||
|
||||
### tmux 特性
|
||||
|
||||
* 创建任意数量的窗口
|
||||
* 在一个窗口中创建任意数量的窗格
|
||||
* 它允许垂直和水平分割
|
||||
* 分离并重新连接窗口
|
||||
* 客户端-服务器架构,这允许用户之间共享会话
|
||||
* tmux 提供许多配置技巧
|
||||
|
||||
**建议阅读:**
|
||||
**(#)** [tmate - 马上与其他人分享你的终端会话][2]
|
||||
**(#)** [Teleconsole - 一个与其他人分享终端会话的工具][3]
|
||||
|
||||
### 如何安装 tmux 命令
|
||||
|
||||
大多数 Linux 系统默认预安装 tmux 命令。如果没有,按照以下步骤安装。
|
||||
|
||||
对于 **`Debian/Ubuntu`**,使用 [APT-GET 命令][4]或 [APT 命令][5]来安装:
|
||||
```
|
||||
$ sudo apt install tmux
|
||||
```
|
||||
|
||||
对于 **`RHEL/CentOS`**,使用 [YUM 命令][6]来安装:
|
||||
```
|
||||
$ sudo yum install tmux
|
||||
```
|
||||
|
||||
对于 **`Fedora`**,使用 [DNF 命令][7]来安装:
|
||||
```
|
||||
$ sudo dnf install tmux
|
||||
```
|
||||
|
||||
对于 **`Arch Linux`**,使用 [Pacman 命令][8]来安装:
|
||||
```
|
||||
$ sudo pacman -S tmux
|
||||
```
|
||||
|
||||
对于 **`openSUSE`**,使用 [Zypper 命令][9]来安装:
|
||||
```
|
||||
$ sudo zypper in tmux
|
||||
```
|
||||
|
||||
### 如何使用 tmux
|
||||
|
||||
在终端上运行以下命令来启动 tmux 会话。启动 tmux 后,它会在一个新窗口中创建新会话,并将使用你的用户账户自动登录到你的默认 shell。
|
||||
```
|
||||
$ tmux
|
||||
```
|
||||
|
||||
![][11]
|
||||
|
||||
你会得到类似于我们上面的截图。tmux 附带状态栏,显示有关当前会话详细信息,日期,时间等。
|
||||
|
||||
状态栏信息如下:
|
||||
|
||||
* **`0 :`** 它表示由 tmux 服务器创建的会话号。默认情况下,它从 0 开始。
|
||||
* **`0:username@host: :`** ) 0 表示会话号。用户名和主机名是当前的使用窗口的人。
|
||||
* **`~ :`** 它表示当前目录(我们在家目录中)。
|
||||
* **`* :`** 这表示窗口现在处于活动状态。
|
||||
* **`Hostname :`** 显示服务器的完全主机名。
|
||||
* **`Date& Time:`** 显示当前日期和时间。
|
||||
|
||||
|
||||
### 如何拆分窗口
|
||||
|
||||
tmux 允许用户垂直或水平分割窗口。我们来看看如何做到这一点。
|
||||
|
||||
按下 `**(Ctrl+b), %**` 来垂直分割窗口。
|
||||
![][13]
|
||||
|
||||
Press `**(Ctrl+b), "**` 来水平分割窗口。
|
||||
![][14]
|
||||
|
||||
### 如何在窗格之间移动
|
||||
|
||||
假设,我们创建了一些窗格,希望在它们之间移动,这该怎么做?如果你不知道怎么做,那么使用 tmux 就没有意义了。使用以下控制键执行操作。在窗格之间移动有许多方法。
|
||||
|
||||
|
||||
按 `(Ctrl+b), 左箭头` - 来向左移动
|
||||
|
||||
按 `(Ctrl+b), 右箭头` - 来向右移动
|
||||
|
||||
按 `(Ctrl+b), 上箭头` - 来向上移动
|
||||
|
||||
按 `(Ctrl+b), 下箭头` - 来向下移动
|
||||
|
||||
按 `(Ctrl+b), {` - 来向左移动
|
||||
|
||||
按 `(Ctrl+b), }` - 来向右移动
|
||||
|
||||
按 `(Ctrl+b), o` - 切换到下一个窗格(从左到右,从上到下)
|
||||
|
||||
按 `(Ctrl+b), ;` - 移动到先前活动的窗格
|
||||
|
||||
出于测试目的,我们将在窗格之间移动。现在我们在 `pane2` 中,它 `lsb_release -a` 命令的输出。
|
||||
|
||||
![][15]
|
||||
|
||||
我们将移动到 `pane0`,它显示 `uname -a` 命令的输出。
|
||||
|
||||
![][16]
|
||||
|
||||
### 如何打开/创建新窗口
|
||||
|
||||
你可以在一个终端内打开任意数量的窗口。终端窗口可以垂直和水平分割,称为 `panes`。每个窗格都包含自己独立运行的终端实例。
|
||||
|
||||
按 `(Ctrl+b), c` 来创建一个新窗口。
|
||||
|
||||
按 `(Ctrl+b), n` 移动到下一个窗口
|
||||
|
||||
按 `(Ctrl+b), p` 移动到上一个窗口。
|
||||
|
||||
按 `(Ctrl+b), (0-9)` 立即移动到特定窗口。
|
||||
|
||||
按 `(Ctrl+b), l` 移动到先前选择的窗口。
|
||||
|
||||
我有两个窗口,第一个窗口有三个窗格,其中包含操作系统版本信息,top 命令输出和内核信息。
|
||||
![][17]
|
||||
|
||||
第二个窗口有两个窗格,其中包含 Linux 发行版 logo 信息。使用以下命令执行操作:
|
||||
![][18]
|
||||
|
||||
按 `(Ctrl+b), w` 以交互方式选择当前窗口。
|
||||
|
||||
![][19]
|
||||
|
||||
### 如何缩放窗格
|
||||
|
||||
你正在一些非常小的窗格中工作,并且你希望将其缩小以进行进一步的工作。要做到这一点,使用以下键绑定。
|
||||
|
||||
目前我们有三个窗格,我在 `pane1` 工作,它使用 **Top** 命令显示系统活动信息,我将缩放它。
|
||||
![][17]
|
||||
|
||||
缩放窗格时,它将隐藏所有其它窗格,并只显示窗口中的缩放窗格。
|
||||
|
||||
![][20]
|
||||
|
||||
按 `(Ctrl+b), z` 缩放窗格并再次按下它,使缩放窗格恢复原状。
|
||||
|
||||
### 显示窗格信息
|
||||
|
||||
要了解窗格编号及其大小,运行以下命令。
|
||||
|
||||
按 `(Ctrl+b), q` 可简单显示窗格索引。
|
||||
![][21]
|
||||
|
||||
### 显示窗口信息
|
||||
|
||||
要知道窗口编号,布局大小,与窗口关联的窗格数量及其大小等,运行以下命令。
|
||||
|
||||
只需运行 `tmux list-windows` 即可查看窗口信息。
|
||||
![][22]
|
||||
|
||||
### 如何调整窗格大小
|
||||
|
||||
你可能需要调整窗格大小来满足你的要求。你必须按下 `(Ctrl+b), :`,然后在页面底部的 `黄色(yellow)` 颜色条上输入以下详细信息。
|
||||
![][23]
|
||||
|
||||
在上一部分中,我们有打印了窗格索引,它同时也显示了窗格大小。为了测试,我们要向上增加 `10` 个单元。参考以下输出,该窗格将 pane1 和 pane2 的大小从 `55x21` 增加到 `55x31`。
|
||||
![][24]
|
||||
|
||||
**语法:** `(Ctrl+b), :` 然后输入 `resize-pane [options] [cells size]`
|
||||
|
||||
`(Ctrl+b), :` 然后输入 `resize-pane -D 10` 将当前窗格大小向下调整 10 个单元。
|
||||
|
||||
`(Ctrl+b), :` 然后输入 `resize-pane -U 10` 将当前窗格大小向上调整 10 个单元。
|
||||
|
||||
`(Ctrl+b), :` 然后输入 `resize-pane -L 10` 将当前窗格大小向左调整 10 个单元。
|
||||
|
||||
`(Ctrl+b), :` 然后输入 `resize-pane -R 10` 将当前窗格大小向右调整 10 个单元。
|
||||
|
||||
### 分离并重新连接 tmux 会话
|
||||
|
||||
tmux 最强大的功能之一是能够在需要时分离和重新连接会话。
|
||||
|
||||
运行一个长时间运行的进程,然后按下 `Ctrl+b`,接着按 `d`,通过离开正在运行的进程安全地分离你的 tmux 会话。
|
||||
|
||||
**建议阅读:** [如何在断开 SSH 会话后保持进程/命令继续运行][25]
|
||||
|
||||
现在,运行一个长时间运行的进程。出于演示目的,我们将把此服务器备份移动到另一个远程服务器以进行灾难恢复(DR)。
|
||||
|
||||
```
|
||||
$ rsync -avzhe ssh /backup root@192.168.0.161:/backups/week-1/
|
||||
```
|
||||
|
||||
在分离 tmux 会话之后,你将获得类似下面的输出。
|
||||
|
||||
```
|
||||
[detached (from session 0)]
|
||||
```
|
||||
|
||||
运行以下命令以列出可用的 tmux 会话。
|
||||
```
|
||||
$ tmux ls
|
||||
0: 3 windows (created Tue Jan 30 06:17:47 2018) [109x45]
|
||||
```
|
||||
|
||||
现在,使用适当的会话 ID 重新连接 tmux 会话,如下所示:
|
||||
```
|
||||
$ tmux attach -t 0
|
||||
```
|
||||
|
||||
### 如何关闭窗格和窗口
|
||||
|
||||
只需在相应的窗格中输入 `exit` 或按下 `Ctrl-d` 即可关闭它,和终端关闭类似。要关闭窗口,按下 `(Ctrl+b), &`。
|
||||
|
||||
好了,就到这里了,希望你喜欢上它。
|
||||
(to 校正:这句话是加的,感觉它结尾很突然,可以删掉。)
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.2daygeek.com/tmux-a-powerful-terminal-multiplexer-emulator-for-linux/
|
||||
|
||||
作者:[Magesh Maruthamuthu][a]
|
||||
译者:[MjSeven](https://github.com/MjSeven)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.2daygeek.com/author/magesh/
|
||||
[1]:https://www.2daygeek.com/category/terminal-emulator/
|
||||
[2]:https://www.2daygeek.com/tmate-instantly-share-your-terminal-session-to-anyone-in-seconds/
|
||||
[3]:https://www.2daygeek.com/teleconsole-share-terminal-session-instantly-to-anyone-in-seconds/
|
||||
[4]:https://www.2daygeek.com/apt-get-apt-cache-command-examples-manage-packages-debian-ubuntu-systems/
|
||||
[5]:https://www.2daygeek.com/apt-command-examples-manage-packages-debian-ubuntu-systems/
|
||||
[6]:https://www.2daygeek.com/yum-command-examples-manage-packages-rhel-centos-systems/
|
||||
[7]:https://www.2daygeek.com/dnf-command-examples-manage-packages-fedora-system/
|
||||
[8]:https://www.2daygeek.com/pacman-command-examples-manage-packages-arch-linux-system/
|
||||
[9]:https://www.2daygeek.com/zypper-command-examples-manage-packages-opensuse-system/
|
||||
[10]:data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
|
||||
[11]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-1.png
|
||||
[13]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-2.png
|
||||
[14]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-3.png
|
||||
[15]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-4.png
|
||||
[16]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-5.png
|
||||
[17]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-8.png
|
||||
[18]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-6.png
|
||||
[19]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-7.png
|
||||
[20]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-9.png
|
||||
[21]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-10.png
|
||||
[22]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-14.png
|
||||
[23]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-11.png
|
||||
[24]:https://www.2daygeek.com/wp-content/uploads/2018/01/tmux-a-powerful-terminal-multiplexer-emulator-for-linux-13.png
|
||||
[25]:https://www.2daygeek.com/how-to-keep-a-process-command-running-after-disconnecting-ssh-session/
|
@ -0,0 +1,80 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Bash 5.0 Released with New Features)
|
||||
[#]: via: (https://itsfoss.com/bash-5-release)
|
||||
[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
|
||||
|
||||
Bash 5.0 发布了新功能
|
||||
======
|
||||
|
||||
[邮件列表][1]证实最近发布了 Bash-5.0。而且,令人兴奋的是它还有新功能和新变量。
|
||||
|
||||
如果你一直在使用 Bash 4.4.XX,那么你一定会喜欢 [Bash][2] 的第五个主要版本。
|
||||
|
||||
第五个版本侧重于新的 shell 变量和许多重大漏洞修复。它还引入了一些新功能还有一些让 bash-4.4 和 bash-5.0 之间不兼容的更改。
|
||||
|
||||
![Bash logo][3]
|
||||
|
||||
### 新功能怎么样?
|
||||
|
||||
邮件列表解释了此版本中修复的 bug:
|
||||
|
||||
> 此版本修复了 bash-4.4 中的几个主要错误,并引入了几个新功能。最重要的 bug 修复是对 nameref 变量的解析以及通过模糊测试发现的许多潜在的内存越界错误。在为了符合 Posix 标准解释而不进行单词拆分的上下文中,对 $@ 和 $* 的展开做了许多变化,另外还有解决极端情况中 Posix 一致性的修改。
|
||||
|
||||
它还引入了一些新功能。根据发布说明,最值得注意的新功能是几个新的 shell 变量:
|
||||
|
||||
> BASH_ARGV0、EPOCHSECONDS 和 EPOCHREALTIME。内置的 “history” 可以删除指定范围的条目,并能将负数理解为从历史末端开始的偏移量。有一个选项允许局部变量继承前一个范围内具有相同名称的变量的值。有一个新的shell选项,在启用它时,会导致 shell 只尝试一次扩展关联数组下标(这在算术表达式中使用时会出现问题)。“globasciiranges” 这个 shell 选项现在默认启用。可以在配置时默认关闭它。
|
||||
|
||||
### Bash-4.4 和 Bash-5.0 之间有哪些变化?
|
||||
|
||||
更新日志提到了不兼容的更改和支持 readline 版本历史记录。它是这么说的:
|
||||
|
||||
> bash-4.4 和 bash-5.0 之间存在一些不兼容的变化。尽管我已经尽量最小化兼容性问题,但是对 nameref 变量解析的更改意味着对 namerefs 的某些使用会有不同的行为。默认情况下,如果启用了扩展调试模式,shell 仅在启动时设置 BASH_ARGC 和 BASH_ARGV。它被无条件地设置是一个疏忽,并且在脚本传递大量参数时会导致性能问题。
|
||||
>
|
||||
>如果需要,可以将 Bash 链接到已安装的 Readline 库,而不是 lib/readline 中的私有版本。只有 readline-8.0 及更高版本能够提供 bash-5.0 所需的所有符号。早期版本的 Readline 库无法正常工作。
|
||||
|
||||
我相信一些添加的功能/变量非常有用。我最喜欢的一些是:
|
||||
|
||||
* 有一个新的(默认情况下禁用,文档中没有说明)shell 选项,用于在运行时启用/禁用向 syslog 发送历史记录。
|
||||
* 正如文档一直所说的那样,除非 shell 处于调试模式,否则它不会在启动时自动设置 BASH_ARGC 和 BASH_ARGV,但如果脚本在上层引用它们且没有启用调试模式,那么 shell 将动态创建它们。
|
||||
* 现在可以使用 “-d start-end” 删除指定范围的 “history” 条目。
|
||||
* 如果启用了作业控制的非交互式 shell 检测到前台作业因 SIGINT 而死亡,则其行为就像接收到 SIGINT 一样。
|
||||
* BASH_ARGV0:一个新变量,扩展为 $0 并在赋值时设置 $0。
|
||||
|
||||
|
||||
|
||||
要查看完整的更改和功能列表,请参阅[邮件列表文章][1]。
|
||||
|
||||
### 总结
|
||||
|
||||
你可以使用下面的命令检查你当前的 Bash 版本:
|
||||
|
||||
```
|
||||
bash --version
|
||||
```
|
||||
|
||||
你很可能安装了 Bash 4.4。如果你想获得新版本,我建议等待你的发行版提供它。
|
||||
|
||||
你怎么看待 Bash-5.0 发布?你在使用其他 bash 的替代品么?如果有的话,这个更新会改变你的想法么?
|
||||
|
||||
请在下面的评论中告诉我们你的想法。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/bash-5-release
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://lists.gnu.org/archive/html/bug-bash/2019-01/msg00063.html
|
||||
[2]: https://www.gnu.org/software/bash/
|
||||
[3]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/01/bash-logo.jpg?resize=800%2C450&ssl=1
|
Loading…
Reference in New Issue
Block a user