আমি কীভাবে ইউনিক্স কমান্ড সন্ধান করব?


11

আমি মনে করি যে আমি সন্ধানের ক্ষেত্রে আমার ব্যবহারে যথেষ্ট অগ্রসর হয়েছি কিন্তু যতবার আমি এটি ব্যবহার করি তার জন্য আমার জীবনের পক্ষে আমি অ্যাক্সেস বিকল্পটি বন্ধ করার পদ্ধতিটি মনে করতে পারি না। আমি যতবার পড়ি ততবার পড়ার জন্য আমি বেশ ভাল সময় ব্যয় করি। আমি কি কেবল এটি যথেষ্ট পরিমাণে ব্যবহার করছি না বা আমার খুব বেশি আশা করছি না? এমন একটি সাধারণ উদাহরণ দিয়ে আরম্ভ করুন যা আমাকে হতাশ করে।

ডিরেক্টরি কাঠামোতে সমস্ত ভুল অনুমতিযুক্ত ফাইল রয়েছে প্রতীকী লিঙ্কগুলি ইত্যাদি I আমি মালিকানাটিকে যুক্তিসঙ্গত মানতে পরিবর্তন করতে চাই

find . -type f -exec chown username {} \;
find . -type d -exec chown username {} \;
find . -type d -exec chgrp usergroup {} \;
find . -type f -exec chgrp usergroup {} \;

(শেষটি যদি পিছনের দিকে থাকে তবে আমাকে ক্ষমা করুন ... আমি এক ঘন্টা আগে এটি দেখেছিলাম এবং এখনও আমি নিশ্চিত নই)

তবে মাউন্টস, সিম্বলিক লিঙ্ক ইত্যাদির কারণে আমি এটি চালাতে ভয় পেয়েছি আমি chmod এর চূড়ান্ত বোকা বানিয়েছি * * এবং এর আগে আমার উপরের দিকে পুনরাবৃত্তি হয়েছিল। আমি জানি যে -দেব পার্টিশন অতিক্রম করতে ভুলে যাবেন তবে আমি নিশ্চিত নই যে ডিরেক্টরিগুলির মধ্যে থাকা ফাইলগুলির মধ্যে কী হবে যা প্রতীকী লিঙ্কগুলি।

তাহলে কীভাবে একজন এই প্রাণীটিকে গুরুতর ফাইলগুলি হত্যা করতে পারে?

নীচে সেরা পরামর্শ এবং ছাঁটাইয়ের ছাঁটাই আপডেট করুন :

  1. একটি অনুশীলন ডিরেক্টরি যুক্ত এবং অন্যান্য অনুশীলন ডিরেক্টরিতে মাউন্ট করা আছে।
  2. অ-স্বজ্ঞাত এক্সিকিউট কমান্ডের পরিবর্তে xargs ব্যবহার করুন।
  3. বিচক্ষণতা এবং সুরক্ষার জন্য এক্সেক্স প্রতিধ্বনি Use Use ব্যবহার করুন
  4. সেমি কোলন বিশেষ এবং আপনি এটি থেকে পালাচ্ছেন তাই পলায়নের চরটি প্রথমে
  5. -অর কমান্ড আপনাকে নির্বাচনের মানদণ্ড একত্রিত করতে সহায়তা করতে পারে।

আমি মুদ্রণ 0 সম্পর্কে কিছুটা বিভ্রান্ত হয়ে পড়েছি তবে প্রথম চেষ্টা অনুশীলনে আমি চেষ্টা করতে এবং এড়ানো এড়াতে Xargs সর্বদা কিছুটা সহজ নয়।


1
আমি এটি মনে করতে পারি না, তাই আমি এটি কেবল জার্গারে পাইপ করি।
পুনর্নবীকারী

2
আপনি যখন সঠিক কমান্ডটি তৈরি করে সন্তুষ্ট হন, তখন এটি \ এর পরিবর্তে + দিয়ে চালানো বিবেচনা করুন; এটি + সহ আরও দ্রুত চলবে কারণ এক্সিকিউটিভ কমান্ডটি প্রায়শই কম বলা হয়ে থাকে।
wzzrd

wzzrd, using এর চেয়ে + + ব্যবহারের দুর্দান্ত টিপ;
ড্যানিয়েল লসন

উত্তর:


19

ঠিক আছে, -execসিনট্যাক্সটি যতদূর যায়, আপনি প্রচুর লোকের মতো করতে পারেন, ছেড়ে দিন এবং ব্যবহার করতে পারেন xargs:

