2016年8月

这是 LXD 2.0 系列介绍文章的第三篇博客。

  1. LXD 入门
  2. 安装与配置
  3. 你的第一个 LXD 容器
  4. 资源控制
  5. 镜像管理
  6. 远程主机及容器迁移
  7. LXD 中的 Docker
  8. LXD 中的 LXD
  9. 实时迁移
  10. LXD 和 Juju
  11. LXD 和 OpenStack
  12. 调试,及给 LXD 做贡献

由于在管理 LXD 容器时涉及到大量的命令,所以这篇文章的篇幅是比较长的,如果你更喜欢使用同样的命令来快速的一步步实现整个过程,你可以尝试我们的在线示例

创建并启动一个新的容器

正如我在先前的文章中提到的一样,LXD 命令行客户端预配置了几个镜像源。Ubuntu 的所有发行版和架构平台全都提供了官方镜像,但是对于其他的发行版也有大量的非官方镜像,那些镜像都是由社区制作并且被 LXC 上游贡献者所维护。

Ubuntu

如果你想要支持最为完善的 Ubuntu 版本,你可以按照下面的去做:

lxc launch ubuntu:

注意,这里意味着会随着 Ubuntu LTS 的发布而变化。因此,如果用于脚本,你需要指明你具体安装的版本(参见下面)。

Ubuntu14.04 LTS

得到最新更新的、已经测试过的、稳定的 Ubuntu 14.04 LTS 镜像,你可以简单的执行:

lxc launch ubuntu:14.04

在该模式下,会指定一个随机的容器名。

如果你更喜欢指定一个你自己的名字,你可以这样做:

lxc launch ubuntu:14.04 c1

如果你想要指定一个特定的体系架构(非主流平台),比如 32 位 Intel 镜像,你可以这样做:

lxc launch ubuntu:14.04/i386 c2

当前的 Ubuntu 开发版本

上面使用的“ubuntu:”远程仓库只会给你提供官方的并经过测试的 Ubuntu 镜像。但是如果你想要未经测试过的日常构建版本,开发版可能对你来说是合适的,你需要使用“ubuntu-daily:”远程仓库。

lxc launch ubuntu-daily:devel c3

在这个例子中,将会自动选中最新的 Ubuntu 开发版本。

你也可以更加精确,比如你可以使用代号名:

lxc launch ubuntu-daily:xenial c4

最新的Alpine Linux

Alpine 镜像可以在“Images:”远程仓库中找到,通过如下命令执行:

lxc launch images:alpine/3.3/amd64 c5

其他

全部的 Ubuntu 镜像列表可以这样获得:

lxc image list ubuntu:
lxc image list ubuntu-daily:

全部的非官方镜像:

lxc image list images:

某个给定的原程仓库的全部别名(易记名称)可以这样获得(比如对于“ubuntu:”远程仓库):

lxc image alias list ubuntu:

创建但不启动一个容器

如果你想创建一个容器或者一批容器,但是你不想马上启动它们,你可以使用lxc init替换掉lxc launch。所有的选项都是相同的,唯一的不同就是它并不会在你创建完成之后启动容器。

lxc init ubuntu:

关于你的容器的信息

列出所有的容器

要列出你的所有容器,你可以这样这做:

lxc list

有大量的选项供你选择来改变被显示出来的列。在一个拥有大量容器的系统上,默认显示的列可能会有点慢(因为必须获取容器中的网络信息),你可以这样做来避免这种情况:

lxc list --fast

上面的命令显示了另外一套列的组合,这个组合在服务器端需要处理的信息更少。

你也可以基于名字或者属性来过滤掉一些东西:

stgraber@dakara:~$ lxc list security.privileged=true
+------+---------+---------------------+-----------------------------------------------+------------+-----------+
| NAME |  STATE  |        IPV4         |                       IPV6                    |    TYPE    | SNAPSHOTS |
+------+---------+---------------------+-----------------------------------------------+------------+-----------+
| suse | RUNNING | 172.17.0.105 (eth0) | 2607:f2c0:f00f:2700:216:3eff:fef2:aff4 (eth0) | PERSISTENT | 0         |
+------+---------+---------------------+-----------------------------------------------+------------+-----------+

在这个例子中,只有那些特权容器(禁用了用户命名空间)才会被列出来。

stgraber@dakara:~$ lxc list --fast alpine
+-------------+---------+--------------+----------------------+----------+------------+
|    NAME     |  STATE  | ARCHITECTURE |      CREATED AT      | PROFILES |    TYPE    |
+-------------+---------+--------------+----------------------+----------+------------+
| alpine      | RUNNING | x86_64       | 2016/03/20 02:11 UTC | default  | PERSISTENT |
+-------------+---------+--------------+----------------------+----------+------------+
| alpine-edge | RUNNING | x86_64       | 2016/03/20 02:19 UTC | default  | PERSISTENT |
+-------------+---------+--------------+----------------------+----------+------------+

在这个例子中,只有在名字中带有“alpine”的容器才会被列出来(也支持复杂的正则表达式)。

获取容器的详细信息

