Archit Modi 发布的文章

比较世界上最流行的两种编程语言,并在投票中让我们知道你喜欢哪一个。

让我们比较一下世界上两种最受欢迎、最强大的编程语言:Java 和 Python!这两种语言有巨大的社区支持和库来执行几乎任何编程任务,尽管选择编程语言通常取决于开发人员的场景。在比较和对比之后,请投票分享你的观点。

是什么?

  • Java 是一门通用面向对象的编程语言,主要用于开发从移动端到 Web 到企业级应用的各种应用。
  • Python 是一门高级面向对象的编程语言,主要用于 Web 开发、人工智能、机器学习、自动化和其他数据科学应用。

创建者

  • Java 是由 James Gosling(Sun Microsystems)创造的。
  • Python 是由 Guido van Rossum 创造的。

开源状态

  • Java 是免费的,(大部分)开源,但商业用途除外。
  • Python 对于所有场景都是免费、开源的。

平台依赖

  • Java 根据它的 WORA (“ 一次编写,到处运行 write once, run anywhere ”)哲学,它是平台无关的。
  • Python 依赖于平台。

编译或解释

  • Java 是一门编译语言。Java 程序在编译时转换为字节码,而不是运行时。
  • Python 是一门解释性语言。Python 程序在运行时进行解释。

文件创建

  • Java:编译后生成 <filename>.class 文件。
  • Python:在运行期,创建 <filename>.pyc 文件。

错误类型

  • Java 有 2 种错误类型:编译和运行时错误。
  • Python 有 1 种错误类型:回溯(或运行时)错误。

静态或动态类型

  • Java 是静态类型。当初始化变量时,需要在程序中指定变量的类型,因为类型检查是在编译时完成的。
  • Python 是动态类型。变量不需要在初始化时指定类型,因为类型检查是在运行时完成的。

语法

  • Java:每个语句都需要以分号(; )结尾,并且代码块由大括号( {} )分隔。
  • Python:代码块通过缩进分隔(用户可以选择要使用的空格数,但在整个块中应保持一致)。

类的数量

  • Java:在 Java 中的单个文件中只能存在一个公有顶级类。
  • Python:Python 中的单个文件中可以存在任意数量的类。

代码多少?

  • Java 通常比 Python 要写更多代码行。
  • Python通常比 Java 要写更少代码行。

多重继承

  • Java 不支持多重继承(从两个或多个基类继承)。
  • Python 支持多重继承,但由于继承复杂性、层次结构、依赖等各种问题,它很少实现。

多线程

  • Java 多线程可以支持同时运行的两个或多个并发线程。
  • Python 使用全局解释器锁 (GIL),一次只允许运行单个线程(一个 CPU 核)。

执行速度

  • Java 的执行时间通常比 Python 快。
  • Python 的执行时间通常比 Java 慢。

Hello world

Java 的:

public class Hello {
   public static void main([String][3][] args) {
      [System][4].out.println("Hello Opensource.com from Java!");
   }
}

Python 的:

print("Hello Opensource.com from Java!")

运行程序

 title=

要运行 java 程序 Hello.java,你需要先编译它,这将创建一个 Hello.class 文件。只需运行类名 java Hello。对于 Python,只需运行文件 python3 helloworld.py


via: https://opensource.com/article/19/12/java-vs-python

作者:Archit Modi 选题:lujun9972 译者:geekpi 校对:wxy

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

两种编程语言都各有优缺点,它们在某些任务方面互有胜负。

BashPython 是大多数自动化工程师最喜欢的编程语言。它们都各有优缺点,有时很难选择应该使用哪一个。所以,最诚实的答案是:这取决于任务、范围、背景和任务的复杂性。

让我们来比较一下这两种语言,以便更好地理解它们各自的优点。

