আমি কীভাবে একটি হার্ড লিঙ্কটি মুছব?


23

সম্প্রতি আমি নিম্নলিখিতগুলির সাথে একটি লিঙ্ক তৈরি করেছি:

sudo ln -n originalFileLocation

আমি কীভাবে একটি হার্ড লিঙ্কটি মুছব?


4
এফওয়াইআই: বর্তমান ডিরেক্টরিতে ln -n /path/to/fileনামযুক্ত একটি ফাইল তৈরি করে fileএবং এর জন্য সংক্ষিপ্তকরণ ln --no-dereference /path/to/file। এর অর্থ হ'ল যদি /path/to/fileএকটি প্রতীকী লিঙ্ক হয় তবে সদ্য নির্মিত হার্ডলিঙ্কটি সিমলিংকের টার্গেটের পরিবর্তে সেই সিমিলিংকের দিকে নির্দেশ করবে।
লেকেনস্টেইন

উত্তর:


37

আপনার সাথে সেটি মুছতে পারেন rmযথারীতি: rm NameOfFile। মনে রাখবেন যে হার্ড লিঙ্কগুলির সাথে "মূল ফাইল" এবং "ফাইলটির লিঙ্ক" এর মধ্যে কোনও পার্থক্য নেই: আপনার কাছে একই ফাইলের দুটি নাম রয়েছে এবং কেবল একটির নাম মুছলে অন্যটি মুছবে না।


2
এছাড়াও আপনি sudoযে কমান্ডটি দিয়েছিলেন (সুপার-ইউজার হিসাবে) এটি তৈরি করে থাকলে আপনার এটির মূল (ব্যবহার ) হিসাবে rm করা দরকার ।
রাফা সিলেক

3
@ রাফাłসিএলাক: ভুল। একটি ইনোডের সমস্ত হার্ড-লিঙ্কগুলি একইভাবে অ্যাক্সেসের অনুমতিগুলি ভাগ করে দেয়, যা ইনোড। মুছে ফেলার জন্য, অর্থাত "আনলিংক করুন", আপনাকে সেই ফাইলের ইনডে এবং যে ডিরেক্টরিতে আপনি মুছতে চান সেটিতে যে ডিরেক্টরিতে প্রবেশের দরকার রয়েছে সেগুলির ডিরেক্টরি লিখতে হবে। অতএব এটি হার্ড-লিঙ্কটি তৈরি করতে কোন সুবিধাগুলি ব্যবহার করা হয়েছিল তা অপ্রাসঙ্গিক। এগুলি ঠিক (এখনও) সৃষ্টির সময়গুলির মতো হতে পারে।
ডেভিড ফোস্টার

2

অপ্রয়োজনীয় হার্ড লিঙ্কগুলি সরানোর জন্য আমার কাছে এই স্ক্রিপ্ট রয়েছে। তবে যত্ন নিন - এটি বেশ বিপজ্জনক।

#!/bin/bash
clear
echo Reduce redundant hardlinks in the current folder
echo ------------------------------------------------
echo 
echo "  $(basename $0) [-R]"
echo "      -R means recursive"
echo 
read -p "You can break by pressing Ctrl+C"
echo
ask=1
if [ a$1 == "a-R" ]; then  recursive=" -R "; fi

for i in $(ls -i $recursive | awk '{print $1}' | uniq --repeated | sort); 
do 
    echo "Inode with multiple hardlinked files: $i"
    first=1
    for foundfile in $(find . -xdev -inum $i);
    do 
        if [ $first == 1 ]; then
            echo "  preserving the first file:  $foundfile"
            first=0
        else
            echo "  deleting the redundant file:    $foundfile"  
            #rm $foundfile  
        fi
    done 
    if [ $ask == 1 ]; then 
        read -p "Delete all the rest of redundant hardlinks without asking? y/N "
        if [ a${REPLY,,} == "ay" ]; then  ask=0; fi
    fi  
#   read -p "pause for sure"
    echo