由于 list 命令显然不能以一种友好的可读方式显示容器的所有信息,因此你可以使用如下方式来查询单个容器的信息:

lxc info <container>

例如:

stgraber@dakara:~$ lxc info zerotier
Name: zerotier
Architecture: x86_64
Created: 2016/02/20 20:01 UTC
Status: Running
Type: persistent
Profiles: default
Pid: 31715
Processes: 32
Ips:
 eth0: inet 172.17.0.101
 eth0: inet6 2607:f2c0:f00f:2700:216:3eff:feec:65a8
 eth0: inet6 fe80::216:3eff:feec:65a8
 lo: inet 127.0.0.1
 lo: inet6 ::1
 lxcbr0: inet 10.0.3.1
 lxcbr0: inet6 fe80::c0a4:ceff:fe52:4d51
 zt0: inet 29.17.181.59
 zt0: inet6 fd80:56c2:e21c:0:199:9379:e711:b3e1
 zt0: inet6 fe80::79:e7ff:fe0d:5123
Snapshots:
 zerotier/blah (taken at 2016/03/08 23:55 UTC) (stateless)

生命周期管理命令

这些命令对于任何容器或者虚拟机管理器或许都是最普通的命令,但是它们仍然需要讲到。

所有的这些命令在批量操作时都能接受多个容器名。

启动

启动一个容器就向下面一样简单:

lxc start <container>

停止

停止一个容器可以这样来完成:

lxc stop <container>

如果容器不合作(即没有对发出的 SIGPWR 信号产生回应),这时候,你可以使用下面的方式强制执行:

lxc stop <container> --force

重启

通过下面的命令来重启一个容器:

lxc restart <container>

如果容器不合作(即没有对发出的 SIGINT 信号产生回应),你可以使用下面的方式强制执行:

lxc restart <container> --force

暂停

你也可以“暂停”一个容器,在这种模式下,所有的容器任务将会被发送相同的 SIGSTOP 信号,这也意味着它们将仍然是可见的,并且仍然会占用内存,但是它们不会从调度程序中得到任何的 CPU 时间片。

如果你有一个很占用 CPU 的容器,而这个容器需要一点时间来启动,但是你却并不会经常用到它。这时候,你可以先启动它,然后将它暂停,并在你需要它的时候再启动它。

lxc pause <container>

删除

最后,如果你不需要这个容器了,你可以用下面的命令删除它:

lxc delete <container>

注意,如果容器还处于运行状态时你将必须使用“-force”。

容器的配置

LXD 拥有大量的容器配置设定,包括资源限制,容器启动控制以及对各种设备是否允许访问的配置选项。完整的清单因为太长所以并没有在本文中列出,但是,你可以从[这里]获取它。

就设备而言,LXD 当前支持下面列出的这些设备类型:

  • 磁盘 既可以是一块物理磁盘,也可以只是一个被挂挂载到容器上的分区,还可以是一个来自主机的绑定挂载路径。
  • 网络接口卡 一块网卡。它可以是一块桥接的虚拟网卡,或者是一块点对点设备,还可以是一块以太局域网设备或者一块已经被连接到容器的真实物理接口。
  • unix 块设备 一个 UNIX 块设备,比如 /dev/sda
  • unix 字符设备 一个 UNIX 字符设备,比如 /dev/kvm
  • none 这种特殊类型被用来隐藏那种可以通过配置文件被继承的设备。

配置 profile 文件

所有可用的配置文件列表可以这样获取:

lxc profile list

为了看到给定配置文件的内容,最简单的方式是这样做:

lxc profile show <profile>

你可能想要改变文件里面的内容,可以这样做:

lxc profile edit <profile>

你可以使用如下命令来改变应用到给定容器的配置文件列表:

lxc profile apply <container> <profile1>,<profile2>,<profile3>,...

本地配置

有些配置是某个容器特定的,你并不想将它放到配置文件中,你可直接对容器设置它们:

lxc config edit <container>

上面的命令做的和“profile edit”命令是一样。

如果不想在文本编辑器中打开整个文件的内容,你也可以像这样修改单独的配置:

lxc config set <container> <key> <value>

或者添加设备,例如:

lxc config device add my-container kvm unix-char path=/dev/kvm

上面的命令将会为名为“my-container”的容器设置一个 /dev/kvm 项。

对一个配置文件使用lxc profile setlxc profile device add命令也能实现上面的功能。

读取配置

你可以使用如下命令来读取容器的本地配置:

lxc config show <container>

或者得到已经被展开了的配置(包含了所有的配置值):

lxc config show --expanded <container>

例如:

stgraber@dakara:~$ lxc config show --expanded zerotier
name: zerotier
profiles:
- default
config:
 security.nesting: "true"
 user.a: b
 volatile.base_image: a49d26ce5808075f5175bf31f5cb90561f5023dcd408da8ac5e834096d46b2d8
 volatile.eth0.hwaddr: 00:16:3e:ec:65:a8
 volatile.last_state.idmap: '[{"Isuid":true,"Isgid":false,"Hostid":100000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":100000,"Nsid":0,"Maprange":65536}]'
