type用法,查找对应命令的返回值:
type cwww
cwww is an alias for cd /data/www/

k8s里的shell代码运行:


函数检测:

有一个n位数,它的各位数字翻转以后组成新的n位数,原来的n位数是新n位数的n倍,求所有可能的n位数。
如:
8712/4 = 2,178


鸟哥的代码:

#make calcnumber
cc     calcnumber.c   -o calcnumber

#./calcnumber
0 = 0 / 1
1 = 1 / 1
2 = 2 / 1
3 = 3 / 1
4 = 4 / 1
5 = 5 / 1
6 = 6 / 1
7 = 7 / 1
8 = 8 / 1
9 = 9 / 1
2178 = 8712 / 4
108901089 = 980109801 / 9
109999989 = 989999901 / 9


http://live.aulddays.com/tech/11/linux-shell-too-great-base-error.htm


我用shell写了一个:
#cat *.sh
#!/bin/bash
for i in {1000..9999} ;do
    rev=$(echo $i | rev)
    div=$(echo "$rev/4" | bc)
    if [[ "10#$i" -eq "10#$div" ]];then
      echo "result="$i;
    fi
done

sh calcnumber.sh
result=1997  #这个是小数四舍五入后相等的,shell在处理小数这方面有些弱,得靠BC。
result=2178
xargs的作用在于,大多数命令(比如rm、mkdir、ls)与管道一起使用时,都需要xargs将标准输入转为命令行参数。
echo "one two three" | xargs mkdir
上面的代码等同于mkdir one two three。如果不加xargs就会报错,提示mkdir缺少操作参数。

一)xrags删文件提示确认:
使用xargs命令以后,由于存在转换参数过程,有时需要确认一下到底执行的是什么命令。
-p参数打印出要执行的命令,询问用户是否要执行。

echo 'one two three' | xargs -p rm -rf
rm -rf one two three ?...y
上面的命令执行以后,会打印出最终要执行的命令,让用户确认。用户输入y以后(大小写皆可),才会真正执行。

-t参数则是打印出最终要执行的命令,然后直接执行,不需要用户确认。
echo 'one two three' | xargs -t rm -rf



二)文本里的多行目录名建立成文件夹:
如果xargs要将命令行参数传给多个命令,可以使用-I参数。

-I指定每一项命令行参数的替代字符串。
$ cat foo.txt
one
two
three

$ cat foo.txt | xargs -I file sh -c 'echo file; mkdir file'
one
two
three

$ ls
one two three
上面代码中,foo.txt是一个三行的文本文件。我们希望对每一项命令行参数,执行两个命令(echo和mkdir),使用-I file表示file是命令行参数的替代字符串。执行命令时,具体的参数会替代掉echo file; mkdir file里面的两个file。


来自:http://www.ruanyifeng.com/blog/2019/08/xargs-tutorial.html
利用 Redis 事务特征
redis 事务是原子操作,可以保证订单处理的过程中数据没有被其它并发的进程修改。
示例代码:

使用 ab 测试
$ ab -t 20 -c 10 http://192.168.1.104:9509/

经测试结果对比,redis 事务方式优于文件排他锁方式,而文件排他锁方式中,非阻塞模式优于阻塞模式。

更多,来自:https://199508.com/post/2054


echo strrpos("jack.txt",".");
4

如果你有一个文件名,你需要从PHP中删除扩展名(extension),有很多方法可以做到这一点。这里有三种方法。

使用pathinfo()函数

pathinfo()函数返回一个包含dirname,basename,extension和filename的数组。或者,您可以传递一个PATHINFO_常量,并返回完整文件名的那一部分:

$filename ='filename.html';
$without_extension = pathinfo($filename, PATHINFO_FILENAME);
如果文件名包含完整路径,则仅返回不带扩展名的文件名。


使用basename()函数

如果扩展名是已知的并且对于所有文件名是相同的,则可以将第二个可选参数传递给basename()以告诉它从文件名中删除该扩展名:

$filename ='filename.html';
$without_extension = basename($filename,'.html');
如果文件名包含完整路径,则仅返回不带扩展名的文件名。

使用substr和strrpos

$filename ='filename.html';
$without_extension = substr($filename, 0, strrpos($filename, "."));
如果文件名包含完整路径,则返回没有扩展名的完整路径和文件名。您可以使用basename()来删除路径,例如:

basename(substr($filename, 0, strrpos($filename, ".")));
尽管它比使用pathinfo慢。

速度比较

使用PHP 5.4在Mac上以10,000,000次循环运行其中的每一个:

pathinfo:10.13秒
basename:7.87秒
substr / strrpos:6.05秒
basename(substr / strrpos):11.98秒
如果文件名不包含完整路径,或者如果它不重要,那么substr / strrpos选项似乎是最快的。

如果文件名包含路径并且您不想要路径但确实知道要删除的扩展名是什么,那么basename似乎是最快的。

如果文件名包含路径,则不需要路径,也不知道扩展名是什么,那么使用pathinfo()选项。

结论

还有很多其他方法可以做到这一点,有些可能会更快。在很多情况下,速度可能并不那么重要(运行pathinfo的10秒钟毕竟是10万次)。这篇文章的目的是展示一些用PHP从文件名中删除扩展名的方法。


来自:http://www.webkaka.com/tutorial/php/2019/050857/
路径含有空格导致误删文件
史上最经典的要数下面这个bumblebee项目了,这个项目本来不出名,不过,程序在其安装脚本install.sh里的一个bug让这个项目一下子成了全世界最瞩目的项目。



那我们该如何防范这种问题呢?

(1)良好的编程习惯:变量加引号防止扩展

path="/usr/local /sbin"

