Bagaimana saya tahu apakah folder itu sebenarnya symlink dan bagaimana cara memperbaikinya jika rusak?

28

Bagaimana saya tahu jika saya memiliki symlink, pintasan atau folder di Linux? Silakan lihat screenshot berikut.

tautan simbolik dalam shell linux

Seperti yang Anda lihat, lsperintah ini mencantumkan objek di mana beberapa diwarnai biru tua sementara yang lain berwarna biru muda (cyan). Apa benda berwarna cyan ini? Apakah ini tautan simbolis yang sebenarnya?

Seperti yang Anda lihat, saya tidak bisa cdke yang disebut hdd.

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

Saya pikir itu harus dialihkan ke /media/hdddan saya perhatikan bahwa folder hdd hilang.

Apakah ada cara untuk memperbaikinya?

Pembaruan: Ini adalah hasil dari ls -alperintah.

tautan simbolik di shell linux 2

Seperti yang Anda lihat tertulis hdd -> /media/hdddan warnanya merah. Apakah ini berarti bahwa itu rusak atau diautomatisasi, yaitu ketika hdd fisik terhubung?

Pembaruan: Ini adalah hasil dari grep media /etc/auto*perintah.

tautan simbolik di shell linux 3

Apa yang dilakukan /etc/auto.master:/media/netdan /etc/auto.networkentri ini lakukan?

Ini adalah hasil dari ls -Fal /mediaperintah.

tautan simbolik dalam shell linux 4

Apakah ini bisa membantu? ...

Berikut adalah hasil dari statdan fileperintah, serta daftar / usr dan / bin.

tautan simbolik dalam shell linux 5

Apakah ini membantu saya dengan cara apa pun? ... Apakah itu membantu Anda membantu saya? ...

Sebagai tambahan, apa yang harus Anda ketahui adalah bahwa ini adalah STB berbasis Linux dengan BusyBox, ini adalah sistem tertanam. Jadi tidak semua perintah mungkin didukung.

Pembaruan: Tangkapan layar terakhir, menampilkan file dan perintah yang didukung di / sbin dan / usr / sbin.

tautan simbolik di shell linux 6

Perbarui: Bagian baru ditambahkan ...

Saya sekarang telah menghapus bagian lama itu dan menciptakannya kembali dengan nama yang sama seperti sebelumnya dan juga menambahkan bagian kedua sekarang. Jadi sekarang saya punya dua.

SHARES
remote share   local share
mydream        dream1
mydream2       dream2

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

Rekaman ditempatkan di / media / net / dream1 / film.

Juga, untuk share dream2 saya telah memilih untuk tidak memasangnya sebagai pengganti HDD di Mount Manager, karena saya menduga bahwa tidak mungkin memiliki lebih dari satu tindakan sebagai HDD. Di mana itu akan merekam? Ke kedua lokasi? Dengan menggandakan kecepatan data? ... Saya rasa itu tidak mungkin.

Jadi untuk alasan ini tidak ada film bernama subfolder untuk share dream2. Hanya yang ditentukan sebagai pengganti HDD saat dibuat yang mendapatkan subfolder film.

Jika saya cdke HDD dari akar itu pergi ke /media/net/dream1. Jika saya cdke ..(orang tua) itu akan kembali ke root (/).

Pada akar ls -almemberi hdd -> media/hdd. ls -al hddmemberi hdd -> media/hdd. ls -al mediamemberi /media/net/dream1.

Juga, jika saya cdke /mediasana ada hddsymlink lain . Saya belum menyadarinya sebelumnya. Saya pikir ini dibuat secara otomatis ketika berbagi dipasang. Dan jika saya cdke hdd ini pergi ke /media/net/dream1.

Sebuah symlink hdd(/ hdd) yang menunjuk ke hddsymlink lain (/ media / hdd), yang pada gilirannya menunjuk ke folder share (/ media / net / dream1)? ..... Saya mulai pusing ...

Tidak seperti ini sebelum versi 3.2.3 atau setidaknya 3.2.0 dari gambar Enigma2.

Sunting: Dengan mengatur share kedua untuk bertindak sebagai pengganti HDD itu menjadi share aktif untuk direkam. Pada saat yang sama bagian yang sebelumnya ditetapkan untuk bertindak sebagai pengganti HDD tidak lagi aktif, bahkan jika itu masih diatur ke "ya" (bertindak sebagai pengganti HDD).

Jika dream1 pertama kali digunakan sebagai pengganti HDD ("ya" untuk bertindak sebagai pengganti) dan kemudian dream2 diatur untuk bertindak sebagai pengganti HDD, itu menjadi bagian baru untuk direkam. Saya masih bisa melihat dan melihat file video yang disimpan di dream1 tetapi saya tidak bisa lagi merekamnya. Jika saya ingin kembali menggunakan dream1 untuk merekam, pertama-tama saya harus menetapkan dream2 ke "tidak" (berhenti bertindak sebagai pengganti HDD) dan kemudian reset dream1 ke "ya".

