যদি আমি ঘটনাক্রমে সিস্টেম ডিরেক্টরিতে (/, / ইত্যাদি,…) কমান্ড "chmod -R" চালাই তবে কী হবে?


56

আমি দুর্ঘটনাক্রমে দৌড়ে গেলাম

sudo chmod 755 -R /

পরিবর্তে

sudo chmod 755 -R ./

আমি কয়েক সেকেন্ড পরে এটি বন্ধ করেছিলাম, কিন্তু এখন যেমন কিছু সমস্যা রয়েছে

sudo: must be setuid root

আমি কীভাবে অনুমতিগুলি ফিরিয়ে আনতে পারি?


18
ওহ প্রিয় ... sudoমানে, আপনি যা করবেন তার দ্বিগুণ চিন্তা করেছেন !
অ্যান্টিভাইর্টেল

2
পুনরায় ইনস্টল করা সবচেয়ে সহজ। লাইভসিডি / ইউএসবি রাখুন এবং স্ক্রিনে যেখানে এটি আপনাকে আপনার ডিস্কটি বিভাজন করতে বলে, সেখানে আপনাকে বিকল্পটি দেওয়া উচিত Upgrade from Ubuntu 11.04 to Ubuntu 11.04। এই বিকল্পটি গ্রহণ করুন, এবং এটি সবচেয়ে বেদনাদায়ক উপায়ে আপনার জন্য উবুন্টুকে কার্যকরভাবে পুনরায় ইনস্টল করবে।
user4124

13
ঠিক এখন আপনি একটি শিক্ষা শিখেছি। /ডিরেক্টরিকে লক্ষ্য হিসাবে নির্দিষ্ট করার জন্য আপনাকে ডিরেক্টরি নামের শেষে লিখতে হবে না । এটি একটি খারাপ অভ্যাস , এটি করবেন না, কখনই না ! .বৈধ ডিরেক্টরির নাম নিজে হয় সংযোজন করতে কোন প্রয়োজন নেই /এটি। যদি প্রত্যেকে এই নিয়মটি অনুসরণ sudoকরে থাকে তবে রুট ডিরেক্টরিতে খুব বেশি টাইপ করা অপারেশনগুলির কোনও প্রভাব পড়বে না, সুতরাং তাদের সিস্টেমে কোনও ক্ষতি করা হত না। এটা করবেন না!
ulidtko

3
@ fl00r, হ্যাঁ এটি একটি ডিরেক্টরি নাম যার অর্থ এটি, বা "বর্তমান" ডিরেক্টরি। cd .উদাহরণস্বরূপ, কিছুই করে না। ls .হিসাবে একই ls। এছাড়াও, ..ডিরেক্টরিটি একটি ডিরেক্টরি নাম যার অর্থ "পিতামাতার ." এবং আপনি সম্ভবত এটি ইতিমধ্যে জানতেন।
ulidtko

2
@ জুলিদকো: /শেষে ব্যবহার না করার ব্যতিক্রম আছে । আপনি যদি কেবল ডিরেক্টরিগুলির জন্য পথের নাম সম্প্রসারণ করতে চান। বর্তমান ডিরেক্টরি ভিতরে ডিরেক্টরি ডিরেক্টরি উদাহরণ:echo */
pabouk

উত্তর:


57

সংক্ষেপে: আপনি পারবেন না, আপনার সিস্টেমটি পুনরায় ইনস্টল করুন।

আমার অর্থ, পিক্সিক্স অনুমতিগুলি ব্যবহার করা হয় এবং প্রচুর উপর নির্ভর করা হয়; ফাইল সিস্টেমে প্রচুর জায়গা রয়েছে যেখানে ভুল অনুমতিগুলি ওএস (এসইউডি ফ্ল্যাগগুলি) ভেঙে দেয় বা আরও খারাপ করে দেয়, এটি সুরক্ষার ভিত্তিতে উন্মুক্ত করে দেয় ( /etc/ssh/ssh_host_rsa_keyঠিক আছে) এটি প্রদর্শিত হচ্ছে।

