如下所示,文件hello.txt中有5行数据,要将这5行数据在一行中显示出来,并用空格分隔。

jie$ cat hello.txt
1
2
3
4
5

从下方法均可实现:
方法1.

$ echo `cat hello.txt`
1 2 3 4 5

cat hello.txt | xargs
1 2 3 4 5

$a=$(cat hello.txt)
cat "$a"
1
2
3
4
5

原文:https://blog.csdn.net/guoyajie1990/article/details/73692526
背景:前些天安全说是OpenSSL在CentOS6.X里面有漏洞,于是乎,就更新了OpenSSL,没有想到会在PHP-FPM里调用譬如 七牛的SSL出现问题PHP Problem with the SSL CA cert (path? access rights?),说白了就是得重启一下php-fpm一下,其它的也还好,如果是Nginx出现这样的问题,处理办法一样。
关于这方面的知识有:
1)厉害了,一篇漫画终于让我看懂了HTTPS协议的学习笔记。图解ssl 图文https。:  https://jackxiang.com/post/10110/

2)rpm -q --changelog openssl | grep CVE-2014-0160  
- fix CVE-2014-0160 - information disclosure in TLS heartbeat extension  参考:
https://jackxiang.com/post/9882/


以下摘录自网络:
开发遇到问题,直接使用系统的curl命令正常,使用php的curl模块报错

错误:PHP Problem with the SSL CA cert (path? access rights?)

解决方法:

1.安装

yum reinstall openssl ca-certificates -y

2.重启php


来自:https://cloud.tencent.com/developer/article/1097683



===========================根本原因是没有没有重新启动PHP-FPM========================
问题背景:
早上起床收到短信提醒,WEB服务器集群发现漏洞,于是更新服务, 其中一条是: yum update openssl

问题现象:
1. 命令行直接使用系统的curl命令一切正常

2. LAMP环境中调用curl则报错: Curl Problem with the SSL CA cert (path? access rights?)

问题原因:
更新openssl后, 证书也跟着更新了, 但是apache容器【旧进程】无法正确读取到新的证书以及权限

解决方案:
1. yum reinstall openssl ca-certificates -y && service httpd restart

From:http://www.blogdaren.com/post-2357.html
xhprof不维护了,用的是另一个,格式和xhprof一样,还兼容swoole 协程。
---------------------------------------------------------------阅读全文
Jquery: <script src="./scripts/jquery-1.4.2.js"></script>
Html textarea:


javasciprt,先批量替换掉下划线为点号,再正则匹配出所有包含IP行里的IP,如下:


输入素材:

  elk_logstash_bj_yz_10_73_211_106
  elk_logstash_bj_yz_10_73_211_118
  elk_logstash_bj_yz_10_73_211_119


输出素材:
10.73.211.106
10.73.211.118
10.73.211.119

Jquery写法,加上IP去重:
Html触发部分:
<a href="javascript:void(0);" id=analysisIps name=analysisIps>[提取Ip地址]</a>


使用图形分析工具wincachedgrind分析生成的文件

下载地址:http://sourceforge.net/projects/wincachegrind/files/

centos安装php扩展xdebug安装以及用kcachegrind系统分析
Download:
https://phoenixnap.dl.sourceforge.net/project/precompiledbin/kcachegrind.zip


百度网盘。
实践发现:
找开kcachegrind文件时要以它的后缀结尾,直接贴进去地址就成。
背景:过滤从前端textarea里传过来的字符串里有空行。
如:
1212
2121

1222
测试了一下发现写入文件是:
#cat input.txt
1212
2121

1222
出现多了两个竖线的原因是上面这个空行:
grep -Erin "1212|2121||1222"

那么,想去掉这个串里的空的行,怎么办?



来自:https://zhidao.baidu.com/question/808190628151611092.html

想要的结果是,而不是多一个||,如下:
grep -Erin "1212|2121||1222"
想要:
grep -Erin "1212|2121|1222"





PHP实现ASCII码与字符串相互转换的方法,主要想看换行里是\n还是\r\n,当然也可以在PHP写入文件后sz下来用FlexHEX编辑器看:
31 32 31 32 0A 32 31 32 31 0A 0A 31 32 32 32  <===1212
2121

