bash: /usr/bin/sed: 해당 파일이나 디렉터리가 없습니다.

bash: /usr/bin/sed: 해당 파일이나 디렉터리가 없습니다.

테스트 서버에서 의도적으로 삭제했습니다 ?????. /심볼릭 링크 /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필요한지 이해가 안 됩니다.sedEnter

[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 명령이 실행됩니까? 아니면 다른 일이 발생합니까?sedstream editorsed

운영 체제는 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 구성의 한 가지 측면은 사용법입니다 /etc/profile.d/vte.sh. VTE는 PROMPT_COMMAND터미널 제어 코드를 통해 자체적으로 추가 정보를 제공하기 위해 이 스크립트를 사용하여 재정의합니다. 특히 이 스크립트는 VTE 셸에 현재 디렉터리를 알려주는 데 사용됩니다. 이전에는 이를 읽는 데 VTE 구성 요소를 사용했지만 /proc/<pid>/cwdVTE 업스트림에 따르면 이 접근 방식에는 문제가 많아 /etc/profile.d/vte.sh.

원천

이 동작은 GNOME 터미널을 사용할 때만 SSH를 통해서는 발생하지 않습니다. Windows 시스템에 대해 더 잘 아는 사람이 더 자세한 답변을 작성해 주신다면 기꺼이 받아들이겠습니다. 현재 그놈에 대한 이해가 제한되어 있기 때문입니다.

답변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 commandcommandBash 구성 파일에서 사용법을 찾으십시오.

답변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]\+ *//'

안정적인!

관련 정보