Jadi tidak, itu tidak dapat merekam ke dua saham sekaligus. Salah satu dari mereka harus pergi. Jadi itu adalah dream1 atau dream2, bukan keduanya. Walaupun saya harus menyebutkan bahwa dimungkinkan untuk merekam lebih dari satu layanan (saluran tv) jika keduanya berada pada transponder yang sama, jika tidak Anda mendapatkan pesan "no free tuner". Ini adalah STB dengan hanya satu tuner.

Samir
sumber
3
tolong jangan tempel tangkapan layar untuk teks. salin dan tempel teksnya, dan gunakan tag pra atau kode atau backticks untuk mempertahankan lekukan / pemformatan. dan edit teks ke minimum yang diperlukan untuk menunjukkan apa pun yang Anda coba tampilkan. BTW, satu masalah dengan tangkapan layar adalah font kecil menjadi lebih kecil - sampai tidak terbaca - bila dilihat pada layar resolusi lebih tinggi (mis. 1920x1200 atau 2566x1440) ... piksel diperbaiki, teks dapat ditingkatkan.
cas
@CraigSanders Sanders Anda hebat ... dalam resolusi! ;) Dengan tenang, aku mendengarmu, kawan! Saya tidak benar-benar memikirkan aspek itu. Terima kasih atas tipnya. Saya akan mencoba menggunakan blok kode waktu berikutnya.
Samir
Yang ls -albenar-benar dilakukannya adalah menampilkan semua file (-a) dalam daftar panjang (-l). Ya, ini memberi saya informasi lebih lanjut, tetapi apakah itu membantu saya mengidentifikasi tautan simbolik? Jika memiliki panah ke kanan, apakah itu yang saya tahu jika itu adalah tautan simbolik? Pengidentifikasi lainnya jelas kode warna, tetapi beberapa dari Anda menyarankan agar warnanya tidak dapat dipercaya.
Samir
Ini bukan lagi masalah. Saya memasang share Windows CIFS melalui plugin Mount Manager (Dreambox, Enigma 2, rilis 3.2.3) dan saya memilih untuk menggunakannya sebagai pengganti HDD. Setelah melakukan ini, ls -alperintah muncul hdd -> media/hdd. Dan sekarang mungkin cduntuk hdd dan tautannya berfungsi. Tapi yang menarik adalah ls -al mediapertunjukan itu hdd -> /media/net/mydreamdan ini sebenarnya ke mana saya pergi cdke hdd. "Mydream" adalah nama dari share. Mengapa saya mendapatkan hasil yang berbeda?
Samir
Dugaan saya adalah bahwa ada beberapa mekanisme (mungkin aturan udev) untuk memastikan bahwa / hdd symlink diperbarui untuk menunjuk pada perangkat atau bagian apa pun yang dipasang, sehingga program dan skrip lain dapat menggunakan / hdd (setelah menguji direktori tersebut itu menunjuk ke adalah mount fs). hanya karena penasaran, apa yang terjadi jika Anda memasang drive kedua atau berbagi? Apakah itu membuat symlink / hde? atau apakah dreambox terbatas pada satu direktori rekaman?
cas

Jawaban:

29

Anda dapat menggunakan file, stat atau ls.

mengajukan:

Perintah file digunakan untuk mengklasifikasikan file berdasarkan jenisnya (symlink, direktori, perangkat) atau konten (teks, gzip, gambar, tar, ..., terlepas dari ekstensi mereka):

$ file / dev / stdout
/ dev / stdout: tautan simbolik ke `/ proc / self / fd / 1 '
$ file / proc / self / fd / 1
/ proc / self / fd / 1: tautan simbolik ke `/ dev / pts / 0 '
$ file / dev / pts / 0
/ dev / pts / 0: karakter spesial (136/0)
$ file / etc / passwd
/ etc / passwd: teks ASCII

ls:

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

stat:

perintah stat mencetak metadata file seperti izin, ukuran, jumlah blok, dan sebagainya ...

$ stat / dev / stdout
  File: '/ dev / stdout' -> '/ proc / self / fd / 1'
  Ukuran: 15 Blok: 0 IO Blok: 4096 tautan simbolik
Perangkat: 5h / 5d Inode: 1212 Links: 1
Akses: (0777 / lrwxrwxrwx) Uid: (0 / root) Gid: (0 / root)
Akses: 2014-01-27 11: 22: 47.971187828 -0200
Ubah: 2014-01-27 07: 55: 13.996981285 -0200
Ubah: 2014-01-27 07: 55: 13.996981285 -0200
 Kelahiran: -
