テストサーバーから意図的に削除しました?????
。/
シンボリックリンク/lib64
とディレクトリが削除される予定です。/media
すべてがうまくいっていましたが(すべてが壊れていました)、次の結果が気になりました。
[root@testserver /]# ls
bin boot dev etc home lib lib64 media mnt opt proc rh_share3 root run sbin srv sys tmp usr var
[root@testserver /]# rm -rf ?????
bash: /usr/bin/sed: No such file or directory
[root@testserver /]# ls
bash: /usr/bin/ls: No such file or directory
bash: /usr/bin/sed: No such file or directory
一部のパッケージには依存関係がありますが、なぜ押すのと同じくらい簡単なものがsed
必要なのか理解できません。sed
Enter
[root@testserver bin]# rpm -q --whatrequires sed
krb5-libs-1.17-18.el8.x86_64
ca-certificates-2019.2.32-80.0.el8_1.noarch
dracut-049-70.git20200228.el8.x86_64
crypto-policies-20191128-2.git23e1bf1.el8.noarch
policycoreutils-2.9-9.el8.x86_64
authselect-libs-1.1-2.el8.x86_64
cups-filters-1.20.0-19.el8.x86_64
open-vm-tools-11.0.0-4.el8.x86_64
authselect-compat-1.1-2.el8.x86_64
dhcp-client-4.3.6-40.el8.x86_64
nfs-utils-2.3.3-31.el8.x86_64
autofs-5.1.4-40.el8.x86_64
この行はなぜbash: /usr/bin/sed: No such file or directory
現れるのでしょうか?明らかにsed
欠けていると見なされますが、なぜ呼び出されますか? 。を実行すると、担当者をstrace -o bash bash
知っています。すべてのbashコマンドが実行されますか?それとも別のことが起こりますか?sed
stream editor
sed
オペレーティングシステムは、GUIを含むOOTB RHEL 8.2(Oopta)です。
編集する
出力は次のとおりですset | grep sed
。
[user1@testserver ~]$ set | grep sed
local command=$(HISTTIMEFORMAT= history 1 | sed 's/^ *[0-9]\+ *//');
COMPREPLY=($( compgen -W "$( bpftool help 2>&1 | command sed -e '/OBJECT := /!d' -e 's/.*{//' -e 's/}.*//' -e 's/|//g' )" -- "$cur" ));
COMPREPLY+=($( compgen -W "$( bpftool -jp btf 2>&1 | command sed -n 's/.*"id": \(.*\),$/\1/p' )" -- "$cur" ))
COMPREPLY+=($( compgen -W "$( bpftool -jp map 2>&1 | command sed -n 's/.*"id": \(.*\),$/\1/p' )" -- "$cur" ))
COMPREPLY+=($( compgen -W "$( bpftool -jp map 2>&1 | command grep -C2 "$type" | command sed -n 's/.*"id": \(.*\),$/\1/p' )" -- "$cur" ))
COMPREPLY+=($( compgen -W "$( bpftool -jp prog 2>&1 | command sed -n 's/.*"id": \(.*\),$/\1/p' )" -- "$cur" ))
COMPREPLY+=($( compgen -W "$( bpftool -jp prog 2>&1 | command sed -n 's/.*"tag": "\(.*\)",$/\1/p' )" -- "$cur" ))
type=$(bpftool -jp map show $keyword $ref | command sed -n 's/.*"type": "\(.*\)",$/\1/p');
COMPREPLY=($( compgen -W "$( command sed -ne 's|^iface \([^ ]\{1,\}\).*$|\1|p' /etc/network/interfaces /etc/network/interfaces.d/* 2>/dev/null )" -- "$cur" ));
COMPREPLY=($( compgen -W "$( printf '%s\n' /etc/sysconfig/network/ifcfg-* | command sed -ne 's|.*ifcfg-\([^*].*\)$|\1|p' )" -- "$cur" ));
COMPREPLY=($( compgen -W "$( command ls -B /etc/sysconfig/interfaces | command sed -ne 's|.*ifcfg-\([^*].*\)$|\1|p' )" -- "$cur" ));
COMPREPLY=($( compgen -W "$( printf '%s\n' /etc/sysconfig/network-scripts/ifcfg-* | command sed -ne 's|.*ifcfg-\([^*].*\)$|\1|p' )" -- "$cur" ));
local included=$( command sed -ne 's/^[[:blank:]]*[Ii][Nn][Cc][Ll][Uu][Dd][Ee][[:blank:]]\{1,\}\([^#%]*\)\(#.*\)\{0,1\}$/\1/p' "${configfile}" );
COMPREPLY+=($( compgen -W "$( { LC_ALL=C ifconfig -a || ip addr show; } 2>/dev/null | command sed -ne 's/.*addr:\([^[:space:]]*\).*/\1/p' -ne 's|.*inet[[:space:]]\{1,\}\([^[:space:]/]*\).*|\1|p' )" -- "$cur" ))
[[ $# -ge $OPTIND ]] && echo "error: $FUNCNAME("$@"): unprocessed arguments:" $(while [[ $# -ge $OPTIND ]]; do printf '%s\n' ${!OPTIND}; shift; done);
local hosts=$( command sed -ne 's/^[[:blank:]]*[Hh][Oo][Ss][Tt][[:blank:]]\{1,\}\([^#*?%]*\)\(#.*\)\{0,1\}$/\1/p' "${config[@]}" );
local argtype=$( LC_ALL=C $1 --help 2>&1 | command sed -ne "s|.*$prev\[\{0,1\}=[<[]\{0,1\}\([-A-Za-z0-9_]\{1,\}\).*|\1|p" );
COMPREPLY=($( compgen -W "$( LC_ALL=C $1 --help 2>&1 | command sed -ne 's/.*\(--[-A-Za-z0-9]\{1,\}=\{0,1\}\).*/\1/p' | sort -u )" -- "$cur" ));
COMPREPLY+=($( { LC_ALL=C ifconfig -a || ip link show; } 2>/dev/null | command sed -ne "s/.*[[:space:]]HWaddr[[:space:]]\{1,\}\($re\)[[:space:]].*/\1/p" -ne "s/.*[[:space:]]HWaddr[[:space:]]\{1,\}\($re\)[[:space:]]*$/\1/p" -ne "s|.*[[:space:]]\(link/\)\{0,1\}ether[[:space:]]\{1,\}\($re\)[[:space:]].*|\2|p" -ne "s|.*[[:space:]]\(link/\)\{0,1\}ether[[:space:]]\{1,\}\($re\)[[:space:]]*$|\2|p"
COMPREPLY+=($( { arp -an || ip neigh show; } 2>/dev/null | command sed -ne "s/.*[[:space:]]\($re\)[[:space:]].*/\1/p" -ne "s/.*[[:space:]]\($re\)[[:space:]]*$/\1/p" ));
COMPREPLY+=($( command sed -ne "s/^[[:space:]]*\($re\)[[:space:]].*/\1/p" /etc/ethers 2>/dev/null ));
COMPREPLY=($( compgen -W "$( command ls -RL $modpath 2>/dev/null | command sed -ne 's/^\(.*\)\.k\{0,1\}o\(\.[gx]z\)\{0,1\}$/\1/p' )" -- "$cur" ))
COMPREPLY=($( compgen -X '<defunct>' -W '$( command ps axo comm | command sed -e 1d )' -- "$cur" ));
COMPREPLY=($( compgen -X '<defunct>' -W '$( command ps axo command= | command sed -e \
COMPREPLY=($( compgen -W '`command sed -e "y/|/ /" \
COMPREPLY+=($( compgen -W "$( command sed -ne 's/^\([^[:space:]#|]\{2,\}\)|.*/\1/p' /etc/termcap 2>/dev/null )" -- "$cur" ));
答え1
この動作を引き起こすファイルはvte.sh
次の場所にあります/etc/profile.d/
。
VTE構成の1つの側面は使用法です
/etc/profile.d/vte.sh
。 VTEは、PROMPT_COMMAND
端末制御コードを介して独自の追加情報を提供するためにこのスクリプトを使用して上書きします。特に、このスクリプトはVTEシェルに現在のディレクトリを通知するために使用されます。以前はこれを読むためにVTEコンポーネントを使用していましたが、/proc/<pid>/cwd
VTEアップストリームによると、このアプローチには問題があります/etc/profile.d/vte.sh
。
この動作は、GNOME端末を使用している場合にのみSSHを介しては発生しません。 Windowsシステムについてもっと知っている人がより詳細な答えを書いてくれたら、喜んで受け入れます。現在、GNOMEの理解が限られているからです。
答え2
私考えるcommand
問題は、組み込み関数であることをオーバーライドしたことです。
$ help command | head --lines=2
command: command [-pVv] command [arg ...]
Execute a simple command or display information about commands.
command
通常、組み込みまたは実行可能ファイルを明示的に直接実行するためにエイリアスと関数を無視するために使用されます。これは無限ループを防ぐのに便利です。たとえば、
ls() {
command ls --color=auto
}
これはls
自分自身を永久に再帰的に呼び出すのではなく、実行可能ファイルを呼び出します。
unset command
command
Bash 構成ファイルで使用法を見つけます。
答え3
これは推測だけですが、動的sed
に接続された64ビットバイナリかもしれません。これを削除すると、カーネルはlib64
実行に必要な動的リンカーsed
(およびおそらく他のすべて)を見つけることができなくなります。ではなくリンカーのためのものですno such file or directory
。sed
答え4
これは/etc/profile.d/vte.shによるものです。
case "$TERM" in
xterm*|vte*)
[ -n "$BASH_VERSION" ] && PROMPT_COMMAND="__vte_prompt_command"
[ -n "$ZSH_VERSION" ] && precmd_functions+=(__vte_osc7)
;;
esac
vte_prompt_command() {
######### HERE : bash tries to look up comletions with sed ###
local command=$(HISTTIMEFORMAT= history 1 | sed 's/^ *[0-9]\+ *//')
############################################################
command="${command//;/ }"
local pwd='~'
[ "$PWD" != "$HOME" ] && pwd=${PWD/#$HOME\//\~\/}
printf "\033]777;notify;Command completed;%s\007\033]0;%s@%s:%s\007%s" "${command}" "${USER}" "${HOSTNAME%%.*}" "${pwd}" "$(__vte_osc7)"
}
ただ削除してください(正しいファイル名を使用する必要があります)。
sed 's/^ *[0-9]\+ *//'
安定!