কম্পিউটার টিউটোরিয়াল

কমांड লাইন মাস্টার করুন: টার্মিনাল মাস্টারির শুরুকারীদের গাইড

হ্যালো সবাই! এই আর্টিকেলে আমরা কমांड লাইন (CLI, কনসোল, টার্মিনাল বা শেল néven পরিচিত) সম্পর্কে ভালোভাবে দেখব।

কমांड লাইন ডেভেলপাররা এবং সাধারণ কম্পিউটার ব্যবহারকারীদের কাছে সবচেয়ে উপযোগী এবং দক্ষ টুলগুলোর এক। কিন্তু শুরুতে এটি একটু অভiaire এবং জটিল লাগতে পারে।

এই আর্টিকেলে আমি কম্যান্ড লাইন ইন্টারফেসের পার্টগুলা এবং এটি কীভাবে কাজ করে তার বেসিকগুলো সহজ ভাষায় ব্যাখ্যা করার চেষ্টা করব যাতে আপনি আপনার দৈনন্দিন কাজে এটি ব্যবহার করতে পারেন।

চলুন শুরু করি! =D

সarisসূচি

  • কনসোল, টার্মিনাল, কমांड লাইন (CLI) এবং শেলের পার্থক্য
    • কনসোল
    • টার্মিনাল
    • শেল
    • কমांड লাইন (CLI)
  • টার্মিনাল ব্যবহার কেন করব?
  • শেলের বিভিন্ন ধরন
    • কিছু ইতিহাস - POSIX
    • আমি কী শেল চালাচ্ছি সেটা কীভাবে জানব?
    • কোন শেল ভালো?
      • কাস্টমাইজেশন সম্পর্কে একটি মন্তব্য
  • সর্বাধিক সাধারণ এবং উপযোগী কমান্ডসমূহ
    • Git কমান্ড
  • আমাদের প্রথম স্ক্রিপ্ট
  • রাউন্ড আপ

কনসোল, কম্যান্ড লাইন (CLI), টার্মিনাল এবং শেলের পার্থক্য

আমি মনে করি শুরু করার জন্য ভালো জায়গা হলো কম্যান্ড লাইন আসলে কী সেটা জানা।

এটিকে রেফার করার সময় আপনি Terminal, console, command line, CLI, এবং shell শুনতে পারেন। লোকজন প্রায়ই এই শব্দগুলো একে অপরভাবে ব্যবহার করে কিন্তু সত্যি এগুলো আসলে ভিন্ন জিনিস।

প্রতিটিকে আলাদা করা খুব জরুরি জ্ঞান নয়, কিন্তু এটি বিষয়টি স্পষ্ট করতে সাহায্য করবে। তাই সংক্ষেপে প্রতিটি ব্যাখ্যা করা যাক।

কনসোল:

কনসোল হলো ফিজিক্যাল ডিভাইস যা আপনাকে কম্পিউটারের সাথে ইন্টারঅ্যাক্ট করতে দেয়।

সহজ ভাষায়, এটি আপনার কম্পিউটার স্ক্রিন, কীবোর্ড, এবং মাউস। একজন ব্যবহারকারী হিসেবে, আপনি আপনার কম্পিউটারের সাথে মাধ্যমে আপনার কনসোলের মাধ্যমে ইন্টারঅ্যাক্ট করেন।

কমांड লাইন মাস্টার করুন: টার্মিনাল মাস্টারির শুরুকারীদের গাইড

টার্মিনাল:

একটি টার্মিনাল হলো একটি টেক্সট ইনপুট এবং আউটপुट এনভাॅयरনমেন্ট। এটি একটি প্রোগ্রাম যা র‍্যাপার হিসেবে কাজ করে এবং আমাদের কমান্ড এন্টার করতে দেয় যা কম্পিউটার প্রসেস করে।

সহজ ভাষায় আবার, এটি সেই "উইন্ডো" যেখানে আপনি আপনার কম্পিউটার যা প্রসেস করবে সেই আসল কমান্ডগুলো এন্টার করেন।

কমांड লাইন মাস্টার করুন: টার্মিনাল মাস্টারির শুরুকারীদের গাইড

মনে রাখবেন টার্মিনাল একটি প্রোগ্রাম, অন্য প্রোগ্রামের মত। এবং যেকোনো প্রোগ্রামের মত, আপনি এটি ইনস্টল এবং আনইনস্টল করতে পারেন। আপনার কম্পিউটারে অনেক টার্মিনাল ইনস্টল থাকতে পারে এবং আপনি যেকোনো সময় যেকোনোটি চালাতে পারেন।

সभी অপারেটিং সিস্টেম একটি ডিফল্ট টার্মিনাল দিয়ে আসে, কিন্তু বাইরে অনেক অপশন আছে যারা থেকে বেছে নিতে পারেন, প্রতিটির নিজস্ব ফাংশনালিটি এবং ফিচার আছে।

শেল:

একটি শেল হলো একটি প্রোগ্রাম যা কমান্ড-লাইন ইন্টারপ্রেটার হিসেবে কাজ করে। এটি কমান্ড প্রসেস করে এবং রেজাল্ট আউটপুট করে। এটি ব্যবহারকারীর দেওয়া কমান্ড ইন্টারপ্রেট এবং প্রসেস করে।

টার্মিনালের মত, শেলও সব অপারেটিং সিস্টেমে ডিফল্ট থাকে, কিন্তু ব্যবহারকারী এটি ইনস্টল এবং আনইনস্টল করতে পারে।

বিভিন্ন শেল ভিন্ন সিনট্যাক্স এবং বৈশিষ্ট্য দিয়ে আসে। আপনার কম্পিউটারে অনেক শেল ইনস্টল থাকতে পারে এবং আপনি যেকোনো সময় যেকোনোটি চালাতে পারেন।

বیشেষ Linux এবং Mac অপারেটিং সিস্টেমে ডিফল্ট শেল হলো Bash। Windows-এ এটি Powershell। শেলের কিছু অন্য সাধারণ উদাহরণ হলো Zsh এবং Fish।

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

এই আর্টিকেলে পরে স্ক্রিপ্টের ওপর নজর দেব। ফিলহাল শুধু মনে রাখবেন যে শেল হচ্ছে वह প্রোগ্রাম যা আপনার কম্পিউটার ব্যবহার করে আপনার কমান্ড "বুঝতে" এবং এক্সিকিউট করতে, এবং আপনি এটি ব্যবহার করে টাস্ক প্রোগ্রাম করতে পারেন।

একটি বিষয় এবং মনে রাখবেন যে টার্মিনাল হলো वह প্রোগ্রাম যেখানে শেল রান করে। কিন্তু দুটো প্রোগ্রাম স্বতন্ত্র। মানে, আমি যেকোনো শেল যেকোনো টার্মিনালে রান করতে পারি। এভাবে দুটি প্রোগ্রামের মধ্যে কোনো ডিপেন্ডেন্সি নেই।

