Copy hoặc di chuyển 1 file trong Linux ?

Các bạn cho mình hỏi : các thao tác mà Hệ điều hành (Linux) sẽ thực hiện khi di chuyển 1 file đến 1 vị trí khác, khi copy 1 file trong cùng 1 partition . (Đây là lần đầu mình đặt câu hỏi trong diễn đàn, có gì chưa được mong các bạn góp ý thêm ! Thanks ).
thuy linh
thuy linh
Trả lời 15 năm trước
Kick phải copy, move, paste bình thường. Có ai ép uổng gì đâu mà phải dùng lệnh, chừng nào bạn bắt buộc phải làm việc với giao diện text hãy dùng. Học mấy cái này chỉ phí thời gian.
jkfshrjkg
jkfshrjkg
Trả lời 15 năm trước
- Trước tiên nhắc sơ lại về hard link, symbolic link và inode number: ....+ Nôm na 1 cách đơn giản: inode là 1 cấu trúc giữ liệu để lưu trữ thông tin về một đối tượng, hay đơn giản là 1 file nào đó trên đĩa, nó chứa thông tin về file đó như là: nơi lưu trữ trên đĩa, quyền hạn, thời gian sửa đổi gần nhất, ... Do đó mỗi file trên hệ thống tập tin sẽ có 1 chỉ số inode (inode number) duy nhất. ....+ symbolic link hay soft link có thể hiểu như một con trỏ trỏ đến một file nào đó. Bản thân symbolic link là một file riêng biệt hoàn toàn với file mà nó trỏ đến, chỉ có điều là nó chứa đường dẫn để chỉ đến file gốc. Do đó file permission trên soft link không phải là file permission của file gốc và mỗi soft link có một Inode number khác nhau. Khi bạn mở một symbolic link lên thì trước tiên nó sẽ xem xét đường dẫn mà link này trỏ đến rồi sau đó sẽ tìm kiếm đến đúng file gốc chứa nội dung thật sự để bạn thao tác trên đó. Bạn có thể tạo soft link đến một file hoặc một thư mục đều được, và có thể tạo soft link đến các file hoặc thư mục nằm ở một filesystem khác (cross filesystem) - có thể nằm trên một máy khác trên hệ thống mạng. ....+ hard link đơn giản chỉ là một directory entry (mỗi thư mục chứa nhiều file, mỗi file khi được tạo ra tại một thư mục nào đó thì trước tiên trong cái "bảng chứa tên các tập tin của thư mục đó" (tạm gọi vậy) được thêm vào một phần tử là cái file vừa tạo, còn dữ liệu thực sự được tạo ở nơi nào đó với một Inode number xác định, và cái directory entry này chỉ đến đó) khác cùng trỏ đến một file gốc nào đó. Tất cả các file trên hệ thống Linux được lưu trữ theo dạng Inode, tức là dữ liệu thực sự được lưu ở một nơi khác so với một directory entry được tạo ra tại một thư mục nào đó. Do đó có thể có nhiều directory entry được trỏ đến cùng một Inode, mỗi directory entry là một hard link. Do đó tất cả các hard link này đều có cùng chỉ số Inode với nhau và file permission cũng như nhau và giống với cái "gốc". ....+ Trong các thông tin lưu trữ của file thì có thông tin về số lượng hard link đang trỏ đến nó, mỗi khi bạn xóa một hard link thì số lượng đó sẽ được trừ đi 1, và khi số lượng của nó thành 0 thì lúc đó file đó sẽ được thật sự xóa bỏ. Còn đối với soft link thì khi bạn xóa soft link sẽ không ảnh hưởng gì đến file gốc, nhưng khi file gốc được xóa thì tất cả các soft link trỏ đến nó sẽ trở thành broken và không dùng được nữa. ....+ Hạn chế của hard link so với soft link là: không thể tạo hard link cho thư mục, không thể tạo hard link cho các file nằm ở filesystem khác, tức là qua 1 partition khác (do hard link cùng trỏ về cùng Inode mà Inode trên từng filesystem riêng biệt nhau). ....+ Hạn chế của soft link so với hard link là: tốn nhiều không gian lưu trữ hơn vì thật sự khi tạo một soft link thì sẽ tạo một directory entry mới và một Inode mới, trong khi hard link chỉ là một directory entry thôi. - Với lệnh copy (cp): ....+ Trong cùng partion: sẽ tạo ra 1 inode mới theo thông tin của inode của file được copy, tức là inode number của file mới tạo ra khác với inode number của file được copy, đồng thời thì có directory entry mới được tạo ra tương ứng. ......... Tất cả các hard link đến file được copy thì vẫn giữ nguyên và cùng inode number với file được copy đó (giống như lúc ban đầu chưa copy) và khác với inode number của file mới nên chúng hoàn toàn không liên quan gì nhau. ......... Tất cả các symbolic link đến file được copy thì vẫn *tham chiếu* tới file được copy (giống như lúc ban đầu chưa copy) và hoàn toàn không liên quan gì đến file mới. ....+ Qua partition khác (cross partition): tương tự như trường hợp cùng partition. - Với lệnh move (mv): ....+ Trong cùng partition: sẽ không có inode mới nào được tạo thêm, vấn đề chỉ là xóa directory entry ở thư mục cũ và tạo lại directory entry ở thư mục mới, và directory entry này vẫn chỉ đến inode của file đó mà thôi. ......... Tất cả các hard link đến file được move thì vẫn giữ nguyên và cùng inode number với file được move đó (giống như lúc ban đầu chưa move) và vẫn còn hiệu lực. ......... Tất cả các symbolic link đến file được move sẽ bị broken, do tính chất của symbolic link chỉ tham chiếu theo đường dẫn, tức dựa vào directory entry nên có sự thay đổi directory entry thì tất nhiên nó phải *tiêu* theo. ....+ Qua partition khác (cross partition): sẽ có inode mới được tạo ra ở partition mới, và directory entry mới được tạo ra ở partition mới, đồng thời inode và directory entry ở partition nguồn sẽ bị xóa. ......... Tất cả các hard link cũ sẽ vẫn tồn tại với inode number như cũ (trừ phi bạn xóa nó) với nội dung như cũ, chỉ có điều là nó không còn liên quan với cái file mới tạo ra ở partition mới kia nữa (đã là 1 inode hoàn toàn mới). ......... Tất cả các symbolic link đến file được move sẽ bị broken theo giải thích giống như trường hợp trên (trong cùng partition). Vài ý kiến chia sẻ. Thân.