Bash

  • 是一种 Linux/Unix shell 命令语言
  • 非常适合编写使用命令行界面(CLI)实用程序的 shell 脚本,利用一个命令的输出传递给另一个命令(管道),以及执行简单的任务(可以多达 100 行代码)
  • 可以按原样使用命令行命令和实用程序
  • 启动时间比 Python 快,但执行时性能差
  • Windows 中默认没有安装。你的脚本可能不会兼容多个操作系统,但是 Bash 是大多数 Linux/Unix 系统的默认 shell
  • 与其它 shell (如 csh、zsh、fish) 完全兼容。
  • 通过管道(|)传递 CLI 实用程序如 sedawkgrep 等会降低其性能
  • 缺少很多函数、对象、数据结构和多线程支持,这限制了它在复杂脚本或编程中的使用
  • 缺少良好的调试工具和实用程序

Python

  • 是一种面对对象编程语言(OOP),因此它比 Bash 更加通用
  • 几乎可以用于任何任务
  • 适用于大多数操作系统,默认情况下它在大多数 Unix/Linux 系统中都有安装
  • 与伪代码非常相似
  • 具有简单、清晰、易于学习和阅读的语法
  • 拥有大量的库、文档以及一个活跃的社区
  • 提供比 Bash 更友好的错误处理特性
  • 有比 Bash 更好的调试工具和实用程序,这使得它在开发涉及到很多行代码的复杂软件应用程序时是一种很棒的语言
  • 应用程序(或脚本)可能包含许多第三方依赖项,这些依赖项必须在执行前安装
  • 对于简单任务,需要编写比 Bash 更多的代码

我希望这些列表能够让你更好地了解该使用哪种语言以及在何时使用它。

你在日常工作中更多会使用哪种语言,Bash 还是 Python?请在评论中分享。


via: https://opensource.com/article/19/4/bash-vs-python

作者:Archit Modi (Red Hat) 选题:lujun9972 译者:MjSeven 校对:wxy

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

要在命令间移动数据?使用管道可使此过程便捷。

在 Linux 中,pipe 能让你将一个命令的输出发送给另一个命令。管道,如它的名称那样,能重定向一个进程的标准输出、输入和错误到另一个进程,以便于进一步处理。

“管道”(或称“未命名管道”)命令的语法是在两个命令之间加上 | 字符:

Command-1 | Command-2 | ...| Command-N

这里,该管道不能通过另一个会话访问;它被临时创建用于接收 Command-1 的执行并重定向标准输出。它在成功执行之后删除。

在上面的示例中,contents.txt 包含特定目录中所有文件的列表 —— 具体来说,就是 ls -al 命令的输出。我们首先通过管道(如图所示)使用 “file” 关键字从 contents.txtgrep 文件名,因此 cat 命令的输出作为 grep 命令的输入提供。接下来,我们添加管道来执行 awk 命令,该命令显示 grep 命令的过滤输出中的第 9 列。我们还可以使用 wc -l 命令计算 contents.txt 中的行数。

只要系统启动并运行或直到它被删除,命名管道就可以持续使用。它是一个遵循 FIFO)(先进先出)机制的特殊文件。它可以像普通文件一样使用。也就是,你可以写入,从中读取,然后打开或关闭它。要创建命名管道,命令为:

mkfifo <pipe-name>

这将创建一个命名管道文件,它甚至可以在多个 shell 会话中使用。

创建 FIFO 命名管道的另一种方法是使用此命令:

mknod p <pipe-name>

要重定向任何命令的标准输出到其它命令,请使用 > 符号。要重定向任何命令的标准输入,请使用 < 符号。

如上所示,ls -al 命令的输出被重定向到 contents.txt 并插入到文件中。类似地,tail 命令的输入通过 < 符号从 contents.txt 读取。

这里,我们创建了一个命名管道 my-named-pipe,并将 ls -al 命令的输出重定向到命名管道。我们可以打开一个新的 shell 会话并 cat 命名管道的内容,如前所述,它显示了 ls -al 命令的输出。请注意,命名管道的大小为零,并有一个标志 “p”。

因此,下次你在 Linux 终端上使用命令并在命令之间移动数据时,希望管道使这个过程快速简便。


via: https://opensource.com/article/18/8/introduction-pipes-linux

作者:Archit Modi 选题:lujun9972 译者:geekpi 校对:wxy

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

一个使管理服务器和网络更轻松的 Linux 工具和命令的参考列表。

如果你是一位系统管理员,那么你的日常工作应该包括管理服务器和数据中心的网络。以下的 Linux 实用工具和命令 —— 从基础的到高级的 —— 将帮你更轻松地管理你的网络。

