যখন আপনার কাছে থাকা সমস্ত সিরিয়াল কনসোল রয়েছে তখন হোস্টের কাছে কীভাবে ফাইল পাবেন?


21

আপনার সমস্ত কিছু যখন সিরিয়াল কনসোল হয় (টার্মিনালের মাধ্যমে টার্মিনাল সার্ভারের মাধ্যমে বলুন), হোস্টের / বাইরে ফাইল স্থানান্তর করতে কোন পদ্ধতি ব্যবহার করা যেতে পারে?

ছোট / মুদ্রণযোগ্য স্টাফগুলির জন্য কাটা / পেস্ট কাজ করে এবং আমি ইউউনকোড / ইউডিকোডের (জিজিপ সহ) সংমিশ্রণ নিয়ে খালি মুদ্রণযন্ত্র পরিচালনা করি তবে এটি সবই খুব সীমিত।


ইউটিলিটির প্রাপ্যতা সম্পর্কে আপনি যে মতামত রেখে গেছেন সেগুলি দেওয়া, আপনি যদি প্ল্যাটফর্মটির নাম রাখতে পারেন এবং / অথবা আপনার যে পরিবেশটি রয়েছেন তার রূপরেখা জানাতে সাহায্য করবে Otherwise নইলে আপনি স্টকটি কেরিমিট / এক্সএমডেম / ওয়াইএমডেম / পেতে যাচ্ছেন টার্মিনাল উত্তরের মাধ্যমে জেডএমডেমেক ...
অ্যাভেরি পেইন

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

মাত্র 5 বছর দেরী,: পি এখন আপনি আমার উত্তরটি গ্রহণ করতে পারেন, কারণ এটি যা আপনি চেয়েছিলেন ঠিক তেমনই ছিল .... তবে সম্ভবত আজকের প্রয়োজন নেই।
জেএম বেকার 2

উত্তর:


13

সিরিয়াল কনসোল প্রোগ্রামগুলি - আপনি সংযোগের অন্য প্রান্তে ব্যবহার করবেন রিমোট সাইডে ফাইল প্রেরণের কিছু উপায় থাকবে। আপনি কীভাবে এটি সম্পর্কে যাচ্ছেন তা নির্ভর করে আপনার রিমোট সিস্টেমে কী সংস্থান রয়েছে on

আমার কাছে আছে lrzszবা kermitরিমোট সাইডে

সবচেয়ে সহজ কেসটি যদি আপনার কাছে দূরবর্তী দিকে যেমন শক্ত বাইনারি ফাইল স্থানান্তর প্রোগ্রাম ইনস্টল করা থাকে lrzszবা kermit। এটি আজকের চেয়ে একসময় বেশি সাধারণ ছিল, তবে আপনার নির্দিষ্ট সিস্টেমে এখনও এর মধ্যে একটি থাকতে পারে।

আপনি স্থানীয় দিকে যে সিরিয়াল কনসোল প্রোগ্রামটি ব্যবহার করছেন সেটি অবশ্যই জেমোডেম বা কেরমিট আপলোড করার একটি উপায় রয়েছে যা আপনাকে যা যা প্রয়োজন সরাসরি পাঠাতে দেয়।

জেমোডেমের ক্ষেত্রে, কেবল rzরিমোট সিস্টেমে টাইপ করুন , এটি একটি বিশেষ স্ট্রিং প্রেরণ করে যা স্থানীয় সিরিয়াল টার্মিনালটি বুঝতে হবে, যার ফলে এটি ফাইল চয়নকারী ডায়ালগটিকে পপ আপ করে।

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

আমার কাছে বাইনারি ফাইল স্থানান্তর প্রোগ্রাম নেই, তবে আমার কাছে uuencode/base64

মত একটি সঠিক বাইনারি ফাইল ট্রান্সফার প্রোগ্রাম ব্যবহার করার জন্য বেশ কিছু সুবিধা আছে lrzszবা kermit: দক্ষতা, checksumming, স্বয়ংক্রিয় চেষ্টার, বন্ধ্যা স্থানান্তর পুনরারম্ভ, একাধিক ফাইল ট্রান্সফার ইত্যাদি, কিন্তু এই হয় বিলাসিতার । আপনার যদি কেবল একটি ফাইল প্রেরণ করতে হয় বা আপনি ফাইল খুব কমই পাঠাচ্ছেন তবে আপনি এএসসিআইআই আপলোডগুলি নিয়ে দূরে যেতে পারেন।

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

