Seth Kenlon 发布的文章

在 Windows 上安装 GNU 编译器集合(gcc)和其他 GNU 组件来启用 GNU Autotools。

如果你是一名使用 Windows 的黑客,你不需要专有应用来编译代码。借助 Minimalist GNU for Windows(MinGW)项目,你可以下载并安装 GNU 编译器集合(GCC)以及其它几个基本的 GNU 组件,以在 Windows 计算机上启用 GNU Autotools

安装 MinGW

安装 MinGW 的最简单方法是通过 mingw-get,它是一个图形用户界面 (GUI) 应用,可帮助你选择要安装哪些组件,并让它们保持最新。要运行它,请从项目主页下载 mingw-get-setup.exe。像你安装其他 EXE 一样,在向导中单击完成安装。

 title=

在 Windows 上安装 GCC

目前为止,你只安装了一个程序,或者更准确地说,一个称为 mingw-get 的专用的包管理器。启动 mingw-get 选择要在计算机上安装的 MinGW 项目应用。

首先,从应用菜单中选择 mingw-get 启动它。

 title=

要安装 GCC,请单击 GCC 和 G++ 包来标记要安装 GNU C、C++ 编译器。要完成此过程,请从 mingw-get 窗口左上角的安装菜单中选择应用更改

安装 GCC 后,你可以使用完整路径在 PowerShell 中运行它:

PS> C:\MinGW\bin\gcc.exe --version
gcc.exe (MinGW.org GCC Build-x) x.y.z
Copyright (C) 2019 Free Software Foundation, Inc.

在 Windows 上运行 Bash

虽然它自称 “minimalist”(最小化),但 MinGW 还提供一个可选的 Bourne shell 命令行解释器,称为 MSYS(它代表 最小系统 Minimal System )。它是微软的 cmd.exe 和 PowerShell 的替代方案,它默认是 Bash。除了是(自然而然的)最流行的 shell 之一外,Bash 在将开源应用移植到 Windows 平台时很有用,因为许多开源项目都假定了 POSIX 环境。

你可以在 mingw-get GUI 或 PowerShell 内安装 MSYS:

PS> mingw-get install msys

要尝试 Bash,请使用完整路径启动它:

PS> C:\MinGW\msys/1.0/bin/bash.exe
bash.exe-$ echo $0
"C:\MinGW\msys/1.0/bin/bash.exe"

在 Windows 上设置路径

你可能不希望为要使用的每个命令输入完整路径。将包含新 GNU 可执行文件的目录添加到 Windows 中的路径中。需要添加两个可执行文件的根目录:一个用于 MinGW(包括 GCC 及其相关工具链),另一个用于 MSYS(包括 Bash、GNU 和 BSD 项目中的许多常用工具)。

若要在 Windows 中修改环境,请单击应用菜单并输入 env

 title=

这将打开“首选项”窗口。点击窗口底部附近的“环境变量”按钮。

在“环境变量”窗口中,双击底部面板中的“路径”选区。

在“编辑环境变量”窗口中,单击右侧的“新增”按钮。创建一个新条目 C:\MinCW\msys\1.0\bin,然后单击 “确定”。以相同的方式创建第二条 C:\MinGW\bin,然后单击 “确定”。

 title=

在每个首选项窗口中接受这些更改。你可以重启计算机以确保所有应用都检测到新变量,或者只需重启 PowerShell 窗口。

从现在开始,你可以调用任何 MinGW 命令而不指定完整路径,因为完整路径位于 PowerShell 继承的 Windows 系统的 %PATH% 环境变量中。

Hello world

你已经完成设置,因此可以对新的 MinGW 系统进行小测试。如果你是 Vim 用户,请启动它,然后输入下面的 “hello world” 代码:

#include <stdio.h>
#include <iostream>

using namespace std;

int main() {
  cout << "Hello open source." << endl;
  return 0;
}

将文件保存为 hello.cpp,然后使用 GCC 的 C++ 组件编译文件:

PS> gcc hello.cpp --output hello

最后,运行它:

PS> .\a.exe
Hello open source.
PS>

MinGW 的内容远不止我在这里所能介绍的。毕竟,MinGW 打开了一个完整的开源世界和定制代码的潜力,因此请充分利用它。对于更广阔的开源世界,你还可以试试 Linux。当所有的限制都被消除后,你会惊讶于可能的事情。但与此同时,请试试 MinGW,并享受 GNU 的自由。


via: https://opensource.com/article/20/8/gnu-windows-mingw

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

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

在 shell 中使用 bc 更好地做算数,它是一种用于高级计算的数学语言。

大多数 POSIX 系统带有 GNU bc,这是一种任意精度的数字处理语言。它的语法类似于 C,但是它也支持交互式执行语句和处理来自标准输入(stdin)的数据。因此,它通常是以下问题的答案:“我如何在 Linux shell 中进行数学运算?”这种回应方式在网上很常见:

$ echo "1+1" | bc
2

尽管这是完全正确的,但很少有用户认为,与更直观的方式相比,它很优雅,例如:

$ 1+1  # 这不能工作
2

交互模式要容易一些:

$ bc
1+1
2
quit
$

但是交互模式并不总是适合简单计算想要的直观工作流,比如直接输入你想要的计算。因此我推荐 Bluebat 的纯 Bash 计算器

bc 实际上提供了一种用于高级计算的数学语言。

含高级函数的 mathlib

bc 本身提供了基本的数学函数。你可以在交互式模式下测试它们:

$ bc
3^2
9
(3^2)*(9)/3
27

使用 --mathlib 选项获取高级函数,包括正弦、余弦、正切等。在交互式模式下,你可以测试其中一些。下面是 90 度的余弦:

c(90)
-.44807361612917015236

9 的正弦:

s(9)
.41211848524175656975

创建你自己的 bc 函数

你还可以在 bc 中创建自己的函数。函数定义以 define 关键字开始,并用大括号括起来。下面是一个输入到交互式会话中的简单函数,它返回给它的任意数字:

$ bc
define echo(n) {
  return (n);
}

在同一个交互式会话中,测试一下:

echo(2)
2
echo(-2)
-2

bc 中的 if 语句

bc 语言还有各种控制语句,其中最简单的是 if/else。语法乍一看可能很熟悉,但在如何处理大括号方面有些不同。请注意,if 语句的 else 子句包含在大括号中,而 then 子句不是,但两者都用分号终止。下面是一个返回数字 n 的绝对值的函数:

define abso(n) {
  if ( n > 0 ) return (n);
  { return (-n); }
}

在同一个交互式会话中,测试一下:

abso(-5)
5
abso(5)
5

将数据导入 bc

使用交互式会话对于快速计算和实验是可以容忍的,但在退出时会丢失数据,并且在出错时很难编辑。幸运的是,bc 可以从外部文件加载变量和函数。

下面是一个包含两个变量(solfoo)的文件,以及一个用于查找绝对值的自定义 abso 函数:

sol=299792458

foo=42

define abso(n) {
  if ( n > 0 ) return (n);
  { return (-n); }
}

将它保存到名为 bcvars.bc 的文件中,以便导入 bc 交互式会话:

$ bc bcvars.bc
foo
42
sol
299792458
abso(-23)
23

使用 bc 助力你的数学

bc 语言相对简单,前提是你知道足够的数学知识来构造任何你想完成的方程。虽然 bc 默认提供了有用的基本函数,并允许你创建自己的函数,但你可以通过站在巨人的肩膀上来减少工作量。加载了用于数学基础知识和特定任务(例如,计算复利)的新函数的文件可从 GNU bc 页获得,同时也可获得 bc 完整文档

如果你有兴趣在 shell 里更好地处理数学,试试 bc 。它不会使你成为数学天才,但它可能会让过程更简单。


via: https://opensource.com/article/20/7/bc-math

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

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