কম্যান্ড লাইন বা CLI (কম্যান্ড লাইন ইন্টারফেস):

CLI হলো वह ইন্টারফেস যেখানে আমরা কম্পিউটার প্রসেস করার জন্য কমান্ড এন্টার করি। সহজ ভাষায় আবার, এটি वह স্পেস যেখানে আপনি কম্পিউটার যা প্রসেস করবে সেই কমান্ডগুলো এন্টার করেন।

কমांड লাইন মাস্টার করুন: টার্মিনাল মাস্টারির শুরুকারীদের গাইড

এটি প্রায় টার্মিনালের মতো এবং আমার মতামতে এই শব্দগুলো একে অপরভাবে ব্যবহার করা যায়।

এখানে একটি মজার বিষয় বলতে পারি যে অধিকাংশ অপারেটিং সিস্টেমের দুটি ভিন্ন টাইপের ইন্টারফেস থাকে:

  • CLI, যা ইনপুট হিসেবে কমান্ড নেয় কম্পিউটার টাস্ক এক্সিকিউট করার জন্য।
  • অন্যটি হলো GUI (গ্রাফিক্যাল ইউজার ইন্টারফেস), যেখানে ব্যবহারকারী স্ক্রিনে জিনিসগুলো দেখে এবং ক্লিক করে এবং কম্পিউটার সেই ইভেন্টগুলো রেসপন্স দিয়ে সংশ্লিষ্ট টাস্ক এক্সিকিউট করে।

টার্মিনাল ব্যবহার কেন করব?

আমরা এখনো বলেছি যে অধিকাংশ অপারেটিং সিস্টেম GUI দিয়ে আসে। তাই যদি আমরা স্ক্রিনে জিনিসগুলো দেখে এবং ক্লিক করে যা চাই সেটা করতে পারি, তবে আপনি প্রশ্ন করতে পারেন এই জটিল টার্মিনাল/CLI/শেল জিনিস শিখতে কেন?

প্রথম কারণ হলো অনেক টাস্কের জন্য এটি শুধু অধিক দক্ষ। আমরা কিছু উদাহরণ শীঘ্রই দেখব, কিন্তু অনেক টাস্ক আছে যেখানে GUI-তে много ক্লিক লাগে ভিন্ন উইন্ডোর মধ্যে। কিন্তু CLI-তে একই টাস্ক একক কমান্ড দিয়ে এক্সিকিউট করা যায়।

এই দিক থেকে, কম্যান্ড লাইন সাথে কমফরটেবল হলে আপনি সময় বাঁচাতে পারবেন এবং আপনার টাস্ক দ্রুত সম্পন্ন করতে পারবেন।

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

কয়েকটি উদাহরণ দিতে গেলে, আমরা একটি স্ক্রিপ্ট বানাতে পারি যা আমাদের জন্য একটি নতুন অনলাইন রিপো তৈরি করবে, বা ক্লাউড প্রোভাইডারে নির্দিষ্ট ইন্ফ্রাস্ট্রাকচার তৈরি করবে, বা একটি সহজ টাস্ক যেমন প্রতি ঘণ্টা স্ক্রিন ওয়ালপেপার পরিবর্তন করবে।

স্ক্রিপ্টিং রিপিটেটিভ টাস্কে সময় বাঁচাতে একটি চমৎকার উপায়।

তৃতীয় কারণ হলো иногда CLI একমাত্র উপায় যেন আমরা কম্পিউটারের সাথে ইন্টারঅ্যাক্ট করতে পারি। উদাহরণস্বরূপ, যখন আপনাকে একটি ক্লাউড প্ল্যাটফর্ম সার্ভারের সাথে ইন্টারঅ্যাক্ট করতে হবে। অধিকাংশ এই কেসে, আপনার GUI উপলব্ধ থাকবে না, শুধু CLI থাকবে কমান্ড রান করার জন্য।

তাই CLI সাথে কমফরটেবল হলে আপনি সব পরিস্থিতিতে কম্পিউটারের সাথে ইন্টারঅ্যাক্ট করতে পারবেন।

চতুর্থ কারণ হলো এটি কুল দেখায় এবং মজার। মুভি হ্যাকাররা কম্পিউটারে ক্লিক করে घুরে না, ঠিক? ;)

শেলের বিভিন্ন ধরন

আপনার টার্মিনালে যে আসল কমান্ডগুলো রান করতে পারেন সেগুলোর মধ্যে যাওয়ার আগে, আমি মনে করি বাইরে কী কী শেল আছে এবং আপনি বর্তমানে কী শেল চালাচ্ছেন সেটা চেনা গুরুত্বপূর্ণ।

বিভিন্ন শেল ভিন্ন সিনট্যাক্স এবং ফিচার দিয়ে আসে, তাই আপনি সঠিক কমান্ড কী দিতে হবে সেটা জানতে হলে আপনাকে জানতে হবে আপনি কী শেল চালাচ্ছেন।

কিছু ইতিহাস – POSIX

শেলের জন্য একটি সাধারণ স্ট্যান্ডার্ড আছে যাকে POSIX বলা হয়।

POSIX শেলের জন্য تقریباً একইভাবে কাজ করে যেভাবে ECMAScript JavaScript-এর জন্য কাজ করে। এটি একটি স্ট্যান্ডার্ড যা নির্দিষ্ট বৈশিষ্ট্য এবং ফিচার নির্দেশ করে যেগুলো সব শেল মেনে চলতে হয়।

এই স্ট্যান্ডার্ড ১৯৮০-এর দশকে প্রতিষ্ঠিত হয়েছিল এবং বর্তমান অধিকাংশ শেল এই স্ট্যান্ডার্ড অনুযায়ী ডেভেলপ হয়েছে। এজন্য অধিকাংশ শেল একসamaan সিনট্যাক্স এবং ফিচার শেয়ার করে।

আমি কী শেল চালাচ্ছি সেটা কীভাবে জানব?

আপনি বর্তমানে কী শেল চালাচ্ছেন সেটা জানতে, শুধু আপনার টার্মিনাল খুলুন এবং echo $0 লিখুন। এটি করেন্ট রানিং প্রোগ্রামের নাম প্রিন্ট করবে, যা এই কেসে আসল শেল।

কমांड লাইন মাস্টার করুন: টার্মিনাল মাস্টারির শুরুকারীদের গাইড

কোন শেল ভালো?

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