devices:
 eth0:
  name: eth0
  nictype: macvlan
  parent: eth0
  type: nic
  limits.ingress: 10Mbit
  limits.egress: 10Mbit
 root:
  path: /
  size: 30GB
  type: disk
 tun:
  path: /dev/net/tun
  type: unix-char
ephemeral: false

这样做可以很方便的检查有哪些配置属性被应用到了给定的容器。

实时配置更新

注意,除非在文档中已经被明确指出,否则所有的配置值和设备项的设置都会对容器实时发生影响。这意味着在不重启正在运行的容器的情况下,你可以添加和移除某些设备或者修改安全配置文件。

获得一个 shell

LXD 允许你直接在容器中执行任务。最常用的做法是在容器中得到一个 shell 或者执行一些管理员任务。

和 SSH 相比,这样做的好处是你不需要容器是网络可达的,也不需要任何软件和特定的配置。

执行环境

与 LXD 在容器内执行命令的方式相比,有一点是不同的,那就是 shell 并不是在容器中运行。这也意味着容器不知道使用的是什么样的 shell,以及设置了什么样的环境变量和你的家目录在哪里。

通过 LXD 来执行命令总是使用最小的路径环境变量设置,并且 HOME 环境变量必定为 /root,以容器的超级用户身份来执行(即 uid 为 0,gid 为 0)。

其他的环境变量可以通过命令行来设置,或者在“environment.”配置中设置成永久环境变量。

执行命令

在容器中获得一个 shell 可以简单的执行下列命令得到:

lxc exec <container> bash

当然,这样做的前提是容器内已经安装了 bash。

更复杂的命令要求使用分隔符来合理分隔参数。

lxc exec <container> -- ls -lh /

如果想要设置或者重写变量,你可以使用“-env”参数,例如:

stgraber@dakara:~$ lxc exec zerotier --env mykey=myvalue env | grep mykey
mykey=myvalue

管理文件

因为 LXD 可以直接访问容器的文件系统,因此,它可以直接读取和写入容器中的任意文件。当我们需要提取日志文件或者与容器传递文件时,这个特性是很有用的。

从容器中取回一个文件

想要从容器中获得一个文件,简单的执行下列命令:

lxc file pull <container>/<path> <dest>

例如:

stgraber@dakara:~$ lxc file pull zerotier/etc/hosts hosts

或者将它读取到标准输出:

stgraber@dakara:~$ lxc file pull zerotier/etc/hosts -
127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

向容器发送一个文件

发送以另一种简单的方式完成:

lxc file push <source> <container>/<path>

直接编辑一个文件

编辑是一个方便的功能,其实就是简单的提取一个给定的路径,在你的默认文本编辑器中打开它,在你关闭编辑器时会自动将编辑的内容保存到容器。

lxc file edit <container>/<path>

快照管理

LXD 允许你对容器执行快照功能并恢复它。快照包括了容器在某一时刻的完整状态(如果-stateful被使用的话将会包括运行状态),这也意味着所有的容器配置,容器设备和容器文件系统也会被保存。

创建一个快照

你可以使用下面的命令来执行快照功能:

lxc snapshot <container>

命令执行完成之后将会生成名为snapX(X 为一个自动增长的数)的记录。

除此之外,你还可以使用如下命令命名你的快照:

lxc snapshot <container> <snapshot name>

列出所有的快照

一个容器的所有快照的数量可以使用lxc list来得到,但是具体的快照列表只能执行lxc info命令才能看到。

lxc info <container>

恢复快照

为了恢复快照,你可以简单的执行下面的命令:

lxc restore <container> <snapshot name>

给快照重命名

可以使用如下命令来给快照重命名:

lxc move <container>/<snapshot name> <container>/<new snapshot name>

从快照中创建一个新的容器

你可以使用快照来创建一个新的容器,而这个新的容器除了一些可变的信息将会被重置之外(例如 MAC 地址)其余所有信息都将和快照完全相同。

lxc copy <source container>/<snapshot name> <destination container>

删除一个快照

最后,你可以执行下面的命令来删除一个快照:

lxc delete <container>/<snapshot name>

克隆并重命名

得到一个纯净的发行版镜像总是让人感到愉悦,但是,有时候你想要安装一系列的软件到你的容器中,这时,你需要配置它然后将它分支成多个其他的容器。

复制一个容器

为了复制一个容器并有效的将它克隆到一个新的容器中,你可以执行下面的命令:

lxc copy <source container> <destination container>

目标容器在所有方面将会完全和源容器等同。除了新的容器没有任何源容器的快照以及一些可变值将会被重置之外(例如 MAC 地址)。

移动一个快照

LXD 允许你复制容器并在主机之间移动它。但是,关于这一点将在后面的文章中介绍。

现在,“move”命令将会被用作给容器重命名。

lxc move <old name> <new name>

唯一的要求就是当容器应该被停止,容器内的任何事情都会被保存成它本来的样子,包括可变化的信息(类似 MAC 地址等)。

结论

这篇如此长的文章介绍了大多数你可能会在日常操作中使用到的命令。

