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/

ファイルがルート所有であることを簡単に知るために、3番目と4番目の列のキーワード「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すべてのファイル名の単語にも色が付けられます。

パイプ使用率チェックを追加していませんが、ここの他の回答で確認できます。

関連情報