1222

上面的0A就是10,也就是\n,如下:
php > echo ord(1);
49
php > echo ord(2);
50
php > echo ord(\n);
PHP Fatal error:  Undefined constant 'n' in php shell code on line 1
php > echo ord("\n");
10
用PHP看:

php /tmp/ascii.php
<xmp>&#49;&#50;&#49;&#50;&#10;&#50;&#49;&#50;&#49;&#10;&#10;&#49;&#50;&#50;&#50;</xmp>1212
2121

1222

所以,结论是这个\r其实是没有必要的,下面这一行就行,当然平台可能是\r\n于是得加上:
//$leftContents = preg_replace('/[\r\n]+/', "\n", $leftContents);
$leftContents = preg_replace('/[\n]+/', "\n", $leftContents);    

正则的意思是无论是\r\n\r\n还是\n\n都能被替换为一个斜杠n ,\n:
php > $contents = preg_replace('/\n\n/', "\r\n\r\n", $contents);  
php > echo $contents;
1212
2121

1222
php > $str = preg_replace('/[\r\n]+/', "\n", $contents);
php > echo $str;
1212
2121
1222

一个Window的\r\n和一个unix的\n,这个正则一样能替换,反之一样:
php > $contents = preg_replace('/\n\n/', "\r\n\n", $contents);    
php > echo $contents;
1212
2121

1222
php > $str = preg_replace('/[\r\n]+/', "\n", $contents);
php > echo $str;
1212
2121
1222

反之亦然:
php > $contents=file_get_contents("/tmp/input.txt");
php > echo $contents;
1212
2121

1222
php > $contents = preg_replace('/\n\n/', "\n\r\n", $contents);  
php > echo $contents;
1212
2121

1222
php > $str = preg_replace('/[\r\n]+/', "\n", $contents);
php > echo $str;
1212
2121
1222

对于这个+号,查了一下正则:
man awk
/Regular Expressions

. 任意字符
问家兴:(问加星)
?   0或1次
+  1次或多次    #man awk  Regular Expressions , r+         matches one or more r's.
*   0次或N次

也就是一次或多次,对于\r\n就像[a-z0-9]一个道理,\r和\n分别表示一个字符,可一块,总之一次或多次,于是:
\r\n\r\n  ,\n\n,\r\n\n,\n\r\n都能匹配,长时间不写PHP快忘光了,嗨。

同时,网上还有法二先用换行去转成数组,再用数组里去掉空元素array_filter:
// 该函数把输入数组中的每个键值传给回调函数。如果回调函数返回true,则把输入数组中的当前键值返回结果数组中。数组键名保持不变。若无回调函数,则将TRUE的值返回,即可以使用它来过滤空元素
$arr = array(0, 1, 4, '',null, '0', 23);
$arr = array_filter($arr);// array(1=>1, 2=>4, '6'=>23) 下标不改变,使用array_values(),改变下标
1.去除空行



来自:https://www.cnblogs.com/chenqionghe/p/4293852.html


cat a.txt
jack 1
tianjin 2
old5 3




sh read.sh
jack 1
tianjin 2
old5 3


加上模拟输出:
insert into t set name='xxx', id=N;

sh read.sh  
insert into t set name='jack',id=1;
insert into t set name='tianjin',id=2;
insert into t set name='old5',id=3;

行内有空格换行的原因:
如果输入文本每行中没有空格,则line在输入文本中按换行符分隔符循环取值.
如果输入文本中包括空格或制表符,则不是换行读取,line在输入文本中按空格分隔符或制表符或换行符特环取值.
可以通过把IFS设置为换行符来达到逐行读取的功能.
demo:
假设现需要读取如下的文件rollback_config.txt:
ROLLBACK_SERVICES:upserv  checkserv
ROLLBACK_VERSION:v1.1
使用   for line in `cat rollback_config.txt`; do echo "${line}"; done  读取的结果会是:
ROLLBACK_SERVICES:upserv
checkserv
ROLLBACK_VERSION:v1.1
显然不是我们想要的。

