在使用该rpm命令时,我注意到如果我安装some-package-1.0然后执行另一个rpm -ivh some-package-1.1包,当我执行rpm -qa | grep some-package以下操作时,将列出两个包:
some-package-1.0
some-package-1.1
Run Code Online (Sandbox Code Playgroud)
但是,如果我通过 升级,而不是安装 1.1,rpm -Uvh some-package-1.1当我执行rpm -qa | grep some-package.
现在相同的行为是否适用于yum install和yum update?
我问是因为使用rpm -U(upgrade) 命令升级/安装包不一定要存在,但是yum update(如果我没记错的话)包必须已经存在。
我特别想知道使用它们的版本指定包的结果,例如some-package-1.0. 总而言之,我想知道的是我是否有两个特定版本,例如some-package-1.0和some-package-1.1:
yum install在 1.0 已经安装后在 1.1 上执行 a ,列出 2 个包?yum update some-package-1.1成功会替换some-package-1.0吗?我在 Bash 脚本中遇到了一个命令,其中发现:
find /var/log/abcd -type f
Run Code Online (Sandbox Code Playgroud)
上面的命令是在清理日志文件的上下文中。我知道有什么find作用。
看过之后-type f,我查看了它的手册页。我必须在BASH_BUILTINS(1) 的手册页中看到它
type命令下 -f 标志的描述是:-
The -f option suppresses shell function lookup, as with the command builtin.
Run Code Online (Sandbox Code Playgroud)
以下是我的问题:
type?-f国旗的意义是什么?typewithfind命令有什么用?[编辑]:-在阅读了到目前为止的所有评论和答案之后,我想提一下我对-type option in command findVs 的误解的原因type command。这一切都发生了,因为我一直假设直到日期只看到find带有单个减号 '-'的短选项(在命令的情况下测试),例如,ls -l. 大多数情况下,我看到带有双减号 '--' 的长选项,例如ls --version.
我需要安装运行 Red Hat 的虚拟机中缺少的软件包。我怎么做?
我应该使用什么命令来安装/删除/升级 .rpm 包?
与 RedHat/CentOS 相关的问题。我对包和库以及如何将它们固定到固定版本之间有点困惑。
在最近的 libxcb 版本中有一个 X11 翻转错误会影响我的 C 程序。libxcb-1.5-1 没有那个错误。
所以我做了:
# yum remove libxcb-devel
# rpm -Uvh --oldpackage libxcb-1.5-1.el6.i686.rpm
Run Code Online (Sandbox Code Playgroud)
现在错误消失了,我的软件运行良好。
快进几周,错误又回来了。
# yum info libxcb-devel
Loaded plugins: refresh-packagekit, security
Available Packages
Name : libxcb-devel
Arch : i686
Version : 1.9.1
Release : 2.el6
Size : 1.0 M
Repo : sl-security
Run Code Online (Sandbox Code Playgroud)
但是是安装的版本还是通过 repo 可用的版本?我如何知道当前安装的是哪个版本的 libxcb?
$ ll /usr/lib/libxcb.so*
lrwxrwxrwx 1 root root 15 Aug 6 03:38 /usr/lib/libxcb.so.1 -> libxcb.so.1.1.0*
-rwxr-xr-x 1 root root 130752 Oct 14 2014 /usr/lib/libxcb.so.1.1.0*
$ …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的字符串rev00000010,我只想要最后一个数字,在这种情况下是 10。
我试过这个:
TEST='rev00000010'
echo "$TEST" | sed '/^[[:alpha:]][0]*/d'
echo "$TEST" | sed '/^rev[0]*/d'
Run Code Online (Sandbox Code Playgroud)
是否有一种简洁的方法可以在命令行中测试本地类似 Bourne 的 shell 对数组的支持?
这总是可能的:
$ arr=(0 1 2 3);if [ "${arr[2]}" != 2 ];then echo "No array support";fi
Run Code Online (Sandbox Code Playgroud)
或测试$SHELL和外壳版本:
$ eval $(echo "$SHELL --version") | grep version
Run Code Online (Sandbox Code Playgroud)
然后阅读手册页,假设我可以访问它。(即使在那里,从写/bin/bash,我假设所有类似Bourne外壳承认的长选项--version,当减免KSH例如)。
我正在寻找一个简单的测试,它可以无人参与,并在脚本开始时甚至在调用它之前合并到使用部分中。
我想使用su -c以 root 身份运行多个命令。我不想为此使用额外的脚本。
我尝试了以下方法:
su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & " -c "ls -lh"
Run Code Online (Sandbox Code Playgroud)
但它只执行ls不是第一个。
我尝试了以下方法:
su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"
Run Code Online (Sandbox Code Playgroud)
但它说分号有错误;。
你知道怎么做吗?
我正在开发一个从变量构造复杂命令的 shell 脚本,例如这样(使用我从 Bash FAQ 中学到的技术):
#!/bin/bash
SOME_ARG="abc"
ANOTHER_ARG="def"
some_complex_command \
${SOME_ARG:+--do-something "$SOME_ARG"} \
${ANOTHER_ARG:+--with "$ANOTHER_ARG"}
Run Code Online (Sandbox Code Playgroud)
如果定义了这些变量,此脚本会动态添加参数--do-something "$SOME_ARG"和添加--with "$ANOTHER_ARG"到some_complex_command。到目前为止,这工作正常。
但是现在我还希望能够在我运行时打印或记录命令,例如当我的脚本在调试模式下运行时。因此,当我的脚本运行时some_complex_command --do-something abc --with def,我还希望将此命令放在一个变量中,以便我可以将它记录到系统日志中。
Bash FAQ 演示了为此目的使用DEBUG陷阱和$BASH_COMMAND变量(例如用于调试目的)的技术。我已经尝试过使用以下代码:
#!/bin/bash
ARG="test string"
trap 'COMMAND="$BASH_COMMAND"; trap - DEBUG' DEBUG
echo "$ARG"
echo "Command was: ${COMMAND}"
Run Code Online (Sandbox Code Playgroud)
这有效,但它不会扩展命令中的变量:
host ~ # ./test.sh
test string
Command was: echo "$ARG"
Run Code Online (Sandbox Code Playgroud)
我想我必须使用 eval 扩展echo "$ARG"到echo test string(至少我还没有找到没有的方法eval …
我f根据此处的示例(在“带参数的选项”下)在 Bash 中定义了该函数:
f () {
while getopts ":a:" opt; do
case $opt in
a)
echo "-a was triggered, Parameter: $OPTARG" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
return 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
return 1
;;
esac
done
}
Run Code Online (Sandbox Code Playgroud)
虽然他们使用脚本,但我直接在 shell 中定义函数。
当我第一次启动 Bash 并定义函数时,一切正常:f -a 123prints -a was triggered, Parameter: 123。但是当我第二次运行完全相同的行时,没有打印任何内容。
是什么导致了这种行为?它发生在 Bash 3.2 和 4.3 中,但它在 Zsh 5.1 中工作正常。这令人惊讶,因为该示例应该用于 Bash,而不是用于 Zsh。
我有一个很长的文本文件(从这里开始),它应该包含 6 个十六进制字符,然后是一个“中断”(它显示为一个字符,似乎没有在下面的代码降价中正确显示),然后是几个单词:
00107B Cisco Systems, Inc
00906D Cisco Systems, Inc
0090BF Cisco Systems, Inc
5080 Cisco Systems, Inc
0E+00 ASUSTek COMPUTER INC.
000C6E ASUSTek COMPUTER INC.
001BFC ASUSTek COMPUTER INC.
001E8C ASUSTek COMPUTER INC.
0015F2 ASUSTek COMPUTER INC.
2354 ASUSTek COMPUTER INC.
001FC6 ASUSTek COMPUTER INC.
60182E ShenZhen Protruly Electronic Ltd co.
F4CFE2 Cisco Systems, Inc
501CBF Cisco Systems, Inc
Run Code Online (Sandbox Code Playgroud)
我已经环顾四周,但看不到在这种情况下可以工作的东西。我的问题是,我该如何使用grep/ sed/ awk/perl删除不与刚好6个十六进制字符,然后一个“破”启动这个文本文件中的所有行?
PS 对于加分,根据十六进制字符(即000000-> FFFFFF)按字母顺序和数字顺序对文件进行排序的最佳方法是什么?我应该使用sort吗?