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 조건이 아닌 다른 조건인지 잘 모르겠습니다.