Zastanawiałem się, czy istnieje sposób, aby to zarejestrować, ale ponieważ większość współczesnych wyszukiwarek nie działa dobrze z frazami o długości około 5 słów, potrzebuję pomocy w tym.
Zastanawiałem się nad tym, ponieważ tworzę skrypt bash, który musi rejestrować pliki jako określone typy i odpowiednio podejmować decyzje. Z technicznego punktu widzenia nie jest to ważne dla mojego projektu, ale byłem ciekawy.
Ponadto, jeśli są one uważane za zwykłe pliki, to czy istnieje sposób, aby sprawdzić, czy te pliki są na stałe połączone bez konieczności analizowania ls -i
? I czy istnieje sposób, aby sprawdzić, czy jakiś dowolny plik, X, jest na stałe połączony z jakimkolwiek innym plikiem Y, bez użycia find -i
polecenia?
bash
shell-script
files
hard-link
Pan Minty Fresh
źródło
źródło
Odpowiedzi:
W systemach uniksowych struktura danych reprezentująca obiekty systemu plików (innymi słowy dane o pliku) jest przechowywana w tak zwanym „i-węzle”.
Nazwa pliku jest tylko linkiem do tego i-węzła i jest nazywana „twardym łączem”. Nie ma różnicy między pierwszym imieniem pliku a dowolnym kolejnym linkiem. Odpowiedź brzmi: „tak”: twardy link to zwykły plik, a rzeczywiście zwykły plik to twardy link.
ls
Komenda pokaże ile trudno linki są do pliku.Na przykład:
Tutaj stworzyliśmy plik o nazwie
/tmp/hello.txt
. Dane1
wyjściowe zls -l
wskazują, że istnieje 1 twardy link do tego pliku. Ten twardy link jest samą nazwą pliku/tmp/hello.txt
.Jeśli teraz utworzymy kolejny twardy link do tego pliku:
widać teraz, że obie nazwy plików wskazują, że istnieją 2 twarde linki do pliku. Żadna z tych nie jest „prawidłową” nazwą pliku, oba są jednakowo prawidłowe. Widzimy, że oba wskazują na tę samą i-węzeł (w tym przypadku 5374043):
Istnieje powszechne nieporozumienie, że jest inaczej w przypadku katalogów. Słyszałem, jak ludzie mówią, że liczba odsyłaczy
ls
do katalogu jest liczbą podkatalogów, w tym.
i..
która jest niepoprawna . A przynajmniej, podając prawidłowy numer, jest odpowiedni z niewłaściwych powodów!Jeśli tworzymy katalog i wykonujemy
ls -ld
:To pokazuje, że istnieją 2 twarde linki do tego katalogu. To są:
Pamiętaj, że
/tmp/testdir/..
to nie jest link do tego katalogu, to link do/tmp
. A to mówi ci, dlaczego działa „liczba podkatalogów”. Kiedy tworzymy nowy podkatalog:teraz możesz zobaczyć 3 twarde linki do
/tmp/testdir
katalogu. To są:Tak więc każdy nowy podkatalog zwiększy liczbę linków o jeden, ze względu na
..
wpis, który zawiera.źródło
Twarde linki liczą się jako wszystko, z czym są połączone. Możesz połączyć się z dowolnym plikiem w tym samym systemie plików.
Każde dowiązanie twarde do czegokolwiek jest równoważne, leżący pod nim obiekt pozostaje tak długo, jak długo jest do niego link (edytuj: nie-symboliczny) (nawet otwarty deskryptor pliku, za co mam kłopotliwe powody).
System wymusi reguły dotyczące linków do katalogu, otrzymasz jeden nazwany link do katalogu, a system automatycznie doda
.
link osadzony i wszystkie..
linki do podkatalogów (zauważ, że.
w powyższym ls ma dwa linki), ale to jest wyraźna kontrola, w przypadku niektórych zmodyfikowanych uprzywilejowani użytkownicy systemów, którzy obiecują, że nie będą tworzyć pętli, mogą sami dodawać nowe linki. System plików nie dba o to, może dobrze reprezentować dowolne wykresy katalogów, ale nikt nie chce się nimi zajmować.Istnieją (wiele nie-uniksowych) systemów plików, które nie działają w ten sposób, w tym niektóre, które nazywają to, co oferują jako zastępcze „twarde łącza”. OS X podniósł odpowiednik na HFS + (który nie ma ich natywnie), jeśli dobrze pamiętam, nie wiem, jak wiernie zachowuje tutaj semantykę.
źródło
./tsock
właściwie właściwie robi?socket()
tworzy rzeczywiste gniazdo,bind()
nadaje mu konkretną nazwę,connect()
łączy utworzone gniazdo z jakimś nazwanym gniazdem. Różne rodzaje gniazd używają różnych nazw, np. Gniazda internetowe używają adresów internetowych, ale wszystkie mają wspólne API (w tymread()
iwrite()
, bardzo mi przykro, że nie możesz miećopen()
gniazda systemu plików i masz system operacyjny lub libcsocket()
iconnect()
dla ciebie) .man 7 socket
ma więcej, wszystkie protokoły sieciowe tworzą niezrozumiałą stronę.