Ssh এর চেয়ে আলাদা কীভাবে?


175

কেবল মেশিন জুড়েই আমি কীভাবে ফাইল / ফোল্ডারগুলি পৃথক করতে পারি যে কেবলমাত্র সংযোগ উপলব্ধ রয়েছে?


8
# 16661 তে তুলনামূলকভাবে অনুরূপ প্রশ্ন রয়েছে : আমি দুটি রেডহ্যাট লিনাক্স সার্ভারকে কীভাবে আলাদা করতে পারি? । ক্লিকগুলি সংরক্ষণ করার জন্য সেখানে উত্তরটি রয়েছে rsync -ani --delete / root@remotehost:/তবে পুরো উত্তরটি আরও বিশদ দেয়।
ওভেন ব্ল্যাকার

এখানে অনেক উত্তর, কিন্তু কোন পদ্ধতির দ্রুত হয়?
pl1nk

উত্তর:


150

আপনি এটি বাশের প্রক্রিয়া বিকল্পের সাথে করতে পারেন :

 diff foo <(ssh myServer 'cat foo')

অথবা, যদি উভয়ই দূরবর্তী সার্ভারে থাকে:

diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')

12
হ্যাঁ,
এটির

ডিরেক্টরিগুলির জন্য কীভাবে আপনি বোঝাতে চান, সর্বদা বিড়ালকে ls এর সাথে প্রতিস্থাপন করতে পারে
কাইল ব্র্যান্ড্ট ২

27
আমি সন্দেহ করি যে 'ডিরেক্টরিগুলির জন্য' অর্থ পুনরাবৃত্তির পার্থক্য করা
ইয়ান ক্লেল্যান্ড Cleগস্ট

9
আমি দেখতে পেয়েছি যে আমার দূরবর্তী হোস্টের পাসওয়ার্ডের প্রয়োজন হলে এই কৌশলটি আমার পক্ষে কাজ করে না। পাসওয়ার্ড প্রম্পটটি পুনঃনির্দেশের সাথে ভালভাবে কাজ করছে বলে মনে হয় না এবং সফলভাবে শেষ করা যায়নি। আপনি যদি ssh কী ব্যবহার করেন তবে এটি কোনও সমস্যা হবে না।
অ্যাডাম ফ্রাঙ্কো

2
এটি অনেক সমস্যার একটি দুর্দান্ত সাধারণ সমাধান। 'ক্যাট foo' এর পরিবর্তে আপনি 'Find / foo / bar -type f | ব্যবহার করতে পারেন ফাইল পড়ার সময়; ইকো করুন "**** $ ফাইল"; বিড়াল "$ ফাইল"; সম্পন্ন হয়েছে 'এবং আপনার কাছে ফাইলের নাম এবং ফাইলের বিষয়বস্তুর ভিন্নতা থাকতে হবে।
পল গিয়ার

106

অবশেষে আমি দুর্দান্ত সমাধান পেয়েছি: ভিমডিফ

vimdiff /path/to/file scp://remotehost//path/to/file

ধন্যবাদ http://linux.spiney.org/remote_diff_with_vim_and_ssh দেখতে http://www.vim.org/scripts/script.php?script_id=1075


7
ডিরেক্টরি সম্পর্কে কি? :)
পার্ল্নিকা

1
এখানে একটি উদাহরণ রয়েছে: ভিমিডিফ .বাশ_প্রোফাইল স্কিপ: //vaibbc@10.217.212.97//home/vaibabc/.Bash_profile
ভাইচিদ্রেওয়ার

4
গুরুত্বপূর্ণ //পরে 2 স্ল্যাশ remotehost। একক স্ল্যাশ কাজ করবে না
লি চি কিম

2
আপনার যদি আপনার বর্তমান হোস্টের তুলনায় দূরবর্তী হোস্টে আলাদা আলাদা ব্যবহারকারীর নাম থাকে তবে আপনি ব্যবহার করতে পারেনvimdiff /path/to/file scp://username@remotehost//path/to/file
জ্যারেডিস

আপনি কীভাবে id_rsa কী ফাইলগুলি @ জারেডিসি সহ দুটি দূরবর্তী হোস্টের সাথে এটি করতে পারেন?
মানাটেক্স

61

আপনি যদি আসল ফাইলগুলির চেয়ে পৃথক না হয়ে কেবল ফাইলগুলি দেখতে চান তবে আপনি ব্যবহার করতে পারেন rsync --dry-run


10
rsync -n হ'ল সংক্ষিপ্ত সংস্করণ।
ভলনি

দুর্দান্ত - আপনার যদি অন্য কোনও বন্দর ব্যবহার করার প্রয়োজন হয় তবে rsync -e "ssh -p 2222" <এসআরসি> <ডিএসটি>
সামোথ

16

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

ssh [login]@[host] "cat [remote file]" | diff - "[local file]"

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

@ স্টিভ ডিকিনসন - "এটি মেকফিলের অভ্যন্তরে কাজ করে" বলতে কী বোঝ?
মার্টিন ভেজিটার

1
আপনি যদি আমার মতো ভিম অ্যালার্জিতে ভুগছেন তবে এটিও একটি দুর্দান্ত সমাধান। :) আমি একটি বাশ স্ক্রিপ্ট তৈরি করেছি যা একই ফাইলটিকে দুটি ভিন্ন হোস্টের সাথে তুলনা করে, মেশিনগুলির মধ্যে পরিষেবাগুলি স্থানান্তর করার সময় এবং কনফিগার ফাইলগুলির তুলনা করার সময় দরকারী। Gist.github.com/jhqv/dbd59f5838ae8c83f736bfe951bd80ff
জেনেক

10

একটি সাধারণ মেশিনে ফাইল আনার জন্য scp ব্যবহার করবেন এবং সেগুলি সেখানে আলাদা করুন?

