ls: 루트가 파일을 소유한 경우 "사용자" 및 "그룹" 열에 다른 색상을 사용합니다.

ls: 루트가 파일을 소유한 경우 "사용자" 및 "그룹" 열에 다른 색상을 사용합니다.

를 사용하는 경우 ls -lAhF열 3과 4는 사용자 및 그룹 소유권입니다. 즉,

drwxrwxrwt 2 root  root   60 Nov 15 15:50 .X11-unix/
srwxr-xr-x 1 marti marti   0 Nov 15 15:51 .menu-cached-:0-marti=
srwxr-xr-x 1 marti marti   0 Nov 15 15:51 .pcmanfm-socket--0-marti=
drwxr-xr-x 4 root  root   80 Nov 15 15:50 dtach/
drwx------ 2 marti marti  40 Nov 16 17:36 mc-marti/
drwx------ 2 root  root   40 Nov 16 20:25 mc-root/

파일이 루트 소유임을 쉽게 알 수 있도록 세 번째와 네 번째 열의 키워드 "root"를 빨간색으로 만들고 싶습니다.

따라서 사용자 그룹이 루트가 아닌 경우 모든 것이 이전처럼 보입니다.

사용자가 루트인 경우 열 3의 키워드 "root"는 빨간색입니다. 그룹 루트의 경우에도 마찬가지입니다.

어떻게 해야 하나요? 나는 "zsh"를 쉘로 사용합니다.

ls구성하는 것은 불가능하다고 생각합니다 . 하지만 에서 별칭/함수를 사용할 수 있나요 zsh?

답변1

root출력에서 다음 함수 가 발생하면 빨간색으로 표시되고 ls그 뒤에 공백이 표시됩니다.

ls() {
    if [ -t 1 ]; then
        command ls --color=always "$@"| sed "s/root /$(tput setaf 1)root$(tput sgr0) /g"
    else
        command ls "$@"
    fi
}

이는 root사용자 및 그룹 열뿐만 아니라 " "(공백 포함)이 포함된 파일에서도 일치 root하므로 정확히 원하는 것이 아닐 수도 있습니다. 컬러 출력을 강제하면 최소한 "root"라는 파일과 일치하지 않는지 확인됩니다.

sed호출은 Zsh 관련 함수를 사용하여 대체될 수 있습니다 tput.

  • echoti:sed "s/root /$(echoti setaf 1)root$(echoti sgr0) /g"
  • 급속한 확장:( sed "s/root /${(%):-%F{red}root${(%):-%f} /g"예, 첫 번째 버팀대는 균형이 맞지 않습니다)
  • colors( autoload colors; colors):sed "s/root /${fg[red]}root${reset_color} /g"

단말기가 16개 이상의 색상을 지원하는 경우 더 큰 값을 사용할 수 있습니다 setaf. %F{red}숫자 값도 사용할 수 있습니다.nearcolor모듈원하는 RGB 값에 가장 가까운 색상을 찾는 쉬운 방법을 제공합니다.

기존이 있는 경우ls 별명, 설정을 --color=tty비활성화해야 합니다. 그렇지 않으면 --color=tty통화 후에 표시되고 자신의 색상이 비활성화됩니다.--color=alwayslsls

답변2

빠르고 더러운 솔루션:

function ls {
  command ls "$@" | grep -E --color=always "^|root "
}

단순화를 위해 root모든 파일 이름의 단어에도 색상이 지정됩니다.

파이프 사용량 확인을 추가하지 않았지만 여기의 다른 답변에서 확인할 수 있습니다.

관련 정보