mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-01-25 23:11:02 +08:00
commit
7789125e60
108
published/20190409 5 open source mobile apps.md
Normal file
108
published/20190409 5 open source mobile apps.md
Normal file
@ -0,0 +1,108 @@
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "fuzheng1998"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-10931-1.html"
|
||||
[#]: subject: "5 open source mobile apps"
|
||||
[#]: via: "https://opensource.com/article/19/4/mobile-apps"
|
||||
[#]: author: "Chris Hermansen https://opensource.com/users/clhermansen/users/bcotton/users/clhermansen/users/bcotton/users/clhermansen"
|
||||
|
||||
5 个可以满足你的生产力、沟通和娱乐需求的开源手机应用
|
||||
======
|
||||
|
||||
> 你可以依靠这些应用来满足你的生产力、沟通和娱乐需求。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/201906/03/001949brnq19j5qeqn3onv.jpg)
|
||||
|
||||
像世界上大多数人一样,我的手似乎就没有离开过手机。多亏了我从 Google Play 和 F-Droid 安装的开源移动应用程序,让我的 Android 设备好像提供了无限的沟通、生产力和娱乐服务一样。
|
||||
|
||||
在我的手机上的许多开源应用程序中,当想听音乐、与朋友/家人和同事联系、或者在旅途中完成工作时,以下五个是我一直使用的。
|
||||
|
||||
### MPDroid
|
||||
|
||||
一个音乐播放器进程 (MPD)的 Android 控制器。
|
||||
|
||||
![MPDroid][2]
|
||||
|
||||
MPD 是将音乐从小型音乐服务器电脑传输到大型的黑色立体声音箱的好方法。它直连 ALSA,因此可以通过 ALSA 硬件接口与数模转换器(DAC)对话,它可以通过我的网络进行控制——但是用什么东西控制呢?好吧,事实证明 MPDroid 是一个很棒的 MPD 控制器。它可以管理我的音乐数据库,显示专辑封面,处理播放列表,并支持互联网广播。而且它是开源的,所以如果某些东西不好用的话……
|
||||
|
||||
MPDroid 可在 [Google Play][4] 和 [F-Droid][5] 上找到。
|
||||
|
||||
### RadioDroid
|
||||
|
||||
一台能单独使用及与 Chromecast 搭配使用的 Android 网络收音机。
|
||||
|
||||
![RadioDroid][6]
|
||||
|
||||
RadioDroid 是一个网络收音机,而 MPDroid 则管理我音乐的数据库;从本质上讲,RadioDroid 是 [Internet-Radio.com][7] 的一个前端。此外,通过将耳机插入 Android 设备,通过耳机插孔或 USB 将 Android 设备直接连接到立体声系统,或通过兼容设备使用其 Chromecast 功能,可以享受 RadioDroid。这是一个查看芬兰天气情况,听取排名前 40 的西班牙语音乐,或收到到最新新闻消息的好方法。
|
||||
|
||||
RadioDroid 可在 [Google Play][8] 和 [F-Droid][9] 上找到。
|
||||
|
||||
### Signal
|
||||
|
||||
一个支持 Android、iOS,还有桌面系统的安全即时消息客户端。
|
||||
|
||||
![Signal][10]
|
||||
|
||||
如果你喜欢 WhatsApp,但是因为它与 Facebook [日益密切][11]的关系而感到困扰,那么 Signal 应该是你的下一个产品。Signal 的唯一问题是说服你的朋友们最好用 Signal 取代 WhatsApp。但除此之外,它有一个与 WhatsApp 类似的界面;很棒的语音和视频通话;很好的加密;恰到好处的匿名;并且它受到了一个不打算通过使用软件来获利的基金会的支持。为什么不喜欢它呢?
|
||||
|
||||
Signal 可用于 [Android][12]、[iOS][13] 和 [桌面][14]。
|
||||
|
||||
### ConnectBot
|
||||
|
||||
Android SSH 客户端。
|
||||
|
||||
![ConnectBot][15]
|
||||
|
||||
有时我离电脑很远,但我需要登录服务器才能办事。[ConnectBot][16] 是将 SSH 会话搬到手机上的绝佳解决方案。
|
||||
|
||||
ConnectBot 可在 [Google Play][17] 上找到。
|
||||
|
||||
### Termux
|
||||
|
||||
有多种熟悉的功能的安卓终端模拟器。
|
||||
|
||||
![Termux][18]
|
||||
|
||||
你是否需要在手机上运行 `awk` 脚本?[Termux][19] 是个解决方案。如果你需要做终端类的工作,而且你不想一直保持与远程计算机的 SSH 连接,请使用 ConnectBot 将文件放到手机上,然后退出会话,在 Termux 中执行你的操作,用 ConnectBot 发回结果。
|
||||
|
||||
Termux 可在 [Google Play][20] 和 [F-Droid][21] 上找到。
|
||||
|
||||
* * *
|
||||
|
||||
你最喜欢用于工作或娱乐的开源移动应用是什么呢?请在评论中分享它们。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/4/mobile-apps
|
||||
|
||||
作者:[Chris Hermansen][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[fuzheng1998](https://github.com/fuzheng1998)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/clhermansen/users/bcotton/users/clhermansen/users/bcotton/users/clhermansen
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003588_01_rd3os.combacktoschoolserieshe_rh_041x_0.png?itok=tfg6_I78
|
||||
[2]: https://opensource.com/sites/default/files/uploads/mpdroid.jpg "MPDroid"
|
||||
[3]: https://opensource.com/article/17/4/fun-new-gadget
|
||||
[4]: https://play.google.com/store/apps/details?id=com.namelessdev.mpdroid&hl=en_US
|
||||
[5]: https://f-droid.org/en/packages/com.namelessdev.mpdroid/
|
||||
[6]: https://opensource.com/sites/default/files/uploads/radiodroid.png "RadioDroid"
|
||||
[7]: https://www.internet-radio.com/
|
||||
[8]: https://play.google.com/store/apps/details?id=net.programmierecke.radiodroid2
|
||||
[9]: https://f-droid.org/en/packages/net.programmierecke.radiodroid2/
|
||||
[10]: https://opensource.com/sites/default/files/uploads/signal.png "Signal"
|
||||
[11]: https://opensource.com/article/19/3/open-messenger-client
|
||||
[12]: https://play.google.com/store/apps/details?id=org.thoughtcrime.securesms
|
||||
[13]: https://itunes.apple.com/us/app/signal-private-messenger/id874139669?mt=8
|
||||
[14]: https://signal.org/download/
|
||||
[15]: https://opensource.com/sites/default/files/uploads/connectbot.png "ConnectBot"
|
||||
[16]: https://connectbot.org/
|
||||
[17]: https://play.google.com/store/apps/details?id=org.connectbot
|
||||
[18]: https://opensource.com/sites/default/files/uploads/termux.jpg "Termux"
|
||||
[19]: https://termux.com/
|
||||
[20]: https://play.google.com/store/apps/details?id=com.termux
|
||||
[21]: https://f-droid.org/packages/com.termux/
|
@ -1,8 +1,8 @@
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "FSSlc"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-10930-1.html"
|
||||
[#]: subject: "Inter-process communication in Linux: Sockets and signals"
|
||||
[#]: via: "https://opensource.com/article/19/4/interprocess-communication-linux-networking"
|
||||
[#]: author: "Marty Kalin https://opensource.com/users/mkalindepauledu"
|
||||
@ -10,21 +10,21 @@
|
||||
Linux 下的进程间通信:套接字和信号
|
||||
======
|
||||
|
||||
学习在 Linux 中进程是如何与其他进程进行同步的。
|
||||
> 学习在 Linux 中进程是如何与其他进程进行同步的。
|
||||
|
||||
![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/mesh_networking_dots_connected.png?itok=ovINTRR3)
|
||||
![](https://img.linux.net.cn/data/attachment/album/201906/02/234437y6gig4tg4yy94356.jpg)
|
||||
|
||||
本篇是 Linux 下[进程间通信][1](IPC)系列的第三篇同时也是最后一篇文章。[第一篇文章][2]聚焦在通过共享存储(文件和共享内存段)来进行 IPC,[第二篇文章][3]则通过管道(无名的或者有名的)及消息队列来达到相同的目的。这篇文章将目光从高处(套接字)然后到低处(信号)来关注 IPC。代码示例将用力地充实下面的解释细节。
|
||||
本篇是 Linux 下[进程间通信][1](IPC)系列的第三篇同时也是最后一篇文章。[第一篇文章][2]聚焦在通过共享存储(文件和共享内存段)来进行 IPC,[第二篇文章][3]则通过管道(无名的或者命名的)及消息队列来达到相同的目的。这篇文章将目光从高处(套接字)然后到低处(信号)来关注 IPC。代码示例将用力地充实下面的解释细节。
|
||||
|
||||
### 套接字
|
||||
|
||||
正如管道有两种类型(有名和无名)一样,套接字也有两种类型。IPC 套接字(即 Unix domain socket)给予进程在相同设备(主机)上基于通道的通信能力;而网络套接字给予进程运行在不同主机的能力,因此也带来了网络通信的能力。网络套接字需要底层协议的支持,例如 TCP(传输控制协议)或 UDP(用户数据报协议)。
|
||||
正如管道有两种类型(命名和无名)一样,套接字也有两种类型。IPC 套接字(即 Unix 套接字)给予进程在相同设备(主机)上基于通道的通信能力;而网络套接字给予进程运行在不同主机的能力,因此也带来了网络通信的能力。网络套接字需要底层协议的支持,例如 TCP(传输控制协议)或 UDP(用户数据报协议)。
|
||||
|
||||
与之相反,IPC 套接字依赖于本地系统内核的支持来进行通信;特别的,IPC 通信使用一个本地的文件作为套接字地址。尽管这两种套接字的实现有所不同,但在本质上,IPC 套接字和网络套接字的 API 是一致的。接下来的例子将包含网络套接字的内容,但示例服务器和客户端程序可以在相同的机器上运行,因为服务器使用了 localhost(127.0.0.1)这个网络地址,该地址表示的是本地机器上的本地机器的地址。
|
||||
与之相反,IPC 套接字依赖于本地系统内核的支持来进行通信;特别的,IPC 通信使用一个本地的文件作为套接字地址。尽管这两种套接字的实现有所不同,但在本质上,IPC 套接字和网络套接字的 API 是一致的。接下来的例子将包含网络套接字的内容,但示例服务器和客户端程序可以在相同的机器上运行,因为服务器使用了 `localhost`(127.0.0.1)这个网络地址,该地址表示的是本地机器上的本地机器地址。
|
||||
|
||||
套接字以流的形式(下面将会讨论到)被配置为双向的,并且其控制遵循 C/S(客户端/服务器端)模式:客户端通过尝试连接一个服务器来初始化对话,而服务器端将尝试接受该连接。假如万事顺利,来自客户端的请求和来自服务器端的响应将通过管道进行传输,直到其中任意一方关闭该通道,从而断开这个连接。
|
||||
|
||||
一个`迭代服务器`(只适用于开发)将一直和连接它的客户端打交道:从最开始服务第一个客户端,然后到这个连接关闭,然后服务第二个客户端,循环往复。这种方式的一个缺点是处理一个特定的客户端可能会一直持续下去,使得其他的客户端一直在后面等待。生产级别的服务器将是并发的,通常使用了多进程或者多线程的混合。例如,我台式机上的 Nginx 网络服务器有一个 4 个 worker 的进程池,它们可以并发地处理客户端的请求。在下面的代码示例中,我们将使用迭代服务器,使得我们将要处理的问题达到一个很小的规模,只关注基本的 API,而不去关心并发的问题。
|
||||
一个迭代服务器(只适用于开发)将一直和连接它的客户端打交道:从最开始服务第一个客户端,然后到这个连接关闭,然后服务第二个客户端,循环往复。这种方式的一个缺点是处理一个特定的客户端可能会挂起,使得其他的客户端一直在后面等待。生产级别的服务器将是并发的,通常使用了多进程或者多线程的混合。例如,我台式机上的 Nginx 网络服务器有一个 4 个<ruby>工人<rt>worker</rt></ruby>的进程池,它们可以并发地处理客户端的请求。在下面的代码示例中,我们将使用迭代服务器,使得我们将要处理的问题保持在一个很小的规模,只关注基本的 API,而不去关心并发的问题。
|
||||
|
||||
最后,随着各种 POSIX 改进的出现,套接字 API 随着时间的推移而发生了显著的变化。当前针对服务器端和客户端的示例代码特意写的比较简单,但是它着重强调了基于流的套接字中连接的双方。下面是关于流控制的一个总结,其中服务器端在一个终端中开启,而客户端在另一个不同的终端中开启:
|
||||
|
||||
@ -108,10 +108,10 @@ int main() {
|
||||
|
||||
上面的服务器端程序执行典型的 4 个步骤来准备回应客户端的请求,然后接受其他的独立请求。这里每一个步骤都以服务器端程序调用的系统函数来命名。
|
||||
|
||||
1. `socket(…)` : 为套接字连接获取一个文件描述符
|
||||
2. `bind(…)` : 将套接字和服务器主机上的一个地址进行绑定
|
||||
3. `listen(…)` : 监听客户端请求
|
||||
4. `accept(…)` :接受一个特定的客户端请求
|
||||
1. `socket(…)`:为套接字连接获取一个文件描述符
|
||||
2. `bind(…)`:将套接字和服务器主机上的一个地址进行绑定
|
||||
3. `listen(…)`:监听客户端请求
|
||||
4. `accept(…)`:接受一个特定的客户端请求
|
||||
|
||||
上面的 `socket` 调用的完整形式为:
|
||||
|
||||
@ -121,7 +121,7 @@ int sockfd = socket(AF_INET, /* versus AF_LOCAL */
|
||||
0); /* system picks protocol (TCP) */
|
||||
```
|
||||
|
||||
第一个参数特别指定了使用的是一个网络套接字,而不是 IPC 套接字。对于第二个参数有多种选项,但 `SOCK_STREAM` 和 `SOCK_DGRAM`(数据报)是最为常用的。基于流的套接字支持可信通道,在这种通道中如果发生了信息的丢失或者更改,都将会被报告。这种通道是双向的,并且从一端到另外一端的有效载荷在大小上可以是任意的。相反的,基于数据报的套接字大多是不可信的,没有方向性,并且需要固定大小的载荷。`socket` 的第三个参数特别指定了协议。对于这里展示的基于流的套接字,只有一种协议选择:TCP,在这里表示的 `0`;。因为对 `socket` 的一次成功调用将返回相似的文件描述符,一个套接字将会被读写,对应的语法和读写一个本地文件是类似的。
|
||||
第一个参数特别指定了使用的是一个网络套接字,而不是 IPC 套接字。对于第二个参数有多种选项,但 `SOCK_STREAM` 和 `SOCK_DGRAM`(数据报)是最为常用的。基于流的套接字支持可信通道,在这种通道中如果发生了信息的丢失或者更改,都将会被报告。这种通道是双向的,并且从一端到另外一端的有效载荷在大小上可以是任意的。相反的,基于数据报的套接字大多是不可信的,没有方向性,并且需要固定大小的载荷。`socket` 的第三个参数特别指定了协议。对于这里展示的基于流的套接字,只有一种协议选择:TCP,在这里表示的 `0`。因为对 `socket` 的一次成功调用将返回相似的文件描述符,套接字可以被读写,对应的语法和读写一个本地文件是类似的。
|
||||
|
||||
对 `bind` 的调用是最为复杂的,因为它反映出了在套接字 API 方面上的各种改进。我们感兴趣的点是这个调用将一个套接字和服务器端所在机器中的一个内存地址进行绑定。但对 `listen` 的调用就非常直接了:
|
||||
|
||||
@ -131,9 +131,9 @@ if (listen(fd, MaxConnects) < 0)
|
||||
|
||||
第一个参数是套接字的文件描述符,第二个参数则指定了在服务器端处理一个拒绝连接错误之前,有多少个客户端连接被允许连接。(在头文件 `sock.h` 中 `MaxConnects` 的值被设置为 `8`。)
|
||||
|
||||
`accept` 调用默认将是一个拥塞等待:服务器端将不做任何事情直到一个客户端尝试连接它,然后进行处理。`accept` 函数返回的值如果是 `-1` 则暗示有错误发生。假如这个调用是成功的,则它将返回另一个文件描述符,这个文件描述符被用来指代另一个可读可写的套接字,它与 `accept` 调用中的第一个参数对应的接收套接字有所不同。服务器端使用这个可读可写的套接字来从客户端读取请求然后写回它的回应。接收套接字只被用于接受客户端的连接。
|
||||
`accept` 调用默认将是一个阻塞等待:服务器端将不做任何事情直到一个客户端尝试连接它,然后进行处理。`accept` 函数返回的值如果是 `-1` 则暗示有错误发生。假如这个调用是成功的,则它将返回另一个文件描述符,这个文件描述符被用来指代另一个可读可写的套接字,它与 `accept` 调用中的第一个参数对应的接收套接字有所不同。服务器端使用这个可读可写的套接字来从客户端读取请求然后写回它的回应。接收套接字只被用于接受客户端的连接。
|
||||
|
||||
在设计上,一个服务器端可以一直运行下去。当然服务器端可以通过在命令行中使用 `Ctrl+C` 来终止它。
|
||||
在设计上,服务器端可以一直运行下去。当然服务器端可以通过在命令行中使用 `Ctrl+C` 来终止它。
|
||||
|
||||
#### 示例 2. 使用套接字的客户端
|
||||
|
||||
@ -207,25 +207,25 @@ int main() {
|
||||
if (connect(sockfd, (struct sockaddr*) &saddr, sizeof(saddr)) < 0)
|
||||
```
|
||||
|
||||
对 `connect` 的调用可能因为多种原因而导致失败,例如客户端拥有错误的服务器端地址或者已经有太多的客户端连接上了服务器端。假如 `connect` 操作成功,客户端将在一个 `for` 循环中,写入它的响应然后读取返回的响应。在经过会话后,服务器端和客户端都将调用 `close` 去关闭可读可写套接字,尽管其中一个关闭操作已经足以关闭他们之间的连接,但此时客户端可能就此关闭,但正如前面提到的那样,服务器端将一直保持开放以处理其他事务。
|
||||
对 `connect` 的调用可能因为多种原因而导致失败,例如客户端拥有错误的服务器端地址或者已经有太多的客户端连接上了服务器端。假如 `connect` 操作成功,客户端将在一个 `for` 循环中,写入它的请求然后读取返回的响应。在会话后,服务器端和客户端都将调用 `close` 去关闭这个可读可写套接字,尽管任何一边的关闭操作就足以关闭它们之间的连接。此后客户端可以退出了,但正如前面提到的那样,服务器端可以一直保持开放以处理其他事务。
|
||||
|
||||
从上面的套接示例中,我们看到了请求信息被返回给客户端,这使得客户端和服务器端之间拥有进行丰富对话的可能性。也许这就是套接字的主要魅力。在现代系统中,客户端应用(例如一个数据库客户端)和服务器端通过套接字进行通信非常常见。正如先前提及的那样,本地 IPC 套接字和网络套接字只在某些实现细节上面有所不同,一般来说,IPC 套接字有着更低的消耗和更好的性能。它们的通信 API 基本是一样的。
|
||||
从上面的套接字示例中,我们看到了请求信息被回显给客户端,这使得客户端和服务器端之间拥有进行丰富对话的可能性。也许这就是套接字的主要魅力。在现代系统中,客户端应用(例如一个数据库客户端)和服务器端通过套接字进行通信非常常见。正如先前提及的那样,本地 IPC 套接字和网络套接字只在某些实现细节上面有所不同,一般来说,IPC 套接字有着更低的消耗和更好的性能。它们的通信 API 基本是一样的。
|
||||
|
||||
### 信号
|
||||
|
||||
一个信号中断了一个正在执行的程序,在这种意义下,就是用信号与这个程序进行通信。大多数的信号要么可以被忽略(阻塞)或者被处理(通过特别设计的代码)。`SIGSTOP` (暂停)和 `SIGKILL`(立即停止)是最应该提及的两种信号。符号常数拥有整数类型的值,例如 `SIGKILL` 对应的值为 `9`。
|
||||
信号会中断一个正在执行的程序,在这种意义下,就是用信号与这个程序进行通信。大多数的信号要么可以被忽略(阻塞)或者被处理(通过特别设计的代码)。`SIGSTOP` (暂停)和 `SIGKILL`(立即停止)是最应该提及的两种信号。这种符号常量有整数类型的值,例如 `SIGKILL` 对应的值为 `9`。
|
||||
|
||||
信号可以在与用户交互的情况下发生。例如,一个用户从命令行中敲了 `Ctrl+C` 来从命令行中终止一个程序;`Ctrl+C` 将产生一个 `SIGTERM` 信号。针对终止,`SIGTERM` 信号可以被阻塞或者被处理,而不像 `SIGKILL` 信号那样。一个进程也可以通过信号和另一个进程通信,这样使得信号也可以作为一种 IPC 机制。
|
||||
信号可以在与用户交互的情况下发生。例如,一个用户从命令行中敲了 `Ctrl+C` 来终止一个从命令行中启动的程序;`Ctrl+C` 将产生一个 `SIGTERM` 信号。`SIGTERM` 意即终止,它可以被阻塞或者被处理,而不像 `SIGKILL` 信号那样。一个进程也可以通过信号和另一个进程通信,这样使得信号也可以作为一种 IPC 机制。
|
||||
|
||||
考虑一下一个多进程应用,例如 Nginx 网络服务器是如何被另一个进程优雅地关闭的。`kill` 函数:
|
||||
|
||||
```
|
||||
int kill(pid_t pid, int signum); /* declaration */
|
||||
```
|
||||
bei
|
||||
可以被一个进程用来终止另一个进程或者一组进程。假如 `kill` 函数的第一个参数是大于 `0` 的,那么这个参数将会被认为是目标进程的 pid(进程 ID),假如这个参数是 `0`,则这个参数将会被识别为信号发送者所属的那组进程。
|
||||
|
||||
`kill` 的第二个参数要么是一个标准的信号数字(例如 `SIGTERM` 或 `SIGKILL`),要么是 `0` ,这将会对信号做一次询问,确认第一个参数中的 pid 是否是有效的。这样将一个多进程应用的优雅地关闭就可以通过向组成该应用的一组进程发送一个终止信号来完成,具体来说就是调用一个 `kill` 函数,使得这个调用的第二个参数是 `SIGTERM` 。(Nginx 主进程可以通过调用 `kill` 函数来终止其他 worker 进程,然后再停止自己。)就像许多库函数一样,`kill` 函数通过一个简单的可变语法拥有更多的能力和灵活性。
|
||||
可以被一个进程用来终止另一个进程或者一组进程。假如 `kill` 函数的第一个参数是大于 `0` 的,那么这个参数将会被认为是目标进程的 `pid`(进程 ID),假如这个参数是 `0`,则这个参数将会被视作信号发送者所属的那组进程。
|
||||
|
||||
`kill` 的第二个参数要么是一个标准的信号数字(例如 `SIGTERM` 或 `SIGKILL`),要么是 `0` ,这将会对信号做一次询问,确认第一个参数中的 `pid` 是否是有效的。这样优雅地关闭一个多进程应用就可以通过向组成该应用的一组进程发送一个终止信号来完成,具体来说就是调用一个 `kill` 函数,使得这个调用的第二个参数是 `SIGTERM` 。(Nginx 主进程可以通过调用 `kill` 函数来终止其他工人进程,然后再停止自己。)就像许多库函数一样,`kill` 函数通过一个简单的可变语法拥有更多的能力和灵活性。
|
||||
|
||||
#### 示例 3. 一个多进程系统的优雅停止
|
||||
|
||||
@ -290,9 +290,9 @@ int main() {
|
||||
|
||||
上面的停止程序模拟了一个多进程系统的优雅退出,在这个例子中,这个系统由一个父进程和一个子进程组成。这次模拟的工作流程如下:
|
||||
|
||||
* 父进程尝试去 fork 一个子进程。假如这个 fork 操作成功了,每个进程就执行它自己的代码:子进程就执行函数 `child_code`,而父进程就执行函数 `parent_code`。
|
||||
* 子进程将会进入一个潜在的无限循环,在这个循环中子进程将睡眠一秒,然后打印一个信息,接着再次进入睡眠状态,以此循环往复。来自父进程的一个 `SIGTERM` 信号将引起子进程去执行一个信号处理回调函数 `graceful`。这样这个信号就使得子进程可以跳出循环,然后进行子进程和父进程之间的优雅终止。在终止之前子,进程将打印一个信息。
|
||||
* 在 fork 一个子进程后,父进程将睡眠 5 秒,使得子进程可以执行一会儿;当然在这个模拟中,子进程大多数时间都在睡眠。然后父进程调用 `SIGTERM` 作为第二个参数的 `kill` 函数,等待子进程的终止,然后自己再终止。
|
||||
* 父进程尝试去 `fork` 一个子进程。假如这个 `fork` 操作成功了,每个进程就执行它自己的代码:子进程就执行函数 `child_code`,而父进程就执行函数 `parent_code`。
|
||||
* 子进程将会进入一个潜在的无限循环,在这个循环中子进程将睡眠一秒,然后打印一个信息,接着再次进入睡眠状态,以此循环往复。来自父进程的一个 `SIGTERM` 信号将引起子进程去执行一个信号处理回调函数 `graceful`。这样这个信号就使得子进程可以跳出循环,然后进行子进程和父进程之间的优雅终止。在终止之前,进程将打印一个信息。
|
||||
* 在 `fork` 一个子进程后,父进程将睡眠 5 秒,使得子进程可以执行一会儿;当然在这个模拟中,子进程大多数时间都在睡眠。然后父进程调用 `SIGTERM` 作为第二个参数的 `kill` 函数,等待子进程的终止,然后自己再终止。
|
||||
|
||||
下面是一次运行的输出:
|
||||
|
||||
@ -309,22 +309,23 @@ Parent sleeping for a time...
|
||||
My child terminated, about to exit myself...
|
||||
```
|
||||
|
||||
对于信号的处理,上面的示例使用了 `sigaction` 库函数(POSIX 推荐的用法)而不是传统的 `signal` 函数,`signal` 函数有轻便性问题。下面是我们主要关心的代码片段:
|
||||
对于信号的处理,上面的示例使用了 `sigaction` 库函数(POSIX 推荐的用法)而不是传统的 `signal` 函数,`signal` 函数有移植性问题。下面是我们主要关心的代码片段:
|
||||
|
||||
* 假如对 `fork` 的调用成功了,父进程将执行 `parent_code` 函数,而子进程将执行 `child_code` 函数。在给子进程发送信号之前,父进程将会等待 5 秒:
|
||||
* 假如对 `fork` 的调用成功了,父进程将执行 `parent_code` 函数,而子进程将执行 `child_code` 函数。在给子进程发送信号之前,父进程将会等待 5 秒:
|
||||
|
||||
```
|
||||
puts("Parent sleeping for a time...");
|
||||
```
|
||||
puts("Parent sleeping for a time...");
|
||||
sleep(5);
|
||||
if (-1 == kill(cpid, SIGTERM)) {
|
||||
...sleepkillcpidSIGTERM...
|
||||
```
|
||||
|
||||
假如 `kill` 调用成功了,父进程将在子进程终止时做等待,使得子进程不会变成一个僵尸进程。在等待完成后,父进程再退出。
|
||||
* `child_code` 函数首先调用 `set_handler` 然后进入它的可能永久睡眠的循环。下面是我们将要查看的 `set_handler` 函数:
|
||||
假如 `kill` 调用成功了,父进程将在子进程终止时做等待,使得子进程不会变成一个僵尸进程。在等待完成后,父进程再退出。
|
||||
|
||||
```
|
||||
void set_handler() {
|
||||
* `child_code` 函数首先调用 `set_handler` 然后进入它的可能永久睡眠的循环。下面是我们将要查看的 `set_handler` 函数:
|
||||
|
||||
```
|
||||
void set_handler() {
|
||||
struct sigaction current; /* current setup */
|
||||
sigemptyset(¤t.sa_mask); /* clear the signal set */
|
||||
current.sa_flags = 0; /* for setting sa_handler, not sa_action */
|
||||
@ -333,21 +334,22 @@ if (-1 == kill(cpid, SIGTERM)) {
|
||||
}
|
||||
```
|
||||
|
||||
上面代码的前三行在做相关的准备。第四个语句将为 `graceful` 设定 handler ,它将在调用 `_exit` 来停止之前打印一些信息。第 5 行和最后一行的语句将通过调用 `sigaction` 来向系统注册上面的 handler。`sigaction` 的第一个参数是 `SIGTERM` ,用作终止;第二个参数是当前的 `sigaction` 设定,而最后的参数(在这个例子中是 `NULL` )可被用来保存前面的 `sigaction` 设定,以备后面的可能使用。
|
||||
上面代码的前三行在做相关的准备。第四个语句将为 `graceful` 设定为句柄,它将在调用 `_exit` 来停止之前打印一些信息。第 5 行和最后一行的语句将通过调用 `sigaction` 来向系统注册上面的句柄。`sigaction` 的第一个参数是 `SIGTERM` ,用作终止;第二个参数是当前的 `sigaction` 设定,而最后的参数(在这个例子中是 `NULL` )可被用来保存前面的 `sigaction` 设定,以备后面的可能使用。
|
||||
|
||||
使用信号来作为 IPC 的确是一个很轻量的方法,但确实值得尝试。通过信号来做 IPC 显然可以被归入 IPC 工具箱中。
|
||||
|
||||
### 这个系列的总结
|
||||
|
||||
在这个系列中,我们通过三篇有关 IPC 的文章,用示例代码介绍了如下机制:
|
||||
|
||||
* 共享文件
|
||||
* 共享内存(通过信号量)
|
||||
* 管道(有名和无名)
|
||||
* 管道(命名和无名)
|
||||
* 消息队列
|
||||
* 套接字
|
||||
* 信号
|
||||
|
||||
甚至在今天,在以线程为中心的语言,例如 Java、C# 和 Go 等变得越来越流行的情况下,IPC 仍然很受欢迎,因为相比于使用多线程,通过多进程来实现并发有着一个明显的优势:默认情况下,每个进程都有它自己的地址空间,除非使用了基于共享内存的 IPC 机制(为了达到安全的并发,竞争条件在多线程和多进程的时候必须被加上锁。),在多进程中可以排除掉基于内存的竞争条件。对于任何一个写过甚至是通过共享变量来通信的基本多线程程序的人来说,TA 都会知道想要写一个清晰、高效、线程安全的代码是多么具有挑战性。使用单线程的多进程的确是很有吸引力的,这是一个切实可行的方式,使用它可以利用好今天多处理器的机器,而不需要面临基于内存的竞争条件的风险。
|
||||
甚至在今天,在以线程为中心的语言,例如 Java、C# 和 Go 等变得越来越流行的情况下,IPC 仍然很受欢迎,因为相比于使用多线程,通过多进程来实现并发有着一个明显的优势:默认情况下,每个进程都有它自己的地址空间,除非使用了基于共享内存的 IPC 机制(为了达到安全的并发,竞争条件在多线程和多进程的时候必须被加上锁),在多进程中可以排除掉基于内存的竞争条件。对于任何一个写过即使是基本的通过共享变量来通信的多线程程序的人来说,他都会知道想要写一个清晰、高效、线程安全的代码是多么具有挑战性。使用单线程的多进程的确是很有吸引力的,这是一个切实可行的方式,使用它可以利用好今天多处理器的机器,而不需要面临基于内存的竞争条件的风险。
|
||||
|
||||
当然,没有一个简单的答案能够回答上述 IPC 机制中的哪一个更好。在编程中每一种 IPC 机制都会涉及到一个取舍问题:是追求简洁,还是追求功能强大。以信号来举例,它是一个相对简单的 IPC 机制,但并不支持多个进程之间的丰富对话。假如确实需要这样的对话,另外的选择可能会更合适一些。带有锁的共享文件则相对直接,但是当要处理大量共享的数据流时,共享文件并不能很高效地工作。管道,甚至是套接字,有着更复杂的 API,可能是更好的选择。让具体的问题去指导我们的选择吧。
|
||||
|
||||
@ -360,13 +362,13 @@ via: https://opensource.com/article/19/4/interprocess-communication-linux-networ
|
||||
作者:[Marty Kalin][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[FSSlc](https://github.com/FSSlc)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/mkalindepauledu
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://en.wikipedia.org/wiki/Inter-process_communication
|
||||
[2]: https://opensource.com/article/19/4/interprocess-communication-ipc-linux-part-1
|
||||
[3]: https://opensource.com/article/19/4/interprocess-communication-ipc-linux-part-2
|
||||
[2]: https://linux.cn/article-10826-1.html
|
||||
[3]: https://linux.cn/article-10845-1.html
|
||||
[4]: http://condor.depaul.edu/mkalin
|
@ -0,0 +1,69 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-10926-1.html)
|
||||
[#]: subject: (4 open source apps for plant-based diets)
|
||||
[#]: via: (https://opensource.com/article/19/4/apps-plant-based-diets)
|
||||
[#]: author: (Joshua Allen Holm https://opensource.com/users/holmja)
|
||||
|
||||
4 款“吃草”的开源应用
|
||||
======
|
||||
|
||||
> 这些应用使素食者、纯素食主义者和那些想吃得更健康的杂食者找到可以吃的食物。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/201906/01/193302nompumppxnmnxirz.jpg)
|
||||
|
||||
减少对肉类、乳制品和加工食品的消费对地球来说更好,也对你的健康更有益。改变你的饮食习惯可能很困难,但是一些开源的 Android 应用可以让你吃的更清淡。无论你是参加[无肉星期一][2]、践行 Mark Bittman 的 [6:00 前的素食][3]指南,还是完全切换到<ruby>[植物全食饮食][4]<rt>whole-food, plant-based diet</rt></ruby>(WFPB),这些应用能帮助你找出要吃什么、发现素食和素食友好的餐馆,并轻松地将你的饮食偏好传达给他人,来助你更好地走这条路。所有这些应用都是开源的,可从 [F-Droid 仓库][5]下载。
|
||||
|
||||
### Daily Dozen
|
||||
|
||||
![Daily Dozen app][6]
|
||||
|
||||
[Daily Dozen][7] 提供了医学博士、美国法医学会院士(FACLM) Michael Greger 推荐的项目清单作为健康饮食和生活方式的一部分。Greger 博士建议食用由多种食物组成的基于植物的全食饮食,并坚持日常锻炼。该应用可以让你跟踪你吃的每种食物的份数,你喝了多少份水(或其他获准的饮料,如茶),以及你是否每天锻炼。每类食物都提供食物分量和属于该类别的食物清单。例如,十字花科蔬菜类包括白菜、花椰菜、抱子甘蓝等许多其他建议。
|
||||
|
||||
### Food Restrictions
|
||||
|
||||
![Food Restrictions app][8]
|
||||
|
||||
[Food Restrictions][9] 是一个简单的应用,它可以帮助你将你的饮食限制传达给他人,即使这些人不会说你的语言。用户可以输入七种不同类别的食物限制:鸡肉、牛肉、猪肉、鱼、奶酪、牛奶和辣椒。每种类别都有“我不吃”和“我过敏”选项。“不吃”选项会显示带有红色 X 的图标。“过敏” 选项显示 “X” 和小骷髅图标。可以使用文本而不是图标显示相同的信息,但文本仅提供英语和葡萄牙语。还有一个选项可以显示一条文字信息,说明用户是素食主义者或纯素食主义者,它比选择选项更简洁、更准确地总结了这些饮食限制。纯素食主义者的文本清楚地提到不吃鸡蛋和蜂蜜,这在选择选项中是没有的。但是,就像选择选项方式的文字版本一样,这些句子仅提供英语和葡萄牙语。
|
||||
|
||||
### OpenFoodFacts
|
||||
|
||||
![Open Food Facts app][10]
|
||||
|
||||
购买杂货时避免买入不必要的成分可能令人沮丧,但 [OpenFoodFacts][11] 可以帮助简化流程。该应用可让你扫描产品上的条形码,以获得有关产品成分和是否健康的报告。即使产品符合纯素产品的标准,产品仍然可能非常不健康。拥有成分列表和营养成分可让你在购物时做出明智的选择。此应用的唯一缺点是数据是用户贡献的,因此并非每个产品都可有数据,但如果你想回馈项目,你可以贡献新数据。
|
||||
|
||||
### OpenVegeMap
|
||||
|
||||
![OpenVegeMap app][12]
|
||||
|
||||
使用 [OpenVegeMap][13] 查找你附近的纯素食或素食主义餐厅。此应用可以通过手机的当前位置或者输入地址来搜索。餐厅分类为仅限纯素食者、适合纯素食者,仅限素食主义者,适合素食者,非素食和未知。该应用使用来自 [OpenStreetMap][14] 的数据和用户提供的有关餐馆的信息,因此请务必仔细检查以确保所提供的信息是最新且准确的。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/4/apps-plant-based-diets
|
||||
|
||||
作者:[Joshua Allen Holm][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/holmja
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003588_01_rd3os.combacktoschoolserieshe_rh_041x_0.png?itok=tfg6_I78
|
||||
[2]: https://www.meatlessmonday.com/
|
||||
[3]: https://www.amazon.com/dp/0385344740/
|
||||
[4]: https://nutritionstudies.org/whole-food-plant-based-diet-guide/
|
||||
[5]: https://f-droid.org/
|
||||
[6]: https://opensource.com/sites/default/files/uploads/daily_dozen.png (Daily Dozen app)
|
||||
[7]: https://f-droid.org/en/packages/org.nutritionfacts.dailydozen/
|
||||
[8]: https://opensource.com/sites/default/files/uploads/food_restrictions.png (Food Restrictions app)
|
||||
[9]: https://f-droid.org/en/packages/br.com.frs.foodrestrictions/
|
||||
[10]: https://opensource.com/sites/default/files/uploads/openfoodfacts.png (Open Food Facts app)
|
||||
[11]: https://f-droid.org/en/packages/openfoodfacts.github.scrachx.openfood/
|
||||
[12]: https://opensource.com/sites/default/files/uploads/openvegmap.png (OpenVegeMap app)
|
||||
[13]: https://f-droid.org/en/packages/pro.rudloff.openvegemap/
|
||||
[14]: https://www.openstreetmap.org/
|
@ -1,8 +1,8 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (cycoe)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-10929-1.html)
|
||||
[#]: subject: (Monitoring CPU and GPU Temperatures on Linux)
|
||||
[#]: via: (https://itsfoss.com/monitor-cpu-gpu-temp-linux/)
|
||||
[#]: author: (It's FOSS Community https://itsfoss.com/author/itsfoss/)
|
||||
@ -10,15 +10,15 @@
|
||||
在 Linux 上监控 CPU 和 GPU 温度
|
||||
======
|
||||
|
||||
_**摘要:本篇文章讨论了在 Linux 命令行中监控 CPU 和 GPU 温度的两种简单方式。**_
|
||||
> 本篇文章讨论了在 Linux 命令行中监控 CPU 和 GPU 温度的两种简单方式。
|
||||
|
||||
由于 **[Steam][1]**(包括 _[Steam Play][2]_,也就是我们所熟知的 _Proton_)和一些其他的发展,**GNU/Linux** 正在成为越来越多计算机用户的日常游戏平台的选择。也有相当一部分用户在遇到像[视频编辑][3]或图形设计等(_Kdenlive_ 和 _[Blender][4]_ 是这类应用程序中很好的例子)资源消耗型计算任务时,也会使用 **GNU/Linux**。
|
||||
由于 [Steam][1](包括 [Steam Play][2],即 Proton)和一些其他的发展,GNU/Linux 正在成为越来越多计算机用户的日常游戏平台的选择。也有相当一部分用户在遇到像[视频编辑][3]或图形设计等(Kdenlive 和 [Blender][4] 是这类应用程序中很好的例子)资源消耗型计算任务时,也会使用 GNU/Linux。
|
||||
|
||||
不管你是否是这些用户中的一员或其他用户,你也一定想知道你的电脑 CPU 和 GPU 能有多热(如果你想要超频的话更会如此)。如果情况是这样,那么继续读下去。我们会介绍两个非常简单的命令来监控 CPU 和 GPU 温度。
|
||||
不管你是否是这些用户中的一员或其他用户,你也一定想知道你的电脑 CPU 和 GPU 能有多热(如果你想要超频的话更会如此)。如果是这样,那么继续读下去。我们会介绍两个非常简单的命令来监控 CPU 和 GPU 温度。
|
||||
|
||||
我的装置包括一台 [Slimbook Kymera][5] 和两台显示器(一台 TV 和一台 PC 监视器),使得我可以用一台来玩游戏,另一台来留意监控温度。另外,因为我使用 [Zorin OS][6],我会将关注点放在 **Ubuntu** 和 **Ubuntu** 的衍生发行版上。
|
||||
我的装置包括一台 [Slimbook Kymera][5] 和两台显示器(一台 TV 和一台 PC 监视器),使得我可以用一台来玩游戏,另一台来留意监控温度。另外,因为我使用 [Zorin OS][6],我会将关注点放在 Ubuntu 和 Ubuntu 的衍生发行版上。
|
||||
|
||||
为了监控 CPU 和 GPU 的行为,我们将利用实用的 `watch` 命令在每几秒钟之后动态地得到示数。
|
||||
为了监控 CPU 和 GPU 的行为,我们将利用实用的 `watch` 命令在每几秒钟之后动态地得到读数。
|
||||
|
||||
![][7]
|
||||
|
||||
@ -30,7 +30,7 @@ _**摘要:本篇文章讨论了在 Linux 命令行中监控 CPU 和 GPU 温度
|
||||
watch -n 2 sensors
|
||||
```
|
||||
|
||||
`watch` 保证了示数会在每 2 秒钟更新一次(-当然- 这个周期值能够根据你的需要去更改):
|
||||
`watch` 保证了读数会在每 2 秒钟更新一次(当然,这个周期值能够根据你的需要去更改):
|
||||
|
||||
```
|
||||
Every 2,0s: sensors
|
||||
@ -57,28 +57,23 @@ Core 5: +35.0°C (high = +82.0°C, crit = +100.0°C)
|
||||
|
||||
除此之外,我们还能得到如下信息:
|
||||
|
||||
* 我们有 5 个核心正在被使用(并且当前的最高温度为 37.0ºC)。
|
||||
* 温度超过 82.0ºC 会被认为是过热。
|
||||
* 超过 100.0ºC 的温度会被认为是超过临界值。
|
||||
|
||||
|
||||
|
||||
[推荐阅读:Linux 上排行前 10 的命令行游戏][9]
|
||||
|
||||
* 我们有 5 个核心正在被使用(并且当前的最高温度为 37.0℃)。
|
||||
* 温度超过 82.0℃ 会被认为是过热。
|
||||
* 超过 100.0℃ 的温度会被认为是超过临界值。
|
||||
|
||||
根据以上的温度值我们可以得出结论,我的电脑目前的工作负载非常小。
|
||||
|
||||
### 在 Linux 中监控 GPU 温度
|
||||
|
||||
现在让我们来看看显示卡。我从来没使用过 **AMD** 的显示卡,因此我会将重点放在 **Nvidia** 的显示卡上。我们需要做的第一件事是从 [Ubuntu 的附加驱动][10] 中下载合适的最新驱动。
|
||||
现在让我们来看看显卡。我从来没使用过 AMD 的显卡,因此我会将重点放在 Nvidia 的显卡上。我们需要做的第一件事是从 [Ubuntu 的附加驱动][10] 中下载合适的最新驱动。
|
||||
|
||||
在 **Ubuntu**(**Zorin** 或 **Linux Mint** 也是相同的)中,进入_软件和更新_ > _附加驱动_选项,选择最新的可用驱动。另外,你可以添加或启用显示卡的官方 _ppa_(通过命令行或通过_软件和更新_ > _其他软件_来实现)。安装驱动程序后,你将可以使用 _Nvidia X Server_ 的 GUI 程序以及命令行工具 _nvidia-smi_(Nvidia 系统管理界面)。因此我们将使用 `watch` 和 `nvidia-smi`:
|
||||
在 Ubuntu(Zorin 或 Linux Mint 也是相同的)中,进入“软件和更新 > 附加驱动”选项,选择最新的可用驱动。另外,你可以添加或启用显示卡的官方 ppa(通过命令行或通过“软件和更新 > 其他软件”来实现)。安装驱动程序后,你将可以使用 “Nvidia X Server” 的 GUI 程序以及命令行工具 `nvidia-smi`(Nvidia 系统管理界面)。因此我们将使用 `watch` 和 `nvidia-smi`:
|
||||
|
||||
```
|
||||
watch -n 2 nvidia-smi
|
||||
```
|
||||
|
||||
与 CPU 的情况一样,我们会在每两秒得到一次更新的示数:
|
||||
与 CPU 的情况一样,我们会在每两秒得到一次更新的读数:
|
||||
|
||||
```
|
||||
Every 2,0s: nvidia-smi
|
||||
@ -107,16 +102,11 @@ Fri Apr 19 20:45:30 2019
|
||||
从这个表格中我们得到了关于显示卡的如下信息:
|
||||
|
||||
* 它正在使用版本号为 418.56 的开源驱动。
|
||||
* 显示卡的当前温度为 54.0ºC,并且风扇的使用量为 0%。
|
||||
* 显示卡的当前温度为 54.0℃,并且风扇的使用量为 0%。
|
||||
* 电量的消耗非常低:仅仅 10W。
|
||||
* 总量为 6GB 的 vram(视频随机存取存储器),只使用了 433MB。
|
||||
* vram 正在被 3 个进程使用,他们的 ID 分别为 1557、1820 和 7820。
|
||||
|
||||
|
||||
|
||||
[推荐阅读:现在你可以在 Linux 终端中使用谷歌了!][11]
|
||||
|
||||
|
||||
大部分这些事实或数值都清晰地表明,我们没有在玩任何消耗系统资源的游戏或处理大负载的任务。当我们开始玩游戏、处理视频或其他类似任务时,这些值就会开始上升。
|
||||
|
||||
#### 结论
|
||||
@ -129,22 +119,14 @@ Fri Apr 19 20:45:30 2019
|
||||
|
||||
玩得开心!
|
||||
|
||||
![化身][12]
|
||||
|
||||
### Alejandro Egea-Abellán
|
||||
|
||||
It's FOSS 社区贡献者
|
||||
|
||||
我对电子、语言学、爬虫学、计算机(尤其是 GNU/Linux 和 FOSS)有着浓厚兴趣。我通过了 LPIC-2 认证,目前在西班牙穆尔西亚教育部终身学习部们担任技术顾问和 Moodle(译注:Moodle 是一个开源课程管理系统)管理员。我是终身学习、知识共享和计算机用户自由的坚定信奉者。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/monitor-cpu-gpu-temp-linux/
|
||||
|
||||
作者:[It's FOSS Community][a]
|
||||
作者:[Alejandro Egea-Abellán][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[cycoe](https://github.com/cycoe)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -1,8 +1,8 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (way-ww)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-10923-1.html)
|
||||
[#]: subject: (How To Install/Uninstall Listed Packages From A File In Linux?)
|
||||
[#]: via: (https://www.2daygeek.com/how-to-install-uninstall-listed-packages-from-a-file-in-linux/)
|
||||
[#]: author: (Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/)
|
||||
@ -10,25 +10,17 @@
|
||||
如何在 Linux 上安装/卸载一个文件中列出的软件包?
|
||||
======
|
||||
|
||||
在某些情况下,你可能想要将一个服务器上的软件包列表安装到另一个服务器上。
|
||||
在某些情况下,你可能想要将一个服务器上的软件包列表安装到另一个服务器上。例如,你已经在服务器 A 上安装了 15 个软件包并且这些软件包也需要被安装到服务器 B、服务器 C 上等等。
|
||||
|
||||
例如,你已经在服务器A 上安装了 15 个软件包并且这些软件包也需要被安装到服务器B,服务器C 上等等。
|
||||
我们可以手动去安装这些软件但是这将花费大量的时间。你可以手动安装一俩个服务器,但是试想如果你有大概十个服务器呢。在这种情况下你无法手动完成工作,那么怎样才能解决问题呢?
|
||||
|
||||
我们可以手动去安装这些软件但是这将花费大量的时间。
|
||||
|
||||
你可以手动安装一俩个服务器,但是试想如果你有大概十个服务器呢。
|
||||
|
||||
在这种情况下你无法手动完成工作,那么怎样才能解决问题呢?
|
||||
|
||||
不要担心我们可以帮你摆脱这样的情况和场景。
|
||||
|
||||
我们在这篇文章中增加了四种方法来克服困难。
|
||||
不要担心我们可以帮你摆脱这样的情况和场景。我们在这篇文章中增加了四种方法来克服困难。
|
||||
|
||||
我希望这可以帮你解决问题。我已经在 Centos7 和 Ubuntu 18.04 上测试了这些命令。
|
||||
|
||||
我也希望这可以在其他发行版上工作。这仅仅需要使用该发行版的官方包管理器命令替代本文中的包管理器命令就行了。
|
||||
|
||||
如果想要 **[检查 Linux 系统上已安装的软件包列表][1]** 请点击链接。
|
||||
如果想要 [检查 Linux 系统上已安装的软件包列表][1],请点击链接。
|
||||
|
||||
例如,如果你想要在基于 RHEL 系统上创建软件包列表请使用以下步骤。其他发行版也一样。
|
||||
|
||||
@ -53,11 +45,9 @@ apr-util-1.5.2-6.el7.x86_64
|
||||
apr-1.4.8-3.el7_4.1.x86_64
|
||||
```
|
||||
|
||||
### 方法一 : 如何在 Linux 上使用 cat 命令安装文件中列出的包?
|
||||
### 方法一:如何在 Linux 上使用 cat 命令安装文件中列出的包?
|
||||
|
||||
为实现这个目标,我将使用简单明了的第一种方法。
|
||||
|
||||
为此,创建一个文件并添加上你想要安装的包列表。
|
||||
为实现这个目标,我将使用简单明了的第一种方法。为此,创建一个文件并添加上你想要安装的包列表。
|
||||
|
||||
出于测试的目的,我们将只添加以下的三个软件包名到文件中。
|
||||
|
||||
@ -69,7 +59,7 @@ mariadb-server
|
||||
nano
|
||||
```
|
||||
|
||||
只要简单的运行 **[apt 命令][2]** 就能在 Ubuntu/Debian 系统上一次性安装所有的软件包。
|
||||
只要简单的运行 [apt 命令][2] 就能在 Ubuntu/Debian 系统上一次性安装所有的软件包。
|
||||
|
||||
```
|
||||
# apt -y install $(cat /tmp/pack1.txt)
|
||||
@ -138,20 +128,19 @@ Processing triggers for install-info (6.5.0.dfsg.1-2) ...
|
||||
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
|
||||
```
|
||||
|
||||
使用 **[yum 命令][3]** 在基于 RHEL (如 Centos,RHEL (Redhat) 和 OEL (Oracle Enterprise Linux)) 的系统上安装文件中列出的软件包。
|
||||
|
||||
使用 [yum 命令][3] 在基于 RHEL (如 Centos、RHEL (Redhat) 和 OEL (Oracle Enterprise Linux)) 的系统上安装文件中列出的软件包。
|
||||
|
||||
```
|
||||
# yum -y install $(cat /tmp/pack1.txt)
|
||||
```
|
||||
|
||||
使用以命令在基于 RHEL (如 Centos,RHEL (Redhat) 和 OEL (Oracle Enterprise Linux)) 的系统上卸载文件中列出的软件包。
|
||||
使用以命令在基于 RHEL (如 Centos、RHEL (Redhat) 和 OEL (Oracle Enterprise Linux)) 的系统上卸载文件中列出的软件包。
|
||||
|
||||
```
|
||||
# yum -y remove $(cat /tmp/pack1.txt)
|
||||
```
|
||||
|
||||
使用以下 **[dnf 命令][4]** 在 Fedora 系统上安装文件中列出的软件包。
|
||||
使用以下 [dnf 命令][4] 在 Fedora 系统上安装文件中列出的软件包。
|
||||
|
||||
```
|
||||
# dnf -y install $(cat /tmp/pack1.txt)
|
||||
@ -163,7 +152,7 @@ Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
|
||||
# dnf -y remove $(cat /tmp/pack1.txt)
|
||||
```
|
||||
|
||||
使用以下 **[zypper 命令][5]** 在 openSUSE 系统上安装文件中列出的软件包。
|
||||
使用以下 [zypper 命令][5] 在 openSUSE 系统上安装文件中列出的软件包。
|
||||
|
||||
```
|
||||
# zypper -y install $(cat /tmp/pack1.txt)
|
||||
@ -175,7 +164,7 @@ Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
|
||||
# zypper -y remove $(cat /tmp/pack1.txt)
|
||||
```
|
||||
|
||||
使用以下 **[pacman 命令][6]** 在基于 Arch Linux (如 Manjaro 和 Antergos) 的系统上安装文件中列出的软件包。
|
||||
使用以下 [pacman 命令][6] 在基于 Arch Linux (如 Manjaro 和 Antergos) 的系统上安装文件中列出的软件包。
|
||||
|
||||
```
|
||||
# pacman -S $(cat /tmp/pack1.txt)
|
||||
@ -188,36 +177,35 @@ Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
|
||||
# pacman -Rs $(cat /tmp/pack1.txt)
|
||||
```
|
||||
|
||||
### 方法二 : 如何使用 cat 和 xargs 命令在 Linux 中安装文件中列出的软件包。
|
||||
### 方法二:如何使用 cat 和 xargs 命令在 Linux 中安装文件中列出的软件包。
|
||||
|
||||
甚至,我更喜欢使用这种方法,因为这是一种非常简单直接的方法。
|
||||
|
||||
使用以下 apt 命令在基于 Debian 的系统 (如 Debian,Ubuntu和Linux Mint) 上安装文件中列出的软件包。
|
||||
|
||||
使用以下 `apt` 命令在基于 Debian 的系统 (如 Debian、Ubuntu 和 Linux Mint) 上安装文件中列出的软件包。
|
||||
|
||||
```
|
||||
# cat /tmp/pack1.txt | xargs apt -y install
|
||||
```
|
||||
|
||||
使用以下 apt 命令 从基于 Debian 的系统 (如 Debian,Ubuntu和Linux Mint) 上卸载文件中列出的软件包。
|
||||
使用以下 `apt` 命令 从基于 Debian 的系统 (如 Debian、Ubuntu 和 Linux Mint) 上卸载文件中列出的软件包。
|
||||
|
||||
```
|
||||
# cat /tmp/pack1.txt | xargs apt -y remove
|
||||
```
|
||||
|
||||
使用以下 yum 命令在基于 RHEL (如 Centos,RHEL (Redhat) 和 OEL (Oracle Enterprise Linux)) 的系统上安装文件中列出的软件包。
|
||||
使用以下 `yum` 命令在基于 RHEL (如 Centos,RHEL (Redhat) 和 OEL (Oracle Enterprise Linux)) 的系统上安装文件中列出的软件包。
|
||||
|
||||
```
|
||||
# cat /tmp/pack1.txt | xargs yum -y install
|
||||
```
|
||||
|
||||
使用以命令从基于 RHEL (如 Centos,RHEL (Redhat) 和 OEL (Oracle Enterprise Linux)) 的系统上卸载文件中列出的软件包。
|
||||
使用以命令从基于 RHEL (如 Centos、RHEL (Redhat) 和 OEL (Oracle Enterprise Linux)) 的系统上卸载文件中列出的软件包。
|
||||
|
||||
```
|
||||
# cat /tmp/pack1.txt | xargs yum -y remove
|
||||
```
|
||||
|
||||
使用以下 dnf 命令在 Fedora 系统上安装文件中列出的软件包。
|
||||
使用以下 `dnf` 命令在 Fedora 系统上安装文件中列出的软件包。
|
||||
|
||||
```
|
||||
# cat /tmp/pack1.txt | xargs dnf -y install
|
||||
@ -229,7 +217,7 @@ Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
|
||||
# cat /tmp/pack1.txt | xargs dnf -y remove
|
||||
```
|
||||
|
||||
使用以下 zypper 命令在 openSUSE 系统上安装文件中列出的软件包。
|
||||
使用以下 `zypper` 命令在 openSUSE 系统上安装文件中列出的软件包。
|
||||
|
||||
|
||||
```
|
||||
@ -242,7 +230,7 @@ Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
|
||||
# cat /tmp/pack1.txt | xargs zypper -y remove
|
||||
```
|
||||
|
||||
使用以下 pacman 命令在基于 Arch Linux (如 Manjaro 和 Antergos) 的系统上安装文件中列出的软件包。
|
||||
使用以下 `pacman` 命令在基于 Arch Linux (如 Manjaro 和 Antergos) 的系统上安装文件中列出的软件包。
|
||||
|
||||
```
|
||||
# cat /tmp/pack1.txt | xargs pacman -S
|
||||
@ -254,17 +242,17 @@ Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
|
||||
# cat /tmp/pack1.txt | xargs pacman -Rs
|
||||
```
|
||||
|
||||
### 方法三 : 如何使用 For Loop 在 Linux 上安装文件中列出的软件包?
|
||||
我们也可以使用 For 循环命令来实现此目的。
|
||||
### 方法三 : 如何使用 For 循环在 Linux 上安装文件中列出的软件包
|
||||
|
||||
安装批量包可以使用以下一条 For 循环的命令。
|
||||
我们也可以使用 `for` 循环命令来实现此目的。
|
||||
|
||||
安装批量包可以使用以下一条 `for` 循环的命令。
|
||||
|
||||
```
|
||||
# for pack in `cat /tmp/pack1.txt` ; do apt -y install $i; done
|
||||
```
|
||||
|
||||
要使用 shell 脚本安装批量包,请使用以下 For 循环。
|
||||
|
||||
要使用 shell 脚本安装批量包,请使用以下 `for` 循环。
|
||||
|
||||
```
|
||||
# vi /opt/scripts/bulk-package-install.sh
|
||||
@ -275,7 +263,7 @@ do apt -y remove $pack
|
||||
done
|
||||
```
|
||||
|
||||
为 bulk-package-install.sh 设置可执行权限。
|
||||
为 `bulk-package-install.sh` 设置可执行权限。
|
||||
|
||||
```
|
||||
# chmod + bulk-package-install.sh
|
||||
@ -287,17 +275,17 @@ done
|
||||
# sh bulk-package-install.sh
|
||||
```
|
||||
|
||||
### 方法四 : 如何使用 While 循环在 Linux 上安装文件中列出的软件包。
|
||||
### 方法四:如何使用 While 循环在 Linux 上安装文件中列出的软件包
|
||||
|
||||
我们也可以使用 While 循环命令来实现目的。
|
||||
我们也可以使用 `while` 循环命令来实现目的。
|
||||
|
||||
安装批量包可以使用以下一条 While 循环的命令。
|
||||
安装批量包可以使用以下一条 `while` 循环的命令。
|
||||
|
||||
```
|
||||
# file="/tmp/pack1.txt"; while read -r pack; do apt -y install $pack; done < "$file"
|
||||
```
|
||||
|
||||
要使用 shell 脚本安装批量包,请使用以下 While 循环。
|
||||
要使用 shell 脚本安装批量包,请使用以下 `while` 循环。
|
||||
|
||||
```
|
||||
# vi /opt/scripts/bulk-package-install.sh
|
||||
@ -309,7 +297,7 @@ do apt -y remove $pack
|
||||
done < "$file"
|
||||
```
|
||||
|
||||
为 bulk-package-install.sh 设置可执行权限。
|
||||
为 `bulk-package-install.sh` 设置可执行权限。
|
||||
|
||||
```
|
||||
# chmod + bulk-package-install.sh
|
||||
@ -328,13 +316,13 @@ via: https://www.2daygeek.com/how-to-install-uninstall-listed-packages-from-a-fi
|
||||
作者:[Magesh Maruthamuthu][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[way-ww](https://github.com/way-ww)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.2daygeek.com/author/magesh/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.2daygeek.com/check-installed-packages-in-rhel-centos-fedora-debian-ubuntu-opensuse-arch-linux/
|
||||
[1]: https://linux.cn/article-10116-1.html
|
||||
[2]: https://www.2daygeek.com/apt-command-examples-manage-packages-debian-ubuntu-systems/
|
||||
[3]: https://www.2daygeek.com/yum-command-examples-manage-packages-rhel-centos-systems/
|
||||
[4]: https://www.2daygeek.com/dnf-command-examples-manage-packages-fedora-system/
|
@ -1,13 +1,13 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-10922-1.html)
|
||||
[#]: subject: (Zettlr – Markdown Editor for Writers and Researchers)
|
||||
[#]: via: (https://itsfoss.com/zettlr-markdown-editor/)
|
||||
[#]: author: (John Paul https://itsfoss.com/author/john/)
|
||||
|
||||
Zettlr - 适合作者和研究人员的 Markdown 编辑器
|
||||
Zettlr:适合写作者和研究人员的 Markdown 编辑器
|
||||
======
|
||||
|
||||
有很多[适用于 Linux 的 Markdown 编辑器][1],并且还在继续增加。问题是,像 [Boostnote][2] 一样,大多数是为编码人员设计的,可能不会受到非技术人员的欢迎。让我们看一个想要替代 Word 和昂贵的文字处理器,适用于非技术人员的 Markdown 编辑器。我们来看看 Zettlr 吧。
|
||||
@ -16,34 +16,33 @@ Zettlr - 适合作者和研究人员的 Markdown 编辑器
|
||||
|
||||
![Zettlr Light Mode][3]
|
||||
|
||||
我可能在网站上提到过一两次,但我更喜欢用 [Markdown][4] 写下我的所有文档。它易于学习,不会让你与专有文档格式相关联。我还在我的[适合作者的开源工具列表][5]中提到了 Markdown 编辑器。
|
||||
我可能在网站上提到过一两次,我更喜欢用 [Markdown][4] 写下我的所有文档。它易于学习,不会让你受困于专有文档格式。我还在我的[适合作者的开源工具列表][5]中提到了 Markdown 编辑器。
|
||||
|
||||
我用过许多 Markdown 编辑器,但是我一直有兴趣尝试新的。最近,我遇到了 Zettlr,一个开源 markdown 编辑器。
|
||||
我用过许多 Markdown 编辑器,但是我一直有兴趣尝试新的。最近,我遇到了 Zettlr,一个开源 Markdown 编辑器。
|
||||
|
||||
[Zettlr][6] 是一位名叫 [Hendrik Erz][7] 的德国社会学家/政治理论家创建的。Hendrik 创建了 Zettlr,因为他对目前的文字处理器感到沮丧。他想要可以让他“专注于写作和阅读”的编辑器。
|
||||
[Zettlr][6] 是一位名叫 [Hendrik Erz][7] 的德国社会学家/政治理论家创建的。Hendrik 创建了 Zettlr,因为他对目前的文字处理器感到不满意。他想要可以让他“专注于写作和阅读”的编辑器。
|
||||
|
||||
在发现 Markdown 之后,他在不同的操作系统上尝试了几个 Markdown 编辑器。但他们都没有他想要的东西。[根据 Hendrik 的说法][8],“但我不得不意识到没有为高效组织大量文本而写的编辑器。大多数编辑都是由编码人员编写的,因此可以满足工程师和数学家的需求。没有为我这样的社会科学,历史或政治学的学生的编辑器。“
|
||||
在发现 Markdown 之后,他在不同的操作系统上尝试了几个 Markdown 编辑器。但它们都没有他想要的东西。[根据 Hendrik 的说法][8],“但我不得不意识到没有为高效组织大量文本而写的编辑器。大多数编辑都是由编码人员编写的,因此可以满足工程师和数学家的需求。没有为我这样的社会科学、历史或政治学的学生的编辑器。“
|
||||
|
||||
So he decided to create his own. In November of 2017, he started to work on Zettlr.
|
||||
所以他决定创造自己的。2017 年 11 月,他开始编写 Zettlr。
|
||||
|
||||
![Zettlr About][9]
|
||||
|
||||
#### Zettlr 功能
|
||||
|
||||
Zettlr有许多简洁的功能,包括:
|
||||
Zettlr 有许多简洁的功能,包括:
|
||||
|
||||
* 从 [Zotero 数据库][10]导入源并在文档中引用它们
|
||||
* 使用可选的行屏蔽,让你无打扰地专注于写作
|
||||
* 支持代码高亮
|
||||
* 使用标签对信息进行排序
|
||||
* 能够为会话设定写作目标
|
||||
* 能够为该任务设定写作目标
|
||||
* 查看一段时间的写作统计
|
||||
* 番茄钟计时器
|
||||
* 浅色/深色主题
|
||||
* 使用 [reveal.js][11] 创建演示文稿
|
||||
* 快速预览文档
|
||||
* 在一个项目文档中搜索 Markdown 文档,并用热图展示文字搜索密度。
|
||||
* 可以在一个项目文件夹中搜索 Markdown 文档,并用热图展示文字搜索密度。
|
||||
* 将文件导出为 HTML、PDF、ODT、DOC、reStructuredText、LaTex、TXT、Emacs ORG、[TextBundle][12] 和 Textpack
|
||||
* 将自定义 CSS 添加到你的文档
|
||||
|
||||
@ -69,7 +68,7 @@ Zettlr 有许多我希望我之前选择的编辑器 (ghostwriter) 有的简
|
||||
|
||||
正如 Hendrik 在 [Zettlr 网站][8]中所说的那样,“让自己摆脱文字处理器的束缚,看看你的写作过程如何通过身边的技术得到改善!”
|
||||
|
||||
如果你觉得 Zettlr 有用,请考虑支持 [Hendrik][19]。正如他在网站上所说,“它是免费的,因为我不相信激烈竞争,早逝的创业文化。我只是想帮忙。“
|
||||
如果你觉得 Zettlr 有用,请考虑支持 [Hendrik][19]。正如他在网站上所说,“它是免费的,因为我不相信激烈竞争、早逝的创业文化。我只是想帮忙。”
|
||||
|
||||
你有没有用过 Zettlr?你最喜欢的 Markdown 编辑器是什么?请在下面的评论中告诉我们。
|
||||
|
||||
@ -82,7 +81,7 @@ via: https://itsfoss.com/zettlr-markdown-editor/
|
||||
作者:[John Paul][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/) 荣誉推出
|
||||
|
471
published/20190527 20- FFmpeg Commands For Beginners.md
Normal file
471
published/20190527 20- FFmpeg Commands For Beginners.md
Normal file
@ -0,0 +1,471 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (robsean)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-10932-1.html)
|
||||
[#]: subject: (20+ FFmpeg Commands For Beginners)
|
||||
[#]: via: (https://www.ostechnix.com/20-ffmpeg-commands-beginners/)
|
||||
[#]: author: (sk https://www.ostechnix.com/author/sk/)
|
||||
|
||||
给初学者的 20 多个 FFmpeg 命令示例
|
||||
======
|
||||
|
||||
![FFmpeg Commands](https://img.linux.net.cn/data/attachment/album/201906/03/011553xu323dzu40pb03bx.jpg)
|
||||
|
||||
在这个指南中,我将用示例来阐明如何使用 FFmpeg 媒体框架来做各种各样的音频、视频转码和转换的操作。我已经为初学者汇集了最常用的 20 多个 FFmpeg 命令,我将不时地添加更多的示例来保持更新这个指南。请给这个指南加书签,以后回来检查更新。让我们开始吧,如果你还没有在你的 Linux 系统中安装 FFmpeg,参考下面的指南。
|
||||
|
||||
* [在 Linux 中安装 FFmpeg][2]
|
||||
|
||||
### 针对初学者的 20 多个 FFmpeg 命令
|
||||
|
||||
FFmpeg 命令的典型语法是:
|
||||
|
||||
```
|
||||
ffmpeg [全局选项] {[输入文件选项] -i 输入_url_地址} ...
|
||||
{[输出文件选项] 输出_url_地址} ...
|
||||
```
|
||||
|
||||
现在我们将查看一些重要的和有用的 FFmpeg 命令。
|
||||
|
||||
#### 1、获取音频/视频文件信息
|
||||
|
||||
为显示你的媒体文件细节,运行:
|
||||
|
||||
```
|
||||
$ ffmpeg -i video.mp4
|
||||
```
|
||||
|
||||
样本输出:
|
||||
|
||||
```
|
||||
ffmpeg version n4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
|
||||
built with gcc 8.2.1 (GCC) 20181127
|
||||
configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-version3
|
||||
libavutil 56. 22.100 / 56. 22.100
|
||||
libavcodec 58. 35.100 / 58. 35.100
|
||||
libavformat 58. 20.100 / 58. 20.100
|
||||
libavdevice 58. 5.100 / 58. 5.100
|
||||
libavfilter 7. 40.101 / 7. 40.101
|
||||
libswscale 5. 3.100 / 5. 3.100
|
||||
libswresample 3. 3.100 / 3. 3.100
|
||||
libpostproc 55. 3.100 / 55. 3.100
|
||||
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
|
||||
Metadata:
|
||||
major_brand : isom
|
||||
minor_version : 512
|
||||
compatible_brands: isomiso2avc1mp41
|
||||
encoder : Lavf58.20.100
|
||||
Duration: 00:00:28.79, start: 0.000000, bitrate: 454 kb/s
|
||||
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, smpte170m/bt470bg/smpte170m), 1920x1080 [SAR 1:1 DAR 16:9], 318 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
|
||||
Metadata:
|
||||
handler_name : ISO Media file produced by Google Inc. Created on: 04/08/2019.
|
||||
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
|
||||
Metadata:
|
||||
handler_name : ISO Media file produced by Google Inc. Created on: 04/08/2019.
|
||||
At least one output file must be specified
|
||||
```
|
||||
|
||||
如你在上面的输出中看到的,FFmpeg 显示该媒体文件信息,以及 FFmpeg 细节,例如版本、配置细节、版权标记、构建参数和库选项等等。
|
||||
|
||||
如果你不想看 FFmpeg 标语和其它细节,而仅仅想看媒体文件信息,使用 `-hide_banner` 标志,像下面。
|
||||
|
||||
```
|
||||
$ ffmpeg -i video.mp4 -hide_banner
|
||||
```
|
||||
|
||||
样本输出:
|
||||
|
||||
![][3]
|
||||
|
||||
*使用 FFMpeg 查看音频、视频文件信息。*
|
||||
|
||||
看见了吗?现在,它仅显示媒体文件细节。
|
||||
|
||||
|
||||
#### 2、转换视频文件到不同的格式
|
||||
|
||||
FFmpeg 是强有力的音频和视频转换器,因此,它能在不同格式之间转换媒体文件。举个例子,要转换 mp4 文件到 avi 文件,运行:
|
||||
|
||||
```
|
||||
$ ffmpeg -i video.mp4 video.avi
|
||||
```
|
||||
|
||||
类似地,你可以转换媒体文件到你选择的任何格式。
|
||||
|
||||
例如,为转换 YouTube flv 格式视频为 mpeg 格式,运行:
|
||||
|
||||
```
|
||||
$ ffmpeg -i video.flv video.mpeg
|
||||
```
|
||||
|
||||
如果你想维持你的源视频文件的质量,使用 `-qscale 0` 参数:
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.webm -qscale 0 output.mp4
|
||||
```
|
||||
|
||||
为检查 FFmpeg 的支持格式的列表,运行:
|
||||
|
||||
```
|
||||
$ ffmpeg -formats
|
||||
```
|
||||
|
||||
#### 3、转换视频文件到音频文件
|
||||
|
||||
我转换一个视频文件到音频文件,只需具体指明输出格式,像 .mp3,或 .ogg,或其它任意音频格式。
|
||||
|
||||
上面的命令将转换 input.mp4 视频文件到 output.mp3 音频文件。
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -vn output.mp3
|
||||
```
|
||||
|
||||
此外,你也可以对输出文件使用各种各样的音频转换编码选项,像下面演示。
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -ab 320 -f mp3 output.mp3
|
||||
```
|
||||
|
||||
在这里,
|
||||
|
||||
* `-vn` – 表明我们已经在输出文件中禁用视频录制。
|
||||
* `-ar` – 设置输出文件的音频频率。通常使用的值是22050 Hz、44100 Hz、48000 Hz。
|
||||
* `-ac` – 设置音频通道的数目。
|
||||
* `-ab` – 表明音频比特率。
|
||||
* `-f` – 输出文件格式。在我们的实例中,它是 mp3 格式。
|
||||
|
||||
#### 4、更改视频文件的分辨率
|
||||
|
||||
如果你想设置一个视频文件为指定的分辨率,你可以使用下面的命令:
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -filter:v scale=1280:720 -c:a copy output.mp4
|
||||
```
|
||||
|
||||
或,
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -s 1280x720 -c:a copy output.mp4
|
||||
```
|
||||
|
||||
上面的命令将设置所给定视频文件的分辨率到 1280×720。
|
||||
|
||||
类似地,为转换上面的文件到 640×480 大小,运行:
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -filter:v scale=640:480 -c:a copy output.mp4
|
||||
```
|
||||
|
||||
或者,
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -s 640x480 -c:a copy output.mp4
|
||||
```
|
||||
|
||||
这个技巧将帮助你缩放你的视频文件到较小的显示设备上,例如平板电脑和手机。
|
||||
|
||||
#### 5、压缩视频文件
|
||||
|
||||
减小媒体文件的大小到较小来节省硬件的空间总是一个好主意.
|
||||
|
||||
下面的命令将压缩并减少输出文件的大小。
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4
|
||||
```
|
||||
|
||||
请注意,如果你尝试减小视频文件的大小,你将损失视频质量。如果 24 太有侵略性,你可以降低 `-crf` 值到或更低值。
|
||||
|
||||
你也可以通过下面的选项来转换编码音频降低比特率,使其有立体声感,从而减小大小。
|
||||
|
||||
```
|
||||
-ac 2 -c:a aac -strict -2 -b:a 128k
|
||||
```
|
||||
|
||||
#### 6、压缩音频文件
|
||||
|
||||
正像压缩视频文件一样,为节省一些磁盘空间,你也可以使用 `-ab` 标志压缩音频文件。
|
||||
|
||||
例如,你有一个 320 kbps 比特率的音频文件。你想通过更改比特率到任意较低的值来压缩它,像下面。
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp3 -ab 128 output.mp3
|
||||
```
|
||||
|
||||
各种各样可用的音频比特率列表是:
|
||||
|
||||
1. 96kbps
|
||||
2. 112kbps
|
||||
3. 128kbps
|
||||
4. 160kbps
|
||||
5. 192kbps
|
||||
6. 256kbps
|
||||
7. 320kbps
|
||||
|
||||
#### 7、从一个视频文件移除音频流
|
||||
|
||||
如果你不想要一个视频文件中的音频,使用 `-an` 标志。
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -an output.mp4
|
||||
```
|
||||
|
||||
在这里,`-an` 表示没有音频录制。
|
||||
|
||||
上面的命令会撤销所有音频相关的标志,因为我们不要来自 input.mp4 的音频。
|
||||
|
||||
#### 8、从一个媒体文件移除视频流
|
||||
|
||||
类似地,如果你不想要视频流,你可以使用 `-vn` 标志从媒体文件中简单地移除它。`-vn` 代表没有视频录制。换句话说,这个命令转换所给定媒体文件为音频文件。
|
||||
|
||||
下面的命令将从所给定媒体文件中移除视频。
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -vn output.mp3
|
||||
```
|
||||
|
||||
你也可以使用 `-ab` 标志来指出输出文件的比特率,如下面的示例所示。
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -vn -ab 320 output.mp3
|
||||
```
|
||||
|
||||
#### 9、从视频中提取图像
|
||||
|
||||
FFmpeg 的另一个有用的特色是我们可以从一个视频文件中轻松地提取图像。如果你想从一个视频文件中创建一个相册,这可能是非常有用的。
|
||||
|
||||
为从一个视频文件中提取图像,使用下面的命令:
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -r 1 -f image2 image-%2d.png
|
||||
```
|
||||
|
||||
在这里,
|
||||
|
||||
* `-r` – 设置帧速度。即,每秒提取帧到图像的数字。默认值是 25。
|
||||
* `-f` – 表示输出格式,即,在我们的实例中是图像。
|
||||
* `image-%2d.png` – 表明我们如何想命名提取的图像。在这个实例中,命名应该像这样image-01.png、image-02.png、image-03.png 等等开始。如果你使用 `%3d`,那么图像的命名像 image-001.png、image-002.png 等等开始。
|
||||
|
||||
#### 10、裁剪视频
|
||||
|
||||
FFMpeg 允许以我们选择的任何范围裁剪一个给定的媒体文件。
|
||||
|
||||
裁剪一个视频文件的语法如下给定:
|
||||
|
||||
```
|
||||
ffmpeg -i input.mp4 -filter:v "crop=w:h:x:y" output.mp4
|
||||
```
|
||||
|
||||
在这里,
|
||||
|
||||
* `input.mp4` – 源视频文件。
|
||||
* `-filter:v` – 表示视频过滤器。
|
||||
* `crop` – 表示裁剪过滤器。
|
||||
* `w` – 我们想自源视频中裁剪的矩形的宽度。
|
||||
* `h` – 矩形的高度。
|
||||
* `x` – 我们想自源视频中裁剪的矩形的 x 坐标 。
|
||||
* `y` – 矩形的 y 坐标。
|
||||
|
||||
比如说你想要一个来自视频的位置 (200,150),且具有 640 像素宽度和 480 像素高度的视频,命令应该是:
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -filter:v "crop=640:480:200:150" output.mp4
|
||||
```
|
||||
|
||||
请注意,剪切视频将影响质量。除非必要,请勿剪切。
|
||||
|
||||
#### 11、转换一个视频的具体的部分
|
||||
|
||||
有时,你可能想仅转换视频文件的一个具体的部分到不同的格式。以示例说明,下面的命令将转换所给定视频input.mp4 文件的开始 10 秒到视频 .avi 格式。
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -t 10 output.avi
|
||||
```
|
||||
|
||||
在这里,我们以秒具体说明时间。此外,以 `hh.mm.ss` 格式具体说明时间也是可以的。
|
||||
|
||||
#### 12、设置视频的屏幕高宽比
|
||||
|
||||
你可以使用 `-aspect` 标志设置一个视频文件的屏幕高宽比,像下面。
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -aspect 16:9 output.mp4
|
||||
```
|
||||
|
||||
通常使用的高宽比是:
|
||||
|
||||
* 16:9
|
||||
* 4:3
|
||||
* 16:10
|
||||
* 5:4
|
||||
* 2:21:1
|
||||
* 2:35:1
|
||||
* 2:39:1
|
||||
|
||||
#### 13、添加海报图像到音频文件
|
||||
|
||||
你可以添加海报图像到你的文件,以便图像将在播放音频文件时显示。这对托管在视频托管主机或共享网站中的音频文件是有用的。
|
||||
|
||||
```
|
||||
$ ffmpeg -loop 1 -i inputimage.jpg -i inputaudio.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest output.mp4
|
||||
```
|
||||
|
||||
#### 14、使用开始和停止时间剪下一段媒体文件
|
||||
|
||||
可以使用开始和停止时间来剪下一段视频为小段剪辑,我们可以使用下面的命令。
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -ss 00:00:50 -codec copy -t 50 output.mp4
|
||||
```
|
||||
|
||||
在这里,
|
||||
|
||||
* `–s` – 表示视频剪辑的开始时间。在我们的示例中,开始时间是第 50 秒。
|
||||
* `-t` – 表示总的持续时间。
|
||||
|
||||
当你想使用开始和结束时间从一个音频或视频文件剪切一部分时,它是非常有用的。
|
||||
|
||||
类似地,我们可以像下面剪下音频。
|
||||
|
||||
```
|
||||
$ ffmpeg -i audio.mp3 -ss 00:01:54 -to 00:06:53 -c copy output.mp3
|
||||
```
|
||||
|
||||
#### 15、切分视频文件为多个部分
|
||||
|
||||
一些网站将仅允许你上传具体指定大小的视频。在这样的情况下,你可以切分大的视频文件到多个较小的部分,像下面。
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -t 00:00:30 -c copy part1.mp4 -ss 00:00:30 -codec copy part2.mp4
|
||||
```
|
||||
|
||||
在这里,
|
||||
|
||||
* `-t 00:00:30` 表示从视频的开始到视频的第 30 秒创建一部分视频。
|
||||
* `-ss 00:00:30` 为视频的下一部分显示开始时间戳。它意味着第 2 部分将从第 30 秒开始,并将持续到原始视频文件的结尾。
|
||||
|
||||
#### 16、接合或合并多个视频部分到一个
|
||||
|
||||
FFmpeg 也可以接合多个视频部分,并创建一个单个视频文件。
|
||||
|
||||
创建包含你想接合文件的准确的路径的 `join.txt`。所有的文件都应该是相同的格式(相同的编码格式)。所有文件的路径应该逐个列出,像下面。
|
||||
|
||||
```
|
||||
file /home/sk/myvideos/part1.mp4
|
||||
file /home/sk/myvideos/part2.mp4
|
||||
file /home/sk/myvideos/part3.mp4
|
||||
file /home/sk/myvideos/part4.mp4
|
||||
```
|
||||
|
||||
现在,接合所有文件,使用命令:
|
||||
|
||||
```
|
||||
$ ffmpeg -f concat -i join.txt -c copy output.mp4
|
||||
```
|
||||
|
||||
如果你得到一些像下面的错误;
|
||||
|
||||
```
|
||||
[concat @ 0x555fed174cc0] Unsafe file name '/path/to/mp4'
|
||||
join.txt: Operation not permitted
|
||||
```
|
||||
|
||||
添加 `-safe 0` :
|
||||
|
||||
```
|
||||
$ ffmpeg -f concat -safe 0 -i join.txt -c copy output.mp4
|
||||
```
|
||||
|
||||
上面的命令将接合 part1.mp4、part2.mp4、part3.mp4 和 part4.mp4 文件到一个称为 output.mp4 的单个文件中。
|
||||
|
||||
#### 17、添加字幕到一个视频文件
|
||||
|
||||
我们可以使用 FFmpeg 来添加字幕到视频文件。为你的视频下载正确的字幕,并如下所示添加它到你的视频。
|
||||
|
||||
```
|
||||
$ fmpeg -i input.mp4 -i subtitle.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast output.mp4
|
||||
```
|
||||
|
||||
#### 18、预览或测试视频或音频文件
|
||||
|
||||
你可能希望通过预览来验证或测试输出的文件是否已经被恰当地转码编码。为完成预览,你可以从你的终端播放它,用命令:
|
||||
|
||||
```
|
||||
$ ffplay video.mp4
|
||||
```
|
||||
|
||||
![][7]
|
||||
|
||||
类似地,你可以测试音频文件,像下面所示。
|
||||
|
||||
```
|
||||
$ ffplay audio.mp3
|
||||
```
|
||||
|
||||
![][8]
|
||||
|
||||
#### 19、增加/减少视频播放速度
|
||||
|
||||
FFmpeg 允许你调整视频播放速度。
|
||||
|
||||
为增加视频播放速度,运行:
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4
|
||||
```
|
||||
|
||||
该命令将双倍视频的速度。
|
||||
|
||||
为降低你的视频速度,你需要使用一个大于 1 的倍数。为减少播放速度,运行:
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -vf "setpts=4.0*PTS" output.mp4
|
||||
```
|
||||
|
||||
#### 20、创建动画的 GIF
|
||||
|
||||
出于各种目的,我们在几乎所有的社交和专业网络上使用 GIF 图像。使用 FFmpeg,我们可以简单地和快速地创建动画的视频文件。下面的指南阐释了如何在类 Unix 系统中使用 FFmpeg 和 ImageMagick 创建一个动画的 GIF 文件。
|
||||
|
||||
* [在 Linux 中如何创建动画的 GIF][9]
|
||||
|
||||
#### 21、从 PDF 文件中创建视频
|
||||
|
||||
我长年累月的收集了很多 PDF 文件,大多数是 Linux 教程,保存在我的平板电脑中。有时我懒得从平板电脑中阅读它们。因此,我决定从 PDF 文件中创建一个视频,在一个大屏幕设备(像一台电视机或一台电脑)中观看它们。如果你想知道如何从一批 PDF 文件中制作一个电影,下面的指南将帮助你。
|
||||
|
||||
* [在 Linux 中如何从 PDF 文件中创建一个视频][10]
|
||||
|
||||
#### 22、获取帮助
|
||||
|
||||
在这个指南中,我已经覆盖大多数常常使用的 FFmpeg 命令。它有很多不同的选项来做各种各样的高级功能。要学习更多用法,请参考手册页。
|
||||
|
||||
```
|
||||
$ man ffmpeg
|
||||
```
|
||||
|
||||
这就是全部了。我希望这个指南将帮助你入门 FFmpeg。如果你发现这个指南有用,请在你的社交和专业网络上分享它。更多好东西将要来。敬请期待!
|
||||
|
||||
谢谢!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.ostechnix.com/20-ffmpeg-commands-beginners/
|
||||
|
||||
作者:[sk][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[robsean](https://github.com/robsean)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.ostechnix.com/author/sk/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.ostechnix.com/wp-content/uploads/2017/05/FFmpeg-Commands-720x340.png
|
||||
[2]: https://www.ostechnix.com/install-ffmpeg-linux/
|
||||
[3]: http://www.ostechnix.com/wp-content/uploads/2017/05/sk@sk_001.png
|
||||
[4]: https://ostechnix.tradepub.com/free/w_make141/prgm.cgi
|
||||
[5]: https://ostechnix.tradepub.com/free/w_make75/prgm.cgi
|
||||
[6]: https://ostechnix.tradepub.com/free/w_make235/prgm.cgi
|
||||
[7]: http://www.ostechnix.com/wp-content/uploads/2017/05/Menu_004.png
|
||||
[8]: http://www.ostechnix.com/wp-content/uploads/2017/05/Menu_005-3.png
|
||||
[9]: https://www.ostechnix.com/create-animated-gif-ubuntu-16-04/
|
||||
[10]: https://www.ostechnix.com/create-video-pdf-files-linux/
|
@ -1,28 +1,26 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-10925-1.html)
|
||||
[#]: subject: (Dockly – Manage Docker Containers From Terminal)
|
||||
[#]: via: (https://www.ostechnix.com/dockly-manage-docker-containers-from-terminal/)
|
||||
[#]: author: (sk https://www.ostechnix.com/author/sk/)
|
||||
|
||||
Dockly - 从终端管理 Docker 容器
|
||||
Dockly:从终端管理 Docker 容器
|
||||
======
|
||||
|
||||
![][1]
|
||||
![](https://img.linux.net.cn/data/attachment/album/201906/01/144422bfwx1e7fqx1ee11x.jpg)
|
||||
|
||||
几天前,我们发布了一篇指南,其中涵盖了[**开始使用 Docker**][2] 时需要了解的几乎所有细节。在该指南中,我们向你展示了如何详细创建和管理 Docker 容器。还有一些非官方工具可用于管理 Docker 容器。如果你看过我们以前的文字,你可能会看到两个基于网络的工具,[**“Portainer”**][3] 和 [**“PiCluster”**][4]。它们都使得 Docker 管理任务在 Web 浏览器中变得更加容易和简单。今天,我遇到了另一个名为 **“Dockly”** 的 Docker 管理工具。
|
||||
几天前,我们发布了一篇指南,其中涵盖了[开始使用 Docker][2] 时需要了解的几乎所有细节。在该指南中,我们向你展示了如何详细创建和管理 Docker 容器。还有一些可用于管理 Docker 容器的非官方工具。如果你看过我们以前的文章,你可能会看到两个基于 Web 的工具,[Portainer][3] 和 [PiCluster][4]。它们都使得 Docker 管理任务在 Web 浏览器中变得更加容易和简单。今天,我遇到了另一个名为 Dockly 的 Docker 管理工具。
|
||||
|
||||
与上面的工具不同,Dockly 是一个 TUI(文本界面)程序,用于在类 Unix 系统中从终端管理 Docker 容器和服务。它是使用 **NodeJS** 编写的免费开源工具。在本简要指南中,我们将了解如何安装 Dockly 以及如何从命令行管理 Docker 容器。
|
||||
与上面的工具不同,Dockly 是一个 TUI(文本界面)程序,用于在类 Unix 系统中从终端管理 Docker 容器和服务。它是使用 NodeJS 编写的自由开源工具。在本简要指南中,我们将了解如何安装 Dockly 以及如何从命令行管理 Docker 容器。
|
||||
|
||||
### 安装 Dockly
|
||||
|
||||
确保已在 Linux 上安装了 NodeJS。如果尚未安装,请参阅以下指南。
|
||||
|
||||
* [**如何在 Linux 上安装 NodeJS**][5]
|
||||
|
||||
|
||||
* [如何在 Linux 上安装 NodeJS][5]
|
||||
|
||||
安装 NodeJS 后,运行以下命令安装 Dockly:
|
||||
|
||||
@ -42,97 +40,83 @@ Dockly 将通过 unix 套接字自动连接到你的本机 docker 守护进程
|
||||
|
||||
![][6]
|
||||
|
||||
使用 Dockly 管理 Docker 容器
|
||||
*使用 Dockly 管理 Docker 容器*
|
||||
|
||||
正如你在上面的截图中看到的,Dockly 在顶部显示了运行容器的以下信息:
|
||||
|
||||
* 容器 ID,
|
||||
* 容器名称,
|
||||
* Docker 镜像,
|
||||
* 命令,
|
||||
* 运行中容器的状态,
|
||||
* 状态。
|
||||
|
||||
|
||||
* 容器 ID,
|
||||
* 容器名称,
|
||||
* Docker 镜像,
|
||||
* 命令,
|
||||
* 运行中容器的状态,
|
||||
* 状态。
|
||||
|
||||
在右上角,你将看到容器的 CPU 和内存利用率。使用向上/向下箭头键在容器之间移动。
|
||||
|
||||
在底部,有少量的键盘快捷键来执行各种 Docker 管理任务。以下是目前可用的键盘快捷键列表:
|
||||
|
||||
* **=** - 刷新 Dockly 界面,
|
||||
* **/** - 搜索容器列表视图,
|
||||
* **i** - 显示有关当前所选容器或服务的信息,
|
||||
* **回车** - 显示当前容器或服务的日志,
|
||||
* **v** - 在容器和服务视图之间切换,
|
||||
* **l** - 在选定的容器上启动 /bin/bash 会话,
|
||||
* **r** - 重启选定的容器,
|
||||
* **s** - 停止选定的容器,
|
||||
* **h** - 显示帮助窗口,
|
||||
* **q** - 退出 Dockly。
|
||||
* `=` - 刷新 Dockly 界面,
|
||||
* `/` - 搜索容器列表视图,
|
||||
* `i` - 显示有关当前所选容器或服务的信息,
|
||||
* `回车` - 显示当前容器或服务的日志,
|
||||
* `v` - 在容器和服务视图之间切换,
|
||||
* `l` - 在选定的容器上启动 `/bin/bash` 会话,
|
||||
* `r` - 重启选定的容器,
|
||||
* `s` - 停止选定的容器,
|
||||
* `h` - 显示帮助窗口,
|
||||
* `q` - 退出 Dockly。
|
||||
|
||||
#### 查看容器的信息
|
||||
|
||||
|
||||
##### **查看容器的信息**
|
||||
|
||||
使用向上/向下箭头选择一个容器,然后按 **“i”** 以显示所选容器的信息。
|
||||
使用向上/向下箭头选择一个容器,然后按 `i` 以显示所选容器的信息。
|
||||
|
||||
![][7]
|
||||
|
||||
查看容器的信息
|
||||
*查看容器的信息*
|
||||
|
||||
##### 重启容器
|
||||
#### 重启容器
|
||||
|
||||
如果你想随时重启容器,只需选择它并按 **“r”** 即可重新启动。
|
||||
如果你想随时重启容器,只需选择它并按 `r` 即可重新启动。
|
||||
|
||||
![][8]
|
||||
|
||||
重启 Docker 容器
|
||||
*重启 Docker 容器*
|
||||
|
||||
##### 停止/删除容器和镜像
|
||||
#### 停止/删除容器和镜像
|
||||
|
||||
如果不再需要容器,我们可以立即停止和/或删除一个或所有容器。为此,请按 **“m”** 打开**菜单**。
|
||||
如果不再需要容器,我们可以立即停止和/或删除一个或所有容器。为此,请按 `m` 打开菜单。
|
||||
|
||||
![][9]
|
||||
|
||||
停止,删除 Docker 容器和镜像
|
||||
*停止,删除 Docker 容器和镜像*
|
||||
|
||||
在这里,你可以执行以下操作。
|
||||
|
||||
* 停止所有 Docker 容器,
|
||||
* 删除选定的容器,
|
||||
* 删除所有容器,
|
||||
* 删除所有 Docker 镜像等。
|
||||
* 停止所有 Docker 容器,
|
||||
* 删除选定的容器,
|
||||
* 删除所有容器,
|
||||
* 删除所有 Docker 镜像等。
|
||||
|
||||
#### 显示 Dockly 帮助部分
|
||||
|
||||
|
||||
##### 显示 Dockly 帮助部分
|
||||
|
||||
如果你有任何疑问,只需按 **“h”** 即可打开帮助部分。
|
||||
如果你有任何疑问,只需按 `h` 即可打开帮助部分。
|
||||
|
||||
![][10]
|
||||
|
||||
Dockly 帮助
|
||||
*Dockly 帮助*
|
||||
|
||||
有关更多详细信息,请参考最后给出的官方 GitHub 页面。
|
||||
|
||||
就是这些了。希望这篇文章有用。如果你一直在使用 Docker 容器,请试试 Dockly,看它是否有帮助。
|
||||
|
||||
* * *
|
||||
建议阅读:
|
||||
|
||||
**建议阅读:**
|
||||
|
||||
* **[如何自动更新正在运行的 Docker 容器][11]**
|
||||
* **[ctop -一个 Linux 容器的命令行监控工具][12]**
|
||||
|
||||
|
||||
|
||||
* * *
|
||||
|
||||
**资源:**
|
||||
|
||||
* [**Dockly 的 GitHub 仓库**][13]
|
||||
* [如何自动更新正在运行的 Docker 容器][11]
|
||||
* [ctop:一个 Linux 容器的命令行监控工具][12]
|
||||
|
||||
资源:
|
||||
|
||||
* [Dockly 的 GitHub 仓库][13]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -141,7 +125,7 @@ via: https://www.ostechnix.com/dockly-manage-docker-containers-from-terminal/
|
||||
作者:[sk][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/) 荣誉推出
|
||||
|
@ -1,66 +0,0 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (French IT giant Atos enters the edge-computing business)
|
||||
[#]: via: (https://www.networkworld.com/article/3397139/atos-is-the-latest-to-enter-the-edge-computing-business.html)
|
||||
[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/)
|
||||
|
||||
French IT giant Atos enters the edge-computing business
|
||||
======
|
||||
Atos takes a different approach to edge computing with a device called BullSequana Edge that's the size of a suitcase.
|
||||
![iStock][1]
|
||||
|
||||
French IT giant Atos is the latest to jump into the edge computing business with a small device called BullSequana Edge. Unlike devices from its competitors that are the size of a shipping container, including those from Vapor IO and Schneider Electronics, Atos' edge device can sit in a closet.
|
||||
|
||||
Atos says the device uses artificial intelligence (AI) applications to offer fast response times that are needed in areas such as manufacturing 4.0, autonomous vehicles, healthcare and retail/airport security – where data needs to be processed and analyzed at the edge in real time.
|
||||
|
||||
**[ Also see:[What is edge computing?][2] and [How edge networking and IoT will reshape data centers][3].]**
|
||||
|
||||
The BullSequana Edge can be purchased as standalone infrastructure or bundled with Atos’ software edge software, and that software is pretty impressive. Atos says the BullSequana Edge supports three main categories of use cases:
|
||||
|
||||
* AI: Atos Edge Computer Vision software for surveillance cameras provide advanced extraction and analysis of features such as people, faces, emotions, and behaviors so that automatic actions can be carried out based on that analysis.
|
||||
* Big data: Atos Edge Data Analytics enables organizations to improve their business models with predictive and prescriptive solutions. It utilizes data lake capabilities to make data trustworthy and useable.
|
||||
* Containers: Atos Edge Data Container (EDC) is an all-in-one container solution that is ready to run at the edge and serves as a decentralized IT system that can run autonomously in non-data center environments with no need for local on-site operation.
|
||||
|
||||
|
||||
|
||||
Because of its small size, the BullSequana Edge doesn’t pack a lot of processing power. It comes with a 16-core Intel Xeon CPU and can hold up to two Nvidia Tesla T4 GPUs or optional FPGAs. Atos says that is enough to handle the inference of complex AI models with low latency at the edge.
|
||||
|
||||
Because it handles sensitive data, BullSequana Edge also comes with an intrusion sensor that will disable the machine in case of physical attacks.
|
||||
|
||||
Most edge devices are placed near cell towers, but since the edge system can be placed anywhere, it can communicate via radio, Global System for Mobile Communications (GSM), or Wi-Fi.
|
||||
|
||||
Atos may not be a household name in the U.S., but it’s on par with IBM in Europe, having acquired IT giants Bull SA, Xerox IT Outsourcing, and Siemens IT all in this past decade.
|
||||
|
||||
**More about edge networking:**
|
||||
|
||||
* [How edge networking and IoT will reshape data centers][3]
|
||||
* [Edge computing best practices][4]
|
||||
* [How edge computing can help secure the IoT][5]
|
||||
|
||||
|
||||
|
||||
Join the Network World communities on [Facebook][6] and [LinkedIn][7] to comment on topics that are top of mind.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.networkworld.com/article/3397139/atos-is-the-latest-to-enter-the-edge-computing-business.html
|
||||
|
||||
作者:[Andy Patrizio][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/Andy-Patrizio/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://images.idgesg.net/images/article/2019/01/huawei-18501-edge-gartner-100786331-large.jpg
|
||||
[2]: https://www.networkworld.com/article/3224893/internet-of-things/what-is-edge-computing-and-how-it-s-changing-the-network.html
|
||||
[3]: https://www.networkworld.com/article/3291790/data-center/how-edge-networking-and-iot-will-reshape-data-centers.html
|
||||
[4]: https://www.networkworld.com/article/3331978/lan-wan/edge-computing-best-practices.html
|
||||
[5]: https://www.networkworld.com/article/3331905/internet-of-things/how-edge-computing-can-help-secure-the-iot.html
|
||||
[6]: https://www.facebook.com/NetworkWorld/
|
||||
[7]: https://www.linkedin.com/company/network-world
|
@ -1,5 +1,5 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: translator: (ninifly)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,3 +1,4 @@
|
||||
Translating by robsean
|
||||
Learning BASIC Like It's 1983
|
||||
======
|
||||
I was not yet alive in 1983. This is something that I occasionally regret. I am especially sorry that I did not experience the 8-bit computer era as it was happening, because I think the people that first encountered computers when they were relatively simple and constrained have a huge advantage over the rest of us.
|
||||
|
@ -1,126 +0,0 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (tomjlw)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (How to build a mobile particulate matter sensor with a Raspberry Pi)
|
||||
[#]: via: (https://opensource.com/article/19/3/mobile-particulate-matter-sensor)
|
||||
[#]: author: (Stephan Tetzel https://opensource.com/users/stephan)
|
||||
|
||||
How to build a mobile particulate matter sensor with a Raspberry Pi
|
||||
======
|
||||
|
||||
Monitor your air quality with a Raspberry Pi, a cheap sensor, and an inexpensive display.
|
||||
|
||||
![Team communication, chat][1]
|
||||
|
||||
About a year ago, I wrote about [measuring air quality][2] using a Raspberry Pi and a cheap sensor. We've been using this project in our school and privately for a few years now. However, it has one disadvantage: It is not portable because it depends on a WLAN network or a wired network connection to work. You can't even access the sensor's measurements if the Raspberry Pi and the smartphone or computer are not on the same network.
|
||||
|
||||
To overcome this limitation, we added a small screen to the Raspberry Pi so we can read the values directly from the device. Here's how we set up and configured a screen for our mobile fine particulate matter sensor.
|
||||
|
||||
### Setting up the screen for the Raspberry Pi
|
||||
|
||||
There is a wide range of Raspberry Pi displays available from [Amazon][3], AliExpress, and other sources. They range from ePaper screens to LCDs with touch function. We chose an inexpensive [3.5″ LCD][4] with touch and a resolution of 320×480 pixels that can be plugged directly into the Raspberry Pi's GPIO pins. It's also nice that a 3.5″ display is about the same size as a Raspberry Pi.
|
||||
|
||||
The first time you turn on the screen and start the Raspberry Pi, the screen will remain white because the driver is missing. You have to install [the appropriate drivers][5] for the display first. Log in with SSH and execute the following commands:
|
||||
|
||||
```
|
||||
$ rm -rf LCD-show
|
||||
$ git clone <https://github.com/goodtft/LCD-show.git>
|
||||
$ chmod -R 755 LCD-show
|
||||
$ cd LCD-show/
|
||||
```
|
||||
|
||||
Execute the appropriate command for your screen to install the drivers. For example, this is the command for our model MPI3501 screen:
|
||||
|
||||
```
|
||||
$ sudo ./LCD35-show
|
||||
```
|
||||
|
||||
This command installs the appropriate drivers and restarts the Raspberry Pi.
|
||||
|
||||
### Installing PIXEL desktop and setting up autostart
|
||||
|
||||
Here is what we want our project to do: If the Raspberry Pi boots up, we want to display a small website with our air quality measurements.
|
||||
|
||||
First, install the Raspberry Pi's [PIXEL desktop environment][6]:
|
||||
|
||||
```
|
||||
$ sudo apt install raspberrypi-ui-mods
|
||||
```
|
||||
|
||||
Then install the Chromium browser to display the website:
|
||||
|
||||
```
|
||||
$ sudo apt install chromium-browser
|
||||
```
|
||||
|
||||
Autologin is required for the measured values to be displayed directly after startup; otherwise, you will just see the login screen. However, autologin is not configured for the "pi" user by default. You can configure autologin with the **raspi-config** tool:
|
||||
|
||||
```
|
||||
$ sudo raspi-config
|
||||
```
|
||||
|
||||
In the menu, select: **3 Boot Options → B1 Desktop / CLI → B4 Desktop Autologin**.
|
||||
|
||||
There is a step missing to start Chromium with our website right after boot. Create the folder **/home/pi/.config/lxsession/LXDE-pi/** :
|
||||
|
||||
```
|
||||
$ mkdir -p /home/pi/config/lxsession/LXDE-pi/
|
||||
```
|
||||
|
||||
Then create the **autostart** file in this folder:
|
||||
|
||||
```
|
||||
$ nano /home/pi/.config/lxsession/LXDE-pi/autostart
|
||||
```
|
||||
|
||||
and paste the following code:
|
||||
|
||||
```
|
||||
#@unclutter
|
||||
@xset s off
|
||||
@xset -dpms
|
||||
@xset s noblank
|
||||
|
||||
# Open Chromium in Full Screen Mode
|
||||
@chromium-browser --incognito --kiosk <http://localhost>
|
||||
```
|
||||
|
||||
If you want to hide the mouse pointer, you have to install the package **unclutter** and remove the comment character at the beginning of the **autostart** file:
|
||||
|
||||
```
|
||||
$ sudo apt install unclutter
|
||||
```
|
||||
|
||||
![Mobile particulate matter sensor][7]
|
||||
|
||||
I've made a few small changes to the code in the last year. So, if you set up the air quality project before, make sure to re-download the script and files for the AQI website using the instructions in the [original article][2].
|
||||
|
||||
By adding the touch screen, you now have a mobile particulate matter sensor! We use it at our school to check the quality of the air in the classrooms or to do comparative measurements. With this setup, you are no longer dependent on a network connection or WLAN. You can use the small measuring station everywhere—you can even use it with a power bank to be independent of the power grid.
|
||||
|
||||
* * *
|
||||
|
||||
_This article originally appeared on[Open School Solutions][8] and is republished with permission._
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/3/mobile-particulate-matter-sensor
|
||||
|
||||
作者:[Stephan Tetzel][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[tomjlw](https://github.com/tomjlw)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/stephan
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/talk_chat_team_mobile_desktop.png?itok=d7sRtKfQ (Team communication, chat)
|
||||
[2]: https://opensource.com/article/18/3/how-measure-particulate-matter-raspberry-pi
|
||||
[3]: https://www.amazon.com/gp/search/ref=as_li_qf_sp_sr_tl?ie=UTF8&tag=openschoolsol-20&keywords=lcd%20raspberry&index=aps&camp=1789&creative=9325&linkCode=ur2&linkId=51d6d7676e10d6c7db203c4a8b3b529a
|
||||
[4]: https://amzn.to/2CcvgpC
|
||||
[5]: https://github.com/goodtft/LCD-show
|
||||
[6]: https://opensource.com/article/17/1/try-raspberry-pis-pixel-os-your-pc
|
||||
[7]: https://opensource.com/sites/default/files/uploads/mobile-aqi-sensor.jpg (Mobile particulate matter sensor)
|
||||
[8]: https://openschoolsolutions.org/mobile-particulate-matter-sensor/
|
@ -1,131 +0,0 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (fuzheng1998 )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (5 open source mobile apps)
|
||||
[#]: via: (https://opensource.com/article/19/4/mobile-apps)
|
||||
[#]: author: (Chris Hermansen https://opensource.com/users/clhermansen/users/bcotton/users/clhermansen/users/bcotton/users/clhermansen)
|
||||
|
||||
5 open source mobile apps
|
||||
======
|
||||
You can count on these apps to meet your needs for productivity,
|
||||
communication, and entertainment.
|
||||
![][1]
|
||||
|
||||
Like most people in the world, I'm rarely further than an arm's reach from my smartphone. My Android device provides a seemingly limitless number of communication, productivity, and entertainment services thanks to the open source mobile apps I've installed from Google Play and F-Droid.
|
||||
|
||||
Of the many open source apps on my phone, the following five are the ones I consistently turn to whether I want to listen to music; connect with friends, family, and colleagues; or get work done on the go.
|
||||
|
||||
### MPDroid
|
||||
|
||||
_An Android controller for the Music Player Daemon (MPD)_
|
||||
|
||||
![MPDroid][2]
|
||||
|
||||
MPD is a great way to get music from little music server computers out to the big black stereo boxes. It talks straight to ALSA and therefore to the Digital-to-Analog Converter ([DAC][3]) via the ALSA hardware interface, and it can be controlled over my network—but by what? Well, it turns out that MPDroid is a great MPD controller. It manages my music database, displays album art, handles playlists, and supports internet radio. And it's open source, so if something doesn't work…
|
||||
|
||||
MPDroid is available on [Google Play][4] and [F-Droid][5].
|
||||
|
||||
### RadioDroid
|
||||
|
||||
_An Android internet radio tuner that I use standalone and with Chromecast_
|
||||
|
||||
**
|
||||
|
||||
**
|
||||
|
||||
**
|
||||
|
||||
_![RadioDroid][6]_
|
||||
|
||||
RadioDroid is to internet radio as MPDroid is to managing my music database; essentially, RadioDroid is a frontend to [Internet-Radio.com][7]. Moreover, RadioDroid can be enjoyed by plugging headphones into the Android device, by connecting the Android device directly to the stereo via the headphone jack or USB, or by using its Chromecast capability with a compatible device. It's a fine way to check the weather in Finland, listen to the Spanish top 40, or hear the latest news from down under.
|
||||
|
||||
RadioDroid is available on [Google Play][8] and [F-Droid][9].
|
||||
|
||||
### Signal
|
||||
|
||||
_A secure messaging client for Android, iOS, and desktop_
|
||||
|
||||
**
|
||||
|
||||
**
|
||||
|
||||
**
|
||||
|
||||
_![Signal][10]_
|
||||
|
||||
If you like WhatsApp but are bothered by its [getting-closer-every-day][11] relationship to Facebook, Signal should be your next thing. The only problem with Signal is convincing your contacts they're better off replacing WhatsApp with Signal. But other than that, it has a similar interface; great voice and video calling; great encryption; decent anonymity; and it's supported by a foundation that doesn't plan to monetize your use of the software. What's not to like?
|
||||
|
||||
Signal is available for [Android][12], [iOS][13], and [desktop][14].
|
||||
|
||||
### ConnectBot
|
||||
|
||||
_Android SSH client_
|
||||
|
||||
**
|
||||
|
||||
**
|
||||
|
||||
**
|
||||
|
||||
_![ConnectBot][15]_
|
||||
|
||||
Sometimes I'm far away from my computer, but I need to log into the server to do something. [ConnectBot][16] is a great solution for moving SSH sessions onto my phone.
|
||||
|
||||
ConnectBot is available on [Google Play][17].
|
||||
|
||||
### Termux
|
||||
|
||||
_Android terminal emulator with many familiar utilities_
|
||||
|
||||
**
|
||||
|
||||
**
|
||||
|
||||
**
|
||||
|
||||
_![Termux][18]_
|
||||
|
||||
Have you ever needed to run an **awk** script on your phone? [Termux][19] is your solution. If you need to do terminal-type stuff, and you don't want to maintain an SSH connection to a remote computer the whole time, bring the files over to your phone with ConnectBot, quit the session, do your stuff in Termux, and send the results back with ConnectBot.
|
||||
|
||||
Termux is available on [Google Play][20] and [F-Droid][21].
|
||||
|
||||
* * *
|
||||
|
||||
What are your favorite open source mobile apps for work or fun? Please share them in the comments.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/4/mobile-apps
|
||||
|
||||
作者:[Chris Hermansen (Community Moderator)][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/clhermansen/users/bcotton/users/clhermansen/users/bcotton/users/clhermansen
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003588_01_rd3os.combacktoschoolserieshe_rh_041x_0.png?itok=tfg6_I78
|
||||
[2]: https://opensource.com/sites/default/files/uploads/mpdroid.jpg (MPDroid)
|
||||
[3]: https://opensource.com/article/17/4/fun-new-gadget
|
||||
[4]: https://play.google.com/store/apps/details?id=com.namelessdev.mpdroid&hl=en_US
|
||||
[5]: https://f-droid.org/en/packages/com.namelessdev.mpdroid/
|
||||
[6]: https://opensource.com/sites/default/files/uploads/radiodroid.png (RadioDroid)
|
||||
[7]: https://www.internet-radio.com/
|
||||
[8]: https://play.google.com/store/apps/details?id=net.programmierecke.radiodroid2
|
||||
[9]: https://f-droid.org/en/packages/net.programmierecke.radiodroid2/
|
||||
[10]: https://opensource.com/sites/default/files/uploads/signal.png (Signal)
|
||||
[11]: https://opensource.com/article/19/3/open-messenger-client
|
||||
[12]: https://play.google.com/store/apps/details?id=org.thoughtcrime.securesms
|
||||
[13]: https://itunes.apple.com/us/app/signal-private-messenger/id874139669?mt=8
|
||||
[14]: https://signal.org/download/
|
||||
[15]: https://opensource.com/sites/default/files/uploads/connectbot.png (ConnectBot)
|
||||
[16]: https://connectbot.org/
|
||||
[17]: https://play.google.com/store/apps/details?id=org.connectbot
|
||||
[18]: https://opensource.com/sites/default/files/uploads/termux.jpg (Termux)
|
||||
[19]: https://termux.com/
|
||||
[20]: https://play.google.com/store/apps/details?id=com.termux
|
||||
[21]: https://f-droid.org/packages/com.termux/
|
@ -1,5 +1,5 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
|
@ -1,129 +0,0 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (4 Ways to Run Linux Commands in Windows)
|
||||
[#]: via: (https://itsfoss.com/run-linux-commands-in-windows/)
|
||||
[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/)
|
||||
|
||||
4 Ways to Run Linux Commands in Windows
|
||||
======
|
||||
|
||||
_**Brief: Want to use Linux commands but don’t want to leave Windows? Here are several ways to run Linux bash commands in Windows.**_
|
||||
|
||||
If you are learning Shell scripting probably as a part of your course curriculum, you need to use Linux commands to practice the commands and scripting.
|
||||
|
||||
Your school lab might have Linux installed but personally you don’t have a [Linux laptop][1] but the regular Windows computer like everyone else. Your homework needs to run Linux commands and you wonder how to run Bash commands and scripts on Windows.
|
||||
|
||||
You can [install Linux alongside Windows in dual boot mode][2]. This method allows you to choose either Linux or Windows when you start your computer. But taking all the trouble to mess with partitions for the sole purpose of running Linux command may not be for everyone.
|
||||
|
||||
You can also [use Linux terminals online][3] but your work won’t be saved here.
|
||||
|
||||
The good news is that there are several ways you can run Linux commands inside Windows, like any regular application. Isn’t it cool?
|
||||
|
||||
### Using Linux commands inside Windows
|
||||
|
||||
![][4]
|
||||
|
||||
As an ardent Linux user and promoter, I would like to see more and more people using ‘real’ Linux but I understand that at times, that’s not the priority. If you are just looking to practice Linux to pass your exams, you can use one of these methods for running Bash commands on Windows.
|
||||
|
||||
#### 1\. Use Linux Bash Shell on Windows 10
|
||||
|
||||
Did you know that you can run a Linux distribution inside Windows 10? The [Windows Subsystem for Linux (WSL)][5] allows you to run Linux inside Windows. The upcoming version of WSL will be using the real Linux kernel inside Windows.
|
||||
|
||||
This WSL, also called Bash on Windows, gives you a Linux distribution in command line mode running as a regular Windows application. Don’t be scared with the command line mode because your purpose is to run Linux commands. That’s all you need.
|
||||
|
||||
![Ubuntu Linux inside Windows][6]
|
||||
|
||||
You can find some popular Linux distributions like Ubuntu, Kali Linux, openSUSE etc in Windows Store. You just have to download and install it like any other Windows application. Once installed, you can run all the Linux commands you want.
|
||||
|
||||
[][7]
|
||||
|
||||
Suggested read 6 Non-Ubuntu Linux Distributions For Beginners
|
||||
|
||||
![Linux distributions in Windows 10 Store][8]
|
||||
|
||||
Please refer to this tutorial about [installing Linux bash shell on Windows][9].
|
||||
|
||||
#### 2\. Use Git Bash to run Bash commands on Windows
|
||||
|
||||
You probably know what [Git][10] is. It’s a version control system developed by [Linux creator Linus Torvalds][11].
|
||||
|
||||
[Git for Windows][12] is a set of tools that allows you to use Git in both command line and graphical interfaces. One of the tools included in Git for Windows is Git Bash.
|
||||
|
||||
Git Bash application provides and emulation layer for Git command line. Apart from Git commands, Git Bash also supports many Bash utilities such as ssh, scp, cat, find etc.
|
||||
|
||||
![Git Bash][13]
|
||||
|
||||
In other words, you can run many common Linux/Bash commands using the Git Bash application.
|
||||
|
||||
You can install Git Bash in Windows by downloading and installing the Git for Windows tool for free from its website.
|
||||
|
||||
[Download Git for Windows][12]
|
||||
|
||||
#### 3\. Using Linux commands in Windows with Cygwin
|
||||
|
||||
If you want to run Linux commands in Windows, Cygwin is a recommended tool. Cygwin was created in 1995 to provide a POSIX-compatible environment that runs natively on Windows. Cygwin is a free and open source software maintained by Red Hat employees and many other volunteers.
|
||||
|
||||
For two decades, Windows users use Cygwin for running and practicing Linux/Bash commands. Even I used Cygwin to learn Linux commands more than a decade ago.
|
||||
|
||||
![Cygwin | Image Credit][14]
|
||||
|
||||
You can download Cygwin from its official website below. I also advise you to refer to this [Cygwin cheat sheet][15] to get started with it.
|
||||
|
||||
[Download Cygwin][16]
|
||||
|
||||
#### 4\. Use Linux in virtual machine
|
||||
|
||||
Another way is to use a virtualization software and install Linux in it. This way, you install a Linux distribution (with graphical interface) inside Windows and run it like a regular Windows application.
|
||||
|
||||
This method requires that your system has a good amount of RAM, at least 4 GB but better if you have over 8 GB of RAM. The good thing here is that you get the real feel of using a desktop Linux. If you like the interface, you may later decide to [switch to Linux][17] completely.
|
||||
|
||||
![Ubuntu Running in Virtual Machine Inside Windows][18]
|
||||
|
||||
There are two popular tools for creating virtual machines on Windows, Oracle VirtualBox and VMware Workstation Player. You can use either of the two. Personally, I prefer VirtualBox.
|
||||
|
||||
[][19]
|
||||
|
||||
Suggested read 9 Simple Ways To Free Up Space On Ubuntu and Linux Mint
|
||||
|
||||
You can follow [this tutorial to learn how to install Linux in VirtualBox][20].
|
||||
|
||||
**Conclusion**
|
||||
|
||||
The best way to run Linux commands is to use Linux. When installing Linux is not an option, these tools allow you to run Linux commands on Windows. Give them a try and see which method is best suited for you.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/run-linux-commands-in-windows/
|
||||
|
||||
作者:[Abhishek Prakash][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/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/get-linux-laptops/
|
||||
[2]: https://itsfoss.com/guide-install-linux-mint-16-dual-boot-windows/
|
||||
[3]: https://itsfoss.com/online-linux-terminals/
|
||||
[4]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/05/run-linux-commands-in-windows.png?resize=800%2C450&ssl=1
|
||||
[5]: https://itsfoss.com/bash-on-windows/
|
||||
[6]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2016/08/install-ubuntu-windows-10-linux-subsystem-10.jpeg?resize=800%2C268&ssl=1
|
||||
[7]: https://itsfoss.com/non-ubuntu-beginner-linux/
|
||||
[8]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2016/08/install-ubuntu-windows-10-linux-subsystem-4.jpeg?resize=800%2C632&ssl=1
|
||||
[9]: https://itsfoss.com/install-bash-on-windows/
|
||||
[10]: https://itsfoss.com/basic-git-commands-cheat-sheet/
|
||||
[11]: https://itsfoss.com/linus-torvalds-facts/
|
||||
[12]: https://gitforwindows.org/
|
||||
[13]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/05/git-bash.png?ssl=1
|
||||
[14]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/05/cygwin-shell.jpg?ssl=1
|
||||
[15]: http://www.voxforge.org/home/docs/cygwin-cheat-sheet
|
||||
[16]: https://www.cygwin.com/
|
||||
[17]: https://itsfoss.com/reasons-switch-linux-windows-xp/
|
||||
[18]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/05/ubuntu-running-in-virtual-machine-inside-windows.jpeg?resize=800%2C450&ssl=1
|
||||
[19]: https://itsfoss.com/free-up-space-ubuntu-linux/
|
||||
[20]: https://itsfoss.com/install-linux-in-virtualbox/
|
@ -1,497 +0,0 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (robsean)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (20+ FFmpeg Commands For Beginners)
|
||||
[#]: via: (https://www.ostechnix.com/20-ffmpeg-commands-beginners/)
|
||||
[#]: author: (sk https://www.ostechnix.com/author/sk/)
|
||||
|
||||
20+ FFmpeg Commands For Beginners
|
||||
======
|
||||
|
||||
![FFmpeg Commands][1]
|
||||
|
||||
In this guide, I will be explaining how to use FFmpeg multimedia framework to do various audio, video transcoding and conversion operations with examples. I have compiled most commonly and frequently used 20+ FFmpeg commands for beginners. I will keep updating this guide by adding more examples from time to time. Please bookmark this guide and come back in a while to check for the updates. Let us get started, shall we? If you haven’t installed FFmpeg in your Linux system yet, refer the following guide.
|
||||
|
||||
* [**Install FFmpeg in Linux**][2]
|
||||
|
||||
|
||||
|
||||
### 20+ FFmpeg Commands For Beginners
|
||||
|
||||
The typical syntax of the FFmpeg command is:
|
||||
|
||||
```
|
||||
ffmpeg [global_options] {[input_file_options] -i input_url} ...
|
||||
{[output_file_options] output_url} ...
|
||||
```
|
||||
|
||||
We are now going to see some important and useful FFmpeg commands.
|
||||
|
||||
##### **1\. Getting audio/video file information**
|
||||
|
||||
To display your media file details, run:
|
||||
|
||||
```
|
||||
$ ffmpeg -i video.mp4
|
||||
```
|
||||
|
||||
**Sample output:**
|
||||
|
||||
```
|
||||
ffmpeg version n4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
|
||||
built with gcc 8.2.1 (GCC) 20181127
|
||||
configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-version3
|
||||
libavutil 56. 22.100 / 56. 22.100
|
||||
libavcodec 58. 35.100 / 58. 35.100
|
||||
libavformat 58. 20.100 / 58. 20.100
|
||||
libavdevice 58. 5.100 / 58. 5.100
|
||||
libavfilter 7. 40.101 / 7. 40.101
|
||||
libswscale 5. 3.100 / 5. 3.100
|
||||
libswresample 3. 3.100 / 3. 3.100
|
||||
libpostproc 55. 3.100 / 55. 3.100
|
||||
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
|
||||
Metadata:
|
||||
major_brand : isom
|
||||
minor_version : 512
|
||||
compatible_brands: isomiso2avc1mp41
|
||||
encoder : Lavf58.20.100
|
||||
Duration: 00:00:28.79, start: 0.000000, bitrate: 454 kb/s
|
||||
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, smpte170m/bt470bg/smpte170m), 1920x1080 [SAR 1:1 DAR 16:9], 318 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
|
||||
Metadata:
|
||||
handler_name : ISO Media file produced by Google Inc. Created on: 04/08/2019.
|
||||
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
|
||||
Metadata:
|
||||
handler_name : ISO Media file produced by Google Inc. Created on: 04/08/2019.
|
||||
At least one output file must be specified
|
||||
```
|
||||
|
||||
As you see in the above output, FFmpeg displays the media file information along with FFmpeg details such as version, configuration details, copyright notice, build and library options etc.
|
||||
|
||||
If you don’t want to see the FFmpeg banner and other details, but only the media file information, use **-hide_banner** flag like below.
|
||||
|
||||
```
|
||||
$ ffmpeg -i video.mp4 -hide_banner
|
||||
```
|
||||
|
||||
**Sample output:**
|
||||
|
||||
![][3]
|
||||
|
||||
View audio, video file information using FFMpeg
|
||||
|
||||
See? Now, it displays only the media file details.
|
||||
|
||||
** **Recommended Download** – [**Free Guide: “Spotify Music Streaming: The Unofficial Guide”**][4]
|
||||
|
||||
##### **2\. Converting video files to different formats**
|
||||
|
||||
FFmpeg is powerful audio and video converter, so It’s possible to convert media files between different formats. Say for example, to convert **mp4 file to avi file** , run:
|
||||
|
||||
```
|
||||
$ ffmpeg -i video.mp4 video.avi
|
||||
```
|
||||
|
||||
Similarly, you can convert media files to any format of your choice.
|
||||
|
||||
For example, to convert youtube **flv** format videos to **mpeg** format, run:
|
||||
|
||||
```
|
||||
$ ffmpeg -i video.flv video.mpeg
|
||||
```
|
||||
|
||||
If you want to preserve the quality of your source video file, use ‘-qscale 0’ parameter:
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.webm -qscale 0 output.mp4
|
||||
```
|
||||
|
||||
To check list of supported formats by FFmpeg, run:
|
||||
|
||||
```
|
||||
$ ffmpeg -formats
|
||||
```
|
||||
|
||||
##### **3\. Converting video files to audio files**
|
||||
|
||||
To convert a video file to audio file, just specify the output format as .mp3, or .ogg, or any other audio formats.
|
||||
|
||||
The above command will convert **input.mp4** video file to **output.mp3** audio file.
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -vn output.mp3
|
||||
```
|
||||
|
||||
Also, you can use various audio transcoding options to the output file as shown below.
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -ab 320 -f mp3 output.mp3
|
||||
```
|
||||
|
||||
Here,
|
||||
|
||||
* **-vn** – Indicates that we have disabled video recording in the output file.
|
||||
* **-ar** – Set the audio frequency of the output file. The common values used are 22050, 44100, 48000 Hz.
|
||||
* **-ac** – Set the number of audio channels.
|
||||
* **-ab** – Indicates the audio bitrate.
|
||||
* **-f** – Output file format. In our case, it’s mp3 format.
|
||||
|
||||
|
||||
|
||||
##### **4\. Change resolution of video files**
|
||||
|
||||
If you want to set a particular resolution to a video file, you can use following command:
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -filter:v scale=1280:720 -c:a copy output.mp4
|
||||
```
|
||||
|
||||
Or,
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -s 1280x720 -c:a copy output.mp4
|
||||
```
|
||||
|
||||
The above command will set the resolution of the given video file to 1280×720.
|
||||
|
||||
Similarly, to convert the above file to 640×480 size, run:
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -filter:v scale=640:480 -c:a copy output.mp4
|
||||
```
|
||||
|
||||
Or,
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -s 640x480 -c:a copy output.mp4
|
||||
```
|
||||
|
||||
This trick will help you to scale your video files to smaller display devices such as tablets and mobiles.
|
||||
|
||||
##### **5\. Compressing video files**
|
||||
|
||||
It is always an good idea to reduce the media files size to lower size to save the harddrive’s space.
|
||||
|
||||
The following command will compress and reduce the output file’s size.
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4
|
||||
```
|
||||
|
||||
Please note that you will lose the quality if you try to reduce the video file size. You can lower that **crf** value to **23** or lower if **24** is too aggressive.
|
||||
|
||||
You could also transcode the audio down a bit and make it stereo to reduce the size by including the following options.
|
||||
|
||||
```
|
||||
-ac 2 -c:a aac -strict -2 -b:a 128k
|
||||
```
|
||||
|
||||
** **Recommended Download** – [**Free Guide: “PLEX, a Manual: Your Media, With Style”**][5]
|
||||
|
||||
##### **6\. Compressing Audio files**
|
||||
|
||||
Just like compressing video files, you can also compress audio files using **-ab** flag in order to save some disk space.
|
||||
|
||||
Let us say you have an audio file of 320 kbps bitrate. You want to compress it by changing the bitrate to any lower value like below.
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp3 -ab 128 output.mp3
|
||||
```
|
||||
|
||||
The list of various available audio bitrates are:
|
||||
|
||||
1. 96kbps
|
||||
2. 112kbps
|
||||
3. 128kbps
|
||||
4. 160kbps
|
||||
5. 192kbps
|
||||
6. 256kbps
|
||||
7. 320kbps
|
||||
|
||||
|
||||
|
||||
##### **7. Removing audio stream from a video file
|
||||
|
||||
**
|
||||
|
||||
If you don’t want to a audio from a video file, use **-an** flag.
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -an output.mp4
|
||||
```
|
||||
|
||||
Here, ‘an’ indicates no audio recording.
|
||||
|
||||
The above command will undo all audio related flags, because we don’t audio from the input.mp4.
|
||||
|
||||
##### **8\. Removing video stream from a media file**
|
||||
|
||||
Similarly, if you don’t want video stream, you could easily remove it from the media file using ‘vn’ flag. vn stands for no video recording. In other words, this command converts the given media file into audio file.
|
||||
|
||||
The following command will remove the video from the given media file.
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -vn output.mp3
|
||||
```
|
||||
|
||||
You can also mention the output file’s bitrate using ‘-ab’ flag as shown in the following example.
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -vn -ab 320 output.mp3
|
||||
```
|
||||
|
||||
##### **9. Extracting images from the video **
|
||||
|
||||
Another useful feature of FFmpeg is we can easily extract images from a video file. This could be very useful, if you want to create a photo album from a video file.
|
||||
|
||||
To extract images from a video file, use the following command:
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -r 1 -f image2 image-%2d.png
|
||||
```
|
||||
|
||||
Here,
|
||||
|
||||
* **-r** – Set the frame rate. I.e the number of frames to be extracted into images per second. The default value is **25**.
|
||||
* **-f** – Indicates the output format i.e image format in our case.
|
||||
* **image-%2d.png** – Indicates how we want to name the extracted images. In this case, the names should start like image-01.png, image-02.png, image-03.png and so on. If you use %3d, then the name of images will start like image-001.png, image-002.png and so on.
|
||||
|
||||
|
||||
|
||||
##### **10\. Cropping videos**
|
||||
|
||||
FFMpeg allows to crop a given media file in any dimension of our choice.
|
||||
|
||||
The syntax to crop a vide ofile is given below:
|
||||
|
||||
```
|
||||
ffmpeg -i input.mp4 -filter:v "crop=w:h:x:y" output.mp4
|
||||
```
|
||||
|
||||
Here,
|
||||
|
||||
* **input.mp4** – source video file.
|
||||
* **-filter:v** – Indicates the video filter.
|
||||
* **crop** – Indicates crop filter.
|
||||
* **w** – **Width** of the rectangle that we want to crop from the source video.
|
||||
* **h** – Height of the rectangle.
|
||||
* **x** – **x coordinate** of the rectangle that we want to crop from the source video.
|
||||
* **y** – y coordinate of the rectangle.
|
||||
|
||||
|
||||
|
||||
Let us say you want to a video with a **width of 640 pixels** and a **height of 480 pixels** , from the **position (200,150)** , the command would be:
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -filter:v "crop=640:480:200:150" output.mp4
|
||||
```
|
||||
|
||||
Please note that cropping videos will affect the quality. Do not do this unless it is necessary.
|
||||
|
||||
##### **11\. Convert a specific portion of a video**
|
||||
|
||||
Sometimes, you might want to convert only a specific portion of the video file to different format. Say for example, the following command will convert the **first 50 seconds** of given video.mp4 file to video.avi format.
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -t 10 output.avi
|
||||
```
|
||||
|
||||
Here, we specify the the time in seconds. Also, it is possible to specify the time in **hh.mm.ss** format.
|
||||
|
||||
##### **12\. Set the aspect ratio to video**
|
||||
|
||||
You can set the aspect ration to a video file using **-aspect** flag like below.
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -aspect 16:9 output.mp4
|
||||
```
|
||||
|
||||
The commonly used aspect ratios are:
|
||||
|
||||
* 16:9
|
||||
* 4:3
|
||||
* 16:10
|
||||
* 5:4
|
||||
* 2:21:1
|
||||
* 2:35:1
|
||||
* 2:39:1
|
||||
|
||||
|
||||
|
||||
##### **13\. Adding poster image to audio files**
|
||||
|
||||
You can add the poster images to your files, so that the images will be displayed while playing the audio files. This could be useful to host audio files in Video hosting or sharing websites.
|
||||
|
||||
```
|
||||
$ ffmpeg -loop 1 -i inputimage.jpg -i inputaudio.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest output.mp4
|
||||
```
|
||||
|
||||
##### **14. Trim a media file using start and stop times
|
||||
|
||||
**
|
||||
|
||||
To trim down a video to smaller clip using start and stop times, we can use the following command.
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -ss 00:00:50 -codec copy -t 50 output.mp4
|
||||
```
|
||||
|
||||
Here,
|
||||
|
||||
* –s – Indicates the starting time of the video clip. In our example, starting time is the 50th second.
|
||||
* -t – Indicates the total time duration.
|
||||
|
||||
|
||||
|
||||
This is very helpful when you want to cut a part from an audio or video file using starting and ending time.
|
||||
|
||||
Similarly, we can trim down the audio file like below.
|
||||
|
||||
```
|
||||
$ ffmpeg -i audio.mp3 -ss 00:01:54 -to 00:06:53 -c copy output.mp3
|
||||
```
|
||||
|
||||
##### **15\. Split video files into multiple parts**
|
||||
|
||||
Some websites will allow you to upload only a specific size of video. In such cases, you can split the large video files into multiple smaller parts like below.
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -t 00:00:30 -c copy part1.mp4 -ss 00:00:30 -codec copy part2.mp4
|
||||
```
|
||||
|
||||
Here, **-t 00:00:30** indicates a part that is created from the start of the video to the 30th second of video. **-ss 00:00:30** shows the starting time stamp for the next part of video. It means that the 2nd part will start from the 30th second and will continue up to the end of the original video file.
|
||||
|
||||
** **Recommended Download** – [**Free Guide: “How to Start Your Own Successful Podcast”**][6]
|
||||
|
||||
##### **16\. Joining or merging multiple video parts into one**
|
||||
|
||||
FFmpeg will also join the multiple video parts and create a single video file.
|
||||
|
||||
Create **join.txt** file that contains the exact paths of the files that you want to join. All files should be same format (same codec). The path name of all files should be mentioned one by one like below.
|
||||
|
||||
```
|
||||
file /home/sk/myvideos/part1.mp4
|
||||
file /home/sk/myvideos/part2.mp4
|
||||
file /home/sk/myvideos/part3.mp4
|
||||
file /home/sk/myvideos/part4.mp4
|
||||
```
|
||||
|
||||
Now, join all files using command:
|
||||
|
||||
```
|
||||
$ ffmpeg -f concat -i join.txt -c copy output.mp4
|
||||
```
|
||||
|
||||
If you get an error something like below;
|
||||
|
||||
```
|
||||
[concat @ 0x555fed174cc0] Unsafe file name '/path/to/mp4'
|
||||
join.txt: Operation not permitted
|
||||
```
|
||||
|
||||
Add **“-safe 0”** :
|
||||
|
||||
```
|
||||
$ ffmpeg -f concat -safe 0 -i join.txt -c copy output.mp4
|
||||
```
|
||||
|
||||
The above command will join part1.mp4, part2.mp4, part3.mp4, and part4.mp4 files into a single file called “output.mp4”.
|
||||
|
||||
##### **17\. Add subtitles to a video file**
|
||||
|
||||
We can also add subtitles to a video file using FFmpeg. Download the correct subtitle for your video and add it your video as shown below.
|
||||
|
||||
```
|
||||
$ fmpeg -i input.mp4 -i subtitle.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast output.mp4
|
||||
```
|
||||
|
||||
##### **18\. Preview or test video or audio files**
|
||||
|
||||
You might want to preview to verify or test whether the output file has been properly transcoded or not. To do so, you can play it from your Terminal with command:
|
||||
|
||||
```
|
||||
$ ffplay video.mp4
|
||||
```
|
||||
|
||||
[![][1]][7]
|
||||
|
||||
Similarly, you can test the audio files as shown below.
|
||||
|
||||
```
|
||||
$ ffplay audio.mp3
|
||||
```
|
||||
|
||||
[![][1]][8]
|
||||
|
||||
##### **19\. Increase/decrease video playback speed**
|
||||
|
||||
FFmpeg allows you to adjust the video playback speed.
|
||||
|
||||
To increase the video playback speed, run:
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4
|
||||
```
|
||||
|
||||
The command will double the speed of the video.
|
||||
|
||||
To slow down your video, you need to use a multiplier **greater than 1**. To decrease playback speed, run:
|
||||
|
||||
```
|
||||
$ ffmpeg -i input.mp4 -vf "setpts=4.0*PTS" output.mp4
|
||||
```
|
||||
|
||||
##### **20. Create Animated GIF
|
||||
|
||||
**
|
||||
|
||||
We use GIF images on almost all social and professional networks for various purposes. Using FFmpeg, we can easily and quickly create animated video files. The following guide explains how to create an animated GIF file using FFmpeg and ImageMagick in Unix-like systems.
|
||||
|
||||
* [**How To Create Animated GIF In Linux**][9]
|
||||
|
||||
|
||||
|
||||
##### **21.** Create videos from PDF files
|
||||
|
||||
I collected many PDF files, mostly Linux tutorials, over the years and saved in my Tablet PC. Sometimes I feel too lazy to read them from the tablet. So, I decided to create a video from PDF files and watch it in a big screen devices like a TV or a Computer. If you ever wondered how to make a movie file from a collection of PDF files, the following guide will help.
|
||||
|
||||
* [**How To Create A Video From PDF Files In Linux**][10]
|
||||
|
||||
|
||||
|
||||
##### **22\. Getting help**
|
||||
|
||||
In this guide, I have covered the most commonly used FFmpeg commands. It has a lot more different options to do various advanced functions. To learn more about it, refer the man page.
|
||||
|
||||
```
|
||||
$ man ffmpeg
|
||||
```
|
||||
|
||||
And, that’s all. I hope this guide will help you to getting started with FFmpeg. If you find this guide useful, please share it on your social, and professional networks. More good stuffs to come. Stay tuned!
|
||||
|
||||
Cheers!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.ostechnix.com/20-ffmpeg-commands-beginners/
|
||||
|
||||
作者:[sk][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.ostechnix.com/author/sk/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.ostechnix.com/wp-content/uploads/2017/05/FFmpeg-Commands-720x340.png
|
||||
[2]: https://www.ostechnix.com/install-ffmpeg-linux/
|
||||
[3]: http://www.ostechnix.com/wp-content/uploads/2017/05/sk@sk_001.png
|
||||
[4]: https://ostechnix.tradepub.com/free/w_make141/prgm.cgi
|
||||
[5]: https://ostechnix.tradepub.com/free/w_make75/prgm.cgi
|
||||
[6]: https://ostechnix.tradepub.com/free/w_make235/prgm.cgi
|
||||
[7]: http://www.ostechnix.com/wp-content/uploads/2017/05/Menu_004.png
|
||||
[8]: http://www.ostechnix.com/wp-content/uploads/2017/05/Menu_005-3.png
|
||||
[9]: https://www.ostechnix.com/create-animated-gif-ubuntu-16-04/
|
||||
[10]: https://www.ostechnix.com/create-video-pdf-files-linux/
|
@ -0,0 +1,62 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (chen-ni)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (French IT giant Atos enters the edge-computing business)
|
||||
[#]: via: (https://www.networkworld.com/article/3397139/atos-is-the-latest-to-enter-the-edge-computing-business.html)
|
||||
[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/)
|
||||
|
||||
法国 IT 巨头 Atos 进军边缘计算
|
||||
======
|
||||
Atos 另辟蹊径,通过一种只有行李箱大小的设备 BullSequana Edge 进军边缘计算。
|
||||
![iStock][1]
|
||||
|
||||
法国 IT 巨头 Atos 是最晚开展边缘计算业务的,他们的产品是一个叫做 BullSequana Edge 的小型设备。和竞争对手们的集装箱大小的设备不同(比如说 Vapor IO 和 Schneider Electronics的产品),Atos 的边缘设备完全可以被放进衣柜里。
|
||||
|
||||
Atos 表示,他们的这个设备使用人工智能应用提供快速响应,适合需要快速响应的领域比如生产 4.0、自动驾驶汽车、健康管理,以及零售业和机场的安保系统。在这些领域,数据需要在边缘进行实时处理和分析。
|
||||
|
||||
**[ 延伸阅读:[什么是边缘计算?][2] 以及 [边缘网络和物联网如何重新定义数据中心][3].]**
|
||||
|
||||
BullSequana Edge 可以作为独立的基础设施单独采购,也可以和Atos的边缘软件捆绑采购,并且这个软件还是非常出色的。Atos 表示 BullSequana Edge 主要支持三种使用场景:
|
||||
|
||||
* AI(人工智能):Atos 的边缘计算机视觉软件为监控摄像头提供先进的特征抽取和分析技术,包括人像,人脸,行为等特征。这些分析可以支持系统做出自动化响应。
|
||||
* 大数据:Atos 边缘数据分析系统通过预测性和规范性的解决方案,帮助机构优化商业模型。它使用数据湖的功能,确保数据的可信度和可用性。
|
||||
* 容器:Atos 边缘数据容器(EDC)是一种一体化容器解决方案。它可以作为一个去中心化的 IT 系统在边缘运行,并且可以在没有数据中心的环境下自动运行,而不需要现场操作。
|
||||
|
||||
由于体积小,BullSequana Edge 并不具备很强的处理能力。它装载一个 16 核的 Intel Xeon 中央处理器,可以装备最多两枚英伟达 Tesla T4 图形处理器或者是 FPGA(现场可编程门阵列)。Atos 表示,这就足够让复杂的 AI 模型在边缘进行低延迟的运行了。
|
||||
|
||||
考虑到数据的敏感性,BullSequana Edge 同时装备了一个入侵感应器,用来在遭遇物理入侵的时候禁用机器。
|
||||
|
||||
虽然大多数边缘设备都被安放在信号塔附近,但是考虑到边缘系统可能被安放在任何地方,BullSequana Edge 还支持通过无线电、全球移动通信系统(GSM),或者 Wi-Fi 来进行通信。
|
||||
|
||||
Atos 在美国也许不是一个家喻户晓的名字,但是在欧洲它可以和 IBM 相提并论,并且在过去的十年里已经收购了诸如 Bull SA, Xerox IT Outsourcing, 以及 Siemens IT 的 IT 巨头们。
|
||||
|
||||
**关于边缘网络的延伸阅读:**
|
||||
|
||||
* [边缘网络和物联网如何重新定义数据中心][3]
|
||||
* [边缘计算的最佳实践][4]
|
||||
* [边缘计算如何提升物联网安全][5]
|
||||
|
||||
加入 Network World 的 [Facebook 社区][6] 和 [LinkedIn 社区][7],参与最前沿话题的讨论。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.networkworld.com/article/3397139/atos-is-the-latest-to-enter-the-edge-computing-business.html
|
||||
|
||||
作者:[Andy Patrizio][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[chen-ni](https://github.com/chen-ni)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.networkworld.com/author/Andy-Patrizio/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://images.idgesg.net/images/article/2019/01/huawei-18501-edge-gartner-100786331-large.jpg
|
||||
[2]: https://www.networkworld.com/article/3224893/internet-of-things/what-is-edge-computing-and-how-it-s-changing-the-network.html
|
||||
[3]: https://www.networkworld.com/article/3291790/data-center/how-edge-networking-and-iot-will-reshape-data-centers.html
|
||||
[4]: https://www.networkworld.com/article/3331978/lan-wan/edge-computing-best-practices.html
|
||||
[5]: https://www.networkworld.com/article/3331905/internet-of-things/how-edge-computing-can-help-secure-the-iot.html
|
||||
[6]: https://www.facebook.com/NetworkWorld/
|
||||
[7]: https://www.linkedin.com/company/network-world
|
1195
translated/tech/20180629 100 Best Ubuntu Apps.md
Normal file
1195
translated/tech/20180629 100 Best Ubuntu Apps.md
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,128 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (tomjlw)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (How to build a mobile particulate matter sensor with a Raspberry Pi)
|
||||
[#]: via: (https://opensource.com/article/19/3/mobile-particulate-matter-sensor)
|
||||
[#]: author: (Stephan Tetzel https://opensource.com/users/stephan)
|
||||
|
||||
如何用树莓派搭建一个颗粒物传感器
|
||||
======
|
||||
|
||||
用树莓派,一个廉价的传感器和一个便宜的屏幕监测空气质量
|
||||
|
||||
![小组交流,讨论][1]
|
||||
|
||||
大约一年前,我写了一篇关于如何使用树莓派和廉价传感器测量[空气质量][2]的文章。我们这几年已在学校里和私下使用了这个项目。然而它有一个缺点:由于它基于无线/有线网,因此它不是便携的。如果你的树莓派,你的智能手机和电脑不在同一个网络的话,你甚至都不能访问传感器测量的数据。
|
||||
|
||||
为了弥补这一缺陷,我们给树莓派添加了一块小屏幕,这样我们就可以直接从该设备上读取数据。以下是我们如何为我们的移动细颗粒物传感器搭建并配置好屏幕。
|
||||
|
||||
### 为树莓派搭建好屏幕
|
||||
|
||||
在[亚马逊][3],阿里巴巴以及其它来源有许多可以获取的树莓派屏幕,从 ePaper 屏幕到可触控 LCD。我们选择了一个便宜的带触控功能且分辨率为320*480像素的[3.5英寸 LCD][3],可以直接插进树莓派的 GPIO 引脚。一个3.5英寸屏幕和树莓派几乎一样大,这一点不错。
|
||||
|
||||
当你第一次启动屏幕打开树莓派的时候,因为缺少驱动屏幕会保持白屏。你得首先为屏幕安装[合适的驱动][5]。通过 SSH 登入并执行以下命令:
|
||||
|
||||
```
|
||||
$ rm -rf LCD-show
|
||||
$ git clone <https://github.com/goodtft/LCD-show.git>
|
||||
$ chmod -R 755 LCD-show
|
||||
$ cd LCD-show/
|
||||
```
|
||||
|
||||
为你的屏幕执行合适的命令以安装驱动。例如这是给我们 MPI3501 型屏幕的命令:
|
||||
|
||||
```
|
||||
$ sudo ./LCD35-show
|
||||
```
|
||||
|
||||
这行命令会安装合适的驱动并重启树莓派。
|
||||
|
||||
### 安装 PIXEL 桌面并设置自动启动
|
||||
|
||||
以下是我们想要我们项目能够做到的事情:如果树莓派启动,我们想要展现一个有我们空气质量测量数据的网站。
|
||||
|
||||
首先,安装树莓派的[PIXEL 桌面环境][6]:
|
||||
|
||||
```
|
||||
$ sudo apt install raspberrypi-ui-mods
|
||||
```
|
||||
|
||||
然后安装 Chromium 浏览器以显示网站:
|
||||
|
||||
```
|
||||
$ sudo apt install chromium-browser
|
||||
```
|
||||
|
||||
需要自动登录以使测量数据在启动后直接显示;否则你将只会看到登录界面。然而自动登录并没有为树莓派用户默认设置好。你可以用 **raspi-config** 工具设置自动登录:
|
||||
|
||||
```
|
||||
$ sudo raspi-config
|
||||
```
|
||||
|
||||
在菜单中,选择:**3 Boot Options → B1 Desktop / CLI → B4 Desktop Autologin**。
|
||||
|
||||
在启动后用 Chromium 打开我们的网站这块少了一步。创建文件夹
|
||||
**/home/pi/.config/lxsession/LXDE-pi/**:
|
||||
|
||||
```
|
||||
$ mkdir -p /home/pi/config/lxsession/LXDE-pi/
|
||||
```
|
||||
|
||||
然后在该文件夹里创建 **autostart** 文件:
|
||||
|
||||
```
|
||||
$ nano /home/pi/.config/lxsession/LXDE-pi/autostart
|
||||
```
|
||||
|
||||
并粘贴以下代码:
|
||||
|
||||
```
|
||||
#@unclutter
|
||||
@xset s off
|
||||
@xset -dpms
|
||||
@xset s noblank
|
||||
|
||||
# Open Chromium in Full Screen Mode
|
||||
@chromium-browser --incognito --kiosk <http://localhost>
|
||||
```
|
||||
|
||||
如果你想要隐藏鼠标指针,你得安装 **unclutter** 包并移除 **autostart** 文件开头的注释。
|
||||
|
||||
```
|
||||
$ sudo apt install unclutter
|
||||
```
|
||||
|
||||
![移动颗粒物传感器][7]
|
||||
|
||||
我对去年的代码做了些小修改。因此如果你之前搭建过空气质量项目,确保用[原文章][2]中的指导为 AQI 网站重新下载脚本和文件。
|
||||
|
||||
通过添加触摸屏,你现在拥有了一个移动颗粒物传感器!我们在学校用它来检查教室里的空气质量或者进行比较测量。使用这种配置,你无需再依赖网络连接或 WLAN。你可以在任何地方使用小型测量站——你甚至可以使用移动电源以摆脱电网。
|
||||
|
||||
* * *
|
||||
|
||||
_这篇文章原来在[开源学校解决方案(Open Scool Solutions)][8]上发表,获得许可重新发布。_
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/3/mobile-particulate-matter-sensor
|
||||
|
||||
作者:[Stephan Tetzel][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[tomjlw](https://github.com/tomjlw)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/stephan
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/talk_chat_team_mobile_desktop.png?itok=d7sRtKfQ (Team communication, chat)
|
||||
[2]: https://opensource.com/article/18/3/how-measure-particulate-matter-raspberry-pi
|
||||
[3]: https://www.amazon.com/gp/search/ref=as_li_qf_sp_sr_tl?ie=UTF8&tag=openschoolsol-20&keywords=lcd%20raspberry&index=aps&camp=1789&creative=9325&linkCode=ur2&linkId=51d6d7676e10d6c7db203c4a8b3b529a
|
||||
[4]: https://amzn.to/2CcvgpC
|
||||
[5]: https://github.com/goodtft/LCD-show
|
||||
[6]: https://opensource.com/article/17/1/try-raspberry-pis-pixel-os-your-pc
|
||||
[7]: https://opensource.com/sites/default/files/uploads/mobile-aqi-sensor.jpg (Mobile particulate matter sensor)
|
||||
[8]: https://openschoolsolutions.org/mobile-particulate-matter-sensor/
|
||||
|
@ -1,67 +0,0 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (4 open source apps for plant-based diets)
|
||||
[#]: via: (https://opensource.com/article/19/4/apps-plant-based-diets)
|
||||
[#]: author: (Joshua Allen Holm https://opensource.com/users/holmja)
|
||||
|
||||
4 款基于植物饮食的开源应用
|
||||
======
|
||||
这些应用使素食者、纯素食主义者和那些想吃得更健康的杂食者找到可以吃的食物。
|
||||
![][1]
|
||||
|
||||
减少对肉类、乳制品和加工食品的消费对地球来说更好,也对你的健康更有益。改变你的饮食习惯可能很困难,但是一些开源的 Android 应用可以帮助你切换成基于植物的饮食。无论你是参加[无肉星期一][2],参加 Mark Bittman 的 [6:00 前的素食][3]指南,还是完全切换到[全植物性饮食][4],这些应用能帮助你找出要吃什么,发现素食和素食友好的餐馆,并轻松地将你的饮食偏好传达给他人,来助你更好地走这条路。所有这些应用都是开源的,可从 [F-Droid 仓库][5]下载。
|
||||
|
||||
### Daily Dozen
|
||||
|
||||
![Daily Dozen app][6]
|
||||
|
||||
[Daily Dozen][7] 提供了医学博士、美国法律医学院院士 Michael Greger 推荐的项目清单,作为健康饮食和生活方式的一部分。Greger 博士建议食用全食,由多种食物组成的基于植物的饮食,并坚持日常锻炼。该应用可以让你跟踪你吃的每种食物的份数,你喝了多少份水(或其他获准的饮料,如茶),以及你是否每天锻炼。每类食物都提供食物分量和属于该类别的食物清单。例如,十字花科蔬菜类包括白菜、花椰菜、芽甘蓝等许多其他建议。
|
||||
|
||||
### Food Restrictions
|
||||
|
||||
![Food Restrictions app][8]
|
||||
|
||||
[Food Restrictions][9] 是一个简单的应用,它可以帮助你将饮食限制传达给他人,即使这些人不会说你的语言。用户可以输入七种不同类别的食物限制:鸡肉、牛肉、猪肉、鱼、奶酪、牛奶和辣椒。每种类别都有“我不吃”和“我过敏”选项。“不吃”选项会显示带有红色 X 的图标。“过敏” 选项显示 X 和小骷髅图标。可以使用文本而不是图标显示相同的信息,但文本仅提供英语和葡萄牙语。还有一个选项可以显示一条文字信息,说明用户是素食主义者或纯素食主义者,它比选择更简洁、更准确地总结了这些饮食限制。纯素食主义者的文本清楚地提到不吃鸡蛋和蜂蜜,这在挑选中是没有的。但是,就像挑选方式的文字版本一样,这些句子仅提供英语和葡萄牙语。
|
||||
|
||||
### OpenFoodFacts
|
||||
|
||||
![Open Food Facts app][10]
|
||||
|
||||
购买杂货时避免不必要的成分可能令人沮丧,但 [OpenFoodFacts][11] 可以帮助简化流程。该应用可让你扫描产品上的条形码,以获得有关产品成分和是否健康的报告。即使产品符合纯素产品的标准,产品仍然可能非常不健康。拥有成分列表和营养成分可让你在购物时做出明智的选择。此应用的唯一缺点是数据是用户贡献的,因此并非每个产品都可有数据,但如果你想回馈项目,你可以贡献新数据。
|
||||
|
||||
### OpenVegeMap
|
||||
|
||||
![OpenVegeMap app][12]
|
||||
|
||||
使用 [OpenVegeMap][13] 查找你附近的纯素食或素食主义餐厅。此应用可以通过手机的当前位置或者输入地址来搜索。餐厅分类为仅限纯素食者、纯素友好,仅限素食主义者,素食友好者,非素食和未知。该应用使用来自 [OpenStreetMap][14] 的数据和用户提供的有关餐馆的信息,因此请务必仔细检查以确保所提供的信息是最新且准确的。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/4/apps-plant-based-diets
|
||||
|
||||
作者:[Joshua Allen Holm ][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://opensource.com/users/holmja
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003588_01_rd3os.combacktoschoolserieshe_rh_041x_0.png?itok=tfg6_I78
|
||||
[2]: https://www.meatlessmonday.com/
|
||||
[3]: https://www.amazon.com/dp/0385344740/
|
||||
[4]: https://nutritionstudies.org/whole-food-plant-based-diet-guide/
|
||||
[5]: https://f-droid.org/
|
||||
[6]: https://opensource.com/sites/default/files/uploads/daily_dozen.png (Daily Dozen app)
|
||||
[7]: https://f-droid.org/en/packages/org.nutritionfacts.dailydozen/
|
||||
[8]: https://opensource.com/sites/default/files/uploads/food_restrictions.png (Food Restrictions app)
|
||||
[9]: https://f-droid.org/en/packages/br.com.frs.foodrestrictions/
|
||||
[10]: https://opensource.com/sites/default/files/uploads/openfoodfacts.png (Open Food Facts app)
|
||||
[11]: https://f-droid.org/en/packages/openfoodfacts.github.scrachx.openfood/
|
||||
[12]: https://opensource.com/sites/default/files/uploads/openvegmap.png (OpenVegeMap app)
|
||||
[13]: https://f-droid.org/en/packages/pro.rudloff.openvegemap/
|
||||
[14]: https://www.openstreetmap.org/
|
@ -0,0 +1,120 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (4 Ways to Run Linux Commands in Windows)
|
||||
[#]: via: (https://itsfoss.com/run-linux-commands-in-windows/)
|
||||
[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/)
|
||||
|
||||
在 Windows 中运行 Linux 命令的 4 种方法
|
||||
======
|
||||
|
||||
_ **简介:想要使用 Linux 命令,但又不想离开 Windows ?以下是在 Windows 中运行 Linux bash 命令的几种方法。** _
|
||||
|
||||
如果你在课程中正在学习 shell 脚本,那么需要使用 Linux 命令来练习命令和脚本。
|
||||
|
||||
你的学校实验室可能安装了 Linux,但是你个人没有 [Linux 的笔记本][1],而是像其他人一样的 Windows 计算机。你的作业需要运行 Linux 命令,你也想想知道如何在 Windows 上运行 Bash 命令和脚本。
|
||||
|
||||
你可以[在双启动模式下同时安装 Windows 和 Linux][2]。此方法能让你在启动计算机时选择 Linux 或 Windows。但是,为了运行 Linux 命令而单独使用分区的麻烦可能不适合所有人。
|
||||
|
||||
你也可以[使用在线 Linux 终端][3],但你的作业无法保存。
|
||||
|
||||
好消息是,有几种方法可以在 Windows 中运行 Linux 命令,就像其他常规应用一样。不是很酷吗?
|
||||
|
||||
### 在 Windows 中使用 Linux 命令
|
||||
|
||||
![][4]
|
||||
|
||||
作为一个热心的 Linux 用户和推广者,我希望看到越来越多的人使用“真正的” Linux,但我知道有时候,这不是优先考虑的问题。如果你只是想练习 Linux 来通过考试,可以使用这些方法之一在 Windows 上运行 Bash 命令。
|
||||
|
||||
#### 1\. 在 Windows 10 上使用 Linux Bash Shell
|
||||
|
||||
你是否知道可以在 Windows 10 中运行 Linux 发行版? [Windows 的 Linux 子系统 (WSL)][5] 能让你在 Windows 中运行 Linux。即将推出的 WSL 版本将使用 Windows 内部的真正 Linux 内核。
|
||||
|
||||
此 WSL 在 Windows 上也称为 Bash,它作为一个常规的 Windows 应用运行,并提供了一个命令行模式的 Linux 发行版。不要害怕命令行模式,因为你的目的是运行 Linux 命令。这就是你所需要的。
|
||||
|
||||
![Ubuntu Linux inside Windows][6]
|
||||
|
||||
你可以在 Windows 应用商店中找到一些流行的 Linux 发行版,如 Ubuntu、Kali Linux、openSUSE 等。你只需像任何其他 Windows 应用一样下载和安装它。安装后,你可以运行所需的所有 Linux 命令。
|
||||
|
||||
|
||||
![Linux distributions in Windows 10 Store][8]
|
||||
|
||||
请参考教程:[在 Windows 上安装 Linux bash shell][9]。
|
||||
|
||||
#### 2\. 使用 Git Bash 在 Windows 上运行 Bash 命令
|
||||
|
||||
、你可能知道 [Git][10] 是什么。它是由 [Linux 创建者 Linus Torvalds][11] 开发的版本控制系统。
|
||||
|
||||
[Git for Windows][12] 是一组工具,能让你在命令行和图形界面中使用 Git。Git for Windows 中包含的工具之一是 Git Bash。
|
||||
|
||||
Git Bash 为 Git 命令行提供了仿真层。除了 Git 命令,Git Bash 还支持许多 Bash 程序,如 ssh、scp、cat、find 等。
|
||||
|
||||
![Git Bash][13]
|
||||
|
||||
换句话说,你可以使用 Git Bash 运行许多常见的 Linux/Bash 命令。
|
||||
|
||||
你可以从其网站免费下载和安装 Git for Windows 工具来在 Windows 中安装 Git Bash。
|
||||
|
||||
[下载 Git for Windows][12]
|
||||
|
||||
#### 3\. 使用 Cygwin 在 Windows 中使用 Linux 命令
|
||||
|
||||
如果要在 Windows 中运行 Linux 命令,那么 Cygwin 是一个推荐的工具。Cygwin 创建于 1995 年,旨在提供一个原生运行于 Windows 中的 POSIX 兼容环境。Cygwin 是由 Red Hat 员工和许多其他志愿者维护的免费开源软件。
|
||||
|
||||
二十年来,Windows 用户使用 Cygwin 来运行和练习 Linux/Bash 命令。十多年前,我甚至用 Cygwin 来学习 Linux 命令。
|
||||
|
||||
![Cygwin | Image Credit][14]
|
||||
|
||||
你可以从下面的官方网站下载 Cygwin。我还建议你参考这个 [Cygwin 备忘录][15]来开始使用。
|
||||
|
||||
[下载 Cygwin][16]
|
||||
|
||||
#### 4\. 在虚拟机中使用 Linux
|
||||
|
||||
另一种方法是使用虚拟化软件并在其中安装 Linux。这样,你可以在 Windows 中安装 Linux 发行版(带有图形界面)并像常规 Windows 应用一样运行它。
|
||||
|
||||
这种方法要求你的系统有大的内存,至少 4GB ,但如果你有超过 8GB 的内存那么更好。这里的好处是你可以真实地使用桌面 Linux。如果你喜欢这个界面,那么你可能会在以后决定[切换到 Linux][17]。
|
||||
|
||||
![Ubuntu Running in Virtual Machine Inside Windows][18]
|
||||
|
||||
有两种流行的工具可在 Windows 上创建虚拟机,它们是 Oracle VirtualBox 和 VMware Workstation Player。你可以使用两者中的任何一个。就个人而言,我更喜欢 VirtualBox。
|
||||
|
||||
你可以按照[本教程学习如何在 VirtualBox 中安装 Linux][20]。
|
||||
|
||||
**总结**
|
||||
|
||||
运行 Linux 命令的最佳方法是使用 Linux。当选择不安装 Linux 时,这些工具能让你在 Windows 上运行 Linux 命令。都试试看,看哪种适合你。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/run-linux-commands-in-windows/
|
||||
|
||||
作者:[Abhishek Prakash][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/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/get-linux-laptops/
|
||||
[2]: https://itsfoss.com/guide-install-linux-mint-16-dual-boot-windows/
|
||||
[3]: https://itsfoss.com/online-linux-terminals/
|
||||
[4]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/05/run-linux-commands-in-windows.png?resize=800%2C450&ssl=1
|
||||
[5]: https://itsfoss.com/bash-on-windows/
|
||||
[6]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2016/08/install-ubuntu-windows-10-linux-subsystem-10.jpeg?resize=800%2C268&ssl=1
|
||||
[8]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2016/08/install-ubuntu-windows-10-linux-subsystem-4.jpeg?resize=800%2C632&ssl=1
|
||||
[9]: https://itsfoss.com/install-bash-on-windows/
|
||||
[10]: https://itsfoss.com/basic-git-commands-cheat-sheet/
|
||||
[11]: https://itsfoss.com/linus-torvalds-facts/
|
||||
[12]: https://gitforwindows.org/
|
||||
[13]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/05/git-bash.png?ssl=1
|
||||
[14]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/05/cygwin-shell.jpg?ssl=1
|
||||
[15]: http://www.voxforge.org/home/docs/cygwin-cheat-sheet
|
||||
[16]: https://www.cygwin.com/
|
||||
[17]: https://itsfoss.com/reasons-switch-linux-windows-xp/
|
||||
[18]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/05/ubuntu-running-in-virtual-machine-inside-windows.jpeg?resize=800%2C450&ssl=1
|
||||
[20]: https://itsfoss.com/install-linux-in-virtualbox/
|
Loading…
Reference in New Issue
Block a user