Apakah ada tautan simbolis standar ke direktori home pengguna saat ini?

9

Shell dapat diperluas ~ke direktori home Anda. $HOMEbiasanya memiliki kesepakatan yang sama, tetapi seringkali Anda ingin merujuk ke direktori home pengguna saat ini dari konteks yang mungkin tidak mendukung ekspansi tersebut.

Saya memiliki file konfigurasi tempat $HOMEbekerja tetapi ~tidak dan sebaliknya.

Saya kira sekering itu dapat memberikan sesuatu di sepanjang garis ini, sesuatu seperti /var/myself->$HOME

Dengan itu saya bisa menempatkan nilai dalam file konfigurasi untuk menunjuk ke hal-hal seperti /var/myself/backdrops/pornography/wtf/yarly.jpg

Apakah sudah ada yang seperti ini? Jika tidak, adakah alasan bagus untuk tidak ada yang seperti ini?

Lerc
sumber
2
Ini sebenarnya tampak seperti ide yang sangat bagus, dan sekering dapat melakukan ini secara sepele jika saya ingat antarmuka dengan benar
Michael Mrozek

Jawaban:

6

Saya mengerti keprihatinan Anda tetapi jawabannya adalah "tidak" tidak ada hal seperti itu.
Metode yang biasa dilakukan adalah menanyakan OS jalur asal pengguna, atau mendapatkan variabel $ HOME.

Semua opsi ini perlu selalu dikodekan dari aplikasi. Banyak aplikasi, seperti bash, menawarkan "alias" ~ (open (2) tidak menerjemahkannya).

Tentu saja modul vfs atau sekering dapat diimplementasikan untuk melakukan ini. Mungkin ada sesuatu untuk dilakukan, saya akan bertanya itu!

Tetapi apakah ini benar-benar dibutuhkan? Anda dapat menggunakan solusi seperti:

Keymon
sumber
Saya meminta alat vfs
Keymon
0

Salah satu trik (di Linux, setidaknya) adalah mengubah direktori $HOMEsebelum menjalankan aplikasi dan kemudian gunakan /proc/self/cwd/...dalam file konfigurasi.

Neil Mayhew
sumber
Saya suka peretasan ini tetapi mungkin akan mengalami masalah jika proses mengubah direktori saat ini. Saya ingin / proc / PID / iwd untuk direktori kerja awal.
Lerc
... dan dalam hal ini a / proc / PID / home
Lerc
@Lerc, jika itu akan di file konfigurasi itu perlu /proc/selftidak /proc/PID, karena Anda tidak bisa tahu sebelumnya apa yang akan PID menjadi.
Neil Mayhew
@ Lerc, ya, jika proses mengubah direktori maka itu akan gagal, tetapi biasanya program membaca file konfigurasi sekali ketika mereka mulai, dan kemudian cache nilai-nilai dalam memori. Semuanya tergantung pada program yang Anda gunakan, dan jika program tidak menawarkan fleksibilitas yang cukup, baik pada baris perintah atau dalam sintaks file konfigurasi, maka Anda mandek.
Neil Mayhew
Ya, maksud saya / proc / PID / home berarti semua dir / proc PID harus mendukung ini dan dengan demikian termasuk / proc / self
Lerc
0

Sebagian besar program memungkinkan Anda menentukan jalur ke file konfigurasi pada baris perintah. Jadi Anda bisa menulis pembungkus yang mengambil file konfigurasi standar, memfilternya untuk menggantikan hal-hal seperti $HOMEuntuk pengguna saat ini, dan kemudian meneruskan file konfigurasi sementara yang dimodifikasi ke program.

Neil Mayhew
sumber
Jika Anda melakukannya maka Anda telah secara efektif mengambil kemampuan untuk menentukan jalur ke file konfigurasi menjauh dari pengguna. Mungkin bisa dilakukan jika Anda mendapatkan reli mewah dengan exe wrapper.
Lerc
0

Anda bisa mendapatkan pid dari requestin pengguna dan meminta sistem direktori rumahnya. Jadi itu mungkin.

Namun saya tidak yakin apakah tidak ada program SUID yang akan menganggap FS sebagai statis.

Edit:

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
} 

Kode di atas tidak ideal tetapi harus berfungsi untuk kasus-kasus umum.

Maciej Piechotka
sumber
Bagaimana Anda menemukan direktori rumahnya setelah Anda tahu apa itu pengguna?
WhyNotHugo
Menggunakan getpwuidatau getpwuid_r.
Maciej Piechotka