很显然,这些如此之多的命令都会有不少选项,可以让你的命令更加有效率,或者可以让你指定你的 LXD 容器的某个具体方面。最好的学习这些命令的方式就是深入学习它们的帮助文档( -help)。

更多信息

如果你不想或者不能在你的机器上安装 LXD,你可以试试在线版本!


作者简介:我是 Stéphane Graber。我是 LXC 和 LXD 项目的领导者,目前在加拿大魁北克蒙特利尔的家所在的Canonical 有限公司担任 LXD 的技术主管。


来自于:https://www.stgraber.org/2016/03/19/lxd-2-0-your-first-lxd-container-312/ 作者:Stéphane Graber 译者:kylepeng93 校对:wxy

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

当要管理远程机器或者要布署应用时,虽然你有多种命令行工具可以选择,但是其中很多工具都缺少详细的使用文档。

在这篇教程中,我们将会一步一步地向你介绍如何使用 fabric 来帮助你更好得管理多台服务器。

使用 Fabric 来自动化地管理 Linux 任务

Fabric 是一个用 Python 编写的命令行工具库,它可以帮助系统管理员高效地执行某些任务,比如通过 SSH 到多台机器上执行某些命令,远程布署应用等。

在使用之前,如果你拥有使用 Python 的经验能帮你更好的使用 Fabric。当然,如果没有那也不影响使用 Fabric。

我们为什么要选择 Fabric:

  • 简单
  • 完备的文档
  • 如果你会 Python,不用增加学习其他语言的成本
  • 易于安装使用
  • 使用便捷
  • 支持多台机器并行操作

在 Linux 上如何安装 Fabric

Fabric 有一个特点就是要远程操作的机器只需要支持标准的 OpenSSH 服务即可。只要保证在机器上安装并开启了这个服务就能使用 Fabric 来管理机器。

依赖

  • Python 2.5 或更新版本,以及对应的开发组件
  • Python-setuptools 和 pip(可选,但是非常推荐)gcc

我们推荐使用 pip 安装 Fabric,但是你也可以使用系统自带的包管理器如 yum, dnfapt-get 来安装,包名一般是 fabricpython-fabric

如果是基于 RHEL/CentOS 的发行版本的系统,你可以使用系统自带的 EPEL 源 来安装 fabric。

# yum install fabric   [适用于基于 RedHat 系统]
# dnf install fabric   [适用于 Fedora 22+ 版本]

如果你是 Debian 或者其派生的系统如 Ubuntu 和 Mint 的用户,你可以使用 apt-get 来安装,如下所示:

# apt-get install fabric

如果你要安装开发版的 Fabric,你需要安装 pip 来安装 master 分支上最新版本。

# yum install python-pip       [适用于基于 RedHat 系统]
# dnf install python-pip       [适用于Fedora 22+ 版本]
# apt-get install python-pip   [适用于基于 Debian 系统]

安装好 pip 后,你可以使用 pip 获取最新版本的 Fabric。

# pip install fabric

如何使用 Fabric 来自动化管理 Linux 任务

现在我们来开始使用 Fabric,在之前的安装的过程中,Fabric Python 脚本已经被放到我们的系统目录,当我们要运行 Fabric 时输入 fab 命令即可。

在本地 Linux 机器上运行命令行

按照惯例,先用你喜欢的编辑器创建一个名为 fabfile.py 的 Python 脚本。你可以使用其他名字来命名脚本,但是就需要指定这个脚本的路径,如下所示:

# fabric --fabfile /path/to/the/file.py

Fabric 使用 fabfile.py 来执行任务,这个文件应该放在你执行 Fabric 命令的目录里面。

例子 1:创建入门的 Hello World 任务:

# vi fabfile.py

在文件内输入如下内容:

def hello():
    print('Hello world, Tecmint community')

保存文件并执行以下命令:

# fab hello

Fabric 工具使用说明

例子 2:新建一个名为 fabfile.py 的文件并打开:

粘贴以下代码至文件:

#!  /usr/bin/env python
from fabric.api import local
def uptime():
    local('uptime')

保存文件并执行以下命令:

# fab uptime

Fabric: 检查系统运行时间

让我们看看这个例子,fabfile.py 文件在本机执行了 uptime 这个命令。

在远程 Linux 机器上运行命令来执行自动化任务

Fabric API 使用了一个名为 env 的关联数组(Python 中的词典)作为配置目录,来储存 Fabric 要控制的机器的相关信息。

env.hosts 是一个用来存储你要执行 Fabric 任务的机器的列表,如果你的 IP 地址是 192.168.0.0,想要用 Fabric 来管理地址为 192.168.0.2 和 192.168.0.6 的机器,需要的配置如下所示:

#!/usr/bin/env python
from fabric.api import env
    env.hosts = [ '192.168.0.2', '192.168.0.6' ]

上面这几行代码只是声明了你要执行 Fabric 任务的主机地址,但是实际上并没有执行任何任务,下面我们就来定义一些任务。Fabric 提供了一系列可以与远程服务器交互的方法。

