当我使用此命令安装 jeprof 时,如下所示:
yum install gperftools-devel -y
该命令运行成功并安装gperftools-devel-2.7-6.el8.x86_64
,但是当我使用此命令显示该工具时:
jeprof --version
显示未找到命令。我遗漏了什么吗?我也尝试过这样的方法:
sudo yum install gperftools -y
当我使用此命令安装 jeprof 时,如下所示:
yum install gperftools-devel -y
该命令运行成功并安装gperftools-devel-2.7-6.el8.x86_64
,但是当我使用此命令显示该工具时:
jeprof --version
显示未找到命令。我遗漏了什么吗?我也尝试过这样的方法:
sudo yum install gperftools -y
我最近安装了 Debian 12 Bookworm,据我所知,全新安装时默认预装了 app-armor。我aa-status
以 root 身份运行命令,但返回结果为:bash: aa-status: command not found
。我知道 aa-status 是 apparmor-utils 的一部分。而且它也已安装。
更准确地说,这里的回归apt list --installed | grep apparmor
在于:
apparmor-profiles/stable,stable,now 3.0.8-3 all [installed]
apparmor-utils/stable,stable,now 3.0.8-3 all [installed]
apparmor/stable,now 3.0.8-3 amd64 [installed]
libapparmor1/stable,now 3.0.8-3 amd64 [installed]
python3-apparmor/stable,stable,now 3.0.8-3 all [installed,automatic]
python3-libapparmor/stable,now 3.0.8-3 amd64 [installed,automatic]
当我使用 systemctl status apparmor 向 systemctl “询问” 有关 apparmor 的信息时,它会“说”:
● apparmor.service - Load AppArmor profiles
Loaded: loaded (/lib/systemd/system/apparmor.service; enabled; preset: enabled)
Active: active (exited) since Thu 2024-07-25 08:39:48 -03; 5min ago
Docs: man:apparmor(7)
https://gitlab.com/apparmor/apparmor/wikis/home/
Process: 978 ExecStart=/lib/apparmor/apparmor.systemd reload (code=exited, status=0/SUCCESS)
Main PID: 978 (code=exited, status=0/SUCCESS)
CPU: 359ms
Jul 25 08:39:48 mypc systemd[1]: Starting apparmor.service - Load AppArmor profiles...
Jul 25 08:39:48 mypc apparmor.systemd[978]: Restarting AppArmor
Jul 25 08:39:48 mypc apparmor.systemd[978]: Reloading AppArmor profiles
Jul 25 08:39:48 mypc systemd[1]: Finished apparmor.service - Load AppArmor profiles.
我还注意到了 Finished apparmor.service - Load AppArmor 配置文件。但不知道这是什么意思。我需要一个配置文件才能使其正常运行吗?它没有默认配置文件?你能帮我更好地理解它吗?
提前致谢!
在jq
脚本中,我需要使用路径值对(比旧的键值对更通用)创建 json 对象。也就是说,我需要使用路径而不是键,以便在更深层次上创建值。(这些路径是外部提供的,所以我事先不知道它们。)
例如,在非工作伪代码中,我想使用路径来创建这样的对象:
jq -n '{"a"."x" : 3, "b"."y" : 4}'
这样它就会创建相同的 json 对象jq -n '{"a":{"x" : 3}, "b":{"y" : 4}}'
,即
{
"a": {
"x": 3
},
"b": {
"y": 4
}
}
在某种程度上,这类似于mdir -p
允许直接创建一个包含路径上所有祖先目录的目标目录。但我需要对(许多)json 对象执行此操作。因此,问题是:
使用本机 jq(可能加上一些 bash)通过路径值对创建对象的最简单方法是什么?
(我正在寻找一种复杂度较低且不需要进行大量编程的解决方案。这是在 Ubuntu 24.04 LTS 下使用 jq-1.7.1 实现的)
-- 澄清 --
我想到的输入是路径列表加上值列表,例如:
[".a.x", ".b.y"]
和
[3, 4]
。路径由点分隔。为简单起见,我假设点之间的每个部分都是一个简单的标识符,例如y
(而不是复杂的标识符,例如"y.z"
)。也就是说,我不考虑(目前)这样的路径:
[".a.x", ".b.\"y.z\""]
我有一个软件模块,其中包含一些具有相同模式的文件。
<whitespaces>private static final long serialVersionUID = \dL;
如何找到具有相同值的文件?
$ grep -R serialVersionUID
./path/to/Some.java: private static final long serialVersionUID = 111L;
./path/to/Other.java: private static final long serialVersionUID = 222L;
./path/to/Another.java: private static final long serialVersionUID = 111L;
列之间的前导缩进并没有什么不同。
现在我想找到第二列具有相同值的文件(private static final ...
)?
$ grep -R serialVersionUID | .....
./path/to/Some.java: private static final long serialVersionUID = 111L;
./path/to/Another.java: private static final long serialVersionUID = 111L;
谢谢。
到目前为止,这就是我所能找到的全部内容……
$ grep -R serialVersionUID | sed 's/[ ][ ]*/ /g' | sort -k 2
我有一个改进,但它只打印第二列。
$ grep -R serialVersionUID | sed 's/[ ][ ]*/ /g' | sort -k 2 | uniq -f 2 -d
在 Ed 中,我可以使用这个正则表达式测试空格:g/ *$/p
。我不认为有办法显示空格,也许通过将缓冲区的内容传递给另一个 shell 命令?
history
我可以获得按最常用顺序排序的输出吗?
我知道如何使用编程语言来做到这一点,但不知道如何从 shell 中做到这一点。我使用的是 macOS 上的 zsh。
我知道我可以使用uniq
和sort
某些东西来删除history
输出中的初始数字字段。但这只会删除重复数据,而不会考虑“重复频率”。
这在 shell 中可行吗?还是我应该求助于编程语言?
Debian 最近合并了 /bin 和 /usr/bin,也就是说, /bin 现在是 /usr/bin 的符号链接。但是,/etc/login.defs 中定义的默认 PATH仍然包含这两个目录:
ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
当搜索 PATH 中的所有目录时,这会导致重复。例如:
$ type -a ls
ls is /usr/bin/ls
ls is /bin/ls
$ ( IFS=:; grep -rlI '^#! */bin/sh' $PATH ) | grep apt-
/usr/bin/apt-key
/bin/apt-key
因此,最好将 /bin 和 /sbin 从 PATH 中删除,但由于尚未这样做,我猜想其中可能有一些微妙的原因。那么,从 PATH 中删除这些目录会有什么后果呢?
前提
我已阅读了参考书目中列出的有关cd
、、的内容pwd
。set -P
默认情况下,或者当
-L
提供选项时,目录cd
中的符号链接将在处理目录中的“ ”实例后解析..
。(参考 Bash 参考手册 - 第“ 4 Shell 内置命令” -cd
段落)
如果 '
..
' 出现在目录中,则通过删除紧接在前的路径名部分,返回到斜杠或目录的开头来处理。(同上)
我的 Bash 版本是
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
问题
为了测试一下,我在当前工作目录中有以下文件方案,它是我实验的根目录(dir111
是指向的符号链接dir010
)。
dir010/
dir020/
dir110/dir111 -> ../dir010
my_dir="$PWD"
cd dir110/dir111 # 1
cd .. # 2
cd dir111 # 3
cd ../dir020 # 4
cd "$my_dir" # 5
cd dir110/dir111/../dir020 # 6
cd - # 7
cd dir110/dir111/../../dir020 # 8
"$my_dir"/dir110/dir111
,如预期的那样[^1]。"$my_dir"/dir110
,如预期的那样[^1]。"$my_dir"/dir020
,意外的。我预计cd
会失败"$my_dir"/dir110/dir020
(请参阅下面的解释)。"$my_dir"/dir020
,符合预期[^1],但与 6 相反。第 4 行应该会因下一段中的原因而失败。
参考手册和手册页(参见前提中的引文)都指出..
makecd
仅删除前面的路径名组件,而不查看..
inode 条目的。因此(在默认行为中)"$my_dir/dir110/dir111
看到的父目录是,其中不包含。cd
"$my_dir/dir110
dir020
我认为此行为可能是由于作为提供给..
的前缀而导致的异常。但是,使用作为中缀(第 6 行)与此形成对比。«dirname»
cd «dirname»
..
cd
表现得好像cd -P
已经执行过(或set -P
(或类似)之前发出的命令),即不遵循符号链接。使用cd -P
,在 1. 处,当前工作目录将设置为$my_dir/dir010
。
set -o
告诉我
[omissis]
physical off
pipefail off
posix off
[omissis]
cd
我(以及其他发布的问题中和我一样的人)对参考手册的解释是否正确?我遗漏了什么?如何描述行为?
[^1]: 的默认行为cd
是跟随符号链接
参考书目
在我使用的 Busybox 系统上,输出busybox ifconfig -a
包含一个“基地址”字段:
~ # busybox ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:D0:93:4D:AE:4F
inet addr:192.168.9.159 Bcast:192.168.9.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1 errors:0 dropped:0 overruns:0 frame:0
TX packets:140 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:60 (60.0 B) TX bytes:7136 (6.9 KiB)
Base address:0xd000
eth1 Link encap:Ethernet HWaddr 00:D0:93:4D:AE:50
inet addr:192.168.9.160 Bcast:192.168.9.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:20 errors:0 dropped:0 overruns:0 frame:0
TX packets:21 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1826 (1.7 KiB) TX bytes:1678 (1.6 KiB)
Base address:0x1000
eth2 Link encap:Ethernet HWaddr 00:D0:93:4D:AE:51
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Base address:0xd000
尽管我进行了广泛的搜索,但还是无法找到任何关于这代表什么的信息。有人能告诉我这是什么吗,因为它显然被认为很重要且足够相关,值得包含在ifconfig
输出中?
在这个命令中,如果 curl 成功,那么 res 将等于 curl 的输出。看来 '=' 比 '||' 优先级更高。
res=$(curl -s "http://example.com")||true
但是根据此链接,“||”的优先级应该比“=”高:https://tldp.org/LDP/abs/html/opprecedence.html