小编Vla*_*lad的帖子

Linux上的"快速选择"(或类似)实现?(而不是排序| uniq -c | sort -rn | head - $ N)

问题:我经常需要查看特定日志最后一天内最常重复的"模式".就像这里的一小部分tomcat日志一样:

GET /app1/public/pkg_e/v3/555413242345562/account/stats 401 954 5
GET /app1/public/pkg_e/v3/555412562561928/account/stats 200 954 97
GET /app1/secure/pkg_e/v3/555416251626403/ex/items/ 200 517 18
GET /app1/secure/pkg_e/v3/555412564516032/ex/cycle/items 200 32839 50
DELETE /app1/internal/pkg_e/v3/accounts/555411543532089/devices/bbbbbbbb-cccc-2000-dddd-43a8eabcdaa0 404 - 1
GET /app1/secure/pkg_e/v3/555412465246556/sessions 200 947 40
GET /app1/public/pkg_e/v3/555416264256223/account/stats 401 954 4
GET /app2/provisioning/v3/555412562561928/devices 200 1643 65
...
Run Code Online (Sandbox Code Playgroud)

如果我想找出最常用的URL(以及方法和重新编码) - 我会这样做:

[root@srv112:~]$ N=6;cat test|awk '{print $1" "$2" ("$3")"}'\
|sed 's/[0-9a-f-]\+ (/%GUID% (/;s/\/[0-9]\{4,\}\//\/%USERNAME%\//'\
|sort|uniq -c|sort -rn|head -$N
      4 GET /app1/public/pkg_e/v3/%USERNAME%/account/stats (401)
      2 GET /app1/secure/pkg_e/v3/%USERNAME%/devices (200)
      2 GET /app1/public/pkg_e/v3/%USERNAME%/account/stats (200)
      2 DELETE /app1/internal/pkg_e/v3/accounts/%USERNAME%/devices/%GUID% (404)
      1 POST /app2/servlet/handler …
Run Code Online (Sandbox Code Playgroud)

linux sorting algorithm awk quickselect

6
推荐指数
1
解决办法
325
查看次数

为什么bash4以不同的方式扩展花括号?

其中一个遗留系统升级到bash4,其大部分脚本停止工作.我已经将它缩小到如何在a中扩展花括号<(cmdA ...|cmdB ... file{1,2}|cmdZ ...).

为了更好地说明差异:

之前(bash 3.2.25):

[root@host1:~]$ bash -version|head -1
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
[root@host1:~]$ cat <(echo sort file{1,2})
sort file1
sort file2
[root@host1:~]$ join <(sed 's/\r//g;s/^[^:]*://' file{1,2}|LANG=C sort)
[root@host1:~]$
Run Code Online (Sandbox Code Playgroud)

之后(bash 4.1.2):

[root@host2:~]$ bash --version|head -1
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
[root@host2:~]$ cat <(echo sort file{1,2})
sort file1 file2
[root@host2:~]$ join <(sed 's/\r//g;s/^[^:]*://' file{1,2}|LANG=C sort)
join: missing operand after `/dev/fd/63'
Try `join --help' for more information.
[root@host2:~]$ 
Run Code Online (Sandbox Code Playgroud)

它是否为bash4做出了"硬编码"(并且预期?)的更改?或者这个扩展的行为是由一些bash级别的设置(比如set -B/ set +B)控制的,可以切换回old/legacy/bash3模式吗?我宁愿改变一些shell范围的开关(而不是重写一堆脚本).

如果这个(bash3)"功能"在错误修复或改进期间被切断 …

bash shell rhel curly-braces expansion

6
推荐指数
1
解决办法
144
查看次数

Spring-boot内部jar文件加载顺序?(嵌入式Tomcat)

我有一个带有嵌入式 tomcat (tomcat-embed-core-8.5.57.jar) 的 spring-boot “fat” jar (1.5.22)。

jar 内部 - BOOT-INF/lib 下有许多“内部”jar。

类加载器加载这些内部 jar 的顺序是什么?

如果我在多台计算机上运行- 内部罐子是否会以相同的确切java -jar myFatSpringBoot.jar顺序被拾取,或者它是否“取决于”每台计算机上的某些内容?(FS/tmpfs/java/等)


更新:许多响应者表示,它按照它们在 fat jar 中出现的确切顺序获取内罐(因此至少 QA 和 PROD 对于同一个 fat jar 应该表现相同的方式,这与非 spring-boot .war 应用程序不同)。

现在我想知道在创建/打包罐子的过程中我们是否有任何机制来保存/强制/指定内部罐子的顺序?(maven/gradle/...)

java tomcat spring-boot

4
推荐指数
1
解决办法
3130
查看次数

“less”会消耗大量 RAM 用于 gzip 压缩文件的管道输出,为什么?

请原谅我毫无用处cat,而且是echo预先的,但是当less在 ~2GB .gz 文件上运行时,我看到 ~25GB 的 RAM 被消耗(尽管输出被通过管道传输到 awk 并在那里消耗):

[user@mybox:~]$ cat <(echo '173abcde7665559.90651926
131abcde7298936.49040546
... (25 lines total here) ...
186abcde4858463.43044639
163abcde9409643.80726489'|awk '{print "KEY 1"length($1)-16":"$1}';
less /tmp/stats.gz)|awk '{if("KEY"==$1){K[$2]=1}else{if($8 in K)print}}' >bad25&
Run Code Online (Sandbox Code Playgroud)

我预计上面的内容不需要 RAM 就能完成,但令我惊讶的是,大约 2.5 小时后(当时读取 .gz 的进度已达到 89.8%):

[user@mybox:~]$ ps auxf|grep -e 'pts/2' -e PID |grep -v grep
USER   PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
user 26896  0.0  0.0  68356  1580 pts/2    Ss+  15:23   0:00  \_ /bin/bash
user …
Run Code Online (Sandbox Code Playgroud)

linux bash shell gzip less-unix

0
推荐指数
1
解决办法
351
查看次数