Làm thế nào để tôi biết nếu một thư mục thực sự là một liên kết tượng trưng và làm cách nào để sửa nó nếu nó bị hỏng?


28

Làm thế nào để tôi biết nếu tôi có một liên kết tượng trưng, ​​một lối tắt nào đó hoặc một thư mục trong Linux? Xin vui lòng xem ảnh chụp màn hình sau đây.

liên kết tượng trưng trong shell linux

Như bạn có thể thấy, lslệnh liệt kê các đối tượng trong đó một số được tô màu xanh lam đậm trong khi các đối tượng khác có màu xanh lam nhạt (lục lam). Những vật màu lục lam này là gì? Là những liên kết tượng trưng thực tế?

Như bạn có thể thấy, tôi không thể cdvới người được gọi là hdd.

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

Tôi nghĩ rằng nó phải chuyển hướng đến /media/hddvà tôi đã nhận thấy rằng thư mục hdd bị thiếu.

Có cách nào để sửa lỗi này?

Cập nhật: Đây là kết quả của ls -allệnh.

liên kết tượng trưng trong linux shell 2

Như bạn có thể thấy nó nói hdd -> /media/hddvà nó có màu đỏ. Điều này có nghĩa là nó bị hỏng hoặc nó được tự động hóa, tức là khi một hdd vật lý được kết nối?

Cập nhật: Đây là kết quả của grep media /etc/auto*lệnh.

liên kết tượng trưng trong linux shell 3

Những điều này /etc/auto.master:/media/net/etc/auto.networkcác mục làm gì?

Dưới đây là kết quả của ls -Fal /medialệnh.

liên kết tượng trưng trong linux shell 4

Đây có phải là bất kỳ trợ giúp? ...

Dưới đây là kết quả statfilecác lệnh, cũng như danh sách / usr và / bin.

liên kết tượng trưng trong linux shell 5

Điều này có giúp tôi theo bất kỳ cách nào không? ... nó có giúp bạn giúp tôi không? ...

Về mặt không, điều bạn nên biết là đây là một bản dựa trên Linux với BusyBox, đây là một hệ thống nhúng. Vì vậy, không phải tất cả các lệnh có thể được hỗ trợ.

Cập nhật: Ảnh chụp màn hình cuối cùng, hiển thị các tệp và các lệnh được hỗ trợ trong / sbin và / usr / sbin.

liên kết tượng trưng trong linux shell 6

Cập nhật: Chia sẻ mới được thêm ...

Bây giờ tôi đã xóa chia sẻ cũ đó và tạo lại một chia sẻ có cùng tên như trước đây và cũng đã thêm một chia sẻ thứ hai bây giờ. Vì vậy, bây giờ tôi có hai trong số họ.

SHARES
remote share   local share
mydream        dream1
mydream2       dream2

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

Các bản ghi được đặt trong / media / net / dream1 / movie.

Ngoài ra, đối với chia sẻ dream2, tôi đã chọn không gắn nó vào vị trí thay thế ổ cứng trong Mount Manager, vì tôi nghi ngờ rằng không thể có nhiều hơn một hoạt động như một ổ cứng. Nó sẽ ghi ở đâu? Đến cả hai địa điểm? Với tốc độ dữ liệu gấp đôi? ... Tôi không nghĩ rằng nó có thể.

Vì vậy, vì lý do này, không có thư mục con được đặt tên cho chia sẻ dream2. Chỉ những cái được chỉ định là thay thế ổ cứng khi được tạo mới có được thư mục con phim.

Nếu tôi cdđể hdd từ gốc nó đi đến /media/net/dream1. Nếu tôi cdđến ..(mẹ) nó đi trở lại root (/).

Tại gốc ls -alcho hdd -> media/hdd. ls -al hddcho hdd -> media/hdd. ls -al mediacho /media/net/dream1.

