Linux 设置环境变量

平时登录服务器经常会设置一些路径作为环境变量来提升工作效率,下面记录一下设置环境变量的各种方法。

Solution 1: 临时设置

使用 export 命令

export PATH="$PATH:/usr/local/bin"

查看是否生效

export

Solution 2: 修改 profile 文件

vim /etc/profile

# 在里面加入命令
export PATH="$PATH:$HOME/.local/bin:$HOME/bin:/usr/local/bin"

编辑完之后,运行命令生效

source /etc/profile 

Solution 3: 修改 .bashrc 文件

这种方法适用于设置不同账号不同的环境变量,一台服务器多个用户使用的话可以设置自己的环境变量。

# root 用户
vim /root/.bashrc

# 普通用户
vim /home/xxx/.bashrc

# 在里面加入命令
export PATH="$PATH:$HOME/.local/bin:$HOME/bin:/usr/local/bin"

修改完之后退出当前账号,重新登录系统,测试是否生效

echo $PATH

Linux统计文件夹、文件数量的命令

查看当前目录下的文件数量(不包含子目录中的文件)

ls -l|grep "^-"| wc -l

查看当前目录下的文件数量(包含子目录中的文件) 注意:R,代表子目录

ls -lR|grep "^-"| wc -l

查看当前目录下的文件夹目录个数(不包含子目录中的目录),同上述理,如果需要查看子目录的,加上R

ls -l|grep "^d"| wc -l

查询当前路径下的指定前缀名的目录下的所有文件数量

例如:统计所有以“20161124”开头的目录下的全部文件数量

ls -lR 20161124*/|grep "^-"| wc -l

  

对每个命令参数做一下说明备注:

ls -l
该命令表示以长列表输出指定目录下的信息(未指定则表示当前目录),R代表子目录中的“文件”,这个“文件”指的是目录、链接、设备文件等的总称

grep "^d"表示目录,"^-"表示文件

wc -l
表示统计输出信息的行数,因为经过前面的过滤已经只剩下普通文件,一个目录或文件对应一行,所以统计的信息的行数也就是目录或文件的个数

Linux Shell脚本实现根据进程名杀死进程

起因

  为什么会写这篇文章呢,先说一下背景,因为一个生产环境的机器内存占用一直很高,经过排查发现是一个 consumer 的消费脚本中并发 http client 没有 close,导致定时每小时跑完的脚本一直在那里放着占用内存,时间久了内存占用就上来了,很快我就上了个 patch 修复了这个问题,但是那些跑完的脚本怎么处理呢?还用说嘛,当然要 kill 掉了。

脚本

手动每个去 kill 那真是太慢了,直接找个批量处理的脚本,将以下内容保存为 kill.sh,赋予执行权限,传入脚本的名称即可批量 kill 掉。

./kill.sh procedure_name
#!/bin/sh

if [ $# -lt 1 ]
then
  echo "缺少参数:procedure_name"
  exit 1
fi

PROCESS=`ps -ef|grep $1|grep -v grep|grep -v PPID|awk '{ print $2}'`
for i in $PROCESS
do
  echo "Kill the $1 process [ $i ]"
  kill -9 $i
done

一句话命令

感觉上面的脚本麻烦,可以直接使用下面的一句来实现。

ps -ef | grep procedure_name | grep -v grep | awk '{print $2}' | xargs kill -9

总结

杀掉脚本之后,内存立刻恢复正常占用,顿时感觉清爽了许多。

  1. 保证良好的编码习惯,一些资源用过之后及时 close。
  2. 定期查看生产环境的各种 logs,查找资料并解决报错,技术积累大部分来源于解决生产环境问题。

Linux 创建 swap 交换分区

起因

  日常巡视机器的时候发现一台 4G memory 占用有 3.3G,free 120+M,原来是脚本跑的太多了,导致内存占用上去了,free -h 看了一下这个机器没有 swap 分区,现在记录一下创建过程。

准备工作

查看当前系统Swap信息,如果没有 swap 分区将没有回显。

swapon
swapon -s

也可以使用 free 命令来查看当前系统是否存在 Swap 交换分区

free -h

记得检查磁盘空间是否充足

df -h

步骤

  一般情况下,我们都会使用 dd 命令来预先创建交换分区文件,然后再用 /dev/zero 将该文件的内容全部置零,创建时还将用到 bs 参数来设置要创建的交换空间大小,以及使用 count 来指定要创建的 block 数。
注意:/www/swap 是我指定的路径,这个可随意设定。

1. 开始创建 1GB 大小的交换分区:

dd if=/dev/zero of=/www/swap bs=1M count=1024

2. 初始化为交换分区文件:

mkswap /www/swap

3. 启用交换分区文件:

swapon /www/swap

4. 使系统开机时自启用,在文件 /etc/fstab 中添加一行:

/www/swap    swap    swap    defaults    0 0

到这里已经创建成功了,可以 free -h 看一下了。

树莓派使用 PPTP 客户端连接 VPN

安装

sudo apt-get install -y pptp-linux

配置

sudo vim /etc/ppp/peers/pptpconf

// 添加如下内容:(自行更改IP, name, password)
pty "pptp xxx.xxx.xxx.xxx --nolaunchpppd"
name xxx
password xxx
remotename PPTP
require-mppe-128
require-mschap-v2
refuse-eap
refuse-pap
refuse-chap
refuse-mschap
noauth
persist
maxfail 0
defaultroute
replacedefaultroute
usepeerdns

启动 & 关闭

pptp 客户端操作: 
启动:pon pptpconf 
关闭:poff pptpconf