分类 默认分类 下的文章

因为 Linux 环境的命令以及文档及其丰富,我们在介绍一个工具的使用过程中, 主要是希望了解这个命令主要是干什么的, 在什么场景下使用,常用的有哪些使用方式, 更多的信息根据需要逐步上 man page 上去查阅,在查阅 man page 的过程中, 要快速找到我们的目标, 结合man page 的快捷键将极大的提升我们的效率

  • f Page Down, 向下翻一页
  • b Page Up, 向上翻一页
  • h 显示 man 命令使用帮助信息
  • q 退出
  • /{pattern} 向前搜索
  • ?{pattern} 向后搜索
  • n 跳转到下一个搜索结果
  • N 跳转到上一个搜索结果

- 阅读剩余部分 -

本篇文章将详细介绍下 Linux 环境的文件系统权限的基本信息,便于我们在使用过程中,对权限有合理的规划和使用.

每一个文件(目录)均有一个拥有者(Owner)

root@server:~# ll /bin/bash
-rwxr-xr-x 1 root root 1037528 May 10 04:20 /bin/bash*

这里第一个 root 即为拥有者,也即为系统的可登陆账户名,每个文件(目录)均有一个拥有者(Owner)

- 阅读剩余部分 -

我们在 Linux 环境中常用的 Shell 环境大多都是 Bash Shell, 即使是 MacOS , 默认 Shell 环境也是 Bash Shell, 了解 Bash Shell 的快捷键将有助于我们快速和 Shell 环境交互.

光标移动

  • Ctrl + b 向后移动一个字符
  • Ctrl + f 向前移动一个字符
  • Alt + b or Ctrl + ← 向后移动一个单词
  • Alt + f or Ctrl + → 向前移动一个单词
  • Ctrl + a 移动到行首
  • Ctrl + e 移动到行尾

- 阅读剩余部分 -

Shell 环境一般在我们输入之前, 会有部分提示信息, 快速让使用者知道当前环境的信息,比如当前用户/当前路径等. Bash Shell 同样给我们提供了定制这部分的逻辑,在 Bash Shell 下使用 PS1 来设置 Shell 提示信息.

PS 原意是 Prompt String, 当然有 PS1, 至少还会有其他的, 比如 PS2.

  • PS1 默认 Shell 提示符
  • PS2 多行命令的默认提示符, 一个非常长的命令可以通过在末尾加 \ 使其分行显示 , 多行命令提示默认值是 >
  • PS3 选择输入时的提示符, 默认值为 #?
  • PS4 配合set -x用来修改跟踪输出的前缀, set -x 一般用在调试过程, 显示整个脚本的执行过程, 默认值为 ++

- 阅读剩余部分 -

新集合类型

Guava引入了很多JDK没有的、但我们发现非常有用的新集合类型。这些新类型是为了和JDK集合框架共存,而没有往JDK集合抽象中硬塞其他概念。作为一般规则,Guava集合非常精准地遵循了JDK接口契约。

Multiset

统计一个词在文档中出现了多少次,传统的做法是这样的:

Map<String, Integer> counts = new HashMap<String, Integer>();
for (String word : words) {
    Integer count = counts.get(word);
    if (count == null) {
        counts.put(word, 1);
    } else {
        counts.put(word, count + 1);
    }
}

- 阅读剩余部分 -

Linux 是个多用户操作系统,在操作系统上,有非常多用户, 同时为了便于同类用户的管理,有一系列的用户组。每个用户,都有自己的名称和ID, 称为 uid。每个用户组同样也有其名称和ID,称为 gid。每个用户至少从属于一个用户组,每个用户皆从属于一个主组。各个 Linux 发行版默认的管理账户为 root, uid0.

展示用户基本信息

id 命令用于展示用户 uidgidgroups

root@server:~# id root 
uid=0(root) gid=0(root) groups=0(root)

- 阅读剩余部分 -

前面我们介绍过, 通过 top 或者 htop 命令能够查看服务器的物理机内存和 Swap 的使用情况, 除了这两种工具, 我们其实还会有些其他工具,完成类似的任务.

free 命令用于显示内存的使用信息, 比如

root@server:~# free -h
              total        used        free      shared  buff/cache   available
Mem:           3.9G        1.5G        1.1G        5.9M        1.3G        2.1G
Swap:          974M          0B        974M

除了类似 top 命令显示的 totalusedfreebuff/cache,还显示了 sharedavailable等信息。

这里有些内存概念需要我们知道:

  • Cache 作为加载到内存中的磁盘数据,用于快速访问。
  • Swap 是磁盘上的交换分区,被系统用来在物理内存紧张的情况下, 将使用频率低的内存页面交换到磁盘, 以便释放更多物理内存给系统使用。

- 阅读剩余部分 -

异常传播

有时候,你会想把捕获到的异常再次抛出。这种情况通常发生在Error或RuntimeException被捕获的时候,你没想捕获它们,但是声明捕获Throwable和Exception的时候,也包括了了Error或RuntimeException。Guava提供了若干方法,来判断异常类型并且重新传播异常。例如:

try {
    someMethodThatCouldThrowAnything();
} catch (IKnowWhatToDoWithThisException e) {
    handle(e);
} catch (Throwable t) {
    Throwables.propagateIfInstanceOf(t, IOException.class);
    Throwables.propagateIfInstanceOf(t, SQLException.class);
    throw Throwables.propagate(t);
}

所有这些方法都会自己决定是否要抛出异常,但也能直接抛出方法返回的结果——例如,throw Throwables.propagate(t);—— 这样可以向编译器声明这里一定会抛出异常。

- 阅读剩余部分 -

在本文中,我们将介绍Guava库中Ordering类。

Ordering类实现了Comparator接口,它可以用来为构建复杂的比较器,以完成集合排序的功能。

从实现上说,Ordering实例就是一个特殊的Comparator实例。Ordering把很多基于Comparator的静态方法(如Collections.max)包装为自己的实例方法(非静态方法),并且提供了链式调用方法,来定制和增强现有的比较器。

创建

natural()

使用自然顺序排序

List<Integer> list = Arrays.asList(1, 5, 3, 8, 2);
Collections.sort(list, Ordering.natural());

- 阅读剩余部分 -