在几个命令中,你将会看到 <fqdn>,它是“完全合格域名”的全称。当你看到它时,你应该用你的网站 URL 或你的服务器来代替它(比如,server-name.company.com),具体要视情况而定。

Ping

正如它的名字所表示的那样,ping 是用于去检查从你的系统到你想去连接的系统之间端到端的连通性。当一个 ping 成功时,它使用的 ICMP 的 echo 包将会返回到你的系统中。它是检查系统/网络连通性的一个良好开端。你可以在 IPv4 和 IPv6 地址上使用 ping 命令。(阅读我的文章 "如何在 Linux 系统上找到你的 IP 地址" 去学习更多关于 IP 地址的知识)

语法:

  • IPv4: ping <ip address>/<fqdn>
  • IPv6: ping6 <ip address>/<fqdn>

你也可以使用 ping 去解析出网站所对应的 IP 地址,如下图所示:

Traceroute

ping 是用于检查端到端的连通性,traceroute 实用工具将告诉你到达对端系统、网站,或服务器所经过的路径上所有路由器的 IP 地址。traceroute 在网络连接调试中经常用于在 ping 之后的第二步。

这是一个跟踪从你的系统到其它对端的全部网络路径的非常好的工具。在检查端到端的连通性时,这个实用工具将告诉你到达对端系统、网站、或服务器上所经历的路径上的全部路由器的 IP 地址。通常用于网络连通性调试的第二步。

语法:

  • traceroute <ip address>/<fqdn>

Telnet

语法:

  • telnet <ip address>/<fqdn> 是用于 telnet 进入任何支持该协议的服务器。

Netstat

这个网络统计(netstat)实用工具是用于去分析解决网络连接问题和检查接口/端口统计数据、路由表、协议状态等等的。它是任何管理员都应该必须掌握的工具。

语法:

  • netstat -l 显示所有处于监听状态的端口列表。
  • netstat -a 显示所有端口;如果去指定仅显示 TCP 端口,使用 -at(指定信显示 UDP 端口,使用 -au)。
  • netstat -r 显示路由表。

  • netstat -s 显示每个协议的状态总结。

  • netstat -i 显示每个接口传输/接收(TX/RX)包的统计数据。

Nmcli

nmcli 是一个管理网络连接、配置等工作的非常好的实用工具。它能够去管理网络管理程序和修改任何设备的网络配置详情。

语法:

  • nmcli device 列出网络上的所有设备。
  • nmcli device show <interface> 显示指定接口的网络相关的详细情况。
  • nmcli connection 检查设备的连接情况。
  • nmcli connection down <interface> 关闭指定接口。
  • nmcli connection up <interface> 打开指定接口。
  • nmcli con add type vlan con-name <connection-name> dev <interface> id <vlan-number> ipv4 <ip/cidr> gw4 <gateway-ip> 在特定的接口上使用指定的 VLAN 号添加一个虚拟局域网(VLAN)接口、IP 地址、和网关。

路由

检查和配置路由的命令很多。下面是其中一些比较有用的:

语法:

  • ip route 显示各自接口上所有当前的路由配置。

  • route add default gw <gateway-ip> 在路由表中添加一个默认的网关。
  • route add -net <network ip/cidr> gw <gateway ip> <interface> 在路由表中添加一个新的网络路由。还有许多其它的路由参数,比如,添加一个默认路由,默认网关等等。
  • route del -net <network ip/cidr> 从路由表中删除一个指定的路由条目。

  • ip neighbor 显示当前的邻接表和用于去添加、改变、或删除新的邻居。

  • arp (它的全称是 “地址解析协议”)类似于 ip neighborarp 映射一个系统的 IP 地址到它相应的 MAC(介质访问控制)地址。

Tcpdump 和 Wireshark

Linux 提供了许多包捕获工具,比如 tcpdumpwiresharktshark 等等。它们被用于去捕获传输/接收的网络流量中的数据包,因此它们对于系统管理员去诊断丢包或相关问题时非常有用。对于热衷于命令行操作的人来说,tcpdump 是一个非常好的工具,而对于喜欢 GUI 操作的用户来说,wireshark 是捕获和分析数据包的不二选择。tcpdump 是一个 Linux 内置的用于去捕获网络流量的实用工具。它能够用于去捕获/显示特定端口、协议等上的流量。