Fabric 提供了众多的方法,这里列出几个经常会用到的:

  • run - 可以在远程机器上运行的 shell 命令
  • local - 可以在本机上运行的 shell 命令
  • sudo - 使用 root 权限在远程机器上运行的 shell 命令
  • get - 从远程机器上下载一个或多个文件
  • put - 上传一个或多个文件到远程机器

例子 3:在多台机子上输出信息,新建新的 fabfile.py 文件如下所示

#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def echo():
    run("echo -n 'Hello, you are tuned to Tecmint ' ")

运行以下命令执行 Fabric 任务

# fab echo

fabric: 自动在远程 Linux 机器上执行任务

例子 4:你可以继续改进之前创建的执行 uptime 任务的 fabfile.py 文件,让它可以在多台服务器上运行 uptime 命令,也可以检查其磁盘使用情况,如下所示:

#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def uptime():
    run('uptime')
def disk_space():
    run('df -h')

保存并执行以下命令

# fab uptime
# fab disk_space

Fabric:自动在多台服务器上执行任务

在远程服务器上自动化布署 LAMP

例子 5:我们来尝试一下在远程服务器上布署 LAMP(Linux, Apache, MySQL/MariaDB and PHP)

我们要写个函数在远程使用 root 权限安装 LAMP。

在 RHEL/CentOS 或 Fedora 上
#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def deploy_lamp():
    run ("yum install -y httpd mariadb-server php php-mysql")
在 Debian/Ubuntu 或 Linux Mint 上
#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def deploy_lamp():
    sudo("apt-get install -q apache2 mysql-server libapache2-mod-php5 php5-mysql")

保存并执行以下命令:

# fab deploy_lamp

注:由于安装时会输出大量信息,这个例子我们就不提供屏幕 gif 图了

现在你可以使用 Fabric 和上文例子所示的功能来自动化的管理 Linux 服务器上的任务了。

一些 Fabric 有用的选项

  • 你可以运行 fab -help 输出帮助信息,里面列出了所有可以使用的命令行信息
  • –fabfile=PATH 选项可以让你定义除了名为 fabfile.py 之外的模块
  • 如果你想用指定的用户名登录远程主机,请使用 -user=USER 选项
  • 如果你需要密码进行验证或者 sudo 提权,请使用 –password=PASSWORD 选项
  • 如果需要输出某个命令的详细信息,请使用 –display=命令名 选项
  • 使用 --list 输出所有可用的任务
  • 使用 --list-format=FORMAT 选项能格式化 -list 选项输出的信息,可选的有 short、normal、 nested
  • --config=PATH 选项可以指定读取配置文件的地址
  • -–colorize-errors 能显示彩色的错误输出信息
  • --version 输出当前版本

总结

Fabric 是一个强大并且文档完备的工具,对于新手来说也能很快上手,阅读提供的文档能帮助你更好的了解它。如果你在安装和使用 Fabric 时发现什么问题可以在评论区留言,我们会及时回复。

参考:Fabric 文档


via: http://www.tecmint.com/automating-linux-system-administration-tasks/

作者:Aaron Kili 译者:NearTan 校对:wxy

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

C++,一个众所周知的 C 语言的扩展,是一个优秀的、强大的、通用编程语言,它能够提供现代化的、通用的编程功能,可以用于开发包括视频游戏、搜索引擎、其他计算机软件乃至操作系统等在内的各种大型应用。

C++,提供高度可靠性的同时还能够允许操作底层内存来满足更高级的编程要求。

虽然已经有了一些供程序员用来写 C/C++ 代码的文本编辑器,但 IDE 可以为轻松、完美的编程提供综合的环境和组件。

在这篇文章里,我们会向你展示一些可以在 Linux 平台上找到的用于 C++ 或者其他编程语言编程的最好的 IDE。 

1. 用于 C/C++ 开发的 Netbeans

Netbeans 是一个自由而开源的、流行的跨平台 IDE ,可用于 C/C++ 以及其他编程语言,可以使用由社区开发的插件展现了其完全的扩展性。

它包含了用于 C/C++ 开发的项目类型和模版,并且你可以使用静态和动态函数库来构建应用程序。此外,你可以利用现有的代码去创造你的工程,并且也可以通过拖放的方式导入二进制文件来从头构建应用。

让我们来看看关于它的特性:

  • C/C++ 编辑器很好的整合了多线程的 GNU GDB 调试工具
  • 支持代码协助
  • 支持 C++11 标准
  • 在里面创建和运行 C/C++ 测试程序
  • 支持 QT 工具包
  • 支持将已编译的应用程序自动打包到 .tar,.zip 等归档文件
  • 支持多个编译器,例如: GNU、Clang/LLVM、Cygwin、Oracle Solaris Studio 和 MinGW
  • 支持远程开发
  • 文件导航
  • 源代码检查

主页:https://netbeans.org/features/cpp/index.html

2. Code::Blocks

Code::Blocks 是一个免费的、具有高度扩展性的、并且可以配置的跨平台 C++ IDE,它为用户提供了必备而典范的功能。它具有一致的界面和体验。

最重要的是,你可以通过用户开发的插件扩展它的功能,一些插件是随同 Code::Blocks 发布的,而另外一些则不是,它们由 Code::Block 开发团队之外的个人用户所编写的。