filipenf
sumber
Apa yang dimaksud file hdddengan Saya tidak mengerti ...
Samir
The stat hddmemberi saya -sh: stat: not found.
Samir
Saya pikir Anda tidak memiliki perintah stat (atau tidak dalam $ PATH Anda). Pokoknya perintah file dapat memberi Anda kesempatan ...
filipenf
Untuk bash di terminal Mac, perintah file mengikuti symlink secara default. Jika Anda ingin melihat apakah itu symlink, tambahkan perintah -h. Yang tidak mengikuti symlinks.
ClintM
7

pesta:

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
sumber
3

Cara termudah untuk melihat entitas seperti apa file yang diberikan adalah menggunakan fileperintah. Ini memiliki output yang jelas dan waras tanpa mengharuskan Anda mengingat apa lstanda classifiernya, atau mengandalkan output berwarna yang dapat bervariasi dari pengguna ke pengguna dan mesin ke mesin. Sebagai contoh:

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'

Jika Anda menemukan diri Anda pada sistem tanpa fileAnda dapat menggunakan statperintah yang akan memberi tahu Anda apa jenis entri file itu dan di mana ia menunjuk. Untuk mengetahui apakah tautan rusak, Anda harus menjalankan stat -Ltautan dereference, yang akan memberikan kesalahan jika tautan rusak.

Adapun bagian kedua dari pertanyaan Anda, mediadirektori sering dikelola oleh beberapa jenis automounters. The /media/hddentri dapat digunakan oleh sistem anda untuk perangkat penyimpanan massal USB atau bahkan mungkin menunggu yang tepat hard drive (ATA vs SCSI vs perangkat blok Xen). Tautan rusak tidak akan merusak apa pun kecuali suatu program mencoba menggunakannya, dan tautan media itu benar-benar untuk kenyamanan Anda. Anda dapat dengan aman meninggalkan /hddtautan atau menghapusnya sesuka Anda.

Joruffin
sumber
Anda benar, sepertinya file bukan perintah di sini, katanya -sh: file: not foundketika saya lakukan filedan masuk.
Samir
Kedengarannya seperti $ PATH Anda agak terbatas. Coba /usr/bin/file
jalankan
Saya melihat dari komentar Anda yang lain bahwa Anda berada di set top box. Itu mungkin tidak memiliki apa pun selain Busybox diinstal, dan Busybox tidak meniru fileperintah, tetapi tidak memiliki dukungan untuk statperintah jika itu dikompilasi. Masih mungkin di luar $ PATH Anda, atau tinggal di suatu tempat yang tidak jelas seperti / sbin / stat atau / usr / sbin / stat.
joruffin
Sepertinya tidak memiliki dukungan untuk fileatau stat. Saya memeriksa jalur yang Anda sebutkan (lihat tangkapan layar di atas). Pokoknya ... apa yang Anda katakan adalah bahwa dalam sistem Linux yang ideal, fileperintah, diikuti oleh jalur pencarian file atau folder target akan mengungkapkan kepada saya seperti apa entitas itu?
Samir
2
Adapun perintah yang didukung di Busybox Anda dapat menjalankan /usr/bin/busyboxdan itu akan menampilkan semua perintah yang didukung, bahkan jika perintah tidak diinstal. Untuk menggunakan perintah busybox Anda dapat menjalankan /usr/bin/busybox <command> <parameters>. Jadi jika dikatakan mendukung perintah stat Anda bisa menjalankan /usr/bin/busybox stat /hdd. Agar mudah digunakan, Anda dapat membuat symlink untuk Busybox dengan nama perintah yang akan dipanggil. Jika mendukung perintah stat, Anda bisa membuatnya mudah dijalankan ln -s /usr/bin/busybox /usr/bin/stat.
joruffin
1
  1. Ya cyan adalah tautan simbolis
  2. Untuk melihat ke mana mereka menunjuk: ls -Fal
  3. Keluaran ls -Fal /media

Ini mungkin merupakan titik otomatis dari beberapa jenis.

grep media /etc/auto* mungkin menghasilkan hit.

Nils
sumber
Apa itu titik-otomatis? Maksud Anda seperti ... ketika saya mencolokkan drive disk SATA fisik ia dipasang ke titik ini? ... ini adalah STB Linux dan tidak memiliki HDD bawaan, tetapi ia menampilkan port eSATA di bagian belakang. Ini mungkin didedikasikan untuk tujuan ini.
Samir
@ Sammy Ya /mediaadalah titik mount standar untuk perangkat PnP.
Nils