语法:

  • tcpdump -i <interface-name> 显示指定接口上实时通过的数据包。通过在命令中添加一个 -w 标志和输出文件的名字,可以将数据包保存到一个文件中。例如:tcpdump -w <output-file.> -i <interface-name>

  • tcpdump -i <interface> src <source-ip> 从指定的源 IP 地址上捕获数据包。
  • tcpdump -i <interface> dst <destination-ip> 从指定的目标 IP 地址上捕获数据包。
  • tcpdump -i <interface> port <port-number> 从一个指定的端口号(比如,53、80、8080 等等)上捕获数据包。
  • tcpdump -i <interface> <protocol> 捕获指定协议的数据包,比如:TCP、UDP、等等。

Iptables

iptables 是一个包过滤防火墙工具,它能够允许或阻止某些流量。这个实用工具的应用范围非常广泛;下面是它的其中一些最常用的使用命令。

语法:

  • iptables -L 列出所有已存在的 iptables 规则。
  • iptables -F 删除所有已存在的规则。

下列命令允许流量从指定端口到指定接口:

  • iptables -A INPUT -i <interface> -p tcp –dport <port-number> -m state –state NEW,ESTABLISHED -j ACCEPT
  • iptables -A OUTPUT -o <interface> -p tcp -sport <port-number> -m state – state ESTABLISHED -j ACCEPT

下列命令允许 环回 loopback 接口访问系统:

  • iptables -A INPUT -i lo -j ACCEPT
  • iptables -A OUTPUT -o lo -j ACCEPT

Nslookup

nslookup 工具是用于去获得一个网站或域名所映射的 IP 地址。它也能用于去获得你的 DNS 服务器的信息,比如,一个网站的所有 DNS 记录(具体看下面的示例)。与 nslookup 类似的一个工具是 dig(Domain Information Groper)实用工具。

语法:

  • nslookup <website-name.com> 显示你的服务器组中 DNS 服务器的 IP 地址,它后面就是你想去访问网站的 IP 地址。
  • nslookup -type=any <website-name.com> 显示指定网站/域中所有可用记录。

网络/接口调试

下面是用于接口连通性或相关网络问题调试所需的命令和文件的汇总。

语法:

  • ss 是一个转储套接字统计数据的实用工具。
  • nmap <ip-address>,它的全称是 “Network Mapper”,它用于扫描网络端口、发现主机、检测 MAC 地址,等等。
  • ip addr/ifconfig -a 提供一个系统上所有接口的 IP 地址和相关信息。
  • ssh -vvv user@<ip/domain> 允许你使用指定的 IP/域名和用户名通过 SSH 协议登入到其它服务器。-vvv 标志提供 SSH 登入到服务器过程中的 "最详细的" 信息。
  • ethtool -S <interface> 检查指定接口上的统计数据。
  • ifup <interface> 启动指定的接口。
  • ifdown <interface> 关闭指定的接口
  • systemctl restart network 重启动系统上的一个网络服务。
  • /etc/sysconfig/network-scripts/<interface-name> 是一个对指定的接口设置 IP 地址、网络、网关等等的接口配置文件。DHCP 模式也可以在这里设置。
  • /etc/hosts 这个文件包含自定义的主机/域名到 IP 地址的映射。
  • /etc/resolv.conf 指定系统上的 DNS 服务器的 IP 地址。
  • /etc/ntp.conf 指定 NTP 服务器域名。

via: https://opensource.com/article/18/7/sysadmin-guide-networking-commands

作者:Archit Modi 选题:lujun9972 译者:qhwdw 校对:wxy

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

用这里列出的方便的工具来跟踪你的磁盘利用率。

跟踪磁盘利用率信息是系统管理员(和其他人)的日常待办事项列表之一。Linux 有一些内置的使用程序来帮助提供这些信息。

df

df 命令意思是 “disk-free”,显示 Linux 系统上可用和已使用的磁盘空间。

df -h 以人类可读的格式显示磁盘空间。

