GUI de inspeção de conteúdo do sistema de arquivos (como gconf- / dconf-editor)?

2

Dentro de, por exemplo, /sys/kernel/debug/tracing , o kernel disponibiliza muitas configurações como arquivos, cujo conteúdo deve ser lido para ver qual é essa configuração. É claro que digitar cat /sys/kernel/debug/tracing/... a cada vez para ver a configuração é meio entediante; então agora estou usando essa função para percorrer e inspecionar essa parte do sistema de arquivos (precisa ser chamado em sudo ):

#!/usr/bin/env bash

function recourse_print() {
  local LVL=$2
  local IND="$(printf ' %.0s' $(seq 1 $LVL) )-"
  for ix in $(ls --group-directories-first --reverse "$1" | tac); do
    local FP="$1/$ix"
    if [ -f "$FP" ]; then
      echo "$IND $ix: $(timeout -s SIGALRM 1 cat $FP 2>&1 | awk 1 ORS=' ; ' | head -c 50) ... "
    elif [ -d "$FP" ]; then
      echo "$IND $ix [d]"
      local NL=$((LVL+1))
      if [ $((LVL < 3)) = 1 ] ; then
        recourse_print "$FP" $NL
      fi
    fi
  done
}

recourse_print /sys/kernel/debug/tracing 1

Isso é bom, na primeira execução:

 - available_events: i915:i915_gem_object_create ; i915:i915_gem_object ... 
 - available_filter_functions: cpumask_weight ; run_init_process ; init_post ; in ... 
 - available_tracers: blk function_graph mmiotrace wakeup_rt wakeup func ... 
 - buffer_size_kb: 8192 ;  ... 
 - current_tracer: function ;  ... 
...
 - per_cpu [d]
  - cpu0 [d]
   - stats: entries: 0 ; overrun: 0 ; commit overrun: 0 ;  ... 
   - trace: # tracer: function ; # ; #           TASK-PID    C ... 
   - trace_pipe:  ... 
   - trace_pipe_raw:  ... 
  - cpu1 [d]
   - stats: entries: 0 ; overrun: 0 ; commit overrun: 0 ;  ... 
   - trace: # tracer: function ; # ; #           TASK-PID    C ... 
   - trace_pipe:  ... 
   - trace_pipe_raw:  ... 
...

O problema é que - existem tantas entradas, torna-se difícil manter o controle e o foco dentro dessa lista em um terminal.

Uma coisa que desejo para isso, foi que havia uma GUI do sistema de arquivos, que faria o mesmo - isto é, percursivamente recursivamente um diretório, e abrir quaisquer arquivos e exibir um resumo de uma linha do conteúdo (tempo limite em caso de pipes) - de modo que a hierarquia de diretórios seja exibida como nós da árvore da GUI, que podem ser expandidos / compactados; exemplos para isso são dconf-editor :

...ougconf-editor:

Nesse caso, imagino que o painel esquerdo mostre a árvore de subpastas, e o "Nome" em "Nome / Valor" seria o nome do arquivo, e o "Valor" seria um resumo de uma linha (início truncado) do conteúdo do arquivo (onde eu esperaria os caracteres típicos como .�.�j�,�,{... renderizados no caso de o arquivo possuir conteúdo binário). Eu não esperaria que um aplicativo desse tipo processasse, digamos, caixas de seleção (mesmo que um determinado arquivo tenha um conteúdo que possa ser definido como 0 ou 1); mas seria incrível se pudesse abrir todo o conteúdo do arquivo (para arquivos somente texto) em uma nova janela no duplo-clique.

Existe um aplicativo independente que pode fazer algo assim - e se não, existe um plugin para, digamos, o Nautilus, que poderia adicionar uma coluna extra no modo de exibição de lista, que poderia ser roteirizado para extrair um resumo de uma linha do conteúdo do arquivo?

    
por sdaau 29.01.2014 / 11:15

1 resposta

2

Bem, parece que posso usar o Nautilus antigo para fazer isso, mas prefiro saber se há um aplicativo independente que possa se comportar assim. Agradecimentos a Informações de metadados de música e EXIF na exibição de lista do Nautilus [Extensão de colunas do Nautilus - PPA] ~ Web Upd8: Blog do Ubuntu / Linux , eu aprendi sobre o plugin Python "Nautilus Columns", e foi relativamente fácil modificá-lo para mostrar um campo "summary" dos primeiros bytes em um arquivo.

O código está abaixo, como coltextsummary.py - siga as instruções nos comentários, depois que o Nautilus for reiniciado, na guia Nautilus / Editar / Preferências ... / Colunas da lista, marque a coluna "Resumo" (deve seja o último); em seguida, feche a janela "Preferências de gerenciamento de arquivos". Agora, quando você alterna para o modo de exibição de lista, deve haver uma coluna "Resumo", com os primeiros 50 caracteres de cada arquivo mostrado. Nota: testado no Nautilus 2.32.2.1, Ubuntu 11.04.

Primeiro, observe que você precisa de permissão de superusuário para navegar em /sys/kernel/debug e, de fato:

sudo nautilus /sys/kernel/debug

... parece funcionar bem, também no modo de exibição de lista. No entanto, se você tentar abrir o diretório tracing aqui, ou clicando duas vezes ou expandindo o nó no modo de exibição de lista, o Nautilus fará apenas uma "rotação vazia" dizendo "Carregando":

Aúnicamaneiradefazerissofuncionarnessediretóriofoiquandotenteiexecutarogdb,parainspecionarqualpoderiaseroproblema:

$sudogdb--argsnautilus/sys/kernel/debug...Readingsymbolsfrom/usr/bin/nautilus...(nodebuggingsymbolsfound)...done.(gdb)r...

Note que, mesmo com a abordagem gdb , o Nautilus fará "empty" "loading" se você tentar abrir /sys/kernel/debug/tracing diretamente da linha de comando e alterna para List View; ou se você tentar abrir tracing clicando duas vezes em sua entrada em /sys/kernel/debug . A única maneira de obter itens de árvore com expansão é executá-lo conforme mencionado acima e usar o Modo de Exibição de Lista para /sys/kernel/debug e expandir o nó tracing (e seus filhos) para lá.

Bem - de qualquer forma, é por isso que eu gostaria que houvesse uma GUI independente para isso (não ter que executar nautilus em gdb :) ); mas até isso vai me ajudar por agora ...

O código do plug-in:

coltextsummary.py :

#!/usr/bin/python

# based on bsc-v2.py from "nautilus-columns",
# https://launchpad.net/~nilarimogard/+archive/webupd8/+packages?batch=75&memo=225&start=225

# this script can installed to the current user account by running the following commands:

# mkdir ~/.nautilus/python-extensions
# cp coltextsummary.py ~/.nautilus/python-extensions
# chmod a+x ~/.nautilus/python-extensions/coltextsummary.py

# alternatively, you can be able to place the script in:
# /usr/lib/nautilus/extensions-2.0/python/
# (here to make it available to all users - also superuser)

# nautilus -q   # to refresh

__author__ = "sdaau"
__version__ = "0.0.1"
__appname__ = "nautilus-coltextsummary"


import os
import urllib
import nautilus
import select

class ColumnExtension(nautilus.ColumnProvider, nautilus.InfoProvider):
  __dbg = 0
  def __init__(self):
    print "Initializing" , __appname__ , __version__
    pass

  def get_columns(self):
    return (
      nautilus.Column("NautilusPython::summary_column","summary","Summary","Text Content Summary"),
    )

  def update_file_info(self, file):
    # set defaults to blank
    file.add_string_attribute('summary', '[none]')

    if file.get_uri_scheme() != 'file':
      return

    # strip file:// to get absolute path
    filename = urllib.unquote(file.get_uri()[7:])

    # for some reason, even here we can end up with directories!
    if self.__dbg==1: print filename
    # so try another check to skip them:
    if not(os.path.isfile(filename)):
      if self.__dbg==1: print "Not a file: " + filename + " ; skipping..."
      return

    # http://stackoverflow.com/questions/21429369/read-file-with-timeout-in-python
    # get summary, for all files # if file.is_mime_type('image/jpeg'):
    timeout = 0.5
    maxbytes = 50
    f = open(filename, "r")
    rrdy, wrdy, xrdy = select.select([f], [], [], timeout);
    summary="."
    if rrdy == []:
      summary = "[n/a]"
    else:
      summary = os.read(f.fileno(), maxbytes)
      summary = summary.replace('\n', ' ; ')
    file.add_string_attribute('summary', summary)
    f.close()

    self.get_columns()
    
por 29.01.2014 / 18:48

Tags