这些快速参考指南让系统管理员的生活和日常工作变得更轻松,而且它们都是免费提供的。

作为一名系统管理员,你做所的不是一件工作,而是全部工作,而且往往每一件工作都是随时随地出现,毫无预兆。除非你每天都只做一项任务,否则当需要的时候,你可能并不总是都能将所有的命令和选项都记在脑海里。这就是为什么我喜欢速查表的原因。

速查表可以帮助你避免愚蠢的错误,它们可以让你不必翻阅数页的文档,并让你高效地完成任务。我为每位系统管理员挑选了我最喜欢的 10 个速查表,无论他的经验水平如何。

网络

我们的《Linux 网络》速查表是速查表界的的瑞士军刀,它包含了最常见的网络命令的简单提醒,包括 nslookuptcpdumpnmclinetstattraceroute 等。最重要的是,它用了 ip 命令,所以你终于可以不用再默认使用 ifconfig 命令了!

防火墙

系统管理员有两种:了解 iptables 的和使用前一类人编写的 iptables 配置文件的。如果你是第一类人,你可以继续使用你的 iptables 配置,有没有 firewalld 都无所谓。

如果你是第二类人,你终于可以放下你的 iptables 焦虑,拥抱 firewalld 的轻松。阅读《用 firewall-cmd 保护你的 Linux 网络》,然后下载我们的《firewalld 速查表》来记住你所学到的东西,保护你的网络端口从未如此简单。

SSH

许多系统管理员都用的是 POSIX shell,所以可以在别人的计算机上运行的远程 shell 是 Linux 上最重要的工具之一也就不足为奇了。任何学习服务器管理的人通常很早就学会了使用 SSH,但我们中的许多人只学习了基础知识。

当然,SSH 可以在远程机器上打开一个交互式的 shell,但它的功能远不止这些。比如说,你需要在远程机器上进行图形化登录。远程主机的用户要么不在键盘旁边,要么无法理解你启用 VNC 的指令。只要你有 SSH 权限,就可以为他们打开端口。

$ ssh -L 5901:localhost:5901 <remote_host>

通过我们的《SSH 速查表》了解更多。

Linux 用户和权限

传统的大型机和 UNIX 超级计算机风格的用户账户现在基本上已经被 Samba、LDAP 和 OpenShift等系统所取代。然而,这并没有改变对管理员和服务账户仔细管理的需求。为此,你仍然需要熟悉useraddusermodchownchmodpasswdgpasswdumask 等命令。

把我的《用户和权限速查表》放在手边,你就可以随时对与用户管理有关的任务进行合理的概览,并有实例命令演示你需要做的任何事情的正确语法。

基本的 Linux 命令

并不是所有的系统管理员都会把所有的时间花在终端上。无论你是否喜欢在桌面上工作,还是刚开始使用 Linux,有时为常用的终端命令提供一个任务导向的参考是很好的。

对于一个为灵活性和即兴性而设计的界面来说,找到所有你可能需要的东西是很困难的,但我的《常用命令速查表》是相当全面的。这张速查表以任何技术型桌面用户的典型生活为蓝本,涵盖了用命令在计算机内导航、寻找文件的绝对路径、复制和重命名文件、建立目录、启动系统服务等内容。

Git

在计算机的历史上,版本控制曾经是只有开发者才需要的东西。但那是过去,而 Git 是现在。对于任何希望跟踪从 Bash 脚本到配置文件、文档和代码的变化的人来说,版本控制是一个重要的工具。Git 适用于每个人,包括程序员、网站可靠性工程师(SRE),甚至系统管理员。

获取我们的《Git 速查表》来学习要领、基本工作流程和最重要的 Git 标志。

Curl

Curl 不一定是系统管理员专用的工具,从技术上讲,它“只是”一个用于终端的非交互式 Web 浏览器。你可能几天都不用它一次。然而,你很有可能会发现 Curl 对你每天要做的事情很有用,不管是快速参考网站上的一些信息,还是排除网络主机的故障,或者是验证你运行或依赖的一个重要 API。

