Po pierwsze, wiem, że ~/
to katalog domowy. CD do katalogu domowego ~
lub ~/
przenosi mnie do katalogu domowego.
Jednak cd ~X
przenosi mnie w szczególne miejsce, gdzie X
wydaje się być wszystko.
W bashu, jeśli wbiję " cd ~
" i wciskam zakładkę, to pokazuje kilka możliwych ~X
opcji, takich jak ~mail
i ~postgres
i ~ssh
. Przejście do tych folderów i wykonanie a pwd
pokazuje mi, że tych folderów nie ma w katalogu domowym; są wszędzie.
Nie są aliasami. Sprawdziłem. Nie są env.
zmiennymi, bo inaczej wymagałyby rozszerzenia $
.
Co to jest ustawianie tych linków i gdzie mogę się dowiedzieć, gdzie są one ustawiane?
Odpowiedzi:
To funkcja Bash zwana „ rozszerzeniem tyldy ” ”. Jest to funkcja powłoki, a nie systemu operacyjnego. Na przykład uzyskasz inne zachowanie z csh.
Odpowiadając na pytanie, skąd pochodzą informacje: twój katalog domowy pochodzi ze zmiennej
$HOME
(bez względu na to, co tam przechowujesz), podczas gdy domy innych użytkowników są pobierane w czasie rzeczywistym za pomocągetpwent()
. Ta funkcja jest zwykle kontrolowana przez NSS ; więc domyślnie wartości są pobierane/etc/passwd
, chociaż można je skonfigurować tak, aby pobierały informacje przy użyciu dowolnego żądanego źródła, takiego jak NIS, LDAP lub baza danych SQL.Rozwijanie tyldy to coś więcej niż przeszukiwanie katalogu domowego. Oto podsumowanie:
dirs
a~1
,~-1
itp, są używane w połączeniu zpushd
apopd
.źródło
~+
? wydaje się raczej bezużyteczna.To są katalogi domowe użytkowników. Spróbuj
cd ~(your username)
na przykład.źródło
Czy są to katalogi domowe użytkowników
/etc/passwd
? Usługi takie jak postgres, sendmail, apache itp. Tworzą użytkowników systemu, którzy mają katalogi domowe, tak jak zwykli użytkownicy.źródło
To są użytkownicy. Sprawdź swoje
/etc/passwd
.cd ~username
przeniesie Cię do katalogu domowego tego użytkownika.źródło
Na moim komputerze, ze względu na sposób skonfigurowania rzeczy, robię:
Pierwsza zwraca uwagę na wartość zmiennej środowiskowej
$HOME
; Celowo ustawiłem$HOME
lokalny system plików zamiast systemu plików podłączonego do NFS. Drugi czyta z pliku haseł (w przybliżeniu; NIS trochę komplikuje) i stwierdza, że plik z hasłami mówi, że mój katalog domowy jest/u/jleffler
i zmienia się w tym katalogu.Irytujące jest to, że większość programów zachowuje się jak powyżej (a specyfikacja POSIX dla powłoki wymaga takiego zachowania). Używam oprogramowania (i nie mam dużego wyboru co do jego używania), które traktuje informacje z pliku z hasłami jako bieżącą wartość $ HOME, co jest błędne.
Odnosząc to do pytania - jak zauważyli inni, '
cd ~x
' przechodzi do katalogu domowego użytkownika 'x', a bardziej ogólnie, gdy zostanie wykonane rozwinięcie tyldy,~x
oznacza katalog domowy użytkownika 'x' (i jest to błąd jeśli użytkownik „x” nie istnieje).Warto wspomnieć, że:
Nie mogę od razu znaleźć zastosowania dla „
~+
”, chyba że robisz dziwne rzeczy z przenoszeniem linków symbolicznych w ścieżce prowadzącej do bieżącego katalogu.Możesz też:
To znaczy to samo co
~-
.źródło
cd ~+
: możesz go potencjalnie użyć do sprawdzenia, czy katalog, w którym aktualnie jesteś, nadal istnieje - nawet jeśli jest to dość niekonwencjonalny sposób zrobienia tego.Rozszerzenie Tilde w Bash:
http://bash-hackers.org/wiki/doku.php/syntax/expansion/tilde
źródło
Jeśli używasz,
autofs
rozszerzenie może faktycznie pochodzić z/etc/auto.home
(lub podobnie w przypadku twojej dystrybucji). Na przykład mój/etc/auto.master
wygląd wygląda tak:i
/etc/auto.home
wygląda następująco:źródło
Możliwe, że widzisz użytkowników OpenDirectory / ActiveDirectory / LDAP „automatycznie podłączonych” do twojego katalogu domowego.
W * nix,
~
rozwiąże do twojego katalogu domowego. Podobnie~X
rozwiąże się z „użytkownikiem X”.Podobnie jak w przypadku automatycznego montowania katalogów, OpenDirectory / ActiveDirectory / LDAP jest używany w większych / korporacyjnych środowiskach do automatycznego montowania katalogów użytkowników. Tymi użytkownikami mogą być rzeczywiste osoby lub konta maszyn utworzone w celu zapewnienia różnych funkcji.
Jeśli wpiszesz ~Tab, zobaczysz listę użytkowników na twoim komputerze.
źródło