Jak sprawdzić, czy folder jest rzeczywiście dowiązaniem symbolicznym i jak go naprawić, jeśli jest uszkodzony?

28

Skąd mam wiedzieć, czy mam dowiązanie symboliczne, jakiś skrót lub folder w systemie Linux? Zobacz poniższy zrzut ekranu.

dowiązanie symboliczne w powłoce linux

Jak widać, lspolecenie wyświetla listę obiektów, w których niektóre mają kolor ciemnoniebieski, a inne jasnoniebieski (cyjan). Co to są te kolorowe obiekty? Czy te rzeczywiste linki symboliczne?

Jak widać, nie mogę cddo tego zwanego hdd.

root@dm500hd:/# cd hdd
-sh: cd: can't cd to hdd

Myślę, że musi się przekierować /media/hddi zauważyłem, że brakuje folderu dysku twardego.

Czy istnieje sposób, aby to naprawić?

Aktualizacja: Oto wyniki ls -alpolecenia.

dowiązanie symboliczne w powłoce linux 2

Jak widać, jest napisane hdd -> /media/hddi ma kolor czerwony. Czy to oznacza, że ​​jest zepsuty lub że jest automatycznie zamontowany, tj. Gdy podłączony jest fizyczny dysk twardy?

Aktualizacja: Oto wynik grep media /etc/auto*polecenia.

dowiązanie symboliczne w powłoce linux 3

Co robią te /etc/auto.master:/media/neti /etc/auto.networkwpisy?

Oto wyniki ls -Fal /mediapolecenia.

dowiązanie symboliczne w powłoce linux 4

Czy to pomoże? ...

Oto wyniki stati filepolecenia, a także listy / usr i / bin.

dowiązanie symboliczne w powłoce linux 5

Czy to mi w jakikolwiek sposób pomaga? ... czy pomaga mi?

Na marginesie, powinieneś wiedzieć, że jest to oparty na Linuksie STB z BusyBox, jest to system osadzony. Dlatego nie wszystkie polecenia mogą być obsługiwane.

Aktualizacja: ostatni zrzut ekranu, pokazujący pliki i obsługiwane polecenia w / sbin i / usr / sbin.

dowiązanie symboliczne w powłoce linux 6

Aktualizacja: Dodano nowy udział ...

Teraz usunąłem ten stary udział i odtworzyłem go o tej samej nazwie co poprzednio, a także dodałem teraz drugi udział. Więc teraz mam dwa z nich.

SHARES
remote share   local share
mydream        dream1
mydream2       dream2

LOCATIONS
remote        local
C:\mydream    /media/net/dream1
C:\mydream2   /media/net/dream2

Nagrania są umieszczane w / media / net / dream1 / movie.

Ponadto w przypadku udziału dream2 postanowiłem nie montować go jako zamiennika HDD w Mount Managerze, ponieważ podejrzewam, że nie można mieć więcej niż jednego działania jako HDD. Gdzie by to nagrywało? Do obu lokalizacji? Przy podwójnej szybkości przesyłania danych? ... Nie sądzę, że jest to możliwe.

Z tego powodu nie ma podfolderu o nazwie film dla udziału dream2. Tylko te, które są określone jako wymiana dysku twardego podczas tworzenia, otrzymują podfolder filmu.

Jeśli mam cdHDD z roota, to idzie do /media/net/dream1. Gdybym cdsię ..(rodzic) to sięga root (/).

W root ls -aldaje hdd -> media/hdd. ls -al hdddaje hdd -> media/hdd. ls -al mediadaje /media/net/dream1.

Ponadto, gdybym cdsię /medianie ma innego hdddowiązanie. Nie zauważyłem tego wcześniej. Myślę, że jest to tworzone automatycznie po zamontowaniu udziału. A jeśli pójdę cdna ten dysk twardy, to pójdzie /media/net/dream1.

Dowiązanie symboliczne hdd(/ hdd) wskazujące na inne hdddowiązanie symboliczne (/ media / hdd), które z kolei wskazuje folder współdzielony (/ media / net / dream1)? ..... Mam zawroty głowy ...

Nie było tak przed wersją 3.2.3 lub co najmniej 3.2.0 obrazu Enigma2.

Edycja: Ustawiając drugi udział, który działa jak wymiana dysku twardego, staje się on aktywnym udziałem do nagrywania. Jednocześnie udział, który wcześniej był ustawiony na wymianę dysku twardego, nie jest już aktywny, nawet jeśli nadal jest ustawiony na „tak” (działa jak wymiana dysku twardego).

Jeśli Dream1 został po raz pierwszy użyty jako zamiennik HDD („tak”, aby działać jako zamiennik), a następnie Dream2 ma działać jako zamiennik HDD, staje się nowym udziałem do nagrywania. Nadal widzę i przeglądam pliki wideo przechowywane w dream1, ale nie mogę już nagrywać. Jeśli chcę wrócić do korzystania z Dream1 do nagrywania, najpierw muszę ustawić dream2 na „nie” (przestać działać jako wymiana dysku twardego), a następnie zresetować dream1 na „tak”.

