查看压缩日志文件 gunzip -c service.log.gz | less

我今天收到了一个邮件, 说我们的服务在5月2日时有一个500 Internal Server Error. 我们的日志是每天都会压缩的, 因此5月2日的日志是gz压缩格式的.

一般来说, 我会先把文件解压, 然后再用vi来打开查看, 查看完毕以后还应该删除掉. 今天在查看gzip的man page时, 发现它其实可以把解压内容输出到标准输出. 这样就省去了前面的两个手工步骤, 方便多了.

gunzip -c service.log.gz | less

-c 表示输出到 console (stdout).

然后我们就可以使用管道将日志传给less命令来查看和查找定位错误信息.

题外话:

服务的日志应该被实时发送给日志处理与分析服务. 使用类似elasticsearch和kibana这样的工具来提供一个日志存储索引及查询的平台, 对于服务数量较多的团队而言, 是十分必要的.

Continue Reading

Ubuntu 18 网络配置 netplan 和 systemd-resolve

我所了解的网络配置命令和文件是 ifconfig /etc/network/, /etc/resolv.conf等。然而在新版的Ubuntu 18中,这些地方的配置文件上,都标准了 “Don't edit",都迁向了更新的工具。例如,使用netplan来配置dhcp客户端或静态地址、网关、特定于网络接口的dns等;使用systemd-resolve和/etc/systemd/resolv.conf来管理和配置全局性质的域名解析等。

这些新的工具,在兼容旧体系的同时,提供了更方便、更强大的功能。作为运维开发人员,我们需要不断学习。

Continue Reading

如何让程序找到安装在非默认位置的动态库

在默认的源码安装模式下,动态库会被安装在 /usr/local/lib 之下。那么如何让其他程序可以加载呢?

首先,把这个位置加入到配置文件 /etc/ld.so.conf 或 /etc/ld.so.d/local_lib.conf 中。

$ sudo echo "/usr/local/lib" > /etc/ld.so.d/local_lib.conf

然后,运行 ldconfig 来更新。

比如,我们安装了 oracle client,如何让应用程序找到它提供的动态库呢?除了将它加入到 LD_LIBRARY_PATH 以外,就可以按本文提供的办法。

假设我们把它安装在了 /usr/local/instantclient_12_2,我们创建一个包含该路径的配置文件 …

Continue Reading

Bash 常用快捷键

Bash有一些快捷键,便于我们快速执行一些常见的任务。

自动补全
输入前几个字符,按tab键,如果潜在的匹配多,则要按两次tab键。
放弃当前输入
ctrl - c
查找历史命令并执行
ctrl - r, 然后开始输入关键字。由于可能有多条历史命令可以匹配,如果当前显示的命令不是所需要的,可以继续按ctr -r,就会显示其他匹配记录。当然,最好在输入关键字时略做思考,输入识别度高的部分。更多讨论请参考: How to cycle through reverse-i-search in bash
emacs或vi模式

默认情况下,Bash提供emacs的快捷键来移动光标或编辑命令行,也可以切换为vi模式。对于熟悉vi的人来说,切换为vi模式后要省事得多。为了始终都在vi模式下,把 set -o vi 加到登录初始化脚本中 (.bash_rc, .profile, ...)

set -o vi

参考文档

  1. https://www …

Continue Reading

命令行上传文件的几种方法

为了分享和分发文件,我们往往需要上传它们。本文介绍Linux环境下命令行上传文件的方法。命令行上传的好处是可以进一步开发成为脚本,集成到自动化工作流程中去,比如软件的持续测试与发布。

安装了openssh服务器后,会支持scp和sftp两种方式上传。rsync也可以基于它们来上传。这些方式适用于给用户开放了服务器远程登录和某些目录的写入权限的情况。

$ scp <local files>  <remote host>:<remote path>
# or
$ rsync <local files or directories>  <remote host>:<remote path>

另外一种方法是WebDav,它支持基于HTTP的文件读写。WebDav需要Web服务器的支持并进行相应的配置。主流的Web服务器都支持该协议。一些云存储服务商也支持此协议;主流的网上协作套件也支持此协议。作为一种可写入内容的Web协议,如果提供公网访问,安全配置就必须慎重。

