lsএবং মধ্যে সম্পর্কdir
lsএবং dirপৃথক প্রোগ্রাম যা একইভাবে আচরণ করে। নীচে বর্ণিতdirls এবং রেফারেন্স হিসাবে, এর উদ্দেশ্য একটি কমান্ড সরবরাহ করা যার আউটপুট এটি টার্মিনালে যাচ্ছে কিনা তার উপর নির্ভর করে তার পরিবর্তিত হয় না । সহায়কভাবে এটি অর্জনের জন্য, dirঅবশ্যই এর আউটপুটটিকে এমনভাবে ফর্ম্যাট করতে হবে যা টার্মিনালে দেখার জন্য এবং ফাইল বা পাইপে লেখার জন্য উভয়ই যুক্তিসঙ্গত এবং কার্যকর।
এ সম্পর্কে দুটি সাধারণ ভুল ধারণা রয়েছে dir:
- অনেক লোক বিশ্বাস করে
dirযে এটির একটি উপনাম ls, তবে এটি এমন নয়। উভয়ই কমান্ড অপরটির একটি উপনাম নয়, এবং উবুন্টুতে ডিফল্টরূপে, কোনও ক্ষেত্রেই কোনও উপ dirনাম নয়। lsএবং dirপৃথক, অ-অভিন্ন সনাক্তকারী দ্বারা সরবরাহ করা হয়।
dirঅস্পষ্ট historicalতিহাসিক কারণে বা কিছু মানক বা অন্য কোনও ওএসের সাথে সামঞ্জস্যতা প্রদানের জন্য অনেক লোক বিশ্বাস করেন । সেটাও হয় না। lsএটি তুলনামূলকভাবে করার জন্য আচরণ করে। dir, যা সামঞ্জস্যপূর্ণ হতে হবে না কারণ এটি কোনও স্ট্যান্ডার্ড ইউনিক্স কমান্ড নয়, একটি বিকল্প পদ্ধতিতে আচরণ করে যে বিকাশকারীরা তার নিজের জন্য মূল্যবান হিসাবে বিবেচনা করে এবং সম্ভবত এটি আরও পছন্দনীয়।
ঠিক আছে, তবে ঠিক কীভাবে lsএবং dirআলাদা হয়?
উভয় lsএবং dirডিরেক্টরি সামগ্রীর তালিকা। তাদের ডিফল্ট আচরণের দুটি নির্দিষ্ট পার্থক্য তাদের পৃথক করে।
যখন এর স্ট্যান্ডার্ড আউটপুটটি টার্মিনাল হয়, lsউল্লম্বভাবে বাছাই করা কলামগুলিতে (পছন্দ মতো ls -C) ফাইলের নাম তালিকাভুক্ত করে । যখন এর স্ট্যান্ডার্ড আউটপুটটি টার্মিনাল নয় (উদাহরণস্বরূপ, একটি ফাইল বা পাইপ ), lsপ্রতি লাইনে ফাইলের নাম তালিকাভুক্ত করে (যেমন ls -1)।
এর স্ট্যান্ডার্ড আউটপুটটি টার্মিনাল কিনা তা, dirউল্লম্বভাবে সাজানো কলামগুলিতে ফাইলের নাম তালিকাভুক্ত করে (যেমন ls -C)।
উভয়ের জন্য lsএবং dirএই অক্ষমতা মাধ্যমে ওভাররাইড করা যেতে পারে --format=পতাকা এবং দ্বারা -1, -C, -m, এবং -xপতাকা, যা বিশেষ সংক্ষিপ্ত --format=অপশন। দেখুন 10.1.4 সাধারণ আউটপুট বিন্যাস মধ্যে গনুহ coreutils সহায়িকা বিস্তারিত জানার জন্য।
যখন তার আদর্শ আউটপুট একটি টার্মিনাল ও একটি ফাইল তালিকাভুক্ত করা হয় রয়েছে কন্ট্রোল ক্যারেক্টার , lsকপি করে প্রিন্ট ?প্রতিটি নিয়ন্ত্রণ অক্ষর (মত পরিবর্তে ls -q)। যখন এর স্ট্যান্ডার্ড আউটপুটটি টার্মিনাল নয়, যখন lsনিয়ন্ত্রণের মতো অক্ষরগুলি প্রিন্ট করে (যেমন হয় ls --show-control-chars)।
এর স্ট্যান্ডার্ড আউটপুটটি টার্মিনাল কিনা, যখন dirকোনও কন্ট্রোল চরিত্রের মুখোমুখি হয় বা অন্য কোনও অক্ষরের মুখোমুখি হয় যা শেলটিতে প্রবেশ করে বিশেষভাবে ব্যাখ্যা করা হয়, এটি অক্ষরের জন্য ব্যাকস্ল্যাশ ক্রম প্রিন্ট করে। এর মধ্যে স্পেসগুলির মতো তুলনামূলকভাবে সাধারণ অক্ষরও অন্তর্ভুক্ত। উদাহরণস্বরূপ, হিসাবে dirপরিচিত Documents backupsহিসাবে একটি এন্ট্রি তালিকাবদ্ধ করবে Documents\ backups। এই মত ls -b।
উভয়ের জন্য lsএবং dirএই অক্ষমতা তালিকাভুক্ত পতাকা মাধ্যমে ওভাররাইড করা যেতে পারে 10.1.7 বিন্যাস ফাইলের নাম মধ্যে গনুহ coreutils সহায়িকা । এর মধ্যে রয়েছে -b, -q, --quoting-style=, এবং কিছু অন্যদের।
সোর্স : ম আবাহন এবং Dir আবাহন , ইন গনুহ coreutils সহায়িকা ।
কেন আছে dir?
একটি পৃথক জন্য যুক্তিপূর্ণ dirইউটিলিটি দেওয়া হয় সাধারনত ইন্টারফেসের জন্য 4.5 স্ট্যান্ডার্ড এর গনুহ কোডিং মান । বিকাশকারীদের যুক্তি বোঝার জন্য আমি সেই পুরো বিভাগটি পড়ার পরামর্শ দিচ্ছি, তবে এখানে ls/ dir:
দয়া করে কোনও ইউটিলিটির ব্যবহারটি যে নামটি চাওয়ার জন্য ব্যবহৃত হয়েছে তার উপর নির্ভর করবে না ...
পরিবর্তে, বিকল্প আচরণগুলির মধ্যে নির্বাচন করতে একটি রান টাইম বিকল্প বা সংকলন সুইচ বা উভয়ই ব্যবহার করুন ....
তেমনি, দয়া করে কোনও কমান্ড-লাইন প্রোগ্রামের আচরণ আউটপুট ডিভাইসের ধরণের উপর নির্ভর করে না ...
সামঞ্জস্যের আউটপুট ডিভাইসের ধরণের উপর নির্ভর করতে নির্দিষ্ট প্রোগ্রামগুলির প্রয়োজন। সমস্ত ব্যবহারকারীরা যেভাবে প্রত্যাশা করেন সেভাবে এটি না করলে lsবা shনা করা বিপর্যয়কর । এর মধ্যে কয়েকটি ক্ষেত্রে আমরা প্রোগ্রামটিকে একটি পছন্দসই বিকল্প সংস্করণ দিয়ে পরিপূরক করি যা আউটপুট ডিভাইসের ধরণের উপর নির্ভর করে না। উদাহরণস্বরূপ, আমরা এর dirমতো একটি প্রোগ্রাম সরবরাহ
করি lsযা এর ডিফল্ট আউটপুট ফর্ম্যাটটি সর্বদা বহু-কলামের ফর্ম্যাট।
প্রযুক্তিগত দিক থেকে জিএনইউ প্রকল্প একে অনাকাঙ্ক্ষিত বলে বিবেচনা করে, কোনও ইউটিলিটি কোন ধরণের ডিভাইসে লিখছে তার উপর নির্ভর করে বিভিন্ন আউটপুট উত্পাদন করতে পারে (কমপক্ষে ইউটিলিটির ডিফল্ট কনফিগারেশনে)। lsসামঞ্জস্যের জন্য ডিভাইস-নির্ভর আউটপুট সহ কয়েকটি ইউটিলিটির জন্য প্রয়োজনীয় এবং তাই এটি ব্যবহারকারীদের প্রত্যাশা অনুযায়ী কাজ করে। কিছু ব্যবহারকারী নির্দিষ্টভাবে এই ডিভাইস-নির্ভর আচরণকেও পছন্দ করেন।
যদিও lsযুক্তিসঙ্গতভাবে স্বাধীনভাবে ডিভাইস আচরণ করে লেখা হতে পারে না একটি পৃথক dirইউটিলিটি এই অর্জন করার তৈরি করা হয়েছে। এভাবে dirউপযোগ যে ঐতিহাসিক compatibility-- কারণে অদ্ভুত আচরণ করবে নয় lsহয় ।
কিভাবে দেখতে ls, dir, এবং সংশ্লিষ্ট vdirইউটিলিটি অপ্রয়োজনীয় কোড অনুলিপি ছাড়া coreutils সোর্স কোডে প্রয়োগ করা হয়, দেখুন ls-dir.c, ls-ls.c, ls-vdir.c, ls.h, এবং ls.c।
কি dirসত্যিই দরকারী?
আপনি কি কখনো আকাঙ্ক্ষিত থাকেন তাহলে lsউত্পাদিত মাল্টি-কলাম আউটপুট এমনকি যখন আপনি এটি পাইপ less( ls | less) অথবা একটি ফাইল (এ পুনঃনির্দেশ ls > out.txt), আপনি ব্যবহার করতে পারেন dirবা ls -C।
আপনি কি কখনো আকাঙ্ক্ষিত থাকেন তাহলে আপনি পারে সরাসরি একটি ফাইলের নাম দ্বারা প্রদর্শিত কপি lsএবং মূল্য উদ্ধৃতি সম্পর্কে উদ্বেজক ছাড়া কমান্ড অংশ হিসেবে এটি ব্যবহার , আপনি ব্যবহার করতে পারেন dirবা ls -b।
dirএর সমতুল্য ls -Cb, সুতরাং সেই অর্থে আপনার প্রয়োজন নেই dir। তবে dirবিকল্পগুলির সংমিশ্রণ সরবরাহ করে যা অনুশীলনে প্রায়শই দরকারী (যদিও এটি সম্পর্কে ব্যাপকভাবে জানা যায় না)।
আমি কেন ls(এমনকি ls -Cb) থেকে রঙিন আউটপুট পাই তবে না dir!?
বেশিরভাগ উবুন্টু ব্যবহারকারীর একটি উপনাম রয়েছে lsযা রান করে ls --color=auto। যখন lsএকটি উপাধি এবং বাহ্যিক কমান্ড উভয়ই উপস্থিত থাকে, সাধারণ, ইন্টারেক্টিভ কমান্ডগুলিতে উপনামটি অগ্রাধিকার গ্রহণ করে।
এলিয়াস সংজ্ঞাগুলি পুনরাবৃত্তভাবে প্রসারিত হয় না - এটি বাহ্যিক lsকমান্ড যা lsডাক দিয়ে ডাকছে --color=auto। দেখুন 6.6 ওরফে মধ্যে ব্যাশ সহায়িকা কিভাবে alias লেখা কাজ সম্পর্কে আরও তথ্যের জন্য।
পাস করার সময় ls, dirবা vdir(এবং কিছু অন্যান্য কমান্ড, যেমন grep) --color=autoএর আউটপুটটি টার্মিনাল হওয়ার সময় রঙ ব্যবহার করে, তবে অন্যথায় নয়।
উবুন্টুতে ডিফল্টরূপে এটির সাথে ব্যবহারকারীর অ্যাকাউন্টগুলি তৈরি করা হয় ~/.bashrc:
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
আপনি লক্ষ্য করবেন lsওরফে ( alias ls='ls --color=auto') কিছুদিনের জন্য যারা, uncommented হয় dirএবং vdirআউট মন্তব্য হয় #যাতে তারা কোন কার্যকর। এটি, যদিও dirএকটি উপনাম নয়, lsতবে (তবে তা নয় dir) ।
আমি কীভাবে dirরঙিন আউটপুট উত্পাদন করব ?
এর সাথে রঙিন আউটপুট সক্ষম করতে dir, কেবলমাত্র .bashrcআপনার হোম ডিরেক্টরিতে সম্পাদনা করুন এবং #alias dir='dir --color=auto'শীর্ষস্থানীয় মুছে ফেলে লাইনটি অসুবিধে করুন #। পরিবর্তনের পরে শুরু করা শেলগুলি, dirএকটি উপনাম হবে।
আপনি যদি বর্তমান শেলটিতে পরিবর্তন চান, আপনি একটি কমান্ড হিসাবে ওরফে সংজ্ঞা চালাতে পারেন, বা আপনি .bashrcচালিয়ে উত্স করতে পারেন . ~/.bashrc।
এটি তর্কযোগ্যভাবে - এর মূল পয়েন্টটির বিপরীতে যায় dirযা আউটপুট ডিভাইস নির্বিশেষে একই ধরণের আউটপুট উত্পাদন করা উচিত। যাহোক:
- আপনি যদি এই
dirউপনামটি তৈরি করতে দরকারী মনে করেন তবে অবশ্যই আপনার এটি করা উচিত।
- যখন আপনাকে বাহ্যিক কমান্ড হিসাবে ডাকা হয়, উদাহরণস্বরূপ স্ক্রিপ্টগুলিতে বা আপনি যদি চালাবার মাধ্যমে উরফটিকে ওভাররাইড করেন
\dirবা command dir, dirতখনও ডিভাইস-স্বতন্ত্র আউটপুট উত্পাদন করে। এই এলিয়াসিং বলতে হয় dirকরার dir --color=autoসত্যিই ভাঙে না dir।
dir --color;)