আপনি স্থানীয় দিকে ASCII এর নিরাপদ সাবসেটে বাইনারি ডেটা এনকোড করে এটিকে ঘুরে দেখেন, তারপরে এটিকে রিমোট পাশের কাঁচা বাইনারি ডেটাতে ফিরিয়ে আনুন। এটি uuencodeএবং base64প্রোগ্রামগুলি কেবলমাত্র অল্প বয়সী অ্যালগরিদম পছন্দগুলিতে পৃথক হয়।

স্থানীয় সিস্টেমে, আপনি ফাইলটি এনকোড করেছেন: ²

$ uuencode -o sbf.uue some-binary-file.gz some-binary-file.gz

তারপরে আপনি রিমোট সিস্টেমে এই কমান্ডটি টাইপ করুন এবং স্থানীয় সিরিয়াল কনসোলের "এএসসিআইআই আপলোড" বৈশিষ্ট্যটি ব্যবহার করে ফাইলটি প্রেরণ করুন:

$ cat | uudecode

ফাইল আপলোড শেষ হয়ে গেলে, Ctrl-Cবাইরে বেরোনোর জন্য চাপুন cat। আপনি যেমন চাইছিলেন তেমনই এখন রিমোট সিস্টেমে আপনার ডিকোড ফাইল রয়েছে।

তবে আমার কাছে পাঠানোর মতো অনেকগুলি ফাইল রয়েছে এবং প্রিন্টযোগ্য এএসসিআইআই ট্রান্সকোডিং একটি ব্যথা!

নিজেকে উচ্চ স্তরের প্রযুক্তির বুটস্ট্র্যাপ করা শক্ত নয়। যদি রিমোট সিস্টেমে সি সংকলক থাকে তবে আপনি রিমোট সিস্টেমকে lrzszউত্স কোডের একটি অনুলিপি প্রেরণ করতে পূর্বের কৌশলটি ব্যবহার করতে পারেন । স্থানীয় দিকে:

$ uuencode -o lrzsz.tgz.uue lrzsz-0.12.20.tar.gz lrzsz-0.12.20.tar.gz

তারপরে রিমোট সিস্টেমে সিরিয়াল কনসোল প্রোগ্রামের মাধ্যমে এটি টাইপ করুন:

$ cat | uudecode
^C
$ tar xvf lrzsz-0.12.20.tar.gz
...build lrzsz normally

আপনি প্রথম কমান্ডটি শুরু করার পরে, lrzsz.tgz.uueদূরবর্তী সিস্টেমে ফাইলটির একটি "ASCII আপলোড" করুন। পাইপলাইন ইউইনকোডড ডেটা গ্রহণ করে এবং এটি আপনার জন্য একটি বাইনারি টারবালকে ডিকোড করে, যা আপনি আনপ্যাক এবং তৈরি করতে পারেন।

তবে রিমোট সিস্টেমে আমার কাছে সি কম্পাইলার নেই

আপনি এমনকি দূরবর্তী সিস্টেমে একটি কম্পাইলার না থাকে তাহলে, আপনি পারেন ক্রস-কম্পাইলrz স্থানীয় সিস্টেমে (অথবা যাই হোক না কেন) প্রোগ্রাম এবং উপরোক্ত কৌশল ব্যবহার করে দূরবর্তী সিস্টেমে পাঠিয়ে দিন।


পাদটিকা:

  1. মিনিকম , picocom , পুটিং , ভানডায়্ক সিআরটি ...

  2. আপনাকে এই সংস্করণে uuencodeদুবার ইনপুট ফাইলের নাম দিতে হবে , একবার ইনপুট ডেটার উত্সের নাম দিতে হবে এবং আবার কোনও ডায়াগোডকে কোনও আউটপুট ফাইলে ডিকোড করার সময় দূরবর্তী সিস্টেমটি ফাইলটি কী কল করা উচিত তা ঘোষণা করতে হবে। দূরবর্তী সিস্টেমটির আউটপুট ফাইলটির আলাদা নাম থাকতে পারে তা আপনি বুঝতে পারবেন ably

    আপনার স্থানীয় সংস্করণটি uuencodeআলাদা আচরণ করতে পারে।