Curl 是一个向服务器传输数据的命令,它支持的协议包括 HTTP、FTP、IMAP、LDAP、POP3、SCP、SFTP、SMB、SMTP 等。它是一个重要的网络工具,所以下载我们的《Curl 速查表》,开始探索 Curl 吧。

SELinux

Linux 的安全策略在默认情况下是很好的,root 权限和用户权限之间有很强的分离,但 SELinux 使用标签系统对其进行了改进。在配置了 SELinux 的主机上,每个进程和每个文件对象(或目录、网络端口、设备等)都有一个标签。SELinux 提供了一套规则来控制进程标签对对象(如文件)标签的访问。

有时候你需要调整 SELinux 策略,或者调试一些安装时没有正确设置的东西,或者深入了解当前的策略。我们的《SELinux 速查表》可以提供帮助。

Kubectl

无论你是已经迁移到了开放的混合云、封闭的私有云,还是你还在研究这样的迁移需要准备什么,你都需要了解 Kubernetes。虽然云确实还需要人去摆弄物理服务器,但作为一个系统管理员,你的未来肯定会涉及到容器,而没有什么比 Kubernetes 更能做到这一点。

虽然 OpenShift 为 Kubernetes 提供了流畅的“仪表盘”体验,但有时需要一种直接的方法,这正是 kubectl 提供的。下一次当你不得不到处推送容器时,请确保你手头有我们的《kubectl 速查表》。

awk

近几年来,Linux 经历了很多创新,有虚拟机、容器、新的安全模型、新的初始化系统、云等等。然而有些东西似乎永远不会改变。尤其是,系统管理员需要从日志文件和其它无尽的数据流中解析和隔离信息。仍然没有比 Aho、Weinberger 和 Kernighan 的经典 awk 命令更适合这项工作的工具。

当然,自从 1977 年它被编写出来后,awk 已经走过了很长的路,新的选项和功能使它更容易使用。但如果你不是每天都在使用 awk,那么多的选项和语法可能会让你有点不知所措。下载我们的《awk 速查表》,了解 GNU awk 的工作原理。

赠品:Bash 脚本编程

速查表是有用的,但如果你想找更全面的东西,你可以下载我们的《Bash 脚本编程手册》。这本指南教你如何将你从速查表中了解到的所有命令和经验结合到脚本中,帮助你建立一个随时能用的自动化解决方案库来解决你的日常问题。本书内容丰富,详细讲解了 Bash 的工作原理、脚本与交互式命令的区别、如何捕捉错误等。

赋能系统管理员

你是一名系统管理员吗?

你正在成为一名系统管理员的路上吗?

你是否对系统管理员一天都在做什么感到好奇?

如果是的话,请查看《赋能系统管理员》,这里有来自业界最勤奋的系统管理员的新文章,讲述他们的工作,以及 Linux 和开源如何让这一切成为可能。


via: https://opensource.com/article/20/7/sysadmin-cheat-sheets

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

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

我全要!

Linux 桌面的最大优点之一是它提供给用户选择的权利。如果你不喜欢你屏幕左下角的应用程序菜单,你可以移除它。如果你不喜欢你的文件管理器组织文件的方式,你可以使用另外一个文件管理器。不过,不可否认的是,这对那些不习惯自己选择如何使用计算机的用户来说可能会感到困惑。如果你正在考虑安装 Linux,你要做的选择之一就是你想使用哪一个桌面,最好的方法就是尝试几个不同的桌面,直到你找到感觉适合你的桌面。

默认桌面

作为在 Fedora、Ubuntu、Debian 和一些其它操作系统上的默认桌面,GNOME 桌面可能是最流行的 Linux 桌面。它有一个易于使用和现代化的界面,并带有为手机环境设计的小点缀,因此即使在触摸屏上也感觉很自然。

不过,一些 Linux 发行版选择了不同的桌面环境,如 KDE Plasma、Pantheon、Cinnamon 和 Mate。

