/etc/profile.d의 어떤 파일이 CentOS 7.9에서 제공되며 어떤 순서로 제공됩니까? (별칭을 정의하는 데 사용됨)

/etc/profile.d의 어떤 파일이 CentOS 7.9에서 제공되며 어떤 순서로 제공됩니까? (별칭을 정의하는 데 사용됨)

CentOS 7.9의 별칭/환경 변수와 관련된 질문이 있습니다. ll에 대한 별칭을 만들려고 합니다.

echo 'alias ll="ls -alhF --color=auto"' > /etc/profile.d/Z-alias-ll.sh

그러나 이 작업을 수행하고 콘솔을 다시 시작한 후(저는 새로운 DigitalOcean CentOS 7.9 Droplet 및 해당 Droplet 콘솔을 사용하고 있습니다) "ll을 입력"하면 다음과 같이 표시됩니다.

ll is aliased to `ls -l --color=auto'

grep을 사용하여 폴더에서 "alias ll" 문자열을 검색할 때:

grep -rnw /etc/profile.d -e 'alias ll'

colorls.sh와 colorls.csh라는 두 개의 파일이 더 제공되었습니다.

/etc/profile.d/Z-alias-ll.sh:1:alias ll="ls -alhF --color=auto"
/etc/profile.d/colorls.csh:13:alias ll 'ls -l'
/etc/profile.d/colorls.csh:66:alias ll 'ls -l --color=auto'
/etc/profile.d/colorls.sh:9:  alias ll='ls -l' 2>/dev/null
/etc/profile.d/colorls.sh:55:alias ll='ls -l --color=auto' 2>/dev/null

이 파일을 이동하거나 삭제하면 내 별칭이 작동합니다. 그래서 파일이 내 별칭을 덮어쓰는 것 같아요. 그러나 파일 이름 앞에 Z를 붙였기 때문에 후자는 나중에 선택될 것이라고 생각했기 때문에 전자를 덮어쓸 것이라고 생각했습니다. 우분투 방식에서 작동하는 방식이기 때문에 c* 뒤에 Z*를 붙였습니다.

어쩌면 내가 거꾸로 가고 있다고 생각해서 이렇게도 했습니다.

echo 'alias ll="ls -alhF --color=auto"' > /etc/profile.d/0-alias-ll.sh
echo 'alias ll="ls -alhF --color=auto"' > /etc/profile.d/-alias-ll.sh
echo 'alias ll="ls -alhF --color=auto"' > /etc/profile.d/alias-ll.sh

하지만 콘솔을 다시 시작해도 "type ll"은 여전히 ​​"ll은 `ls -l --color=auto'의 별칭입니다"라고 표시됩니다.

마지막으로 가져오는 파일 이름을 테스트하기 위해 다음을 수행했습니다.

echo 'alias testalias="ls -a"' > /etc/profile.d/0-alias-testalias.sh
echo 'alias testalias="ls -lh"' > /etc/profile.d/alias-testalias.sh
echo 'alias testalias="ls -F"' > /etc/profile.d/Z-alias-testalias.sh

다시 시작한 후 "testalias 입력"을 실행하면 "testalias의 별칭은 'ls -lh'입니다."가 표시됩니다. 따라서 마지막으로 얻은 것은 alias-testalias.sh 파일입니다. 그러나 알파벳 순으로 다른 둘 사이에 있기 때문에 이것이 왜 그런지 이해가 되지 않습니다.

내 /root/.bashrc에는 다음이 포함됩니다.

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

잘 모르겠지만 /etc/bashrc의 이 부분이 /etc/profile.d 파일을 가져오는 것 같습니다.

SHELL=/bin/bash
# Only display echos from profile.d scripts if we are no login shell
# and interactive - otherwise just process them to set envvars
for i in /etc/profile.d/*.sh; do
    if [ -r "$i" ]; then
        if [ "$PS1" ]; then
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done

sort.sh 파일을 만들었습니다.

for i in /etc/profile.d/*.sh; do
     echo $i
done

그런 다음 "bash sort.sh"를 실행하면 다음이 표시됩니다.

/etc/profile.d/0-alias-ll.sh
/etc/profile.d/0-alias-testalias.sh
/etc/profile.d/256term.sh
/etc/profile.d/-alias-ll.sh
/etc/profile.d/alias-ll.sh
/etc/profile.d/alias-testalias.sh
/etc/profile.d/colorgrep.sh
/etc/profile.d/colorls.sh
/etc/profile.d/lang.sh
/etc/profile.d/less.sh
/etc/profile.d/which2.sh
/etc/profile.d/Z-alias-ll.sh
/etc/profile.d/Z-alias-testalias.sh

colorls.sh는 별칭 ll="ls -alhF --color=auto"를 정의하려고 하는 다른 파일 사이에 있습니다.

여기서 구매 주문은 어떻게 이루어지나요? 파일 이름 "colorls.sh"가 0-alias-ll.sh, -alias-ll.sh, alias-ll.sh 및 Z-alias-ll.sh에서 유래한 이유는 무엇입니까? 알파벳순으로는 중간에 있지만 내 sort.sh 파일은 중간에 정렬합니다.

/etc/bashrc에 "if" 조건이 있을까요? 이러한 조건이 정확히 무엇을 하는지, if 조건이 아닌 다른 조건인지 잘 모르겠습니다.

관련 정보