কিছু細微 পার্থক্য আছে যেগুলো আপনি জানতে চাইতে পারেন:

  • উল্লেখ্য, Bash সবচেয়ে وسیচারিত এবং Mac এবং Linux-এ ডিফল্ট ইনস্টল থাকে।
  • Zsh Bash-এর সাথে খুব মিল, কিন্তু এটি Bash-এর পরে তৈরি হয়েছিল এবং এর ওপর কিছু সুন্দর উন্নতি আছে। পার্থক্য বিস্তারিত জানতে চাইলে এখানে একটি চমৎকার আর্টিকেল আছে।
  • Fish আরেকটি সাধারণ শেল যা কিছু সুন্দর বিল্ট-ইন ফিচার এবং কনফিগারেশন দিয়ে আসে যেমন অটোকমপ্লিশন এবং সিনট্যাক্স হাইলাইটিং। Fish-এর বিষয় হলো এটি POSIX কমপ্লায়েন্ট নয়, Bash এবং Zsh হলেও। এর মানে Bash এবং Zsh-এ যা কমান্ড রান করবেন সেগুলো Fish-এ রান নাও হতে পারে এবং বিপরীতও। এটা Fish স্ক্রিপ্টিংকে অধিকাংশ কম্পিউটারের সাথে কম কমপ্যাটিবল করে তুলেছে Bash এবং Zsh-এর তুলনায়।
  • আরো কিছু শেল আছে যেমন Ash বা Dash (নেমিং সবকিছু আরও কনফিউজিং করে দিয়েছে, আমি জানি...) যা POSIX শেলের স্ট্রিপ-ডাউন ভার্সন। এর মানে এগুলো শুধু POSIX-এ প্রয়োজনীয় ফিচারগুলো দিয়ে থাকে, আর কিছু নেই। Bash এবং Zsh POSIX-এর চেয়ে বেশি ফিচার যোগ করে।

শেলগুলো এক্সট্রা ফিচার যোগ করলে সেগুলো ইন্টারঅ্যাক্ট করার জন্য সহজ এবং বান্ধব হয়ে যায়, কিন্তু স্ক্রিপ্ট এবং কমান্ড এক্সিকিউট করতে ধীর হয়ে যায়।

একটি সাধারণ অভ্যাস হলো এই "এনহ্যান্সড" শেলগুলো যেমন Bash বা Zsh সাধারণ ইন্টারঅ্যাকশনের জন্য ব্যবহার করা, এবং "স্ট্রিপড" শেল যেমন Ash বা Dash স্ক্রিপ্ট এক্সিকিউট করার জন্য।

যখন আমরা স্ক্রিপ্টিং-এ যাব, তখন দেখব কীভাবে একটি নির্দিষ্ট শেলকে একটি প্রদত্ত স্ক্রিপ্ট এক্সিকিউট করার জন্য ডিফাইন করা যায়।

আপনি আপনি এই শেলগুলোর বিস্তারিত তুলনা জানতে চাইলে, এখানে একটি ভিডিও আছে যা খুব ভালো ব্যাখ্যা করে:

আমি যদি একটি শেল রিকমেন্ড করতাম, তবে Bash রিকমেন্ড করতাম কারণ এটি সবচেয়ে স্ট্যান্ডার্ড এবং সাধারণত ব্যবহৃত। এর মানে আপনি আপনার জ্ঞান অধিকাংশ এনভাॅयरনমেন্টে ট্রান্সলেট করতে পারবেন।

আবার বলছি, সত্যি অধিকাংশ শেলের মধ্যে খুব বড় পার্থক্য নেই। তাই যেকোনো কেসে আপনি কয়েকটা ট্রাই করে দেখতে পারেন কোনটা আপনার পছন্দ। ;)

কাস্টমাইজেশন সম্পর্কে একটি মন্তব্য

আমি বলেছিলাম Fish বিল্ট-ইন কনফিগারেশন দিয়ে আসে যেমন অটোকমপ্লিশন এবং সিনট্যাক্স হাইলাইটিং। এটি Fish-এ বিল্ট-ইন, কিন্তু Bash বা Zsh-এও আপনি এই ফিচারগুলো কনফিগার করতে পারেন।

পয়েন্ট হলো শেলগুলো কাস্টমাইজযোগ্য। আপনি প্রোগ্রাম কীভাবে কাজ করবে, আপনার पास কী কমান্ড থাকবে, আপনার প্রম্পট কী ইনফোর্মেশন দেখাবে, এবং আরও অনেক কিছু এডিট করতে পারেন।

এখানে কাস্টমাইজেশন অপশন বিস্তারিত দেখাব না, কিন্তু জানান যে আপনি আপনার কম্পিউটারে একটি শেল ইনস্টল করলে, কিছু ফাইল আপনার সিস্টেমে তৈরি হবে। পরে আপনি সেসব ফাইল এডিট করে আপনার প্রোগ্রাম কাস্টমাইজ করতে পারেন।

এছাড়া অনলাইনে অনেক প্লাগইন উপলব্ধ যা আপনার শেল কাস্টমাইজ করতে সাহায্য করে সহজে। আপনি শুধু সেগুলো ইনস্টল করুন এবং প্লাগইন যে ফিচার দেয় সেগুলো পান। কিছু উদাহরণ হলো OhMyZsh এবং Starship।

এই কাস্টমাইজেশন অপশনগুলো টার্মিনালের জন্যও সত্য।

তাই শুধু শেল এবং টার্মিনালের অনেক অপশন নেই, প্রতিটি শেল এবং টার্মিনালের জন্যও অনেক কনফিগারেশন অপশন আছে।

শুরু করলে এই সব ইনফোর্মেশন একটু অভiaire লাগতে পারে। শুধু জানুন যে অনেক অপশন আছে, এবং প্রতিটি অপশন কাস্টমাইজযোগ্যও। এটাই।

সর্বাধিক সাধারণ এবং উপযোগী কমান্ডসমূহ

এখন CLI কীভাবে কাজ করে তার একটি ফাউন্ডেশন পাওয়ার পর, আসুন দৈনন্দিন কাজের জন্য সবচেয়ে উপযোগী কমান্ডগুলোতে ডুব দিই।

মনে রাখবেন এই উদাহরণগুলো আমার বর্তমান কনফিগারেশন (Linux OS-এ Bash) বেসড। কিন্তু অধিকাংশ কমান্ড অধিকাংশ কনফিগারেশনে কাজ করবে।

  • Echo টার্মিনালে যা প্যারামিটার হিসেবে পাস করবেন সেটা প্রিন্ট করে।
echo Hello freeCodeCamp! // আউটপুট: Hello freeCodeCamp! 
  • pwd এর অর্থ print working directory এবং এটি প্রিন্ট করে যে আমরা কম্পিউটারে বর্তমানে কোন "জায়গা" বা ডিরেক্টরিতে আছি।
