背景:有时想要打开相同页面,快速写或粘贴一篇博文到自己博客网站上,每次抄作都需要新开一个Tab,再粘贴博客网站地址,再粘贴进入新开的Tab里,效率不高,怎么办,有没有插件,我一找,还真有这样的一个插件。
插件:CLEAN crxMouse Gestures
插件地址:https://chrome.google.com/webstore/detail/clean-crxmouse-gestures/mjidkpedjlfnanainpdfnedkdlacidla?hl=zh-CN
插件介绍:
干净版! 原名:Gestures for Chrome(TM)汉化版.方便,快捷,充分发掘鼠标的所有操作.功能包括:鼠标手势,超级拖曳,滚轮手势,摇杆手势,平滑滚动,标签页列表等.
本版本是基于crxMouse Gestures优化的版本,整理优化代码并去除了该版本中在后台上传用户浏览过的网页等隐私数据的代码。
方便,快捷,充分发掘鼠标的所有操作.功能包括:鼠标手势,超级拖曳,滚轮手势,摇杆手势,平滑滚动,标签页列表,后台打开标签页等。
---------
默认手势和自定义鼠标手势地址,在浏览器地址栏里输入:chrome-extension://mjidkpedjlfnanainpdfnedkdlacidla/options.html ,左侧点鼠标手势。
标签最常用,特自研三个常用标签部分:
零)进入手势扩展设置:
右上左上默认是进入扩展。
一)自定义手势:
1)复制当前标签:
设置、鼠标手势、添加新手势、顺时针画个圈,选择下拉里面的动作:复制当前标签。 (左下右)
2)新建标签页:
设置、鼠标手势、添加新手势、向上、向左、向右:新建标签页。 (上左右)。
3)关闭标签页:
设置、鼠标手势、添加新手势、向下、向左、向右:关闭标签页。 (下左右)。
二)系统默认常用标签手势:
切换至左侧标签页:上左
切换至右侧标签页:上右
三)键盘实现URL历史后退:
Alt+键盘左键头
四)前进后退:
后退:左
前进:右
五)刷新/强刷/上拉/下拉:
刷新:上下
强刷:上下上
上拉:下
下拉:上
六)查看网页源代码:
下左 或者 左下
七)强制刷新网页:
上、右、下、左、上,也就是顺时针画个圈。(右、下、左、上默认是进入扩展!)
八)打开粘贴板上的网址:
下、左、上、右、下,前提是里面真是一个网址,否则不会打开新的标签链接的。
多台相同手势配置文件导入导出,方法,来源:http://jackxiang.com/post/6619/
来个手势的,配置自定义手势太麻烦,直接打包, 发现并没有把之前的手势设置进去,但这个插件提供了一个导出和倒入功能,可把之前的设置导入,相当有用,不用再次设置了,DownLoasd:,在Google点插件,再点选择->高级选项->导出时->Txt框里有数据->拷贝出来成txt,上传到另一台计算机上->粘贴进去->导入即可。
Mac和Linux下注意设置下右键900ms双击以实现在Chrome下的右键:
Linux/Mac选项 [V]消除Linux/Mac右键菜单对本扩展的影响(双击弹出右键菜单).
双击间隔最长时间(ms):900 ms
该选项修复非Windows平台上,右键菜单影响某些功能的正常使用,强烈建议Linux/Mac用户勾选此项.
Google Chrome右键不灵,Chrome for Mac为何双击右键才出现菜单?http://ju.outofmemory.cn/entry/315312
插件:CLEAN crxMouse Gestures
插件地址:https://chrome.google.com/webstore/detail/clean-crxmouse-gestures/mjidkpedjlfnanainpdfnedkdlacidla?hl=zh-CN
插件介绍:
干净版! 原名:Gestures for Chrome(TM)汉化版.方便,快捷,充分发掘鼠标的所有操作.功能包括:鼠标手势,超级拖曳,滚轮手势,摇杆手势,平滑滚动,标签页列表等.
本版本是基于crxMouse Gestures优化的版本,整理优化代码并去除了该版本中在后台上传用户浏览过的网页等隐私数据的代码。
方便,快捷,充分发掘鼠标的所有操作.功能包括:鼠标手势,超级拖曳,滚轮手势,摇杆手势,平滑滚动,标签页列表,后台打开标签页等。
---------
默认手势和自定义鼠标手势地址,在浏览器地址栏里输入:chrome-extension://mjidkpedjlfnanainpdfnedkdlacidla/options.html ,左侧点鼠标手势。
标签最常用,特自研三个常用标签部分:
零)进入手势扩展设置:
右上左上默认是进入扩展。
一)自定义手势:
1)复制当前标签:
设置、鼠标手势、添加新手势、顺时针画个圈,选择下拉里面的动作:复制当前标签。 (左下右)
2)新建标签页:
设置、鼠标手势、添加新手势、向上、向左、向右:新建标签页。 (上左右)。
3)关闭标签页:
设置、鼠标手势、添加新手势、向下、向左、向右:关闭标签页。 (下左右)。
二)系统默认常用标签手势:
切换至左侧标签页:上左
切换至右侧标签页:上右
三)键盘实现URL历史后退:
Alt+键盘左键头
四)前进后退:
后退:左
前进:右
五)刷新/强刷/上拉/下拉:
刷新:上下
强刷:上下上
上拉:下
下拉:上
六)查看网页源代码:
下左 或者 左下
七)强制刷新网页:
上、右、下、左、上,也就是顺时针画个圈。(右、下、左、上默认是进入扩展!)
八)打开粘贴板上的网址:
下、左、上、右、下,前提是里面真是一个网址,否则不会打开新的标签链接的。
多台相同手势配置文件导入导出,方法,来源:http://jackxiang.com/post/6619/
来个手势的,配置自定义手势太麻烦,直接打包, 发现并没有把之前的手势设置进去,但这个插件提供了一个导出和倒入功能,可把之前的设置导入,相当有用,不用再次设置了,DownLoasd:
下载文件
Mac和Linux下注意设置下右键900ms双击以实现在Chrome下的右键:
Linux/Mac选项 [V]消除Linux/Mac右键菜单对本扩展的影响(双击弹出右键菜单).
双击间隔最长时间(ms):900 ms
该选项修复非Windows平台上,右键菜单影响某些功能的正常使用,强烈建议Linux/Mac用户勾选此项.
Google Chrome右键不灵,Chrome for Mac为何双击右键才出现菜单?http://ju.outofmemory.cn/entry/315312
gcc编译参数指定编码格式,exbuffer.c——纯C写的TCP中的粘包、分包问题的解决方案
Unix/LinuxC技术 jackxiang 2018-1-22 23:19
https://github.com/play175/exbuffer.c/blob/master/mingw.makefile 内容:
-finput-charset 指定源文件的编码(若不指定,默认是UTF-8)
-fexec-charset 指定多字节字符串(const char*)常量在编译后的程序里保存的编码集(若不指定,默认是UTF-8)
摘自 :http://blog.csdn.net/qq_28234213/article/details/73277748
exbuffer.c——纯C写的TCP中的粘包、分包问题的解决方案里的mingw.makefile :
https://yoyo.play175.com/p/exbuffer_c.html
-finput-charset 指定源文件的编码(若不指定,默认是UTF-8)
-fexec-charset 指定多字节字符串(const char*)常量在编译后的程序里保存的编码集(若不指定,默认是UTF-8)
摘自 :http://blog.csdn.net/qq_28234213/article/details/73277748
exbuffer.c——纯C写的TCP中的粘包、分包问题的解决方案里的mingw.makefile :
https://yoyo.play175.com/p/exbuffer_c.html
来源:https://www.zhihu.com/question/21433340
------------------------------------------------------------------
作者:武让
链接:https://www.zhihu.com/question/21433340/answer/18211079
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
step1: 在“选项卡”空白处右键,选择“自定义功能区
step2: 根据下图,列表处选择“自定义功能区”,位置选择“不在功能区中的命令”并找到“朗读”(排序按拼音首字母)。
step3:自定义功能区处需要新建组,这个组可以建在已有的选项卡内,也可以自己建一个选项卡再在下面建组,此处我在“审阅”选下卡下新建了“read”组,然后把“朗读”移动到该组下。
step4:“确定”退出,然后在加入“朗读”的组下面找到朗读功能即可
------------------------------------------------------------------
作者:武让
链接:https://www.zhihu.com/question/21433340/answer/18211079
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
step1: 在“选项卡”空白处右键,选择“自定义功能区
step2: 根据下图,列表处选择“自定义功能区”,位置选择“不在功能区中的命令”并找到“朗读”(排序按拼音首字母)。
step3:自定义功能区处需要新建组,这个组可以建在已有的选项卡内,也可以自己建一个选项卡再在下面建组,此处我在“审阅”选下卡下新建了“read”组,然后把“朗读”移动到该组下。
step4:“确定”退出,然后在加入“朗读”的组下面找到朗读功能即可
结论:最新版的chrome已经更简单了,通过对着标签页点右键,就有静音选项了~
点击链接chrome://flags/#enable-tab-audio-muting开启声音管理
重启浏览器
重启完成后,点击标签页上的小喇叭就可以禁止声音
这个问题也困扰了我很久,直到我彻底忍无可忍了,终于Google了一下答案:chrome://flags/#enable-tab-audio-muting 开启功能后,点击标签页上的小喇叭即可参考文献:开启 Chrome 自带的标签页静音功能[Chrome]另外,最新版的chrome已经更简单了,通过对着标签页点右键,就有静音选项了~
作者:知乎用户
链接:https://www.zhihu.com/question/20336805/answer/33871967
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
点击链接chrome://flags/#enable-tab-audio-muting开启声音管理
重启浏览器
重启完成后,点击标签页上的小喇叭就可以禁止声音
这个问题也困扰了我很久,直到我彻底忍无可忍了,终于Google了一下答案:chrome://flags/#enable-tab-audio-muting 开启功能后,点击标签页上的小喇叭即可参考文献:开启 Chrome 自带的标签页静音功能[Chrome]另外,最新版的chrome已经更简单了,通过对着标签页点右键,就有静音选项了~
作者:知乎用户
链接:https://www.zhihu.com/question/20336805/answer/33871967
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
[浅显易懂]和TCP三次握手相关的TCP报文中的重要标志位
Unix/LinuxC技术 jackxiang 2018-1-10 20:49
看了很多tcp文章都看不懂,这篇文章好像懂了,有空试试,说的是不是真的。
和三次握手相关的TCP报文中的重要标志位
昨天的文章中,结合Wireshark抓包和大家讨论了三次握手的相关知识点,评论中有些读者对序号,确认序号,以及SYN&ACK等标志位还有一些疑问,这里简单再说一下我的理解。其中ACK的32位值在Wireshark抓包时显示的是相对的值,可设置为显示真实值:http://mini.eastday.com/a/180131063435528.html
首先,由TCP协议报文的格式可知,在报文中我们主要关注与《32位序列号》,《32位确认序号》,和SYN和ACK标志位。因为这四个要素和三次握手紧密相关。阅读全文
和三次握手相关的TCP报文中的重要标志位
昨天的文章中,结合Wireshark抓包和大家讨论了三次握手的相关知识点,评论中有些读者对序号,确认序号,以及SYN&ACK等标志位还有一些疑问,这里简单再说一下我的理解。其中ACK的32位值在Wireshark抓包时显示的是相对的值,可设置为显示真实值:http://mini.eastday.com/a/180131063435528.html
首先,由TCP协议报文的格式可知,在报文中我们主要关注与《32位序列号》,《32位确认序号》,和SYN和ACK标志位。因为这四个要素和三次握手紧密相关。阅读全文
[实践OK]因删除的文件被系统进程打开,那么文件实际上并没有被删除,因此空间没有被释放,出现Linux下文件已删空间还是不足,经常遇到文件已经删除,但是空间因进程还在并没有释放的原因,一个队列进程把磁盘写满后,即使杀死PHP队列进程和对应的大文件后df -h的/ 100%占满,经lsof |grep "Remote.log"发现是Filebeat,一文件多进程读取导致。
Unix/LinuxC技术 jackxiang 2018-1-5 13:45
大多原因是删除的文件被系统进程打开,那么文件实际上并没有被删除,因此空间没有被释放。
三次发现类似文件:
lsof -n /sec_syslog/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 1228 root 11w REG 253,17 701955294 9437186 /sec_syslog/2024-05-05/10.71.59.14.log (deleted)
rsyslogd 1228 root 26w REG 253,17 21333 9437187 /sec_syslog/2024-05-05/127.0.0.1.log (deleted)
rsyslogd 1228 root 27w REG 253,17 40433209822 6553602 /sec_syslog/2024-05-06/10.71.59.14.log (deleted)
猜测是因为sec_syslog导致的,以下得到验证:
lsof -nPp 1228|grep sec_syslog
rsyslogd 1228 root 11w REG 253,17 701955294 9437186 /sec_syslog/2024-05-05/10.71.59.14.log (deleted)
rsyslogd 1228 root 26w REG 253,17 21333 9437187 /sec_syslog/2024-05-05/127.0.0.1.log (deleted)
rsyslogd 1228 root 27w REG 253,17 40433209822 6553602 /sec_syslog/2024-05-06/10.71.59.14.log (deleted)
rsyslogd 1228 root 28w REG 253,17 4649024 6553603 /sec_syslog/2024-05-06/127.0.0.1.log (deleted)
rsyslogd 1228 root 29w REG 253,17 3681387 2883586 /sec_syslog/2024-05-07/127.0.0.1.log (deleted)
rsyslogd 1228 root 30w REG 253,17 119666961091 2883587 /sec_syslog/2024-05-07/10.71.59.14.log (deleted)
rsyslogd 1228 root 31w REG 253,17 5869568 6946818 /sec_syslog/2024-05-08/127.0.0.1.log (deleted)
rsyslogd 1228 root 32w REG 253,17 50329927680 6946819 /sec_syslog/2024-05-08/10.71.59.14.log (deleted)
重启后,也就好了:
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vdb1 197G 78M 187G 1% /sec_syslog
二次发现类似问题:还得靠lsof -n / |grep deleted ,操作如下:
删了大文件,但是这个文件没有释放,ls -n / |grep deleted 反查到
lsof -n / |grep deleted
baserepor 3827 root 2w REG 253,1 0 2492090 /tmp/xuoasefasd.err (deleted)
tshark 47796 root 5r REG 253,1 14106508896 2492042 /tmp/wireshark_pcapng_eth0_20201015103006_KWTDIm (deleted)
dumpcap 47802 root 4u REG 253,1 14106508896 2492042 /tmp/wireshark_pcapng_eth0_20201015103006_KWTDIm (deleted)
查命令历史:
root_shell_cmd [xiangdong 10.4.12.52] [/tmp] 1056 [2020-10-15 11:52:14] cd wireshark_pcapng_eth0_20201015103006_KWTDIm
root_shell_cmd [xiangdong 10.4.12.52] [/tmp] 1057 [2020-10-15 11:52:17] tail -f wireshark_pcapng_eth0_20201015103006_KWTDIm
root_shell_cmd [xiangdong 10.4.12.52] [/tmp] 1058 [2020-10-15 11:52:21] ls
root_shell_cmd [xiangdong 10.4.12.52] [/tmp] 1059 [2020-10-15 11:52:24] rm -rf wireshark_pcapng_eth0_20201015103006_KWTDIm
再次确认删了,但是磁盘空间还在:
ls -lart /tmp/wireshark_pcapng_eth0_20201015103006_KWTDIm
ls: cannot access /tmp/wireshark_pcapng_eth0_20201015103006_KWTDIm: No such file or directory
由于是tahshrk,估计tcpdump是它调用起来的,应该也是,查看进程名:
cat /proc/47796/status |grep Name
Name: tshark
ps -eo"pid,ppid,gid,sid,tty,cmd" --forest|less
1238 1 0 1238 ? /usr/sbin/sshd -D
42045 1238 0 42045 ? \_ sshd: xiangdong [priv]
42047 42045 1040 42045 ? | \_ sshd: xiangdong@pts/0,pts/1,pts/2,pts/3
47537 42047 1040 47537 pts/1 | \_ -bash
47585 47537 1040 47537 pts/1 | | \_ sudo su -
47586 47585 0 47537 pts/1 | | \_ su -
47587 47586 0 47537 pts/1 | | \_ -bash
47628 47587 0 47537 pts/1 | | \_ sudo su -
47629 47628 0 47537 pts/1 | | \_ su -
47630 47629 0 47537 pts/1 | | \_ -bash
47796 47630 0 47537 pts/1 | | \_ tshark -n -t a -R http.request -T fields -e frame.time -e ip.src -e http.host -e http.request.method -e http.request.uri
47802 47796 0 47537 pts/1 | | \_ /sbin/dumpcap -n -i eth0 -Z none
果然:
root 47796 47630 2 10:30 pts/1 00:04:51 | | \_ tshark -n -t a -R http.request -T fields -e frame.time -e ip.src -e http.host -e http.request.method -e http.request.uri
root 47802 47796 0 10:30 pts/1 00:00:36 | | \_ /sbin/dumpcap -n -i eth0 -Z none
杀了它就好了,磁盘就释放了:
df -h
/dev/vda1 40G 37G 583M 99% /
变为:
pkill tshark
df -h
/dev/vda1 40G 24G 14G 64% /
告诉我们要记得退出tshark,别让它后台运行,删文件前用 lsof wireshark_pcapng_eth0_20201015103006_KWTDIm 看这个tshak进程还在不在。
来自:https://www.cnblogs.com/zhangrongfei/p/12463466.html
经过lsof直接看文件谁打开了:#lsof /var/log/messages
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 1994 root 6w REG 253,0 39892 101327940 /var/log/messages
背景:机器长时间运行往往磁盘空间满了,但是删除了还是占用很大空间和没删除几乎一样,怎么办?
运维监控系统发来通知,报告一台服务器空间满了,登陆服务器查看,根分区确实满了,这里先说一下服务器的一些删除策略,由于 linux 没有回收站功能,所以线上服务器上所有要删除的文件都会先移到系统 / tmp 目录下,然后定期清除 / tmp 目录下的数据。这个策略本身没有什么问题,但是通过检查发现这台服务器的系统分区中并没有单独划分 / tmp 分区,这样 / tmp 下的数据其实占用根分区的空间,既然找到了问题,那么删除 / tmp 目录下一些占用空间较大的数据文件即可。
发现真出现了,一个队列进程把磁盘写满后,即使杀死PHP队列进程和对应的大文件后df -h的/ 100%占满,经lsof |grep "Remote.log"发现是Filebeat:
实践解决如下,确定杀光了:
ps aux |grep Daemon |awk '{print $2}' |xargs kill -9
kill 10379: No such process
空间还是占用100%,用 lsof查看,这个命令还可以用来看端口对应的程序,如:
/usr/sbin/lsof -i tcp:5902
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Xvnc 24560 root 9u IPv4 763173 0t0 TCP *:5902 (LISTEN)
Xvnc 24560 root 10u IPv6 763174 0t0 TCP *:5902 (LISTEN)
lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 41167 root 18u IPv4 249906712 0t0 TCP *:http (LISTEN)
lsof |grep "Remote.log" 发现是filebeat :
重启一下Filebeat下吧:
/etc/init.d/filebeat restart
Stopping filebeat:
Config OK
Stopping filebeat: [ OK ]
2018/03/22 08:29:07.965771 config.go:86: INFO Additional configs loaded from: /etc/filebeat/conf.d/sec.yml
Config OK [ OK ]
再看这个文件还在,是新生成的,但是空间就变正常了。AddTime:2018-03-22
=============================================================================
# du -sh /tmp/* | sort -nr |head -3
通过命令发现在 / tmp 目录下有个 66G 大小的文件 access_log,这个文件应该是 apache 产生的访问日志文件,从日志大小来看,应该是很久没有清理的 apache 日志文件了,基本判定是这个文件导致的根空间爆满,在确认此文件可以删除后,执行如下删除命令,
# rm /tmp/access_Iog
# df -h
从输出来看,根分区空间仍然没有释放,这是怎么回事
一般来说不会出现删除文件后空间不释放的情况,但是也存在例外,比如文件进程锁定,或者有进程一直在向这个文件写数据,要理解这个问题,就需要知道 linux 下文件的存储机制和存储结构。
一个文件在文件系统中存放分为两个部分:数据部分和指针部分,指针位于文件系统的 meta-data 中,在将数据删除后,这个指针就从 meta-data 中清除了,而数据部分存储在磁盘中。在将数据对应的指针从 meta-data 中清除后,文件数据部分占用的空间就可以被覆盖并写入新的内容,之所以出现删除 access_log 文件后,空间还没有释放,就是因为 httpd 进程还在一直向这个文件写入内容,导致虽然删除了 access_Ilog 文件,但是由于进程锁定,文件对应的指针部分并未从 meta-data 中清除,而由于指针并未删除,系统内核就认为文件并未被删除,因此通过 df 命令查询空间并未释放。
问题排查:
既然有了解决思路,那么接下来看看是否有进程一直在向 access_log 文件中写入数据,这里需要用到 linux 下的 losf 命令,通过这个命令可以获取一个仍然被应用程序占用的已删除文件列表
# lsof | grep delete
从输出可以看出,/tmp/access_log 文件被进程 httpd 锁定,而 httpd 进程还一直向这个文件写入日志数据,最后一列的‘deleted’状态说明这个日志文件已经被删除,但是由于进程还在一直向此文件写入数据,因此空间并未释放。
解决问题:
到这里问题就基本排查清楚了,解决这一类问题的方法有很多,最简单的方法就是关闭或者重启 httpd 进程,当然重启操作系统也可以。不过这些并不是最好的办法,对待这种进程不停对文件写日志的操作,要释放文件占用的磁盘空间,最好的方法是在线清空这个文件,具体可以通过如下命令完成:
# echo “”>/tmp/access_log
通过这种方法,磁盘空间不但可以马上释放,也可以保障进城继续向文件写入日志,这种方法经常用于在线清理 apache /tomcat/nginx 等 web 服务产生的日志文件。
摘自:http://mp.weixin.qq.com/s/AJtnz_CE3pmhoaMHm6HNXA
三次发现类似文件:
lsof -n /sec_syslog/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 1228 root 11w REG 253,17 701955294 9437186 /sec_syslog/2024-05-05/10.71.59.14.log (deleted)
rsyslogd 1228 root 26w REG 253,17 21333 9437187 /sec_syslog/2024-05-05/127.0.0.1.log (deleted)
rsyslogd 1228 root 27w REG 253,17 40433209822 6553602 /sec_syslog/2024-05-06/10.71.59.14.log (deleted)
猜测是因为sec_syslog导致的,以下得到验证:
lsof -nPp 1228|grep sec_syslog
rsyslogd 1228 root 11w REG 253,17 701955294 9437186 /sec_syslog/2024-05-05/10.71.59.14.log (deleted)
rsyslogd 1228 root 26w REG 253,17 21333 9437187 /sec_syslog/2024-05-05/127.0.0.1.log (deleted)
rsyslogd 1228 root 27w REG 253,17 40433209822 6553602 /sec_syslog/2024-05-06/10.71.59.14.log (deleted)
rsyslogd 1228 root 28w REG 253,17 4649024 6553603 /sec_syslog/2024-05-06/127.0.0.1.log (deleted)
rsyslogd 1228 root 29w REG 253,17 3681387 2883586 /sec_syslog/2024-05-07/127.0.0.1.log (deleted)
rsyslogd 1228 root 30w REG 253,17 119666961091 2883587 /sec_syslog/2024-05-07/10.71.59.14.log (deleted)
rsyslogd 1228 root 31w REG 253,17 5869568 6946818 /sec_syslog/2024-05-08/127.0.0.1.log (deleted)
rsyslogd 1228 root 32w REG 253,17 50329927680 6946819 /sec_syslog/2024-05-08/10.71.59.14.log (deleted)
重启后,也就好了:
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vdb1 197G 78M 187G 1% /sec_syslog
二次发现类似问题:还得靠lsof -n / |grep deleted ,操作如下:
删了大文件,但是这个文件没有释放,ls -n / |grep deleted 反查到
lsof -n / |grep deleted
baserepor 3827 root 2w REG 253,1 0 2492090 /tmp/xuoasefasd.err (deleted)
tshark 47796 root 5r REG 253,1 14106508896 2492042 /tmp/wireshark_pcapng_eth0_20201015103006_KWTDIm (deleted)
dumpcap 47802 root 4u REG 253,1 14106508896 2492042 /tmp/wireshark_pcapng_eth0_20201015103006_KWTDIm (deleted)
查命令历史:
root_shell_cmd [xiangdong 10.4.12.52] [/tmp] 1056 [2020-10-15 11:52:14] cd wireshark_pcapng_eth0_20201015103006_KWTDIm
root_shell_cmd [xiangdong 10.4.12.52] [/tmp] 1057 [2020-10-15 11:52:17] tail -f wireshark_pcapng_eth0_20201015103006_KWTDIm
root_shell_cmd [xiangdong 10.4.12.52] [/tmp] 1058 [2020-10-15 11:52:21] ls
root_shell_cmd [xiangdong 10.4.12.52] [/tmp] 1059 [2020-10-15 11:52:24] rm -rf wireshark_pcapng_eth0_20201015103006_KWTDIm
再次确认删了,但是磁盘空间还在:
ls -lart /tmp/wireshark_pcapng_eth0_20201015103006_KWTDIm
ls: cannot access /tmp/wireshark_pcapng_eth0_20201015103006_KWTDIm: No such file or directory
由于是tahshrk,估计tcpdump是它调用起来的,应该也是,查看进程名:
cat /proc/47796/status |grep Name
Name: tshark
ps -eo"pid,ppid,gid,sid,tty,cmd" --forest|less
1238 1 0 1238 ? /usr/sbin/sshd -D
42045 1238 0 42045 ? \_ sshd: xiangdong [priv]
42047 42045 1040 42045 ? | \_ sshd: xiangdong@pts/0,pts/1,pts/2,pts/3
47537 42047 1040 47537 pts/1 | \_ -bash
47585 47537 1040 47537 pts/1 | | \_ sudo su -
47586 47585 0 47537 pts/1 | | \_ su -
47587 47586 0 47537 pts/1 | | \_ -bash
47628 47587 0 47537 pts/1 | | \_ sudo su -
47629 47628 0 47537 pts/1 | | \_ su -
47630 47629 0 47537 pts/1 | | \_ -bash
47796 47630 0 47537 pts/1 | | \_ tshark -n -t a -R http.request -T fields -e frame.time -e ip.src -e http.host -e http.request.method -e http.request.uri
47802 47796 0 47537 pts/1 | | \_ /sbin/dumpcap -n -i eth0 -Z none
果然:
root 47796 47630 2 10:30 pts/1 00:04:51 | | \_ tshark -n -t a -R http.request -T fields -e frame.time -e ip.src -e http.host -e http.request.method -e http.request.uri
root 47802 47796 0 10:30 pts/1 00:00:36 | | \_ /sbin/dumpcap -n -i eth0 -Z none
杀了它就好了,磁盘就释放了:
df -h
/dev/vda1 40G 37G 583M 99% /
变为:
pkill tshark
df -h
/dev/vda1 40G 24G 14G 64% /
告诉我们要记得退出tshark,别让它后台运行,删文件前用 lsof wireshark_pcapng_eth0_20201015103006_KWTDIm 看这个tshak进程还在不在。
来自:https://www.cnblogs.com/zhangrongfei/p/12463466.html
经过lsof直接看文件谁打开了:#lsof /var/log/messages
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 1994 root 6w REG 253,0 39892 101327940 /var/log/messages
背景:机器长时间运行往往磁盘空间满了,但是删除了还是占用很大空间和没删除几乎一样,怎么办?
运维监控系统发来通知,报告一台服务器空间满了,登陆服务器查看,根分区确实满了,这里先说一下服务器的一些删除策略,由于 linux 没有回收站功能,所以线上服务器上所有要删除的文件都会先移到系统 / tmp 目录下,然后定期清除 / tmp 目录下的数据。这个策略本身没有什么问题,但是通过检查发现这台服务器的系统分区中并没有单独划分 / tmp 分区,这样 / tmp 下的数据其实占用根分区的空间,既然找到了问题,那么删除 / tmp 目录下一些占用空间较大的数据文件即可。
发现真出现了,一个队列进程把磁盘写满后,即使杀死PHP队列进程和对应的大文件后df -h的/ 100%占满,经lsof |grep "Remote.log"发现是Filebeat:
实践解决如下,确定杀光了:
ps aux |grep Daemon |awk '{print $2}' |xargs kill -9
kill 10379: No such process
空间还是占用100%,用 lsof查看,这个命令还可以用来看端口对应的程序,如:
/usr/sbin/lsof -i tcp:5902
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Xvnc 24560 root 9u IPv4 763173 0t0 TCP *:5902 (LISTEN)
Xvnc 24560 root 10u IPv6 763174 0t0 TCP *:5902 (LISTEN)
lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 41167 root 18u IPv4 249906712 0t0 TCP *:http (LISTEN)
lsof |grep "Remote.log" 发现是filebeat :
重启一下Filebeat下吧:
/etc/init.d/filebeat restart
Stopping filebeat:
Config OK
Stopping filebeat: [ OK ]
2018/03/22 08:29:07.965771 config.go:86: INFO Additional configs loaded from: /etc/filebeat/conf.d/sec.yml
Config OK [ OK ]
再看这个文件还在,是新生成的,但是空间就变正常了。AddTime:2018-03-22
=============================================================================
# du -sh /tmp/* | sort -nr |head -3
通过命令发现在 / tmp 目录下有个 66G 大小的文件 access_log,这个文件应该是 apache 产生的访问日志文件,从日志大小来看,应该是很久没有清理的 apache 日志文件了,基本判定是这个文件导致的根空间爆满,在确认此文件可以删除后,执行如下删除命令,
# rm /tmp/access_Iog
# df -h
从输出来看,根分区空间仍然没有释放,这是怎么回事
一般来说不会出现删除文件后空间不释放的情况,但是也存在例外,比如文件进程锁定,或者有进程一直在向这个文件写数据,要理解这个问题,就需要知道 linux 下文件的存储机制和存储结构。
一个文件在文件系统中存放分为两个部分:数据部分和指针部分,指针位于文件系统的 meta-data 中,在将数据删除后,这个指针就从 meta-data 中清除了,而数据部分存储在磁盘中。在将数据对应的指针从 meta-data 中清除后,文件数据部分占用的空间就可以被覆盖并写入新的内容,之所以出现删除 access_log 文件后,空间还没有释放,就是因为 httpd 进程还在一直向这个文件写入内容,导致虽然删除了 access_Ilog 文件,但是由于进程锁定,文件对应的指针部分并未从 meta-data 中清除,而由于指针并未删除,系统内核就认为文件并未被删除,因此通过 df 命令查询空间并未释放。
问题排查:
既然有了解决思路,那么接下来看看是否有进程一直在向 access_log 文件中写入数据,这里需要用到 linux 下的 losf 命令,通过这个命令可以获取一个仍然被应用程序占用的已删除文件列表
# lsof | grep delete
从输出可以看出,/tmp/access_log 文件被进程 httpd 锁定,而 httpd 进程还一直向这个文件写入日志数据,最后一列的‘deleted’状态说明这个日志文件已经被删除,但是由于进程还在一直向此文件写入数据,因此空间并未释放。
解决问题:
到这里问题就基本排查清楚了,解决这一类问题的方法有很多,最简单的方法就是关闭或者重启 httpd 进程,当然重启操作系统也可以。不过这些并不是最好的办法,对待这种进程不停对文件写日志的操作,要释放文件占用的磁盘空间,最好的方法是在线清空这个文件,具体可以通过如下命令完成:
# echo “”>/tmp/access_log
通过这种方法,磁盘空间不但可以马上释放,也可以保障进城继续向文件写入日志,这种方法经常用于在线清理 apache /tomcat/nginx 等 web 服务产生的日志文件。
摘自:http://mp.weixin.qq.com/s/AJtnz_CE3pmhoaMHm6HNXA
错误解决办法:
1、ctrl + R ,输入 regedit
2、删除HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys下的@22:www.xxxx.club
原因:因为sublime 在windows的注册表中把192.168.14.105的值注册,不能重新注册。
错误解决办法:
1、ctrl + R ,输入 regedit
2、删除HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys下的 rsa2@22:192.168.14.105
From:https://www.cnblogs.com/ficohu/p/5593674.html
1、ctrl + R ,输入 regedit
2、删除HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys下的@22:www.xxxx.club
原因:因为sublime 在windows的注册表中把192.168.14.105的值注册,不能重新注册。
错误解决办法:
1、ctrl + R ,输入 regedit
2、删除HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys下的 rsa2@22:192.168.14.105
From:https://www.cnblogs.com/ficohu/p/5593674.html
[实践OK]由于crondtab定时任务导致大量sendmail进程的解决办法
Unix/LinuxC技术 jackxiang 2018-1-1 14:49
背景:Zabbix报警进程数太多报警Too many processes on servername ...。发现是Sendmail进程数太多。
ps -ef|grep sendmail|wc -l
569
-bash: /data/logs/.syshistory/bash_history.log: Read-only file system
/usr/sbin/postdrop -r
/usr/sbin/sendmail -FCronDaemon -i -odi -oem -oi -t -f root
[aio/21]
[kblockd/18]
[kondemand/0]
[kondemand/1]
[kondemand/N]
执行top的时候发现当前用户下面有很多sendmail的进程,如下图所示,发件人是crondaemon,怀疑是和定时任务有关,查看当前用户的定时任务发现有一个每分钟运行一次的定时任务,但是定时脚本是没有调用sendmail了,ps -ef | grep sendmail | wc -l 统计发现sendmail的进程数据基本上就是从服务器出故障到当前时间的分钟数。
然道是crontab每次执行都会调用sendmail发邮件吗?man 5 crontab查看帮助手册的时候发现这个一段话:
In addition to LOGNAME, HOME, and SHELL, cron(8) will look at MAILTO if it has any reason to send mail as a result of running commands in "this" crontab. If MAILTO is defined (and non-empty), mail is sent to the user so named. If MAILTO is defined but empty (MAILTO=""), no mail will be sent. Otherwise mail is sent to the owner of the crontab. This option is useful if you decide on /bin/mail instead of /usr/lib/sendmail as your mailer when you install cron -- /bin/mail doesnt do aliasing, and UUCP usually doesnt read its mail. If MAILFROM is defined (and non-empty), it will be used as the envelope sender address, otherwise, ‘‘root’’ will be used.
查看crontab的配置文件:
cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
可以看到MAILTO这一行不为空,如果不想让它发邮件的话可以按照手册上面说的把MAILTO这一行删掉或者改为MAILTO=""
From:http://blog.51cto.com/chenql/1878182
ps -ef|grep sendmail|wc -l
569
-bash: /data/logs/.syshistory/bash_history.log: Read-only file system
/usr/sbin/postdrop -r
/usr/sbin/sendmail -FCronDaemon -i -odi -oem -oi -t -f root
[aio/21]
[kblockd/18]
[kondemand/0]
[kondemand/1]
[kondemand/N]
执行top的时候发现当前用户下面有很多sendmail的进程,如下图所示,发件人是crondaemon,怀疑是和定时任务有关,查看当前用户的定时任务发现有一个每分钟运行一次的定时任务,但是定时脚本是没有调用sendmail了,ps -ef | grep sendmail | wc -l 统计发现sendmail的进程数据基本上就是从服务器出故障到当前时间的分钟数。
然道是crontab每次执行都会调用sendmail发邮件吗?man 5 crontab查看帮助手册的时候发现这个一段话:
In addition to LOGNAME, HOME, and SHELL, cron(8) will look at MAILTO if it has any reason to send mail as a result of running commands in "this" crontab. If MAILTO is defined (and non-empty), mail is sent to the user so named. If MAILTO is defined but empty (MAILTO=""), no mail will be sent. Otherwise mail is sent to the owner of the crontab. This option is useful if you decide on /bin/mail instead of /usr/lib/sendmail as your mailer when you install cron -- /bin/mail doesnt do aliasing, and UUCP usually doesnt read its mail. If MAILFROM is defined (and non-empty), it will be used as the envelope sender address, otherwise, ‘‘root’’ will be used.
查看crontab的配置文件:
cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
可以看到MAILTO这一行不为空,如果不想让它发邮件的话可以按照手册上面说的把MAILTO这一行删掉或者改为MAILTO=""
From:http://blog.51cto.com/chenql/1878182
[实践OK]Linux下的C++ STL Map指位器的迭代插入insert和查找find学习代码简单研究。
Unix/LinuxC技术 jackxiang 2017-12-31 18:32
/data/codesdev/testdemo/c++/map/stl_map.cpp
make stl_map
g++ stl_map.cpp -o stl_map
./stl_map
Bill, A senior heigh school student.
Join, A senior heigh school student.
Marry, A senior heigh school teacher.
/data/codesdev/testdemo/c++/map/stl_map_find.cpp
make stl_map_find
g++ stl_map_find.cpp -o stl_map_find
./stl_map_find
elements in mymap:
a => 50
c => 150
d => 200
b => 0
e => 0
修改那个位置判断为:
[codes=php]
it = mymap.find('d');
if (it != mymap.end()) #if (iter == g_map_fd_TcpNLMsg.end())假如到最扣一个依然没有找到的意思。一般就直接返回。
mymap.erase (it);
[/php]
这样的结果:
./stl_map_find
elements in mymap:
a => 50
c => 150
d => 0
b => 100
e => 0
来自:http://blog.csdn.net/derkampf/article/details/71155055
make stl_map
g++ stl_map.cpp -o stl_map
./stl_map
Bill, A senior heigh school student.
Join, A senior heigh school student.
Marry, A senior heigh school teacher.
/data/codesdev/testdemo/c++/map/stl_map_find.cpp
make stl_map_find
g++ stl_map_find.cpp -o stl_map_find
./stl_map_find
elements in mymap:
a => 50
c => 150
d => 200
b => 0
e => 0
修改那个位置判断为:
[codes=php]
it = mymap.find('d');
if (it != mymap.end()) #if (iter == g_map_fd_TcpNLMsg.end())假如到最扣一个依然没有找到的意思。一般就直接返回。
mymap.erase (it);
[/php]
这样的结果:
./stl_map_find
elements in mymap:
a => 50
c => 150
d => 0
b => 100
e => 0
来自:http://blog.csdn.net/derkampf/article/details/71155055
[实践OK]socket网络字节序以及大端序小端序,htons,ntohs,htonl,ntohl。
Unix/LinuxC技术 jackxiang 2017-12-29 21:35
常见的网络字节转换函数有:
htons():host to network short,将short类型数据从主机字节序转换为网络字节序。
ntohs():network to host short,将short类型数据从网络字节序转换为主机字节序。
htonl():host to network long,将long类型数据从主机字节序转换为网络字节序。
ntohl():network to host long,将long类型数据从网络字节序转换为主机字节序。
通常,以s为后缀的函数中,s代表2个字节short,因此用于端口号转换;以l为后缀的函数中,l代表4个字节的long,因此用于IP地址转换。
————————————————————————————————————————————————————————————————
cat hto.c
make hto
cc hto.c -o hto
#./hto
Host ordered port: 0x1234
Network ordered port: 0x3412
Host ordered address: 0x12345678
Network ordered address: 0x78563412
cat inetaddr.c
make inetaddr
cc inetaddr.c -o inetaddr
./inetaddr
Network ordered integer addr: 0x101a8c0
Network ordered integer addr: 0xb01a8c0
From:http://c.biancheng.net/cpp/html/3047.html
htons():host to network short,将short类型数据从主机字节序转换为网络字节序。
ntohs():network to host short,将short类型数据从网络字节序转换为主机字节序。
htonl():host to network long,将long类型数据从主机字节序转换为网络字节序。
ntohl():network to host long,将long类型数据从网络字节序转换为主机字节序。
通常,以s为后缀的函数中,s代表2个字节short,因此用于端口号转换;以l为后缀的函数中,l代表4个字节的long,因此用于IP地址转换。
————————————————————————————————————————————————————————————————
cat hto.c
make hto
cc hto.c -o hto
#./hto
Host ordered port: 0x1234
Network ordered port: 0x3412
Host ordered address: 0x12345678
Network ordered address: 0x78563412
cat inetaddr.c
make inetaddr
cc inetaddr.c -o inetaddr
./inetaddr
Network ordered integer addr: 0x101a8c0
Network ordered integer addr: 0xb01a8c0
From:http://c.biancheng.net/cpp/html/3047.html
高并发下PHP请求Redis异常处理
Cache与Store jackxiang 2017-12-23 23:36
https://weibo.com/2717930601/EkAZGDVAz?type=comment#_rnd1514043204039
http://blog.csdn.net/u013474436/article/details/53117463#0-tsina-1-14535-397232819ff9a47a7b7e80a40613cfe1
这个哥们描述了类似Mysql的长连接问题,在redis的长连接也有类似的问题,于是作了一个总结性的博文,值得在实践中注意。
http://blog.csdn.net/u013474436/article/details/53117463#0-tsina-1-14535-397232819ff9a47a7b7e80a40613cfe1
这个哥们描述了类似Mysql的长连接问题,在redis的长连接也有类似的问题,于是作了一个总结性的博文,值得在实践中注意。
[实践不理想]vim管理插件/插件管理器Vundle,vim下模仿sublime的多光标模式vim-multiple-cursors插件(Vundle的介绍及安装),模仿Sublime Text 的ctrl + p功能的ctrlp.vim 这个插件,模仿sublime text 的ctrl + shift + f 在工程中全局查找某字符ZenCoding.vim插件。
Unix/LinuxC技术 jackxiang 2017-12-23 18:05
vim查看插件:scriptnames
:scriptnames
安装插件的主法,且把要安装插件的配置文件和~/.vimrc文件区分开来了,链接如下:
https://blog.csdn.net/lu_embedded/article/details/76732965
Vim 自 7.0 开始支持 tab 页了,这就像很多数文本编辑器那样方便在多文件中切换,而不是只能使用 Buffer 暗地里来回切。默认时标签上显示 tab 序号加上当前打开的文件名。
Vim 中关于 Tab 的操作命令如下:
vim -p file1 file2 file3.... 在多标签中打开多个文件
:tabe[dit] 或 :tabnew 在当前标签后打开新的标签
:tabn[ext] 或 gt 切换到下一个 tab
:tabp[revious] 或 gT 切换到上一个 tab
:tabn [N] 切换到第 N 个 tab
:tabfir[st] 切换到第 1 个 tab
:tabl[ast] 切换到最后一个 tab
:tabs 列出所有的 tab
:tabc[lose] 关闭当前 tab, :q 命令也能关闭闭掉当前 tab
:tabo[nly] 关闭所有其它 tab
Vim杂记:Sublime的配色方案,出现在SecureCRT里的Vim一闪一闪的,失败,取消此配色:
http://www.cnblogs.com/fsjohnhuang/p/3911611.html
当Vim 打开了很多buffer 和tab 的时候,想要在不同窗口之间跳转,会比较麻烦,刚给SpaceVim 开发了一款简单的插件,就是在左侧列出所有tab:
https://github.com/SpaceVim/SpaceVim
git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
编辑你当前用户下的.vimrc
[xiangdong@localhost ~]$ vim ~/.vimrc
输入Vundle对应的配置
"======================== Vundle 配置 ============================
"安装方法用这个:git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
set nocompatible
filetype off
set rtp+=~/.vim/bundle/vundle/ "载入特定目录插件
call vundle#rc()
=============================================================
cat /home/xiangdong/.vimrc
在Vim中运行 :BundleInstall 等待安装完成。
:BundleInstall
ctrl + j/k # 进行上下选择
ctrl + x # 在当前窗口水平分屏打开文件
ctrl + v # 同上, 垂直分屏
ctrl + t # 在tab中打开
From:https://www.jianshu.com/p/c67e60abaa45
vim中的杀手级插件: vundle: http://zuyunfei.com/2013/04/12/killer-plugin-of-vim-vundle/
安装插件
打开一个vim, 运行:BundleInstall
或者在命令行运行 vim +BundleInstall +qall
安装完成后插件就能用了
####其它常用命令:
更新插件:BundleUpdate
清除不再使用的插件:BundleClean,
列出所有插件:BundleList
查找插件:BundleSearch
BundleUpdate报错:[Git] Unable to find remote helper for ‘https’
可能是在安裝 git 時因為缺少 libcurl 套件所導致
但是環境沒有 libcurl 時一樣可以安裝,只是會不能走 HTTPS 通道而已
若要修復這個問題,只需安裝 libcurl 後重新編譯安裝 git 就好:
# 系統為Ubuntu/Debain時,執行以下指令
apt-get install -y libcurl4-openssl-dev
# 系統為CentOS/RedHat/Fedora時,執行以下指令
yum install -y libcurl-devel.x86_64
From:https://caloskao.org/git-unable-to-find-remote-helper-for-https/
# 回到 git 原始碼目錄重新編譯並安裝 git
cd git-2.7.4
./configure
make prefix=/usr/local all
make prefix=/usr/local install
git --version
:BundleUpdate ,出现:Cannot make changes, 'modifiable' is off
:set modifiable
or
:set ma
来自vim 修改时提示 E21: Cannot make changes, 'Modifiable' is off:https://www.jianshu.com/p/2a511ebcdd9a
实践OK如下:
vi ./bundle/vundle/autoload/vundle/scripts.vim
166 set modifiable=on
报语法错:后又修改为恢复原来后,又莫名其妙的好了:
164 " make buffer modifiable
165 " to append without errors
166 set modifiable
结论:VIM有其和UI编辑器的局限,也有其灵活,Sublime有其存在价值,想学不一定能学好。多了快捷键还会冲突等得自己思考布局,是有 灵活性,而较为优秀的UI编辑器,早就精心设置好了,你只需要会开就成,所以,我只选择了vim-multiple-cursors,发现其它插件在vim-multiple-cursors的ctrl+n选中单词向前,Ctrl+p后通,Ctrl+x将选中变为不选中再会跳向下一个,选中完成后,可以使用大写i光标之前插入,大写c删除选中批量修改等vim编辑操作进入insert模式,开始修改文本.,好像出现了覆盖。不想深入,先用着,就这样吧:
步骤一二就行,简单常用批量替换插件即可。
通过Vim+少量插件配置一个高效简洁的IDE: https://www.cnblogs.com/javaminer/p/3842689.html
实践,先安装插件管理 再装vim-multiple-cursors这款插件:
一)vim插件管理器:Vundle的介绍及安装:
vim中的杀手级插件: http://zuyunfei.com/2013/04/12/killer-plugin-of-vim-vundle/ ##选中后, 可以进行增删替换a/c/x等,相关常用细节参考:http://foocoder.com/2014/04/09/mei-ri-vimcha-jian-vim-multiple-cursors/ ,移动光标到下一个单词的结尾,用命令”e“,里面的ctrl+e在SecureCRT里面并不能到行尾,用箭头键慢慢移动吧。
这个得装:
$git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
Initialized empty Git repository in /home/xiangdong/.vim/bundle/Vundle.vim/.git/
remote: Counting objects: 3132, done.
Receiving objects: 22% (690/3132), 124.01 KiB | 38 KiB/s
vim +BundleInstall + vundle
二)http://www.wklken.me/posts/2015/06/07/vim-plugin-multiplecursors.html
PluginInstall vim-multiple-cursors
:Plugin 'terryma/vim-multiple-cursors'
这个:
:PlugInstall multiple-cursors
从Github进行安装:
Plugin 'terryma/vim-multiple-cursors'
vim +BundleInstall + vim-multiple-cursors
vim +BundleInstall + ctrlp-funky #https://www.cnblogs.com/javaminer/p/3842689.html
vim +BundleInstall + taglist.vim
vim +BundleInstall + nerdtree
链接:http://zuyunfei.com/2013/04/12/killer-plugin-of-vim-vundle/
三)Bundle 'ctrlpvim/ctrlp.vim' #这个不是??
Bundle 'kien/ctrlp.vim'
github:https://github.com/kien/ctrlp.vim这是一个超赞的插件,如果使用过sublime-text2,那么肯定很熟悉ctrlp。它可以快速的帮助我们找到项目中的文件。
https://www.jianshu.com/p/SRsmZW
================================================
一)推荐vim-multiple-cursors这款插件,是模仿sublime的多光标模式,查找规则就是vim默认的单词匹配(就是你按*时查找单词的规则),像这样:大部分时候还是可以用来做rename refactor的。不过正如楼上所说,做项目还是老实用IDE吧 :)
From:https://zhuanlan.zhihu.com/p/23262156 ,在命令行模式下用批量替换啊。:%s/item/item /gc 加c是让你一个个确认。
插件地址:https://github.com/terryma/vim-multiple-cursors
二)ctrlp.vim 这个插件是模仿Sublime Text 的ctrl + p功能,在工程中快速定位某个文件。
三) 'ZenCoding.vim'. " 模仿sublime text 的ctrl + shift + f 在工程中全局查找某字符. " 需先安装ack (这个有Shell下的Linux命令Grep,用了插件快捷键没有了)
Ctrl-P在其他编辑器里已经是默认的全局搜索键了,vim 也有ctrlp(https://github.com/ctrlpvim/ctrlp.vim)插件,它可以搜索文件路径上的文件名,还有最近文件等各种快捷打开。看起来似乎挺好的,直到fzf.vim(https://vimawesome.com/plugin/fzf-vim)的出现。fzf的搜索速度更快,而且异步,不会在初始化搜索的时候卡死界面响应。
安装好fzf,然后加载 fzf.vim 插件,将ctrl-p 键位映射成 :Files<CR>,就可以体验到高速搜索,中间根本不用等界面响应,等关键词输入,结果就出来了。配合 ag 可以屏蔽掉.gitignore 内的文件。
搜索除了文件快速打开,还有全局行内搜索,之前vimgrep 一直是一个比较常用的命令,然而体验不太好,需要指定搜索内容和搜索范围,还要输一些命令,而且略慢。那么ag(https://github.com/ggreer/the_silver_searcher)一定是目前最好的选择。不管其他因素,进到项目主页,一看是 c 写的基本上就已经稳了。实际上它也确实是目前为止最快的行内搜索。使用的话,需要先安装命令行ag(https://github.com/ggreer/the_silver_searcher),然后安装ack.vim(https://vimawesome.com/plugin/ack-vim),注意不要用ag.vim 它已经不被支持了。
不过有个问题,fzf也内置了对 ack 的支持,只是比ack.vim 不如,所以需要重新映射一个 ack.vim 使用的键位,我个人用了 <Leader>f 意为 find。
:scriptnames
安装插件的主法,且把要安装插件的配置文件和~/.vimrc文件区分开来了,链接如下:
https://blog.csdn.net/lu_embedded/article/details/76732965
Vim 自 7.0 开始支持 tab 页了,这就像很多数文本编辑器那样方便在多文件中切换,而不是只能使用 Buffer 暗地里来回切。默认时标签上显示 tab 序号加上当前打开的文件名。
Vim 中关于 Tab 的操作命令如下:
vim -p file1 file2 file3.... 在多标签中打开多个文件
:tabe[dit] 或 :tabnew 在当前标签后打开新的标签
:tabn[ext] 或 gt 切换到下一个 tab
:tabp[revious] 或 gT 切换到上一个 tab
:tabn [N] 切换到第 N 个 tab
:tabfir[st] 切换到第 1 个 tab
:tabl[ast] 切换到最后一个 tab
:tabs 列出所有的 tab
:tabc[lose] 关闭当前 tab, :q 命令也能关闭闭掉当前 tab
:tabo[nly] 关闭所有其它 tab
Vim杂记:Sublime的配色方案,出现在SecureCRT里的Vim一闪一闪的,失败,取消此配色:
http://www.cnblogs.com/fsjohnhuang/p/3911611.html
当Vim 打开了很多buffer 和tab 的时候,想要在不同窗口之间跳转,会比较麻烦,刚给SpaceVim 开发了一款简单的插件,就是在左侧列出所有tab:
https://github.com/SpaceVim/SpaceVim
git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
编辑你当前用户下的.vimrc
[xiangdong@localhost ~]$ vim ~/.vimrc
输入Vundle对应的配置
"======================== Vundle 配置 ============================
"安装方法用这个:git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
set nocompatible
filetype off
set rtp+=~/.vim/bundle/vundle/ "载入特定目录插件
call vundle#rc()
=============================================================
cat /home/xiangdong/.vimrc
在Vim中运行 :BundleInstall 等待安装完成。
:BundleInstall
ctrl + j/k # 进行上下选择
ctrl + x # 在当前窗口水平分屏打开文件
ctrl + v # 同上, 垂直分屏
ctrl + t # 在tab中打开
From:https://www.jianshu.com/p/c67e60abaa45
vim中的杀手级插件: vundle: http://zuyunfei.com/2013/04/12/killer-plugin-of-vim-vundle/
安装插件
打开一个vim, 运行:BundleInstall
或者在命令行运行 vim +BundleInstall +qall
安装完成后插件就能用了
####其它常用命令:
更新插件:BundleUpdate
清除不再使用的插件:BundleClean,
列出所有插件:BundleList
查找插件:BundleSearch
BundleUpdate报错:[Git] Unable to find remote helper for ‘https’
可能是在安裝 git 時因為缺少 libcurl 套件所導致
但是環境沒有 libcurl 時一樣可以安裝,只是會不能走 HTTPS 通道而已
若要修復這個問題,只需安裝 libcurl 後重新編譯安裝 git 就好:
# 系統為Ubuntu/Debain時,執行以下指令
apt-get install -y libcurl4-openssl-dev
# 系統為CentOS/RedHat/Fedora時,執行以下指令
yum install -y libcurl-devel.x86_64
From:https://caloskao.org/git-unable-to-find-remote-helper-for-https/
# 回到 git 原始碼目錄重新編譯並安裝 git
cd git-2.7.4
./configure
make prefix=/usr/local all
make prefix=/usr/local install
git --version
:BundleUpdate ,出现:Cannot make changes, 'modifiable' is off
:set modifiable
or
:set ma
来自vim 修改时提示 E21: Cannot make changes, 'Modifiable' is off:https://www.jianshu.com/p/2a511ebcdd9a
实践OK如下:
vi ./bundle/vundle/autoload/vundle/scripts.vim
166 set modifiable=on
报语法错:后又修改为恢复原来后,又莫名其妙的好了:
164 " make buffer modifiable
165 " to append without errors
166 set modifiable
结论:VIM有其和UI编辑器的局限,也有其灵活,Sublime有其存在价值,想学不一定能学好。多了快捷键还会冲突等得自己思考布局,是有 灵活性,而较为优秀的UI编辑器,早就精心设置好了,你只需要会开就成,所以,我只选择了vim-multiple-cursors,发现其它插件在vim-multiple-cursors的ctrl+n选中单词向前,Ctrl+p后通,Ctrl+x将选中变为不选中再会跳向下一个,选中完成后,可以使用大写i光标之前插入,大写c删除选中批量修改等vim编辑操作进入insert模式,开始修改文本.,好像出现了覆盖。不想深入,先用着,就这样吧:
步骤一二就行,简单常用批量替换插件即可。
通过Vim+少量插件配置一个高效简洁的IDE: https://www.cnblogs.com/javaminer/p/3842689.html
实践,先安装插件管理 再装vim-multiple-cursors这款插件:
一)vim插件管理器:Vundle的介绍及安装:
vim中的杀手级插件: http://zuyunfei.com/2013/04/12/killer-plugin-of-vim-vundle/ ##选中后, 可以进行增删替换a/c/x等,相关常用细节参考:http://foocoder.com/2014/04/09/mei-ri-vimcha-jian-vim-multiple-cursors/ ,移动光标到下一个单词的结尾,用命令”e“,里面的ctrl+e在SecureCRT里面并不能到行尾,用箭头键慢慢移动吧。
这个得装:
$git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
Initialized empty Git repository in /home/xiangdong/.vim/bundle/Vundle.vim/.git/
remote: Counting objects: 3132, done.
Receiving objects: 22% (690/3132), 124.01 KiB | 38 KiB/s
vim +BundleInstall + vundle
二)http://www.wklken.me/posts/2015/06/07/vim-plugin-multiplecursors.html
PluginInstall vim-multiple-cursors
:Plugin 'terryma/vim-multiple-cursors'
这个:
:PlugInstall multiple-cursors
从Github进行安装:
Plugin 'terryma/vim-multiple-cursors'
vim +BundleInstall + vim-multiple-cursors
vim +BundleInstall + ctrlp-funky #https://www.cnblogs.com/javaminer/p/3842689.html
vim +BundleInstall + taglist.vim
vim +BundleInstall + nerdtree
链接:http://zuyunfei.com/2013/04/12/killer-plugin-of-vim-vundle/
三)Bundle 'ctrlpvim/ctrlp.vim' #这个不是??
Bundle 'kien/ctrlp.vim'
github:https://github.com/kien/ctrlp.vim这是一个超赞的插件,如果使用过sublime-text2,那么肯定很熟悉ctrlp。它可以快速的帮助我们找到项目中的文件。
https://www.jianshu.com/p/SRsmZW
================================================
一)推荐vim-multiple-cursors这款插件,是模仿sublime的多光标模式,查找规则就是vim默认的单词匹配(就是你按*时查找单词的规则),像这样:大部分时候还是可以用来做rename refactor的。不过正如楼上所说,做项目还是老实用IDE吧 :)
From:https://zhuanlan.zhihu.com/p/23262156 ,在命令行模式下用批量替换啊。:%s/item/item /gc 加c是让你一个个确认。
插件地址:https://github.com/terryma/vim-multiple-cursors
二)ctrlp.vim 这个插件是模仿Sublime Text 的ctrl + p功能,在工程中快速定位某个文件。
三) 'ZenCoding.vim'. " 模仿sublime text 的ctrl + shift + f 在工程中全局查找某字符. " 需先安装ack (这个有Shell下的Linux命令Grep,用了插件快捷键没有了)
Ctrl-P在其他编辑器里已经是默认的全局搜索键了,vim 也有ctrlp(https://github.com/ctrlpvim/ctrlp.vim)插件,它可以搜索文件路径上的文件名,还有最近文件等各种快捷打开。看起来似乎挺好的,直到fzf.vim(https://vimawesome.com/plugin/fzf-vim)的出现。fzf的搜索速度更快,而且异步,不会在初始化搜索的时候卡死界面响应。
安装好fzf,然后加载 fzf.vim 插件,将ctrl-p 键位映射成 :Files<CR>,就可以体验到高速搜索,中间根本不用等界面响应,等关键词输入,结果就出来了。配合 ag 可以屏蔽掉.gitignore 内的文件。
搜索除了文件快速打开,还有全局行内搜索,之前vimgrep 一直是一个比较常用的命令,然而体验不太好,需要指定搜索内容和搜索范围,还要输一些命令,而且略慢。那么ag(https://github.com/ggreer/the_silver_searcher)一定是目前最好的选择。不管其他因素,进到项目主页,一看是 c 写的基本上就已经稳了。实际上它也确实是目前为止最快的行内搜索。使用的话,需要先安装命令行ag(https://github.com/ggreer/the_silver_searcher),然后安装ack.vim(https://vimawesome.com/plugin/ack-vim),注意不要用ag.vim 它已经不被支持了。
不过有个问题,fzf也内置了对 ack 的支持,只是比ack.vim 不如,所以需要重新映射一个 ack.vim 使用的键位,我个人用了 <Leader>f 意为 find。
很少用Game Center,不过突然收到挑战我也是着实吓了一跳…本来是横幅,无意间发现下拉横幅后有快捷操作,忘了截屏了,然后截了通知中心的两张图…:
设置 —> 通知 —> 找到Game Center —>把允许通知关掉 —> 搞定~
设置 —> 通知 —> 找到Game Center —>把允许通知关掉 —> 搞定~
Mysql锁表模拟主从延迟,测试Zabbix主从同步延迟报警,以及Mysql的innodb也能先停复制的IO追平后,再停Mysql拷贝数据目录到别的Mysql能启动来的方法。
Cache与Store jackxiang 2017-12-21 11:50
追平后,再停Mysql拷贝数据目录到别的Mysql能启动来的方法参考,Mysql的innodb也能先停复制的IO追平后停Mysql拷贝数据目录到别的Mysql能启动来的方法:http://jackxiang.com/post/9702/
背景:有时候为了测试Zabbix主从延迟,还得锁从库的表(或是停从库),诱发主从同步延迟。
SHOW PROCESSLIST查看数据库中表的状态,是否被锁;
kill id //杀掉被锁的表
1. FLUSH TABLES WITH READ LOCK
这个命令是全局读锁定,执行了命令之后所有库所有表都被锁定只读。一般都是用在数据库联机备份,这个时候数据库的写操作将被阻塞,读操作顺利进行。2
解锁语句是:UNLOCK TABLES;
2.LOCK TABLES tbl_name [AS2alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}
这个命令是表级别的锁定,可以定制锁定某一个表。例如: lock 2tables test read; 不影响其他表的写操作。
解锁语句是:UNLOCK TABLES;
这两个语句在执行的时候都需要注意个特点,就是 隐式提交的语句。在退出 mysql2终端的时候都会隐式的执行 UNLOCK TABLES2。也就是说如果要让表锁定生效就必须一直保持对话。
原文:http://blog.csdn.net/shootyou/article/details/626735
Mysql的innodb也能先停复制的IO追平后停Mysql拷贝数据目录到别的Mysql能启动来的方法:
mysql> help stop slave
Name: 'STOP SLAVE'
Description:
Syntax:
STOP SLAVE [thread_types]
thread_types:
[thread_type [, thread_type] ... ]
thread_type: IO_THREAD | SQL_THREAD
背景:有时候为了测试Zabbix主从延迟,还得锁从库的表(或是停从库),诱发主从同步延迟。
SHOW PROCESSLIST查看数据库中表的状态,是否被锁;
kill id //杀掉被锁的表
1. FLUSH TABLES WITH READ LOCK
这个命令是全局读锁定,执行了命令之后所有库所有表都被锁定只读。一般都是用在数据库联机备份,这个时候数据库的写操作将被阻塞,读操作顺利进行。2
解锁语句是:UNLOCK TABLES;
2.LOCK TABLES tbl_name [AS2alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}
这个命令是表级别的锁定,可以定制锁定某一个表。例如: lock 2tables test read; 不影响其他表的写操作。
解锁语句是:UNLOCK TABLES;
这两个语句在执行的时候都需要注意个特点,就是 隐式提交的语句。在退出 mysql2终端的时候都会隐式的执行 UNLOCK TABLES2。也就是说如果要让表锁定生效就必须一直保持对话。
原文:http://blog.csdn.net/shootyou/article/details/626735
Mysql的innodb也能先停复制的IO追平后停Mysql拷贝数据目录到别的Mysql能启动来的方法:
mysql> help stop slave
Name: 'STOP SLAVE'
Description:
Syntax:
STOP SLAVE [thread_types]
thread_types:
[thread_type [, thread_type] ... ]
thread_type: IO_THREAD | SQL_THREAD
说明了服务器60秒向客户端发消息理论上客户端会回应和3次失败自动断开的一个基本原理,
这块还可在连接端的secureCRT里定时发空命令:Session Options->Terminal->Anti idle[V]Send protocol NO-OP Every [60] seconds。
阿里云服务器ssh经常一段时间就断掉解决办法:
#vim /etc/ssh/sshd_config
找到下面两行
#ClientAliveInterval 0
#ClientAliveCountMax 3
去掉注释,改成
ClientAliveInterval 30
ClientAliveCountMax 86400
这两行的意思分别是
1、客户端每隔多少秒向服务发送一个心跳数据
2、客户端多少秒没有相应,服务器自动断掉连接
重启sshd服务
#service sshd restart
From:https://www.cnblogs.com/hailspace/p/7289985.html
https://www.cnblogs.com/ygyy/p/12416052.html
这块还可在连接端的secureCRT里定时发空命令:Session Options->Terminal->Anti idle[V]Send protocol NO-OP Every [60] seconds。
阿里云服务器ssh经常一段时间就断掉解决办法:
#vim /etc/ssh/sshd_config
找到下面两行
#ClientAliveInterval 0
#ClientAliveCountMax 3
去掉注释,改成
ClientAliveInterval 30
ClientAliveCountMax 86400
这两行的意思分别是
1、客户端每隔多少秒向服务发送一个心跳数据
2、客户端多少秒没有相应,服务器自动断掉连接
重启sshd服务
#service sshd restart
From:https://www.cnblogs.com/hailspace/p/7289985.html
https://www.cnblogs.com/ygyy/p/12416052.html
[实践OK]Linux在CentOS下的nc/ncat命令端口侦听在不同CentOS6/7的rpm包里有变化,linux nc命令传输文件(远程复制文件,传文件。),linux快速复制大量小文件方法 nc+tar,nc + tar 传送整个文件目录的方法。how-can-i-keep-netcat-connection-open?
Unix/LinuxC技术 jackxiang 2017-12-18 11:55
特别注意:接收文件一端开端口 > ,发送文件一端 < ,IP 端口传文件,如果反了接收文件端开端口它接收完成后也还是不会自动退出,得自己估摸时间Ctrl+C:
新增nc 传目录小文件,传输目录演示(方法发送文件类似),这个和单个文件的 < 和 >有点相反的味道,
服务开端口的是接收文件方,相当于是传文件给服务器端!!!
整体:
nc -l 4444 |tar -zxvf - #接收端开10.73.234.25 4444端口
tar -zcvf - * | nc 10.73.234.251 4444 #传文件端连接端口机,中间横两边有空格!
步骤1,打开接收打包文件的端口(A机器先启动端口监听),如下:
nc -l 4444 |tar zxvf - #测试管道后面最后必须是 - ,不能是其余自定义的文件名
步骤2,发送所有文件或某个文件(B机器打包文件并连接A机器打开的端口):
管道前面表示把当前目录的所有文件打包为 - ,然后使用nc发送给B机器
tar zcvf - * | nc 10.71.182.250 4444 #传整个目录有点慢,最好是传压缩包
nc客户端:
ss -ntp|grep 4444
ESTAB 0 0 10.73.234.2**:35478 10.73.2*5.0:4444 users:(("nc",pid=54501,fd=3))
nc服务端:
ss -ntp|grep 4444
ESTAB 0 0 10.73.2*5.0:4444 10.73.234.2**:35478
iostat
来自:https://blog.csdn.net/mtj66/article/details/74959287
From: https://blog.csdn.net/mtj66/article/details/74959287
传完不退出参数:
how-can-i-keep-netcat-connection-open:
-k Forces nc to stay listening for another connection after its current
connection is completed. It is an error to use this option without the
-l option.
From: https://unix.stackexchange.com/questions/423407/how-can-i-keep-netcat-connection-open
如果两台计算机之间突然需要传送一个文件,而一时又没有什么好用的通讯工具,也来不及开服务器的时候,那么可以使用nc来传送文件。方法如下:
接收者: $ nc -l -p 12345 > save_filename ; 12345为1024-65535的任意端口号
发送者: $ nc <接收者ip> 12345 < send_file
一)目的主机监听
nc -l 监听端口[ 未使用端口] > 要接收的文件名 ,如:nc -l 4444 > cache.tar.gz
实践如下:
nc -l -p 4444 > memcached-3.0.3.tgz #@10.71.182.156
二)源主机发起请求
nc 目的主机ip 目的端口 < 要发送的文件
nc 192.168.0.85 4444 < /root/cache.tar.gz
实践如下:
nc 10.71.182.156 4444 < /home/test/rpmbuild/SOURCES/memcached-3.0.3.tgz
三)查看是否拷贝完毕:
ls /home/test/rpmbuild/SOURCES/memcached-3.0.3.tgz
/home/test/rpmbuild/SOURCES/memcached-3.0.3.tgz
nc + tar 传送整个文件目录:
接受方
nc -l 7788 |tar -zxvf -
发送方
tar -zcvf - dir |nc xx.xx.xx.xx 7788
dir 表示要传送的目录
来自:http://blog.csdn.net/u012333307/article/details/48562829
调试:
-v打印出错信息
接收方:nc -v -l -p 8210
发送方:nc -v dest_ip 8210
注意:使用nc传文件时,需注意操作次序,receiver先侦听端口,sender向receiver所在机器的该端口发送数据。否则发送失败。
来自:http://blog.csdn.net/slvher/article/details/9668749
=====>linux快速复制大量小文件方法 nc+tar(打包为一个压缩文件,再传到对端后解压到指定目录还回来了)<=====
1,在需要对大量小文件进行移动或复制时,用cp、mv都会显得很没有效率,可以用tar先压缩再解压缩的方式。
2,在网络环境中传输时,可以再结合nc命令,通过管道和tcp端口进行传输。
nc和tar可以用来快速的在两台机器之间传输文件和目录,比ftp和scp要来得简单的多。
由于nc是一个超轻量的命令,所以一般busybox都会集成它。当一个linux终端,比如linux pda,
通过usblan的方式连接到另一台linux主机的时候,这样的嵌入式终端上一般不会集成ftp server, ssh server
这样比较笨重的服务,这个时候, nc可能成为唯一的上传手段。
比如将机器A上的mytest目录上传到到机器 B(192.168.0.11)上,只需要:
在机器B上,用nc来监听一个端口,随便就好,只要不被占用;并且将收到的数据用tar展开。-l代表监听模式。
[root@server-B ~]#nc -l 4444 |tar -C /tmp/dir -zxf -
然后,在A上通过nc和 tar发送test目录。使用一致的4444的端口。
[root@server-A ~]#tar -zcvf - mytest|nc 192.168.0.11 4444
记得有一次,一台机器内核崩了,后来有位高手用liveCD把机器启动起来,就是用了类似的方法把数据导出来的。
看来基础的知识还是要多掌握一些啊,比如上次提到的links命令,有时候也很有用的
来自:http://logo32.iteye.com/blog/1564741
bash有单步调试功能吗?使用调试工具-bashdb。
Php/Js/Shell/Go jackxiang 2017-12-12 17:38
bashdb功能: 类似于GDB的调试工具,可以完成对shell脚本的断点设置,单步执行,变量观察等许多功能
【场合】: 脚本比较大时,通过-x参数调试时已不方便时.
【用法】:
bashdb -c script.sh
bashdb script.sh
bashdb --debugger script.sh
【说明】:该工具默认未安装,当前最新版本为:4.3-0.91,下载目录:http://bashdb.sourceforge.net/
1). 如果是ubuntu系统,直接用apt-get来安装
apt-get install bashdb
2). 如果是Readhat等版本,使用wget下载后,编译,安装,大致步骤如下:
wget https://sourceforge.net/projects/bashdb/files/bashdb/4.3-0.91/bashdb-4.3-0.91.tar.bz2
https://jaist.dl.sourceforge.net/project/bashdb/bashdb/4.4-0.94/bashdb-4.4-0.94.tar.gz
tar -xzvf bashdb-4.3-0.91.tar.bz2
cd bashdb-4.3-0.91
./configure
make && make install
【示例】:
【常用命令】
l 列出当前行以下的10行
q|quit 退出
h 帮助
/for/ 向后搜索字符串for
?for? 向前搜索字符串for
x 1+2 计算算术表达式的值
!! ls -laRt 执行shell命令
n 执行下一条语句
s 4 单步执行4次,如遇到函数则进入函数里面
b 4 在行号4处设置断点
del 4 删除行号为4的断点
c 10 一直执行到行号10处
R|run 重新执行当前调试脚本
finish 执行到程序最后
摘自:http://www.voidcn.com/article/p-sljifrsx-oo.html
【场合】: 脚本比较大时,通过-x参数调试时已不方便时.
【用法】:
bashdb -c script.sh
bashdb script.sh
bashdb --debugger script.sh
【说明】:该工具默认未安装,当前最新版本为:4.3-0.91,下载目录:http://bashdb.sourceforge.net/
1). 如果是ubuntu系统,直接用apt-get来安装
apt-get install bashdb
2). 如果是Readhat等版本,使用wget下载后,编译,安装,大致步骤如下:
wget https://sourceforge.net/projects/bashdb/files/bashdb/4.3-0.91/bashdb-4.3-0.91.tar.bz2
https://jaist.dl.sourceforge.net/project/bashdb/bashdb/4.4-0.94/bashdb-4.4-0.94.tar.gz
tar -xzvf bashdb-4.3-0.91.tar.bz2
cd bashdb-4.3-0.91
./configure
make && make install
【示例】:
【常用命令】
l 列出当前行以下的10行
q|quit 退出
h 帮助
/for/ 向后搜索字符串for
?for? 向前搜索字符串for
x 1+2 计算算术表达式的值
!! ls -laRt 执行shell命令
n 执行下一条语句
s 4 单步执行4次,如遇到函数则进入函数里面
b 4 在行号4处设置断点
del 4 删除行号为4的断点
c 10 一直执行到行号10处
R|run 重新执行当前调试脚本
finish 执行到程序最后
摘自:http://www.voidcn.com/article/p-sljifrsx-oo.html