Więc nie, nie można nagrywać do dwóch akcji jednocześnie. Jeden z nich musi odejść. Więc to albo sen1 albo sen2, a nie oba. Chociaż powinienem wspomnieć, że można nagrywać więcej niż jedną usługę (kanał telewizyjny), jeśli oba są na tym samym transponderze, jeśli nie, pojawi się komunikat „brak darmowego tunera”. To jest STB z tylko jednym tunerem.

Samir
źródło
3
nie wklejaj zrzutów ekranu dla tekstu. zamiast tego skopiuj i wklej tekst oraz użyj tagów wstępnych lub kodowych lub tylnych, aby zachować wcięcia / formatowanie. i edytuj tekst do minimum wymaganego do wyświetlenia tego, co próbujesz pokazać. BTW, jednym problemem z zrzutami ekranu jest to, że małe czcionki stają się jeszcze drobniejsze - do tego stopnia, że ​​są nieczytelne - gdy oglądane na ekranach o wyższej rozdzielczości (np. 1920x1200 lub 2566x1440) ... piksele są naprawione, tekst można skalować.
cas
@CraigSanders Sanders Jesteś wysoki ... w rozdzielczości! ;) Paskudnie, słyszę cię człowieku! Tak naprawdę nie myślałem o tym aspekcie. Dzięki za wskazówkę. Następnym razem spróbuję użyć bloku kodu.
Samir
W ls -alrzeczywistości pokazuje wszystkie pliki (-a) na długiej (-l) liście. Tak, to daje mi więcej informacji, ale czy pomaga mi zidentyfikować dowiązanie symboliczne? Jeśli ma strzałkę po prawej, czy w ten sposób dowiem się, czy jest to dowiązanie symboliczne? Drugim identyfikatorem jest oczywiście kod koloru, ale niektórzy z was sugerują, że nie można ufać kolorowi.
Samir
To już nie jest problem. Zainstalowałem udział Windows CIFS za pośrednictwem wtyczki Mount Manager (Dreambox, Enigma 2, wydanie 3.2.3) i zdecydowałem się użyć go jako zamiennika dysku twardego. Po wykonaniu tej ls -alkomendy pojawiło się hdd -> media/hdd. A teraz można cdHDD i link działa. Ale ciekawe jest to, że ls -al mediapokazuje, hdd -> /media/net/mydreami to właśnie tam idzie, kiedy ja cdna HDD. „Mydream” to nazwa udziału. Dlaczego otrzymuję różne wyniki?
Samir
Domyślam się, że istnieje jakiś mechanizm (prawdopodobnie reguła udev), aby upewnić się, że dowiązanie symboliczne / hdd jest aktualizowane, aby wskazywało na dowolne zamontowane urządzenie lub udział, tak aby inne programy i skrypty mogły po prostu używać / hdd (po przetestowaniu tego katalogu wskazuje na zamontowany fs). z ciekawości, co się stanie, jeśli zamontujesz drugi dysk lub udostępnisz? Czy tworzy dowiązanie symboliczne / hde? lub czy Dreambox jest ograniczony do jednego katalogu nagrań?
cas

Odpowiedzi:

29

Możesz użyć pliku, statystyki lub ls.

plik:

Polecenie file służy do klasyfikowania plików na podstawie ich typu (dowiązanie symboliczne, katalog, urządzenie) lub zawartości (tekst, gzip, obraz, tar, ..., niezależnie od ich rozszerzenia):

$ file / dev / stdout
/ dev / stdout: symboliczny link do `/ proc / self / fd / 1 '
$ plik / proc / self / fd / 1
/ proc / self / fd / 1: symboliczny link do `/ dev / pts / 0 '
$ plik / dev / pts / 0
/ dev / pts / 0: znak specjalny (136/0)
$ plik / etc / passwd
/ etc / passwd: tekst ASCII

ls:

$ ls -al / dev / stdout
lrwxrwxrwx 1 root root 15 stycznia 27 07:55 / dev / stdout -> / proc / self / fd / 1

stat:

polecenie stat drukuje metadane pliku, takie jak uprawnienia, rozmiar, liczba bloków i tak dalej ...

$ stat / dev / stdout
  Plik: '/ dev / stdout' -> '/ proc / self / fd / 1'
  Rozmiar: 15 bloków: 0 blok IO: 4096 symboliczny link
Urządzenie: 5h / 5d I-węzeł: 1212 Linki: 1
Dostęp: (0777 / lrwxrwxrwx) Uid: (0 / root) Gid: (0 / root)
Dostęp: 27.01.2014 11: 22: 47.971187828 -0200
Zmodyfikuj: 27.01.2014 07: 55: 13.996981285 -0200
Zmiana: 27.01.2014 07: 55: 13.996981285 -0200
 Narodziny: -