pwd // আউটপুট: /home/German 
  • ls আপনাকে বর্তমান ডিরেক্টরির কন্টেন্টস দেখাবে। এটি ফাইল এবং অন্যান্য ডিরেক্টরি দুটোই দেখাবে।

উদাহরণস্বরূপ, এখানে আমি একটি React প্রজেক্ট ডিরেক্টরিতে আছি যা আমি সম্প্রতি কাজ করছি:

ls // আউটপুট: node_modules package.json package-lock.json public README.md src 

আপনি যদি এই কমান্ডে -a ফ্ল্যাগ বা প্যারামিটার পাস করেন তবে এটি হিডেন ফাইল বা ডিরেক্টরিও দেখাবে। যেমন .git বা .gitignore ফাইল।

ls -a // আউটপুট: . .env .gitignore package.json public src .. .git node_modules package-lock.json README.md 
  • cd হচ্ছে Change directory-এর সংক্ষিপ্ত এবং এটি আপনাকে বর্তমান ডিরেক্টরি থেকে অন্য ডিরেক্টরিতে নিয়ে যাবে।

হোম ডিরেক্টরিতে থাকলে, আমি cd Desktop লিখলে এটি আমাকে Desktop ডিরেক্টরিতে নিয়ে যাবে।

যদি আমি এক ডিরেক্টরি উপরে যেতে চাই, মানে বর্তমান ডিরেক্টরিকে ধারণকারী ডিরেক্টরিতে, তবে আমি cd .. লিখতে পারি।

আপনি যদি শুধু cd লিখেন, তবে এটি আপনাকে সরাসরি হোম ডিরেক্টরিতে নিয়ে যাবে।

  • mkdir হচ্ছে make directory-এর সংক্ষিপ্ত এবং এটি আপনার জন্য একটি নতুন ডিরেক্টরি তৈরি করবে। আপনাকে কমান্ডে ডিরেক্টরির নাম প্যারামিটার হিসেবে পাস করতে হবে।

যদি আমি "Test" নামে একটি নতুন ডিরেক্টরি তৈরি করতে চাই তবে আমি mkdir test লিখব।

  • rmdir হচ্ছে Remove directory-এর সংক্ষিপ্ত এবং এটি ঠিক তাই করে। এটিও ডিরেক্টরির নাম প্যারামিটার নেয় mkdir-এর মত: rmdir test।

  • touch আপনাকে বর্তমান ডিরেক্টরিতে একটি খালি ফাইল তৈরি করতে দেয়। প্যারামিটার হিসেবে ফাইলের নাম নেয়, যেমন touch test.txt।

  • rm আপনাকে ফাইল ডিলিট করতে দেয়, ঠিক যেমন rmdir ডিরেক্টরি রিমুভ করতে দেয়।
    rm test.txt

  • cp আপনাকে ফাইল বা ডিরেক্টরি কপি করতে দেয়। এই কমান্ড দুটি প্যারামিটার নেয়: প্রথমটি হলো আপনি যে ফাইল বা ডিরেক্টরি কপি করতে চান, এবং দ্বিতীয়টি হলো আপনার কপির ডেস্টিনেশন (আপনি আপনার ফাইল/ডিরেক্টরি কোথায় কপি করতে চান)।

আমি যদি আমার txt ফাইলের একটা কপি একই ডিরেক্টরিতে তৈরি করতে চাই, তবে আমি নিচের মত লিখতে পারি:

cp test.txt testCopy.txt 

দেখুন ডিরেক্টরি পরিবর্তন হয়নি, কারণ "ডেস্টিনেশন"-এ আমি ফাইলের নতুন নাম দিয়েছি।

আমি যদি ফাইলটি অন্য ডিরেক্টরিতে কপি করতে চাই কিন্তু একই ফাইল নাম রেখে, তবে আমি এভাবে লিখতে পারি:

cp test.txt ./testFolder/ 

এবং যদি আমি অন্য ফোল্ডারে কপি করতে চাই ফাইল নাম পরিবর্তন করে, তাহলে নিচের মত লিখব:

cp test.txt ./testFolder/testCopy.txt 
  • mv হচ্ছে move-এর সংক্ষিপ্ত, এবং এটি আমাদের একটি ফাইল বা ডিরেক্টরি এক জায়গা থেকে অন্য জায়গায় সরাতে দেয়। অর্থাৎ, নতুন ডিরেক্টরিতে তৈরি করে এবং পুরনো জায়গা থেকে ডিলিট করে (ঠিক যেমন আপনি কাট এবং পেস্ট করতেন)।

আবার, এই কমান্ড দুটি প্যারামিটার নেয়, যে ফাইল বা ডিরেক্টরি আমরা সরাতে চাই এবং ডেস্টিনেশন।

mv test.txt ./testFolder/ 

আমরা একই কমান্ডে ফাইলের নামও পরিবর্তন করতে পারি যদি চাই:

mv test.txt ./testFolder/testCopy.txt 
  • head আপনাকে একটি ফাইল বা পাইপড ডেটার শুরুটা টার্মিনাল থেকে সরাসরি দেখতে দেয়।
head test.txt // আউটপুট: this is the beginning of my test file 
  • tail একইভাবে কাজ করে কিন্তু ফাইলের শেষ অংশটি দেখাবে।
tail test.txt // আউটপুট: this is the end of my test file 
  • --help ফ্ল্যাগ অধিকাংশ কমান্ডে ব্যবহার করা যায় এবং সেটি আপনাকে জানাবে কীভাবে সেটি ব্যবহার করতে হয়।
cd --help // আউটপুট: cd: cd [-L|[-P [-e]] [-@]] [dir] Change the shell working directory. 

করেন্ট ডিরেক্টরি DIR-এ পরিবর্তন করুন। ডিফল্ট DIR হলো HOME শেল ভেরিয়েবলের ভ্যালু।

CDPATH ভেরিয়েবল ডিরেক্টরি যেটি DIR ধারণ করে সেটার সার্চ পথ ডিফাইন করে। CDPATH-এ বিকল্প ডিরেক্টরি নাম কোলন : দিয়ে আলাদা করা হয়।

নাল ডিরেক্টরি নাম করেন্ট ডিরেক্টরি এর সমান যদি DIR ... দিয়ে শুরু হয়।

  • একইভাবে, man কমান্ড যেকোনো নির্দিষ্ট কমান্ড সম্পর্কে ইনফোর্মেশন দেবে।
 man cp // আউটপুট: CP(1) User Commands CP(1) NAME cp - copy files and directories SYNOPSIS cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE... DESCRIPTION Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY. Mandatory arguments to long options are mandatory for short options too. -a, --archive same as -dR --preserve=all --attributes-only don't copy the file data, just the attributes ... 