传统的 Unix

 title=

Unix 是现代操作系统的鼻祖,也是 Linux 的直接灵感来源,拥有令人吃惊的丰富的桌面历史。大多数人都不熟悉 Unix 桌面设计,因为 Unix 计算机被认为是学术界、科学界和电影界常见的专业机器,而不是家用计算机。如果你是一名 Unix、IRIX 或 NeXT 的用户,那么你可能会对类似于 CDE 或 NeXTStep 的桌面有着美好的回忆。你很幸运,因为这一传统延续至今:

  • Windowmaker: NeXT 界面的复兴
  • Enlightenment: 一个现代化的改进型 Windowmaker 风格的桌面
  • Fluxbox: 跳出 Blackbox 思维定式
  • Openbox: 改善 Blackbox 的可用性
  • TWM: 与 X11 绑定至死的示例桌面
  • Fvwm: 改进的 TWM

轻量级桌面

 title=

你可能想知道为什么 Linux 有那么多的桌面可供选择。你可以把它归结为个人喜好和对效率低下的低容忍度,但优化用户界面也有技术上的好处。例如,老电脑难以跟上用户界面的更新,可以使用轻量级桌面赋予它新的生命 。另外,你可能只是想把 CPU 处理能力分配到除桌面以外的其它东西上,所以保持你的主用户界面极简是有意义的。不管你的动机是什么,这里有一些你可以尝试的桌面:

实验性桌面

 title=

当创建一个桌面并将其集成到一个系统中相对容易的时候,会发生的事情之一就是你会得到一些有趣的概念验证项目和试验性项目。有一些会比其它的更精致,有一些则不是很容易安装。这些很可能注定不会成为你的永久桌面,但是它们可以是很有趣的体验:

选择你的桌面

如果太多的选择让你不知所措,那么记住:桌面意味着 可选。你没有义务来尝试发行版附带的多个桌面。

许多 Linux 的高级用户都会满足于他们的发行版所提供的某个桌面。最重要的是得到一个可以与你的计算机一起工作的 Linux 系统系统,并花费时间来学习它是如何工作的。归根结底,所有的桌面都只是为了做同一件事:帮助你组织和管理你的重要数据。让你了解你的桌面是如何工作的,这才是最重要的。但是如果你已经了解了你的默认桌面的各个方面,那你现在有了可以在周末尝试的大量选择。祝你玩得开心!


via: https://opensource.com/article/20/5/linux-desktops

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

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

RTOS 之类的实时嵌入式操作系统使嵌入式系统的编程更简单

物联网(IoT)无处不在,它意味着几乎所有的产品,从冰箱到口袋手表,都可以连网。为了实现这个目标,每个产品都需要拥有一个嵌入式计算机来运行网络栈,有些产品几乎是小的不可思议。这就是嵌入式软件出现的场景:现代科技打造的非常小的计算机,硬编码到硬件芯片,不需要任何板外处理器、内存或者存储盘。

就传统视角而言,这种场景意味着没有操作系统可用,但是因为种种 原因,开发者发现,类似于 RTOS 之类的实时嵌入式操作系统能让嵌入式系统的编程变得非常简单。

虽然 RT-Thread 嵌入式操作系统致力于鼓励程序员新手进入物联网领域,但并非所有的人都具备使用 C 语言硬编码微芯片的能力。幸运的是,MicroPython 通过让开发者创建运行于嵌入式系统的 Python 代码的方式,逐渐填补了这个鸿沟。为了让整个过程更简单,RT-Thread 有一个可以用于 VSCode 和 VSCodium 的插件,为开发者提供了物联网方面的开发环境。其部分特性包括:

  • 方便的连接方式,可以很容易的通过串口、网络或者 USB 连接到开发板(如果你使用过 Arduino,肯定会很熟悉这个流程)。
  • 支持上传文件或目录到开发板。
  • 支持基于 MicroPython 的代码,而且具有智能的代码补完、语法检查功能。
  • 支持 MicroPython REPL 交互式环境。
  • 丰富的示例代码和演示程序。
  • 完整的工程同步功能。
  • 快速运行内存中的程序代码。
  • 运行函数的代码片段。
  • 支持主流的 MicroPython 开发板。
  • 支持 Linux 和 Windows 操作系统,并经过充分测试。