সুতরাং, এই জাতীয় পুনরুদ্ধার সঠিকভাবে করা কঠিন hard একটি জিনিস মিস করুন - এবং আপনি এটি স্ক্রু আপ। আপনি ইতিমধ্যে আপনার sudo chmodআদেশটি ত্রুটিযুক্ত করেছেন (যদি এটি আপনার চেয়ে আপনার বন্ধু হয় তবে তিনি কিছু লিনাক্স পাঠও শিখতে পারেন) - এবং এটি একটি কমান্ডের খুব সাধারণ বিষয়। যথাযথ পুনরুদ্ধারটি আরও কমান্ড এবং আরও সতর্কতার উপায় দাবি করবে। এমনকি আপনি যদি কারও স্ক্রিপ্ট ব্যবহার করেন।

সুতরাং আমাকে বিশ্বাস করুন, কেবল পুনরায় ইনস্টল করুন। এটি একটি নিরাপদ বাজি এবং আপনাকে ঝামেলা থেকে দূরে রাখার গ্যারান্টিযুক্ত।


শেষ অবধি, এখানে প্রাসঙ্গিক কিছু টিপস।

প্রথম: পুনরায় ইনস্টলগুলি কম সময় বেদনাদায়ক হবে যদি আপনি পরের বার পৃথক বিভাজনে সেটআপ/home করেন। আসলে, তারা হাওয়া হবে।

দ্বিতীয়ত: করছেন বিবেচনা পাগল লিনাক্স বিজ্ঞান একটি ভার্চুয়াল মেশিন VirtualBox মত, এবং আপনার স্ন্যাপশট না।

তৃতীয়: chmod -R .কাজ করে। নিজেই একটি বিন্দু .হ'ল বৈধ ডিরেক্টরি নাম। সেই স্ল্যাশ সংযোজন করার কোনও সত্যিকারের প্রয়োজন নেই। আপনি বিন্দুটিকে পুরোপুরিভাবে এড়িয়ে যাওয়ার বিপদজনক ঝুঁকি এড়াতে পারতেন;
নিছক chmod: missing operand after ‘755’ভিএস একটি ধ্বংসপ্রাপ্ত সিস্টেম।


1
আহহ :) এত দুঃখের।
fl00r

14
ওয়েল আপনি অন্য সিস্টেম থেকে প্রতিটি ফাইলের জন্য সমস্ত অনুমতি পেয়েও পারতেন , তবে এটি করা এত বেশি কাজ যে এটি পুনরায় ইনস্টল করার জন্য এটি সম্ভবত সহজ এবং নিরাপদ হতে চাই।
অলি

2
আর দুঃখ করবেন না! মহান শক্তি সঙ্গে আসে মহান দায়িত্ব
ulidtko

হ্যাঁ আমি এটি দিয়ে আমার ল্যাপটপটি কেবল ধ্বংস করেছি ... আপনি কীভাবে সহজেই একটি লিনাক্স ভিত্তিক মেশিনটি ধ্বংস করতে পারেন তা অবাক করে।
আমানুয়েল 2

@ অমানুয়েল 2 দুর্দান্ত শক্তির সাথে আসে great আপনি কি টাইপ দেখুন; sudoমানে আপনাকে দুবার পরীক্ষা করতে হবে।
ulidtko

26

rsyncঅনুমতি এবং মালিকানার জন্য আমি কয়েক বছর ধরে রুবি স্ক্রিপ্ট লিখেছিলাম এবং ব্যবহার করে আসছি । স্ক্রিপ্ট get-filesystem-aclসমস্ত ফাইলকে পুনরাবৃত্তভাবে সমস্ত ফাইল ট্র্যাভার করে সংগ্রহ করে এবং সেগুলি সমস্ত ফাইলে রাখে .acl। স্ক্রিপ্ট সমস্ত এবং এর গুলি .acl-restoreপড়তে .aclএবং প্রয়োগ করবে ।chownchmod

আপনি get-filesystem-aclঅনুরূপ উবুন্টু ইনস্টলেশন চালাতে পারেন এবং তারপরে .aclফাইলটি আপনার chmod- ক্ষতিগ্রস্থ বাক্সে অনুলিপি করতে পারেন .aclএবং রাখুন .acl-restoreএবং / এবং চালাবেন .acl-restore

আপনার রুট থাকা দরকার তাই sudoমার্কো সেপ্পির পরামর্শ অনুসারে আপনার এটি ঠিক করুন ।

আমি .aclআমার উবুন্টুর জন্য ফাইলটি উত্পন্ন এবং দিতে পারি।

get-filesystem-acl