# rm -rf $path

rm -rf "$path"



那我们该如何防范这种问题呢?

(1)良好的编程习惯:变量加引号防止扩展

rm -rf "~"

(2)如果不确定,删除之前 echo 或 find 一下,看变量被扩展成啥了

echo rm -rf "~"

rm -rf ~

echo rm -rf ~

rm -rf /home/work



cd 切换目录失败,导致文件被误删

cd ooxx_path_not_exsit

rm -rf *.exe


5、终极解决方案



不要使用 root 操作系统资源,这样至少不会删除系统文件。

6、在登录 shell 下使用友好的提示符

友好的命令提示符能时刻提醒操作者当前在哪个路径下,避免错误的路径下操作文件。


来自:https://mp.weixin.qq.com/s/_aRRFK4fwnp4uSLQ4tOOhA
#VAR1="2323232"
#VAR2="VAR1"

#eval echo \$$VAR2
2323232
这个用法的确可行,但是看起来十分的不舒服,很难只管的去理解,我们并不推荐。而且事实上我们本身就不推荐使用eval这个命令。
比较舒服的写法是下面这样:
#echo ${!VAR2}
2323232

From:
https://mp.weixin.qq.com/s/U1KirpXB4G82mqa0H9ylKQ


二)Centos安装shellcheck的方法
shellcheck
shellcheck是用来检查shell脚本的工具。
采用haskell语言开发。
在ubuntu中,可以直接采用apt install shellcheck安装完成
但是在Centos,yum是没有shellcheck的包的,因此,需要另一种方法安装

Centos安装shellcheck
由于shellcheck是haskell语言开发的,

因此,会想到使用haskell的包管理工具cabal来安装。

yum install cabal-install
这样,就可以使用cabal install 来安装东西了

在cabal install shellcheck之前还有些功夫要做。

注意,以下指令都会安装在~/.cabal/bin目录下

cabal update
cabal install cabal
cabal install shellcheck
cabal install cabal的意思是安装必要的cabal库,否则安装shellcheck时会报错,必须的。

有意思的是,在A用户安装了以上的东西,
su到B用户,以上的步骤还得来一次,呵呵

来自:https://www.cnblogs.com/wenxingxu/p/9547611.html
https://www.cnblogs.com/zqb-all/p/10054594.html
find . -name "jack.txt" -exec vim {} \;    # 这个没有问题

s |xargs vim
Vim: Warning: Input is not from a terminal   #终端卡了,应该是标准输入被截断了。
3 files to edit



失败:
find . -name "jackxiang.txt" |vim -  #里面是文件名,不是读取文件。
=======================================

vim 本身没有直接从 stdin 读入信息。而 - 参数相当于一个开关,表示从标准输入读入信息。而管道的功能就是把前一个程序的 stdout 作为下一个程序的 stdin

Many commands use a hyphen (-) in place of a filename as an argument to indicate when the input should come from stdin rather than a file.

man vim
- The file to edit is read from stdin. Commands are read from stderr, which should be a tty.

Cmd | vim -
参考 VIM USER MANUAL 26.4 Using Vim from a shell script
cmd | vim -
- 表示vim开启从stdin读数据  #我想作为文件名传入呢???
====================================================================================

ls | xargs vim # 同时打开多个文件
:n [file_name] #切换文件





From:https://www.v2ex.com/t/61163
用ls直接显示文件名称和grep -rl .一样,
man ls 之后 你 /-1 搜索 , -1     list one file per line :
ls -1

/tmp/yaml
$ls -1
jack.txt
jackxiang.txt
xiang.txt

/tmp/yaml
$for i in $(ls -1); do echo $i;cat $i;done
jack.txt
jack
jackxiang.txt
jackxiang
xiang.txt
xiang

加一个换行:
for i in `ls -1`;do echo $i;cat $i;echo;done


Q:public function getLabel(): ?string;

弱弱的问一下,php函数名后带个 ?string是什么用法啊?

A:这个是7.1 加入的类型声明,指示返回类型是string,问号表示可null。
https://www.php.net/manual/en/functions.returning-values.php#functions.returning-values.type-declaration
如下所示,文件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>


支持swoole的Xdebug版本:https://github.com/mabu233/sdebug支持swoole的Xdebug扩展



xdebug是和PHP的版本对应起来的,这一步很重要,如下:
https://xdebug.org/wizard.php
centos安装php版本对应的扩展xdebug链接:




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

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

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


百度网盘。
实践发现:
找开kcachegrind文件时要以它的后缀结尾,直接贴进去地址就成。
之前的后缀是cache,现在修改一下它这个后缀即可:
xdebug.profiler_output_name="cachegrind.out.%H.%u.%s"
修改为:
xdebug.profiler_output_name="callgrind.out.%H.%u.%s"   #kcachegrind在Win下面只认这个前缀的才能打开分析,直接拖cachegrind.out*进去是打不开的。
解决kcachegrind在Win下面只认这个前缀的才能打开分析批量xdebug的文件重命名的办法:

shell下的文本替换,Shell字符串替换学习---武明瑶:https://jackxiang.com/post/9922/


mkdir -p /data/logs/xdebug
chown -R www /data/logs/xdebug
chmod -R 755 /data/logs/xdebug

打成RPM包的SPEC文件:




下载图形化工具kcachegrind在windows下的可执行版 下载地址http://sourceforge.net/projects/precompiledbin/files   用kcachegrind来看会更形象,注意需要修改从linux中执行的文件的php文件路径,这样就可以了sourcecode.
原文:https://blog.csdn.net/gdfjhc/article/details/84194948
背景:过滤从前端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;
分页: 1/25 第一页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]