[实践OK]centos7系统出现崩溃现象之“failed to start crash recovery kernel arming”.
Unix/LinuxC技术 jackxiang 2018-9-8 00:17
背景: 系统启动的grub.cfg 不一样,有的在/boot/efi/EFI/centos/grub.cfg ,有的在 /etc/grub2.cfg
某天挂载了一个新硬盘后,我的centos7系统第二天就出现了崩溃现象,报错如题“failed to start crash recovery kernel arming”.
意思大致为“内存崩溃捕获机制未能成功启动”,一搜才知道这是因为一个叫做kdump的服务无法启动导致的。
那么什么是kdump呢?
kdump 是一种先进的基于 kexec 的内核崩溃转储机制。当系统崩溃时,kdump 使用 kexec 启动到第二个内核。第二个内核通常叫做捕获内核,以很小内存启动以捕获转储镜像。第一个内核保留了内存的一部分给第二内核启动用。由于 kdump 利用 kexec 启动捕获内核,绕过了 BIOS,所以第一个内核的内存得以保留。这是内核崩溃转储的本质。详细的在:http://www.ibm.com/developerworks/cn/linux/l-cn-kdump1/index.html#major3
那接下来查找失败的原因:
看到一个博文中说与启动文件配置有关
查看/etc/grub.conf 文件,发现crashkernel=auto,
系统对crashkernel=auto的定义为:
如果系统的内存 <= 8 GB 对kdump kernel不会保留任何内容;也就是说,crashkernel=auto 等
于关掉了机器上的kdump功能;
如果系统的内存> 8 GB但是<= 16 GB,crashkernel=auto会保留256M,等同于crashkernel=256M;
如果系统内存> 16GB, crashkernel=auto会保留512M, 等同于crashkernel=512M
安装虚拟机时,给虚拟机设置的内存为1G,所以说系统关掉了kdump。
接下来就是改写配置,但是没能在系统中找到博文中所说的/etc/grub.conf这个文件,后来想到从Centos 7之后启动就采用grub2 了,所以vi /etc/grub2.cfg把其中的crashkernel=auto改成crashkernel=256M重启就成功了。
来自:https://www.jianshu.com/p/c9e741c24d2b
某天挂载了一个新硬盘后,我的centos7系统第二天就出现了崩溃现象,报错如题“failed to start crash recovery kernel arming”.
意思大致为“内存崩溃捕获机制未能成功启动”,一搜才知道这是因为一个叫做kdump的服务无法启动导致的。
那么什么是kdump呢?
kdump 是一种先进的基于 kexec 的内核崩溃转储机制。当系统崩溃时,kdump 使用 kexec 启动到第二个内核。第二个内核通常叫做捕获内核,以很小内存启动以捕获转储镜像。第一个内核保留了内存的一部分给第二内核启动用。由于 kdump 利用 kexec 启动捕获内核,绕过了 BIOS,所以第一个内核的内存得以保留。这是内核崩溃转储的本质。详细的在:http://www.ibm.com/developerworks/cn/linux/l-cn-kdump1/index.html#major3
那接下来查找失败的原因:
看到一个博文中说与启动文件配置有关
查看/etc/grub.conf 文件,发现crashkernel=auto,
系统对crashkernel=auto的定义为:
如果系统的内存 <= 8 GB 对kdump kernel不会保留任何内容;也就是说,crashkernel=auto 等
于关掉了机器上的kdump功能;
如果系统的内存> 8 GB但是<= 16 GB,crashkernel=auto会保留256M,等同于crashkernel=256M;
如果系统内存> 16GB, crashkernel=auto会保留512M, 等同于crashkernel=512M
安装虚拟机时,给虚拟机设置的内存为1G,所以说系统关掉了kdump。
接下来就是改写配置,但是没能在系统中找到博文中所说的/etc/grub.conf这个文件,后来想到从Centos 7之后启动就采用grub2 了,所以vi /etc/grub2.cfg把其中的crashkernel=auto改成crashkernel=256M重启就成功了。
来自:https://www.jianshu.com/p/c9e741c24d2b
在mac下开发的时候,经常会发现有些文件的属性后面,有个@符号
如上图所示。为什么呢?
在mac os 下 HFS+的文件系统里,有时候有些文件会附加上mac的专有属性,@属性就表示文件或文件夹是来自互联网下载
去掉方法:
xattr -l 文件名:查看attr
xattr -d 属性名:删除attr
来自:https://blog.csdn.net/mysteryhaohao/article/details/51900188
mac下发现不能用记事本打开文本文件,ls -la 发现格式后面有个@:
https://blog.csdn.net/wk3368/article/details/29597535
如上图所示。为什么呢?
在mac os 下 HFS+的文件系统里,有时候有些文件会附加上mac的专有属性,@属性就表示文件或文件夹是来自互联网下载
去掉方法:
xattr -l 文件名:查看attr
xattr -d 属性名:删除attr
来自:https://blog.csdn.net/mysteryhaohao/article/details/51900188
mac下发现不能用记事本打开文本文件,ls -la 发现格式后面有个@:
https://blog.csdn.net/wk3368/article/details/29597535
背景:想通过一些命令直接界面目录,想通过目录运行Linux一样的一些命令,MINGW32有这个功能,结合它,通过SourceTree的命令行模式再打开目录,本来SourceTree有一个浏览器,但它有时响应有些慢,出现灰色不能点,于是从命令行模式进去后再通过explorer . 打开目录更快捷一些,这个explorer的PATH路径要写好了,就不用输入一堆路径了(c:\Windows\winsxs\x86_microsoft-windows-explorer_31bf3856ad364e35_6.1.7601.17514_none_53bc10fdd7fe87ca),只有这样写到PATH变量之后才方便打开目录。2) 关于实践证明这个MINGW32的环境变量就是从Windows里继承过去的,修改了Windows系统的环境PATH后时还无法生效,要重启,我是等了会才生效的。
分别讲述:一、从运行输入命令打开(C语言写或BAT编写都成)。 二、从终端打开。 三、用快捷键打开。
法一)从Windows的运行里启动,前提是放入到PATH命令里:
(1)从运行到Windows的目录窗口:
像上面一样写入PATH,再写一个BAT脚本,chtdoc.bat 内容如下:
D:\Program Files\curl_wget_tail\chtdoc.bat
D:\Program Files\curl_wget_tail\cops.bat
使用时,直接Ctrl+R打开命令行窗口,然后输入:chtdoc,就能打开Windows的目录窗口,其它目录也一样的方式进行切换。
Windows下的CMD查看PATH变量值:
法二)从命令行里到Windows的窗口:
D:\Program Files\curl_wget_tail #里面放BAT文件和一些常用的软件,加快Windows下目录切换速度之用。
如:D:\Program Files\curl_wget_tail\cansible.bat
像:D:\script 可放一些SecureCRT的脚本软件,加快在Linux下的Cd目录速度。
Win7中打开cmd窗口的方式:在当前路径下,按住shift键,鼠标右键:
explorer.exe . #explorer . 也成。
在MINGW32下面的PATH如何设置?
设置MinGW环境变量
依次鼠标点击桌面“我的电脑”->选择左侧的“高级系统设置”,选择“高级”->“环境变量”,然后再Path里增加;C:\MinGW\bin声明。点击确定。
小提示:设置完成后,Windows似乎不会自动更新环境变量,除非重启机子,那么我们可以通过在下面的命令行中,胡乱设置一下PATH(比如SET PATH=C:\),然后退出命令行,那么系统环境变量就会被强制刷新。From: http://www.360doc.com/content/17/1203/15/8728596_709509894.shtml
在此处打开命令窗口后,将explorer的目录加入PATH,直接用exporer . ,就能到Windows的GUI界面,后面可以用一些编辑器打开文件。
为何要加入到环境变量里?
实践如下:
起于当explorer.exe没有设置PATH的一个使用情况如下:
sourcetree里的命令行模式MINGW32命令行Git Bash Here用explorer打开当前目录:
/c/Windows/winsxs/x86_microsoft-windows-explorer_31bf3856ad364e35_6.1.7601.17514_none_53bc10fdd7fe87ca/explorer.exe .
$ echo $PATH
/c/Users/admin/bin:/mingw32/bin:/usr/local/bin:/usr/bin:/bin:/mingw32/bin:/usr/bin:/c/Users/admin/bin:/d/Program Files/Microsoft Visual Studio/Common/Tools/WinNT:/d/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin:/d/Program Files/Microsoft Visual Studio/Common/Tools:/d/Program Files/Microsoft Visual Studio/VC98/bin:/c/Users/admin/AppData/Local/Programs/Fiddler:/d/Program Files/Nmap:/d/Program Files/Microsoft VS Code/bin:/d/Program Files/curl_wget_tail:/c/Windows/winsxs/x86_microsoft-windows-explorer_31bf3856ad364e35_6.1.7601.17514_none_53bc10fdd7fe87ca:/d/Program Files/Microsoft Visual Studio/Common/Tools/WinNT:/d/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin:/d/Program Files/Microsoft Visual Studio/Common/Tools:/d/Program Files/Microsoft Visual Studio/VC98/bin:/c/Users/admin/AppData/Local/Programs/Fiddler:/d/Program Files/Nmap:/d/Program Files/Microsoft VS Code/bin:/d/Program Files/curl_wget_tail:/c/Windows/winsxs/x86_microsoft-windows-explorer_31bf3856ad364e35_6.1.7601.17514_none_53bc10fdd7fe87ca:/usr/bin/vendor_perl:/usr/bin/core_perl
用程序调用操作系统的方法:
打开指定文目录、应用程序、文档:
1、打开C盘:
system("explorer.exe C:");
或者:
system("explorer.exe C:\\");
打开某个文件夹:E:\workspace\2014-12-07-VS2013
system("explorer.exe E:\\workspace\\2014-12-07-VS2013"); //打开指定文件夹
所以这里涉及到了转义字符: \" 代表了 "
打开包含空格路径的应用程序,要添加双引号的转义字符。命令如下:
//打开应用程序(路径中包含空格)
system("\"D:\\Sublime Text 3\\sublime_text.exe\"");
system("pause");
注:如果路径里没有空格,是不需要添加双引号的。
打开word文档:
//打开word文档
system("E:\\沉淀时光\\2014电子科技大学硕士招生简章.doc");
system("pause");
打开ie浏览器:
//打开浏览器
system("\"C:\\Program Files\\Internet Explorer\\iexplore.exe\" ");
打开指定网站:
//打开指定网站
system("\"C:\\Program Files\\Internet Explorer\\iexplore.exe\" www.google.com");
打开指定程序后关闭:
复制代码
#include<stdlib.h>
void main(){
//打开指定程序后,运行,回车,程序会关闭
system("start calc");
system("pause");
system("taskkill /f /im calc.exe"); //关闭进程
}
复制代码
注:第07行代码中,/f表示force, /im表示进程名称。
运行上面的程序后,计算器会打开,此时在弹出的cmd窗口中回车,计算器会关闭。注:少了第05行的单词start和第06行的pause,都不能实现这个功能。
法三)用快捷键打开:
在目录上点右键->属性->快捷方式->快捷键。这种打开像:E:\download (用:ctrl+alt+d),
和SecureCRT的目录:D:\Program Files\SecureCRT7.3\ssh_tmp\Sessions(用:ctrl+alt+s)。
不宜配置太多占用了也记不住,其它的用上面二里的BAT命令行就行,如:cwww,cops,cshell,cansible等。
参考:https://www.cnblogs.com/smyhvae/p/4148458.html
分别讲述:一、从运行输入命令打开(C语言写或BAT编写都成)。 二、从终端打开。 三、用快捷键打开。
法一)从Windows的运行里启动,前提是放入到PATH命令里:
(1)从运行到Windows的目录窗口:
像上面一样写入PATH,再写一个BAT脚本,chtdoc.bat 内容如下:
D:\Program Files\curl_wget_tail\chtdoc.bat
D:\Program Files\curl_wget_tail\cops.bat
使用时,直接Ctrl+R打开命令行窗口,然后输入:chtdoc,就能打开Windows的目录窗口,其它目录也一样的方式进行切换。
Windows下的CMD查看PATH变量值:
法二)从命令行里到Windows的窗口:
D:\Program Files\curl_wget_tail #里面放BAT文件和一些常用的软件,加快Windows下目录切换速度之用。
如:D:\Program Files\curl_wget_tail\cansible.bat
像:D:\script 可放一些SecureCRT的脚本软件,加快在Linux下的Cd目录速度。
Win7中打开cmd窗口的方式:在当前路径下,按住shift键,鼠标右键:
explorer.exe . #explorer . 也成。
在MINGW32下面的PATH如何设置?
设置MinGW环境变量
依次鼠标点击桌面“我的电脑”->选择左侧的“高级系统设置”,选择“高级”->“环境变量”,然后再Path里增加;C:\MinGW\bin声明。点击确定。
小提示:设置完成后,Windows似乎不会自动更新环境变量,除非重启机子,那么我们可以通过在下面的命令行中,胡乱设置一下PATH(比如SET PATH=C:\),然后退出命令行,那么系统环境变量就会被强制刷新。From: http://www.360doc.com/content/17/1203/15/8728596_709509894.shtml
在此处打开命令窗口后,将explorer的目录加入PATH,直接用exporer . ,就能到Windows的GUI界面,后面可以用一些编辑器打开文件。
为何要加入到环境变量里?
实践如下:
起于当explorer.exe没有设置PATH的一个使用情况如下:
sourcetree里的命令行模式MINGW32命令行Git Bash Here用explorer打开当前目录:
/c/Windows/winsxs/x86_microsoft-windows-explorer_31bf3856ad364e35_6.1.7601.17514_none_53bc10fdd7fe87ca/explorer.exe .
$ echo $PATH
/c/Users/admin/bin:/mingw32/bin:/usr/local/bin:/usr/bin:/bin:/mingw32/bin:/usr/bin:/c/Users/admin/bin:/d/Program Files/Microsoft Visual Studio/Common/Tools/WinNT:/d/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin:/d/Program Files/Microsoft Visual Studio/Common/Tools:/d/Program Files/Microsoft Visual Studio/VC98/bin:/c/Users/admin/AppData/Local/Programs/Fiddler:/d/Program Files/Nmap:/d/Program Files/Microsoft VS Code/bin:/d/Program Files/curl_wget_tail:/c/Windows/winsxs/x86_microsoft-windows-explorer_31bf3856ad364e35_6.1.7601.17514_none_53bc10fdd7fe87ca:/d/Program Files/Microsoft Visual Studio/Common/Tools/WinNT:/d/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin:/d/Program Files/Microsoft Visual Studio/Common/Tools:/d/Program Files/Microsoft Visual Studio/VC98/bin:/c/Users/admin/AppData/Local/Programs/Fiddler:/d/Program Files/Nmap:/d/Program Files/Microsoft VS Code/bin:/d/Program Files/curl_wget_tail:/c/Windows/winsxs/x86_microsoft-windows-explorer_31bf3856ad364e35_6.1.7601.17514_none_53bc10fdd7fe87ca:/usr/bin/vendor_perl:/usr/bin/core_perl
用程序调用操作系统的方法:
打开指定文目录、应用程序、文档:
1、打开C盘:
system("explorer.exe C:");
或者:
system("explorer.exe C:\\");
打开某个文件夹:E:\workspace\2014-12-07-VS2013
system("explorer.exe E:\\workspace\\2014-12-07-VS2013"); //打开指定文件夹
所以这里涉及到了转义字符: \" 代表了 "
打开包含空格路径的应用程序,要添加双引号的转义字符。命令如下:
//打开应用程序(路径中包含空格)
system("\"D:\\Sublime Text 3\\sublime_text.exe\"");
system("pause");
注:如果路径里没有空格,是不需要添加双引号的。
打开word文档:
//打开word文档
system("E:\\沉淀时光\\2014电子科技大学硕士招生简章.doc");
system("pause");
打开ie浏览器:
//打开浏览器
system("\"C:\\Program Files\\Internet Explorer\\iexplore.exe\" ");
打开指定网站:
//打开指定网站
system("\"C:\\Program Files\\Internet Explorer\\iexplore.exe\" www.google.com");
打开指定程序后关闭:
复制代码
#include<stdlib.h>
void main(){
//打开指定程序后,运行,回车,程序会关闭
system("start calc");
system("pause");
system("taskkill /f /im calc.exe"); //关闭进程
}
复制代码
注:第07行代码中,/f表示force, /im表示进程名称。
运行上面的程序后,计算器会打开,此时在弹出的cmd窗口中回车,计算器会关闭。注:少了第05行的单词start和第06行的pause,都不能实现这个功能。
法三)用快捷键打开:
在目录上点右键->属性->快捷方式->快捷键。这种打开像:E:\download (用:ctrl+alt+d),
和SecureCRT的目录:D:\Program Files\SecureCRT7.3\ssh_tmp\Sessions(用:ctrl+alt+s)。
不宜配置太多占用了也记不住,其它的用上面二里的BAT命令行就行,如:cwww,cops,cshell,cansible等。
参考:https://www.cnblogs.com/smyhvae/p/4148458.html
背景:之前是一个写Markdown的编辑器Typora在升级后无法启动,后来是vs code也升级后无法启动,于是觉得奇怪了,网上专门搜了一下visual studio code win7 无法启动,查到一篇文章,https://blog.csdn.net/caijunfen/article/details/80393298 ,按里面方法在Cmd下运行netsh winsock reset命令后, vs code 好了,连Typora也好了,后来才想起原来是公司非要装一个360杀毒软件,在我运行netsh winsock reset时,提示是否允许,我估计可能是它给关了所导致。
执行 netsh winsock reset 重置命令
------------------不熟悉操作系统的同学可以按下面的教程来----------------
window + R 键 调出运行,输入 cmd ,按回车。
命令提示符出来之后,点左上角的图标然后选择编辑->选择粘贴这个进去 netsh winsock reset
粘贴之后按回车
最后会提示成功地重置Winsock目录。一般不用重启,直接双击你的Visual Code,应该就可以打开了。
C:\Users\admin>netsh winsock reset
'netsh' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
成功地重置 Winsock 目录。
您必须重新启动计算机才能完成重置。
第二、查了一下,使用netsh winsock reset命令修复网络连接错误:
简单来说netsh winsock reset命令含义是重置 Winsock 目录。如果一台机器上的Winsock协议配置有问题的话将会导致网络连接等问题,就需要用netsh winsock reset命令来重置Winsock目录借以恢复网络。
winsock是windows网络编程接口,从Windows XP SP2开始内置了一条命令使用netsh能够对该接口进行修复。
netsh是一个能够通过命令行操作几乎所有网络相关设置的接口。比如设置IP,DNS,网卡,无线网络等。
netsh winsock reset:
先进入netsh
然后进入winsock这个部件
对winsock这个部件执行reset命令。
效果就是重置Winsock。对于一些WinSock被破坏导致的问题有奇效。在netsh出现之前,对于WinSock问题的修复是非常繁琐的。
来自:https://blog.csdn.net/yanjiaye520/article/details/5452304
执行 netsh winsock reset 重置命令
------------------不熟悉操作系统的同学可以按下面的教程来----------------
window + R 键 调出运行,输入 cmd ,按回车。
命令提示符出来之后,点左上角的图标然后选择编辑->选择粘贴这个进去 netsh winsock reset
粘贴之后按回车
最后会提示成功地重置Winsock目录。一般不用重启,直接双击你的Visual Code,应该就可以打开了。
C:\Users\admin>netsh winsock reset
'netsh' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
成功地重置 Winsock 目录。
您必须重新启动计算机才能完成重置。
第二、查了一下,使用netsh winsock reset命令修复网络连接错误:
简单来说netsh winsock reset命令含义是重置 Winsock 目录。如果一台机器上的Winsock协议配置有问题的话将会导致网络连接等问题,就需要用netsh winsock reset命令来重置Winsock目录借以恢复网络。
winsock是windows网络编程接口,从Windows XP SP2开始内置了一条命令使用netsh能够对该接口进行修复。
netsh是一个能够通过命令行操作几乎所有网络相关设置的接口。比如设置IP,DNS,网卡,无线网络等。
netsh winsock reset:
先进入netsh
然后进入winsock这个部件
对winsock这个部件执行reset命令。
效果就是重置Winsock。对于一些WinSock被破坏导致的问题有奇效。在netsh出现之前,对于WinSock问题的修复是非常繁琐的。
来自:https://blog.csdn.net/yanjiaye520/article/details/5452304
如何用tar压缩文件夹到指定目录,tar -zxvf /usr/local/jmeter.tar.gz -C /usr/local/ && rm -rf /usr/local/jmeter.tar.gz && chmod -R 755 /usr/local/jmeter
Unix/LinuxC技术 jackxiang 2018-8-21 14:17
如何用tar压缩文件夹到指定目录:
tar -zxvf /usr/local/jmeter.tar.gz -C /usr/local/ && rm -rf /usr/local/jmeter.tar.gz && chmod -R 755 /usr/local/jmeter
压缩:
tar -cvzf /test/tmp/abc.tar.gz /test/tcp/abc
实例,将魔方MYSIM数据库给压缩到根目录下:
tar -cvzf /mofang.08.21.tar.gz mofang/
解压
tar -cvxf abc.tar.gz -C /test/tmp
tar -zxvf /usr/local/jmeter.tar.gz -C /usr/local/ && rm -rf /usr/local/jmeter.tar.gz && chmod -R 755 /usr/local/jmeter
压缩:
tar -cvzf /test/tmp/abc.tar.gz /test/tcp/abc
实例,将魔方MYSIM数据库给压缩到根目录下:
tar -cvzf /mofang.08.21.tar.gz mofang/
解压
tar -cvxf abc.tar.gz -C /test/tmp
背景:Windows的C盘越来越大,60G都占满了,刚开始才10来G,逐步越占越多,而自带的那个工具根本无法看到占比,而这个Folder-size能把列表列出来并讲算出占比,方便分析哪个目录占得多,点进去后也有占比,方便分析删除目录之用,根据百分比,直接由60G干掉了16G剩余空间出来。
应用程序可以在几分钟内扫描整个硬盘驱动器,由于它优化扫描算法和树的大小详细列出。逐行扫描让你继续从扫描中断的问题。除了扫描整个硬盘驱动器文件夹大小也可以扫描一个文件夹,以节省时间。
DownLoad:http://enkj.jb51.net:81/201409/tools/FolderSize(jb51.net).rar
网站下载:http://www.mindgems.com/products/Folder-Size/Folder-Size-Tutorials.htm?postinstall=1
尽管windows也有查看的方法,但不直观,得一个一个的看,如下:
文件夹不像文件那样,不能在显示详细信息的时候显示出它的大小来,下面介绍两种查看方法,进行对比,看看哪个方法更快更方便~
https://jingyan.baidu.com/article/4853e1e5725b651909f726d2.html
下载:
应用程序可以在几分钟内扫描整个硬盘驱动器,由于它优化扫描算法和树的大小详细列出。逐行扫描让你继续从扫描中断的问题。除了扫描整个硬盘驱动器文件夹大小也可以扫描一个文件夹,以节省时间。
DownLoad:http://enkj.jb51.net:81/201409/tools/FolderSize(jb51.net).rar
网站下载:http://www.mindgems.com/products/Folder-Size/Folder-Size-Tutorials.htm?postinstall=1
尽管windows也有查看的方法,但不直观,得一个一个的看,如下:
文件夹不像文件那样,不能在显示详细信息的时候显示出它的大小来,下面介绍两种查看方法,进行对比,看看哪个方法更快更方便~
https://jingyan.baidu.com/article/4853e1e5725b651909f726d2.html
下载:
下载文件
F12打开开发者工具,选择Network,请求一个网站,就会显示请求的列表,在任何一列上右击,选择”Remote Address”,就能显示所有请求的IP地址:
在时间线下面,有一个Name Status Type 上面点右键,选上remote Addresss就显示出来了。
来自:https://blog.csdn.net/btlas/article/details/52383166
查看单个请求的IP地址,这个不如前面直接打开所有得了,如下:
请求一个网站,就会显示请求的列表,点击在右边就能看到IP地址
在时间线下面,有一个Name Status Type 上面点右键,选上remote Addresss就显示出来了。
来自:https://blog.csdn.net/btlas/article/details/52383166
查看单个请求的IP地址,这个不如前面直接打开所有得了,如下:
请求一个网站,就会显示请求的列表,点击在右边就能看到IP地址
[实践OK]ssh太慢,CentOS6.X下编译并升级安装OpenSSH7.4p1,一台CentOS6.X机器连接SSH太慢,重新编译最新的openssh后连接正常的编译过程。
Unix/LinuxC技术 jackxiang 2018-8-17 11:05
导语
Redhat企业级系统的6.7版自带SSH版本为OpenSSH_5.3p1, 基于审计和安全性需求,建议将其升级到最新的OpenSSH版本,当前官网最新版本为7.4p1. 本文档将详细介绍OpenSSH升级的完整步骤。需要说明的是,升级过程中虽然涉及zlib、openssl和openssh的卸载,但是并不会导致当前的ssh远程连接会话断开,因此是可以将整个升级过程写成自动化脚本以进行自动批量部署的。后面咱准备逐步过度到CentOS7了,新版在SSH底层上优化了TCP连接传输功能。在譬如拷贝时会用同一个TCP的FD,而旧版本的是没有这个功能的。再就是刚连接过了在超时设置范围内,再次发起连接时也会复用之前的一个Socket的FD句柄,提高连接效率。
编译安装OpenSSH7.4p1一共分二步,
第一步:安装编译需要的RPM包:
第二步:编译并安装到和原来一样的目录,如下步骤:
tar zxvf openssh-7.4p1.tar.gz
cd openssh-7.4p1
ll
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords --with-kerberos5=/usr/lib64/libkrb5.so
make && make install
cp -rf /usr/local/src/openssh-7.4p1/contrib/redhat/sshd.init /etc/init.d/sshd
cp -rf contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
chkconfig --add sshd
vim /etc/init.d/sshd
sed -i '/sbin/restorecon /etc/ssh/ssh_host_key.pub/s/^/#/' /etc/init.d/sshd
sed -i 's/#PermitRootLogin/PermitRootLogin/' /etc/ssh/sshd_config
vim /etc/ssh/sshd_config
ssh -V
service sshd restart
vim /etc/ssh/sshd_config
ll
vim /etc/ssh/sshd_config
ps -ef|grep ssh
service sshd start
history
附录:
反查一些OpenSSH需要的动态库,RPM包的安装路径辅助上面参数配置:
rpm -ql openssh-server-5.3p1-122.el6.x86_64
/etc/pam.d/ssh-keycat
/etc/pam.d/sshd
/etc/rc.d/init.d/sshd
/etc/ssh/sshd_config
/etc/sysconfig/sshd
/usr/libexec/openssh/sftp-server
/usr/libexec/openssh/ssh-keycat
/usr/sbin/.sshd.hmac
/usr/sbin/sshd
/usr/share/doc/openssh-server-5.3p1
/usr/share/doc/openssh-server-5.3p1/HOWTO.ssh-keycat
/usr/share/man/man5/moduli.5.gz
/usr/share/man/man5/sshd_config.5.gz
/usr/share/man/man8/sftp-server.8.gz
/usr/share/man/man8/sshd.8.gz
/var/empty/sshd
ldd /usr/sbin/sshd
linux-vdso.so.1 => (0x00007fffbc5ff000)
libpam.so.0 => /lib64/libpam.so.0 (0x00007f2d19bf3000)
libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f2d1980e000)
librt.so.1 => /lib64/librt.so.1 (0x00007f2d19605000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f2d19401000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f2d191fe000)
libz.so.1 => /lib64/libz.so.1 (0x00007f2d18fe7000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f2d18db0000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f2d18b96000)
libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007f2d18951000)
libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f2d1866a000)
libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007f2d1843e000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f2d18239000)
libc.so.6 => /lib64/libc.so.6 (0x00007f2d17ea5000)
libaudit.so.1 => /lib64/libaudit.so.1 (0x00007f2d17c89000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2d17a6b000)
/lib64/ld-linux-x86-64.so.2 (0x0000003c0e400000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007f2d177f4000)
libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007f2d175e9000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f2d173e5000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f2d171c6000)
rpm -qf /lib64/libpam.so.0 >> /tmp/jackRpmResult.txt
rpm -qf /usr/lib64/libcrypto.so.10 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/librt.so.1 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libdl.so.2 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libutil.so.1 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libz.so.1 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libcrypt.so.1 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libresolv.so.2 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libgssapi_krb5.so.2 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libkrb5.so.3 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libk5crypto.so.3 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libcom_err.so.2 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libc.so.6 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libaudit.so.1 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libpthread.so.0 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/ld-linux-x86-64.so.2 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libfreebl3.so >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libkrb5support.so.0 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libkeyutils.so.1 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libselinux.so.1 >> /tmp/jackRpmResult.txt
需要这些包:
rpm -qa|grep audit-libs-2.2-2
rpm -qa|grep glibc-2.12-1.192
rpm -qa|grep keyutils-libs-1.4-5
rpm -qa|grep krb5-libs-1.10.3-65
rpm -qa|grep libcom_err-1.41.12-23
rpm -qa|grep libselinux-2.0.94-7
rpm -qa|grep nss-softokn-freebl-3.14.3-9
rpm -qa|grep openssl-1.0.1e-57
rpm -qa|grep pam-1.1.1-24
rpm -qa|grep zlib-1.2.3-29
yum 安装软件包:
audit-libs-2.2-2 glibc-2.12-1.192 keyutils-libs-1.4-5 krb5-libs-1.10.3-65 libcom_err-1.41.12-23 libselinux-2.0.94-7 nss-softokn-freebl-3.14.3-9 openssl-1.0.1e-57 pam-1.1.1-24 zlib-1.2.3-29
去掉版本号直接安装:
yum install audit-libs glibc keyutils-libs krb5-libs libcom_err libselinux nss-softokn-freebl openssl pam zlib
参考编译来源:
(1)http://blog.chinaunix.net/uid-28266791-id-5759478.html
(2)https://www.cnblogs.com/xshrim/p/6472679.html
Redhat企业级系统的6.7版自带SSH版本为OpenSSH_5.3p1, 基于审计和安全性需求,建议将其升级到最新的OpenSSH版本,当前官网最新版本为7.4p1. 本文档将详细介绍OpenSSH升级的完整步骤。需要说明的是,升级过程中虽然涉及zlib、openssl和openssh的卸载,但是并不会导致当前的ssh远程连接会话断开,因此是可以将整个升级过程写成自动化脚本以进行自动批量部署的。后面咱准备逐步过度到CentOS7了,新版在SSH底层上优化了TCP连接传输功能。在譬如拷贝时会用同一个TCP的FD,而旧版本的是没有这个功能的。再就是刚连接过了在超时设置范围内,再次发起连接时也会复用之前的一个Socket的FD句柄,提高连接效率。
编译安装OpenSSH7.4p1一共分二步,
第一步:安装编译需要的RPM包:
第二步:编译并安装到和原来一样的目录,如下步骤:
tar zxvf openssh-7.4p1.tar.gz
cd openssh-7.4p1
ll
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords --with-kerberos5=/usr/lib64/libkrb5.so
make && make install
cp -rf /usr/local/src/openssh-7.4p1/contrib/redhat/sshd.init /etc/init.d/sshd
cp -rf contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
chkconfig --add sshd
vim /etc/init.d/sshd
sed -i '/sbin/restorecon /etc/ssh/ssh_host_key.pub/s/^/#/' /etc/init.d/sshd
sed -i 's/#PermitRootLogin/PermitRootLogin/' /etc/ssh/sshd_config
vim /etc/ssh/sshd_config
ssh -V
service sshd restart
vim /etc/ssh/sshd_config
ll
vim /etc/ssh/sshd_config
ps -ef|grep ssh
service sshd start
history
附录:
反查一些OpenSSH需要的动态库,RPM包的安装路径辅助上面参数配置:
rpm -ql openssh-server-5.3p1-122.el6.x86_64
/etc/pam.d/ssh-keycat
/etc/pam.d/sshd
/etc/rc.d/init.d/sshd
/etc/ssh/sshd_config
/etc/sysconfig/sshd
/usr/libexec/openssh/sftp-server
/usr/libexec/openssh/ssh-keycat
/usr/sbin/.sshd.hmac
/usr/sbin/sshd
/usr/share/doc/openssh-server-5.3p1
/usr/share/doc/openssh-server-5.3p1/HOWTO.ssh-keycat
/usr/share/man/man5/moduli.5.gz
/usr/share/man/man5/sshd_config.5.gz
/usr/share/man/man8/sftp-server.8.gz
/usr/share/man/man8/sshd.8.gz
/var/empty/sshd
ldd /usr/sbin/sshd
linux-vdso.so.1 => (0x00007fffbc5ff000)
libpam.so.0 => /lib64/libpam.so.0 (0x00007f2d19bf3000)
libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f2d1980e000)
librt.so.1 => /lib64/librt.so.1 (0x00007f2d19605000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f2d19401000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f2d191fe000)
libz.so.1 => /lib64/libz.so.1 (0x00007f2d18fe7000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f2d18db0000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f2d18b96000)
libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007f2d18951000)
libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f2d1866a000)
libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007f2d1843e000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f2d18239000)
libc.so.6 => /lib64/libc.so.6 (0x00007f2d17ea5000)
libaudit.so.1 => /lib64/libaudit.so.1 (0x00007f2d17c89000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2d17a6b000)
/lib64/ld-linux-x86-64.so.2 (0x0000003c0e400000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007f2d177f4000)
libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007f2d175e9000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f2d173e5000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f2d171c6000)
rpm -qf /lib64/libpam.so.0 >> /tmp/jackRpmResult.txt
rpm -qf /usr/lib64/libcrypto.so.10 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/librt.so.1 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libdl.so.2 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libutil.so.1 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libz.so.1 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libcrypt.so.1 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libresolv.so.2 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libgssapi_krb5.so.2 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libkrb5.so.3 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libk5crypto.so.3 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libcom_err.so.2 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libc.so.6 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libaudit.so.1 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libpthread.so.0 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/ld-linux-x86-64.so.2 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libfreebl3.so >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libkrb5support.so.0 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libkeyutils.so.1 >> /tmp/jackRpmResult.txt
rpm -qf /lib64/libselinux.so.1 >> /tmp/jackRpmResult.txt
需要这些包:
rpm -qa|grep audit-libs-2.2-2
rpm -qa|grep glibc-2.12-1.192
rpm -qa|grep keyutils-libs-1.4-5
rpm -qa|grep krb5-libs-1.10.3-65
rpm -qa|grep libcom_err-1.41.12-23
rpm -qa|grep libselinux-2.0.94-7
rpm -qa|grep nss-softokn-freebl-3.14.3-9
rpm -qa|grep openssl-1.0.1e-57
rpm -qa|grep pam-1.1.1-24
rpm -qa|grep zlib-1.2.3-29
yum 安装软件包:
audit-libs-2.2-2 glibc-2.12-1.192 keyutils-libs-1.4-5 krb5-libs-1.10.3-65 libcom_err-1.41.12-23 libselinux-2.0.94-7 nss-softokn-freebl-3.14.3-9 openssl-1.0.1e-57 pam-1.1.1-24 zlib-1.2.3-29
去掉版本号直接安装:
yum install audit-libs glibc keyutils-libs krb5-libs libcom_err libselinux nss-softokn-freebl openssl pam zlib
参考编译来源:
(1)http://blog.chinaunix.net/uid-28266791-id-5759478.html
(2)https://www.cnblogs.com/xshrim/p/6472679.html
[实践OK]grep 去除注释行和空行,实现过滤配置文件里面的注释和空行。
Unix/LinuxC技术 jackxiang 2018-8-16 17:34
cat php.ini |grep -v "^;"|grep -v ^$
grep -v ^# /etc/vsftpd/vsftpd.conf |grep -v ^$ >> /etc/vsftpd/vsftpd
来自:http://blog.51cto.com/mange888/806342
grep -v ^# /etc/vsftpd/vsftpd.conf |grep -v ^$ >> /etc/vsftpd/vsftpd
来自:http://blog.51cto.com/mange888/806342
一)VSCode的空格设置:
MAC : Code->首选项->设置->两列右侧的用户设置->贴上立即新建一个文件就生效:
来自:https://www.jianshu.com/p/e9ee1de056b2
二)Sublime的空格设置:
Sublime菜单里的preferences.sublime-setting-Default里面的"draw_white_space": "selection",复制到preferences.sublime-setting-user,然后改为"draw_white_space": "all",之后保存,就行了,别忘了有一个逗号.
来自:https://www.cnblogs.com/xiyuan2016/p/8268210.html
三)以及在MAC下Sublime如何跳到行首或行尾? 使用Command键或者fn键+左/右箭头的组合。
四)MAC下向后删的方法是:Fn+Delete键。
五)Vim里显示末尾空格、换行和Tab设置:
显示 TAB 键
文件中有 TAB 键的时候,你是看不见的。要把它显示出来:
:set list TAB
显示为 ^I,$显示在每行的结尾,表示换行,Vim 可以用高亮显示空格和TAB。
如下,上面WhitespaceEOL做了去掉行尾巴的$和把Tab换成>-:
jack^Idjfkdf$
xiang^Idklf$
^I$
$
^I^I$
可视化列出vim的tab和所有不可见字符
在使用vim作为python的编辑器的时候,如果没有处理好空格和tab的关系,或者2者混用的时候,很容易出现缩进导致的错误,怎么避免这种情况的发生呢?
最好在vim的配置文件中将tab直接使用四个空格,这个时候你按下一个tab的时候,实际上插入了4个空格。
set expandtab
set tabstop=4
那么如果你的代码中有很多的tab和空格的混用,并且tab没有设置,那么就有大麻烦了,想修复这些错误,我们又不知道那些有问题,因为看不见,怎么办,使用
/\t
就可以可视化列出所有的tab了
还有一种方法,其实这种方法是列出不可见字符,比如回车换行字符,tab之类
你可以使用
:set list
查看,如果想取消,使用
:set list!
或者
:set nolist
还可以自定义这些不可见字符显示符号:
:set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<
例如使用感叹号显示换行:
:set listchars=eol:!
设置完后,再用
:set list
你会发现结束符,tab,前缀,扩展,换行符均显示出来了。
如果只想查看tab的话,那么设置
:set listchars=tab:--
然后使用
:set list
这时候,你只能看到tab被显示出来,其他还是不可见的状态。
来自:http://www.itye.org/archives/2005
MAC : Code->首选项->设置->两列右侧的用户设置->贴上立即新建一个文件就生效:
来自:https://www.jianshu.com/p/e9ee1de056b2
二)Sublime的空格设置:
Sublime菜单里的preferences.sublime-setting-Default里面的"draw_white_space": "selection",复制到preferences.sublime-setting-user,然后改为"draw_white_space": "all",之后保存,就行了,别忘了有一个逗号.
来自:https://www.cnblogs.com/xiyuan2016/p/8268210.html
三)以及在MAC下Sublime如何跳到行首或行尾? 使用Command键或者fn键+左/右箭头的组合。
四)MAC下向后删的方法是:Fn+Delete键。
五)Vim里显示末尾空格、换行和Tab设置:
显示 TAB 键
文件中有 TAB 键的时候,你是看不见的。要把它显示出来:
:set list TAB
显示为 ^I,$显示在每行的结尾,表示换行,Vim 可以用高亮显示空格和TAB。
如下,上面WhitespaceEOL做了去掉行尾巴的$和把Tab换成>-:
jack^Idjfkdf$
xiang^Idklf$
^I$
$
^I^I$
可视化列出vim的tab和所有不可见字符
在使用vim作为python的编辑器的时候,如果没有处理好空格和tab的关系,或者2者混用的时候,很容易出现缩进导致的错误,怎么避免这种情况的发生呢?
最好在vim的配置文件中将tab直接使用四个空格,这个时候你按下一个tab的时候,实际上插入了4个空格。
set expandtab
set tabstop=4
那么如果你的代码中有很多的tab和空格的混用,并且tab没有设置,那么就有大麻烦了,想修复这些错误,我们又不知道那些有问题,因为看不见,怎么办,使用
/\t
就可以可视化列出所有的tab了
还有一种方法,其实这种方法是列出不可见字符,比如回车换行字符,tab之类
你可以使用
:set list
查看,如果想取消,使用
:set list!
或者
:set nolist
还可以自定义这些不可见字符显示符号:
:set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<
例如使用感叹号显示换行:
:set listchars=eol:!
设置完后,再用
:set list
你会发现结束符,tab,前缀,扩展,换行符均显示出来了。
如果只想查看tab的话,那么设置
:set listchars=tab:--
然后使用
:set list
这时候,你只能看到tab被显示出来,其他还是不可见的状态。
来自:http://www.itye.org/archives/2005
如何使用呢?
首先设置权限,要在小程序中访问外部的网页,需要先设置允许访问的业务网站的域名,登录小程序平台管理后台页面,进入“设置”->开发设置:
点击开始配置
使用web-view组件显示HTM页面
<web-view src="https://www.xxxxxxxxx.com/index.html" />
注意:<iframe>可以嵌套入到页面的任意部分,而小程序的这个<web-view>总是自动铺满整个页面,每个页面只能有一个<web-view>,它会覆盖其它的组件。
如果要在已经通过<web-view>嵌入小程序的网页中,跳转到小程序的其他页面,可以引入微信的一个jsssdk,使用它提供的方法来实现
<!-- html代码中引入JS SDK -->
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.0.js"></script>
<script>
// 跳转到小程序的一个页面
wx.miniProgram.navigateTo({url: '/path/to/page'})
</script>
来自:https://blog.csdn.net/null_bugs/article/details/79495237
首先设置权限,要在小程序中访问外部的网页,需要先设置允许访问的业务网站的域名,登录小程序平台管理后台页面,进入“设置”->开发设置:
点击开始配置
使用web-view组件显示HTM页面
<web-view src="https://www.xxxxxxxxx.com/index.html" />
注意:<iframe>可以嵌套入到页面的任意部分,而小程序的这个<web-view>总是自动铺满整个页面,每个页面只能有一个<web-view>,它会覆盖其它的组件。
如果要在已经通过<web-view>嵌入小程序的网页中,跳转到小程序的其他页面,可以引入微信的一个jsssdk,使用它提供的方法来实现
<!-- html代码中引入JS SDK -->
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.0.js"></script>
<script>
// 跳转到小程序的一个页面
wx.miniProgram.navigateTo({url: '/path/to/page'})
</script>
来自:https://blog.csdn.net/null_bugs/article/details/79495237
预览Markdown快捷键:先按Ctrl + K,然后放掉,紧接着再按 v,调出右侧实时预览框。
之前尝试过使用多个markdown编辑器,都可以用,但是总觉得使用起来不是很爽,要么功能限制需要开通会员才能导出pdf,要么界面丑爆了,要么程序很大有很多没用的功能。最近突然发现VS code也可以下markdown,而且用起来超级爽,悄悄的迷恋上了vs code。写好的文件如果想要导出pdf文件,需要安装插件。
VS code安装插件的方法为:
1. 按下F1键,会在窗口顶端弹出命令的输入框,输入ext install
2. 在插件输入框输入markdown pdf,vs code会检索出markdown pdf插件。
3. 点击安装,重启即可。
在window系统下,通过上面的步骤就可以了,但是在Linux或者MAC下,安装后右键--convert to pdf会报错:ERROR: phantomjs binary does not exist: /Users/username/.vscode/extensions/yzane.markdown-pdf-0.1.7/node_modules/phantomjs-prebuilt/lib/phantom\bin\phantomjs.exe
这时候需要安装phantomjs才可以使用:
MAC:brew install phantomjs
Linux:sudo apt-apt install phantomjs
4.预览
“Markdown Preview Enhanced” 插件提供了预览功能。 在markdown文件右上角,有一个放大器的东西,点击选择即可。
5.生成PDF
Open the Markdown file
Press F1 or Ctrl+Shift+P
Type export and select below
markdown-pdf: Export (settings.json)
markdown-pdf: Export (pdf)
markdown-pdf: Export (html)
markdown-pdf: Export (png)
markdown-pdf: Export (jpeg)
markdown-pdf: Export (all: pdf, html, png, jpeg)
后来发现,在Markdown的文件编辑界面上右键有导出PDF的右键菜单,出现返回Busy啥的,有可能是那个之前的PDF还处于被打开状态。
来自:https://blog.csdn.net/billybai/article/details/78245827
Visual Studio Code + Markdown TOC 扩展:
在Markdown的文件编辑界面上右键有导出PDF的右键菜单。
单击 VS Code 的扩展图标,在搜索框搜索 Markdown TOC 并安装。
安装成功后,点击左侧扩展图标,可查看已安装的扩展。
菜单栏的文件 -> 打开,打开需要生成目录的 .md 格式的文件。
将光标移至需要插入目录的位置,右键单击出现菜单里面有 Markdown TOC: Insert/Update [^M T],目录即自动插入。(先按Ctrl + K,然后放掉,紧接着再按 v,调出右侧实时预览框。)
保存,关闭文件。
https://www.jianshu.com/p/4721ddd27027
之前尝试过使用多个markdown编辑器,都可以用,但是总觉得使用起来不是很爽,要么功能限制需要开通会员才能导出pdf,要么界面丑爆了,要么程序很大有很多没用的功能。最近突然发现VS code也可以下markdown,而且用起来超级爽,悄悄的迷恋上了vs code。写好的文件如果想要导出pdf文件,需要安装插件。
VS code安装插件的方法为:
1. 按下F1键,会在窗口顶端弹出命令的输入框,输入ext install
2. 在插件输入框输入markdown pdf,vs code会检索出markdown pdf插件。
3. 点击安装,重启即可。
在window系统下,通过上面的步骤就可以了,但是在Linux或者MAC下,安装后右键--convert to pdf会报错:ERROR: phantomjs binary does not exist: /Users/username/.vscode/extensions/yzane.markdown-pdf-0.1.7/node_modules/phantomjs-prebuilt/lib/phantom\bin\phantomjs.exe
这时候需要安装phantomjs才可以使用:
MAC:brew install phantomjs
Linux:sudo apt-apt install phantomjs
4.预览
“Markdown Preview Enhanced” 插件提供了预览功能。 在markdown文件右上角,有一个放大器的东西,点击选择即可。
5.生成PDF
Open the Markdown file
Press F1 or Ctrl+Shift+P
Type export and select below
markdown-pdf: Export (settings.json)
markdown-pdf: Export (pdf)
markdown-pdf: Export (html)
markdown-pdf: Export (png)
markdown-pdf: Export (jpeg)
markdown-pdf: Export (all: pdf, html, png, jpeg)
后来发现,在Markdown的文件编辑界面上右键有导出PDF的右键菜单,出现返回Busy啥的,有可能是那个之前的PDF还处于被打开状态。
来自:https://blog.csdn.net/billybai/article/details/78245827
Visual Studio Code + Markdown TOC 扩展:
在Markdown的文件编辑界面上右键有导出PDF的右键菜单。
单击 VS Code 的扩展图标,在搜索框搜索 Markdown TOC 并安装。
安装成功后,点击左侧扩展图标,可查看已安装的扩展。
菜单栏的文件 -> 打开,打开需要生成目录的 .md 格式的文件。
将光标移至需要插入目录的位置,右键单击出现菜单里面有 Markdown TOC: Insert/Update [^M T],目录即自动插入。(先按Ctrl + K,然后放掉,紧接着再按 v,调出右侧实时预览框。)
保存,关闭文件。
https://www.jianshu.com/p/4721ddd27027
背景:ssl on打开后直接访问Http,出现400错,想能通过Http访问到,得注释掉ssl on;即可。
Problem
When viewing any of my sites using port 80, the following error appeared on non-SSL websites:
Nginx 400 Bad Request The plain HTTP request was sent to HTTPS port
Original server block:
server {
listen 80;
listen 443;
ssl on;
ssl_certificate /path/to/cert/example.pem;
ssl_certificate_key /path/to/cert/example.private.key;
root /path/to/wordpress;
index index.php;
# Website URL
server_name blog.duaneleem.com;
# etc...
}
Solution
After reading NGINX documentation, the solution to this was to place the SSL directive on “listen.” Here’s a sample server block that demonstrates this:
server {
listen 80;
listen 443 ssl;
ssl_certificate /path/to/cert/example.pem;
ssl_certificate_key /path/to/cert/example.private.key;
root /path/to/wordpress;
index index.php;
# Website URL
server_name blog.duaneleem.com;
# etc...
}
By adding “ssl” to the listen directive to all my server blocks, everything started working again.
From: https://blog.duaneleem.com/nginx-ssl-on/
Problem
When viewing any of my sites using port 80, the following error appeared on non-SSL websites:
Nginx 400 Bad Request The plain HTTP request was sent to HTTPS port
Original server block:
server {
listen 80;
listen 443;
ssl on;
ssl_certificate /path/to/cert/example.pem;
ssl_certificate_key /path/to/cert/example.private.key;
root /path/to/wordpress;
index index.php;
# Website URL
server_name blog.duaneleem.com;
# etc...
}
Solution
After reading NGINX documentation, the solution to this was to place the SSL directive on “listen.” Here’s a sample server block that demonstrates this:
server {
listen 80;
listen 443 ssl;
ssl_certificate /path/to/cert/example.pem;
ssl_certificate_key /path/to/cert/example.private.key;
root /path/to/wordpress;
index index.php;
# Website URL
server_name blog.duaneleem.com;
# etc...
}
By adding “ssl” to the listen directive to all my server blocks, everything started working again.
From: https://blog.duaneleem.com/nginx-ssl-on/
Excel里有冻结首航,在Html的表格里也有首行,这块复制时从首行的最后一个位置到末尾选中,
法1)然后可贴入到Excel里面,行成多行,然后再粘贴出来也就行对齐了,可对一些列作修改。
法2)当然,也可放到Dreamweaver里,对没有用的列进行选中后按Delete键删除后,再在Live里,也就是模拟浏览器显示里贴回Excel里(直接对编辑模式进行粘贴还是会换行!),再粘贴回编辑器里。
否则,直接粘贴网页里面的表格,其一行一行的显示到文本编辑器里不是一行一行的,而是很多行,格式一定会出现错乱。
法2这个直接粘贴进Excel里有样式,而从Dreamweaver里粘贴进去无样式,还能去列,而Excel想选两列再粘贴两列到文本编辑器里,是不行的,会粘贴所有的。
但是可以把Exel里的多余的列删除掉,再粘贴也就Ok。总之,得过Excel一下,否则表格里的一行到了文本编辑器后就会出现换行。
法1)然后可贴入到Excel里面,行成多行,然后再粘贴出来也就行对齐了,可对一些列作修改。
法2)当然,也可放到Dreamweaver里,对没有用的列进行选中后按Delete键删除后,再在Live里,也就是模拟浏览器显示里贴回Excel里(直接对编辑模式进行粘贴还是会换行!),再粘贴回编辑器里。
否则,直接粘贴网页里面的表格,其一行一行的显示到文本编辑器里不是一行一行的,而是很多行,格式一定会出现错乱。
法2这个直接粘贴进Excel里有样式,而从Dreamweaver里粘贴进去无样式,还能去列,而Excel想选两列再粘贴两列到文本编辑器里,是不行的,会粘贴所有的。
但是可以把Exel里的多余的列删除掉,再粘贴也就Ok。总之,得过Excel一下,否则表格里的一行到了文本编辑器后就会出现换行。
[实践OK]awk自定义函数求平方和实例。
Unix/LinuxC技术 jackxiang 2018-7-30 22:22
$cat pingfang.awk
$cat xy.txt
1 2
3 3
4 3
2 3
$./pingfang.awk xy.txt
sum = 5
sum = 18
sum = 25
sum = 13
这些文章{print 'sum =',SquareSum($1,$2)} 都是单引号,估计都没实践过吧?
参考:https://tieba.baidu.com/f?kz=4897365011&mo_device=1&ssid=0&from=844b&uid=0&pu=usm@0,sz@1320_2001,ta@iphone_1_11.4_3_605&bd_page_type=1&baiduid=F7F621D935F5435074FCC25A0863FC2F&tj=www_normal_5_0_10_title&referer=m.baidu.com?pn=0&
http://blog.sina.cn/dpool/blog/s/blog_4cab1a3701007ya9.html
$cat xy.txt
1 2
3 3
4 3
2 3
$./pingfang.awk xy.txt
sum = 5
sum = 18
sum = 25
sum = 13
这些文章{print 'sum =',SquareSum($1,$2)} 都是单引号,估计都没实践过吧?
参考:https://tieba.baidu.com/f?kz=4897365011&mo_device=1&ssid=0&from=844b&uid=0&pu=usm@0,sz@1320_2001,ta@iphone_1_11.4_3_605&bd_page_type=1&baiduid=F7F621D935F5435074FCC25A0863FC2F&tj=www_normal_5_0_10_title&referer=m.baidu.com?pn=0&
http://blog.sina.cn/dpool/blog/s/blog_4cab1a3701007ya9.html
[实践OK]awk实现视频分段播放分段后链接的拼凑函数split和for结合实践。
Php/Js/Shell/Go jackxiang 2018-7-30 20:05
对于写判断的语句,如for,需要放在花括号里头,{},否则会报错,这是AWK的语法:
cat sql.txt
http://adff.com 300,300,300
http://adff1.com 300,300,300
http://adff2.com 300,300,300
http://adff3.com 300,300,300
http://adff4.com 300,300,300,300,300
cat sql.txt |awk '{a=split($2,filearray,",")}{for (i=1;i<=a;i++) printf ("%s/v=%s\n",$1,i)}'
http://adff.com/v=1
http://adff.com/v=2
http://adff.com/v=3
http://adff1.com/v=1
http://adff1.com/v=2
http://adff1.com/v=3
http://adff2.com/v=1
http://adff2.com/v=2
http://adff2.com/v=3
http://adff3.com/v=1
http://adff3.com/v=2
http://adff3.com/v=3
http://adff4.com/v=1
http://adff4.com/v=2
http://adff4.com/v=3
http://adff4.com/v=4
http://adff4.com/v=5
之前加个end,发现只输出最后一行,不对。去了END就好了,end表示其后的语句在所有语句执行后才执行,做一些计算后的总结打印输出,BEGIN表示在所有语句执行前执行:
http://adff4.com/1
http://adff4.com/2
http://adff4.com/3
http://adff4.com/4
http://adff4.com/5
cat sql.txt
http://adff.com 300,300,300
http://adff1.com 300,300,300
http://adff2.com 300,300,300
http://adff3.com 300,300,300
http://adff4.com 300,300,300,300,300
cat sql.txt |awk '{a=split($2,filearray,",")}{for (i=1;i<=a;i++) printf ("%s/v=%s\n",$1,i)}'
http://adff.com/v=1
http://adff.com/v=2
http://adff.com/v=3
http://adff1.com/v=1
http://adff1.com/v=2
http://adff1.com/v=3
http://adff2.com/v=1
http://adff2.com/v=2
http://adff2.com/v=3
http://adff3.com/v=1
http://adff3.com/v=2
http://adff3.com/v=3
http://adff4.com/v=1
http://adff4.com/v=2
http://adff4.com/v=3
http://adff4.com/v=4
http://adff4.com/v=5
之前加个end,发现只输出最后一行,不对。去了END就好了,end表示其后的语句在所有语句执行后才执行,做一些计算后的总结打印输出,BEGIN表示在所有语句执行前执行:
http://adff4.com/1
http://adff4.com/2
http://adff4.com/3
http://adff4.com/4
http://adff4.com/5
[实践OK]注释斜杠或井号在粘贴到vim时,VIM里的格式会乱掉的解决办法
Unix/LinuxC技术 jackxiang 2018-7-30 14:30
实践成功如下:
vim中 输入 :set
:set
--- Options ---
comments=:# filetype=yaml pastetoggle=<F9> ttymouse=xterm2
cscopetag helplang=en ruler viminfo='20,"50
cscopeverbose history=50 syntax=yaml t_Sb=^[[4%dm
expandtab hlsearch ttyfast t_Sf=^[[3%dm
backspace=indent,eol,start
commentstring=# %s
cscopeprg=/usr/bin/cscope
fileencodings=ucs-bom,utf-8,latin1
formatoptions=croql
guicursor=n-v-c:block,o:hor50,i-ci:hor15,r-cr:hor30,sm:block,a:blinkon0
ormatoptions=croql
这个选项,希望在~/.vimrc中禁止,比如设置为
set formatoptions=tcpmM
但是vim不识别此行,报错.无法禁止这个选项....
经过百度搜索,发现解决方案.[比较恶心 开源软件的就是配置文件 不人性化]
在粘贴前先设置进入粘贴插入模式,即不会自动缩进和连续注释
set paste
然后再进入插入模式粘贴,啥注释的#号或双斜杠都不影响。AddTime:2018-07-30
在粘贴插入模式下代码是不会自动按格式缩进的,需要使用nopaste设置回来
set nopaste
也可以在.vimrc中设置切换的快捷键,比如设置F9,则可以在.vimrc中加入:
set pastetoggle=<F9>
这样直接在插入模式按F9就会在“-- 插入 --”模式和“-- 插入(粘贴) --”模式中切换
说的就是这个设置:
================================================================================
ecureCRT会将你原来的文本原封不动的按照字符串的样式发送给服务器。所以当你的服务器上的vim设置为autoindent的话,在i模式下,那么它会将secureCRT传输而来的这些字符串再进行一下缩进。若你拷贝的文本中已经有表示缩进的空格或者制表符的话,它们也会被当成字符串,而被缩进。
解决办法:
1. 在拷贝前输入:set paste (这样的话,vim就不会启动自动缩进,而只是纯拷贝粘贴)
2. 拷贝完成之后,输入:set nopaste (关闭paste)
来自:
https://blog.csdn.net/kwame211/article/details/77964106
https://blog.csdn.net/chenghai37/article/details/80698322
vim复制代码包含注释时格式会乱掉的解决办法:
每次复制代码时,如果代码里有 // 这样的注释就容易让格式乱掉,通过下面的设置就可以避免这种情况。
粘贴代码时取消自动缩进
VIM在粘贴代码时会自动缩进,把代码搞得一团糟糕,甚至可能因为某行的一个注释造成后面的代码全部被注释掉,我知道有同学这个时候会用vi去打开文件再粘贴上去(鄙人以前就是这样),其实需要先设置一下
set paste
然后再进入插入模式粘贴,代码就不会被自动缩进。可是敲代码的时候需要自动缩进,又得改回来:
set nopaste
最方便的方法就是在.vimrc中加一句:
set pastetoggle=<F9>
以后在插入模式下,只要按F9键就可以切换自动缩进。
来自:https://blog.csdn.net/tao_627/article/details/18764539
vim中 输入 :set
:set
--- Options ---
comments=:# filetype=yaml pastetoggle=<F9> ttymouse=xterm2
cscopetag helplang=en ruler viminfo='20,"50
cscopeverbose history=50 syntax=yaml t_Sb=^[[4%dm
expandtab hlsearch ttyfast t_Sf=^[[3%dm
backspace=indent,eol,start
commentstring=# %s
cscopeprg=/usr/bin/cscope
fileencodings=ucs-bom,utf-8,latin1
formatoptions=croql
guicursor=n-v-c:block,o:hor50,i-ci:hor15,r-cr:hor30,sm:block,a:blinkon0
ormatoptions=croql
这个选项,希望在~/.vimrc中禁止,比如设置为
set formatoptions=tcpmM
但是vim不识别此行,报错.无法禁止这个选项....
经过百度搜索,发现解决方案.[比较恶心 开源软件的就是配置文件 不人性化]
在粘贴前先设置进入粘贴插入模式,即不会自动缩进和连续注释
set paste
然后再进入插入模式粘贴,啥注释的#号或双斜杠都不影响。AddTime:2018-07-30
在粘贴插入模式下代码是不会自动按格式缩进的,需要使用nopaste设置回来
set nopaste
也可以在.vimrc中设置切换的快捷键,比如设置F9,则可以在.vimrc中加入:
set pastetoggle=<F9>
这样直接在插入模式按F9就会在“-- 插入 --”模式和“-- 插入(粘贴) --”模式中切换
说的就是这个设置:
================================================================================
ecureCRT会将你原来的文本原封不动的按照字符串的样式发送给服务器。所以当你的服务器上的vim设置为autoindent的话,在i模式下,那么它会将secureCRT传输而来的这些字符串再进行一下缩进。若你拷贝的文本中已经有表示缩进的空格或者制表符的话,它们也会被当成字符串,而被缩进。
解决办法:
1. 在拷贝前输入:set paste (这样的话,vim就不会启动自动缩进,而只是纯拷贝粘贴)
2. 拷贝完成之后,输入:set nopaste (关闭paste)
来自:
https://blog.csdn.net/kwame211/article/details/77964106
https://blog.csdn.net/chenghai37/article/details/80698322
vim复制代码包含注释时格式会乱掉的解决办法:
每次复制代码时,如果代码里有 // 这样的注释就容易让格式乱掉,通过下面的设置就可以避免这种情况。
粘贴代码时取消自动缩进
VIM在粘贴代码时会自动缩进,把代码搞得一团糟糕,甚至可能因为某行的一个注释造成后面的代码全部被注释掉,我知道有同学这个时候会用vi去打开文件再粘贴上去(鄙人以前就是这样),其实需要先设置一下
set paste
然后再进入插入模式粘贴,代码就不会被自动缩进。可是敲代码的时候需要自动缩进,又得改回来:
set nopaste
最方便的方法就是在.vimrc中加一句:
set pastetoggle=<F9>
以后在插入模式下,只要按F9键就可以切换自动缩进。
来自:https://blog.csdn.net/tao_627/article/details/18764539