find . -type f | xargs chown username

(বা স্পেস-সহ-অন্যান্য-বাজে-তে-সেফ-সংস্করণযুক্ত ফাইলগুলি)

find . -type f -print0 | xargs -0 chown username

অথবা, সেমিকোলন দিয়ে করতে ডান জিনিস মনে রাখা চেষ্টা, আপনি কি আপনার মাথা মধ্যে কসরত প্রয়োজন আছে যাতে আপনি একটি সেমিকোলন ব্যবহার করছেন বিনষ্ট কমান্ড যে -execচলছে, এবং আপনি করতে হবে অব্যাহতি কারণ এটি বিশেষ আছে সেমিকোলন অর্থ bash। যে কারণে এটি ব্যাকস্ল্যাশ সেমিকোলন। আপনার {}প্রতিস্থাপনের অংশটি ঠিক আছে বলে মনে হচ্ছে ।

ফাইলগুলি মেরে ফেলার মতো, আপনি যদি বলার মতো বড় এবং বিপজ্জনক কিছু চালাচ্ছেন তবে প্রথমে এটি করুন:

find . -type f -exec echo chown username {} \;

এবং ফলাফল পর্যালোচনা। এটি মূলত একটি "শুকনো রান" যেখানে আপনি কমান্ডগুলি দেখতে পাচ্ছেন যদি আপনি এটি ছেড়ে দেন তবে এটি চলবে। অবশ্যই একটি ভাল অনুশীলন। .*সমস্যার সাথে সাহায্য করবে না , তবে আপনি এখন এটি না করা জানেন। :)


1
+ +! 'প্রতিধ্বনি' অনুশীলন শুকনো রান জন্য। আমি সর্বদা এটি একটি বড় পরিবর্তনের জন্য ব্যবহার করি
স্টিভ ফলি

3

আমি অবাক হয়েছি এখনও কেউ নিম্নলিখিত বিকল্পটি উল্লেখ করে নি:

find . -type f -ok chown username {} \;

এই সিনট্যাক্সটি কার্যকর করার আগে কমান্ডটি নিশ্চিত করবে। আপনার ম্যাচটি তুলনামূলকভাবে অল্প সংখ্যক ফাইল হওয়ার প্রত্যাশা থাকলে এটি সবচেয়ে ভাল কাজ করে কারণ এটি প্রতিটিটির জন্য অনুরোধ জানাবে।

কিছু উত্তরের উল্লেখ রয়েছে xargs, তবে জিএনইউর সাহায্যে এটিও অপ্রয়োজনীয়:

find . -type f -exec chown username {} \+

মনে রাখবেন যে + সাধারণত পালানোর দরকার হয় না তবে যাইহোক এটি করার অভ্যাসে প্রবেশ করা ভাল।


প্লাস সাইনটির প্রকৃতি আপনি ব্যাখ্যা করতে পারেন ... এটি ঠিক কী করছে? শেল এটি প্রসেসিং বা কমান্ড। আমার মনে হয় আমি gnu-find এর উত্স কোডটি ডাউনলোড করতে যাচ্ছি কারণ এটি একটি আকর্ষণীয় বিষয়।
ojblass

এটি প্রক্রিয়াজাতকরণ হয়। এই বিকল্পটি সম্পর্কে আরও জানতে ম্যান পড়ুন।
কামিল কিসিয়েল

3

মানুষ এটির জন্য: জিনিসগুলি মনে রাখা শক্ত হতে পারে, এজন্যই * নিক্স আদেশে ম্যান পৃষ্ঠা রয়েছে। আপনি শুধু সবসময় সিনট্যাক্স উপর একটি অনুস্মারক জন্য man পৃষ্ঠা কর্ম অধ্যায় চেক করতে পারেন: man find। যদিও ম্যান পৃষ্ঠাগুলি বন্ধুত্বপূর্ণ নয় বলে মনে হতে পারে, একবার সেগুলি পড়তে ভাল হয়ে গেলে সেগুলি খুব সহজ।

একটি ফ্রন্ট-এন্ড বা র‍্যাপার তৈরি করুন: আমি যখন জিএনইউতে আরও ভাল হতে চেয়েছিলাম তখন আমি একটি জিইউআই ফ্রন্ট এন্ড লিখেছিলাম তা খুঁজে পাওয়ার জন্য পাইথন, গ্লেড এবং পাইগটকের সাহায্যে কমান্ড সন্ধান করে। এটি সত্যিই ভালভাবে জানতে চাইলে এটি একটি ভাল অনুশীলন।