কল্পনাপ্রসূত, আমি আশা করছিলাম এই প্রশ্নের একটি উত্তর পেয়েছিল কেরমিট! +1;)
টিম

এটি ভাল উত্তর, আমি তাদের "তবে আমার কাছে নেই" বিভাগটি পছন্দ করে। দুর্ভাগ্যক্রমে, এটি বেশ পপ স্টাফ এ থামে এবং সত্যই গভীর হয় না। কেবলমাত্র ASCII কোডের কাউকেই থেকে আলাদা আর্কিটেকচারের জন্য বাইনারি এক্সিকিউটেবল ফাইল তৈরি করা হচ্ছে? : এখানে বুটস্ট্র্যাপ জন্য retrocomputing.stackexchange.com/questions/4672/...
pfalcon

5

মূলত আপনাকে সিরিয়াল টিটিআইয়ের মাধ্যমে স্থানান্তর করতে প্রাক-ইন্টারনেট পদ্ধতি ব্যবহার করতে হবে এবং অন্যদিকে স্থানান্তরটি গ্রহণ করার জন্য আপনার অবশ্যই একটি উপায় থাকতে হবে। স্পষ্টতই এটি করার সর্বোত্তম উপায় হ'ল জেডএমডেম ব্যবহার করা, যার অর্থ আপনার কাছে szইতিমধ্যে প্রাপ্তির শেষের মতো একটি সরঞ্জাম থাকা দরকার । তবে এটি সর্বদা সম্ভব হয় না, উদাহরণস্বরূপ, যখন প্রাপ্তি লক্ষ্যটি কোনও নেটওয়ার্ক ছাড়াই রাউটার হয়।

এই স্থানান্তরটি করার একমাত্র সম্ভাব্য উপায়টি প্রাক-8-বিট পরিষ্কার শৈলীতে টার্মিনাল নিরাপদ ASCII ব্যবহার করে সরাসরি চ্যানেলের মাধ্যমে। আমি আরও আধুনিক সরঞ্জাম ব্যবহার করতে যাচ্ছি, আমি আশা করি বেশিরভাগ সিস্টেমে ইনস্টল করা আছে।

প্রেরকের:

প্রথমে আমরা আমাদের ফাইলটি এনকোড করি

base64 file.tar.gz > file.tar.gz.b64

এখন আপনার কম সেন্ড-ফাইল কমান্ডটি নিশ্চিত করুন ascii-xfr, এটি আমার সংযোগ কমান্ড লাইন ছিল

picocom -f n -p n -d 8 -b 115200  --send-cmd "ascii-xfr -snv" /dev/ttyS0

সাধারণত আমরা ascii-xfrগ্রহণের পক্ষে চাই, তবে যেহেতু আমাদের এটি নেই, এটি -nসঠিক লাইন শেষ বজায় রেখে এটিকে ঘিরে কাজ করে।

রিসিভার:

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

cd /tmp/
cat > file.tar.gz.b64

পিকোম এ, আমি স্রেফ CTRL + a + s করি এবং আমি যে ফাইলটি পাঠাচ্ছি তার পুরো পথটি প্রবেশ করান। ট্রান্সফারটি শেষ হয়ে গেলে আপনার এটি বন্ধ করতে CTRL + c করতে হবে cat

এখন আমরা ফাইলটি ডিকোড করি,

base64 -d file.tar.gz.b64 > file.tar.gz

আপনি যে ফাইলটি প্রেরণ করেছেন তা সেই ফাইলটি যাচাই করতে আপনি যা যা করতে পারেন যা করুন, কারণ একটি ASCII স্থানান্তরটির কোনও চেকসাম সুরক্ষা নেই। আমার গ্রহণের বাক্সটি ছিল sha512sum, তবে যে কোনও চেকসাম কমান্ডই যথেষ্ট। একবার আপনি ম্যানুয়ালি অঙ্কের মিলটি নিশ্চিত করলে, আপনি অনুমান করতে পারেন স্থানান্তরটি সফল হয়েছিল!


