Existe um link simbólico padrão para o diretório inicial dos usuários atuais?

9

O shell pode se expandir ~para o diretório inicial. $HOMEgeralmente tem o mesmo acordo, mas geralmente você deseja consultar o diretório inicial dos usuários atuais de um contexto que pode não suportar essa expansão.

Eu tive arquivos de configuração onde $HOMEfunciona, mas ~não funciona e vice-versa.

Eu acho que esse fusível poderia fornecer algo nesse sentido, algo como /var/myself->$HOME

Com isso, eu poderia colocar valores nos arquivos de configuração para apontar para coisas como /var/myself/backdrops/pornography/wtf/yarly.jpg

Já existe algo assim? Caso contrário, existem boas razões para não haver algo assim?

Lerc
fonte
2
Isso realmente parece uma boa idéia, e o fusível pode fazer isso de maneira bastante trivial se eu me lembrar da interface corretamente
Michael Mrozek

Respostas:

6

Entendo sua preocupação, mas a resposta é "não", não existe.
O método usual é perguntar ao sistema operacional o caminho inicial do usuário ou obter a variável $ HOME.

Todas essas opções precisam sempre de alguma codificação do aplicativo. Muitos aplicativos, como o bash, oferecem o "alias" ~ (o open (2) não traduz isso).

Obviamente, um vfs ou um módulo de fusível pode ser implementado para fazer isso. Provavelmente há algo para fazer isso, eu vou perguntar isso!

Mas é realmente necessário? Você pode usar uma solução alternativa como:

Keymon
fonte
Peço a ferramenta vfs: unix.stackexchange.com/questions/1811/…
Keymon
0

Um truque (no Linux, pelo menos) seria alterar o diretório para $HOMEantes de executar o aplicativo e depois usá-lo /proc/self/cwd/...no arquivo de configuração.

Neil Mayhew
fonte
Eu gosto do hackishness disso, mas presumivelmente ele teria problemas, pois o processo altera o diretório atual. Eu gostaria de um / proc / PID / iwd para o diretório de trabalho inicial.
Lerc 12/09
... e, nesse caso, a / proc / PID / home
Lerc 12/12
@Lerc, se ele vai em um arquivo de configuração ele precisa ser /proc/selfnão /proc/PID, desde que você não pode saber com antecedência o que o PID vai ser.
Neil Mayhew
@ Lerc, sim, se o processo mudar de diretório, ele falhará, mas normalmente os programas leem o arquivo de configuração uma vez quando iniciam e depois armazenam em cache os valores na memória. Tudo depende do programa com o qual você está trabalhando e, se o programa não oferecer flexibilidade suficiente, na linha de comando ou na sintaxe do arquivo de configuração, você ficará preso.
Neil Mayhew
Sim, eu quis dizer / proc / PID / home, o que significa que todos os diretórios proc / PID devem suportar isso e, portanto, incluir / proc / self
#
0

A maioria dos programas permite especificar um caminho para o arquivo de configuração na linha de comando. Assim, você pode escrever um wrapper que pega um arquivo de configuração padrão, filtra-o para substituir coisas como $HOMEo usuário atual e depois passa o arquivo de configuração temporário modificado para o programa.

Neil Mayhew
fonte
Se você fizer isso, poderá efetivamente especificar um caminho para o arquivo de configuração, longe do usuário. Pode ser possível se você gosta de rally com um exe de invólucro.
Lerc 13/09/10
0

Você pode obter o pid de requestin user e perguntar ao sistema de seu diretório pessoal. Então é possível.

No entanto, não tenho certeza se não há programas SUID que assumiriam o FS como estático.

Editar:

struct fuse_context *ctx = fuse_get_context ();
struct passwd pwd, *ppwd;
char buffer[1024];
int status = getpwuid_r (ctx->ui, &pwd, buffer, sizeof(buffer), &ppwd);
if (status == 0) {
  if (ppwd == NULL) {
    // No record found
  } else {
    // Handle record
  }
} else {
    // Handle error
} 

O código acima não é ideal, mas deve funcionar para casos comuns.

Maciej Piechotka
fonte
Como você encontraria o diretório inicial dele depois de saber qual usuário é?
WhyNotHugo
Usando getpwuidou getpwuid_r.
Maciej Piechotka