আপনি এমনকি man bash লিখতে পারেন এবং এটি এই শেল সম্পর্কে যাবতীয় জানা আছে সেটা একটি বিশাল ম্যানুয়াল রিটার্ন করবে। ;)

  • code আপনার ডিফল্ট কোড এডিটর খুলবে। আপনি যদি কমান্ড একা লিখেন, তবে এটি শুধু এডিটর খুলবে লাস্ট খোলা ফাইল/ডিরেক্টরির সাথে।

আপনি একটি নির্দিষ্ট ফাইল ওপেন করতে পারেন প্যারামিটার হিসেবে পাস করে: code test.txt।

বা একটি নতুন ফাইল ওপেন করতে পারেন নতুন ফাইলের নাম পাস করে: code thisIsAJsFile.js।

  • edit আপনার ডিফল্ট কমांड লাইন টেক্সট এডিটরে টেক্সট ফাইল খুলবে (যা আপনি Mac বা Linux-এ থাকলে Nano বা Vim হতে পারে)।

আপনি আপনার ফাইল ওপেন করলে এবং তারপর আপনার এডিটর থেকে বের হতে না পারলে, প্রথমে এই মেম দেখুন:

![vimExit](https://www.freecodecamp.org/news/content/images/2022/03/vimExit.png) 

তারপর :q! টাইপ করে এন্টার চাপুন।

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

  • ctrl+c আপনাকে টার্মিনাল যে প্রসেস রান করছে সেটা থেকে বের হতে দেয়। উদাহরণস্বরূপ, আপনি npx create-react-app দিয়ে একটি রিয়েক্ট অ্যাপ তৈরি করছেন এবং বিল্ড ক্যান্সেল করতে চান কোনো পয়েন্টে, শুধু ctrl+c চাপুন এবং এটি বন্ধ হয়ে যাবে।

  • টার্মিনাল থেকে টেক্সট কপি করা যায় ctrl+shift+c দিয়ে এবং পেস্ট করা যায় ctrl+shift+v দিয়ে।

  • clear আপনার টার্মিনালকে সকল প্রিভিয়াস কন্টেন্ট থেকে ক্লিয়ার করবে।

  • exit আপনার টার্মিনাল বন্ধ করবে এবং (এটি কমান্ড নয় কিন্তু এটিও কুল) ctrl+alt+t আপনার জন্য একটি নতুন টার্মিনাল খুলবে।

  • আপ এবং ডাউন কী চাপলে আপনি আপনার দেওয়া প্রিভিয়াস কমান্ডগুলো নেভিগেট করতে পারবেন।

  • Tab চাপলে আপনি যেভাবে লিখেছেন সেটা বেসড অটোকমপ্লিশন পাবেন। দুইবার Tab চাপলে আপনি যেভাবে লিখেছেন সেটা বেসড সাজেশন পাবেন।

উদাহরণস্বরূপ, যদি আমি edit test লিখি এবং দুইবার Tab চাপি, তবে আমি পাব testFolder/ test.txt। যদি আমি edit test. লিখি এবং Tab চাপি তবে আমার টেক্সট অটোকমপ্লিট হয়ে edit test.txt হয়ে যাবে।

Git কমান্ড

ফাইল সিস্টেমের সাথে কাজ করার পাশাপাশি এবং ইনস্টল/আনইনস্টল করার পাশাপাশি, Git এবং অনলাইন রিপো-এর সাথে ইন্টারঅ্যাক্ট করা সম্ভবত ডেভেলপার হিসেবে আপনি টার্মিনাল ব্যবহার করার সবচেয়ে সাধারণ കാരণ।

এটি ক্লিক করে ঘুরার চেয়ে টার্মিনাল থেকে করা অনেক বেশি দক্ষ। তাই আসুন সবচেয়ে উপযোগী Git কমান্ডগুলো দেখি।

  • git init আপনার জন্য একটি নতুন লোকাল রিপোজিটরি তৈরি করবে।
git init // আউটপুট: Initialized empty Git repository in /home/German/Desktop/testFolder/.git/ 
  • git add এক বা একাধিক ফাইল স্টেজিং-এ যোগ করবে। আপনি বা নির্দিষ্ট ফাইল ডিটেইল করতে পারেন স্টেজিং-এ যোগ করার জন্য বা সব চেঞ্জড ফাইল যোগ করতে পারেন git add . লিখে।

  • git commit আপনার চেঞ্জগুলো রিপোজিটরিতে কমিট করবে। কমিট সবসময় -m ফ্ল্যাগ এবং কমিট মেসেজ দিয়ে থাকে।

git commit -m 'This is a test commit' // আউটপুট: [master (root-commit) 6101dfe] This is a test commit 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test.js 
  • git status আপনাকে বলবে আপনি কোন ব্রাঞ্চে আছেন এবং আপনার কমিট করার জন্য চেঞ্জ আছে কিনা।
git status // আউটপুট: On branch master nothing to commit, working tree clean 
  • git clone আপনাকে একটি রিপোজিটরি ক্লোন (কপি) করতে দেয় আপনার বর্তমান ডিরেক্টরিতে। মনে রাখবেন আপনি যেকোনো রিমোট রিপোজিটরি (GitHub, GitLab, ইত্যাদি) এবং লোকাল রিপোজিটরি (যেগুলো আপনার কম্পিউটারে সেভড) উভয়ই ক্লোন করতে পারেন।
git clone https://github.com/coccagerman/MazeGenerator.git // আউটপুট: Cloning into 'MazeGenerator'... remote: Enumerating objects: 15, done. remote: Counting objects: 100% (15/15), done. remote: Compressing objects: 100% (15/15), done. remote: Total 15 (delta 1), reused 11 (delta 0), pack-reused 0 Unpacking objects: 100% (15/15), done. 
  • git remote add origin ব্যবহার হয় রিমোট রিপোজিটরির URL ডিটেইল করার জন্য যা আপনি আপনার প্রজেক্টের জন্য ব্যবহার করবেন। কেউ যদি পরে এটা পরিবর্তন করতে চায়, তবে git remote set-url origin কমান্ড দিয়ে করতে পারেন।
git remote add origin https://github.com/coccagerman/testRepo.git 

মনে রাখবেন আপনাকে প্রথমে আপনার রিমোট রিপো তৈরি করতে হবে তার URL পাওয়ার জন্য। আমরা পরে দেখব কীভাবে এটি কম্যান্ড লাইন থেকে একটি ছোট স্ক্রিপ্ট দিয়ে করা যায়। ;)

  • git remote -v আপনাকে বর্তমান রিমোট রিপোজিটরি লিস্ট করতে দেয়।
git remote -v // আউটপুট: origin https://github.com/coccagerman/testRepo.git (fetch) origin https://github.com/coccagerman/testRepo.git (push) 
  • git push আপনার কমিট করা চেঞ্জগুলো আপনার রিমোট রিপোতে আপলোড করবে।