准备

在开始之前,如果你使用的是 Windows 操作系统,那么必须保证 VSCode 的默认终端是 PowerShell。运行 VSCodium,从 “Terminal” 菜单项启动一个终端. 在显示在 VSCodium 窗口底部的终端界面,从下拉菜单顶端选择 “PowerShell”。 不论你是在 Windows 还是 Linux 系统下工作,必须保证安装了 Python 3(在 Linux 上,它可能已经安装了,否则可以通过软件库安装它)。

还要安装的是微软提供的通用 VSCode Python 插件。安装方法是点击 “File” 菜单,找到 “Preferences” 子菜单,从中打开 “Extensions” 面板。在扩展中,搜索 “Python”,找到来自微软的 Python 插件。

 title=

当然,在上述操作之前,你要先正确安装 VSCodiumVSCode

安装插件

安装 MicroPython 开发插件的方法与安装 Python 插件一样,点击 “File” 菜单,找到 “Preferences” 子菜单,选择 “Extensions”。

在扩展中,搜索 “MicroPython”,安装 RT-Thread 插件。

 title=

使用插件

你的开发板必须能访问串口,这需要组策略的允许。你可能需要将自己的账户加入该组,通常在默认情况下你的账户可能并不在该组。首先,确认你的账户不在 “dialout” 组:

$ groups
tux users

本例中,用户“tux”只是“tux”组和“users”组的成员,所以需要将用户“tux”添加到“dialout”组:

$ sudo usermod --append --groups dialout tux

退出登录或重启以载入你新的组权限。

创建 MicroPython 工程

MicroPython 开发的第一步是创建 MicroPython 工程用来编写和运行代码。使用 MicroPython 插件创建工程的方法是,点击左下方的 “Create MicroPython project” 按钮。

 title=

之后会有一些提示,让你选择创建空白工程还是包含例程的工程。

连接到开发板

点击 VSCodium 左下方的 “Connection” 按钮,进行 VSCodium 与开发板的连接,在弹出的列表中,选择要连接的物理设备。

查看例程

MicroPython 插件提供了许多例程和例库,供学习和调用。获取例程的过程是,激活 MicroPython 之后,VSCodium 左侧按钮条会出现“新建”快捷图标,点击该图标就可以了。点击“文档”快捷图标,会显示例程文件列表;点击“文件夹”快捷图标,会显示例库列表。

 title=

直接在开发板上运行 MicroPython 文件

在 VSCodium 中可以通过在开发板上运行单个程序文件,很方便快捷的进行程序调试。快捷键 Alt+Q 会触发一个特定的插件,该插件会将当前的 Python 文件上传到开发板内存中。你还可以在当前 Python 文档界面点击右键,然后选择 “Run the MicroPython file directly on the device” 实现同样的功能。

 title=

如果你需要以不上传代码的方式检查一组代码,可以使用“代码片段”功能。要运行 MicroPython REPL 环境中的代码片段,在编辑器中选中要运行的片段,右键菜单中点击 “Execute the selected MicroPython code on the device” (也可以使用 Alt+Q 快捷键)。

加载文件和目录到开发板

如果需要加载文件或目录到开发板,有现成的方法可用:选中工程中要加载到开发板的文件或目录,在选中的对象上右键,点击右键菜单中的 “Download the file/folder to the device”。

注意,如果开发板中已有与要加载的文件或目录同名者,加载操作将导致开发板原有的内容被覆盖。

在 REPL 环境中运行 os.listdir() 命令,可以检查文件和目录是否成功加载。当然,也可以通过相应的命令删除 REPL 中的文件或目录。

删除文件的命令如下:

os.remove('file_to_delete')