done
echo "All redundant hardlins are removed."
echo

1

আসলে rmকাজ করে না:

[user@localhost Products]$ rm AZP/
rm: cannot remove `AZP/': Is a directory
[user@localhost Products]$ rm -r AZP/
rm: cannot remove `AZP': Not a directory

কি কাজ করে unlink AZP


2
আপনি কি নিশ্চিত যে আপনার একটি হার্ড লিঙ্ক ছিল? হার্ড লিঙ্কগুলি হ'ল ফাইলের মতো।
শেঠ

@ শেঠ, আসলে আমি মনে করি না এটি কী ছিল তবে এটি আপনি দেখতে যেমন সরিয়ে ফেলতে চান না। কেউ আমাকে লিঙ্কমুক্ত ব্যবহার করতে বলেছে এবং এটি কার্যকর হয়েছে। :)
Bunyk

এটি সম্ভবত কারণ এজেডপি একটি ফাইল ছিল ডিরেক্টরি নয়, তবে আমি আরও তথ্য ছাড়া নিশ্চিত হতে পারছিলাম না। লিঙ্কমুক্ত হওয়া সর্বদা কাজ করা উচিত, তাই কোনও সমস্যা নেই।
শেঠ

1
AZP/ডিরেক্টরি মনে হচ্ছে, পুনরাবৃত্ত পতাকা ছাড়া আরএম ডিরেক্টরিতে কাজ করে না। কোরুতেলস ডক্স অনুসারেও। >>> বেশিরভাগ সিস্টেম ডিরেক্টরিতে একটি হার্ড লিঙ্ক তৈরি নিষিদ্ধ; এটি যেখানে অনুমোদিত, কেবলমাত্র সুপার-ব্যবহারকারী এটি করতে পারে (এবং সাবধানতার সাথে, যেহেতু একটি চক্র তৈরি করা অন্যান্য অন্যান্য ইউটিলিটিগুলিতে সমস্যা সৃষ্টি করবে)।
থারস্মমনার

2
ডিরেক্টরিগুলির হার্ড-লিঙ্কগুলি নিষিদ্ধ। যদি AZPকোনও ডিরেক্টরিতে প্রতীকী লিঙ্ক হয় (বা অন্য কোনও কিছু) rm AZP/কাজ করবে না কারণ rmএটি একটি ডিরেক্টরি বলে মনে করে ( /শেষে রয়েছে)। তবে rm AZPঠিক কাজ করবে। -1
ডেভিড ফোস্টার

0

আপনি যদি কেবলমাত্র লিঙ্কটি সরাতে এবং এইভাবে মূল ফাইলটি রাখতে চান তবে আপনাকে আনলিংক ব্যবহার করতে হবে।


আপনি কি পড়েছেন unlink(1)? এটি unlink(2)সিস্টেম কলের চারপাশে একটি অগভীর আবরণ , একই সিস্টেম কল যা rm(1)ডিরেক্টরি নয় এমন সমস্ত ফাইলের জন্য ব্যবহার করে।
ডেভিড ফোস্টার

1
এই উত্তরটি বিভ্রান্তিকর। হার্ডলিঙ্কযুক্ত ফাইলগুলির সাথে "লিঙ্ক" এবং "মূল ফাইল" এর মধ্যে কোনও পার্থক্য নেই; সমস্ত হার্ডলিঙ্কগুলি একই ফাইল / সামগ্রী / আইনোডকে বোঝায়, যা বিভিন্ন ডিরেক্টরি এন্ট্রি দ্বারা প্রতিনিধিত্ব করা হয়। unlinkএর নাম সত্ত্বেও, হার্ডলিঙ্কযুক্ত দুটি পৃথক ফাইলে আলাদা করা হবে না, তবে "লিঙ্কযুক্ত" ডিরেক্টরি এন্ট্রি (তবে ফাইল / বিষয়বস্তু / ইনোড নয়, লিংক সংখ্যাটি 1 অবধি) 1 অপসারণ করবে।
মার্ফি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.