其功能分为编译器、调试器、界面功能,它们包括:

  • 支持多种编译器如 GCC、clang、Borland C++ 5.5、digital mars 等等
  • 非常快,不需要 makefile
  • 支持多个目标平台的项目
  • 支持将项目组合起来的工作空间
  • GNU GDB 接口
  • 支持完整的断点功能,包括代码断点,数据断点,断点条件等等
  • 显示本地函数的符号和参数
  • 用户内存导出和语法高亮显示
  • 可自定义、可扩展的界面以及许多其他的的功能,包括那些用户开发的插件添加功能

主页: http://www.codeblocks.org

3. Eclipse CDT (C/C++ Development Tooling)

Eclipse 在编程界是一款著名的、开源的、跨平台的 IDE。它给用户提供了一个很棒的界面,并支持拖拽功能以方便界面元素的布置。

Eclipse CDT 是一个基于 Eclipse 主平台的项目,它提供了一个完整功能的 C/C++ IDE,并具有以下功能:

  • 支持项目创建
  • 管理各种工具链的构建
  • 标准的 make 构建
  • 源代码导航
  • 一些知识工具,如调用图、类型分级结构,内置浏览器,宏定义浏览器
  • 支持语法高亮的代码编辑器
  • 支持代码折叠和超链接导航
  • 代码重构与代码生成
  • 可视化调试存储器、寄存器的工具
  • 反汇编查看器以及更多功能

主页: http://www.eclipse.org/cdt/

4. CodeLite IDE

CodeLite 也是一款为 C/C++、JavaScript(Node.js)和 PHP 编程专门设计打造的自由而开源的、跨平台的 IDE。

它的一些主要特点包括:

  • 代码补完,提供了两个代码补完引擎
  • 支持多种编译器,包括 GCC、clang/VC++
  • 以代码词汇的方式显示错误
  • 构建选项卡中的错误消息可点击
  • 支持下一代 LLDB 调试器
  • 支持 GDB
  • 支持重构
  • 代码导航
  • 使用内置的 SFTP 进行远程开发
  • 源代码控制插件
  • 开发基于 wxWidgets 应用的 RAD(快速应用程序开发)工具,以及更多的特性

主页: http://codelite.org/

5. Bluefish 编辑器

Bluefish 不仅仅是一个一般的编辑器,它是一个轻量级的、快捷的编辑器,为程序员提供了如开发网站、编写脚本和软件代码的 IDE 特性。它支持多平台,可以在 Linux、Mac OSX、FreeBSD、OpenBSD、Solaris 和 Windows 上运行,同时支持包括 C/C++ 在内的众多编程语言。

下面列出的是它众多功能的一部分:

  • 多文档界面
  • 支持递归打开文件,基于文件名通配模式或者内容模式
  • 提供一个非常强大的搜索和替换功能
  • 代码片段边栏
  • 支持整合个人的外部过滤器,可使用命令如 awk,sed,sort 以及自定义构建脚本组成(过滤器的)管道文件
  • 支持全屏编辑
  • 网站上传和下载
  • 支持多种编码等许多其他功能

主页: http://bluefish.openoffice.nl

6. Brackets 代码编辑器

Brackets 是一个现代化风格的、开源的文本编辑器,专为 Web 设计与开发打造。它可以通过插件进行高度扩展,因此 C/C++ 程序员通过安装 C/C++/Objective-C 包来使用它来开发,这个包用来在辅助 C/C++ 代码编写的同时提供了 IDE 之类的特性。

主页: http://brackets.io/

7. Atom 代码编辑器

Atom 也是一个现代化风格、开源的多平台文本编辑器,它能运行在 Linux、Windows 或是 Mac OS X 平台。它的定制可深入底层,用户可以自定义它,以便满足各种编写代码的需求。

它功能完整,主要的功能包括:

  • 内置了包管理器
  • 智能的自动补完
  • 内置文件浏览器
  • 查找、替换以及其他更多的功能

主页: https://atom.io/

安装指南: http://www.tecmint.com/atom-text-and-source-code-editor-for-linux/

8. Sublime Text 编辑器

Sublime Text 是一个完善的、跨平台的文本编辑器,可用于代码、标记语言和一般文字。它可以用来编写 C/C++ 代码,并且提供了非常棒的用户界面。

它的功能列表包括:

  • 多重选择
  • 按模式搜索命令
  • 抵达任何一处的功能
  • 免打扰模式
  • 窗口分割
  • 支持项目之间快速的切换
  • 高度可定制
  • 支持基于 Python 的 API 插件以及其他特性

主页: https://www.sublimetext.com

安装指南: http://www.tecmint.com/install-sublime-text-editor-in-linux/

9. JetBrains CLion

JetBrains CLion 是一个收费的、强大的跨平台 C/C++ IDE。它是一个完全整合的 C/C++ 程序开发环境,并提供 Cmake 项目模型、一个嵌入式终端窗口和一个主要以键盘操作的编码环境。

