ค้นหาเว็บไซต์

วิธีถ่ายโอนไฟล์ระหว่างคอมพิวเตอร์สองเครื่องโดยใช้คำสั่ง nc และ pv


สวัสดีผู้อ่าน Linux ทุกท่าน ฉันขอนำเสนอบทความดีๆ อีกบทความจากชุดเคล็ดลับและเทคนิค Linux ของเรา คราวนี้เราจะใช้ยูทิลิตี้ Linux ที่ไม่ค่อยมีใครรู้จักสองตัวที่คุณควรรู้

บทความนี้จะอธิบายวิธีการถ่ายโอนไฟล์ระหว่างคอมพิวเตอร์ Linux สองเครื่องโดยใช้ nc (ยูทิลิตี้เครือข่าย) และ pv (pipe viewer คำสั่ง) ก่อนที่จะดำเนินการต่อ ให้ฉันอธิบายว่าสองคำสั่งนี้คืออะไร

nc ย่อมาจาก Netcat และมักชี้ให้เห็นว่า “มีด Swiss Army” เป็นเครื่องมือเครือข่ายที่ใช้สำหรับการดีบักเครือข่ายและการตรวจสอบ และยังใช้อีกด้วย สำหรับการสร้างการเชื่อมต่อเครือข่ายโดยใช้ TCP หรือ UDP, การสแกนพอร์ต, การถ่ายโอนไฟล์ และอื่นๆ มันถูกสร้างขึ้นเพื่อเป็นแบ็คเอนด์ที่เชื่อถือได้และใช้เป็นพิเศษในโปรแกรมและสคริปต์ เนื่องจากสามารถสร้างการเชื่อมต่อเครือข่ายได้เกือบทุกประเภทและมีคุณสมบัติในตัวจำนวนหนึ่ง

pv โดยย่อ Pipe Viewer เป็นเครื่องมือที่ใช้เทอร์มินัลสำหรับตรวจสอบความคืบหน้าของข้อมูลที่ส่งผ่านไปป์ไลน์ ซึ่งช่วยให้ผู้ใช้สามารถดูความคืบหน้าของข้อมูลด้วยแถบความคืบหน้า แสดงเวลาที่ผ่านไป เปอร์เซ็นต์ที่เสร็จสมบูรณ์ ปริมาณงานปัจจุบัน อัตรา ข้อมูลทั้งหมดที่ถ่ายโอน และเวลาโดยประมาณในการดำเนินการให้เสร็จสิ้น

วิธีตรวจสอบความคืบหน้าของข้อมูลโดยใช้คำสั่ง pv (Pipe Viewer)

ตอนนี้เรามาดูกันดีกว่าว่าเราจะรวมทั้งสองคำสั่งเพื่อถ่ายโอนไฟล์ระหว่างคอมพิวเตอร์ Linux สองเครื่องได้อย่างไร เพื่อจุดประสงค์ของบทความนี้ เราจะใช้เครื่อง Linux สองเครื่องดังนี้:

Machine A with IP : 192.168.0.4
Machine B with IP : 192.168.0.7

หมายเหตุ: ฉันขอแนะนำอย่างยิ่งว่าอย่าใช้ netcat เพื่อส่งและรับข้อมูลผ่านเครือข่ายสาธารณะ เนื่องจากไม่ได้ใช้การเข้าสู่ระบบหรือการตรวจสอบสิทธิ์ใดๆ ข้อกำหนดเพียงอย่างเดียวคือ IP ไคลเอ็นต์และหมายเลขพอร์ตการฟัง และข้อมูลที่ส่งผ่านเครือข่ายไม่ปลอดภัย ดังนั้นจึงสงวนไว้สำหรับผู้ใช้ Linux ขั้นสูงเสมอ และต้องการใช้บนเครือข่ายท้องถิ่นที่ได้รับการป้องกัน

สถานการณ์ที่ความปลอดภัยของข้อมูลมีความสำคัญมากกว่า ให้ใช้ rsync บน SSH หรือ scp บน SSH เสมอ