(এবং দু'বছর পরে ...) আমার অভিজ্ঞতায় ফাইলগুলি হস্তান্তর করতে হয়েছে এমন সিস্টেমগুলিতে যেগুলি লাইন শেষ করে দেয় (ধন্যবাদ মাইক্রোসফ্ট!), বেস 64 এনকোডিং / ডিকোডিং লাইনের শেষ শৈলীর যত্ন করে না। \r\nবা পথ \nউভয়ই "স্থির" হয়ে গেলেও কেবল কাজ করে। আমি যদি অফ বেসন্ড স্ট্যান্ডার্ড বা কেবলমাত্র আমি যে সরঞ্জামগুলি ব্যবহার করি সেগুলি মনে করি না তবে আমি সন্দেহ করি এটি আসলে স্ট্যান্ডার্ড আচরণ।
অ্যান্ড্রু হেনেল

5

হতে পারে আপনি দিতে হবে মিনিকম ব্যবহার করে দেখুন।


এর জন্য সোর্স হোস্টে 'sx' বা 'sz' এর মতো কিছু দরকার নেই?
স্টিফেন পল লেসনিউস্কি

4
না, মিনিকোম নিজস্ব ফাইলের এক্সফারগুলি পরিচালনা করে। sx, sy, sz এবং rx, ry, rz পৃথক প্রোগ্রাম যা সাধারণত প্যাকেজগুলিতে যথাযথভাবে lszrz বা কিছু নামে পরিচিত থাকে। যদিও আমি sz এবং rz ব্যবহার করার পরামর্শ দেব। ছোট, সহজ এবং এটি যা করে তা করে। মিনিকোম একটি সম্পূর্ণ টার্মিনাল এমুলেটর।
পুনরায়

4
এই উত্তরটি সঠিক নয়। ফাইল ট্রান্সফারের জন্য মিনিকোম lrzsz স্প্যান করে। মিনিকোম এটি নিজস্ব ফাইল স্থানান্তর করতে পারে না এবং পরিচালনা করতে পারে না।
জোনাথন ক্লাইন আইইইইই

5

আপনার যদি সমস্ত কিছু সিরিয়াল কনসোল হয় তবে এটি কাজ করবে কিনা তা জানেন না, তবে আপনার যদি মোটামুটি নেটওয়ার্ক অ্যাক্সেস থাকে তবে আপনি nc(1)টিসিপি / আইপি ব্যবহার করে ফাইলগুলি অনুলিপি করতে ব্যবহার করতে পারেন ।

# WARNING: Depending on your setup, this could make your system unbootable
root@destination-box.local # nc -l 8675 | dd of=/dev/sdXXX
root@source-box.local # dd if=/dev/sdYYY | nc destination-box.local 8675

উপরের উদাহরণে, আমি sdbYYYউত্স বাক্স থেকে sdaXXXগন্তব্য বাক্সে ক্লোন করেছি । টিসিপি পোর্ট নম্বরের জন্য আমার পছন্দ 8675 ছিল নির্বিচারে; আপনার অ্যাক্সেস থাকা কোনও বন্দর ব্যবহার করতে পারেন। এবং এটি একটি ডিভাইস হতে হবে না; এটি যে কোনও ফাইল হতে পারে।

kevin@destination-box.local $ nc -l 12345 >> ~/.ssh/authorized_keys
kevin@source-box.local $ cat ~/.ssh/id_rsa.pub | nc destination-box.local 12345

দ্বিতীয় উদাহরণে, আমি আমার আরএসএ পাবলিক কী ( ~/.ssh/id_rsa.pub) অনুলিপি করে লক্ষ্য হোস্টের জন্য অনুমোদিত কী ফাইলগুলিতে যুক্ত করেছি।


5
আমি আপনার প্রথম ধারণার উপরে একটি বড় লাল সতর্কতা চিহ্ন প্রস্তাব করতে পারেন? শিখতে হৃদয়ের সাথে কিছু নিঃসঙ্গ আত্মা অবশ্যই নীচের অনুচ্ছেদটি না পড়ে কেবল ফাইলগুলি অনুলিপি করার আশায় এরকম কিছু
সম্পাদন করতে পারে

2

আমি ব্যবহার করেন Kermit , filetransfer প্রোগ্রামের পিতামহ। লিনাক্স থাকার অনেক আগেই আমরা এটি ব্যবহার করেছি।


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