মার্সেল - লিনাক্সের জন্য আরও আধুনিক শেল


মার্সেল একটি নতুন শেল। এটি বিভিন্নভাবে traditionalতিহ্যবাহী শাঁসের সাথে সমান, তবে এটি কয়েকটি জিনিস আলাদাভাবে করে:

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

মার্সেল জিপিএলভি 3 এর আওতায় লাইসেন্সপ্রাপ্ত।

লিনাক্সে মার্সেল মডার্ন শেল ইনস্টল করা

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

আপনার নিজের ব্যবহারের জন্য মার্সেল ইনস্টল করতে:

# python3 -m pip install marcel

বা আপনি যদি সমস্ত ব্যবহারকারীর জন্য ইনস্টল করতে চান (উদাঃ /usr/স্থানীয় >):

$ sudo python3 -m pip install --prefix /usr/local marcel

একবার আপনি মার্সেল ইনস্টল করার পরে, কমান্ড মার্সেল চালিয়ে এটি কাজ করছে কিনা তা পরীক্ষা করুন এবং তারপরে মার্সেল প্রম্পটে সংস্করণ কমান্ডটি চালান:

$ marcel

মার্সেল শেল কাস্টমাইজেশন

আপনি ।/.Marcel.py ফাইলটিতে মার্সেলটি কাস্টমাইজ করতে পারেন, যা স্টার্টআপে পড়া হয়, (এবং সংশোধন করার পরে পুনরায় পড়া)। আপনি যেমন ফাইলের নাম থেকে বলতে পারেন, মার্সেলের কাস্টমাইজেশন পাইথনে করা হয়।

একটি জিনিস যা আপনি সম্ভবত করতে চান তা হ'ল প্রম্পটটি কাস্টমাইজ করা। এটি করতে, আপনি PROMPT ভেরিয়েবলের জন্য একটি তালিকা বরাদ্দ করেন। উদাহরণস্বরূপ, আপনি যদি প্রম্পটটি বর্তমান ডিরেক্টরি হতে চান তবে সবুজ রঙে মুদ্রিত, তারপরে <কোড >> নীল রঙে মুদ্রিত:

PROMPT = [
    Color(0, 4, 0),
    lambda: PWD,
    Color(0, 2, 5),
    '> '
]

ফলস্বরূপ প্রম্পটটি এরকম দেখাচ্ছে:

এটি অনাবৃত পিএস 1 কনফিগারেশন প্রতিস্থাপন করে যা আপনাকে ব্যাশে করতে হবে। রঙ (0, 4, 0) সবুজ নির্দিষ্ট করে, (আর্গুমেন্টগুলি আরজিবি মান, 0-5 এর মধ্যে রয়েছে)। পিডব্লিউডি হ'ল পরিবেশের পরিবর্তনশীল যা আপনার বর্তমান ডিরেক্টরিকে উপস্থাপন করে এবং এই ভেরিয়েবলটিকে ল্যাম্বদা: দ্বারা উপস্থাপিত করে প্রতিটি সময় প্রম্পট প্রদর্শিত হলে মূল্যায়ন করা হয়।

।/.Marcel.py পাইথন মডিউলগুলিও আমদানি করতে পারে। যেমন, আপনি যদি আপনার মার্সেল কমান্ডগুলিতে গণিত মডিউলটির ফাংশন ব্যবহার করতে চান:

from math import *

একবার এটি হয়ে গেলে আপনি সেই মডিউল থেকে চিহ্নগুলি উল্লেখ করতে পারেন, উদাঃ .g পাই :

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

এবং আপনি অবশ্যই নিজের প্রতীকগুলি সংজ্ঞায়িত করতে পারেন। উদাহরণস্বরূপ, যদি আপনি this/.marcel.py এ এই ফাংশন সংজ্ঞাটি রাখেন:

def factorial(n):
    f = 1
    for i in range(1, n + 1):
        f *= i
    return f

তারপরে আপনি কমান্ড লাইনে ফ্যাক্টরিয়াল ফাংশনটি ব্যবহার করতে পারেন, উদাঃ

মার্সেল শেল উদাহরণ

এখানে আমরা মার্সেল শেলের কমান্ডের কয়েকটি উদাহরণ শিখব।

বর্তমান ডিরেক্টরিটি পুনরাবৃত্তভাবে অন্বেষণ করুন, ফাইলগুলিকে তাদের এক্সটেনশান দ্বারা গ্রুপ করুন (উদাঃ .txt , .py এবং আরও) এবং প্রতিটি গ্রুপের জন্য মোট ফাইল আকার গণনা করুন।

আপনি নীচে মার্সেল এ এটি করতে পারেন:

Ls অপারেটর ফাইল অবজেক্টের একটি স্ট্রিম উত্পাদন করে, ( -fr এর অর্থ ডিরেক্টরিগুলি পুনরাবৃত্তিতে যান এবং কেবল ফাইলগুলি ফিরুন)।

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

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

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

উদাহরণস্বরূপ, এই কমান্ডটি অপারেটর এবং এক্সিকিউটেবলকে একত্রিত করে এবং ব্যবহারকারীদের ব্যবহারকারীর নাম তালিকাভুক্ত করে যার শেল /bin/bash

$ cat /etc/passwd \
| map (line: line.split(':')) \
| select (*line: line[-1] == '/bin/bash') \
| map (*line: line[0]) \
| xargs echo

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

মানচিত্রে প্রথম বন্ধনী যুক্ত একটি পাইথন ফাংশন যা : বিভাজকগুলিতে লাইনগুলি বিভক্ত করে 7-টিউপসেল দেয়। একটি নির্বাচন হ'ল একটি মার্সেল অপারেটর যার যুক্তিটি পাইথন ফাংশন সেই টিউপলগুলিকে চিহ্নিত করে যেখানে শেষ ক্ষেত্রটি/বিন/ব্যাশ।

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

মার্সেল শেলের স্ক্রিপ্টিং

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

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

from marcel.api import *

for ext, size in (ls(file=True, recursive=True)
                  | map(lambda f: (f.suffix, f.size))
                  | red('.', '+')):
    print(f'{ext}: {size})

শেল কমান্ডগুলি সিনট্যাকটিক কনভেনশন বাদে আগের মতোই রয়েছে। সুতরাং ls -fr ls এ পরিণত হয় (ফাইল = সত্য, পুনরাবৃত্ত = সত্য)। মানচিত্র এবং লাল অপারেটরগুলি শেল সংস্করণের মতো পাইপগুলির সাথে সংযুক্ত রয়েছে। পুরো শেল কমান্ড (ls… red) একটি পাইথন পুনরুক্তি দেয় যাতে কমান্ডটি লুপের জন্য পাইথনের সাথে ব্যবহার করতে পারে।

মার্সেল শেলের সাথে ডেটাবেস অ্যাক্সেস

আপনি মার্সেল পাইপলাইন দিয়ে ডাটাবেস অ্যাক্সেস একীভূত করতে পারেন। প্রথমত, আপনাকে কনফিগার ফাইলটিতে ডাটাবেস অ্যাক্সেস কনফিগার করতে হবে, ।/.Marcel.py , যেমন।

define_db(name='jao',
          driver='psycopg2',
          dbname='acme',
          user='jao')

DB_DEFAULT = 'jao'

এটি সাইকোপজি ২ ড্রাইভার ব্যবহার করে অ্যাকমে নামের পোস্টগ্রিস ডাটাবেসে অ্যাক্সেস কনফিগার করে। মার্সেল থেকে সংযোগগুলি জাও ব্যবহারকারী ব্যবহার করে তৈরি করা হবে এবং ডাটাবেস প্রোফাইলটির নাম জাও করা হবে। (ডিবি_ডিএফএএলএফ কোনও প্রোফাইল সুনির্দিষ্ট না করা হলে জাও ডাটাবেস প্রোফাইলটিকে ব্যবহারযোগ্য হিসাবে নির্দিষ্ট করে)

sql 'select part_name, quantity from part where quantity < 10' \
| out --csv –-file ~/reorder.csv

এই কমান্ডটি অংশ নামের একটি সারণীটি অনুসন্ধান করে এবং ক্যোয়ারী ফলাফলকে সিএসভি ফর্ম্যাটে re/reorder.csv ফাইলের মধ্যে ফেলে দেয়।

মার্সেল শেলের সাথে রিমোট অ্যাক্সেস

একইভাবে ডাটাবেস অ্যাক্সেসের ক্ষেত্রে, রিমোট অ্যাক্সেস ।/.Marcel.py এ কনফিগার করা যেতে পারে। উদাহরণস্বরূপ, এটি একটি 4-নোড ক্লাস্টারটি কনফিগার করে:

define_remote(name='lab',
              user='frankenstein',
              identity='/home/frankenstein/.ssh/id_rsa',
              host=['10.0.0.100', 
                    '10.0.0.101',
                    '10.0.0.102',
                    '10.0.0.103'])

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

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

@lab [ps | map (proc: (proc.pid, proc.commandline))]

এটি (আইপি ঠিকানা, পিআইডি, কমান্ড লাইন) টিপলসের একটি স্ট্রিম প্রদান করে।

আরো তথ্যের জন্য, যান:

  • https://www.marceltheshell.org/
  • https://github.com/geophile/marcel

মার্সেল বেশ নতুন এবং সক্রিয় বিকাশের অধীনে। আপনি যদি সহায়তা করতে চান তবে যোগাযোগ করুন।