使用bash-completion
来实现bash下命令的自动补全功能。该组件在Github上的地址: https://github.com/scop/bash-completion#installation
安装方法
CentOS 7下:
1
| sudo yum install bash-completion
|
Ubuntu下:
1
| sudo apt install bash-completion
|
安装后退出当前shell重新登录即可获取补全功能。
相关文件
启动文件
以CentOS 7
下为例。安装了bash-completion
后,将会在/etc/profile.d
目录下添加文件bash_completion.sh
,用于启动bash时候自动添加补全功能。
如果没有自动添加,也可以自己添加,在~/.bashrc
中添加
1
| source /usr/share/bash-completion/bash_completion
|
各命令补全脚本
各命令补全的脚本存放在/usr/share/bash-completion/completions/
目录中。
比如通过yum安装docker后,安装程序会在上述补全脚本目录下添加一个名为docker
的文件,就是对应docker命令的补全脚本。
关于命令补全脚本的编写示例,可以参考Bash命令自动补全的原理
阅读此文
问题描述
按照CentOS7 下搭建简易的L2TP/IPSec 服务搭建好L2TP/IPSec服务后,发现一个问题。
该入口机器上还跑着一些测试服务,有些测试服务是绑定的本机的loopback接口的,只对本机提供服务的。
本机上有一些另外的java服务,使用localhost
地址访问这些服务时,发现请求会被解析为使用机器的外网地址来访问这些内网服务,导致java服务出错。
没法一眼看出问题,因此只能通过逐步停到服务的方式,来查看到底是当时搭建L2TP/IPSec的过程中,哪个设置导致了这个问题。
问题调查
依次停掉ipsec,xl2tpd服务,问题依然存在。
移除firewalld的masquerade设置后,java访问的问题就好了。
问题解决
感觉是localhost的loopback接口被配置了masquerade导致的问题,便想着有没有什么办法可以将loopback排除在masquerade配置以外,网上一通搜索,找到了一些类似问题,但似乎没有正确的解决办法。
阅读此文
在CentOS 7上搭建L2TP/IPSec服务,用来在外时也能访问内网Git服务器。
搭建方法有很多现成的脚本。
因为只需要设置一个简单的VPN, 查看了下teddysun/across的l2tp.sh比较方便,因此选用了该方法。
在此将脚本中有关CentOS 7的步骤罗列解析一下。方便后续有配置要改动的时候做到心中有数。
脚本化安装
脚本化安装步骤如下:
基础信息
脚本: https://github.com/teddysun/across/blob/master/l2tp.sh
安装环境: VMWare下的虚拟机上的CentOS 7
系统局域网IP: 192.168.172.193, 也是我们VPN的接入IP
阅读此文
在Amazon Linux中使用certbot来创建Let’s Encrypt的证书,步骤如下:
安装certbot
1 2
| sudo amazon-linux-extras install epel sudo yum install certbot python-certbot-nginx
|
设置certbot生成证书
1
| sudo certbot certonly -d *.examplexxx.com --manual --preferred-challenges dns
|
其中:
certonly
: 指只生成证书而不部署
-d *.examplexxx.com
: 指需要生成的是examplexxx.com
的通配域名
--manual
: 指指定交互方式
--preferred-challenges dns
: 指使用dns方式验证,(泛域名/通配域名只能通过此方式进行)
阅读此文
alternatives/update-alternatives的用法
alternatives(update-alternatives)命令用于处理 Linux 系统中软件版本的切换,使其多版本共存。alternatives 的管理目录 /etc/alternatives 。
用法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| # alternatives --help alternatives(备用)版本 1.7.4 - 版权 (C) 2001 红帽公司 在 GNU 公共许可条款下,本软件可被自由地重发行。 用法:alternatives --install <链接> <名称> <路径> <优先度> [--initscript <服务>] [--family <family>] [--slave <链接> <名称> <路径>]* alternatives --remove <名称> <路径> alternatives --auto <名称> alternatives --config <名称> alternatives --display <名称> alternatives --set <名称> <路径> alternatives --list common options: --verbose --test --help --usage --version --keep-missing --altdir <目录> --admindir <目录> #
|
举例说明
以CentOS 7下java命令为例说明alternatives的用法
环境说明
最小化安装CentOS 7.6, 安装java 8 和java 11
1 2
| sudo yum install java-11-openjdk-devel sudo yum install java-1.8.0-openjdk-devel
|
阅读此文
本文以一个简单的java应用举例,介绍下如何将应用手动添加到systemctl中作为一个server启动。
目的:
- 将应用以service的形式注册进systemctl
- 使用普通用户启动该service
- 赋予普通用户启动/停止/重启该service的权限
前期准备
阅读此文
介绍在MacOS上管理两个Github账号的ssh key的方法,主要操作就是在ssh的配置文件~/.ssh/config
中指定两个不同的Host。
前提介绍
两个github账号,分别为carl.shen和jibing57,对应使用的key如下:
- carl.shen: id_rsa_carl_github_key
- jibing57: id_rsa_github
其中,carl.shen是默认账号,jibing57是第二账号。
ssh 配置
两个账号,在~/.ssh/config
配置文件中对应的配置如下:
1 2 3 4 5 6 7 8 9
| Host "github.com" HostName "github.com" User "carl.shen" IdentityFile ~/.ssh/id_rsa_carl_github_key Host "jibing57.github.com" HostName "github.com" User "jibing57" IdentityFile ~/.ssh/id_rsa_github
|
关键点就在于Host "jibing57.github.com"
这一几个配置。
该设置的意思是: 当访问Host是jibing57.github.com
, 需要使用key ~/.ssh/id_rsa_github
来访问,但访问jibing57.github.com
时,实际映射到的还是github.com
。
通过使用Host别名来实现不同的key同时访问github.com
。
阅读此文
pg_repack介绍
PostgreSQL数据库,因为multiversion concurrency control (MVCC)的原因,在update和delete的事务处理中需要将老数据另行保存一份,会导致占用的磁盘空间会比实际有效空间要大很多。
PostgreSQL自带了autovacuum和vacuum命令, 可以检测这部分旧数据,标记这部分空间为可用,供后续使用,一定程度上可以缓解存储空间肿胀(bloat)的问题,但问题在于autovacuum和vacuum只是在PG范围内标记空间为可用,并不会将空间释放给操作系统进行重新利用。
如果需要将空间释放和操作系统使用,需要使用vacuum full
命令,但是该命令会使用排它锁,堵塞对应表的读写操作。在生产环境中是不推荐使用的。
pg_repack这个插件,可以在不阻塞表读写的情况下,进行表数据的清理。
作用机理是:创建一个新表,将数据从旧表移动到新表。为了避免表被独占锁定,创建了一个额外的日志表来记录原始表的改动,还添加了一个把INSERT / UPDATE / DELETE操作记录到日志表的触发器。当原始表中的数据全部导入到新表中,索引重建完毕,日志表的改动全部完成,pg_repack会连同新索引,用新表替换旧表,并将原旧表Drop掉。整个过程非常简单,非常可靠,但是需要注意的是——需要额外剩余足够的磁盘空间(原表大小 + 索引 + 额外的日志表空间)
实操
下面记录一次使用pg_repack来回收AWS RDS for PostgreSQL中磁盘空间的过程。
准备工作
查看RDS的数据库版本和支持的pg_repack版本。
查看数据库版本为PG 10.18
1 2 3 4 5 6 7
| ebdb=> select version(); version ---------------------------------------------------------------------------------------------------------- PostgreSQL 10.18 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11), 64-bit (1 row) ebdb=>
|
阅读此文