#!/usr/bin/ruby

RM   = "/bin/rm"
SORT = "/usr/bin/sort"
TMP  = "/tmp/get_acl_#{Time.now.to_i}_#{rand * 899 + 100}"

require 'find'

IGNORE = [".git"]

def numeric2human(m)
  return sprintf("%c%c%c%c%c%c%c%c%c",
            (m & 0400 == 0 ? ?- : ?r),
            (m & 0200 == 0 ? ?- : ?w),
            (m & 0100 == 0 ? (m & 04000 == 0 ? ?- : ?S) :
                             (m & 04000 == 0 ? ?x : ?s)),
            (m & 0040 == 0 ? ?- : ?r),
            (m & 0020 == 0 ? ?- : ?w),
            (m & 0010 == 0 ? (m & 02000 == 0 ? ?- : ?S) :
                             (m & 02000 == 0 ? ?x : ?s)),
            (m & 0004 == 0 ? ?- : ?r),
            (m & 0002 == 0 ? ?- : ?w),
            (m & 0001 == 0 ? (m & 01000 == 0 ? ?- : ?T) :
                             (m & 01000 == 0 ? ?x : ?t)))
end


File.open(TMP, "w") do |acl_file|

  # TODO: Instead of the current dir, find the .git dir, which could be
  #       the same or outside of the current dir
  Find.find(".") do |path|

    next if IGNORE.collect {|ig| !!(path[2..-1] =~ /\A#{ig}/)}.include? true
    next if File.symlink?(path)

    stat = File.lstat(path)
    group_id = stat.gid
    rules    = "#{type}#{numeric2human(stat.mode)}" 

    acl_file.puts "#{path} #{rules} #{owner_id} #{group_id}"
  end
end

`#{SORT} #{TMP} > .acl`
`#{RM}   #{TMP}`

.acl-restore

#!/usr/bin/ruby

# This script will only work with .acl_ids

# Restore from...
FROM  = ".acl"

MKDIR = "/bin/mkdir"
CHMOD = "/bin/chmod"
CHOWN = "/bin/chown"
known_content_missing = false


def numeric2human(m)
  return sprintf("%c%c%c%c%c%c%c%c%c",
            (m & 0400 == 0 ? ?- : ?r),
            (m & 0200 == 0 ? ?- : ?w),
            (m & 0100 == 0 ? (m & 04000 == 0 ? ?- : ?S) :
                             (m & 04000 == 0 ? ?x : ?s)),
            (m & 0040 == 0 ? ?- : ?r),
            (m & 0020 == 0 ? ?- : ?w),
            (m & 0010 == 0 ? (m & 02000 == 0 ? ?- : ?S) :
                             (m & 02000 == 0 ? ?x : ?s)),
            (m & 0004 == 0 ? ?- : ?r),
            (m & 0002 == 0 ? ?- : ?w),
            (m & 0001 == 0 ? (m & 01000 == 0 ? ?- : ?T) :
                             (m & 01000 == 0 ? ?x : ?t)))
end

def human2chmod(mode)
  raise unless mode =~ /([r-][w-][xtsTS-])([r-][w-][xtsTS-])([r-][w-][xtsTS-])/
  triple = [$1, $2, $3]
  u,g,o = triple.collect do |i|
    i.sub('s', 'sx').sub('t', 'tx').downcase.gsub('-', '')
  end

  return "u=#{u},g=#{g},o=#{o}" 
end



File.open(FROM).each do |acl|
  raise unless acl =~ /\A(([^ ]*? )+)([^ ]+) ([^ ]+) ([^ ]+)\Z/
  path, rules, owner_id, group_id = $1, $3, $4, $5
  path = path.strip
  owner_id = owner_id.to_i
  group_id = group_id.to_i

  if !File.exists?(path) and !File.symlink?(path)
    if rules =~ /\Ad/
      STDERR.puts "Restoring a missing directory: #{path}"
      STDERR.puts "Probably it was an empty directory. Git goes not track them."
      `#{MKDIR} -p '#{path}'` # Creating the any parents
    else
      known_content_missing = true
      STDERR.puts "ERROR: ACL is listed but the file is missing: #{path}"
      next
    end
  end

  s = File.lstat(path)
  t = s.ftype[0..0].sub('f', '-') # Single character for the file type
                                  # But a "-" istead of "f"

  # Actual, but not neccesarely Desired 
  actual_rules    = "#{t}#{numeric2human(s.mode)}"
  actual_owner_id = s.uid 
  actual_group_id = s.gid 

  unless [actual_rules, actual_owner_id, actual_group_id] ==
    [rules, owner_id, group_id]

    chmod_argument = human2chmod(rules)

    # Debug
    #p chmod_argument
    #p s.mode

    ## Verbose
    puts path
    puts "Wrong: #{[actual_rules, actual_owner_id, actual_group_id].inspect}"
    puts "Fixed: #{[rules, owner_id, group_id].inspect}"
    `#{CHMOD} #{chmod_argument} '#{path}'`

    #puts
  end

end

if known_content_missing
  STDERR.puts "-" * 80 
  STDERR.puts "Some files that are listed in #{FROM.inspect} are missing in " +
              "the current directory."
  STDERR.puts
  STDERR.puts "Is #{FROM.inspect} outdated?"
  STDERR.puts "(Try retrograding the current directory to an earlier version)"
  STDERR.puts
  STDERR.puts "Or is the current directory incomplete?"
  STDERR.puts "(Try to recover the current directory)"
  STDERR.puts "-" * 80 
end

উবুন্টু 11.04। তবে আমি এটি ইতিমধ্যে পুনরায় ইনস্টল করেছি। ধন্যবাদ!
fl00r

আপনার স্ক্রিপ্ট ব্যর্থ হিসাবে owner_idundefined হয়
Eliran Malka

8
find SOME_DIR -depth -printf 'chmod %m %p\n' > saved_permission
কিন্ডার

12

দীর্ঘ সময়: আপনি পারেন। আপনাকে লাইভ সিডি থেকে ফাইল সিস্টেমটি মাউন্ট করতে হবে এবং উপযুক্ত জায়গাগুলিতে অনুমতিগুলি ফিরিয়ে নেওয়া শুরু করতে হবে। ন্যূনতম সময়ে সুডো ফিরে পেতে আপনি sudo chmod u+s /usr/bin/sudoলাইভসিডি অধিবেশন চলাকালীন দৌড়াতে চাইবেন - এটি অবশ্যই নির্ধারণ করতে হবে set

তবে সম্ভবত সিস্টেমটি পুনরায় ইনস্টল করা সহজ হবে।


4

আমি সমস্ত প্যাকেজগুলির সাথে পুনরায় ইনস্টল করার চেষ্টা করব apt-get install --reinstall, সম্ভবত dpkg --get-selections | grep installতাদের একটি তালিকা পেতে আউটপুট ব্যবহার করে।


এটি কোনও খারাপ ধারণা নয় তবে আপনাকে এমন জিনিসগুলি বাদ দিতে হবে যা স্বয়ংক্রিয়ভাবে ইনস্টল করা আছে বা আপনি সেই প্যাকেজগুলির সাথে স্থায়ীভাবে শেষ করতে চান (এমনকি যদি আপনি নির্ভরশীল প্যাকেজগুলি সরিয়ে ফেলেও) ... তবে সেগুলি পুনরায় ইনস্টল করা হবে না। কঠিন এক. সম্ভবত প্রথমে স্বয়ংক্রিয় প্যাকেজগুলির একটি তালিকা পাওয়া যায়, তারপরে প্রতিটি প্যাকেজ পুনরায় ইনস্টল করুন এবং তারপরে অটোগুলির তালিকাতে যান, এগুলিকে পুনরায় চিহ্নিত করুন।
অলি

@ অলি - দৌড়ানোর মাধ্যমে কি কিছু সমাধান হবে না sudo apt-get autoremove?
উইলফ

@ উইল্ফ নং - autoremoveকেবলমাত্র প্যাকেজগুলি সরিয়ে দেয় যা আপনি ম্যানুয়ালি ইনস্টল করেন নি।
দিমিত্রি গ্রিগরিয়েভ

3

ঠিক আছে, আমি এটি পরীক্ষা করিনি (তাই নিজের ঝুঁকিতে ব্যবহার করুন) তবে এটি এখনও কার্যকর হতে পারে। আমি যখন এই সুযোগটি পেয়ে যাব তখন আমি ভার্চুয়াল মেশিনে এটি পরীক্ষা করব:

প্রথমত, একটি স্থিতিশীল সিস্টেমে, /home/ডিরেক্টরিটি এড়িয়ে গিয়ে তালিকার সমস্ত ফাইলের অনুমতি পাওয়ার জন্য আমি নিম্নলিখিতটি করলাম :

sudo find / -not -path /home -printf "%m:%p\0" > /tmp/fileper.log

এটি সিস্টেমে প্রতিটি ফাইল বা ডিরেক্টরিগুলির জন্য অনুমতি এবং ফাইলের নাম মুদ্রণ করবে, তারপরে একটি \0অক্ষর হবে (এটি পরে নিউরাইনযুক্ত ফাইলগুলির মতো অদ্ভুত ফাইলের নামগুলি মোকাবেলার জন্য প্রয়োজন)।

তারপরে, এমন সিস্টেমে যেখানে ফাইলের অনুমতি নিয়ে আপস করা হয়েছে:

while IFS=: read -r -d '' perm file; do  
    chmod "$perm" "$file"
done < /tmp/fileper.log 

এটি প্রতিটি লাইন পড়বে fileper.log, অনুমতি হিসাবে $permফাইল ফাইলটি সংরক্ষণ $fileকরবে এবং তারপরে ফাইলের (বা ডিরেক্টরিটির) অনুমতিগুলি সেট করবেfileper.log


এখানে কয়েকটি বিষয় লক্ষণীয়:

  • ফাইলে আউটপুট দেওয়ার সময়: /tmp/fileper.logআপনি কাস্টম সেটিংস এবং প্রোক ইত্যাদির তালিকা তৈরি করতে পারেন might
  • আপনি বুট করতে পারবেন না, বা কমান্ডগুলি চালাতে পারবেন না,

আমার পরামর্শটি হ'ল আপনার ডিস্কে থাকা লিনাক্স সংস্করণটি দিয়ে একটি লাইভসিডি বুট করা, কমান্ডটি চালানো, আপনি যেখানে স্থানীয় ডিস্কটি বসিয়েছেন তার পথটি পরিবর্তন করুন এবং দ্বিতীয় কমান্ডটি চালান!


আমি পরীক্ষিত যে যখন একটি উবুন্টু সিডি / ইউএসবি থেকে বুট, আমি অর্থাত সবকিছু প্রতিস্থাপন করবে ডিস্ক ফরম্যাট না করার চয়ন করতে পারেন, /ডিরেক্টরি, কিন্তু এড়িয়ে /home/ডিরেক্টরি। অর্থ আপনার ব্যবহারকারীদের অ্যাপস / ডেটা (সংগীত, ভিডিও, নথি) এর কনফিগারেশন এখনও অক্ষত থাকবে। এবং সিস্টেম ফাইলগুলি প্রতিস্থাপন করে, chmodসেখানে যথাযথ সংখ্যা সেট করা আছে।


1
কেন কেবল ন্যায়বিচারের chmod $(echo $LINE)পরিবর্তে chmod $LINE? এছাড়াও, আপনি শুধু ব্যবহার করতে পারেন findছাড়া stat: find … -printf "%#m %p\n"। আরও ভাল, আপনি সম্পূর্ণ কমান্ড তৈরি করতে পারেন:, find … -printf "chmod %#m %p\n"তারপর স্ক্রিপ্ট হিসাবে ফাইলটি কার্যকর করুন।
মুড়ু

সন্ধান লাইনটি যেমনটি কাজ করছে না তেমনটি হওয়া উচিত, তবে এটি হওয়া উচিত michael@NEXUS-TWO:~$ sudo find / -name '*' -exec stat -c "%a %n" {} \; >> /tmp/fileper.logতবে এটি শেষ হয়ে যায় /procএবং কিছু অন্যান্য জায়গা যা আপনি নিজের তালিকায় নাও চান।
ভিডিওনাথ

@ মুরু এটি মধ্যরাতে লিখেছিলেন। কোডটি সম্পাদনা করবে ...
ব্লেড 19899

পরীক্ষা করতে সক্ষম নয়, ব্যবহারকারীর ইনপুট
ব্লেড 19899

3

(আমি জানি আমার উত্তরে মন্তব্য করা উচিত নয়, তবে মন্তব্য করার যথেষ্ট খ্যাতি নেই not)

ব্লেড ১৯৮৯৯ এর উত্তরটি আমার জন্য সিমলিংক ব্যতীত কাজ করেছিল। উদাহরণস্বরূপ এটি / বিন / ব্যাশে 755 প্রয়োগ করা হয়েছিল, কিন্তু তারপরে কার্যকরভাবে 777-আইএন / বিন / ব্যাশে 7 777 প্রয়োগ করা হয়েছে ml

আমার কাছে ইতিমধ্যে ফাইল্পার.লগ ফাইল ছিল তাই আমি কেবল গন্তব্য-শেষ কমান্ডটি সংশোধন করেছি:

while IFS=: read -r -d '' perm file; do  
    if [[ ! -L "$file" ]]; then    
        chmod "$perm" "$file"
    fi
done < /tmp/fileper.log 

আপনার যদি অনুমতিগুলির ব্যাকআপ থাকে, তবে কেন কেবল একটি পূর্ণ ব্যাকআপ তৈরি করবেন এবং যখন প্রয়োজন হবে তা পুনরুদ্ধার করবেন না? এটি কোনও কমান্ড দুর্ঘটনাক্রমে চালিত হওয়ার ক্ষেত্রে আপনাকে বাঁচাতে পারে, শুধু নয় chmod
দিমিত্রি গ্রিগরিয়েভ

2

এর সাথে অনুমতিগুলি পুনরুদ্ধার করার চেষ্টা করতে পারেন apt-get

আপনি sudo দিয়ে এই কমান্ডগুলি চালাতে না পারলে আপনাকে পুনরুদ্ধার মোডে বুট করতে হবে এবং সেগুলি রুট হিসাবে চালাতে হবে।

পুনরুদ্ধার মোডে বুট করার জন্য https://wiki.ubuntu.com / পুনরুদ্ধার মোড দেখুন ।

Http://hyperlogos.org/page/Restoring-Permission-Deban-System থেকে

দ্রষ্টব্য: এটি মূলত উবুন্টু ফোরামে পোস্ট করা হয়েছিল তবে আমি মূল পোস্টটি খুঁজে পাচ্ছি না।

চেষ্টা করুন, যাতে,

sudo apt-get --reinstall install `dpkg --get-selections | grep install | grep -v deinstall | cut -f1`

যদি এটি ব্যর্থ হয়:

sudo apt-get --reinstall install `dpkg --get-selections | grep install | grep -v deinstall | cut -f1 | egrep -v '(package1|package2)'`

এবং অবশেষে, একটি শেষ অবলম্বন হিসাবে,

sudo dpkg --get-selections | grep install | grep -v deinstall | cut -f1 | xargs apt-get --reinstall -y --force-yes install

অ্যাপট-গেট ব্যবহার করা হচ্ছে

এখানে প্রাসঙ্গিক স্নিপ, সঠিকতার জন্য সম্পাদিত এবং পুনরায় ফর্ম্যাট করা হয়েছে:

sudo apt-get --reinstall install `dpkg --get-selections | grep install | grep -v deinstall | cut -f1`

ধরা যাক আপনি এমন কিছু প্যাকেজ সম্পর্কে বার্তা পেয়েছেন যা পুনরায় ইনস্টল করা যায় না এবং কমান্ডটি ব্যর্থ হয়। প্রশ্নে থাকা প্যাকেজগুলি এড়িয়ে এটিকে ঠিক করার এক উপায় এখানে:

sudo apt-get --reinstall install `dpkg --get-selections | grep install | grep -v deinstall | cut -f1 | egrep -v '(package1|package2)'`

এবং অবশেষে, যদি আপনার কোনওরকম অনেক কিছু ইনস্টল করা উচিত থাকে তবে উপরের কমান্ডটি আপনার যুক্তি তালিকার তালিকাটি দীর্ঘ বলে ব্যর্থ হয়েছে, এখানে ঠিক করা হয়েছে, যা আপনার পছন্দের চেয়ে আরও অনেক বার চালিত হবে:

sudo dpkg --get-selections | grep install | grep -v deinstall | cut -f1 | xargs apt-get --reinstall -y --force-yes install

-yএবং --force-yesবিকল্পগুলি নোট করুন, যা apt-getআপনাকে বারবার অনুরোধ করা থেকে বিরত থাকবে । এগুলি সর্বদা মজাদার বিকল্প, আপনি যদি নিশ্চিত হন যে আপনি কী করছেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.