解决方法:
IFS_old=$IFS
IFS=$'\n'
for line in  `cat  rollback_config`;do
echo "$line"
done;
IFS=$IFS_old
这样一来就可以了!



IFS的默认值为:空白(包括:空格,制表符,换行符).

---------------------

本文来自 潼潼水势向江东 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/zhongjling/article/details/52859055?utm_source=copy

二)用AWK就很方便处理,如下,注意下单引号是三个单引号,中间那个被转义,才输出一个单引号     '\''  :

insert into t set name='jack',id=1;
insert into t set name='tianjin',id=2;
insert into t set name='old5',id=3;
对于变量可以把整个变量用花括号括起来,也可括一部分,如:
整个:{$name}
把$放外面:${name}
-----------------------------------------------------------------------------------
php 使用phpize 安装扩展readline , 安装后可以进入命令行交互模式:


Shell也一样:
零)用unset来撤销数组,可用unset array_name[i]来删除里面的元素:
declare -A DATABASES

# mail
DATABASES['10.70.62.5-3306']='postfix_mail'
用unset来撤销数组,可用unset array_name[i]来删除里面的元素
#cat  arrayunset.sh  

#sh  arrayunset.sh
echo bai manage postfix_mail



一)${#array_name[@]} 或者 ${#array_name[*]}都可以用来求数组的长度
#cat ping3times.sh  






#sh  arrayloop.sh
jerry
alice
david
wendy


二)${array_name[@]} 或者 ${array_name[*]} 都可以全部显示数组中的元素


#sh arraylist.sh
jerry
alice
david
wendy
jerry alice david wendy


来自:https://blog.csdn.net/Jerry_1126/article/details/52027539
对于写判断的语句,如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
背影:对于低配置机器,建议写死PHP-FPM进程数得了,而对于高配置机器,则如果写在动态的,因为根据流量进行fork了PHP-FPM进程运动量很大,应该是在高配置身体健康的时候去做,等你是一个低配置的机器,你再去做增加进程去做时就死了。

一)PHP-FPM子进程数量应该如何设置?



二)php-fpm.conf 配置说明:
php-fpm中pm.start_servers 多大合适?
{(cpu空闲时等待连接的php的最小子进程数) + (cpu空闲时等待连接的php的最大子进程数 - cpu空闲时等待连接的php的最小子进程数)/ 2};
用配置表示就是:min_spare_servers + (max_spare_servers - min_spare_servers) / 2;一般而言,设置成10-20之间的数据足够满足需求了。
英文表示@/usr/local/php/etc/php-fpm.conf:
; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2

1)XIYOU-API线上24G(24576M),24CPU生产机器配置:


2)目前RPMBUILD打包写死:
/home/test/rpmbuild/SOURCES/php-fpm.conf
/home/test/rpmbuild/SOURCES/www.conf


3)通过grep从/usr/local/php/etc/php-fpm.conf里陪陪出对应项的值:


附,php-fpm.conf 配置说明:


来自:https://blog.csdn.net/u013372487/article/details/80168979


HP-FPM子进程数量应该如何设置?摘录自:https://blog.csdn.net/jt521xlg/article/details/50992631 ,最前面参考计算最小PHP进程来源:
首先,我们关注下 PHP-FPM 的运行方式:

static :表示在 `php-fpm` 运行时直接 `fork` 出 `pm.max_chindren` 个子进程,

dynamic:表示,运行时 `fork` 出 `start_servers` 个进程,随着负载的情况,动态的调整,最多不超过 `max_children` 个进程。
一般推荐用 static。

优点是不用动态的判断负载情况,提升性能;

缺点是多占用些系统内存资源。

PHP-FPM 子进程数量,是不是越多越好?

当然不是,pm.max_chindren,进程多了,增加进程管理的开销以及上下文切换的开销。

更核心的是,能并发执行的 php-fpm 进程不会超过 cpu 个数。

如何设置,取决于你的代码

如果代码是 CPU 计算密集型的,pm.max_chindren 不能超过 CPU 的内核数。

如果不是,那么将 pm.max_chindren 的值大于 CPU 的内核数,是非常明智的。

国外技术大拿给出这么个公式:

在 N + 20% 和 M / m 之间。