ตอนนี้เรามาเริ่มด้วยตัวอย่างง่ายๆ ของคำสั่ง nc และ pv แต่ก่อนที่จะทำเช่นนั้น ยูทิลิตี้ทั้งสองจะต้องติดตั้งบนระบบ ถ้าไม่ติดตั้งโดยใช้ตัวจัดการแพ็คเกจการแจกจ่ายที่เกี่ยวข้องของคุณ เครื่องมือตามที่แนะนำ:

yum install netcat pv        [On RedHat based systems]
dnf install netcat pv        [On Fedora 22+ versions]
apt-get install netcat pv    [On Debian and its derivatives]

จะถ่ายโอนไฟล์ระหว่างเครื่อง Linux สองเครื่องได้อย่างไร

สมมติว่าคุณต้องการส่งไฟล์ขนาดใหญ่หนึ่งไฟล์ชื่อ CentOS-7-x86_64-DVD-1503.iso จากคอมพิวเตอร์ A ไปยัง B ผ่านเครือข่าย ซึ่งเป็นวิธีที่รวดเร็วที่สุดในการบรรลุเป้าหมายนี้โดยใช้ nc ยูทิลิตี้เครือข่ายที่ใช้ในการส่งไฟล์ผ่านเครือข่าย TCP, pv เพื่อติดตามความคืบหน้าของข้อมูลและ tar ยูทิลิตี้ในการบีบอัดข้อมูลเพื่อปรับปรุงความเร็วในการถ่ายโอน

บนเครื่อง Linux A

ขั้นแรกให้เข้าสู่ระบบเครื่อง 'A' ด้วยที่อยู่ IP 192.168.0.4 และเรียกใช้คำสั่งต่อไปนี้

tar -zcf - CentOS-7-x86_64-DVD-1503.iso | pv | nc -l -p 5555 -q 5

ให้ฉันอธิบายตัวเลือกที่ใช้ในคำสั่งด้านบน:

  1. tar -zcf=tar เป็นโปรแกรมอรรถประโยชน์การเก็บถาวรเทปที่ใช้ในการบีบอัด/ไม่บีบอัดไฟล์เก็บถาวร และอาร์กิวเมนต์ -c จะสร้างไฟล์เก็บถาวร .tar ใหม่ -f ระบุประเภทของไฟล์เก็บถาวรและตัวกรอง -z เก็บถาวรผ่าน gzip
  2. CentOS-7-x86_64-DVD-1503.iso=ระบุชื่อไฟล์ที่จะส่งผ่านเครือข่าย อาจเป็นไฟล์หรือพาธไปยังไดเร็กทอรี
  3. pv=Pipe Viewer เพื่อติดตามความคืบหน้าของข้อมูล
  4. nc -l -p 5555 -q 5=เครื่องมือเครือข่ายที่ใช้สำหรับส่งและรับข้อมูลผ่าน TCP และอาร์กิวเมนต์ -l ใช้เพื่อฟังการเชื่อมต่อขาเข้า - p 555 ระบุพอร์ตต้นทางที่จะใช้และ -q 5 รอจำนวนวินาทีแล้วจึงออก

บนเครื่อง Linux B

ตอนนี้เข้าสู่ระบบเครื่อง 'B' ด้วยที่อยู่ IP 192.168.0.7 และเรียกใช้คำสั่งต่อไปนี้

nc 192.168.1.4 5555 | pv | tar -zxf -

เพียงเท่านี้ ไฟล์ก็จะถูกถ่ายโอนไปยังคอมพิวเตอร์ B และคุณจะสามารถดูว่าการดำเนินการดำเนินการได้รวดเร็วเพียงใด มีการใช้งาน nc ที่ยอดเยี่ยมอื่นๆ อีกมากมาย (ยังไม่ครอบคลุม แต่จะเขียนเกี่ยวกับมันเร็วๆ นี้) และคำสั่ง pv (เราได้กล่าวถึงบทความโดยละเอียดเกี่ยวกับเรื่องนี้แล้ว ที่นี่) หากคุณทราบตัวอย่างใด ๆ โปรดแจ้งให้เราทราบผ่านความคิดเห็น!