Każda ścieżka, która zaczyna się od, /
jest ścieżką bezwzględną, a nie względną.
Gdyby wszystkie ścieżki były zawsze względne w stosunku do bieżącego katalogu, jak byś to zrobił cd /etc
? Musiałbyś mieć cd ../../../../../etc
nadzieję, że to wystarczający poziom ..
, lub po prostu kontynuuj, cd ..
aż dojdziesz do katalogu głównego.
Lub potrzebujesz innej składni, aby wyrazić ścieżki bezwzględne. Ale Unix zdecydował się na /
znaczenie absolutne, wszystko inne jest związane z bieżącym katalogiem roboczym procesu. Tak mv MyFile.txt openvpn
by działało.
I nie, nie byłoby dobrze, aby wnioskować o wartości bezwzględnej i względnej na podstawie plików istniejących lub nie. Nie chcemy mkdir
wywołań systemowych traktować odmiennie od ścieżek chdir
lub rename
wywołań systemowych oraz dokonywania mv
programu zrobić to po prostu pozostawia pole do rozbieżności pomiędzy mv
i innego programu, która pobiera nazwę pliku wyjściowego.
mv
jest już wyjątkowy, ponieważ gdy rename()
miejscem docelowym jest katalog, dołącza źródłową nazwę pliku do tego katalogu docelowego i próbuje ponownie. Zauważ jednak, że jedna prosta strategia implementacji opiera się na pierwszym rename()
niepowodzeniu wywołania systemowego z EEXIST
lub EISDIR
. Musimy więc wiedzieć, czy ścieżka jest względna czy bezwzględna przed sprawdzeniem systemu plików.
(Wczesny Unix działał na wolnych komputerach, gdzie dodatkowe sprawdzenie, czy katalog istnieje, może oznaczać dodatkowe operacje wejścia / wyjścia, jeśli nie były buforowane, lub większą presję na buforowanie katalogu. Ale myślę, że argumenty rozsądku / poprawności są wystarczające, aby wyjaśnić, dlaczego pierwszy zgadujesz nie był to wiarygodny sposób działania systemu bez uciekania się do historycznych argumentów dotyczących wydajności).
sudo mv /openvpn/MyFile.conf /etc/
najpierw wypróbuj polecenie. W prawdopodobnym scenariuszu katalog nie istniał, po prostu wyświetli błąd (prawdopodobnie „Nie katalog”) i nie dotknie systemu plików. Następnie możesz po prostu zrobićsudo mv /openvpn /etc/MyFile.conf
.