Ngoài ra, nếu tôi cdđến /mediacó một hddliên kết tượng trưng khác . Tôi đã không nhận thấy nó trước đây. Tôi nghĩ rằng điều này được tạo tự động khi một chia sẻ được gắn kết. Và nếu tôi cdđể hdd này nó đi /media/net/dream1.

Một symlink hdd(/ hdd) trỏ đến một hddsymlink khác (/ media / hdd), lần lượt trỏ đến thư mục chia sẻ (/ media / net / dream1)? ..... Tôi đang bị chóng mặt ...

Nó không giống như thế này trước phiên bản 3.2.3 hoặc ít nhất là 3.2.0 của hình ảnh Enigma2.

Chỉnh sửa: Bằng cách cài đặt chia sẻ thứ hai để hoạt động như một thay thế ổ cứng, nó trở thành chia sẻ hoạt động để ghi. Đồng thời, chia sẻ trước đây được thiết lập để thay thế ổ cứng không còn hoạt động, ngay cả khi nó vẫn được đặt thành "có" (hoạt động như thay thế ổ cứng).

Nếu dream1 lần đầu tiên được sử dụng thay thế ổ cứng ("có" để đóng vai trò thay thế) và sau đó dream2 được thiết lập để thay thế ổ cứng, nó sẽ trở thành chia sẻ mới để ghi. Tôi vẫn có thể xem và xem các tập tin video được lưu trữ trong dream1 nhưng tôi không còn có thể ghi lại nó. Nếu tôi muốn quay lại sử dụng dream1 để ghi âm, trước tiên tôi phải đặt dream2 thành "không" (dừng hoạt động như thay thế ổ cứng) và sau đó đặt lại dream1 thành "có".

Vì vậy, không, nó không thể ghi lại hai cổ phiếu cùng một lúc. Một trong số họ phải đi. Vì vậy, đó là dream1 hoặc dream2, không phải cả hai. Mặc dù tôi nên đề cập rằng có thể ghi nhiều hơn một dịch vụ (kênh truyền hình) nếu cả hai đều trên cùng một bộ phát đáp, nếu không bạn sẽ nhận được thông báo "không có bộ chỉnh miễn phí". Đây là một STB chỉ có một bộ chỉnh.


3
xin vui lòng không dán ảnh chụp màn hình cho văn bản. sao chép và dán văn bản thay vào đó, và sử dụng các thẻ trước hoặc mã hoặc backticks để duy trì thụt lề / định dạng. và chỉnh sửa văn bản xuống mức tối thiểu cần thiết để hiển thị bất cứ thứ gì bạn đang cố gắng hiển thị. BTW, một vấn đề với ảnh chụp màn hình là phông chữ nhỏ thậm chí còn trở nên nhỏ hơn - đến mức không thể đọc được - khi xem trên màn hình độ phân giải cao hơn (ví dụ 1920x1200 hoặc 2566x1440) ... các pixel được cố định, văn bản có thể được thu nhỏ.
cas

@CraigSanders Sanders Bạn đang ... giải quyết cao! ;) Thật đáng buồn, tôi nghe thấy bạn! Tôi đã không thực sự nghĩ về khía cạnh đó của nó. Cảm ơn vì tiền hỗ trợ. Tôi sẽ thử sử dụng một khối mã lần sau.
Samir

Điều ls -althực sự làm là nó hiển thị tất cả các tệp (-a) trong một danh sách dài (-l). Vâng, điều này cung cấp cho tôi thêm thông tin, nhưng nó có giúp tôi xác định một liên kết tượng trưng không? Nếu nó có một mũi tên ở bên phải, đó là cách tôi nói nếu nó là một liên kết tượng trưng? Mã định danh khác rõ ràng là mã màu, nhưng một số bạn cho rằng màu sắc không đáng tin cậy.
Samir

