我正在编写 chroot 监狱的创建脚本,该自动化的一部分包括将各种可执行文件及其依赖项复制到监狱中。我正在使用以下 bash 行来解析依赖项列表中的文件路径(例如,对于 java):
$ ldd `which java` | grep -o '/[^()]*'
/lib/x86_64-linux-gnu/libz.so.1
/lib/x86_64-linux-gnu/libpthread.so.0
/lib/x86_64-linux-gnu/libdl.so.2
/lib/x86_64-linux-gnu/libc.so.6
/lib64/ld-linux-x86-64.so.2
Run Code Online (Sandbox Code Playgroud)
这对 Node.js 和 Python 非常有用,但是当我尝试java
从监狱中执行时,出现错误:
java:加载共享库时出错:libjli.so:无法打开共享对象文件:没有这样的文件或目录
事实证明,依赖项列表中缺少libjli.so路径……至少那些ldd
向我们展示的路径(第 5 行):
$ ldd `which java`
linux-vdso.so.1 => (0x00007ffff7f4d000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f7ac3928000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7ac370c000)
libjli.so => not found
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7ac3507000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7ac317c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7ac3b48000)
Run Code Online (Sandbox Code Playgroud)
我找到了文件...
$ find /usr/lib -name libjli.so
/usr/lib/jvm/java-6-openjdk-amd64/lib/amd64/jli/libjli.so
/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/amd64/jli/libjli.so
Run Code Online (Sandbox Code Playgroud)
...但我想知道为什么它没有列出ldd
。它显然是一个已知的依赖项,但路径未知?任何帮助表示赞赏!
鉴于以下data
文件...
foo 10
bar 20
oof 50
rab 20
Run Code Online (Sandbox Code Playgroud)
...我如何将第二列打印为第二列总数的百分比?换句话说,我想要...
foo 10 10%
bar 20 20%
oof 50 50%
rab 20 20%
Run Code Online (Sandbox Code Playgroud)
...当然,数字不太明显。我可以很容易地创建一个运行总数,但我不确定如何在打印行之前计算总数。我在 awk 文件中执行此操作totals.awk
...
#!/usr/bin/awk -f
BEGIN{
runningtotal=0
}
{
runningtotal=runningtotal+$2
print $1 "\t" $2 "\t" runningtotal "\t" $2/runningtotal
}
Run Code Online (Sandbox Code Playgroud)
所以,运行./totals.awk data
收益...
foo 10 10 1
bar 20 30 0.666667
oof 50 80 0.625
rab 20 100 0.2
Run Code Online (Sandbox Code Playgroud)
有没有办法循环两次,一次计算总数,一次打印行?这在 AWK 中是可能的,还是我必须使用其他实用程序?
我有一个目录/opt/splunk
,我似乎无法摆脱它。
root@alpha:/opt# ls -la
total 87156
drwxr-xr-x 4 root root 4096 Feb 20 15:44 .
drwxr-xr-x 23 root root 4096 Feb 19 13:29 ..
drwxrwxrwx 3 root root 4096 Feb 20 15:23 data
drwx------ 4 root root 4096 Feb 20 15:45 splunk
-rw-r--r-- 1 root root 89224626 Dec 16 22:47 splunk-6.2.1-245427-linux-2.6-amd64.deb
Run Code Online (Sandbox Code Playgroud)
我可以在没有错误的情况下将其删除,这似乎有效。
oot@alpha:/opt# rm -rf splunk
root@alpha:/opt# ls -la
total 87152
drwxr-xr-x 3 root root 4096 Feb 20 15:46 .
drwxr-xr-x 23 root root 4096 Feb …
Run Code Online (Sandbox Code Playgroud) 我对重定向有一个非常基本的了解,但是我遇到了一个带有我不理解的重定向的 cronjob。
00 19 * * 1-5 /apps/app/scripts/doit.sh a np cron > /apps/app/scripts/doit.log > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
我看到三个重定向。我打算在这里写下我的最佳猜测,但我无法形成全貌。如果有人帮助我理解 STDOUT 和 STDERR 术语,我将不胜感激。
我的外壳是 ksh:
:> ps -p $$
PID TTY TIME CMD
23947 pts/0 00:00:00 ksh
Run Code Online (Sandbox Code Playgroud)