删除目录的命令如下:

os.rmdir('folder_to_delete')

工程的同步

点击左下角“同步”按钮可以启动工程同步,该操作将把本地工程中所有的文件和目录同步到开发板的文件系统。建议在完成程序调试之后进行该操作,调试过程中不需要频繁进行同步操作。

工程的同步操作完成后,开发板上的文件列表可以在 “Device Files List” 列看到。

放手尝试

RT-Thread 以开源的方式发布 MicroPython 插件,意在为新老开发者提供帮助,它的很多特性,如代码自动补全等,与开源插件之间互有影响和促进。你如果想为嵌入式系统或物联网系统编写软件,这就是最简单的方式,没有之一。


via: https://opensource.com/article/20/7/python-rt-thread

作者:Seth Kenlon 选题:lujun9972 译者:silentdawn-zz 校对:wxy

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

尽情地拍照吧,gphoto2 能够方便、快速地将照片从你的设备传输到 Linux 计算机上。

移动设备的最大缺点之一就是其将数据从设备传输到计算机很困难。移动设备在这一缺点上有着悠久的历史。早期的移动设备,如 Pilot 和掌上电脑 PDA 设备,需要使用特殊的同步软件来传输数据(你必须小心翼翼地做这件事,因为你的设备可能会因为电池耗尽而导致数据永久丢失);旧版 iPod 只提供特定平台的界面。现代移动设备默认将你的数据发送到在线帐户,以便你可以在计算机上再次下载。

好消息——如果你正在运行 Linux,你可以使用 gphoto2 命令与移动设备进行连接。gphoto2 最初是作为一种与数码相机通信的方式而开发的,那时的数码相机只有传统的相机功能,现在的 gphoto2 可以和许多不同种类的移动设备通讯。别让这个名字骗了你,它可以处理所有类型的文件,而不仅仅是照片。更棒的是,它可以编写脚本、很灵活、并且比大多数 GUI 界面功能强大得多。

如果你曾经为在计算机和移动设备之间同步数据而苦恼,请了解一下 gphoto2

安装 gPhoto2

很可能你的 Linux 系统已经安装了 libgphoto2,因为它是与移动设备连接的一个关键库,但你可能还需要安装命令 gphoto2,该命令可能在你的存储库中。

在 Fedora 或 RHEL 上:

$ sudo dnf install gphoto2

在 Debian 或 Ubuntu 上:

$ sudo apt install gphoto2

验证兼容性

若要确认你的移动设备是否受支持,请使用 --list-cameras,通过管道传输到 less

$ gPhoto2 --list-cameras | less

或者你可以通过管道把它传送到 grep 来搜索一个词。例如,如果你有三星 Galaxy,则使用 grep,并通过选项 -i 关闭区分大小写:

$ gphoto2 --list-cameras | grep -i galaxy
  "Samsung Galaxy models (MTP)"
  "Samsung Galaxy models (MTP+ADB)"
  "Samsung Galaxy models Kies mode"

这证实了三星 Galaxy 设备支持通过 MTP 连接和通过 ADB 连接 MTP。

如果你没有在列表中找到自己的移动设备,你仍然可以尝试使用 gphoto2,可能你的设备在列表中使用了不同的称呼。

查找移动设备

要使用 gPhoto2,首先必须将移动设备插入计算机,设置为 MTP 模式,并且授予计算机与它交互的权限。这通常需要在你的移动设备上操作,往往是在屏幕上按下一个按钮,以允许其文件系统被刚刚连接的计算机访问。

 title=

如果你不授权电脑访问移动设备,那么 gPhoto2 可以检测到你的移动设备,但它不能与之交互。

要确保计算机检测到你连接的移动设备,请使用 --auto-detect 选项:

$ gphoto2 --auto-detect
Model                       Port
---------------------------------------
Samsung Galaxy models (MTP) usb:002,010

如果你的移动设备没有被检测到,请先检查数据线,然后检查你的设备是否配置为通过 MTP、ADB 或其它 gPhoto2 支持的协议连接,如 --list-cameras 所示。

