Como faço para grep as permissões de diretórios e ver se ele não tem permissões de gravação?

1

Eu estou tentando escrever um script que é executado na inicialização que verifica se o sistema de arquivos de inicialização é somente leitura; se estiver, execute fsck para corrigir permissões e reinicializar.

Ponto 1: Estou tendo problemas para descobrir como grep apenas a linha de permissões de um comando ls .

Ponto 2: Também estou tendo problemas para descobrir como verificar se esse comando retorna uma string sem w .

Por exemplo, um comando ls -l retorna uma linha semelhante à seguinte:

drwx-----+ 5 Admin staff 170 Oct 12 05:41 Documents

Eu quero pegar apenas a seguinte string:

drwx-----+

Em seguida, verifique se ele não contém permissões de gravação.

Abaixo está o script que eu tenho até agora.

#!/bin/bash

$DIR='home'

#If $DIR has only read permissions run loop
if [[ #point 1 = #point 2 ]] then
    #fix permissions on $DIR
    umount ${DIR}
    fsck
    reboot
fi
    
por Nicholas Adamou 11.11.2016 / 16:43

2 respostas

1

Nunca analise a saída de ls . Criação de Scripts 101.

man find
man findmnt

O sistema de arquivos raiz nunca é montado como somente leitura se o sistema atingir o destino de multiusuário ou o nível de execução. Isso significa que o único usuário que pode encontrar o sistema de arquivos raiz montado somente para leitura é o root. E o root pode escrever em qualquer lugar, independentemente das permissões. Portanto, para verificar se o sistema de arquivos raiz é somente leitura, você pode simplesmente tentar tocar em um arquivo:

if touch /testfile ; then
# The root filesystem is read-write
  rm /testfile
else
# The root filesystem is read-only
# Do something about it
fi

No entanto, isso não deve ser necessário. O sistema deve ser colocado em um shell de usuário único se não puder montar o sistema de arquivos raiz de leitura / gravação.

    
por 11.11.2016 / 18:12
3
if ! [[ -w "$DIR" ]]; then
    # $DIR is not writeable
fi

Isso se aplicará para o usuário atual . Não sei se é isso que você quer.

EDIT: Se você precisa extrair a string de permissões, uma maneira simples é usando stat:

stat -c %A "$DIR"

retorna algo como:

-rwxr-xr-x
    
por 11.11.2016 / 16:47