N 是 CPU 内核数量。
M 是 PHP 能利用的内存数量。
m 是每个 PHP 进程平均使用的内存数量。

适用于 dynamic 方式。

static方式:M / (m * 1.2)

当然,还有一种保险的方式,来配置 max_children。适用于 static 方式。

先把 max_childnren 设置成一个比较大的值。
稳定运行一段时间后,观察 php-fpm 的 status 里的 max active processes 是多少
然后把 max_children 配置比它大一些就可以了。
pm.max_requests:指的是每个子进程在处理了多少个请求数量之后就重启。

这个参数,理论上可以随便设置,但是为了预防内存泄漏的风险,还是设置一个合理的数比较好

来自:https://blog.csdn.net/jt521xlg/article/details/50992631
方便后面类似的需求,更快替换及测试,提高效率,如下:

ansible-playbook replace.yml -C -D



前置之1)Ansible的正则替换的模拟替换参数 -C -D,类似sed 的 -n 和 p结合只显示不真实替换,如下:
ansible-playbook aixiu_web.yml -e h=10.244.5.108 -C -D -t addhttpcdnsrcip

前置之2)正则被多重括号包起来的一个顺序和内容界定相当重要,它是从左到右数的一个\1\2\3的反向引用实践备忘:

上面1是最左边那个(,也就是所有的,第二个是匹配到的',它前面还有一些空行也被匹配上了的(                    '),所以上面显示有一些空的主要用来对新加的一行对齐,
第三个\3就是上一行去掉前和后的部分对于插入这行没有用(前无'后无,')(就是:"agent":"$http_user_agent"),第四个就是匹配到单独的一个(,'),
这个道理明白了也就对正则匹配出来的先后顺序有一个了解,再就是这个串特比有是\2里面的多个空格加一个单引号(                    '),
对于\n后面新加的一行对齐很重要,再就是\4也就是(,'),也是用来补充新加的一行少的部分,组成新一行起到了作用,见实践2:
                    ')                  <=== \2
"http_cdn_src_ip":"$http_cdn_src_ip"     <===新加的部分
,'                                       <=== \4    
上面三行构成了一个完整的和上面一样有N个空格打头的字符串:
                    '"http_cdn_src_ip":"$http_cdn_src_ip",'

backrefs参数:默认情况下,当根据正则替换文本时,即使regexp参数中的正则存在分组,在line参数中也不能对正则中的分组进行引用,除非将backrefs参数的值设置为yes。backrefs=yes表示开启后向引用,这样,line参数中就能对regexp参数中的分组进行后向引用了,这样说不太容易明白,可以参考后面的示例命令理解。backrefs=yes除了能够开启后向引用功能,还有另一个作用,默认情况下,当使用正则表达式替换对应行时,如果正则没有匹配到任何的行,那么line对应的内容会被插入到文本的末尾,不过,如果使用了backrefs=yes,情况就不一样了,当使用正则表达式替换对应行时,同时设置了backrefs=yes,那么当正则没有匹配到任何的行时,则不会对文件进行任何操作,相当于保持原文件不变。

原文:https://blog.csdn.net/dylloveyou/article/details/80698531

实践1)一行命令实现了正则替换,也就是Shell->Ansible的一个路径,它于直接定到yml里的正则写法不一样,看实践2作比较,原因:
写到文件里和一行的正则写法是不一样的,写一行涉及到终端传Shell的问题,而写到yaml的Ansible文件里则是python的交互,所以正则写法不大一样,如下:
shell交互:  regexp='((.*)(\"agent\":\"\\\$http_user_agent\")(.*))'
yaml交互:  regexp: '((.*)(\"agent\"\:\"\$http_user_agent\")(.*))'
比对发现:
一)\: 冒号在shell不需要转义,而在yaml文件里需要转义。
二)而shell里对$转义的右斜杠需要再加两个右斜杠一共三次,而yaml文件里轩一次也就行了,后面有描述这个$的问题。


三)有条件的替换,以防止出现替换时因为多次运行相同的Ansible脚本进而多次插入,注意when里面的变量加上单引号为字符串,否则会出现判断不准的问题:


实践2)实践发现假如要写到Yaml文件里,上面单独这一行放Shell里运行可以,但是放到yaml文件里是不行的,怎么办,重新修改调试Ok的文件版本如下所示:

TASK [将CDN透传过来的客户端访问出口IP写入Nginx日志] **********************************************************************************************************
--- before: /usr/local/nginx/conf/nginx.conf (content)
+++ after: /usr/local/nginx/conf/nginx.conf (content)
@@ -66,6 +66,7 @@
                     '"xff":"$http_x_forwarded_for",'
                     '"referer":"$http_referer",'
                     '"agent":"$http_user_agent",'
+                    '"http_cdn_src_ip":"$http_cdn_src_ip",'
                     '"status":"$status"}';

     access_log  /data/logs/nginx/access.log main;          #这一行显示冗余,并没有用,主要看+号。

changed: [10.244.25.77]



实践3)用ansible的insertafter实现:
如果用正则查到某行,在其后面写上也成用insertafter实现,但是这样据前面文章和实践就无法用这个\1\2这样的了,如果打开那个backrefs就需要regexp了,于是这样写实践是Ok的:

--- before: /usr/local/nginx/conf/nginx.conf (content)
+++ after: /usr/local/nginx/conf/nginx.conf (content)
@@ -66,6 +66,7 @@
                     '"xff":"$http_x_forwarded_for",'
                     '"referer":"$http_referer",'
                     '"agent":"$http_user_agent",'
+                     '"http_cdn_src_ip":"$http_cdn_src_ip",'
                     '"status":"$status"}';


实践4)进一步实践发现正则和insertafter混用也是可以的,
也就是说insertafter之后,再加一个regexp正则匹配出\1\2可用在line里,同时加上backrefs: yes,可行的,
如下实践也是能实现的,去掉之前的\1和\n即可,就在它后面插入即可,实践发现并没在后面插入,而是直接替换了,也就是说insertafter失效了,还得按实践2走才Ok,要不就老老实实的按实践3在后在插入,不要引入正则也成,引入正则就失去了insertafter的本来功能了:


$ansible-playbook iweb_regexp.yml -C -D -t insertafter

PLAY [insertafter with regexp] **************************************************************************************************************

TASK [insert after] *************************************************************************************************************************

--- before: /usr/local/nginx/conf/nginx.conf (content)
+++ after: /usr/local/nginx/conf/nginx.conf (content)
@@ -65,7 +65,7 @@
                     '"request_uri":"$request_uri",'
                     '"xff":"$http_x_forwarded_for",'
                     '"referer":"$http_referer",'
-                    '"agent":"$http_user_agent",'
+                    '"http_cdn_src_ip":"$http_cdn_src_ip",'
                     '"status":"$status"}';

     access_log  /data/logs/nginx/access.log main;



最后,基础研究,正则替换的基础知识:
对于斜杠来讲,在PHP里即使是单引号,它也是会和类似双引号里的$一样,有被转义:
'/\\\\/'
cat a.php


php a.php
\'

cat reg3.php  


来自微信群:是因为双引号的原因,\#在双引号里,就是\#,\\#在双引号里,就是\#,\\\#在双引号里,就是\\#。

之前http://jackxiang.com/post/6466/研究过反斜杠,没有研究过$,这次主要研究$。
"^-? \\d+$":这个正则表达式为什么会有两个反斜杠
这要分两步看
首先字符串中的\\被编译器解释为\
然后作为正则表达式,\d又被正则表达式引擎解释为元字符只匹配数字
正则表达式中匹配一个反斜杠要用四个反斜杠,为什么呢?

分析一下“\\\\”,第一个斜杠是转义符,第二个斜杠是斜杠本身,第三个斜杠是转义符,第四个斜杠是斜杠本身。
有2点要清楚:
1.字符串里面表示斜杠就需要两个斜杠如“\\”
2.正则表达式里的斜杠需要转意,是用“\\”标示。
这样就比较好解释:
我们先要表示正则表达式里面的斜杠“\\”,然后再用字符串表示出来。而这2个斜杠分别需要一个转义符,这样就成了4个斜杠在正则表达式里面表示一个斜杠。
From:https://my.oschina.net/airship/blog/411045
阅读全文