查询你的设备支持的特性

对于现代设备,通常有过多的潜在功能,但并非所有移动设备都支持这些功能。你可以用 --abilities 选项来确定自己的移动设备支持哪些功能。我觉得结果看起来直观。

$ gphoto2 --abilities
Abilities for camera            : Samsung Galaxy models (MTP)
Serial port support             : no
USB support                     : yes
Capture choices                 : Capture not supported by driver
Configuration support           : no
Delete selected files on camera : yes
Delete all files on camera      : no
File preview (thumbnail) support: no
File upload support             : yes

如果只连接一个设备,那么不需要指定查询的设备。但是,如果连接了多个 gPhoto2 可以与之交互的设备,则可以通过端口、相机型号或 usbid 指定设备。

与你的移动设备交互

如果你的设备支持拍摄功能,则可以从计算机调用你的摄像头来获取媒体。例如,要拍摄照片:

$ gphoto2 --capture-image

要拍摄照片并立即将其传输到连接的计算机:

$ gphoto2 --capture-image-and-download

你也可以录制视频和声音。如果连接了多个拍摄设备,可以按端口、相机型号或 usbid 指定要使用的设备:

$ gphoto2 --camera "Samsung Galaxy models (MTP)" \
--capture-image-and-download

文件和文件夹

要想更加智能地管理移动设备上的文件,你需要了解 gPhoto2 连接的文件系统的结构。

你可以使用 --get-folders 选项查看可用文件夹:

$ gphoto2 --list-folders
There are 2 folders in folder '/'.                                            
 - store_00010001
 - store_00020002
There are 0 folders in folder '/store_00010001'.
There are 0 folders in folder '/store_00020002'.

每个文件夹代表设备上的一个存储单元。在本例中,store_00010001 是内部存储器,store_00020002 是 SD 卡,这可能与你的设备的结构不同。

获取文件

现在你知道了设备的文件夹布局,就可以从设备获取照片了。你可以使用许多不同的选项,具体取决于你想从设备中获取什么。

如果你知道绝对路径,则可以获取指定的文件:

$ gphoto2 --get-file IMG_0001.jpg --folder /store_00010001/myphotos

你可以同时获得所有的文件:

$ gphoto2 --get-all-files --folder /store_00010001/myfiles

你可以只获取音频文件:

gphoto2 --get-all-audio-data --folder /store_00010001/mysounds

gPhoto2 还有其他的选择,其中大多数取决于你连接的设备和使用协议是否支持。

上传文件

现在你知道了潜在的目标文件夹,就可以将文件从计算机上传到你的设备。例如,假设有一个名为 example.epub 的文件在当前目录中,你可以使用 --upload-file 选项和 --folder 选项将文件发送到设备并指定要上传到的目录:

$ gphoto2 --upload file example.epub \
--folder store_00010001

如果你希望将多个文件上传到同一个位置,你可以在设备上创建一个目录:

$ gphoto2 --mkdir books \
--folder store_00010001
$ gphoto2 --upload-file *.epub \
--folder store_00010001/books

列出文件

若要查看设备上的文件,请使用 --list-files 选项:

$ gphoto2 --list-files --folder /store_00010001
There is 1 file in folder '/store_00010001'
#1     example.epub 17713 KB application/x-unknown
$ gphoto2 --list-files --folder /store_00010001/books
There is 1 file in folder '/store_00010001'
#1    example0.epub 17713 KB application/x-unknown
#2    example1.epub 12264 KB application/x-unknown
[...]

探索你的使用方式

gPhoto2 的大部分功能取决于你的设备,因此不同用户的体验可能不尽相同。在 gphoto2 --help 中列出了许多操作供你探索。使用gPhoto2,再也不用费劲把文件从你的设备传输到电脑上了!

这些开源图片库能够帮助你组织文件,并让的图片看起来很棒。


via: https://opensource.com/article/20/7/gphoto2-linux

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

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