背景:Git分不同角色在提交时,root提交时是administrator(Crontab用来Pull一些Ansible脚本到本地), 而xiangdong提交时是xiangdong,往往容易出现一个问题是不小心给root了,这块一是xiangdong上去有时权限不够可能切换为root了,另一个是登录时可能就是Root用户,一提交就成Admin了。鉴于此,自己整个C代码实现提交判断,这样接管了git push,从而对粗心的我来讲起到一个助理的作用。
一、搞这玩意儿的原因:
root情况:
xiangdong:
解决一个无论是root还是xiangdong的环境下,只需要执行下面我们搞的这个c语言生成的二进制文件就能一直只以向东的用户进行提交git,看起来扯淡,但还是有点用的,敲啥呢: gitpush ,和git push只是没有那个空格了。经实践证明是可行的,如下:
二、生产这个玩意的过程:
源码及Makefile和生成的二进制文件路径:
Makefile文件内容:
cat Makefile
源代码:cat gitpush.c
最后,PATH路径:
cat /etc/profile.d/gitpush.sh
三、验证步骤阶段:
root下执行情况:
#gitpush
#gitpush
当前登陆的用户名为:root
current working directory : /home/xiangdong/shell
The UID is 0
The login name is xiangdong
The forbidlogin name is root
请小心,你现在正在Root环境下面,不过没关系,我给你切换到xiangdong用户并作提交。执行git push命令:/usr/bin/sudo -i -u xiangdong -H cd /home/xiangdong/shell && git push
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 288 bytes, done.
Total 3 (delta 1), reused 1 (delta 0)
To git@gitlab.qr.justwinit.net:levooops/shell.git
bd83c51..b400811 master -> master
xiangdong下面执行情况:
$gitpush
执行:cd /home/xiangdong/shell && git push
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 277 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@gitlab.qr.justwinit.net:levooops/shell.git
b400811..0b19550 master -> master
成功Log:
$git log
commit 0b195507efa6278774d4f500a7086003d6744684
Author: xiangdong <xiangdong@justwinit.cn>
Date: Sun Oct 1 23:15:32 2017 +0800
加上README.md
commit b40081190bf020d49375a4117a181f00ea0a2503
Author: xiangdong <xiangdong@justwinit.cn>
Date: Sun Oct 1 23:09:58 2017 +0800
加上README.md
================================================================================
附录:
为什么 sudo cd 会报错 command not found:
https://www.starduster.me/2015/09/12/why-command-not-found-when-sudo-cd/
相关函数:get_current_dir_name, getwd, chdir
头文件:#include <unistd.h>
定义函数:char * getcwd(char * buf, size_t size);
函数说明:getcwd()会将当前的工作目录绝对路径复制到参数buf 所指的内存空间,参数size 为buf 的空间大小。
注:
1、在调用此函数时,buf 所指的内存空间要足够大。若工作目录绝对路径的字符串长度超过参数size 大小,则返回NULL,errno 的值则为ERANGE。
2、倘若参数buf 为NULL,getcwd()会依参数size 的大小自动配置内存(使用malloc()),如果参数size 也为0,则getcwd()会依工作目录绝对路径的字符串程度来决定所配置的内存大小,进程可以在使用完次字符串后利用free()来释放此空间。
返回值:执行成功则将结果复制到参数buf 所指的内存空间, 或是返回自动配置的字符串指针. 失败返回NULL,错误代码存于errno.
范例
执行:
current working directory :/tmp
cat test_processname.cpp
g++ test_processname.cpp -o gitpush
mv /tmp/gp /usr/local/gitpush/gitpush
cat /etc/profile.d/gp.sh
export PATH=$PATH:/usr/local/gitpush
#gp
directory:/usr/local/gitpush/
processname:gp
current working directory : /root
./gitpush
directory:/tmp/
processname:gitpush
current working directory : /tmp
The UID is 0
The login name is xiangdong
一、搞这玩意儿的原因:
root情况:
xiangdong:
解决一个无论是root还是xiangdong的环境下,只需要执行下面我们搞的这个c语言生成的二进制文件就能一直只以向东的用户进行提交git,看起来扯淡,但还是有点用的,敲啥呢: gitpush ,和git push只是没有那个空格了。经实践证明是可行的,如下:
二、生产这个玩意的过程:
源码及Makefile和生成的二进制文件路径:
Makefile文件内容:
cat Makefile
源代码:cat gitpush.c
最后,PATH路径:
cat /etc/profile.d/gitpush.sh
三、验证步骤阶段:
root下执行情况:
#gitpush
#gitpush
当前登陆的用户名为:root
current working directory : /home/xiangdong/shell
The UID is 0
The login name is xiangdong
The forbidlogin name is root
请小心,你现在正在Root环境下面,不过没关系,我给你切换到xiangdong用户并作提交。执行git push命令:/usr/bin/sudo -i -u xiangdong -H cd /home/xiangdong/shell && git push
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 288 bytes, done.
Total 3 (delta 1), reused 1 (delta 0)
To git@gitlab.qr.justwinit.net:levooops/shell.git
bd83c51..b400811 master -> master
xiangdong下面执行情况:
$gitpush
执行:cd /home/xiangdong/shell && git push
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 277 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@gitlab.qr.justwinit.net:levooops/shell.git
b400811..0b19550 master -> master
成功Log:
$git log
commit 0b195507efa6278774d4f500a7086003d6744684
Author: xiangdong <xiangdong@justwinit.cn>
Date: Sun Oct 1 23:15:32 2017 +0800
加上README.md
commit b40081190bf020d49375a4117a181f00ea0a2503
Author: xiangdong <xiangdong@justwinit.cn>
Date: Sun Oct 1 23:09:58 2017 +0800
加上README.md
================================================================================
附录:
为什么 sudo cd 会报错 command not found:
https://www.starduster.me/2015/09/12/why-command-not-found-when-sudo-cd/
相关函数:get_current_dir_name, getwd, chdir
头文件:#include <unistd.h>
定义函数:char * getcwd(char * buf, size_t size);
函数说明:getcwd()会将当前的工作目录绝对路径复制到参数buf 所指的内存空间,参数size 为buf 的空间大小。
注:
1、在调用此函数时,buf 所指的内存空间要足够大。若工作目录绝对路径的字符串长度超过参数size 大小,则返回NULL,errno 的值则为ERANGE。
2、倘若参数buf 为NULL,getcwd()会依参数size 的大小自动配置内存(使用malloc()),如果参数size 也为0,则getcwd()会依工作目录绝对路径的字符串程度来决定所配置的内存大小,进程可以在使用完次字符串后利用free()来释放此空间。
返回值:执行成功则将结果复制到参数buf 所指的内存空间, 或是返回自动配置的字符串指针. 失败返回NULL,错误代码存于errno.
范例
执行:
current working directory :/tmp
cat test_processname.cpp
g++ test_processname.cpp -o gitpush
mv /tmp/gp /usr/local/gitpush/gitpush
cat /etc/profile.d/gp.sh
export PATH=$PATH:/usr/local/gitpush
#gp
directory:/usr/local/gitpush/
processname:gp
current working directory : /root
./gitpush
directory:/tmp/
processname:gitpush
current working directory : /tmp
The UID is 0
The login name is xiangdong
我的问题:git pull
error: Untracked working tree file 'playbook/ml.qr.justwinit.cn/process.yml' would be overwritten by merge. Aborting
git fetch --all && git reset --hard origin/master
一、解决办法:
二、再git pull就没有问题了,当然,你的改动也被回退了,得先备份再做这个操作:
$git pull
Already up-to-date.
三、重新将文件放进去,再进行commit后push,没毛病:
git commit -m"xxx" ishow.justwinit.cn.conf.j2
git push
Counting objects: 11, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 815 bytes, done.
Total 6 (delta 3), reused 0 (delta 0)
To git@gitlab.qr.cntv.net:irdcops/ansible.git
d33031a..eb4ad86 master -> master
来自:https://www.codecaptain.io/reference/git/the-following-untracked-working-tree-files-would-be-overwritten-by-merge
error: Untracked working tree file 'playbook/ml.qr.justwinit.cn/process.yml' would be overwritten by merge. Aborting
git fetch --all && git reset --hard origin/master
一、解决办法:
二、再git pull就没有问题了,当然,你的改动也被回退了,得先备份再做这个操作:
$git pull
Already up-to-date.
三、重新将文件放进去,再进行commit后push,没毛病:
git commit -m"xxx" ishow.justwinit.cn.conf.j2
git push
Counting objects: 11, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 815 bytes, done.
Total 6 (delta 3), reused 0 (delta 0)
To git@gitlab.qr.cntv.net:irdcops/ansible.git
d33031a..eb4ad86 master -> master
来自:https://www.codecaptain.io/reference/git/the-following-untracked-working-tree-files-would-be-overwritten-by-merge
git中可以承载多个DAGs Repo一样的情况 git checkout --orphan命令。 git的常见用例是此功能是保持独立的文档和github的gh pages孤立的分支branch来创建一个静态网站。
孤立分支特征:
1)master好孤立分支是一个.git仓库里面的两颗独立的数,也就是说他俩没法合并。
2)master默认是保护的,建议把master 干掉,默认保护master的变为master.andorid,类似这样的。
3)孤立分支里面再建立分支,他们之间和常规分支一样的,没有区别。
一)其他用例孤立的分支有哪些?
可能的用法是用于将多个系统信息库组合成一个。 是一些例子:
Combining多个git库?
在这些情况下你必须在同一个档案库中的两个独立DAG之前合并到一个统一的目录树。 因此在长期使用,但这不是尽可能多的操作将暂时通过的状态使用单独的DAG所在的系统信息库中。
二)来自操作手册:
###创建孤立分支
git version 1.7.2+
# 创建
git checkout --orphan <newbranch>
# 删除无用文件
git rm -rf .
# 提交“空”内容
git commit --allow-empty -m "[empty] initial commit"
# 把新创建的本地分支,推送到远端仓库,保持跟踪
git push -u origin <newbranch>
三)实践建一个“孤立”的空分支操作如下,命令来地址(https://ihower.tw/blog/archives/5691):
在Gitlab的Web界面里测试一下孤立分支:
newbranch Merge RequestCompare Select Archive Format
754a735a · 测试一下刚建立的孤立分支 · 2 minutes ago
参考:https://ooso.net/archives/636
孤立分支特征:
1)master好孤立分支是一个.git仓库里面的两颗独立的数,也就是说他俩没法合并。
2)master默认是保护的,建议把master 干掉,默认保护master的变为master.andorid,类似这样的。
3)孤立分支里面再建立分支,他们之间和常规分支一样的,没有区别。
一)其他用例孤立的分支有哪些?
可能的用法是用于将多个系统信息库组合成一个。 是一些例子:
Combining多个git库?
在这些情况下你必须在同一个档案库中的两个独立DAG之前合并到一个统一的目录树。 因此在长期使用,但这不是尽可能多的操作将暂时通过的状态使用单独的DAG所在的系统信息库中。
二)来自操作手册:
###创建孤立分支
git version 1.7.2+
# 创建
git checkout --orphan <newbranch>
# 删除无用文件
git rm -rf .
# 提交“空”内容
git commit --allow-empty -m "[empty] initial commit"
# 把新创建的本地分支,推送到远端仓库,保持跟踪
git push -u origin <newbranch>
三)实践建一个“孤立”的空分支操作如下,命令来地址(https://ihower.tw/blog/archives/5691):
在Gitlab的Web界面里测试一下孤立分支:
newbranch Merge RequestCompare Select Archive Format
754a735a · 测试一下刚建立的孤立分支 · 2 minutes ago
参考:https://ooso.net/archives/636
[实践OK]linux中的strings命令简介以及CentOS 6.6 安装 Node.js,在安装Node高版本时用到新的Gcc时查看之用@node编译安装。
Unix/LinuxC技术 jack 2017-9-20 17:12
用处:strings命令主要用来做查看二进制的编译文件里面某个.c/.cpp文件编译到那个.so库中去了,或查看它调用了哪些库文件.
strings命令很简单, 看起来好像没什么, 但实际有很多用途。 下面, 我来举一个例子。 在大型的软件开发中, 假设有100个.c/.cpp文件, 这个.cpp文件最终生成10个.so库, 那么怎样才能快速知道某个.c/.cpp文件编译到那个.so库中去了呢? 当然, 你可能要说, 看makefile不就知道了。 对, 看makefile肯定可以, 但如下方法更好, 直接用命令:
strings -f "*.so" | grep "xxxxxx"
/usr/local/node/bin/node
来自:http://blog.csdn.net/stpeace/article/details/46641069
二、Node编译高版本涉及Gcc相关的编译安装过程Url:
http://www.cnblogs.com/dee0912/p/5272149.html
关于编译Node的GCC版本升级:
1)linux下升级gcc的方法 – 亲测可用:https://www.cppfans.org/1719.html
2)编译安装 gcc 4.9并验证使用:http://blog.csdn.net/hzhxxx/article/details/28634893
strings命令很简单, 看起来好像没什么, 但实际有很多用途。 下面, 我来举一个例子。 在大型的软件开发中, 假设有100个.c/.cpp文件, 这个.cpp文件最终生成10个.so库, 那么怎样才能快速知道某个.c/.cpp文件编译到那个.so库中去了呢? 当然, 你可能要说, 看makefile不就知道了。 对, 看makefile肯定可以, 但如下方法更好, 直接用命令:
strings -f "*.so" | grep "xxxxxx"
/usr/local/node/bin/node
来自:http://blog.csdn.net/stpeace/article/details/46641069
二、Node编译高版本涉及Gcc相关的编译安装过程Url:
http://www.cnblogs.com/dee0912/p/5272149.html
关于编译Node的GCC版本升级:
1)linux下升级gcc的方法 – 亲测可用:https://www.cppfans.org/1719.html
2)编译安装 gcc 4.9并验证使用:http://blog.csdn.net/hzhxxx/article/details/28634893
问题:redis-3.0.7升级到redis-3.2.10,之前的数据文件/data/redis/6379/dump.rdb 没有删除,service redis start会报错,如下:
当前版本的redis无法处理version=7的RDB格式,这才明白是兼容性问题,但这种“向前兼容”一般很难做到的。
解决办法:删除rdb文件/var/lib/redis/6379/dump.rdb,重启redis就行了。
如果能解决掉Slave没有问题,那么, 线上坏了一台Slave的Redis可以直接替换掉即可:
在RPM打包发现:redis-3.0.7(线上)升级到redis-3.2.10的旧版本的dump.rdb格式无法启动如下:
但是经测试可以做Slave同步,现在CentOS6和CentOS7均升级至和epll仓库一样版本redis-3.2.10。
当前版本的redis无法处理version=7的RDB格式,这才明白是兼容性问题,但这种“向前兼容”一般很难做到的。
解决办法:删除rdb文件/var/lib/redis/6379/dump.rdb,重启redis就行了。
如果能解决掉Slave没有问题,那么, 线上坏了一台Slave的Redis可以直接替换掉即可:
在RPM打包发现:redis-3.0.7(线上)升级到redis-3.2.10的旧版本的dump.rdb格式无法启动如下:
但是经测试可以做Slave同步,现在CentOS6和CentOS7均升级至和epll仓库一样版本redis-3.2.10。
[diff 工具]diff工具之winmerge软件~
Unix/LinuxC技术 jack 2017-9-19 14:28
http://winmerge.org/
CMake 指定安装目录
Unix/LinuxC技术 jack 2017-9-18 17:36
使用 CMAKE_INSTALL_PREFIX 来指定。
方法1:
[plain] view plain copy print?
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
方法二:
修改cmake文件,加入:
SET(CMAKE_INSTALL_PREFIX < install_path >)
要加在 PROJECT(< project_name>) 之后。
摘录:
Default Build and Installation:
Installing vidstab library:
cd path/to/vid.stab/dir/
cmake .
make
sudo make install
默认会安装到:
1).h文件:
/usr/local/include/vid.stab
2).so文件:
/usr/local/lib/libvidstab.so
于是,想安装到指定目录,经rpmbuild打包修改成:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/ffmpeg
来自:http://blog.csdn.net/caspiansea/article/details/53526725
方法1:
[plain] view plain copy print?
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
方法二:
修改cmake文件,加入:
SET(CMAKE_INSTALL_PREFIX < install_path >)
要加在 PROJECT(< project_name>) 之后。
摘录:
Default Build and Installation:
Installing vidstab library:
cd path/to/vid.stab/dir/
cmake .
make
sudo make install
默认会安装到:
1).h文件:
/usr/local/include/vid.stab
2).so文件:
/usr/local/lib/libvidstab.so
于是,想安装到指定目录,经rpmbuild打包修改成:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/ffmpeg
来自:http://blog.csdn.net/caspiansea/article/details/53526725
[实践OK]阿里云FreeBSD11.1系统盘扩容、分区、挂载,FreeBSD手动扩容。
Unix/LinuxC技术 jack 2017-9-11 11:55
零、少了20G的查看:
df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ufsid/59a7effe7885633c 19G 5.6G 12G 31% /
devfs 1.0K 1.0K 0B 100% /dev
一、gpart show 查看磁盘空间情况,可以看到磁盘大小是 40G,但是FreeBSD系统盘空间有20G,少了20G。
Welcome to Alibaba Cloud Elastic Compute Service !
root@iZ2ze0upl89i15wngnott5Z:~ # gpart show [img]=> 63 83886017 vtbd0 MBR (40G)
63 1 - free - (512B)
64 41942975 1 freebsd [active] (20G)
41943039 41943041 - free - (20G)
二、gpart recover ada0 恢复磁盘的空闲大小,然后再执行 gpart show 就可以看到磁盘的空闲空间了。
gpart recover vtbd0
vtbd0 recovering is not needed
三、gpart resize -i 3 -a 4k -s 40G vtbd0
用它:
gpart resize -i 1 -a 4k -s 39G vtbd0 #注意编号是1: -i 1
vtbd0s1 resized
上面FreeBSD14.1的精确计算大小和扩容再实践步骤参考:https://jackxiang.com/post/10934/
resize磁盘,我这里是50G的磁盘,但是不只能直接写50G,因为1G被swap占用了,512K被启动分区占用,最多只能使用48G,如果扩容到其他的大小,都需要在磁盘的总大小上减掉2G
growfs /dev/ada0p3
It's strongly recommended to make a backup before growing the file system.
OK to grow filesystem on /dev/vtbd0s1 from 20GB to 39GB? [yes/no] yes
growfs: /dev/vtbd0s1: Operation not permitted
扩容文件系统,执行完成以后会提示是否同意从 19G 扩容到 48G,以及一些风险提醒,直接Yes。
解决办法:freebsd resize partition
将growfs当做service来执行
service growfs onestart
实践OK如下:
4 、df -h看下能看到成功扩容。
aliyun do the resize the freebsd size:
attachment.php?fid=475[/img]
service growfs onestart
Growing root partition to fill device
vtbd0s1 resized
growfs: requested size 40GB is not larger than the current filesystem size 40GB
onestart 这个命令是什么意思?我找到了:
vim /etc/rc.d/growfs ,但是里面没有onestart。
在 /etc/rc.d/growfs 脚本中没有看到 onestart 的特定逻辑,但它是由 FreeBSD 的服务管理框架处理的。你可以使用 service growfs onestart 命令来一次性启动服务,而不会影响其自动启动状态。growfs_start() { 是入口。
https://help.aliyun.com/document_detail/35099.html
自己家里的服务器作了下kvm的扩容尝试,原因还是安装port时空间太小https://jackxiang.com/post/2849/,最后扩容成功就不存在这个问题了:
/usr/ports/x11/xprintidle/
mkdir: /usr/ports/x11: No space left on device
tar: could not chdir to '/usr/ports/x11/xprintidle/'
怎么办?扩容了:
qemu-img resize FreeBSD-13.0-RELEASE-amd64.raw +128G #运行成功后,去freeBSD里面进行扩容:
df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ufsid/59a7effe7885633c 19G 5.6G 12G 31% /
devfs 1.0K 1.0K 0B 100% /dev
一、gpart show 查看磁盘空间情况,可以看到磁盘大小是 40G,但是FreeBSD系统盘空间有20G,少了20G。
Welcome to Alibaba Cloud Elastic Compute Service !
root@iZ2ze0upl89i15wngnott5Z:~ # gpart show [img]=> 63 83886017 vtbd0 MBR (40G)
63 1 - free - (512B)
64 41942975 1 freebsd [active] (20G)
41943039 41943041 - free - (20G)
二、gpart recover ada0 恢复磁盘的空闲大小,然后再执行 gpart show 就可以看到磁盘的空闲空间了。
gpart recover vtbd0
vtbd0 recovering is not needed
三、gpart resize -i 3 -a 4k -s 40G vtbd0
用它:
gpart resize -i 1 -a 4k -s 39G vtbd0 #注意编号是1: -i 1
vtbd0s1 resized
上面FreeBSD14.1的精确计算大小和扩容再实践步骤参考:https://jackxiang.com/post/10934/
resize磁盘,我这里是50G的磁盘,但是不只能直接写50G,因为1G被swap占用了,512K被启动分区占用,最多只能使用48G,如果扩容到其他的大小,都需要在磁盘的总大小上减掉2G
growfs /dev/ada0p3
It's strongly recommended to make a backup before growing the file system.
OK to grow filesystem on /dev/vtbd0s1 from 20GB to 39GB? [yes/no] yes
growfs: /dev/vtbd0s1: Operation not permitted
扩容文件系统,执行完成以后会提示是否同意从 19G 扩容到 48G,以及一些风险提醒,直接Yes。
解决办法:freebsd resize partition
将growfs当做service来执行
service growfs onestart
实践OK如下:
4 、df -h看下能看到成功扩容。
aliyun do the resize the freebsd size:
attachment.php?fid=475[/img]
service growfs onestart
Growing root partition to fill device
vtbd0s1 resized
growfs: requested size 40GB is not larger than the current filesystem size 40GB
onestart 这个命令是什么意思?我找到了:
vim /etc/rc.d/growfs ,但是里面没有onestart。
在 /etc/rc.d/growfs 脚本中没有看到 onestart 的特定逻辑,但它是由 FreeBSD 的服务管理框架处理的。你可以使用 service growfs onestart 命令来一次性启动服务,而不会影响其自动启动状态。growfs_start() { 是入口。
https://help.aliyun.com/document_detail/35099.html
自己家里的服务器作了下kvm的扩容尝试,原因还是安装port时空间太小https://jackxiang.com/post/2849/,最后扩容成功就不存在这个问题了:
/usr/ports/x11/xprintidle/
mkdir: /usr/ports/x11: No space left on device
tar: could not chdir to '/usr/ports/x11/xprintidle/'
怎么办?扩容了:
qemu-img resize FreeBSD-13.0-RELEASE-amd64.raw +128G #运行成功后,去freeBSD里面进行扩容:
[实践OK]在 FreeBSD 上彻底禁用 sendmail,禁用freebsd ntpd 时间同步,devd进程禁用开机启动,iftop在Port下的安装,加大SWAP,Freebsd修改hostname。
Unix/LinuxC技术 jack 2017-9-10 14:32
vim /etc/defaults/rc.conf 里面有sendmail部分的关闭参数说明,修改一下即可。
sendmail_enable="NO" # Run the sendmail inbound daemon (YES/NO).
不想重新启动服务器的话(应急措施)∶killall sendmail
/etc/rc.d/sendmail stop
Stopping sendmail.
Waiting for PIDS: 1489.
Cannot 'stop' sendmail_msp_queue. Set sendmail_msp_queue_enable to YES in /etc/rc.conf or use 'onestop' instead of 'stop'
/etc/rc.d/sendmail onestop
sendmail not running? (check /var/run/sendmail.pid).
sendmail_msp_queue not running? (check /var/spool/clientmqueue/sm-client.pid).
cat /etc/rc.conf
hostname="jackxiang_owncloud_tools_diff_nginx_php_mysql_redis-10-10-0-237"
ifconfig_vtnet0="inet 10.10.0.*** netmask 255.255.255.0"
defaultrouter="*.*.0.1"
sshd_enable=yes
syslogd_flags="-s"
devd_flags="-s"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
因为Service php-fpm或mysql及nginx出现Freebsd重启不了,于是这样写就Ok了:
vi /etc/rc.conf
/etc/rc.d的启动需要在 /etc/rc.conf里打开,用Service就能启动,前面出问题不知道啥原因:
/etc/rc.d/php-fpm
你可能会因为种种原因而想在 FreeBSD 服务器上彻底禁用 sendmail,那么你可以尝试这样∶
1,如果你不想重新启动服务器的话(应急措施)∶
# killall sendmail
2,如果你想让 sendmail 在启动的时候就不做任何行为的话,你需要把以下这几行加入到 /etc/rc.conf 中∶
sendmail_enable="NONE"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
加入之后需要重新启动服务器让设置生效。
来自:http://www.chinaz.com/server/2010/0226/107257.shtml
=============禁用freebsd ntpd 时间同步================
vi /etc/rc.conf
ntpd_enable="NO"
1.首先在rc.conf里面添加:ntpd_enable=”YES”。
2.修改/etc/ntp.conf
server 0.freebsd.pool.ntp.org iburst maxpoll 9
server 1.freebsd.pool.ntp.org iburst maxpoll 9
server 2.freebsd.pool.ntp.org iburst maxpoll 9
其他全部注释掉。
3.启动ntpd之前需要手动运行ntpdate pool.ntp.org先同步一下时间,避免因为系统时间与时间服务期时间相差太大导致渐次逼近无法实施而造成的ntpd运行失败。
4.运行/etc/rc.d/ntpd start启动服务。
5.可以通过ntpq -p命令来检查当前ntpd服务状态,注意看输出的表格中st这一项值,必须小于16,16代表无法连接时间服务器,如果都为16,则对时不能完成,需要检查网络原因。
6.ntpd服务需要开放对udp端口123的访问。
来自:http://www.voidcn.com/article/p-ebfmvhcn-ve.html
disable syslogd:
echo syslogd_enable=NO >> /etc/rc.conf
syslogd_enable="NO" # vi /etc/rc.conf
来自:https://superuser.com/questions/626305/disabling-syslogd-in-freebsd
devd进程禁用开机启动:
devd_enable="NO" # vi /etc/rc.conf
iftop在Port下的安装:
cd /usr/ports/net-mgmt/iftop/ && make install clean
Freebsd下面加大SWAP实践OK:
/etc/fstab
md99 none swap sw,file=/swapfile,late 0 0
手工生效,否则用这个swapinfo -m就会发现只有1M:
mdconfig -a -t vnode -f /swapfile -u 0 && swapon /dev/md0
swapinfo -m
Device 1M-blocks Used Avail Capacity
/dev/md0 512 0 512 0%
查看新增加的swap是否生效:top
CPU: 0.0% user, 0.0% nice, 0.0% system, 0.4% interrupt, 99.6% idle
Mem: 8616K Active, 11M Inact, 45M Wired, 4396K Buf, 1900M Free
Swap: 512M Total, 512M Free
From:http://darren2000.pixnet.net/blog/post/2180080-freebsd%E4%B8%8A%E6%96%B0%E5%A2%9Eswap%E7%A9%BA%E9%96%93
https://www.cyberciti.biz/faq/create-a-freebsd-swap-file/
Freebsd下实时查看各种信息:
systat 能实时查看各种信息
systat -pigs 默认值CPU
systat -iostat 硬盘IO
systat -swap 交换分区
systat -mbufs 网络缓冲区
systat -vmstat 虚拟内存
systat -netstat 网络
systat -icmp ICMP协议
systat -ip IP协议
systat -tcp TCP协议
systat -ifstat 网卡
显示PCI总线设备信息
pciconf -lv
显示内核加载的模块
kldstat -v
显示指定模块
klsdstat -m ipfilter
即插即用设备
pnpinfo
显示设备占用的IRQ和内存地址
devinfo -u
cpu
sysctl -a|grep cpu
sysctl -a|grep sched 查看使用的调度器,我编译的是ULE
虚拟内存
vmstat
硬盘
gstat
systat -iostat
iostat
网卡
ifconfig
systat -ifstat
网络
netstat
sockstat
tcpdump
trafshow
systat -mbufs
systat -icmp
systat -ip
systat -tcp
只是看流量的话,用systat -netstat
https://my.oschina.net/u/187928/blog/37049
sendmail_enable="NO" # Run the sendmail inbound daemon (YES/NO).
不想重新启动服务器的话(应急措施)∶killall sendmail
/etc/rc.d/sendmail stop
Stopping sendmail.
Waiting for PIDS: 1489.
Cannot 'stop' sendmail_msp_queue. Set sendmail_msp_queue_enable to YES in /etc/rc.conf or use 'onestop' instead of 'stop'
/etc/rc.d/sendmail onestop
sendmail not running? (check /var/run/sendmail.pid).
sendmail_msp_queue not running? (check /var/spool/clientmqueue/sm-client.pid).
cat /etc/rc.conf
hostname="jackxiang_owncloud_tools_diff_nginx_php_mysql_redis-10-10-0-237"
ifconfig_vtnet0="inet 10.10.0.*** netmask 255.255.255.0"
defaultrouter="*.*.0.1"
sshd_enable=yes
syslogd_flags="-s"
devd_flags="-s"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
因为Service php-fpm或mysql及nginx出现Freebsd重启不了,于是这样写就Ok了:
vi /etc/rc.conf
/etc/rc.d的启动需要在 /etc/rc.conf里打开,用Service就能启动,前面出问题不知道啥原因:
/etc/rc.d/php-fpm
你可能会因为种种原因而想在 FreeBSD 服务器上彻底禁用 sendmail,那么你可以尝试这样∶
1,如果你不想重新启动服务器的话(应急措施)∶
# killall sendmail
2,如果你想让 sendmail 在启动的时候就不做任何行为的话,你需要把以下这几行加入到 /etc/rc.conf 中∶
sendmail_enable="NONE"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
加入之后需要重新启动服务器让设置生效。
来自:http://www.chinaz.com/server/2010/0226/107257.shtml
=============禁用freebsd ntpd 时间同步================
vi /etc/rc.conf
ntpd_enable="NO"
1.首先在rc.conf里面添加:ntpd_enable=”YES”。
2.修改/etc/ntp.conf
server 0.freebsd.pool.ntp.org iburst maxpoll 9
server 1.freebsd.pool.ntp.org iburst maxpoll 9
server 2.freebsd.pool.ntp.org iburst maxpoll 9
其他全部注释掉。
3.启动ntpd之前需要手动运行ntpdate pool.ntp.org先同步一下时间,避免因为系统时间与时间服务期时间相差太大导致渐次逼近无法实施而造成的ntpd运行失败。
4.运行/etc/rc.d/ntpd start启动服务。
5.可以通过ntpq -p命令来检查当前ntpd服务状态,注意看输出的表格中st这一项值,必须小于16,16代表无法连接时间服务器,如果都为16,则对时不能完成,需要检查网络原因。
6.ntpd服务需要开放对udp端口123的访问。
来自:http://www.voidcn.com/article/p-ebfmvhcn-ve.html
disable syslogd:
echo syslogd_enable=NO >> /etc/rc.conf
syslogd_enable="NO" # vi /etc/rc.conf
来自:https://superuser.com/questions/626305/disabling-syslogd-in-freebsd
devd进程禁用开机启动:
devd_enable="NO" # vi /etc/rc.conf
iftop在Port下的安装:
cd /usr/ports/net-mgmt/iftop/ && make install clean
Freebsd下面加大SWAP实践OK:
/etc/fstab
md99 none swap sw,file=/swapfile,late 0 0
手工生效,否则用这个swapinfo -m就会发现只有1M:
mdconfig -a -t vnode -f /swapfile -u 0 && swapon /dev/md0
swapinfo -m
Device 1M-blocks Used Avail Capacity
/dev/md0 512 0 512 0%
查看新增加的swap是否生效:top
CPU: 0.0% user, 0.0% nice, 0.0% system, 0.4% interrupt, 99.6% idle
Mem: 8616K Active, 11M Inact, 45M Wired, 4396K Buf, 1900M Free
Swap: 512M Total, 512M Free
From:http://darren2000.pixnet.net/blog/post/2180080-freebsd%E4%B8%8A%E6%96%B0%E5%A2%9Eswap%E7%A9%BA%E9%96%93
https://www.cyberciti.biz/faq/create-a-freebsd-swap-file/
Freebsd下实时查看各种信息:
systat 能实时查看各种信息
systat -pigs 默认值CPU
systat -iostat 硬盘IO
systat -swap 交换分区
systat -mbufs 网络缓冲区
systat -vmstat 虚拟内存
systat -netstat 网络
systat -icmp ICMP协议
systat -ip IP协议
systat -tcp TCP协议
systat -ifstat 网卡
显示PCI总线设备信息
pciconf -lv
显示内核加载的模块
kldstat -v
显示指定模块
klsdstat -m ipfilter
即插即用设备
pnpinfo
显示设备占用的IRQ和内存地址
devinfo -u
cpu
sysctl -a|grep cpu
sysctl -a|grep sched 查看使用的调度器,我编译的是ULE
虚拟内存
vmstat
硬盘
gstat
systat -iostat
iostat
网卡
ifconfig
systat -ifstat
网络
netstat
sockstat
tcpdump
trafshow
systat -mbufs
systat -icmp
systat -ip
systat -tcp
只是看流量的话,用systat -netstat
https://my.oschina.net/u/187928/blog/37049
[实践OK]Linux/linux centos下的SS/ss查看源端和目标端口Linux的Http端口命令完成情况,相当方便简单。
Unix/LinuxC技术 jack 2017-9-8 10:13
背景:TCP高并发时用 netstat反应不过来,用ss,ss --help查不到下面的参数,得用 man ss查看。
Linux下的SS查看Linux的Http端口完成情况
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 0 101.200.228.135:http 61.150.114.230:32331
tcp 0 0 101.200.228.135:http 61.150.114.230:32329
tcp 0 0 101.200.228.135:http 61.150.114.230:32347
tcp 0 0 101.200.228.135:http 61.150.114.230:32322
tcp 0 0 101.200.228.135:http 61.150.114.230:32346
tcp 0 0 101.200.228.135:http 61.150.114.230:32321
tcp 0 0 101.200.228.135:http 61.150.114.230:32327
tcp 0 0 101.200.228.135:http 61.150.114.230:32328
tcp 0 0 101.200.228.135:http 61.150.114.230:23159
tcp 0 0 101.200.228.135:http 1.85.216.135:50864
tcp 0 0 101.200.228.135:http 140.205.205.4:63844
#ss dst 10.51.77.34
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 10.51.77.34:6379 10.51.77.34:53590
tcp ESTAB 0 0 10.51.77.34:6379 10.51.77.34:53586
tcp ESTAB 0 0 10.51.77.34:53586 10.51.77.34:6379
tcp CLOSE-WAIT 1 0 10.51.77.34:43714 10.51.77.34:6379
tcp ESTAB 0 0 10.51.77.34:53590 10.51.77.34:6379
tcp CLOSE-WAIT 1 0 10.51.77.34:43718 10.51.77.34:6379
加个源端口过滤一下(sport = 6379,等号之间得有空格):
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 10.51.77.34:6379 10.51.77.34:53590
tcp ESTAB 0 0 10.51.77.34:6379 10.51.77.34:53586
查看源地址Http端口的一个情况:
tcp ESTAB 0 0 101.200.228.135:http 101.81.172.212:41352
tcp ESTAB 0 0 101.200.228.135:http 36.110.2.171:35007
tcp ESTAB 0 0 101.200.228.135:http 115.236.174.162:55497
tcp ESTAB 0 0 101.200.228.135:http 36.110.2.171:33458
Linux下的SS查看Linux的Http端口完成情况
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 0 101.200.228.135:http 61.150.114.230:32331
tcp 0 0 101.200.228.135:http 61.150.114.230:32329
tcp 0 0 101.200.228.135:http 61.150.114.230:32347
tcp 0 0 101.200.228.135:http 61.150.114.230:32322
tcp 0 0 101.200.228.135:http 61.150.114.230:32346
tcp 0 0 101.200.228.135:http 61.150.114.230:32321
tcp 0 0 101.200.228.135:http 61.150.114.230:32327
tcp 0 0 101.200.228.135:http 61.150.114.230:32328
tcp 0 0 101.200.228.135:http 61.150.114.230:23159
tcp 0 0 101.200.228.135:http 1.85.216.135:50864
tcp 0 0 101.200.228.135:http 140.205.205.4:63844
#ss dst 10.51.77.34
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 10.51.77.34:6379 10.51.77.34:53590
tcp ESTAB 0 0 10.51.77.34:6379 10.51.77.34:53586
tcp ESTAB 0 0 10.51.77.34:53586 10.51.77.34:6379
tcp CLOSE-WAIT 1 0 10.51.77.34:43714 10.51.77.34:6379
tcp ESTAB 0 0 10.51.77.34:53590 10.51.77.34:6379
tcp CLOSE-WAIT 1 0 10.51.77.34:43718 10.51.77.34:6379
加个源端口过滤一下(sport = 6379,等号之间得有空格):
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 10.51.77.34:6379 10.51.77.34:53590
tcp ESTAB 0 0 10.51.77.34:6379 10.51.77.34:53586
查看源地址Http端口的一个情况:
tcp ESTAB 0 0 101.200.228.135:http 101.81.172.212:41352
tcp ESTAB 0 0 101.200.228.135:http 36.110.2.171:35007
tcp ESTAB 0 0 101.200.228.135:http 115.236.174.162:55497
tcp ESTAB 0 0 101.200.228.135:http 36.110.2.171:33458
[学习Python]莫烦PYTHON,学习人工智能,视频资料。
Php/Js/Shell/Go jack 2017-9-6 19:57
https://morvanzhou.github.io
[实践OK]redis C接口hiredis 简单函数使用介绍
Unix/LinuxC技术 jack 2017-9-6 10:14
背景:搞一些Nginx的扩展啥的都用那个hiredis进行静态编译后,编译进Nginx,这儿先研究一下这个Redis的C连接认证以及取数据先。
代码@/usr/local/src/hiredis:
编译一下:
gcc redisTest.c /home/test/rpmbuild/BUILD/ngx_http_monitor_module-2.2.0/hiredis/libhiredis.a -I/home/test/rpmbuild/BUILD/ngx_http_monitor_module-2.2.0/
关于头文件之 linux下C include搜索的路径:http://blog.csdn.net/chosen0ne/article/details/7210946
编译静态的resis静态链接库make static,别make 会生成动态连接库,如果只指定 -L路径,会弄成了动态编译,有依赖SO的情况,静态文件大点无所谓了:
cd hiredis
make clean
make static
静态编译出来就是这样的:
ldd a.out
linux-vdso.so.1 => (0x00007ffeec95e000)
libc.so.6 => /lib64/libc.so.6 (0x0000003771400000)
/lib64/ld-linux-x86-64.so.2 (0x0000003771000000)
执行:
./a.out
Connect to redisServer Success
Authentication success
Succeed to execute command[set stest1 value1]
The length of 'stest1' is 6.
Succeed to execute command[strlen stest1]
The value of 'stest1' is value1
Succeed to execute command[get stest1]
Succeed to execute command[get stest2]
参考:http://blog.csdn.net/mniwc/article/details/12851837
代码@/usr/local/src/hiredis:
编译一下:
gcc redisTest.c /home/test/rpmbuild/BUILD/ngx_http_monitor_module-2.2.0/hiredis/libhiredis.a -I/home/test/rpmbuild/BUILD/ngx_http_monitor_module-2.2.0/
关于头文件之 linux下C include搜索的路径:http://blog.csdn.net/chosen0ne/article/details/7210946
编译静态的resis静态链接库make static,别make 会生成动态连接库,如果只指定 -L路径,会弄成了动态编译,有依赖SO的情况,静态文件大点无所谓了:
cd hiredis
make clean
make static
静态编译出来就是这样的:
ldd a.out
linux-vdso.so.1 => (0x00007ffeec95e000)
libc.so.6 => /lib64/libc.so.6 (0x0000003771400000)
/lib64/ld-linux-x86-64.so.2 (0x0000003771000000)
执行:
./a.out
Connect to redisServer Success
Authentication success
Succeed to execute command[set stest1 value1]
The length of 'stest1' is 6.
Succeed to execute command[strlen stest1]
The value of 'stest1' is value1
Succeed to execute command[get stest1]
Succeed to execute command[get stest2]
参考:http://blog.csdn.net/mniwc/article/details/12851837
outlook2013怎么配置提醒对方查察回覆邮件?有时候给对方发邮件的时候,但愿能在邮件到期之前查察,这时候我们就可以在发邮件的时候配置邮件提醒,详细的配置进程请看下文具体先容
用outlook给收件人发邮件,有时候但愿到期之前再次提醒对方查察回覆邮件,该怎么配置呢?如何通过outlook2013配置邮件回覆到期提醒。
From:http://m.jb51.net/softjc/412733.html
用outlook给收件人发邮件,有时候但愿到期之前再次提醒对方查察回覆邮件,该怎么配置呢?如何通过outlook2013配置邮件回覆到期提醒。
From:http://m.jb51.net/softjc/412733.html
[转]多个php版本的composer使用
Php/Js/Shell/Go jack 2017-9-1 15:26
背景:有的人一台服务搞好几个PHP版本,麻烦,建议用Docker隔离~
由于系统环境变量之前同事安装的laravel是5.1...php默认的环境变量是:
不想破话原有环境变量,因为现在新的项目是laravel5.4.。。所以在用默认composer require安装时提示php版本过低滴问题
问题是这样滴:
默认composer安装会调用原来的php5.5环境变量,所以这里安装会出现兼容问题
新项目使用的是php7.1
那么如何在多个php版本中互不干扰安装composer呢,折腾了半个多小时,
现在说下解决办法吧:
1:下载composer.phar,官网有直接下载的链接,https://getcomposer.org/download/
2:composer.phar 复制到项目根目录,比如我的是:/home/www/web
3:执行 /usr/local/php7/bin/php composer.phar update (这里我的安装路径是/usr/local/php7/bin/php,不一定适合你额,请对号入座即可吧)
4:安装依赖包:/usr/local/php7/bin/php composer.phar require laravel/scout
OK,大功告成!
由于系统环境变量之前同事安装的laravel是5.1...php默认的环境变量是:
不想破话原有环境变量,因为现在新的项目是laravel5.4.。。所以在用默认composer require安装时提示php版本过低滴问题
问题是这样滴:
默认composer安装会调用原来的php5.5环境变量,所以这里安装会出现兼容问题
新项目使用的是php7.1
那么如何在多个php版本中互不干扰安装composer呢,折腾了半个多小时,
现在说下解决办法吧:
1:下载composer.phar,官网有直接下载的链接,https://getcomposer.org/download/
2:composer.phar 复制到项目根目录,比如我的是:/home/www/web
3:执行 /usr/local/php7/bin/php composer.phar update (这里我的安装路径是/usr/local/php7/bin/php,不一定适合你额,请对号入座即可吧)
4:安装依赖包:/usr/local/php7/bin/php composer.phar require laravel/scout
OK,大功告成!
狗是人类朋友,他为主人看家护院;如陌生人进入它的领地,它会狂吠;如果主人出来叫喊一声,它立马摇头摆尾蹲在一旁。 这里我也提醒养狗的主人,请为了大家安全;请看好你家的看门狗,一但咬伤人;你将负全责。
假如我们遇见狗(不是藏獒、牧羊犬烈犬,这类犬主人应用链子锁好)你千万别跑,你一跑它以为你是贼;狗眼看人它会毫不犹豫追你咬你;
如果你就地一蹲不动,捡一棍子或砖头,狗立马转身躲在一旁叫吠;你这时可以慢慢的离开,一段距离后;就安全了。请牢记:千万别跑!它毕竟是动物;它也怕揍。
农村人有这样一句俗话,狗怕摸,狼怕错,意思狗追你的时候,弯腰或者蹲下,它以为你拿地上的东西,要打它,它就跑了,这就是狗的天性。狼追你的时候,你停它停,你走它走,手中有树条的话。手一举起。狼夹着尾巴就跑了。这就是狼和狗的区别。特别主意的,一人进山,有狼的地方。带个鞭子最好。狼最怕举起手中的鞭子。
假如我们遇见狗(不是藏獒、牧羊犬烈犬,这类犬主人应用链子锁好)你千万别跑,你一跑它以为你是贼;狗眼看人它会毫不犹豫追你咬你;
如果你就地一蹲不动,捡一棍子或砖头,狗立马转身躲在一旁叫吠;你这时可以慢慢的离开,一段距离后;就安全了。请牢记:千万别跑!它毕竟是动物;它也怕揍。
农村人有这样一句俗话,狗怕摸,狼怕错,意思狗追你的时候,弯腰或者蹲下,它以为你拿地上的东西,要打它,它就跑了,这就是狗的天性。狼追你的时候,你停它停,你走它走,手中有树条的话。手一举起。狼夹着尾巴就跑了。这就是狼和狗的区别。特别主意的,一人进山,有狼的地方。带个鞭子最好。狼最怕举起手中的鞭子。





