Tôi vừa cài đặt Cygwin và có vẻ như thư mục chính trong dấu nhắc bash nằm trên ổ đĩa Z: của tôi. Đó không phải là nơi tôi muốn.
Làm cách nào để thay đổi điều này?
Tôi vừa cài đặt Cygwin và có vẻ như thư mục chính trong dấu nhắc bash nằm trên ổ đĩa Z: của tôi. Đó không phải là nơi tôi muốn.
Làm cách nào để thay đổi điều này?
Câu trả lời:
Bắt đầu với Cygwin 1.7.34 , cách được khuyến nghị để làm điều này là thêm db_home
cài đặt tùy chỉnh vào /etc/nsswitch.conf
. Một mong muốn phổ biến khi làm điều này là làm cho thư mục chính Cygwin của bạn ngang bằng với thư mục hồ sơ người dùng Windows của bạn. Cài đặt này sẽ thực hiện điều đó:
db_home: windows
Hoặc, tương đương:
db_home: /%H
Bạn cần sử dụng biểu mẫu sau nếu bạn muốn một số biến thể trên lược đồ này, chẳng hạn như để tách các tệp trang chủ Cygwin của bạn thành một thư mục con của thư mục hồ sơ người dùng Windows của bạn:
db_home: /%H/cygwin
Có một số chương trình thay thế khác cho windows
tùy chọn cộng với một số %
mã thông báo khác mà bạn có thể sử dụng thay thế %H
hoặc bổ sung cho nó. Xem các nsswitch.conf
mô tả cú pháp trong tài Cygwin Hướng dẫn để biết chi tiết.
Nếu bạn đã cài đặt Cygwin trước 1.7.34 hoặc đã chạy mkpasswd
tiện ích của nó để bạn có /etc/passwd
tệp, bạn có thể thay đổi thư mục chính Cygwin của mình bằng cách chỉnh sửa mục nhập của người dùng trong tệp đó. Thư mục chính của bạn là phần tử thứ hai đến cuối cùng trên dòng của người dùng của bạn trong /etc/passwd
.¹
Cho dù bạn làm theo cách nào, điều này sẽ khiến HOME
biến môi trường được đặt trong quá trình khởi động trình bao.²
Xem mục Câu hỏi thường gặp này để biết thêm về chủ đề.
Chú thích:
Thay vào đó, hãy cân nhắc di chuyển /etc/passwd
và /etc/group
tránh xa để sử dụng cơ chế dựa trên SAM / AD mới .
Mặc dù có thể thiết lập đơn giản %HOME%
thông qua Control Panel, nhưng nó chính thức không được khuyến khích . Nó không chỉ ghi đè lên các cơ chế trên mà không phải lúc nào cũng hoạt động, chẳng hạn như khi chạy các tập lệnh shell qua cron
.
ssh
sẽ không hoạt động chính xác cho đến khi chỉnh sửa /etc/passwd
như mô tả.
/etc/passwd
tệp. Xem câu trả lời của tôi ở đây để tránh những vấn đề như vậy.
db_home: /%H
có thể giải quyết cho một tên người dùng miền (thay vì tên người dùng cục bộ), có thể không phải là những gì bạn muốn có. db_home: /cygdrive/c/Users/%U
đã làm những gì tôi muốn có.
db_home: windows
, nó mất sh
khoảng 2,5 đến 3,5 giây để khởi động. Khi tôi sử dụng db_home: /cygdrive/c/Users/%U
, mất sh
khoảng 0,9 đến 1,0 giây để khởi động. Khi tôi xóa db_home
dòng hoặc mã cứng nó vào thư mục chính của Windows, sh
mất khoảng 0,2 đến 0,3 giây để bắt đầu. Tôi đang db_home: /cygdrive/c/Users/susam
sử dụng giải pháp mã hóa cứng, ví dụ: vì tôi thường chạy các tập lệnh shell từ Command Prompt bằng cách sử dụng sh
lệnh, ví dụ: sh foo.sh
và sẽ trở nên bất tiện khi phải đợi hơn 2 giây.
Đối với những người sử dụng Cygwin 1.7.34 trở lên, Cygwin hỗ trợ cấu hình cách tìm nạp thư mục chính, trình bao đăng nhập và thông tin gecos trong /etc/nsswitch.conf
. Điều này được trình bày chi tiết trong phần Hướng dẫn sử dụng Cygwin:
Nếu trước đây bạn đã tạo một /etc/passwd
hoặc /etc/group
tệp, bạn sẽ muốn xóa chúng và định cấu hình Cygwin bằng cách sử dụng mô hình Bảo mật Windows mới cho ánh xạ POSIX.
[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak
Các /etc/nsswitch.conf
tập tin của db_home:
thiết định nghĩa như thế nào Cygwin lấy về thư mục home của người dùng. Cài đặt mặc định cho db_home:
là
db_home: /home/%U
Vì vậy, theo mặc định, Cygwin chỉ đặt dir nhà thành /home/$USERNAME
. Tuy nhiên, bạn có thể thay đổi điều đó để trỏ đến bất kỳ đường dẫn tùy chỉnh nào khác mà bạn muốn. Các ký tự đại diện được hỗ trợ là:
%u
Tên người dùng Cygwin (đó là u viết thường).%U
Tên người dùng Windows (đó là chữ hoa U).%D
Miền Windows theo kiểu NetBIOS.%H
Thư mục chính của Windows theo kiểu POSIX. Lưu ý rằng, đối với db_home:
cài đặt này, điều này chỉ có ý nghĩa ngay sau dấu gạch chéo trước đó, như trongdb_home: /%H/cygwin
%_
Vì dấu cách và các ký tự TAB được sử dụng để phân tách schemata, một khoảng trắng trong tên tệp phải được cung cấp dưới dạng %_
(đó là dấu gạch dưới).%%
Một ký tự phần trăm.Thay cho một đường dẫn, bạn có thể chỉ định một trong bốn schemata đường dẫn được đặt tên đã được xác định trước.
windows
Thư mục chính của người dùng được đặt thành cùng một thư mục được sử dụng làm thư mục chính của Windows, thường là thư mục dọc theo dòng %USERPROFILE%
hoặc C:\Users\$USERNAME
. Tất nhiên, thư mục Windows được Cygwin chuyển đổi sang kiểu POSIX.
cygwin
Chỉ AD: Thư mục chính của người dùng được đặt thành đường dẫn POSIX được đưa ra trong thuộc tính cygwinHome từ lớp bổ trợ cygwinUser. Xem thêm phần có tên “Giản đồ cygwin” .
unix
Chỉ AD: Thư mục chính của người dùng được đặt thành đường dẫn POSIX được cung cấp trong thuộc tính unixHomeDirectory từ lớp bổ trợ posixAccount. Xem thêm phần có tên “Giản đồ unix” .
desc
Thư mục chính của người dùng được đặt thành đường dẫn POSIX được đưa ra trong cài đặt giống XML home = "..." trong thuộc tính mô tả của người dùng trong SAM hoặc AD. Xem phần có tên “Giản đồ mô tả” để biết mô tả chi tiết.
Phần sau sẽ làm cho thư mục chính của người dùng trong Cygwin giống như được sử dụng cho thư mục chính của Windows.
db_home: windows
Đối với những người sử dụng Cygwin 1.7.33 hoặc phiên bản cũ hơn, hãy cập nhật lên phiên bản Cygwin mới nhất và xóa các tệp /etc/passwd
và /etc/group
tệp đã sử dụng trước đó , sau đó xem các bước ở trên.
Nếu không, hãy làm theo các bước cũ hơn bên dưới.
Đầu tiên, đặt một biến môi trường Windows cho HOME trỏ đến hồ sơ người dùng của bạn:
HOME
%USERPROFILE%
Bây giờ chúng ta sẽ cập nhật /etc/passwd
tệp Cygwin với %HOME%
biến Windows mà chúng ta vừa tạo. Đăng nhập Shell và đăng nhập từ xa thông qua ssh
sẽ dựa vào đó /etc/passwd
để cho họ biết vị trí $HOME
đường dẫn của người dùng .
Tại dấu nhắc lệnh Cygwin bash, gõ như sau:
cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H) > /etc/passwd
mkpasswd -d -p $(cygpath -H) >> /etc/passwd
Công -d
tắc yêu cầu mkpasswd bao gồm người dùng DOMAIN, trong khi -l
chỉ xuất người dùng máy LOCAL. Điều này rất quan trọng nếu bạn đang sử dụng PC tại nơi làm việc mà thông tin người dùng được lấy từ Bộ điều khiển miền của Windows.
Bây giờ, bạn cũng có thể làm điều tương tự cho các nhóm, mặc dù điều này là không cần thiết trừ khi bạn sử dụng máy tính là một phần của Miền Windows. Cygwin đọc thông tin nhóm từ cơ sở dữ liệu tài khoản Windows, nhưng bạn có thể thêm /etc/group
tệp nếu máy của bạn thường xuyên bị ngắt kết nối khỏi Bộ điều khiển miền của nó.
Tại dấu nhắc Cygwin bash, gõ như sau:
cp /etc/group /etc/group.bak
mkgroup -l > /etc/group
mkgroup -d >> /etc/group
Bây giờ, thoát khỏi Cygwin và khởi động lại. Bạn sẽ thấy rằng đường dẫn HOME của bạn trỏ đến cùng một vị trí với Hồ sơ người dùng Windows của bạn - tức là/cygdrive/c/Users/username
mkgroup
trên.
Tôi đã làm một việc khá đơn giản. Tôi không muốn thay đổi biến môi trường windows 7. Vì vậy, tôi đã trực tiếp chỉnh sửa tệp Cygwin.bat.
@echo off
SETLOCAL
set HOME=C:\path\to\home
C:
chdir C:\apps\cygwin\bin
bash --login -i
ENDLOCAL
Thao tác này chỉ bắt đầu trình bao cục bộ với thư mục chính này; đó là những gì tôi muốn. Tôi sẽ không truy cập từ xa cái này, vì vậy cái này phù hợp với tôi.
%HOME%
vị trí Windows cũ , trong khi Cygwin vim sử dụng $HOME
đường dẫn mới mà bạn đã khai báo.
Cygwin mount
hiện hỗ trợ phương thức ràng buộc cho phép bạn gắn kết một thư mục. Do đó, bạn chỉ cần thêm dòng sau vào /etc/fstab
, sau đó khởi động lại trình bao của mình:
c:/Users /home none bind 0 0
Thay đổi biến môi trường HOME của bạn.
trên XP, nhấp chuột phải vào Máy tính của tôi >> Thuộc tính >> Nâng cao >> Biến môi trường >> Biến người dùng cho >> [chọn biến HOME] >> chỉnh sửa
Tôi muốn thêm sửa đổi / cập nhật một chút về ưu tiên $ HOME. Thư mục chính trong / etc / passwd được ưu tiên hơn mọi thứ.
Tôi là người dùng Cygwin lâu năm và tôi vừa mới cài đặt xong Windows 7 x64 và Cygwin V1.126. Tôi đang phát điên khi cố gắng tìm ra lý do tại sao mỗi lần tôi chạy ssh, tôi liên tục nhận được:
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.
...
Tôi thêm định nghĩa HOME = c: \ users \ dhaynes trong môi trường Windows nhưng nó vẫn tiếp tục cố gắng tạo '/ home / dhaynes'. Tôi đã thử mọi cách kết hợp có thể kể cả đặt HOME thành / cygdrive / c / users / dhaynes. Googled cho thông báo lỗi, không thể tìm thấy bất cứ điều gì, không thể tìm thấy bất cứ điều gì trên trang web cygwin. Tôi sử dụng cygwin từ cmd.exe, không phải bash.exe nhưng sự cố đã xuất hiện ở cả hai.
Cuối cùng tôi nhận ra rằng thư mục chính trong / etc / passwd được ưu tiên hơn so với biến môi trường $ HOME. Tôi đơn giản chạy lại 'mkpasswd -l> / etc / passwd' và cập nhật thư mục chính, bây giờ tất cả đều ổn với ssh.
Điều đó có thể hiển nhiên đối với các loại linux có trải nghiệm sysadmin nhưng đối với chúng ta, những người chủ yếu sử dụng Windows thì điều đó hơi khó hiểu.
Tôi tình cờ sử dụng cwRsync (Cygwin + Rsync cho Windows) trong đó cygwin đi kèm và tôi không thể tìm thấy / etc / passwd.
Và nó tiếp tục nói
Could not create directory '/home/username/.ssh'.
...
Failed to add the host to the list of known hosts (/home/username/.ssh/known_hosts).
Vì vậy, tôi đã viết một tệp lô thay đổi biến HOME trước khi chạy rsync. Cái gì đó như:
set HOME=.
rsync /path1 user@host:/path2
Và viola! Thư mục .ssh xuất hiện trong dir đang hoạt động hiện tại và rsync đã ngừng gây phiền nhiễu với dấu vân tay rsa.
Đây là một bản sửa lỗi nhanh, nhưng sau này bạn nên thay đổi HOME thành một vị trí an toàn hơn.
db_home:
để hủy trích dẫn và làm cho nó hoạt động.