它还提供了一个智能而现代化的编辑器,具有许多令人激动的功能,提供了理想的编码环境,这些功能包括:

  • 除了 C/C++ 还支持其他多种语言
  • 在符号声明和上下文中轻松导航
  • 代码生成和重构
  • 可定制的编辑器
  • 即时代码分析
  • 集成的代码调试器
  • 支持 Git、Subversion、Mercurial、CVS、Perforcevia(通过插件)和 TFS
  • 无缝集成了 Google 测试框架
  • 通过 Vim 仿真插件支持 Vim 编辑体验

主页: https://www.jetbrains.com/clion/

10. 微软的 Visual Studio Code 编辑器

Visual Studio 是一个功能丰富的、完全整合的、跨平台开发环境,运行在 Linux、Windows 和 Mac OS X 上。 最近它向 Linux 用户开源了,它重新定义了代码编辑这件事,为用户提供了在 Windows、Android、iOS 和 Web 等多个平台开发不同应用所需的一切工具。

它功能完备,功能分类为应用程序开发、应用生命周期管理、扩展和集成特性。你可以从 Visual Studio 官网阅读全面的功能列表。

主页: https://www.visualstudio.com

11. KDevelop

KDevelop 是另一个自由而开源的跨平台 IDE,能够运行在 Linux、Solaris、FreeBSD、Windows、Mac OS X 和其他类 Unix 操作系统上。它基于 KDevPlatform、KDE 和 Qt 库。KDevelop 可以通过插件高度扩展,功能丰富且具有以下显著特色:

  • 支持基于 Clang 的 C/C++ 插件
  • 支持 KDE 4 配置迁移
  • 支持调用二进制编辑器 Oketa
  • 支持众多视图插件下的差异行编辑
  • 支持 Grep 视图,使用窗口小部件节省垂直空间等

主页: https://www.kdevelop.org

12. Geany IDE

Geany 是一个免费的、快速的、轻量级跨平台 IDE,只需要很少的依赖包就可以工作,独立于流行的 Linux 桌面环境下,比如 GNOME 和 KDE。它需要 GTK2 库实现功能。

它的特性包括以下列出的内容:

  • 支持语法高亮显示
  • 代码折叠
  • 调用提示
  • 符号名自动补完
  • 符号列表
  • 代码导航
  • 一个简单的项目管理工具
  • 可以编译并运行用户代码的内置系统
  • 可以通过插件扩展

主页: http://www.geany.org/

13. Ajunta DeveStudio

Ajunta DevStudio 是一个简单,强大的 GNOME 界面的软件开发工作室,支持包括 C/C++ 在内的几种编程语言。

它提供了先进的编程工具,比如项目管理、GUI 设计、交互式调试器、应用程序向导、源代码编辑器、版本控制等。此外,除了以上特点,Ajunta DeveStudio 也有其他很多不错的 IDE 功能,包括:

  • 简单的用户界面
  • 可通过插件扩展
  • 整合了 Glade 用于所见即所得的 UI 开发
  • 项目向导和模板
  • 整合了 GDB 调试器
  • 内置文件管理器
  • 使用 DevHelp 提供上下文敏感的编程辅助
  • 源代码编辑器支持语法高亮显示、智能缩进、自动缩进、代码折叠/隐藏、文本缩放等

主页: http://anjuta.org/

14. GNAT Programming Studio

GNAT Programming Studio 是一个免费的、易于使用的 IDE,设计的目的用于统一开发人员与他/她的代码和软件之间的交互。

它通过高亮程序的重要部分和逻辑从而提升源代码导航体验,打造了一个理想的编程环境。它的设计目标是为你带来更舒适的编程体验,使用户能够从头开始开发全面的系统。

它丰富的特性包括以下这些:

  • 直观的用户界面
  • 对开发者的友好性
  • 支持多种编程语言,跨平台
  • 灵活的 MDI(多文档界面)
  • 高度可定制
  • 使用喜欢的工具获得全面的可扩展性

主页: http://libre.adacore.com/tools/gps/

15. Qt Creator

这是一款收费的、跨平台的 IDE,用于创建连接设备、用户界面和应用程序。Qt Creator 可以让用户比应用的编码做到更多的创新。

它可以用来创建移动和桌面应用程序,也可以连接到嵌入式设备。

它的优点包含以下几点:

  • 复杂的代码编辑器
  • 支持版本控制
  • 项目和构建管理工具
  • 支持多屏幕和多平台,易于构建目标之间的切换等等

主页: https://www.qt.io/ide/

16. Emacs 编辑器

Emacs 是一个自由的、强大的、可高度扩展的、可定制的、跨平台文本编辑器,你可以在 Linux、Solaris、FreeBSD、NetBSD、OpenBSD、Windows 和 Mac OS X 这些系统中使用该编辑器。

Emacs 的核心也是一个 Emacs Lisp 的解释器,Emacs Lisp 是一种基于 Lisp 的编程语言。在撰写本文时,GNU Emacs 的最新版本是 24.5,Emacs 的基本功能包括:

  • 内容识别编辑模式
  • Unicode 的完全支持
  • 可使用 GUI 或 Emacs Lisp 代码高度定制
  • 下载和安装扩展的打包系统
  • 超出了正常文本编辑的功能生态系统,包括项目策划、邮件、日历和新闻阅读器等
  • 完整的内置文档,以及用户指南等等