$ curl -T <local file>  [auth] http(s)://<remote host>/<path>/
# or multiple files.
$ curl …

Continue Reading

MongoDB replica set强制重新配置

MongoDB的replica set是一种取代了master-slave的replication的架构,具备自动failover的能力。因此,其可靠性和可管理性比master-slave更高。replica set的failover依靠少数服从多数的选举票机制来推选新的主节点。为了从术语上与master-slave进行区分,在replica set中,我们把主节点成为primary,把从节点成为secondary。

少数服从多数的机制意味着我们应该有奇数个节点。但是,我们可能会遇到只有两个节点的情况。

两个节点的情况下,我们可以将其中一个节点设置为不具备投票权的节点,只负责复制数据,以避免数据丢失的情况发生。一旦主节点不可用,我们可以手工将不具备投票权的节点重新配置为主节点。

强制重新配置,能将一个secondary的节点,强制变为master节点。

一种方法是将坏掉的那个节点从集合中删除,从而重新达到平衡。

cfg = rs.config()
cfg.members = [ cfg.members[i], cfg.members[j], ...]
rs.reconfig(cfg, {force: true})

另一种方法是调整节点的priority和votes。可以将其priority和votes都设置为0,从而使它不具备被选举权。priority是被选举权,而votes是选票。

cfg = rs.config …

Continue Reading

Set Time and Locale in Ubuntu Linux

服务器的时间是一个不起眼但非常重要的因素。当它是正确的时候,一切平安无事,但是当它 出现问题时,就会造成很多不便,甚至会导致一些依赖时间的应用出现数据上的问题。

本文整理一些关于查看和设置时间的命令,以及本地化locale显示设置的问题。

时间

正确而方便的时间格式,能方便查看文件的修改时间,日志记录的时间等。所谓方便的时间格式, 一方面是时区最好与用户本地时区一致,另一方面是时间格式要符合用户国家和地区的习惯。

正确的时间并不是一个看起来那么简单的问题。达成一般精度的时间是比较容易的,而要达成 非常精确的时间,则需要有效的设计与调校。

时区

Linux的时区信息存放于 /etc/timezone之中,可以直接修改该值,也可以使用系统提供的命令, 比如新版本的Ubuntu上可以通过 timedatectl来修改, 下面的命令将时区改为中国时间.

sudo timedatectl set-timezone Asia/Shanghai

时钟

时钟涉及到时间的准确性. 除了传统的date命令可以显示时间外,timedatectl命令可以显示 更丰富的时间信息

$ date
Thu Jan 12 19:32:02 CST 2017
$ timedatectl …

Continue Reading

Linux命令执行了多久?

使用time命令即可

time [time options] <command> [command options]
$ time ls -tr
[output of the command ls -tr]

real        0m0.003s
user        0m0.004s
sys 0m0.000s

References

  1. http://askubuntu.com/questions/53444/how-can-i-measure-the-execution-time-of-a-terminal-process

Continue Reading

使用本地虚拟机搭建多台Linux服务器实验环境

很多时候,我们想通过实验来学习和尝试一些软件。向公司申请服务器环境,或者买云服务器都不如使用虚拟机来模拟多台Linux环境来得简单方便。本站上的很多实验都是需要多台Linux环境的。如果你有兴趣按某篇文章自己上手试一试,可是在搭建多台Linux虚拟机环境上遇到了问题,就可以参考本文。

Continue Reading

Linux设置域名

本文以Ubuntu Linux 为例说明如何设置域名

Continue Reading

Linux主机名称(hostname)查询

本文举例介绍了Linux中几个常用的主机名称和域名查询命令行工具

Continue Reading

几个常见的 ssh 问题

通过配置ssh alive来避免因为一段时间不使用而导致ssh连接被关闭。

Continue Reading

如何使用man查看Linux命令的联机手册

举例说明使用man命令的几个常用选项来查找命令的联机帮助

Continue Reading

使用rsync同步代码

举例说明如何使用rsync来同步代码

Continue Reading