Najwyraźniej możesz zmienić nazwę pliku na...
.
Gdybym był szalony, jak zmieniłbym nazwę pliku na ..
lub .
? Czy taka nazwa pliku jest w ogóle dozwolona?
Odwrotny ukośnik nie wyłącza specjalnego znaczenia kropki:
$ mv test \.
mv: `test' and `./test' are the same file
.
i..
już istnieją. I kropka nie ma specjalnego znaczenia..
lub..
z systemu Windows na nośniku zewnętrznymFAT
lubNTFS
nośniku, a następnie spróbuj zainstalować to w systemie uniksowym. Hm ....
i..
rzeczywiście istnieje w systemie plików NTFS i NT API lub jeśli są one dodawane tylko przez API Win32. Wiem, że istnieje kilka rozbieżności między API NT niższego poziomu i Win32, na przykład Win32 ukrywa kilka plików z katalogu głównego dysku.Odpowiedzi:
..
nie jest wyjątkowy, po prostu istnieje.W systemach Unix, Dos i MS-Windows każdy katalog ma katalog, do
.
którego prowadzi z powrotem, i katalog..
, do którego prowadzi do swojego katalogu nadrzędnego (lub self, jeśli katalog główny).Jeśli
..
i.
to specjalne to tylko dlatego, że nie można ich usunąć (właściwie można, po prostu usunąć katalog zawierający je).Dlatego nie możesz nazwać żadnego (innego) pliku
.
lub..
.Jednak można tworzyć pliki
...
,\
,…
,..
(uwaga jest przestrzeń po..
, ale ledwie można zobaczyć go tutaj, albo łatwo w ciebie katalogu liście) lub innej nazwy lubisz; Tylko zastrzeżone znak jest/
(Ostrzeżenie - zaawansowane szczegóły: a null, null to specjalny charakter, nie wykorzystane do niczego z wyjątkiem zaznaczyć koniec rzeczy, a czasami jako separator)..
nie ma specjalnego znaczenia: nie do nazw plików, jądra ani do powłoki, nie wymaga ucieczki. W rzeczywistości, jeśli nazwa pliku zaczyna się od,.
to jest wyjątkowa, plik jest zwykle ukryty, ale nadal nie wymaga ucieczki.Na bok
Ten plik ukryty zachowanie doszło we wczesnej realizacji
ls
którym autor chciał ukryć.
i..
tak pisali kod, aby ukryć wszystkie pliki rozpoczynające się.
. Inni użytkownicy zauważyli ten błąd / funkcję i zaczęli tworzyć pliki, zaczynając od.
momentu, w którym chcieli ukryć plik.Wyjaśnienie powiązanego pytania
W pytaniu, które łączysz z pytającym, próbujesz przenieść plik do katalogu nadrzędnego,
..
ale kończy się zmiana nazwy...
, pliki zaczynające się od kropki są domyślnie ukryte, dlatego nie mogą go znaleźć.Podczas korzystania z mv w formularzu
mv a b
.
niego przeprowadzisz, jest to w zasadzie operacja bez operacji, alemv
traktuje to jako błąd...
niego przeniesiesz, plik zostanie przeniesiony do katalogu nadrzędnego.źródło
If you move to . it is effectively a no operation
? To nie jest „brak op”, to błąd, gdy próbujesz przenieść plik z A do B, gdy A i B są tym samym. Bardziej praktyczną demonstracją tego błędu jestmv foo ../some_dir/foo
lubmv foo some_subdir/../foo
./
I NUL) a zastrzeżoną nazwą (tj..
I..
) można by uczynić jaśniejszym. Warto również zauważyć, że.
na początku nazwa ma specjalne znaczenie tylko w warstwie aplikacji, a nie w interfejsie API jądra lub wywołania systemowego...
i.
są wyjątkowe: nie można ich przenosić ani usuwać. Ale nie są one wyjątkowe przy przenoszeniu do nich plików .Nie można zmienić nazwy pliku na
.
lub..
ponieważ wszystkie katalogi zawierają już wpisy dla tych dwóch nazw. (Te wpisy wskazują na katalogi i nie można zmienić nazwy pliku na katalog.)mv
wykrywa przypadek, w którym miejscem docelowym jest istniejący katalog i interpretuje go jako żądanie przeniesienia pliku do tego katalogu (przy użyciu jego bieżącej nazwy).Odwrotne ukośniki nie mają z tym nic wspólnego, ponieważ
.
nie jest metaznakiem powłoki.\.
i.
są takie samebash
.źródło
Problem polega na tym, że przenosisz plik do katalogu. To może zawieść.
Powiem ci, jak to było kiedyś.
mkdir w zasadzie to czytał (kiedy piszę to w sh, tak naprawdę napisano w C i setuid-root).
Jak widać, nie ma w tym nic specjalnego. i .. z wyjątkiem faktu, że zostały one dla Ciebie stworzone przez mkdir i już istnieją. Jest teraz kod, który mówi, że nie można ich usunąć, ale nie zawsze tak było.
rmdir wyglądał tak:
źródło