git push // আউটপুট: Counting objects: 2, done. Delta compression using up to 8 threads. Compressing objects: 100% (2/2), 266 bytes | 266.00 KiB/s, done. Total 2 (delta 0), reused 0 (delta 0) 
  • git branch আপনার রিপোতে সব উপলব্ধ ব্রাঞ্চ লিস্ট করবে এবং বলবে আপনি বর্তমানে কোন ব্রাঞ্চে আছেন। আপনি যদি একটি নতুন ব্রাঞ্চ তৈরি করতে চান, তবে শুধু নতুন ব্রাঞ্চের নাম প্যারামিটার হিসেবে যোগ করুন như git branch <branch name>।
git branch // আউটপুট: * main 
  • git checkout আপনাকে এক ব্রাঞ্চ থেকে অন্য ব্রাঞ্চে সরাবে। এটি আপনার ডেস্টিনেশন ব্রাঞ্চ প্যারামিটার হিসেবে নেয়।
git checkout newBranch // আউটপুট: Switched to branch 'newBranch' 
  • git pull আপনার রিমোট রিপোজিটরি থেকে কোড পুল (ডাউনলোড) করবে এবং আপনার লোকাল রিপোতে কমবাইন করবে। এটি টিমে কাজ করার সময় খুবই উপকারী, যখন অনেক ডেভেলপার একই কোড বেসে কাজ করে। এই কেসে প্রতিটি ডেভেলপার পেরিয়ডিক্যালি রিমোট রিপো থেকে পুল করে যাতে সব ডেভেলপারের করা চেঞ্জসহ কোড বেসে কাজ করতে পারে।

যদি আপনার রিমোট রিপোতে নতুন কোড থাকে, তবে কমান্ডটি আক्चুয়াল ফাইলগুলো রিটার্ন করবে যেগুলো পুল-এ মডিফাই হয়েছে। না থাকলে Already up to date পাবেন।

git pull // আউটপুট: Already up to date. 
  • git diff আপনাকে বর্তমান ব্রাঞ্চ এবং অন্য ব্রাঞ্চের মধ্যে পার্থক্য দেখতে দেয়।
git diff newBranch // আউটপুট: diff --git a/newFileInNewBranch.js b/newFileInNewBranch.js deleted file mode 100644 index e69de29..0000000 

একটি সাইড কমেন্ট, ব্রাঞ্চ বা রিপোর মধ্যে পার্থক্য কমপেয়ার করার সময়, সাধারণত ভিজ্যুয়াল টুল যেমন Meld ব্যবহার করা হয়। টার্মিনালে সরাসরি ভিজুয়ালাইজ করা যাবে না এমন নয়, কিন্তু এই টুলগুলো ক্লিয়ার ভিজুয়ালাইজেশনের জন্য চমৎকার।

  • git merge বর্তমান ব্রাঞ্চকে অন্য ব্রাঞ্চের সাথে মার্জ (কম্বাইন) করবে। মনে রাখবেন চেঞ্জগুলো শুধু বর্তমান ব্রাঞ্চে ইনকর্পোরেট হবে, অন্য ব্রাঞ্চে নয়।
git merge newBranch // আউটপুট: Updating f15cf51..3a3d62f Fast-forward newFileInNewBranch.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 newFileInNewBranch.js 
  • git log রিপোজিটরিতে করা সকল প্রিভিয়াস কমিট লিস্ট করবে।
git log // আউটপুট: commit 3a3d62fe7cea7c09403c048e971a5172459d0948 (HEAD -> main, tag: TestTag, origin/main, newBranch) Author: German Cocca <german.cocca@avature.net> Date: Fri Apr 1 18:48:20 2022 -0300 Added new file commit f15cf515dd3ec398210108dce092debf26ff9e12 Author: German Cocca <german.cocca@avature.net> ... 
  • --help ফ্ল্যাগ আপনাকে একটি নির্দিষ্ট কমান্ড সম্পর্কে ইনফোর্মেশন দেখাবে, ঠিক একইভাবে যেভাবে Bash-এ কাজ করে।
git diff --help // আউটপুট: GIT-DIFF(1) Git Manual GIT-DIFF(1) NAME git-diff - Show changes between commits, commit and working tree, etc SYNOPSIS git diff [options] [<commit>] [--] [<path>...] git diff [options] --cached [<commit>] [--] [<path>...] ... 

আমাদের প্রথম স্ক্রিপ্ট

এখন আমরা কম্যান্ড লাইনের সত্যিকারের মজার এবং চমৎকার অংশে প্রস্তুত, স্ক্রিপ্টিং!

যেমন আমি পূর্বে বলেছি, একটি স্ক্রিপ্ট হচ্ছে কমান্ড বা নির্দেশাবলীর একটি সিরিজ যা আমরা যেকোনো সময় এক্সিকিউট করতে পারি। কীভাবে আমরা একটি স্ক্রিপ্ট কোড করতে পারি তা ব্যাখ্যা করার জন্য, আমরা একটি সহজ উদাহরণ ব্যবহার করব যা আমাদের একটি GitHub রিপো তৈরি করতে দেবে একটি কমান্ড রান করলে। ;)

  • প্রথম কাজ হলো একটি .sh ফাইল তৈরি করা। আপনি যেখানে চান সেখানে রাখতে পারেন। আমার ফাইলের নাম newGhRepo.sh।

  • তারপর আপনার পছন্দের টেক্সট/কোড এডিটরে খুলুন।

  • প্রথম লাইনে আমরা লিখব: #! /bin/sh

এটিকে শিব্যাং বলা হয়, এবং এর কাজ হলো ডিক্লেয়ার করা যে কোন শেল এই স্ক্রিপ্টটি রান করবে।

পূর্বে আমরা বলেছিলাম যে আমরা সাধারণ ইন্টারঅ্যাকশনের জন্য একটি শেল ব্যবহার করতে পারি এবং স্ক্রিপ্ট এক্সিকিউট করার জন্য অন্য একটি শেল। শিব্যাং হলো वह ইনস্ট্রাকশন যা ডিক্টেট করে কোন শেল স্ক্রিপ্টটি রান করবে।

পূর্বে বলেছিলাম, আমরা একটি "স্ট্রিপড ডাউন" শেল (sh শেলও বলা হয়) ব্যবহার করব স্ক্রিপ্ট রান করার জন্য কারণ এগুলো আরও দক্ষ (যদিও পার্থক্য অনবচনীয় হতে পারে, এটি শুধু ব্যক্তিগত পছন্দ)। আমার কম্পিউটারে dash আমার sh শেল।

