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_home
pengaturan 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 windows
opsi tersebut ditambah beberapa %
token lain yang dapat Anda gunakan sebagai pengganti %H
atau sebagai tambahan. Lihat yang nsswitch.conf
deskripsi sintaks di Cygwin Panduan Pengguna untuk rincian.
Jika Anda menginstal Cygwin sebelum 1.7.34 atau telah menjalankan mkpasswd
utilitasnya sehingga Anda memiliki /etc/passwd
file, 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 HOME
variabel lingkungan disetel selama startup shell.²
Lihat item FAQ ini untuk mengetahui lebih lanjut tentang topik tersebut.
Catatan kaki:
Pertimbangkan bergerak /etc/passwd
dan /etc/group
keluar 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
.
ssh
tidak akan berfungsi dengan benar sampai pengeditan /etc/passwd
seperti yang dijelaskan.
/etc/passwd
file tersebut. Lihat jawaban saya di sini untuk menghindari masalah seperti itu.
db_home: /%H
mungkin menyelesaikan untuk nama pengguna domain (bukan nama pengguna lokal), yang mungkin bukan yang Anda inginkan. db_home: /cygdrive/c/Users/%U
melakukan apa yang saya inginkan.
db_home: windows
, dibutuhkan sh
sekitar 2,5 hingga 3,5 detik untuk memulai. Saat saya menggunakan db_home: /cygdrive/c/Users/%U
, dibutuhkan sh
sekitar 0,9 hingga 1,0 detik untuk memulai. Ketika saya menghapus db_home
baris atau kode keras ke direktori home Windows, sh
membutuhkan 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 sh
perintah, misalnya sh foo.sh
dan 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/passwd
atau, /etc/group
Anda 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.conf
file 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.%H
Direktori 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.
windows
Direktori 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.
cygwin
Hanya AD: Direktori home pengguna disetel ke jalur POSIX yang diberikan dalam atribut cygwinHome dari kelas bantu cygwinUser. Lihat juga bagian bernama "The cygwin schema" .
unix
Hanya IKLAN: Direktori beranda pengguna disetel ke jalur POSIX yang diberikan dalam atribut unixHomeDirectory dari kelas tambahan posixAccount. Lihat juga bagian yang disebut "Skema unix" .
desc
Direktori 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/passwd
dan 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/passwd
file Cygwin dengan %HOME%
variabel Windows yang baru kita buat. Shell login dan remote login via ssh
akan mengandalkan /etc/passwd
untuk 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 -d
beralih memberitahu mkpasswd untuk memasukkan pengguna DOMAIN, sementara -l
untuk 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/group
file 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
mkgroup
atas.
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 $HOME
jalur baru yang Anda nyatakan.
Cygwin mount
sekarang 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.