저는 CentOS 5.9 시스템에서 작업 중이며 단지 입력하고 싶습니다.
sudo vi 일부 파일
그리고 믿음직한 vim에게 구문 강조 등을 하도록 하세요. 이것은 간단해 보이지만 여러 번 시도한 후에도 여전히 작동하지 않습니다.
root@localhost> which vi
alias vi='vim'
/usr/bin/vim
root@localhost> sudo which vi
/bin/vi
root@localhost> sudo -i which vi
/bin/vi
root@localhost> sudo -E which vi
/bin/vi
vim이 기본적으로 호출되는지 확인하기 위해 루트로 로그인했습니다 vi somefile
. 그게했다. 또한 환경을 보존하기 위해 -E를 사용하고 로그인 스크립트를 실행하기 위해 -i를 사용해 보았습니다. 그건 소용없어요. 내 .profile 및 /etc/environment에서 편집기를 vim으로 내보내고 vi를 vim의 별칭으로 설정했습니다.
또한 /etc/sudoers의 env_reset 줄을 주석 처리했습니다.
또 무엇을 시도해야 합니까? vi를 vim으로 바꾸는 것이 이렇게 어려울 것이라고는 예상하지 못했고 여기서 무슨 일이 일어나고 있는지 정말로 알고 싶습니다.
답변1
이것이 바로 이 명령 sudoedit
의 목적입니다. 사용자 환경에서 편집할 수 있도록 임시 복사본을 생성합니다. 적절한 바이너리를 찾기 위해 SUDO_EDITOR
, VISUAL
및 변수를 조회합니다 . EDITOR
편집 후에는 복사본이 원본 파일을 덮어쓰게 됩니다.
답변2
vim
대신 항상 사용하고 싶다면 다음을 vi
수행할 수 있습니다.
$ sudo ln -s /usr/bin/vim /usr/local/bin/vi
(이것은 당신이 가지고 있다고 가정합니다/usr/local/bin
앞으로 /bin
당신의 PATH
. )
물론 이것은 (시스템 로컬) 해킹이지만 매우 간단하고 효과적입니다.
답변3
나는 관찰된 동작의 원인을 PATH 변수에서 찾을 수 있다고 생각합니다. 일반 로그인 사용자로서 세그먼트는 /usr/bin
이전에 있을 /bin
수 있지만뿌리, 세그먼트가 /bin
앞에 있습니다 /usr/bin
.
그렇다면 차이점은 다음 출처 중 하나 또는 둘 다에서 추적될 수 있습니다. 사용시 PATH 값이 다른 경우스도, 이는 다음을 가리킨다.안전한 길구성 매개변수는 일반적으로 /etc/sudoers
파일이나 파일 중 하나에 설정됩니다 /etc/sudoers.d/*
. 단, 로그인 시 PATH 값이 다른 경우뿌리(1차 로그인인지, 아니면스도의 -i
/ 스위치), 및 --login
와 같은 시작 파일을 가리킵니다 ./etc/{profile,profile.d/*}
/etc/{bashrc,bash_*}
CentOS 5가 설치되어 있지 않지만 Alma 8 서버는 다음 정보를 제공합니다.
## As a regular logged-in user
$ echo $PATH
/home/me/.local/bin:/home/me/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
## Sudoing as root (notice the reverse order)
$ sudo bash -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin
## Sudoing as myself (same value)
$ sudo -u me bash -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin
## Indeed...
$ sudo grep secure_path /etc/sudoers
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
빠르게 살펴보실 수도 있습니다스도~의환경 유지매개변수를 추가하고 VISUAL 및 EDITOR가 아직 존재하지 않는 경우 예약된 변수 목록에 추가하지만 앞서 언급한 이후환경 재설정꺼지면 큰 변화가 없을 것입니다.