filipenf
źródło
Co to file hdddotyczy? Nie rozumiem ...
Samir
stat hddDaje mi -sh: stat: not found.
Samir
Myślę, że nie masz polecenia stat (lub nie ma go w $ PATH). W każdym razie polecenie pliku może dać ci szansę ...
filipenf
W przypadku bash na terminalu Mac polecenie file domyślnie podąża za dowiązaniami symbolicznymi. Jeśli chcesz zobaczyć, czy jest to dowiązanie symboliczne, dodaj polecenie -h. Który nie podąża za dowiązaniami symbolicznymi.
ClintM,
7

grzmotnąć:

if [[ -h dirname ]]; then
    echo "it's a symbolic link"
    if ! stat $(readlink dirname) &>/dev/null; then
        echo "link target does not exist"
    fi
fi
Glenn Jackman
źródło
3

Najłatwiejszym sposobem sprawdzenia, jaki rodzaj bytu jest dany plik, byłoby użycie filepolecenia. Ma wyraźne, rozsądne wyjście bez konieczności zapamiętywania lsznaków klasyfikatora lub polegania na kolorowych wydrukach, które mogą być różne dla różnych użytkowników i maszyn. Na przykład:

mail ~ # file /test
/test: broken symbolic link to `/nonexist'
mail ~ # file /dev
/dev: directory
mail ~ # file /dev/fd
/dev/fd: symbolic link to `/proc/self/fd'

Jeśli znajdziesz się w systemie bez niego file, możesz użyć statpolecenia, które powie ci, jaki to jest wpis pliku i gdzie wskazuje. Aby dowiedzieć się, czy link jest uszkodzony, musisz uruchomić stat -Ldereferencję linków, co spowoduje błąd, jeśli link zostanie uszkodzony.

Co do drugiej części pytania, mediakatalogiem często zarządzają pewnego rodzaju automountery. /media/hddWpis może być używany przez system dla urządzeń pamięci masowej USB lub może być nawet czekając na odpowiedni rodzaj dysku (ATA SCSI vs vs Xen urządzenia blokowego). Zepsute linki nic nie zaszkodzą, chyba że program spróbuje ich użyć, a linki multimedialne są naprawdę dla Twojej wygody. Możesz bezpiecznie zostawić /hddlink lub usunąć go, jak chcesz.

joruffin
źródło
Masz rację, wygląda na to, że plik nie jest tutaj poleceniem, mówi, -sh: file: not foundkiedy to zrobię filei wejdę.
Samir
Wygląda na to, że twoja $ PATH jest trochę ograniczona. Zamiast tego spróbuj wykonać go bezpośrednio:/usr/bin/file
joruffin,
Widzę z twojego innego komentarza, że ​​jesteś na dekoderze. To może nie mieć zainstalowanego niczego innego niż Busybox, a Busybox nie emuluje filepolecenia, ale ma wsparcie dla statpolecenia, jeśli zostało ono skompilowane. Wciąż może znajdować się poza $ PATH lub mieszka w nieznanym miejscu, takim jak / sbin / stat lub / usr / sbin / stat.
joruffin
Nie wygląda na to, że ma wsparcie dla jednego filelub stat. Sprawdziłem ścieżki, o których wspomniałeś (patrz zrzut ekranu powyżej). W każdym razie ... mówisz, że w idealnym systemie Linux filepolecenie, a następnie ścieżka wyszukiwania pliku docelowego lub folderu ujawniłyby mi, jaki to byt?
Samir
2
Jeśli chodzi o obsługiwane polecenia w Busybox, możesz je uruchomić /usr/bin/busyboxi pokaże wszystkie polecenia, które obsługuje, nawet jeśli polecenia nie są zainstalowane. Aby użyć polecenia busybox, możesz uruchomić /usr/bin/busybox <command> <parameters>. Więc jeśli mówi, że obsługuje polecenie stat, które możesz uruchomić /usr/bin/busybox stat /hdd. Dla łatwego użycia możesz utworzyć dowiązania symboliczne dla Busybox z nazwą polecenia do wywołania. Jeśli obsługuje polecenie stat, możesz z nim łatwo uruchomić ln -s /usr/bin/busybox /usr/bin/stat.
joruffin
1
  1. Tak, cyjan są symbolicznymi linkami
  2. Aby zobaczyć, gdzie wskazują: ls -Fal
  3. Wydajność ls -Fal /media

Jest to prawdopodobnie pewien punkt automatyczny.

grep media /etc/auto* może spowodować trafienie.

Nils
źródło
Co to jest punkt automatyczny? Masz na myśli ... kiedy podłączam fizyczny dysk SATA, jest on montowany do tego momentu? ... to jest Linux STB i nie ma wbudowanego dysku twardego, ale ma port eSATA z tyłu. Może to być przeznaczone do tego celu.
Samir,
@Sammy Tak /mediato standardowy punkt montowania dla urządzeń PnP.
Nils