Liping's Blog

翁曰:「無他,但手熟爾。」

sudo常用提权方式

用户可写的目录或文件

使用场景:允许用户执行sudo /home/user/script.sh以其他用户权限执行脚本,用户可以直接修改script.sh或者替换成其他文件,从而实现提权。

user@server:~$ ls -ld /home/yangliping /home/yangliping/sudo /home/yangliping/sudo/bin /home/yangliping/sudo/bin/hello.sh /home/yangliping/sudo_hack /home/yangliping/sudo_hack/bin /home/yangliping/sudo_hack/bin/hello.sh
drwx------ 28 yangliping yangliping …

git push sge仓库到gitlab服务器失败问题

Son of Grid Engine的代码可以从gitlab镜像下载,但重新上传到其他git服务器的时候会出现下面的错误:

$ git push -u localnet_remote localbranch:master
Enumerating objects: 66150, done.
Counting objects: 100% (66150/66150), done.
Delta compression using up to 4 threads
Compressing objects: 100% (11531/11531), done.
remote: error: object 7c34c5f65a26b3b0af5d8333de795440b020b8a3: missingNameBeforeEmail: invalid author/committer line - missing space before email …

sge jsv hang issue

TL;DR sge代码里使用timeval结构体时,没有初始化成员的值,导致timeout时间非常大,jsv进程一直没有timeout退出。

问题描述

用户反馈sge的jsv进程一直卡死,如下面所示,15827、14992、15109、8805等进程应该很快就会结束,而不是一直运行着

# pstree -p | grep -i jsv2
        |-sjm(402)-+-jsv2.sh(15827)---jsv2.sh(2855)---cut(2857)
        |-sjm(30992)-+-jsv2.sh(14992)---jsv2.sh(2849)---cut(2851)
        |-sjm(31662)-+-jsv2.sh(15109)---jsv2.sh(2846)---cut(2848)
        |-sjm …

用gdb deubg bash输出不正常问题

TL;DR bash参数扩展导致命令输出跟预期结果不一致。

问题描述

用户反馈echo或者printf命令如下,当有1或者g的时候,只会输出1或/和g,没有其他数据,怀疑系统有问题。

$ printf [3jnrw:mvlewgtf09u23434e12ermld234r25cscfw]
1

$ echo [3jnrw:mvlewgtf09u23434e12ermld234r25cscfw]
1 g

$ echo [adfaasdljfalsjljajzpqwekzv]
[adfaasdljfalsjljajzpqwekzv]

$ uname -r
2.6.32-504.16.2.el6.x86_64

问题分析

使用strace命令去跟踪,发现bash在执行execve系统调用的时候,传递给echo的就是只有1和g。问题应该在bash。

# strace -f echo [aaag1bbb]
execve …

bash引用命令参数

!-n

引用之前输入过的命令,比如!-1代表上一个命令,!-2代表上上个命令

$ echo "hello world!"
hello world!
$ cd
$ !-2  # !-1 is "cd" and !-2 is 'echo "hello world!"'
$ echo "hello world"
hello world

!! 等价于!-1

$ echo "hello world!"
hello world!
$ !!
$ echo "hello world"
hello world

!! 在sudo的时候比较有用

$ vim /etc/myfile
vim: /etc/myfile: Permission denied
$ sudo …

python import sge库文件

在python编程过程中,有些时候由于重用代码或者性能之类的原因,需要直接调用c语言写的库文件。python支持Cython、swig、ctypes、cffi等不同方式来调用c的代码。下面以ctypes为例,介绍怎么在python中使用sge的库文件。

下载最新的Son of Grid Engine,链接https://gitlab.com/loveshack/sge (注:本文档以9baeb84cdc883c4ba8b38cfc89ab8262e6d4e1d9这个commit的版本为例)

# tar zxf sge-master.tar.gz
# cd sge-master/source
# sh scripts/bootstrap.sh

根据实际需求可以打开一些程序或库的debug选项,方便gdb进行跟踪。比如test_eval_expression程序,修改libs/sgeobj/Makefile下面这行:

test_eval_expression: test_eval_expression.o $(SGEOBJLIB) $(SGEOBJDLIB) $(CULLLIB) $(UTILIB) $(WINGRIDLIB_DEP …

mvcli导致大量zfs vdev.bad_ashift日志

发现问题

上周从每天的日志统计日报发现,突然部分存储服务器开始大量出现类似以下的日志:

Dec 10 15:13:59 myserver kernel: [17475246.696258]  sdal: sdal1 sdal9
Dec 10 15:13:59 myserver kernel: sdal: sdal1 sdal9
Dec 10 15:14:00 myserver kernel: [17475246.882323]  sdam: sdam1 sdam9
Dec 10 15:14:00 myserver kernel: sdam: sdam1 sdam9
Dec 10 15 …

DNS的ALIAS和ANAME记录

对于有配置过DNS的人,一般都知道DNS的A、CNAME、MX这样的记录,但是不一定大家都知道ALIAS和ANAME记录。那么这两个记录到底是什么意思呢?这两个分别是DNSimple和DNS Made Easy两个域名注册商针对Paas应用的一条特别的记录,相当顶级域名(root/base/apex domain, or top level domain)的CNAME。

创建PaaS(Platform-as-a-Service: 平台即服务)应用的时候,我们经常会使用自定义域名。这时候我们一般会用CNAME把自己的域名指向PaaS提供的一个域名。而这个域名一般是会有智能DNS解析,会把离用户最近的CDN(Content Delivery Network 内容分发网络)服务器IP返回给用户,提高访问速度。这样无论用户在世界哪个角度,都能获得比较理想的访问速度。例如把应用放在Amazon上,然后把自己注册的域名www.xxx.com指向Amazon提供的域名,然后用户访问www.xxx.com域名,实际服务由Amazon提供。这样很好很强大,对吧?那如果我们想把xxx.com也指向Amazon的应用呢?加一条xxx …

VIM (0) - 返回到最初打开文档的状态

在VIM中编辑文档,有时候需要撤销所有修改,恢复文档到最初的状态。这时候,我们可以一般是连续按u恢复到最初的状态。但如果已经修改了很多次的话,那就太麻烦了,下面是一些更简捷的方法。

  • :u1|u返回最初状态,再按u的话状态栏会显示“Already at oldest change”,表示文档已经在最初状态。u1的意思是返回到修改号1(change number 1)之后,|不是shell中的管道,而是多个命令的分割符,所以|u的意思是再做一次undo。

  • :earlier 10000000,10000000是一个尽量大的数,这个命令的意思是返回10000000次修改以前的状态。

  • 10000000g-,这个命令跟上面的:earlier 10000000是一样的意思,但是是在普通模式下输入。

  • 如果文档还没有保存的话,我们可以用:q!退出编辑,然后重新打开文档 …