主页: https://www.gnu.org/software/emacs/

17. VI/VIM 编辑器

Vim,一款 VI 编辑器的改进版本,是一款自由的、强大的、流行的并且高度可配置的文本编辑器。它为有效率地文本编辑而生,并且为 Unix/Linux 使用者提供了激动人心的编辑器特性,因此,它对于撰写和编辑 C/C++ 代码也是一个好的选择。

总的来说,与传统的文本编辑器相比,IDE 为编程提供了更多的便利,因此使用它们是一个很好的选择。它们带有激动人心的特征并且提供了一个综合性的开发环境,有时候程序员不得不陷入对最好的 C/C++ IDE 的选择。

在互联网上你还可以找到许多 IDE 来下载,但不妨试试我们推荐的这几款,可以帮助你尽快找到哪一款是你需要的。


via: http://www.tecmint.com/best-linux-ide-editors-source-code-editors/

作者:Aaron Kili 译者:ZenMooreLiBradWangYueScreamLemonDemo 校对:wxy

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

“微软爱 Linux”,这是微软高管们在几个场合都宣称过的事情,微软公司也正不断将之付诸实施,对一些重要的软件进行了开源和维持更新。这家软件巨头正在不断地贴近开源世界。

而这种举动的最近一个动向是关于 PowerShell 的,它是微软的一种强大的基于任务的命令行外壳和脚本语言,使用于 Windows。而现在,微软宣布开源了 PowerShell,并支持 Linux 和 Mac OS X,这意味着它变成了跨平台的了。

该公司称这样将可以使 Windows 和 Linux 团队不再“各行其是,而是更容易彼此协作”,这是开源 PowerShell 的一个主要原因。

“我们以开源 PowerShell 的一小部分开始,并与一些在开源方面有经验、了解该如何做开源的合作伙伴们进行了沟通,”微软说,“我们发现 PowerShell 很适合开源,因为原来的 PowerShell 团队成员大多都具有深厚的 Unix 背景。”

在 Linux 上,目前 PowerShell 已经可以用在 Ubuntu、 CentOS 和 RedHat 上了,其 Alpha 版已经可从 GitHub 上下载了。

微软越来越爱 Linux 了

曾经有段时间,微软称 Linux 是“癌症”,但是随着时光流逝,现在微软已经认识到了开源世界的不断增长,除了在这个领域加大投入之外别无选择。

微软已经启动了几个开源项目,希望能吸引一些 Linux 用户,其中一个新的 Skype 版本就是建立在社区反馈之上的。该公司也试着将这种模式应用到 Windows 10 之中,它的许多面世的产品中的部分功能就是基于用户反馈进行开发和改进的。

Linux 世界已经越来越大了,微软从其中看到了成长的机会。微软披露说, 其 Azure 云上面有 1/3 的虚拟机是 Linux,而 Azure 云市场中的第三方 IaaS 有 60% 包括了开源软件。

在 Mozilla 基金会开展“开源品牌重建”活动两个月之后,终于将选择缩小到了七种。它的这个活动并不要求用户提交设计方案,而是由一家英国的设计公司 Johnson Banks 提供的设计,但是会根据用户的意见作为选择的参考。

下一步,会从这七个设计中选择出三个来,并在九月底选定最终的一个。这些设计包括了各种场景下的不同演绎,目前这七个分别是:

The Eye

The Connector

The Open Button

Protocol

Wireframe World

The Impossible M

Flik Flak

不过,我觉得都……挺丑的。

今日关注

最新的 BlackArch Linux ISO 镜像文件8月19号发布。BlackArch 基于轻量级、高度定制的 Arch Linux 操作系统。在这一最新的镜像文件中,新增了100多个新的用于渗透测试的工具,目前有1500多项可用的工具,提供了1900多个包,为 Openbox, Fluxbox 提供了新的菜单项,采用了最新的 Linux 4.7.1 内核。目前已经可以下载使用了。

图文摘要

Wine 1.9.17 发布。在这一最新版本中,提供了对 64 位平台更好的异常处理机制,对内置的 joystick 更好的支持,对内嵌的字体的改进,以及对 GDI+ 元文件的支持。

基于 Slackware 14.2 的 SlackEX GNU/Linux 操作系统160817版本发布,搭载了最新的 Linux 4.7.1 内核,目前的软件仓库中可用的都是最新的软件,比如 Google Chrome 46.0.2490.86,VirtualBox 5.1.4等。

ReactOS 0.4.2 发布。在这一版本中,除了通过对文件管理器和图形化 shell 进行各种完善来提高整体的用户体验之外,比较有意思的新特性是,用户可以从各种 Unix 和 Linux 文件系统中挂载并读取文件(目前还不支持写文件)。已经可以进行下载体验了。

KDE Applications 16.08 正式发布,这是目前 KDE Plasma 5.7 桌面环境下最新最稳定的软件套件。值得一提的是 虚拟地球仪软件 Marble virtual globe 世界地图集 world atlas 软件更新到了2.0版本。