分类 linux 下的文章

在我们使用 Linux 的过程中, 我们经常需要对文本进行处理,需要一些强有力的工具, 来提升我们的效率.接下来介绍下 grep/cat/awk/uniq这些常用命令的使用.

grep

grep 是我们用的非常多的命令, 查询日志, 查找关键内容等等.

查看匹配到的行

查询包含 xyz 的行

grep 'xyz' myFile

在当前目录下所有html文件中查询包含 xyz 的行

grep 'xyz' *html

- 阅读剩余部分 -

查找Linux Kernel版本

root@server:~# uname -a
Linux server 4.4.0-157-generic #185-Ubuntu SMP Tue Jul 23 09:17:01 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

查看当前系统的发行版名称和版本

root@server:~# cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"

当然你同样可以使用 lsb_release 命令来查看上述信息

- 阅读剩余部分 -

这里汇总了下Linux环境下常用的Linux命令,多数命令几乎每天都会用到, 本文汇总的所有命令是基于 Ubuntu 发行版, 但是多数命令在大多数Linux上皆可使用, 包括Unix, 甚至Mac OSX.

目录浏览

命令描述
ls查看当前目录下的所有文件和目录
ls -al类似 ls, 以列表形式显示当前目录下的所有文件和目录, 包括隐藏文件
ls -al & grep string查询匹配string的文件和目录
cd directory_path切换到 directory_path
cd切换到用户根目录 $HOME
cd ..切换到上级目录
pwd查看当前所在目录路径

上述命令多数都支持根上目录路径或者文件路径, 比如 ls /usr/local/bin, 其他更多命令参数,参看下 man page, 比如 man ls.

- 阅读剩余部分 -

概述

Lombok是一个库,它简化了许多繁琐的任务,并减少了Java源代码的冗长。当然,我们通常希望能够在IDE中使用库,这需要额外的设置。在本教程中,我们将讨论如何在两种最流行的Java ide (IntelliJ IDEA和Eclipse)中配置它。

IntelliJ IDEA

启用注释处理

Lombok通过APT使用注释处理,因此,当编译器调用它时,库根据原始文件中的注释生成新的源文件。

不过,默认情况下不启用注释处理。

因此,我们要做的第一件事是在项目中启用注释处理。

打开 Preferences -> Build, Execution, Deployment -> Compiler -> Annotation Processors 勾选以下:

* Enable annotation processing

* Obtain processors from project classpath

- 阅读剩余部分 -

Dynomite 简介

Dynomite是NetFlix对亚马逊分布式引擎Dynamo的一个开源通用实现,它不仅支持基于内存K/V数据库,
还支持持久化的MySQL、BerkeleyDb、LevelDb等数据库,并具有简单、高效、支持跨数据中心的数据复制功能等优点。
Dynomite的最终目标是提供数据库存储引擎不能提供的简单、高效、跨数据中心的数据复制功能。目前,Dynomite已经实现了对Redis和Memcached的支持。

Dynomite 安装配置

Build

从源代码构建Dynomite并启用调试日志,禁用assertions:

$ git clone git@github.com:Netflix/dynomite.git
$ cd dynomite
$ autoreconf -fvi
$ ./configure --enable-debug=yes    // 开发环境需要,生产环境不需要
$ make
$ src/dynomite -h

- 阅读剩余部分 -

简介和概述

Netflix长期以来一直是微服务模式的倡导者。该模型提供更高的可用性,故障恢复能力和松耦合。这种架构的缺点是潜在的用户体验。每当客户加载主页或开始流式传输电影时,都会有许多微服务完成该请求。这些微服务中的大多数使用某种有状态的系统来存储和提供数据。几毫秒可以快速加起来,并产生多秒的响应时间。

Netflix的云数据库工程团队一直在寻找方法,从应用程序的数据库响应时间中减少毫秒,同时保持我们的本地高可用性和多数据中心高可用性的目标。考虑到这个目标,我们创建了Dynomite。

受Dynamo白皮书以及Apache Cassandra的经验启发,Dynomite是一个分片和复制层。Dynomite可以将现有的非分布式数据存储(如Redis或Memcached)制作成完全分布式的多数据中心复制数据存储。

服务器架构

动机

在开源世界中,有各种单服务器数据存储解决方案,例如Memcached,Redis,BerkeleyDb,LevelDb,Mysql(数据存储)。这些单服务器数据存储的可用性故事通常最终会成为主从设置。一旦流量需求超过这个设置,下一个合乎逻辑的进程就是引入分片。大多数人会同意这种设置不是微不足道的。而且,管理来自不同分片的数据对于应用程序开发人员来说也是一项挑战。

- 阅读剩余部分 -

之前在介绍netstat的时候说过,netstat是一个非常实用的socket查看命令。ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

为什么使用ss

值得注意的是,几乎所有的linux系统都默认支持netstat命令,而并不一定支持ss,从这一点来说,netstat通常还是不二选择。但是不得不承认的是,ss命令更加快捷高效。

netstat从proc文件系统获取所需要的信息,而ss利用netlink机制,与内核通信,通过TCP 协议栈中 tcp_diag 模块获取第一手的内核信息。当然这些都不是我们关注的重点,我们来看看ss命令到底如何使用。

命令参数

-h, --help 帮助信息
-V, --version 程序版本信息
-n, --numeric 不解析服务名称
-r, --resolve 解析主机名
-a, --all 显示所有套接字(sockets)
-l, --listening 显示监听状态的套接字(sockets)
-o, --options 显示计时器信息
-e, --extended 显示详细的套接字(sockets)信息
-m, --memory 显示套接字(socket)的内存使用情况
-p, --processes 显示使用套接字(socket)的进程
-i, --info 显示 TCP内部信息
-s, --summary 显示套接字(socket)使用概况
-4, --ipv4 仅显示IPv4的套接字(sockets)
-6, --ipv6 仅显示IPv6的套接字(sockets)
-0, --packet 显示 PACKET 套接字(socket)
-t, --tcp 仅显示 TCP套接字(sockets)
-u, --udp 仅显示 UCP套接字(sockets)
-d, --dccp 仅显示 DCCP套接字(sockets)
-w, --raw 仅显示 RAW套接字(sockets)
-x, --unix 仅显示 Unix套接字(sockets)
-f, --family=FAMILY 显示 FAMILY类型的套接字(sockets),FAMILY可选,支持 unix, inet, inet6, link, netlink
-A, --query=QUERY, --socket=QUERY

  QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]

-D, --diag=FILE 将原始TCP套接字(sockets)信息转储到文件
-F, --filter=FILE 从文件中都去过滤器信息

   FILTER := [ state TCP-STATE ] [ EXPRESSION ]

- 阅读剩余部分 -

在调试网络程序或者定位网络相关问题时,有一个命令不得不知,它就是netstat。netstat命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

常见参数

-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

查看某个端口是否被占用

如果你遇到“Address already in use”的错误,那么你就需要好好看看是不是端口已经被占用了。-a(all)参数用于列出所有监听和非监听状态的连接。

$ netstat -a|grep 6379
tcp        0      0 *:6379                  *:*                     LISTEN
tcp6       0      0 [::]:6379               [::]:*                  LISTEN

这里我们可以看到,有一个tcp连接使用了6379端口,并且当前处于LISTEN状态,这些状态信息对于分析网络连接问题非常有帮助,我们将会在后面的文章中看到它们大放异彩。

当然你也可以使用lsof命令中的方法来查看。

- 阅读剩余部分 -