Đây không còn là một vấn đề. Tôi đã gắn một chia sẻ Windows CIFS thông qua plugin Mount Manager (Dreambox, Enigma 2, phiên bản 3.2.3) và tôi đã chọn sử dụng nó để thay thế ổ cứng. Sau khi làm điều này ls -allệnh cho thấy hdd -> media/hdd. Và bây giờ có thể cdhdd và liên kết hoạt động. Nhưng điều thú vị là ls -al mediachương trình đó hdd -> /media/net/mydreamvà thực tế nó diễn ra khi tôi cdôm. "Mydream" là tên của chia sẻ. Tại sao tôi nhận được kết quả khác nhau?
Samir

Tôi đoán là có một số cơ chế (có thể là quy tắc udev) để đảm bảo rằng liên kết / hdd được cập nhật để trỏ đến bất kỳ thiết bị hoặc chia sẻ nào được gắn kết, để các chương trình và tập lệnh khác chỉ có thể sử dụng / hdd (sau khi kiểm tra thư mục đó nó trỏ đến là một fs gắn kết). Vì tò mò, điều gì xảy ra nếu bạn gắn ổ đĩa thứ hai hoặc chia sẻ? Nó làm cho một liên kết / hde? hoặc là dreambox giới hạn trong một thư mục ghi âm?
cas

Câu trả lời:


29

Bạn có thể sử dụng tập tin, stat hoặc ls.

tập tin:

Lệnh tệp được sử dụng để phân loại các tệp dựa trên loại của chúng (symlink, thư mục, thiết bị) hoặc nội dung (văn bản, gzip, hình ảnh, tar, ..., bất kể phần mở rộng của chúng):

$ file / dev / stdout
/ dev / stdout: liên kết tượng trưng đến `/ Proc / self / fd / 1 '
$ tập tin / Proc / tự / fd / 1
/ Proc / self / fd / 1: liên kết tượng trưng đến `/ dev / pts / 0 '
$ file / dev / pts / 0
/ dev / pts / 0: ký tự đặc biệt (136/0)
$ file / etc / passwd
/ etc / passwd: văn bản ASCII

ls:

$ ls -al / dev / stdout
lrwxrwxrwx 1 root 15 ngày 27 tháng 1 07:55 / dev / stdout -> / Proc / self / fd / 1

số liệu thống kê:

lệnh stat in ra siêu dữ liệu tệp như quyền, kích thước, số khối, v.v ...

$ stat / dev / thiết bị xuất chuẩn
  Tệp: '/ dev / stdout' -> '/ Proc / self / fd / 1'
  Kích thước: 15 Khối: 0 Khối IO: 4096 liên kết tượng trưng
Thiết bị: 5h / 5d Nút: 1212 Liên kết: 1
Truy cập: (0777 / lrwxrwxrwx) Uid: (0 / root) Gid: (0 / root)
Truy cập: 2014-01-27 11: 22: 47.971187828 -0200
Sửa đổi: 2014-01-27 07: 55: 13.996981285 -0200
Thay đổi: 2014-01-27 07: 55: 13.996981285 -0200
 Sinh: -

file hddđề cập đến cái gì? Tôi không hiểu ...
Samir

Việc stat hddcho tôi -sh: stat: not found.
Samir

Tôi nghĩ rằng bạn không có lệnh stat (hoặc nó không có trong $ PATH của bạn). Dù sao, lệnh tập tin có thể cung cấp cho bạn một shot ...
filipenf

Đối với bash trên thiết bị đầu cuối Mac, lệnh tệp theo mặc định symlink theo mặc định. Nếu bạn muốn xem nếu đó là một liên kết tượng trưng, ​​hãy thêm lệnh -h. Mà không theo symlink.
ClintM

7

bash

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

3

Cách dễ nhất để xem loại thực thể mà một tệp đã cho là sử dụng filelệnh. Nó có đầu ra rõ ràng, lành mạnh mà không yêu cầu bạn phải nhớ các lsdấu phân loại là gì, hoặc dựa vào đầu ra màu có thể thay đổi từ người dùng sang người dùng và máy này sang máy khác. Ví dụ:

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'