যদি আমি এই স্ক্রিপ্টটি Bash-এ রান করতে চাই তবে শিব্যাং হত #! /bin/bash

  • আমাদের পরবর্তী লাইন হবে repoName=$1

এখানে আমরা একটি ভেরিয়েবল ডিক্লেয়ার করছি repoName নামে, এবং এটিকে স্ক্রিপ্ট যা প্রথম প্যারামিটার পাবে সেটার ভ্যালু এসাইন করছি।

একটি প্যারামিটার হচ্ছে স্ক্রিপ্ট/কমান্ডের পরে দেওয়া ক্যারেক্টার সেট। cd কমান্ডের মত, আমাদের একটি ডিরেক্টরি প্যারামিটার স্পেসিফাই করতে হয় ডিরেক্টরি চেঞ্জ করার জন্য (যেমন: cd testFolder)।

একটি স্ক্রিপ্টের মধ্যে প্যারামিটার আইডেন্টিফাই করার একটি উপায় হলো ডলার সাইন এবং সেই প্যারামিটারের অর্ডার ব্যবহার করা।

আমি যদি একাধিক প্যারামিটার এক্সপেক্ট করি তবে আমি লিখতে পারি:

paramOne=$1 paramTwo=$2 paramThree=$3 ... 
  • তাই আমরা আমাদের রিপো নাম স্ক্রিপ্টের প্যারামিটার হিসেবে এক্সপেক্ট করছি। কিন্তু যদি ব্যবহারকারী এটা দিতে ভুলে যায় তবে কী হবে? আমাদের এটা প্ল্যান করতে হবে তাই আমরা একটি কন্ডিশনাল কোড করব যা ব্যবহারকারীকে রিপো নাম দিতে বলবে যতক্ষণ না প্যারামিটার পাওয়া যায়।

আমরা এটা এভাবে করতে পারি:

while [ -z "$repoName" ] do echo 'Provide a repository name' read -r -p $'Repository name:' repoName done 

এখানে আমরা করছি:

  1. যতক্ষণ repoName ভেরিয়েবল এসাইন নয় (while [ -z "$repoName" ])
  2. কনসোলে এই মেসেজ লিখো (echo 'Provide a repository name')
  3. তারপর ব্যবহারকারী যা ইনপুট দেবে সেটা পড়ো এবং repoName ভেরিয়েবলে এসাইন করো (read -r -p $'Repository name:' repoName)
  • এখন আমাদের রিপো নাম ঠিক আছে, আমরা আমাদের লোকাল Git রিপো এভাবে তৈরি করতে পারি:
echo "# $repoName" >> README.md git init git add . git commit -m "First commit" 

এটি একটি readme ফাইল তৈরি করছে এবং এক লাইনে রিপো নাম লিখছে (echo "# $repoName" >> README.md) এবং তারপর Git রিপো ইনিশিয়ালাইজ করে ফাস্ট কমিট করছে।

  • তারপর আমাদের রিপো GitHub-এ আপলোড করার পালা। এটি করার জন্য আমরা GitHub API-এর সুবিধা নেব নিচের কমান্ডে:

curl -u coccagerman https://api.github.com/user/repos -d '{"name": "'"$repoName"'", "private":false}'

curl হচ্ছে একটি কমান্ড যা সার্ভার থেকে বা সার্ভারে ডেটা ট্রান্সফার করে, সমর্থিত প্রোটোকলগুলোর যেকোনো একটি ব্যবহার করে।

পরবর্তীতে আমরা -u ফ্ল্যাগ ব্যবহার করছি ইউজার ডিক্লেয়ার করার জন্য যাকে রিপো তৈরি করা হচ্ছে (-u coccagerman)।

