Saya baru saja menginstal Cygwin, dan sepertinya direktori home di prompt bash ada di drive Z: saya. Bukan itu yang kuinginkan.
Bagaimana saya bisa mengubah ini?
Saya baru saja menginstal Cygwin, dan sepertinya direktori home di prompt bash ada di drive Z: saya. Bukan itu yang kuinginkan.
Bagaimana saya bisa mengubah ini?
Jawaban:
Dimulai dengan Cygwin 1.7.34 , cara yang disarankan untuk melakukannya adalah dengan menambahkan db_homepengaturan khusus ke /etc/nsswitch.conf. Keinginan umum saat melakukan ini adalah membuat direktori home Cygwin Anda sama dengan direktori profil pengguna Windows Anda. Pengaturan ini akan melakukannya:
db_home: windows
Atau, dengan kata lain:
db_home: /%H
Anda perlu menggunakan formulir terakhir jika Anda menginginkan variasi pada skema ini, seperti memisahkan file home Cygwin Anda ke dalam subdirektori dari direktori profil pengguna Windows Anda:
db_home: /%H/cygwin
Ada beberapa skema alternatif lain untuk windowsopsi tersebut ditambah beberapa %token lain yang dapat Anda gunakan sebagai pengganti %Hatau sebagai tambahan. Lihat yang nsswitch.confdeskripsi sintaks di Cygwin Panduan Pengguna untuk rincian.
Jika Anda menginstal Cygwin sebelum 1.7.34 atau telah menjalankan mkpasswdutilitasnya sehingga Anda memiliki /etc/passwdfile, Anda dapat mengubah direktori home Cygwin Anda dengan mengedit entri pengguna Anda di file itu. Direktori beranda Anda adalah elemen kedua hingga terakhir pada baris pengguna Anda di /etc/passwd.¹
Apa pun cara Anda melakukannya, ini menyebabkan HOMEvariabel lingkungan disetel selama startup shell.²
Lihat item FAQ ini untuk mengetahui lebih lanjut tentang topik tersebut.
Catatan kaki:
Pertimbangkan bergerak /etc/passwddan /etc/groupkeluar dari jalan untuk menggunakan SAM baru / mekanisme berbasis AD sebagai gantinya.
Meskipun dimungkinkan untuk hanya mengatur %HOME%melalui Panel Kontrol, secara resmi tidak disarankan . Tidak hanya menggantikan mekanisme di atas begitu saja, itu tidak selalu berfungsi, seperti saat menjalankan skrip shell melalui cron.
sshtidak akan berfungsi dengan benar sampai pengeditan /etc/passwdseperti yang dijelaskan.
/etc/passwdfile tersebut. Lihat jawaban saya di sini untuk menghindari masalah seperti itu.
db_home: /%Hmungkin menyelesaikan untuk nama pengguna domain (bukan nama pengguna lokal), yang mungkin bukan yang Anda inginkan. db_home: /cygdrive/c/Users/%Umelakukan apa yang saya inginkan.
db_home: windows, dibutuhkan shsekitar 2,5 hingga 3,5 detik untuk memulai. Saat saya menggunakan db_home: /cygdrive/c/Users/%U, dibutuhkan shsekitar 0,9 hingga 1,0 detik untuk memulai. Ketika saya menghapus db_homebaris atau kode keras ke direktori home Windows, shmembutuhkan waktu sekitar 0,2 hingga 0,3 detik untuk memulai. Saya akan menggunakan solusi hard-coded, misalnya db_home: /cygdrive/c/Users/susam, karena saya sering menjalankan skrip shell dari Command Prompt menggunakan shperintah, misalnya sh foo.shdan menunggu lebih dari 2 detik menjadi tidak nyaman.
Bagi mereka yang menggunakan Cygwin 1.7.34 atau lebih tinggi, Cygwin mendukung konfigurasi cara mengambil direktori home, shell login, dan informasi gecos di /etc/nsswitch.conf. Ini dirinci di bagian Panduan Pengguna Cygwin:
Jika sebelumnya Anda telah membuat file /etc/passwdatau, /etc/groupAnda ingin menghapusnya dan mengkonfigurasi Cygwin menggunakan model Keamanan Windows baru untuk pemetaan POSIX.
[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak
Pengaturan /etc/nsswitch.conffile db_home:menentukan bagaimana Cygwin mengambil direktori home pengguna. Pengaturan default untuk db_home:adalah
db_home: /home/%U
Jadi secara default, Cygwin hanya menyetel direktori home ke /home/$USERNAME. Anda dapat mengubahnya meskipun untuk menunjuk ke jalur kustom lain yang Anda inginkan. Karakter wildcard yang didukung adalah:
%u Nama pengguna Cygwin (huruf kecil u).%U Nama pengguna Windows (huruf besar U).%D Domain Windows dalam gaya NetBIOS.%HDirektori beranda Windows dengan gaya POSIX. Perhatikan bahwa, untuk db_home:pengaturan, ini hanya masuk akal tepat setelah garis miring sebelumnya, seperti padadb_home: /%H/cygwin%_Karena spasi dan karakter TAB digunakan untuk memisahkan skema, spasi dalam nama file harus diberikan sebagai %_(itu garis bawah).%% Karakter persen.Sebagai ganti jalur, Anda bisa menentukan salah satu dari empat skema jalur bernama yang sudah ditentukan sebelumnya.
windowsDirektori home pengguna diatur ke direktori yang sama yang digunakan sebagai direktori home Windows, biasanya sesuatu di sepanjang baris %USERPROFILE%atau C:\Users\$USERNAME. Tentu saja, direktori Windows diubah menjadi gaya POSIX oleh Cygwin.
cygwinHanya AD: Direktori home pengguna disetel ke jalur POSIX yang diberikan dalam atribut cygwinHome dari kelas bantu cygwinUser. Lihat juga bagian bernama "The cygwin schema" .
unixHanya IKLAN: Direktori beranda pengguna disetel ke jalur POSIX yang diberikan dalam atribut unixHomeDirectory dari kelas tambahan posixAccount. Lihat juga bagian yang disebut "Skema unix" .
descDirektori beranda pengguna disetel ke jalur POSIX yang diberikan dalam setelan mirip-XML home = "..." di atribut deskripsi pengguna di SAM atau AD. Lihat bagian bernama "The desc schema" untuk penjelasan mendetail.
Berikut ini akan membuat direktori home pengguna di Cygwin sama dengan yang digunakan untuk direktori home Windows.
db_home: windows
Bagi mereka yang menggunakan Cygwin 1.7.33 atau sebelumnya, perbarui ke versi terbaru Cygwin dan hapus file /etc/passwddan yang sebelumnya digunakan /etc/group, kemudian lihat langkah-langkah di atas.
Lain, ikuti langkah-langkah lama di bawah ini.
Pertama, tetapkan variabel lingkungan Windows untuk HOME yang mengarah ke profil pengguna Anda:
HOME%USERPROFILE%Sekarang kita akan memperbarui /etc/passwdfile Cygwin dengan %HOME%variabel Windows yang baru kita buat. Shell login dan remote login via sshakan mengandalkan /etc/passwduntuk memberi tahu mereka lokasi jalur pengguna $HOME.
Pada prompt perintah Cygwin bash ketik yang berikut ini:
cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H) > /etc/passwd
mkpasswd -d -p $(cygpath -H) >> /etc/passwd
The -dberalih memberitahu mkpasswd untuk memasukkan pengguna DOMAIN, sementara -luntuk pengguna mesin LOKAL hanya output. Ini penting jika Anda menggunakan PC di tempat kerja tempat informasi pengguna diperoleh dari Pengontrol Domain Windows.
Sekarang, Anda juga dapat melakukan hal yang sama untuk grup, meskipun ini tidak perlu kecuali Anda akan menggunakan komputer yang merupakan bagian dari Domain Windows. Cygwin membaca informasi grup dari database akun Windows, tetapi Anda dapat menambahkan /etc/groupfile jika komputer Anda sering terputus dari Kontroler Domainnya.
Pada prompt Cygwin bash ketik yang berikut ini:
cp /etc/group /etc/group.bak
mkgroup -l > /etc/group
mkgroup -d >> /etc/group
Sekarang, keluar dari Cygwin dan mulai lagi. Anda harus menemukan bahwa jalur HOME Anda menunjuk ke lokasi yang sama dengan Profil Pengguna Windows Anda - yaitu/cygdrive/c/Users/username
mkgroupatas.
Saya melakukan sesuatu yang sangat sederhana. Saya tidak ingin mengubah variabel lingkungan windows 7. Jadi saya langsung mengedit file Cygwin.bat.
@echo off
SETLOCAL
set HOME=C:\path\to\home
C:
chdir C:\apps\cygwin\bin
bash --login -i
ENDLOCAL
Ini baru memulai shell lokal dengan direktori home ini; itulah yang saya inginkan. Saya tidak akan mengakses ini dari jarak jauh, jadi ini berhasil untuk saya.
%HOME%lokasi Windows lama , sementara Cygwin vim menggunakan $HOMEjalur baru yang Anda nyatakan.
Cygwin mountsekarang mendukung metode bind yang memungkinkan Anda memasang direktori. Karenanya Anda cukup menambahkan baris berikut ke /etc/fstab, lalu restart shell Anda:
c:/Users /home none bind 0 0
Ubah variabel lingkungan HOME Anda.
di XP, klik kanan My Computer >> Properties >> Advanced >> Variabel Lingkungan >> Variabel Pengguna untuk >> [pilih variabel HOME] >> edit
Saya ingin menambahkan koreksi / pembaruan sedikit tentang $ HOME yang diutamakan. Direktori home di / etc / passwd didahulukan dari segalanya.
Saya adalah pengguna Cygwin lama dan saya baru saja menginstal Windows 7 x64 dan Cygwin V1.126 dengan bersih. Saya menjadi gila mencoba mencari tahu mengapa setiap kali saya berlari ssh saya terus mendapatkan:
e:\>ssh foo.bar.com
Could not create directory '/home/dhaynes/.ssh'.
The authenticity of host 'foo.bar.com (10.66.19.19)' can't be established.
...
Saya menambahkan definisi HOME = c: \ users \ dhaynes di lingkungan Windows tetapi tetap mencoba membuat '/ home / dhaynes'. Saya mencoba setiap kombo yang saya bisa termasuk pengaturan HOME ke / cygdrive / c / users / dhaynes. Mencari pesan kesalahan di Google, tidak dapat menemukan apa pun, tidak dapat menemukan apa pun di situs cygwin. Saya menggunakan cygwin dari cmd.exe, bukan bash.exe tetapi masalahnya ada di keduanya.
Saya akhirnya menyadari bahwa direktori home di / etc / passwd lebih diutamakan daripada variabel lingkungan $ HOME. Saya dengan sederhana menjalankan ulang 'mkpasswd -l> / etc / passwd' dan itu memperbarui direktori home, sekarang semuanya baik-baik saja dengan ssh.
Itu mungkin jelas untuk tipe linux dengan pengalaman sysadmin tetapi bagi kita yang terutama menggunakan Windows itu agak tidak jelas.
Saya kebetulan menggunakan cwRsync (Cygwin + Rsync untuk Windows) di mana cygwin dibundel, dan saya tidak dapat menemukan / etc / passwd.
Dan itu terus berkata
Could not create directory '/home/username/.ssh'.
...
Failed to add the host to the list of known hosts (/home/username/.ssh/known_hosts).
Jadi saya menulis file batch yang mengubah variabel HOME sebelum menjalankan rsync. Sesuatu seperti:
set HOME=.
rsync /path1 user@host:/path2
Dan biola! Folder .ssh muncul di direktori yang berfungsi saat ini dan rsync berhenti mengganggu dengan sidik jari rsa.
Ini hotfix cepat, tetapi nanti Anda harus mengubah HOME ke lokasi yang lebih aman.
db_home:kutipan dan membuatnya berfungsi.