অথবা, যদি আপনি শুধু জানতে যদি ফাইল প্রাপ্ত করতে ইচ্ছুক হয় বিভিন্ন বা না, তাদের প্রতিটি মেশিনের উপর একাধিক md5sum সঙ্গে হ্যাশ।

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


2
ফাইলগুলি পৃথক কিনা তা দেখার একটি সহজ উপায় rsync --dry-run
জেরাল্ড কম্বস

আমি এসএসএইচএসএসের কথা ভুলে গিয়েছিলাম। এটি আমার জন্য দুর্দান্ত কাজ করেছে ...
আর্ড করুন

7

আপনার সিস্টেমে যদি এটি সম্ভব হয় তবে একটি উপায় হ'ল কেবল sshfs সহ দূরবর্তী ফাইল সিস্টেমটি মাউন্ট করা ।


ডিফ সাধারণত হ'ল এক শট ক্রিয়া, কনফিগার পার্থক্য যাচাই করতে পছন্দ করে। প্রতিবার ফাইল-সিস্টেম মাউন্ট করা সম্ভব, তবে বিশ্বাসযোগ্য নয়। আমি ভাল ভাল এবং scp চাই।
আলেক্সি টিমানভস্কি

3

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

তার জন্য, rvncবিকল্পগুলি ব্যবহার করুন ( r= পুনরাবৃত্ত, v= ভার্বোস, n= শুকনো রান, c= চেকসাম)। সঙ্গে rsyncখিঁচ মোড (মধ্যে rsync [OPTION...] [USER@]HOST:SRC... [DEST]), একটি উদাহরণ রয়েছে:

rsync -rvnc root@182.18.158.207:/var/www/html/dev/ .

মনে রাখবেন , স্থানীয় বা দূরবর্তী ফাইলটি আরও নতুন কিনা তা কোনও তথ্য সরবরাহ করে না। শুধু যদি তারা ভিন্ন হয়।


2
  • আপনার স্থানীয় মেশিনে, আপনি যে ডিরেক্টরিটি পৃথক করতে চান তার একটি পুনরাবৃত্ত কপি তৈরি করুন। এই ক্ষেত্রে:

    cp -R dir replica
    
  • স্থানীয় অনুলিপি থেকে রিমোট ডিরেক্টরিটি প্রতিলিপি করতে rsync ব্যবহার করুন:

     rsync remote:/path/to/dir replica
    
  • স্থানীয় ডিরেক্টরি এবং দূরবর্তী একের স্থানীয় প্রতিরূপের মধ্যে পার্থক্য জানতে ডিফ ব্যবহার করুন:

    diff dir replica
    

2

আপনার যদি sshfs থাকে এবং ডিরেক্টরিতে আলাদা করতে হয়:

mkdir remote_path
sshfs user@host:/path/ remote_path
diff -r path remote_path

1

এখানে আমি এটি কীভাবে করেছি।

আমি রিমোট সার্ভারে এসএফটিপি ব্যবহার করেছি এবং অনুরোধ করা হলে আমার ব্যবহারকারীর নাম / পিডাব্লুডি প্রবেশ করিয়েছি। তারপরে আমি আমার হোম ডিরেক্টরিতে .gvfs dir তৈরি করা দিরটি ভিন্ন কমান্ডটিতে ব্যবহার করেছি।

ডিফ / বার / বাস / ব্যবহারকারী ডির / .gvfs / এসএফটিপি \ উপর reen freenas.local / দির / dir1 / স্থানীয় dir / dir2 পাথ


1

এটি এমন একটি স্ক্রিপ্ট যা স্থানীয় ফোল্ডার এবং দূরবর্তী ফোল্ডারটিকে পৃথক করতে সহায়তা করতে পারে .:

 #!/bin/bash

 LOCALFOLDER=/var/www/tee
 REMOTEFOLDER=$(ssh root@111.111.111.1 'ls -lA /hfs/tee'| grep -E '^total' | cut -d " " -f 2 > remotessh.txt)
 COMMAND=$(ls -lA $LOCALFOLDER | grep -E '^total' | cut -d " " -f 2 > localssh.txt)
 REM=$(cat remotessh.txt)
 LOCAL=$(cat localssh.txt)

 echo $LOCAL
 echo $REM

 if [ $REM -eq $LOCAL ]
 then
      echo Directories are the same
 else
      echo Directories are differnt
 fi

 #diff localssh.txt remotessh.txt | grep -E '^total' | cut -d " " -f 2


1

Sshf জুড়ে মাউন্ট করা sshfs ব্যবহার করুন। এটি এত দ্রুত হবে না, তবে আপনি আপনার সম্পূর্ণ স্যুটগুলি এমন সরঞ্জামগুলি ব্যবহার করতে পারেন যা স্থানীয় ফাইল সিস্টেমে সমস্ত কিছু প্রত্যাশা করে। একটি বিকল্প হ'ল "ssh -w" (বা অন্যান্য যোগাযোগ যেখানে ssh সীমাবদ্ধতা নয়) দিয়ে তৈরি একটি টানেলের উপরে এনএফএস।


1

আপনি সম্ভবত আপনার ~ / .bashrc এ বাশ ফাংশন তৈরি করে পদ্ধতির সাধারণকরণের চেষ্টা করতে পারেন:

myrdiff() { ssh root@"$1" cat "$2" | diff -s - "$2" ; }

তারপরে এটিকে একটি নির্মাণের সাথে অনুরোধ করুন:

myrdiff vm20-x86-64 /etc/gdm/Init/Default

-S এর সাথে পৃথককে অনুরোধ করে, ফাইলগুলি অভিন্ন হলে এটি প্রতিবেদন করবে।

চিয়ার্স! জিম

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