পরবর্তীতে আসছে GitHub API-র এন্ডপয়েন্ট (https://api.github.com/user/repos)।

এবং শেষে আমরা -d ফ্ল্যাগ ব্যবহার করছি এই কমান্ডে প্যারামিটার পাস করার জন্য। এই কেসে আমরা রিপোজিটরির নাম ইন্ডিকেট করছি (যার জন্য আমরা আমাদের repoName ভেরিয়েবল ব্যবহার করছি) এবং private অপশন false সেট করছি, যেহেতু আমরা আমাদের রিপো পাবলিক চাই।

API-তে আরো অনেক কনফিগ অপশন আছে, ডকস চেক করুন আরও ইনফোর জন্য।

  • এই কমান্ড রান করার পর, GitHub আমাদের থেকে প্রাইভেট টোকেন চাইবে অথেন্টিকেশনের জন্য।

আপনার যদি প্রাইভেট টোকেন না থাকে, তবে আপনি GitHub-এ জেনারেট করতে পারেন Settings > Developer settings > Personal access tokens-এ

কমांड লাইন মাস্টার করুন: টার্মিনাল মাস্টারির শুরুকারীদের গাইড

কমांड লাইন মাস্টার করুন: টার্মিনাল মাস্টারির শুরুকারীদের গাইড

কমांड লাইন মাস্টার করুন: টার্মিনাল মাস্টারির শুরুকারীদের গাইড

  • কুল, আমরা Почти শেষ! এখন আমাদের প্রয়োজন নতুন তৈরি করা GitHub রিপোর রিমোট URL।

সেটা পেতে আমরা আবার curl এবং GitHub API ব্যবহার করব, এভাবে:

GIT_URL=$(curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/coccagerman/"$repoName" | jq -r '.clone_url') 

এখানে আমরা একটি ভেরিয়েবল ডিক্লেয়ার করছি GIT_URL নামে এবং এটিকে আসাইন করছি নিচের কমান্ড যা রিটার্ন করবে।

-H ফ্ল্যাগ আমাদের রিকোয়েস্টের হেডার সেট করে।

তারপর আমরা GitHub API এন্ডপয়েন্ট পাস করছি, যেটিতে আমাদের ইউজারনেম এবং রিপো নাম থাকা উচিত (https://api.github.com/repos/coccagerman/"$repoName")।

তারপর আমরা পাইপিং করছি আমাদের রিকোয়েস্টের রিটার্ন ভ্যালু। পাইপিং মানে এক প্রসেসের রিটার্ন ভ্যালু অন্য প্রসেসের ইনপুট ভ্যালু হিসেবে পাস করা। আমরা এটা | সিম্বল দিয়ে করি যেমন <process1> | <process2>।

এবং শেষে আমরা jq কমান্ড রান করছি, যা JSON ইনপুট প্রসেস করার একটি টুল। এখানে আমরা বলে দিচ্ছি .clone_url এর ভ্যালু নেওয়া, যা আমাদের রিমোট Git URL হবে GitHub API-র ডেটা ফরম্যাট অনুযায়ী।

  • এবং শেষ ধাপ হিসেবে, আমরা আমাদের master ব্রাঞ্চকে main-এ রিনেম করব, যে রিমোট অরিজিন আমরা পেলাম সেটা যোগ করব, এবং আমাদের কোড GitHub-এ পুশ করব! =D
git branch -M main git remote add origin $GIT_URL git push -u origin main 

আমাদের পুরো স্ক্রিপ্টটা দেখতে এইরকম হবে:

#! /bin/sh repoName=$1 while [ -z "$repoName" ] do echo 'Provide a repository name' read -r -p $'Repository name:' repoName done echo "# $repoName" >> README.md git init git add . git commit -m "First commit" curl -u <yourUserName> https://api.github.com/user/repos -d '{"name": "'"$repoName"'", "private":false}' GIT_URL=$(curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/<yourUserName>/"$repoName" | jq -r '.clone_url') git branch -M main git remote add origin $GIT_URL git push -u origin main 
  • এখন আমাদের স্ক্রিপ্ট টেস্ট করার পালা! এটি এক্সিকিউট করার দুটি উপায় আছে।

একটি অপশন হলো শেলের নাম লিখে ফাইলটি প্যারামিটার হিসেবে পাস করা, যেমন: dash ../ger/code/projects/scripts/newGhRepo.sh।

এবং অন্যটি হলো ফাইলটি এক্সিকিউটেবল করা chmod u+x ../ger/code/projects/scripts/newGhRepo.sh রান করিয়ে।

তারপর আপনি সরাসরি ফাইলটি এক্সিকিউট করতে পারেন ../ger/code/projects/scripts/newGhRepo.sh রান করিয়ে।

এটাই! আমাদের স্ক্রিপ্ট আপ এবং রানিং। যখনই আমাদের একটি নতুন রিপো দরকার, আমরা শুধু এই স্ক্রিপ্টটি যেকোনো ডিরেক্টরি থেকে এক্সিকিউট করতে পারি।

এখানে একটু বিরক্তিকর জিনিস হলো আমাদের স্ক্রিপ্ট ডিরেক্টরির এক্সাক্ট পথ মনে রাখতে হয়। কতটা কুল হতো যদি আমরা স্ক্রিপ্টটি একটি কমান্ড দিয়ে এক্সিকিউট করতাম যা সবসময় একই থাকে বর্তমান ডিরেক্টরি যেকোনো হোক?

এখানে আসে Bash Aliases আমাদের সমস্যা সমাধান করতে।

Alias হচ্ছে Bash-এ একটি উপায় যেন আমরা যে সঠিক কমান্ড রান করতে চাই তার জন্য একটি নাম দিয়ে রাখি।

একটি নতুন alias তৈরি করতে, আমাদের সিস্টেমের Bash কনফিগারেশন ফাইলগুলো এডিট করতে হবে। এই ফাইলগুলো সাধারণত হোম ডিরেক্টরিতে থাকে। Alias বিভিন্ন ফাইলে ডিফাইন করা যায় (প্রমুখ .bashrc বা .bash_aliases)।

আমার সিস্টেমে .bash_aliases ফাইল আছে, তাই সেটা এডিট করি।

  • আমাদের CLI-তে cd লিখে হোম ডিরেক্টরিতে যান।

  • তারপর ls -a লিখে সব ফাইল (হিডেনও) লিস্ট করুন এবং চেক করুন আপনার সিস্টেমে .bashrc বা .bash_aliases ফাইল আছে কিনা।

  • আপনার পছন্দের টেক্সট/কোড এডিটরে ফাইলটি খুলুন।

  • আমাদের নতুন alias এভাবে লিখুন:
    alias newghrepo="dash /home/German/Desktop/ger/code/projects/scripts/newGhRepo.sh"

এখানে আমি ডিক্লেয়ার করছি alias নাম, আসল কমান্ড যা আমি স্ক্রিপ্ট রান করার জন্য লিখব (newghrepo)।

এবং কোটেশনের মধ্যে, ডিফাইন করছি সেই alias কী করবে ("dash /home/German/Desktop/ger/code/projects/scripts/newGhRepo.sh")।

দেখুন আমি স্ক্রিপ্টের অ্যাবসোলিউট পথ পাস করছি, যাতে এই কমান্ড একইভাবে কাজ করে বর্তমান ডিরেক্টরি যেকোনো হোক।

আপনার যদি না পতা থাকে আপনার স্ক্রিপ্টের অ্যাবসোলিউট পথ কী, তবে স্ক্রিপ্ট ডিরেক্টরিতে আপনার টার্মিনালে যান এবং readlink -f newGhRepo.sh লিখুন। সেটা আপনাকে ফুল পথ দেবে। ;)

  • এডিটিং শেষে, ফাইলটি সেভ করুন, টার্মিনাল রিস্টার্ট করুন, এবং voilà! এখন আমরা আমাদের স্ক্রিপ্ট রান করতে পারি শুধু newghrepo লিখে, বর্তমান ডিরেক্টরি যেকোনো হোক। ব্রাউজার খুলে ক্লিক করে রিপো তৈরি করার চেয়ে অনেক দ্রুত! =D

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

রাউন্ড আপ

টার্মিনাল শুরুর দিকে একটি অভiaire এবং জটিল জায়গা লাগতে পারে। কিন্তু নিঃসন্দেহে এতে সময় এবং পরিশ্রম দিতে ارزشে। দক্ষতার সুবিধাগুলো এড়িয়ে যাওয়া যাবে না!

আপনি আগ্রহী হলে টার্মিনাল এবং Bash সম্পর্কে আরও জানতে, Zach Gollwitzer-র YouTube-এ একটি চমৎকার ক্র্যাশ কোর্স সিরিজ আছে।
তার Node এবং Javascript-ওয়ারেও চমৎকার টিউটোরিয়াল আছে, তাই আমি রিকমেন্ড করছি আপনি তাকে ফলো করুন। ;)

সবসময়ের মত, আশা করি আপনি আর্টিকেলটি উপভোগ করেছেন এবং কিছু নতুন শিখেছেন। আপনি চাইলে LinkedIn বা Twitter-এ আমাকে ফলো করতে পারেন।

চিয়ার্স এবং পরের বার দেখা হবে! =D

কমांड লাইন মাস্টার করুন: টার্মিনাল মাস্টারির শুরুকারীদের গাইড


  1. লিনাক্সে tee কমান্ড ব্যবহার করুন

  2. ব্যাশ শেল স্ক্রিপ্টিং মাস্টার করুন: লিনাক্স স্ক্রিপ্ট লেখা ও অটোমেট করার বেগাইনার গাইড

  3. Linux Watch কমান্ড 습득: সিনট্যাক্স, অপশন এবং প্রয়োগিক উদাহরণ

  4. macOS টার্মিনাল মাস্টার করুন: ضروری কমান্ড-লাইন গাইড