Чи є стандартне символічне посилання на домашній каталог поточних користувачів?


9

Оболонка може розширитися ~до домашнього каталогу. $HOMEзазвичай має ту саму угоду, але часто ви хочете посилатися на домашній каталог поточних користувачів з контексту, який може не підтримувати таке розширення.

У мене були конфігураційні файли, де вони $HOMEпрацюють, але ~не так і навпаки.

Я б здогадався, що запобіжник може забезпечити щось подібне, щось на зразок /var/myself->$HOME

З цим я міг розміщувати значення у конфігураційних файлах, щоб вказувати на такі речі /var/myself/backdrops/pornography/wtf/yarly.jpg

Чи є вже щось подібне? Якщо ні, чи є вагомі причини, щоб не було чогось подібного?


2
Це насправді здається дуже гарною ідеєю, і запобіжник міг би зробити це досить тривіально, якщо я правильно запам’ятав інтерфейс
Michael Mrozek

Відповіді:


6

Я розумію ваше занепокоєння, але відповідь "ні" немає такого.
Звичайний метод - задати ОС домашній шлях користувача або отримати змінну $ HOME.

Усі ці параметри завжди потребують певного кодування з програми. Дуже багато програм, як-от bash, пропонують "псевдонім" ~ (відкритий (2) не перекладає це).

Звичайно, для цього може бути реалізований vfs або модуль запобіжників. Напевно, є що робити, я збираюся це запитати!

Але чи справді це потрібно? Ви можете використовувати вирішення на зразок:


Я прошу інструмент vfs: unix.stackexchange.com/questions/1811/…
Кеймон

0

Один фокус (як мінімум, в Linux) - змінити каталог на, $HOMEперш ніж запустити додаток, а потім використовувати його /proc/self/cwd/...у конфігураційному файлі.


Мені подобається хакерство цього, але, мабуть, це може зіткнутися з проблемами, оскільки процес змінює поточний каталог. Я хотів би / proc / PID / iwd для початкового робочого каталогу.
Лерк

... і з цього приводу a / proc / PID / home
Lerc

@Lerc, якщо це відбувається в файлі конфігурації він повинен бути /proc/selfНЕ /proc/PID, так як ви не можете знати заздалегідь , що PID буде.
Ніл Мейхью

@Lerc, так, якщо процес зміни каталогів, то він вийде з ладу, але зазвичай програми читають конфігураційний файл один раз при їх запуску, а потім кешують значення в пам'яті. Все залежить від програми, з якою ви працюєте, і якщо програма не пропонує достатньої гнучкості ні в командному рядку, ні в синтаксисі файлу конфігураційного файлу, ви зупинилися.
Ніл Мейхью

Так, я мав на увазі / proc / PID / home, щоб означати, що всі pro / PID dir повинні підтримувати це і таким чином включати / proc / self
Lerc

0

Більшість програм дозволяють вказати шлях до файлу конфігурації в командному рядку. Таким чином, ви можете написати обгортку, яка приймає стандартний файл конфігурації, фільтрує її, щоб замінити речі, як $HOMEдля поточного користувача, а потім передає модифікований тимчасовий файл конфігурації програмі.


Якщо ви це зробите, то ви ефективно скористалися можливістю вказувати шлях до конфігураційного файлу від користувача. Можливо, можливо, якщо ви захоплюєтесь ралі з фанером.
Лерк

0

Ви можете отримати сторінку запита користувача та запитати систему його домашнього каталогу. Так можливо.

Однак я не впевнений, чи немає програм SUID, які б вважали FS статичним.

Редагувати:

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
} 

Вищевказаний код не є ідеальним, але повинен працювати в загальних випадках.


Як би ви знайшли його домашній каталог після того, як знаєте, що це за користувач?
WhyNotHugo

Використання getpwuidабо getpwuid_r.
Мацей П'єхотка
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.