একটি অনুশীলন ডিরেক্টরি আছে: সবশেষে, শক্তিশালী কমান্ডের সাথে খেলার জন্য আমার বাড়ির দিরে সবসময় আমার একটি 'স্ক্র্যাপ' ডিরেক্টরি থাকে যখন 'ইকো' এর মতো কোনও কিছু এটি কেটে না। এই জাতীয় কিছু দিয়ে দ্রুত গুচ্ছ ফাইল তৈরি করতে আপনি শেল প্রসারণ ব্যবহার করতে পারেন:

for i in {1..100}; do touch "$i"; done

অদ্ভুত একটি অনুশীলন ডিরেক্টরি এমন কিছু যা আমি কখনই বিবেচনা করি নি।
ওজব্লাস

1

আপনি '-এবং' এবং '-র' অপারেটরগুলির সাথে এক্সপ্রেশনগুলিও একত্র করতে পারেন। - এবং অন্তর্নিহিত:

find . -type f -name "plainfile" ...

এটার মতই

find . -type f -and -name "plainfile" ...

বা অপারেটর আপনার 4 টি কমান্ডের তালিকা কমিয়ে 2:

find . -type d -or -type f ...

এবং পরিশেষে, সন্ধানের সাথে সম্পর্কিত নয়, তবে ছোটাছুটি গ্রুপটিকেও সেট করতে পারে। সুতরাং, খালি জায়গাগুলি সহ নামগুলির পাশাপাশি আমরা শেষ করি:

find . -type d -or -type f -exec chown username:usergroup '{}' \;

অন-ব্যবসায়ের সাথে কী সন্ধান করে। [সিস]
ওজব্লাস

@ ওজব্লাস: 'এবং' বা 'বা' ব্যবহার করে এক্সপ্রেশনগুলির সংমিশ্রণ সন্ধান করুন, যদি '-আর' বা '-ও' নির্দিষ্ট না হয়, '-আর' স্পষ্টভাবে ব্যবহৃত হয়। সুতরাং 'ফাইন্ড-টাইপ ডি-টাইপ এফ' টাইপ করুন কিছুই খুঁজে পাবেন না কারণ কিছুই ডিরেক্টরি এবং ফাইল নয়।
স্টিভ ফলি

0

বন্ধ করার সময় আমি কেবল ব্যবহারের কথা ভাবি; অনেক প্রোগ্রামিং ভাষা এবং তারপরে পালিয়ে যাওয়া পছন্দ করে। কেবল মনে রাখবেন যে পালানো দরকার এবং এটি আপনার কাছে খুব সহজেই আসে।


0

আপনি যে সংস্করণটি ব্যবহার করছেন সেটির সংস্করণ অনুসারে বিভিন্ন বিকল্প রয়েছে যা আপনাকে সহায়তা করতে পারে। জিএনইউ সন্ধান সম্ভবত সম্ভবত সবচেয়ে শক্তিশালী এবং এটি আপনাকে আপনার দ্বিতীয় (অন্তর্নিহিত) প্রশ্নে সহায়তা করতে পারে

উদাহরণস্বরূপ - ডিফল্ট আচরণটি প্রতীকী লিঙ্কগুলিকে অবজ্ঞা করা নয়, তবে আপনি এটিকে ওভাররাইড করতে পারেন; এবং -মাউন্ট বিকল্পটি মাউন্ট পয়েন্টগুলি পেরিয়ে যাওয়া সন্ধান করে

আপনার স্থানীয় ম্যান পৃষ্ঠাগুলি দেখুন


0

কিছু যুক্তিযুক্ত হবে যে xargs বিকল্পটি -exec বিকল্পের চেয়ে দ্রুততর কারণ এটি প্রতিটি ফাইলের জন্য একবারে কমান্ডটি কার্যকর করে না, তবে আমি ব্যয় করতে চাই না যে বৃহত্তর চাকরি ব্যতীত অপ্রয়োজনীয় সময় ব্যয় করা ছাড়া anything

ব্যক্তিগতভাবে, আমি সাধারণত চালানো ছাড়া এক্সিকিউট ছাড়া

find /path/to/dir -name whatever

আউটপুটটি সঠিক দেখাচ্ছে কিনা তা নিশ্চিত করুন এবং তারপরে সেই তালিকাতে আমার কমান্ডটি চালান।