df -a 显示文件系统的完整磁盘使用情况,即使 Available(可用) 字段为 0。

df -T 显示磁盘使用情况以及每个块的文件系统类型(例如,xfs、ext2、ext3、btrfs 等)。

df -i 显示已使用和未使用的 inode。

du

du 显示文件,目录等的磁盘使用情况,默认情况下以 kb 为单位显示。

du -h 以人类可读的方式显示所有目录和子目录的磁盘使用情况。

du -a 显示所有文件的磁盘使用情况。

du -s 提供特定文件或目录使用的总磁盘空间。

ls -al

ls -al 列出了特定目录的全部内容及大小。

stat

stat <文件/目录>显示文件/目录或文件系统的大小和其他统计信息。

fdisk -l

fdisk -l 显示磁盘大小以及磁盘分区信息。

这些是用于检查 Linux 文件空间的大多数内置实用程序。有许多类似的工具,如 Disks(GUI 工具),Ncdu 等,它们也显示磁盘空间的利用率。你有你最喜欢的工具而它不在这个列表上吗?请在评论中分享。


via: https://opensource.com/article/18/7/how-check-free-disk-space-linux

作者:Archit Modi 选题:lujun9972 译者:MjSeven 校对:wxy

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

每个网站都有一个独有的公开 IP 地址,可供任何人从任何地方访问。

互联网协议 Internet Protocol (IP)不需要介绍 —— 我们每天都在使用它。即使你不直接使用它,当你在浏览器上输入 website-name.com 时,它会查找该 URL 的 IP 地址,然后加载该网站。

我们将 IP 地址分为两类:私有和公共。私有 IP 地址是你的无线路由(和公司内网)提供的私有 IP 地址。它们的范围是 10.xxx、172.16.xx-172.31.xx 和 192.168.xx,其中 x=0 到 255。公有 IP 地址,顾名思义,是“公共”的,你可以在世界上任何地方访问它。每个网站都有一个唯一的 IP 地址,任何人可在任何地点访问,这可被视为公共 IP 地址。

此外,还有两种类型的 IP 地址:IPv4 和 IPv6。

IPv4 地址格式为 x.x.x.x,其中 x=0 到 255。有 2 32(大约 40 亿个)可能的 IPv4 地址。

IPv6 地址使用更复杂的十六进制。总的比特数是 128,这意味着有 2 128 (340 后面有 36 个零!)个可能的 IPv6 地址。IPv6 已经被引入解决了可预见的 IPv4 地址耗尽问题。

作为网络工程师,我建议不要与任何人共享你机器的公有 IP 地址。你的 WiFi 路由器有公共 IP,即 WAN(广域网)IP 地址,并且连接到该 WiFi 的任何设备都是相同的。连接到相同 WiFi 的所有设备都有上面所说的私有 IP 地址。例如,我的笔记本电脑的 IP 地址 192.168.0.5,而我的电话是 192.168.0.8。这些是私有 IP 地址,但两者都有相同的公有 IP 地址。

以下命令将列出IP地址列表,以查找你计算机的公有 IP 地址:

  1. ifconfig.me
  2. curl -4/-6 icanhazip.com
  3. curl ipinfo.io/ip
  4. curl api.ipify.org
  5. curl checkip.dyndns.org
  6. dig +short myip.opendns.com @resolver1.opendns.com
  7. host myip.opendns.com resolver1.opendns.com
  8. curl ident.me
  9. curl bot.whatismyipaddress.com
  10. curl ipecho.net/plain

以下命令将为你提供接口的私有 IP 地址:

  1. ifconfig -a
  2. ip addr (ip a)
  3. hostname -I | awk ‘{print $1}’
  4. ip route get 1.2.3.4 | awk '{print $7}'
  5. (Fedora) Wifi-Settings→ click the setting icon next to the Wifi name that you are connected to → Ipv4 and Ipv6 both can be seen
  6. nmcli -p device show

注意:一些工具需要根据你正在使用的 Linux 发行版安装在你的系统上。另外,一些提到的命令使用第三方网站来获取 IP


via: https://opensource.com/article/18/5/how-find-ip-address-linux

作者:Archit Modi 选题:lujun9972 译者:geekpi 校对:wxy

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