[实践OK]kipmi0进程CPU占用率的问题,kipmi0进程单核CPU100%的解决办法。
Unix/LinuxC技术 jackxiang 2017-8-17 14:41
From:http://www.51niux.com/?id=118
背景: 一批老机器出现还没打开Nginx等负载就1了,一看是一个进程点用CPU几乎100%了,于是查了下网上,有这样一个说法。
kipmi0进程CPU占用率的问题
支持 IPMI 的服务器主板上运行 Linux,有的时候经常容易出现 top 命令列表中显示 kipmi0 进程的 CPU 占用接近 100%,禁用开机加载 IPMI 驱动才不会出现。
IPMI 驱动 CPU 占用说明
kipmi 导致的 CPU 使用增长是很常见的,这个硬件设备接口不是中断设备,所以驱动必须轮询设备的状态和消息。这个轮询显示成一个繁忙的CPU。
kipmi内核线程的优先级非常低(一般为 19),所以不会影响系统中的其他进程。甚至当轮询进入死循环(通常是它认为 BMC 有活跃事件需要它处理),它仍然会在任何进程需要CPU资源时放弃占用资源。
CPU通常视 kipmi0 内核线程为 IDLE 时间,kipmi0在没有其他任务运行时运行,并且是系统最低优先级的进程。
降低 CPU 占用的方法
可以通过以下方法使得 kipmi0 内核线程只使用 10% 的 CPU:
echo 100 > /sys/module/ipmi_si/parameters/kipmid_max_busy_us
如果想使此改动永久生效,那可以修改 ipmi_si 内核模块的加载参数,例如增加 /etc/modprobe.d/ipmi.conf 配置文件:
# Prevent kipmi0 from consuming 100% CPU
options ipmi_si kipmid_max_busy_us=100
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
182 root 39 19 0 0 0 R 100.0 0.0 55364:09 kipmi0
实践是临时修改:
echo 100 > /sys/module/ipmi_si/parameters/kipmid_max_busy_us
一会再看就会发现降下来了:
uptime
14:51:57 up 58 days, 22:50, 1 user, load average: 0.00, 0.00, 0.12
来自:https://wiki.zohead.com/%E6%8A%80%E6%9C%AF/Linux/kipmi0%E8%BF%9B%E7%A8%8BCPU%E5%8D%A0%E7%94%A8%E7%8E%87%E7%9A%84%E9%97%AE%E9%A2%98.md
http://blog.chinaunix.net/uid-29179844-id-5173247.html
背景:做同步有Rsyncd,有配置版本的sersync,使用过,这儿介绍了一个新的东西:lsyncd,值得尝试。
参考:http://www.datura.me/2017/09/22/lsyncd%E5%AE%9E%E7%8E%B0%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E5%90%8C%E6%AD%A5%E7%AE%80%E8%A6%81%E8%AF%B4%E6%98%8E/
Sync里面是定义同步参数,指定默认以直接模式direct运行。Lsyncd支持rsync、rsyncssh、direct三种模式。
default.rsync,
sync{
default.rsync, --default.rsyncssh,or default.direct,
source ="/usr/local/src/aa",
实践如下:
mkdir -p /usr/local/lsyncd-2.1.5/etc/
mkdir -p /usr/local/lsyncd-2.1.5/var/
touch /usr/local/lsyncd-2.1.5/var/lsyncd.log
chmod -R 777 /usr/local/lsyncd-2.1.5/var/lsyncd.log
chmod -R 777 /usr/local/lsyncd-2.1.5/var
tail -f /usr/local/lsyncd-2.1.5/var/lsyncd.log
Thu Oct 26 16:36:04 2017 Normal: recursive startup rsync: /backup/yum.qr.cntv.net/ -> /data/www/
Thu Oct 26 16:36:04 2017 Exec: /usr/local/rsync/bin/rsync [--delete] [--ignore-errors] [-gpzsoltD] [--bwlimit=2000] [-r] [/backup/yum.qr.cntv.net/] [/data/www/]
2.1 安装lsyncd
安装lsyncd极为简单,已经收录在ubuntu的官方镜像源里,直接通过apt-get install lsyncd就可以。
在Redhat系(我的环境是CentOS 6.2 x86_64 ),可以手动去下载 lsyncd-2.1.5-6.fc21.x86_64.rpm,但首先你得安装两个依赖yum install lua lua-devel。也可以通过在线安装,需要epel-release扩展包:
# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum install lsyncd
源码编译安装
从源码编译安装可以使用最新版的lsyncd程序,但必须要相应的依赖库文件和编译工具:yum install lua lua-devel asciidoc cmake。
从 googlecode lsyncd 上下载的lsyncd-2.1.5.tar.gz,直接./configure、make && make install就可以了。
从github上下载lsyncd-master.zip 的2.1.5版本使用的是 cmake 编译工具,无法./configure:
# uzip lsyncd-master.zip
# cd lsyncd-master
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lsyncd-2.1.5
# make && make install
我这个版本编译时有个小bug,如果按照INSTALL在build目录中make,会提示:
[100%] Generating doc/lsyncd.1
Updating the manpage
a2x: failed: source file not found: doc/lsyncd.1.txt
make[2]: *** [doc/lsyncd.1] Error 1
make[1]: *** [CMakeFiles/manpage.dir/all] Error 2
make: *** [all] Error 2
解决办法是要么直接在解压目录下cmake,不要mkdir build,要么在CMakeList.txt中搜索doc字符串,在前面加上${PROJECT_SOURCE_DIR}。
2.2 lsyncd.conf
下面都是在编译安装的情况下操作。
2.2.1 lsyncd同步配置
# cd /usr/local/lsyncd-2.1.5
# mkdir etc var
# vi etc/lsyncd.conf
settings {
logfile ="/usr/local/lsyncd-2.1.5/var/lsyncd.log",
statusFile ="/usr/local/lsyncd-2.1.5/var/lsyncd.status",
inotifyMode = "CloseWrite",
maxProcesses = 7,
-- nodaemon =true,
}
sync {
default.rsync,
source = "/tmp/src",
target = "/tmp/dest",
-- excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst",
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true
}
}
到这启动 lsycnd 就可以完成实时同步了,默认的许多参数可以满足绝大部分需求,非常简单。
2.2.2 lsyncd.conf配置选项说明
settings
里面是全局设置,--开头表示注释,下面是几个常用选项说明:
logfile 定义日志文件
stausFile 定义状态文件
nodaemon=true 表示不启用守护模式,默认
statusInterval 将lsyncd的状态写入上面的statusFile的间隔,默认10秒
inotifyMode 指定inotify监控的事件,默认是CloseWrite,还可以是Modify或CloseWrite or Modify
maxProcesses 同步进程的最大个数。假如同时有20个文件需要同步,而maxProcesses = 8,则最大能看到有8个rysnc进程
maxDelays 累计到多少所监控的事件激活一次同步,即使后面的delay延迟时间还未到
sync
里面是定义同步参数,可以继续使用maxDelays来重写settings的全局变量。一般第一个参数指定lsyncd以什么模式运行:rsync、rsyncssh、direct三种模式:
default.rsync :本地目录间同步,使用rsync,也可以达到使用ssh形式的远程rsync效果,或daemon方式连接远程rsyncd进程;
default.direct :本地目录间同步,使用cp、rm等命令完成差异文件备份;
default.rsyncssh :同步到远程主机目录,rsync的ssh模式,需要使用key来认证
source 同步的源目录,使用绝对路径。
target 定义目的地址.对应不同的模式有几种写法:
/tmp/dest :本地目录同步,可用于direct和rsync模式
172.29.88.223:/tmp/dest :同步到远程服务器目录,可用于rsync和rsyncssh模式,拼接的命令类似于/usr/bin/rsync -ltsd --delete --include-from=- --exclude=* SOURCE TARGET,剩下的就是rsync的内容了,比如指定username,免密码同步
172.29.88.223::module :同步到远程服务器目录,用于rsync模式
三种模式的示例会在后面给出。
init 这是一个优化选项,当init = false,只同步进程启动以后发生改动事件的文件,原有的目录即使有差异也不会同步。默认是true
delay 累计事件,等待rsync同步延时时间,默认15秒(最大累计到1000个不可合并的事件)。也就是15s内监控目录下发生的改动,会累积到一次rsync同步,避免过于频繁的同步。(可合并的意思是,15s内两次修改了同一文件,最后只同步最新的文件)
excludeFrom 排除选项,后面指定排除的列表文件,如excludeFrom = "/etc/lsyncd.exclude",如果是简单的排除,可以使用exclude = LIST。
这里的排除规则写法与原生rsync有点不同,更为简单:
监控路径里的任何部分匹配到一个文本,都会被排除,例如/bin/foo/bar可以匹配规则foo
如果规则以斜线/开头,则从头开始要匹配全部
如果规则以/结尾,则要匹配监控路径的末尾
?匹配任何字符,但不包括/
*匹配0或多个字符,但不包括/
**匹配0或多个字符,可以是/
delete 为了保持target与souce完全同步,Lsyncd默认会delete = true来允许同步删除。它除了false,还有startup、running值,请参考 Lsyncd 2.1.x ‖ Layer 4 Config ‖ Default Behavior。
rsync
(提示一下,delete和exclude本来都是rsync的选项,上面是配置在sync中的,我想这样做的原因是为了减少rsync的开销)
bwlimit 限速,单位kb/s,与rsync相同(这么重要的选项在文档里竟然没有标出)
compress 压缩传输默认为true。在带宽与cpu负载之间权衡,本地目录同步可以考虑把它设为false
perms 默认保留文件权限。
其它rsync的选项
其它还有rsyncssh模式独有的配置项,如host、targetdir、rsync_path、password_file,见后文示例。rsyncOps={"-avz","--delete"}这样的写法在2.1.*版本已经不支持。
lsyncd.conf可以有多个sync,各自的source,各自的target,各自的模式,互不影响。
2.3 启动lsyncd
使用命令加载配置文件,启动守护进程,自动同步目录操作。
lsyncd -log Exec /usr/local/lsyncd-2.1.5/etc/lsyncd.conf
摘自:https://segmentfault.com/a/1190000002737213
参考:http://www.datura.me/2017/09/22/lsyncd%E5%AE%9E%E7%8E%B0%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E5%90%8C%E6%AD%A5%E7%AE%80%E8%A6%81%E8%AF%B4%E6%98%8E/
Sync里面是定义同步参数,指定默认以直接模式direct运行。Lsyncd支持rsync、rsyncssh、direct三种模式。
default.rsync,
sync{
default.rsync, --default.rsyncssh,or default.direct,
source ="/usr/local/src/aa",
实践如下:
mkdir -p /usr/local/lsyncd-2.1.5/etc/
mkdir -p /usr/local/lsyncd-2.1.5/var/
touch /usr/local/lsyncd-2.1.5/var/lsyncd.log
chmod -R 777 /usr/local/lsyncd-2.1.5/var/lsyncd.log
chmod -R 777 /usr/local/lsyncd-2.1.5/var
tail -f /usr/local/lsyncd-2.1.5/var/lsyncd.log
Thu Oct 26 16:36:04 2017 Normal: recursive startup rsync: /backup/yum.qr.cntv.net/ -> /data/www/
Thu Oct 26 16:36:04 2017 Exec: /usr/local/rsync/bin/rsync [--delete] [--ignore-errors] [-gpzsoltD] [--bwlimit=2000] [-r] [/backup/yum.qr.cntv.net/] [/data/www/]
2.1 安装lsyncd
安装lsyncd极为简单,已经收录在ubuntu的官方镜像源里,直接通过apt-get install lsyncd就可以。
在Redhat系(我的环境是CentOS 6.2 x86_64 ),可以手动去下载 lsyncd-2.1.5-6.fc21.x86_64.rpm,但首先你得安装两个依赖yum install lua lua-devel。也可以通过在线安装,需要epel-release扩展包:
# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum install lsyncd
源码编译安装
从源码编译安装可以使用最新版的lsyncd程序,但必须要相应的依赖库文件和编译工具:yum install lua lua-devel asciidoc cmake。
从 googlecode lsyncd 上下载的lsyncd-2.1.5.tar.gz,直接./configure、make && make install就可以了。
从github上下载lsyncd-master.zip 的2.1.5版本使用的是 cmake 编译工具,无法./configure:
# uzip lsyncd-master.zip
# cd lsyncd-master
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lsyncd-2.1.5
# make && make install
我这个版本编译时有个小bug,如果按照INSTALL在build目录中make,会提示:
[100%] Generating doc/lsyncd.1
Updating the manpage
a2x: failed: source file not found: doc/lsyncd.1.txt
make[2]: *** [doc/lsyncd.1] Error 1
make[1]: *** [CMakeFiles/manpage.dir/all] Error 2
make: *** [all] Error 2
解决办法是要么直接在解压目录下cmake,不要mkdir build,要么在CMakeList.txt中搜索doc字符串,在前面加上${PROJECT_SOURCE_DIR}。
2.2 lsyncd.conf
下面都是在编译安装的情况下操作。
2.2.1 lsyncd同步配置
# cd /usr/local/lsyncd-2.1.5
# mkdir etc var
# vi etc/lsyncd.conf
settings {
logfile ="/usr/local/lsyncd-2.1.5/var/lsyncd.log",
statusFile ="/usr/local/lsyncd-2.1.5/var/lsyncd.status",
inotifyMode = "CloseWrite",
maxProcesses = 7,
-- nodaemon =true,
}
sync {
default.rsync,
source = "/tmp/src",
target = "/tmp/dest",
-- excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst",
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true
}
}
到这启动 lsycnd 就可以完成实时同步了,默认的许多参数可以满足绝大部分需求,非常简单。
2.2.2 lsyncd.conf配置选项说明
settings
里面是全局设置,--开头表示注释,下面是几个常用选项说明:
logfile 定义日志文件
stausFile 定义状态文件
nodaemon=true 表示不启用守护模式,默认
statusInterval 将lsyncd的状态写入上面的statusFile的间隔,默认10秒
inotifyMode 指定inotify监控的事件,默认是CloseWrite,还可以是Modify或CloseWrite or Modify
maxProcesses 同步进程的最大个数。假如同时有20个文件需要同步,而maxProcesses = 8,则最大能看到有8个rysnc进程
maxDelays 累计到多少所监控的事件激活一次同步,即使后面的delay延迟时间还未到
sync
里面是定义同步参数,可以继续使用maxDelays来重写settings的全局变量。一般第一个参数指定lsyncd以什么模式运行:rsync、rsyncssh、direct三种模式:
default.rsync :本地目录间同步,使用rsync,也可以达到使用ssh形式的远程rsync效果,或daemon方式连接远程rsyncd进程;
default.direct :本地目录间同步,使用cp、rm等命令完成差异文件备份;
default.rsyncssh :同步到远程主机目录,rsync的ssh模式,需要使用key来认证
source 同步的源目录,使用绝对路径。
target 定义目的地址.对应不同的模式有几种写法:
/tmp/dest :本地目录同步,可用于direct和rsync模式
172.29.88.223:/tmp/dest :同步到远程服务器目录,可用于rsync和rsyncssh模式,拼接的命令类似于/usr/bin/rsync -ltsd --delete --include-from=- --exclude=* SOURCE TARGET,剩下的就是rsync的内容了,比如指定username,免密码同步
172.29.88.223::module :同步到远程服务器目录,用于rsync模式
三种模式的示例会在后面给出。
init 这是一个优化选项,当init = false,只同步进程启动以后发生改动事件的文件,原有的目录即使有差异也不会同步。默认是true
delay 累计事件,等待rsync同步延时时间,默认15秒(最大累计到1000个不可合并的事件)。也就是15s内监控目录下发生的改动,会累积到一次rsync同步,避免过于频繁的同步。(可合并的意思是,15s内两次修改了同一文件,最后只同步最新的文件)
excludeFrom 排除选项,后面指定排除的列表文件,如excludeFrom = "/etc/lsyncd.exclude",如果是简单的排除,可以使用exclude = LIST。
这里的排除规则写法与原生rsync有点不同,更为简单:
监控路径里的任何部分匹配到一个文本,都会被排除,例如/bin/foo/bar可以匹配规则foo
如果规则以斜线/开头,则从头开始要匹配全部
如果规则以/结尾,则要匹配监控路径的末尾
?匹配任何字符,但不包括/
*匹配0或多个字符,但不包括/
**匹配0或多个字符,可以是/
delete 为了保持target与souce完全同步,Lsyncd默认会delete = true来允许同步删除。它除了false,还有startup、running值,请参考 Lsyncd 2.1.x ‖ Layer 4 Config ‖ Default Behavior。
rsync
(提示一下,delete和exclude本来都是rsync的选项,上面是配置在sync中的,我想这样做的原因是为了减少rsync的开销)
bwlimit 限速,单位kb/s,与rsync相同(这么重要的选项在文档里竟然没有标出)
compress 压缩传输默认为true。在带宽与cpu负载之间权衡,本地目录同步可以考虑把它设为false
perms 默认保留文件权限。
其它rsync的选项
其它还有rsyncssh模式独有的配置项,如host、targetdir、rsync_path、password_file,见后文示例。rsyncOps={"-avz","--delete"}这样的写法在2.1.*版本已经不支持。
lsyncd.conf可以有多个sync,各自的source,各自的target,各自的模式,互不影响。
2.3 启动lsyncd
使用命令加载配置文件,启动守护进程,自动同步目录操作。
lsyncd -log Exec /usr/local/lsyncd-2.1.5/etc/lsyncd.conf
摘自:https://segmentfault.com/a/1190000002737213
oh-my-zsh配置你的zsh提高shell逼格终极选择
Unix/LinuxC技术 jackxiang 2017-8-14 11:21
如何使用zsh
如果是linux 系统,首先你需要安装 zsh
sudo yum install zsh
或者
sudo apt-get install zsh
来自:http://yijiebuyi.com/blog/b9b5e1ebb719f22475c38c4819ab8151.html
如果是linux 系统,首先你需要安装 zsh
sudo yum install zsh
或者
sudo apt-get install zsh
来自:http://yijiebuyi.com/blog/b9b5e1ebb719f22475c38c4819ab8151.html
查询linux自动重新启动原因
Unix/LinuxC技术 jackxiang 2017-8-14 10:46
1、Linux 服务器因 CPU 温度过高自动重启
http://www.s2.cn/news.php?id=33
2、Linux服务器不明原因重启了,怎么查找原因
http://bbs.51cto.com/archiver/tid-861470.html
3、重启的信息可以通过
dmesg来看
系统的log一般都是记录在/var/log/messages里
命令:
cat /var/log/messages | grep 'reboot'
4、linux启动日志: /var/log/boot.log
实践如下:
[root@xiyou-vedio_encode_bj_sjs_10_71_11_22 ~]# last reboot
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 10:37 - 10:41 (00:03)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 09:57 - 10:41 (00:43)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 08:58 - 10:41 (01:43)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 08:52 - 10:41 (01:48)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 08:36 - 10:41 (02:04)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 08:07 - 10:41 (02:34)
[root@xiyou-vedio_encode_bj_sjs_10_71_11_22 ~]# cal
August 2017
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
linux启动日志: /var/log/boot.log
mount.nfs: rpc.statd is not running but is required for remote locking.
mount.nfs: Either use '-o nolock' to keep locks local, or start statd.
mount.nfs: an incorrect mount option was specified
来自:http://blog.sina.com.cn/s/blog_56d8ea900101cytr.html
http://www.s2.cn/news.php?id=33
2、Linux服务器不明原因重启了,怎么查找原因
http://bbs.51cto.com/archiver/tid-861470.html
3、重启的信息可以通过
dmesg来看
系统的log一般都是记录在/var/log/messages里
命令:
cat /var/log/messages | grep 'reboot'
4、linux启动日志: /var/log/boot.log
实践如下:
[root@xiyou-vedio_encode_bj_sjs_10_71_11_22 ~]# last reboot
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 10:37 - 10:41 (00:03)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 09:57 - 10:41 (00:43)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 08:58 - 10:41 (01:43)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 08:52 - 10:41 (01:48)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 08:36 - 10:41 (02:04)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 08:07 - 10:41 (02:34)
[root@xiyou-vedio_encode_bj_sjs_10_71_11_22 ~]# cal
August 2017
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
linux启动日志: /var/log/boot.log
mount.nfs: rpc.statd is not running but is required for remote locking.
mount.nfs: Either use '-o nolock' to keep locks local, or start statd.
mount.nfs: an incorrect mount option was specified
来自:http://blog.sina.com.cn/s/blog_56d8ea900101cytr.html
[实践OK]一个JavaScript函数把URL参数解析成Json对象
Unix/LinuxC技术 jackxiang 2017-8-13 19:39
问题:请编写一个JavaScript函数parseQueryString,它的用途是把URL参数解析为一个对象。
运行结果:
a c
eg:var obj=parseQueryString(url);
创建对象的三种形式:
一:
var Person=new Object();
Person.name="Sun";
Person.age=24;
二:
var Person=new Object();
Person["name"]="Sun";
Person["age"]=24;
三:
对象字面量表达式
var Person={
name: "Sun",
age: 24
}
PS:
1、在这个例子中,比较适合使用第二种形式,向obj中添加元素
2、split("&") , 如果url只有一个参数的时候,没有“&”的时候,也不会报错,只会返回array[0]
function parseQueryString(url) {
var obj = {};
var keyvalue = [];
var key = "",
value = "";
var paraString = url.substring(url.indexOf("?") + 1, url.length).split("&");
for (var i in paraString) {
keyvalue = paraString[i].split("=");
key = keyvalue[0];
value = keyvalue[1];
obj[key] = value;
}
return obj;
}
以下介绍了JS根据key值获取URL中的参数值及把URL的参数转换成json对象,js通过两种方式获取url传递参数,代码
示例一:
//把url的参数部分转化成json对象
parseQueryString: function(url) {
var reg_url = /^[^/?]+/ ? ([/w/W] + ) $ / ,
reg_para = /([^&=]+)=([/w/W]*?)(&|$|#)/g,
arr_url = reg_url.exec(url),
ret = {};
if (arr_url && arr_url[1]) {
var str_para = arr_url[1],
result;
while ((result = reg_para.exec(str_para)) != null) {
ret[result[1]] = result[2];
}
}
return ret;
}
// 通过key获取url中的参数值
getQueryString: function(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}
示例二:
js通过两种方法获取url传递参数:
js获取url传递参数方法一:
这里是一个获取URL带QUESTRING参数的JAVASCRIPT客户端解决方案,相当于asp的request.querystring,PHP的$_GET
函数:
function GetRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if (url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for (var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
}
}
return theRequest;
}
然后我们通过调用此函数获取对应参数值:
var Request = new Object();
Request = GetRequest();
var 参数1,参数2,参数3,参数N;
参数1 = Request[''参数1''];
参数2 = Request[''参数2''];
参数3 = Request[''参数3''];
参数N = Request[''参数N''];
以此获取url串中所带的同名参数
js获取url传递参数方法二 正则分析法:
function GetQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return (r[2]);
return null;
}
alert(GetQueryString("参数名1"));
alert(GetQueryString("参数名2"));
alert(GetQueryString("参数名3"));
其他参数获取介绍:
//设置或获取对象指定的文件名或路径。
alert(window.location.pathname);
//设置或获取整个 URL 为字符串。
alert(window.location.href);
//设置或获取与 URL 关联的端口号码。
alert(window.location.port);
//设置或获取 URL 的协议部分。
alert(window.location.protocol);
//设置或获取 href 属性中在井号“#”后面的分段。
alert(window.location.hash);
//设置或获取 location 或 URL 的 hostname 和 port 号码。
alert(window.location.host);
//设置或获取 href 属性中跟在问号后面的部分。
alert(window.location.search);
From:https://www.w3cschool.cn/json/1koy1piy.html
运行结果:
a c
eg:var obj=parseQueryString(url);
创建对象的三种形式:
一:
var Person=new Object();
Person.name="Sun";
Person.age=24;
二:
var Person=new Object();
Person["name"]="Sun";
Person["age"]=24;
三:
对象字面量表达式
var Person={
name: "Sun",
age: 24
}
PS:
1、在这个例子中,比较适合使用第二种形式,向obj中添加元素
2、split("&") , 如果url只有一个参数的时候,没有“&”的时候,也不会报错,只会返回array[0]
function parseQueryString(url) {
var obj = {};
var keyvalue = [];
var key = "",
value = "";
var paraString = url.substring(url.indexOf("?") + 1, url.length).split("&");
for (var i in paraString) {
keyvalue = paraString[i].split("=");
key = keyvalue[0];
value = keyvalue[1];
obj[key] = value;
}
return obj;
}
以下介绍了JS根据key值获取URL中的参数值及把URL的参数转换成json对象,js通过两种方式获取url传递参数,代码
示例一:
//把url的参数部分转化成json对象
parseQueryString: function(url) {
var reg_url = /^[^/?]+/ ? ([/w/W] + ) $ / ,
reg_para = /([^&=]+)=([/w/W]*?)(&|$|#)/g,
arr_url = reg_url.exec(url),
ret = {};
if (arr_url && arr_url[1]) {
var str_para = arr_url[1],
result;
while ((result = reg_para.exec(str_para)) != null) {
ret[result[1]] = result[2];
}
}
return ret;
}
// 通过key获取url中的参数值
getQueryString: function(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}
示例二:
js通过两种方法获取url传递参数:
js获取url传递参数方法一:
这里是一个获取URL带QUESTRING参数的JAVASCRIPT客户端解决方案,相当于asp的request.querystring,PHP的$_GET
函数:
function GetRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if (url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for (var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
}
}
return theRequest;
}
然后我们通过调用此函数获取对应参数值:
var Request = new Object();
Request = GetRequest();
var 参数1,参数2,参数3,参数N;
参数1 = Request[''参数1''];
参数2 = Request[''参数2''];
参数3 = Request[''参数3''];
参数N = Request[''参数N''];
以此获取url串中所带的同名参数
js获取url传递参数方法二 正则分析法:
function GetQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return (r[2]);
return null;
}
alert(GetQueryString("参数名1"));
alert(GetQueryString("参数名2"));
alert(GetQueryString("参数名3"));
其他参数获取介绍:
//设置或获取对象指定的文件名或路径。
alert(window.location.pathname);
//设置或获取整个 URL 为字符串。
alert(window.location.href);
//设置或获取与 URL 关联的端口号码。
alert(window.location.port);
//设置或获取 URL 的协议部分。
alert(window.location.protocol);
//设置或获取 href 属性中在井号“#”后面的分段。
alert(window.location.hash);
//设置或获取 location 或 URL 的 hostname 和 port 号码。
alert(window.location.host);
//设置或获取 href 属性中跟在问号后面的部分。
alert(window.location.search);
From:https://www.w3cschool.cn/json/1koy1piy.html
[实践OK]用c语言实现HUP信号重启进程的方法~
Unix/LinuxC技术 jackxiang 2017-8-11 20:30
背景:用Linux的信号Signal实现发信号给进程,是一种进程间通讯的办法,主要用来重新加载配置、重启服务、杀死进程、进程间通讯等。
下面就是一个通过向进程发送Signal信号以该进程退出,重新起了一新的子进程,用到了kill -HUP PID,主要是学习HUP信号的C语言编码方法。
gcc 编译:
gcc nohup.c -o b.out
运行:
./a.out
ps aux|grep b.out
root 4919 0.0 0.1 4296 1328 pts/6 S+ 20:22 0:00 ./b.out
kill -HUP 4919
#ps aux|grep b.out
root 4958 0.0 0.1 4296 1324 pts/6 S 20:23 0:00 ./b.out
From:http://www.jb51.net/article/37422.htm
下面就是一个通过向进程发送Signal信号以该进程退出,重新起了一新的子进程,用到了kill -HUP PID,主要是学习HUP信号的C语言编码方法。
gcc 编译:
gcc nohup.c -o b.out
运行:
./a.out
ps aux|grep b.out
root 4919 0.0 0.1 4296 1328 pts/6 S+ 20:22 0:00 ./b.out
kill -HUP 4919
#ps aux|grep b.out
root 4958 0.0 0.1 4296 1324 pts/6 S 20:23 0:00 ./b.out
From:http://www.jb51.net/article/37422.htm
用Win+R 打开运行界面,输入mmc:
点击在新窗口中浏览此图片
在打开的控制台界面,从菜单中选择“文件”-“添加或删除管理单元”,然后从“可用的管理单元”添加“远程桌面”到“所选的管理单元”中,点击“确定”:
点击在新窗口中浏览此图片
最后,右键点击“远程桌面”-“添加新连接”,输入需管理的客户端IP地址即可访问。
=======================================================================================
背景:10台Windows Server 2012上面装上盗版的Loadrunner,想假装很专业的做一下接口测试。要根据自己的32位还是64位下载安装后,那个控制面板里的打开和关闭Windows功能才有角色管理工具->远程桌面服务工具。
对于远程管理Windows 机器来说,远程连接可能是用得最频繁的。过去,我总是把远程连接保存为.rdp 文件,以方便双击后自动连接。如果有多台机器需要管理,可以放在某个目录中,但总觉得这样的方式很笨。直到今天,在客户现场,无意中发现MMC 中是可以加入“远程管理”功能的。回来找资料看了一下,觉得还不错,特适用于同时连接多台机器的情况。
一、界面
描述前,先给个使用界面看看吧:
点击在新窗口中浏览此图片
对于【附件】中的【远程桌面连接】(即mstsc.exe)来说,主要是管理更方便了,只需一个.msc 文件即能轻松打开管理窗口,并在多个连接窗口之间切换。屏幕分辨率可设定,但似乎没有提供全屏的功能。
二、安装及配置
该MMC 使用的远程桌面组件,实际上是服务器平台提供的功能,所以,在默认的桌面系统中是没有提供的,需要独立安装。以Windows 7为例,步骤有:
1、下载组件
从下面的连接中下载“Windows 7 远程服务器管理工具”:
点击:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=7d2f6ad7-656b-4313-a005-4e344e43997d#filelist
下载前,请留意页面中的说明,包括:
引用
a、仅可以安装在运行企业版、专业版或旗舰版 Windows 7 的计算机上;
b、安装管理工具包的计算机上 Administrators 组的成员;
c、根据运行版本不同,下载适用于x86或x86_64 平台的程;
d、下载后的包,后缀名为.msu,双击即可安装(若使用第三方工具下载,后缀名可能会被修改)。
2、远程桌面功能
安装完毕后,依次打开:“控制面板”-“程序和功能”-“打开或关闭Windows功能”-“远程服务器管理工具”-“角色管理工具”,勾选下面的“远程桌面服务工具”:
点击在新窗口中浏览此图片
3、在MMC中添加远程管理组件
用Win+R 打开运行界面,输入mmc:
点击在新窗口中浏览此图片
在打开的控制台界面,从菜单中选择“文件”-“添加或删除管理单元”,然后从“可用的管理单元”添加“远程桌面”到“所选的管理单元”中,点击“确定”:
点击在新窗口中浏览此图片
最后,右键点击“远程桌面”-“添加新连接”,输入需管理的客户端IP地址即可访问。
4、分辨率问题
创建连接后,右键点击该连接,选择“属性”,在“屏幕选项”中可设置分别率:
点击在新窗口中浏览此图片
建议使用“填充MMC 结果窗格”,确定后,通过工具栏上的图标,关闭多余的显示窗口:
点击在新窗口中浏览此图片
关闭MMC (保存为.msc 文件)。重新打开,即可满屏显示远程终端窗口。
摘自 :http://www.linuxfly.org/read.php?561
点击在新窗口中浏览此图片
在打开的控制台界面,从菜单中选择“文件”-“添加或删除管理单元”,然后从“可用的管理单元”添加“远程桌面”到“所选的管理单元”中,点击“确定”:
点击在新窗口中浏览此图片
最后,右键点击“远程桌面”-“添加新连接”,输入需管理的客户端IP地址即可访问。
=======================================================================================
背景:10台Windows Server 2012上面装上盗版的Loadrunner,想假装很专业的做一下接口测试。要根据自己的32位还是64位下载安装后,那个控制面板里的打开和关闭Windows功能才有角色管理工具->远程桌面服务工具。
对于远程管理Windows 机器来说,远程连接可能是用得最频繁的。过去,我总是把远程连接保存为.rdp 文件,以方便双击后自动连接。如果有多台机器需要管理,可以放在某个目录中,但总觉得这样的方式很笨。直到今天,在客户现场,无意中发现MMC 中是可以加入“远程管理”功能的。回来找资料看了一下,觉得还不错,特适用于同时连接多台机器的情况。
一、界面
描述前,先给个使用界面看看吧:
点击在新窗口中浏览此图片
对于【附件】中的【远程桌面连接】(即mstsc.exe)来说,主要是管理更方便了,只需一个.msc 文件即能轻松打开管理窗口,并在多个连接窗口之间切换。屏幕分辨率可设定,但似乎没有提供全屏的功能。
二、安装及配置
该MMC 使用的远程桌面组件,实际上是服务器平台提供的功能,所以,在默认的桌面系统中是没有提供的,需要独立安装。以Windows 7为例,步骤有:
1、下载组件
从下面的连接中下载“Windows 7 远程服务器管理工具”:
点击:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=7d2f6ad7-656b-4313-a005-4e344e43997d#filelist
下载前,请留意页面中的说明,包括:
引用
a、仅可以安装在运行企业版、专业版或旗舰版 Windows 7 的计算机上;
b、安装管理工具包的计算机上 Administrators 组的成员;
c、根据运行版本不同,下载适用于x86或x86_64 平台的程;
d、下载后的包,后缀名为.msu,双击即可安装(若使用第三方工具下载,后缀名可能会被修改)。
2、远程桌面功能
安装完毕后,依次打开:“控制面板”-“程序和功能”-“打开或关闭Windows功能”-“远程服务器管理工具”-“角色管理工具”,勾选下面的“远程桌面服务工具”:
点击在新窗口中浏览此图片
3、在MMC中添加远程管理组件
用Win+R 打开运行界面,输入mmc:
点击在新窗口中浏览此图片
在打开的控制台界面,从菜单中选择“文件”-“添加或删除管理单元”,然后从“可用的管理单元”添加“远程桌面”到“所选的管理单元”中,点击“确定”:
点击在新窗口中浏览此图片
最后,右键点击“远程桌面”-“添加新连接”,输入需管理的客户端IP地址即可访问。
4、分辨率问题
创建连接后,右键点击该连接,选择“属性”,在“屏幕选项”中可设置分别率:
点击在新窗口中浏览此图片
建议使用“填充MMC 结果窗格”,确定后,通过工具栏上的图标,关闭多余的显示窗口:
点击在新窗口中浏览此图片
关闭MMC (保存为.msc 文件)。重新打开,即可满屏显示远程终端窗口。
摘自 :http://www.linuxfly.org/read.php?561
I came across this maddening error, when I had a website I needed to archive. I spidered the website, had a local copy that looked good, and uploaded the website. But, now the website had “an error occurred while processing this directive” right where some important content existed (the sidebar).
As it turns out, the error is from SSI – server side includes. I had
<!--#comment-->
sprinkled liberally throughout the code. And yes, it was a wordpress blog I intended to archive. The wordpress theme had rendered the code after the SSI, so it would work fine while in wordpress, but would not upload correctly.
Solution:
change
<!--#comment-->
to
<!-- comment-->
Totally easy fix, once you know.
Hope that helps,
–Ben
来自:https://www.prestashop.com/forums/topic/367147-solved-an-error-occurred-while-processing-this-directive/
As it turns out, the error is from SSI – server side includes. I had
<!--#comment-->
sprinkled liberally throughout the code. And yes, it was a wordpress blog I intended to archive. The wordpress theme had rendered the code after the SSI, so it would work fine while in wordpress, but would not upload correctly.
Solution:
change
<!--#comment-->
to
<!-- comment-->
Totally easy fix, once you know.
Hope that helps,
–Ben
来自:https://www.prestashop.com/forums/topic/367147-solved-an-error-occurred-while-processing-this-directive/
[实践Ok]Linux下常用命令行,以及查下最后登录/最近登录系统的用户是谁的命令
Unix/LinuxC技术 jackxiang 2017-8-2 09:58
查下最后登录/最近登录系统的用户是谁的命令:last ,上次登录的历史信息。通过搜索:/var/log/wtmp,
last
root pts/8 111.199.59.117 Mon Jan 8 22:12 still logged in
nl file.txt #看行数
快捷打开Vim:Ctrl+x+e ,先设置:
export EDITOR=/usr/local/bin/vim
du -h --max-depth=1
3.7M ./.git
20K ./nianbaoc++
28K ./echoman
24K ./nodestudy
16K ./epoll_example_codes
15M .
expr 做加减法:
expr 1 + 1
2
look命令:
look car
Linux look命令Linux 命令大全Linux look命令用于查询单词。look指令用于英文单字的查询
look没有find功能强大,但他有一个功能是find所没有的,就是搜索英文单词我们知道系统自带的单词表是没有中文解释的,如果你安装的是中文操作系统。 我们就可以自制一个英文词汇表
http://www.it610.com/article/2766338.htm
look car
CAR
Car
car
Cara
Carabancel
...
look: /usr/share/dict/words: 没有那个文件或目录
ls /usr/share/dict/words
/usr/share/dict/words
32位还是64位操作系统?
getconf LONG_BIT
64
dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
4 4 92 0 0 0| 64k 33k| 0 0 |4075B 2071B| 258 308
1 1 98 0 0 0| 384k 0 | 48k 43k| 0 0 | 249 211
7 17 75 0 0 1| 0 248k|4854B 12k| 0 0 | 592 673
last
root pts/8 111.199.59.117 Mon Jan 8 22:12 still logged in
nl file.txt #看行数
快捷打开Vim:Ctrl+x+e ,先设置:
export EDITOR=/usr/local/bin/vim
du -h --max-depth=1
3.7M ./.git
20K ./nianbaoc++
28K ./echoman
24K ./nodestudy
16K ./epoll_example_codes
15M .
expr 做加减法:
expr 1 + 1
2
look命令:
look car
Linux look命令Linux 命令大全Linux look命令用于查询单词。look指令用于英文单字的查询
look没有find功能强大,但他有一个功能是find所没有的,就是搜索英文单词我们知道系统自带的单词表是没有中文解释的,如果你安装的是中文操作系统。 我们就可以自制一个英文词汇表
http://www.it610.com/article/2766338.htm
look car
CAR
Car
car
Cara
Carabancel
...
look: /usr/share/dict/words: 没有那个文件或目录
ls /usr/share/dict/words
/usr/share/dict/words
32位还是64位操作系统?
getconf LONG_BIT
64
dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
4 4 92 0 0 0| 64k 33k| 0 0 |4075B 2071B| 258 308
1 1 98 0 0 0| 384k 0 | 48k 43k| 0 0 | 249 211
7 17 75 0 0 1| 0 248k|4854B 12k| 0 0 | 592 673
勒索软件横行,是该用key登陆ssh了!
Unix/LinuxC技术 jackxiang 2017-7-27 09:41
5月12日晚,WanaCrypt0r 2.0勒索软件在全球爆发(简称 WCry2.0),Wcry2.0利用4月份nsa泄露的安全漏洞对windows系统进行攻击,从而植入勒索软件,据统计全球上百个国家的13万多台电脑遭到感染,其中不乏大型企业,医院及各种公共服务行业,带来了巨大的恶意影响。
漏洞、文件加密型的勒索软件、比特币付费解密的完美组合,已成为网络攻击敲诈勒索的最佳实践。我们看到近年来不断出现利用各种服务漏洞和不安全配置进行勒索敲诈的案例,如大量裸奔在互联网的hadoop、mongodb、elasticsearch等服务的不安全配置及弱口令导致的勒索。
同样linux ssh服务也面临以上的风险,据国外媒体报道,一台在互联网运行的linux系统开启ssh服务10秒内,就会出现对ssh的口令破解攻击,由此可见攻击者通过自动化的方式不断去扫描整个互联网寻找攻击目标,ssh用户口令破解也因为攻击手段简单、粗暴,技术门槛低成为最常见的攻击方式。ssh做为linux系统最最主要的远程管理工具,一旦成功破解系统用户密码,尤其是root用户,就会获得系统的最高权限,除了可以通过勒索软件用来实施勒索外,系统也可能被安装后门、木马等恶意软件,成为僵尸主机。
如果您还在使用密码登陆ecs实例的ssh服务,除了通过安全组设置严格的ssh服务登陆源地址外,强烈建议改用SSH密钥对 登陆ecs实例,禁用密码方式登陆。SSH密钥对利用高强度的公私钥及对称加密算法实现对用户的认证,有效降低了破解用户口令的攻击。
来源:某云,后面是广告,就不粘贴了。
漏洞、文件加密型的勒索软件、比特币付费解密的完美组合,已成为网络攻击敲诈勒索的最佳实践。我们看到近年来不断出现利用各种服务漏洞和不安全配置进行勒索敲诈的案例,如大量裸奔在互联网的hadoop、mongodb、elasticsearch等服务的不安全配置及弱口令导致的勒索。
同样linux ssh服务也面临以上的风险,据国外媒体报道,一台在互联网运行的linux系统开启ssh服务10秒内,就会出现对ssh的口令破解攻击,由此可见攻击者通过自动化的方式不断去扫描整个互联网寻找攻击目标,ssh用户口令破解也因为攻击手段简单、粗暴,技术门槛低成为最常见的攻击方式。ssh做为linux系统最最主要的远程管理工具,一旦成功破解系统用户密码,尤其是root用户,就会获得系统的最高权限,除了可以通过勒索软件用来实施勒索外,系统也可能被安装后门、木马等恶意软件,成为僵尸主机。
如果您还在使用密码登陆ecs实例的ssh服务,除了通过安全组设置严格的ssh服务登陆源地址外,强烈建议改用SSH密钥对 登陆ecs实例,禁用密码方式登陆。SSH密钥对利用高强度的公私钥及对称加密算法实现对用户的认证,有效降低了破解用户口令的攻击。
来源:某云,后面是广告,就不粘贴了。
[实践OK]在Linux的Shell系统下的Date/date函数用法,以及用format格式化获取昨天、明天或多天前的日期输出的用法~
Unix/LinuxC技术 jackxiang 2017-7-20 16:51
背景:经常一些应用爱搞一天一个目录,天数多了里面文件也大了,磁盘也占满了,怎么办?得每天删除1个月的日志。于是一个月的时间就得用上了。
Mysql删除七天前的,搬过来:
我要的是这个:
一、Linux的Shell系统下的Date/date函数用法:
Egg: cat /root/del_catalina.sh
In Bash:
get year-month-day from date
DATE=`date +%Y-%m-%d`
get year-month-day hour:minute:second from date
DATE=`date +%Y-%m-%d:%H:%M:%S`
二、获取昨天、明天或多天前的日期:
在Linux中可以通过date命令获取昨天、明天、上个月、下个月、上一年和下一年
# 获取昨天
date -d 'yesterday' # 或 date -d 'last day'
# 获取明天
date -d 'tomorrow' # 或 date -d 'next day'
# 获取上个月
date -d 'last month'
# 获取下个月
date -d 'next month'
# 获取上一年
date -d ’last year'
# 获取下一年
date -d 'next year'
此外你可以获取多天前,多天后,多个月前,多个月后,多年前或多年后
# 三年前
date -d '3 year ago'
# 五年后
date -d '-5 year ago'
# 两天后
date -d '-2 day ago'
# 一个月前
date -d '1 month ago'
来自:https://my.oschina.net/aiguozhe/blog/57835
Mysql删除七天前的,搬过来:
我要的是这个:
一、Linux的Shell系统下的Date/date函数用法:
Egg: cat /root/del_catalina.sh
In Bash:
get year-month-day from date
DATE=`date +%Y-%m-%d`
get year-month-day hour:minute:second from date
DATE=`date +%Y-%m-%d:%H:%M:%S`
二、获取昨天、明天或多天前的日期:
在Linux中可以通过date命令获取昨天、明天、上个月、下个月、上一年和下一年
# 获取昨天
date -d 'yesterday' # 或 date -d 'last day'
# 获取明天
date -d 'tomorrow' # 或 date -d 'next day'
# 获取上个月
date -d 'last month'
# 获取下个月
date -d 'next month'
# 获取上一年
date -d ’last year'
# 获取下一年
date -d 'next year'
此外你可以获取多天前,多天后,多个月前,多个月后,多年前或多年后
# 三年前
date -d '3 year ago'
# 五年后
date -d '-5 year ago'
# 两天后
date -d '-2 day ago'
# 一个月前
date -d '1 month ago'
来自:https://my.oschina.net/aiguozhe/blog/57835
Linux下查找并删除大于多少天的文件
Unix/LinuxC技术 jackxiang 2017-7-12 20:55
find . -mtime +90 -exec sh -c "rm -rf {}" \;
[实践OK] unzip 解压文件到指定的目录-d,zip和unzip是两个不同的rpm包。
Unix/LinuxC技术 jackxiang 2017-7-12 11:24
背景:在打包时,需要对源文件是ZIP格式的,给unzip解压文件到指定的打包目录$RPM_BUILD_DIR,查了下,也就是得用到unzip的-d参数。
yum install zip -y
yum install unzip -y
来源 :http://blog.csdn.net/ljchlx/article/details/8028672
yum install zip -y
yum install unzip -y
来源 :http://blog.csdn.net/ljchlx/article/details/8028672
[实践OK]LINUX TAR 解压文件时指定文件名~tar解压到指定目录并且重名原始目录名,在被解压的包里面去掉一层目录。
Unix/LinuxC技术 jackxiang 2017-7-12 10:31
tar -xzvf mysql-5.6.15.tar.gz -C ./mysql-5.6.15 --strip-components 1
实践:
man tar
tar --strip-components = NUMBER
...skipping...
--strip-components=NUMBER
strip NUMBER leading components from file names on extraction
tar -zxvf codes.doc.qr.cntv.net.tar.gz -C abc/. --strip-components 1
打包来自:codes.doc.qr.cntv.net codes.doc.qr.cntv.net.tar.gz
再看解压后的目录无codes.doc.qr.cntv.net外层目录了:
tree -L 1 abc/
abc/
├── Application
├── index.php
├── netchkrs
├── Public
├── showdoc.sql
├── test.php
├── Text
└── ThinkPHP
实践来自:http://www.cnblogs.com/zxiaozhou/p/6068867.html
实践:
man tar
tar --strip-components = NUMBER
...skipping...
--strip-components=NUMBER
strip NUMBER leading components from file names on extraction
tar -zxvf codes.doc.qr.cntv.net.tar.gz -C abc/. --strip-components 1
打包来自:codes.doc.qr.cntv.net codes.doc.qr.cntv.net.tar.gz
再看解压后的目录无codes.doc.qr.cntv.net外层目录了:
tree -L 1 abc/
abc/
├── Application
├── index.php
├── netchkrs
├── Public
├── showdoc.sql
├── test.php
├── Text
└── ThinkPHP
实践来自:http://www.cnblogs.com/zxiaozhou/p/6068867.html
在secureCRT使用vim,alt键映射(alt+b,alt+f在shell里是前后一个单词)都被secureCRT占用了,能屏蔽吗?
Unix/LinuxC技术 jackxiang 2017-7-12 09:45
背景:在secureCRT使用vim,alt键映射都被secureCRT占用了,导致设置alt开头的快捷键都不能用,这很不方便 有办法解决这一问题吗?
option -> session options -> termianl -> emulation -> use alt as meta key
vim依然无法正确识别到alt键。
解决了,设置xterm方式就好了。
问题描述:SecureCRT通过ssh登陆一台linux,alt键映射(alt+b,alt+f在shell里是前后一个单词)都被secureCRT占用了。
解决办法 secureCRT -> 选项 -> 会话选项 -> 仿真 -> 映射键; 勾上backspace发送delete。
secureCRT
-> 选项 -> 会话选项 -> 仿真->emacs;勾上use alt as meta key
SecureCRT最常用的的:alt+b打开一个目录(下一堆IP)和一个IP的,就没法用了,但是提高了操作Shell出现错误的速度。这个打开IP的操作并不常用。
但是那个切换Alt+1,Alt+2...,切换标签的不好使了,艹。后来放弃为了实现alt+b,alt+f在shell里是前后一个单词的理想了,有Ctrl+f,Ctrl+b一个一个跳也成,姑且算是习惯了,得了。
From:https://www.zhihu.com/question/21608031
快捷方式之 securecrt/SecureCRT的delete键向后删除键变为Backspace键之解决办法:
http://jackxiang.com/post/9342/
option -> session options -> termianl -> emulation -> use alt as meta key
vim依然无法正确识别到alt键。
解决了,设置xterm方式就好了。
问题描述:SecureCRT通过ssh登陆一台linux,alt键映射(alt+b,alt+f在shell里是前后一个单词)都被secureCRT占用了。
解决办法 secureCRT -> 选项 -> 会话选项 -> 仿真 -> 映射键; 勾上backspace发送delete。
secureCRT
-> 选项 -> 会话选项 -> 仿真->emacs;勾上use alt as meta key
SecureCRT最常用的的:alt+b打开一个目录(下一堆IP)和一个IP的,就没法用了,但是提高了操作Shell出现错误的速度。这个打开IP的操作并不常用。
但是那个切换Alt+1,Alt+2...,切换标签的不好使了,艹。后来放弃为了实现alt+b,alt+f在shell里是前后一个单词的理想了,有Ctrl+f,Ctrl+b一个一个跳也成,姑且算是习惯了,得了。
From:https://www.zhihu.com/question/21608031
快捷方式之 securecrt/SecureCRT的delete键向后删除键变为Backspace键之解决办法:
http://jackxiang.com/post/9342/
Linux下使cp命令不提示覆盖文件,cp的代表什么意思呢
Unix/LinuxC技术 jackxiang 2017-7-11 17:17
实践如下:
\cp -r * ../gpac/extra_lib
查找下原因:
实际上cp默认是会覆盖的,出现你这种情况是因为cp被alias成cp -i了,可以通过alias命令查看。
\cp则是告诉shell不要去查alias,直接执行原本的cp
目前,我得知有四种方法:
1.在调用cp的时候加入绝对路径(可通过whereis cp命令得到),如
/bin/cp -f file dir
2.通过直接执行下面的语句调用系统原始的命令:
\cp -f file dir
3.在~/.bashrc里面注释掉 Alias cp='cp -i'
4.unalias cp ,然后再使用cp,但使用后还原alias cp='cp -i'
来自:http://www.oschina.net/question/1588291_166511
\cp -r * ../gpac/extra_lib
查找下原因:
实际上cp默认是会覆盖的,出现你这种情况是因为cp被alias成cp -i了,可以通过alias命令查看。
\cp则是告诉shell不要去查alias,直接执行原本的cp
目前,我得知有四种方法:
1.在调用cp的时候加入绝对路径(可通过whereis cp命令得到),如
/bin/cp -f file dir
2.通过直接执行下面的语句调用系统原始的命令:
\cp -f file dir
3.在~/.bashrc里面注释掉 Alias cp='cp -i'
4.unalias cp ,然后再使用cp,但使用后还原alias cp='cp -i'
来自:http://www.oschina.net/question/1588291_166511
Linux下编译源代码时注意一下加上那个Include和Lib路径。
Unix/LinuxC技术 jackxiang 2017-7-11 14:35
Mplayer Error: yasm not found, use --yasm='' if you really want to compile without