chown user:group `find /path/to/dir -name whatever`

কীভাবে জিনিসগুলি করতে "না" এর নিখুঁত উদাহরণ। স্পেস সহ ফাইলের নাম।
ইয়ান কেলিং

হ্যাঁ, এটি একটি সম্ভাব্য সমস্যা যা আমার সম্ভবত স্বীকার করা উচিত ছিল। তবে আমার বক্তব্যটি কোনও কিছু কার্যকর করার আগে ফাইন্ড আউটপুট পড়ার বিষয়ে ছিল, যেখানে আপনি স্পেস বা অন্য ফাইলের নাম উন্মাদাকে স্পট করবেন।
theotherreceive

0

কিছু কিছু শাঁসের জন্য (বাশ নয়) পালানো escape escape যথাযথ আচরণের জন্য।

\{\} or '{}'

ম্যানুয়াল অনুসন্ধান মাস্টারিং জন্য ভাল।


না আপনি না; are with যেমন ঠিক তেমনই দুর্দান্ত রান পান। তারা ফাইন্ড কমান্ডের অংশ: এগুলি একটি টোকেন যা ফাইন্ড কমান্ডের ফলাফল দ্বারা প্রতিস্থাপিত হয়। ফাংশনগুলি সংজ্ঞায়িত করার সময় বা ভেরিয়েবলগুলি কল করার সময় এগুলি কেবল ব্যাশের মধ্যে কিছু বোঝায় তাই আপনি এগুলি মূল প্রশ্নের মতোই ব্যবহার করতে পারেন।
wzzrd

এটি ম্যান পৃষ্ঠা থেকে। এটি আপডেট করার জন্য এটি বাশের ক্ষেত্রে প্রযোজ্য নয়।
ইয়ান কেলিং

0

আপনি এর আগে কিছু করার আগে নিশ্চিত করুন যে আপনার কমান্ডের বিরুদ্ধে যে ডিরেক্টরিটি চালাচ্ছেন সেটি / usr বা / ইত্যাদি হিসাবে একই ফাইল সিস্টেমের মধ্যে নেই। (অন্যথায় আমার যদি আমার হোম ডিরেক্টরিতে / ইত্যাদি / পাসডাব্লুডি / / বিন / এস-এর একটি কঠিন লিঙ্ক থাকে তবে আপনি কেবল আমাকে সেগুলির মালিকানা দিয়েছেন এবং পার্শ্ব-প্রতিক্রিয়া হিসাবে আমি এখন মেশিনের মালিক)।

আপনি যদি কোনও ডিরেক্টরিতে পুনরাবৃত্তি করতে চান এবং সমস্ত ফাইল / ডিরেক্টরি মুছে ফেলেন তবে একটি সরল

chown -Rh ব্যবহারকারী: ব্যবহারকারী গ্রুপ /

এটা করবো. নিশ্চিত করুন যে আপনি -h বা আবদ্ধ ব্যবহার করেছেন প্রতীকী লিঙ্কগুলি অনুসরণ করবে।


আমি মনে করি না এটি ক্রস প্ল্যাটফর্ম। আমার অনুশীলনের পরিবেশ দ্বারা প্রদর্শিত 247K ফাইলের সাথেও ব্যর্থ হয়। আমি নিশ্চিত না কেন।
ojblass

আমি মনে করি আপনি ক্রসপ্ল্যাটফর্মের সমস্যা খুঁজে পেয়েছেন তার চেয়ে বেশি একটি বাগ আপনি পেয়েছেন। ব্যর্থ হলে কোন সংস্করণ এবং প্রস্থান স্থিতি কী? যতদূর আমি বলতে পারি এটি প্রথম বিএসডি সংস্করণে উদ্ভূত হয়েছিল; এটি অবশ্যই সানোজ 5.3 এবং আল্ট্রিক্স এবং ইরিক্সে রয়েছে। এটি ব্যর্থ হওয়ার আগে এটি কতটি প্রক্রিয়া করে?
ক্রিস

আপনি ঠিক বলেছেন এটি এআইএক্স 5.3, এআইএক্স 5.2 তে কাজ করে তবে এআইএক্স 4.3, এনসিআর, এইচপি 11, এইচপি 10.20, বা আমার ডিএসএল বিতরণ নয়। সমস্ত ক্ষেত্রে এটি 60k ফাইল বা তার কাছাকাছি ব্যর্থ বলে মনে হচ্ছে।
ojblass
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.