Nếu bạn thấy mình trên một hệ thống mà không có filebạn có thể sử dụng statlệnh sẽ cho bạn biết đó là loại mục nhập và vị trí của nó. Để tìm hiểu xem một liên kết có bị hỏng hay không, bạn sẽ cần phải chạy stat -Lđến các liên kết quy định, điều này sẽ báo lỗi nếu liên kết bị hỏng.

Đối với phần thứ hai của câu hỏi của bạn, mediathư mục thường được quản lý bởi các bộ đếm tự động của một số loại. Các /media/hddmục có thể được sử dụng bởi hệ thống của bạn cho các thiết bị lưu trữ USB hay thậm chí có thể chờ đợi cho đúng loại ổ cứng (ATA vs SCSI vs thiết bị khối Xen). Liên kết bị hỏng sẽ không ảnh hưởng gì trừ khi chương trình cố gắng sử dụng chúng và các liên kết truyền thông thực sự thuận tiện cho bạn. Bạn có thể an toàn rời khỏi /hddliên kết hoặc loại bỏ nó như bạn muốn.


Bạn nói đúng, có vẻ như tập tin không phải là một lệnh ở đây, nó nói -sh: file: not foundkhi tôi làm filevà nhập.
Samir

Âm thanh giống như $ PATH của bạn bị hạn chế một chút. Thay vào đó, hãy thử thực hiện trực tiếp:/usr/bin/file
joruffin

Tôi thấy từ nhận xét khác của bạn rằng bạn đang ở trên một hộp hàng đầu. Điều đó có thể không có gì khác ngoài Busybox được cài đặt và Busybox không mô phỏng filelệnh, nhưng không hỗ trợ statlệnh nếu nó được biên dịch. Nó vẫn có thể nằm ngoài $ PATH của bạn hoặc sống ở một nơi nào đó tối nghĩa như / sbin / stat hoặc / usr / sbin / stat.
joruffin

Nó không giống như nó đã hỗ trợ cho một trong hai filehoặc stat. Tôi đã kiểm tra trong các đường dẫn bạn đề cập (xem ảnh chụp màn hình ở trên). Dù sao ... những gì bạn đang nói là trong một hệ thống Linux lý tưởng, filelệnh, theo sau là đường dẫn tìm kiếm của tệp mục tiêu hoặc thư mục sẽ tiết lộ cho tôi loại thực thể đó là gì?
Samir

2
Đối với các lệnh được hỗ trợ trong Busybox, bạn có thể chạy /usr/bin/busyboxvà nó sẽ hiển thị cho bạn tất cả các lệnh mà nó hỗ trợ, ngay cả khi các lệnh không được cài đặt. Để sử dụng lệnh busybox, bạn có thể chạy /usr/bin/busybox <command> <parameters>. Vì vậy, nếu nó nói nó hỗ trợ lệnh stat bạn có thể chạy /usr/bin/busybox stat /hdd. Để dễ sử dụng, bạn có thể tạo liên kết tượng trưng cho Busybox với tên lệnh để gọi. Nếu nó hỗ trợ lệnh stat, bạn có thể dễ dàng chạy với ln -s /usr/bin/busybox /usr/bin/stat.
joruffin

1
  1. Có màu lục lam là liên kết tượng trưng
  2. Để xem nơi họ đang chỉ đến: ls -Fal
  3. Đầu ra ls -Fal /media

Đây có thể là một điểm tự động của một số loại.

grep media /etc/auto* có thể tạo ra một hit.


Điểm tự động là gì? Bạn có nghĩa là ... khi tôi cắm vào ổ đĩa SATA vật lý, nó có được gắn vào thời điểm này không? ... đây là Linux STB và nó không có ổ cứng tích hợp, nhưng nó có cổng eSATA ở mặt sau. Điều này có thể được dành riêng cho mục đích này.
Samir

@Sammy Có /medialà điểm gắn kết tiêu chuẩn cho các thiết bị PnP.
Nils
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.