一)把空格连接改为|连接:
#cat b
a b c d

awk -vOFS="|" 'NF+=0' b
a|b|c|d


二)去空行:
cat a
1

2

3

awk NF a
1
2
3


三)
背景:个人博客里的友情链接发现好多链接都404了,要么是域名注册到期没有续费,要么搬家了,根本连接不过去了,影响页面加载速度怎么能快速清理掉?PHP版本的,只获取Header头,不获取Body内容的:http://jackxiang.com/post/6818/ ,尽管PHP比较能写,但是没有Shell更快实现作下简单一行处理。
一)Linux下的一句话脚本:

二)写成多行:

三)分割文件,子Shell处理,没实践,代码如下:
觉得数据多了就别直接用bash和curl做,换其他并发和网络编程更方便的语言。



来自:http://www.dewen.net.cn/q/15394/%E5%A6%82%E4%BD%95%E5%8A%A0%E5%BF%ABshell%E6%89%B9%E9%87%8F%E8%8E%B7%E5%8F%96url%E7%8A%B6%E6%80%81%E7%A0%81%E7%9A%84%E9%80%9F%E5%BA%A6%EF%BC%9F
https://jingyan.baidu.com/article/fdbd4277d59af8b89e3f4895.html

cat t3.yml


ls /tmp/test/
10  12  14  16  4  6  8

来自:http://54im.com/ansible-doc/playbooks_loops.html#looping-over-integer-sequences


批量创建目录:
哈喽,大家好,今天小编给大家带来一篇如何在使用scp命令式递归的排除文件,希望对大家有所帮助,raksmart服务器。

首先我需要将所有包含 *.c 文件的文件夹从名为 hostA 的本地笔记本复制到 hostB。我使用的是下面的 scp 命令,但不知道如何排除特定的文件(如 *.out):

$ scp-r ~/projects/ user@hostB:/home/delta/projects/

如何告诉 scp 命令在 Linux/Unix 命令行中排除特定的文件或目录?

人们可以使用 scp 命令在网络主机之间安全地复制文件。它使用 ssh 进行数据传输和身份验证。典型的语法是:

scp file1 user@host:/path/to/dest/

scp-r /path/to/source/ user@host:/path/to/dest/

scp 排除文件

我不认为你可以在使用 scp 命令时过滤或排除文件。但是,有一个很好的解决方法来排除文件并使用 ssh 安全地复制它。本页面说明如何在使用 scp 递归复制目录时过滤或排除文件。

如何使用 rsync 命令排除文件

语法是:

rsync av -e ssh--exclude='*.out'/path/to/source/ user@hostB:/path/to/dest/

这里:

-a :递归到目录,即复制所有文件和子目录。另外,打开归档模式和所有其他选项(相当于 -rlptgoD)

-v :详细输出

-e ssh :使用 ssh 作为远程 shell,这样所有的东西都被加密

--exclude='*.out' :排除匹配模式的文件,例如 *.out 或 *.c 等。

rsync 命令的例子

在这个例子中,从 ~/virt/ 目录递归地复制所有文件,但排除所有 *.new 文件:

$ rsync -av -e ssh--exclude='*.new'~/virt/ root@CentOS7:/tmp

示例输出:



Scp exclude files but using rsync exclude command

如果远程服务器上找不到 rsync,那么 rsync 命令将失败。在这种情况下,请尝试使用以下 scp 命令,该命令在当前目录中使用 bash shell 模式匹配 (它不能与 -r 选项一起使用):

$ ls

示例输出:

centos71.log centos71.qcow2 centos71.qcow2.new centos71.v2.qcow2.new meta-data user-data

复制除 .new 之外的当前目录中的所有内容:

$ shopt -s extglob

$ scp!(*.new) root@centos7:/tmp/

示例输出:

centos71.log 100%42621.3MB/s 00:00

centos71.qcow2 100%836MB32.7MB/s 00:25

meta-data 100%4718.5KB/s 00:00

user-data 100%1543569.7KB/s 00:00

有关更多信息,请参阅以下手册页:

$ man rsync

$ manbash

$ manscp

好了今天就到这里啦,大家明天见啦。
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
分页: 1/25 第一页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]