ผลลัพธ์ที่แตกต่างกันสำหรับ ls เมื่อเข้าถึง Ubuntu ผ่าน SSH จากไคลเอนต์ต่าง ๆ (Windows-PuTTy, Mac-Terminal)


15

พิจารณาโครงสร้างไดเรกทอรีต่อไปนี้พิมพ์ไปที่หน้าจอโดยใช้ls -l "$dir"( $dirเป็นตัวแปรทุบตีสำหรับบางโฟลเดอร์บนเซิร์ฟเวอร์เดียวกันสองสามระดับขึ้นไป) บนเซิร์ฟเวอร์ Ubuntu ระยะไกล (แม่นยำยิ่งขึ้น Ubuntu 16.04.4 LTS (GNU / Linux 4.4) .0-116-generic x86_64)):

-rw-r--r-- 1 user group     12 Apr  2 12:34 FILE1
-rwxr--r-- 1 user group    287 Apr 23  2017 File_
-rw-r--r-- 1 user group      0 Apr 21  2017 file_1
-rw-r--r-- 1 user group    272 Apr  3 22:16 myFile
-rw-r--r-- 1 user group  47633 Apr 11 14:01 myFile.txt
-rw-r--r-- 1 user group  37030 Apr 11 14:16 myfile1
-rw-r--r-- 1 user group      0 Apr 11 21:23 nothing_here
-rw-r--r-- 1 user group      2 Apr 22  2017 small_file
-rwxr-x--- 1 user group 262529 Apr  8 15:31 story

สิ่งนี้มาจาก MacBook และการใช้เทอร์มินัลในตัวและการติดตั้งนอกเครื่องssh(OS X เวอร์ชั่น 10.13.3 ตามที่เทอร์มินัลบอกฉัน)

ในการเปรียบเทียบเซิร์ฟเวอร์เดียวกันที่เข้าถึงได้จากเครื่อง Windows ที่ใช้ PuTTy รีลีส 0.70:

-rwxr--r-- 1 user group    287 Apr 23  2017 File_
-rw-r--r-- 1 user group      0 Apr 21  2017 file_1
-rw-r--r-- 1 user group     12 Apr  2 12:34 FILE1
-rw-r--r-- 1 user group    272 Apr  3 22:16 myFile
-rw-r--r-- 1 user group  37030 Apr 11 14:16 myfile1
-rw-r--r-- 1 user group  47633 Apr 11 14:01 myFile.txt
-rw-r--r-- 1 user group      0 Apr 11 21:23 nothing_here
-rw-r--r-- 1 user group      2 Apr 22  2017 small_file
-rwxr-x--- 1 user group 262529 Apr  8 15:31 story

สังเกตเห็นการเรียงลำดับที่แตกต่างกันของ 6 ไฟล์แรกในแต่ละภาพ

เมื่อพิจารณาว่าคำสั่งกำลังทำงานบนเซิร์ฟเวอร์และไม่ได้อยู่ในคอมพิวเตอร์ไคลเอนต์จะไม่มีความแตกต่างระหว่างสองเอาต์พุต แล้วทำไมพวกเขาถึงไม่เหมือนกันล่ะ?

แก้ไข 1:ตามที่ระบุไว้ในความคิดเห็นที่ผมได้ตรวจสอบและ terminal แม็คมีการตั้งค่าxterm-256colorในขณะที่หนึ่งของ Windows xtermมีการตั้งค่า การเปลี่ยนแปลงอย่างรวดเร็วของการตั้งค่าของ Mac xtermไม่มีผล

แก้ไข 2:ตามที่ระบุไว้ในความคิดเห็นที่ฉันได้พยายามทำงานwhereis lsซึ่งจะช่วยให้สถานที่ที่เหมาะสมที่คุณคาดหวังที่จะหาls- bin/lsคือ

แก้ไข 3:ลบอิมเมจเทอร์มินัลแลกเป็นโค้ดที่จัดรูปแบบอย่างถูกต้องตามโพสต์เมตานี้

แก้ไข 4:เพิ่มเครื่องหมายคำพูด"$dir"เพื่อป้องกันปัญหาช่องว่าง


ls -l "$dir"โปรดอย่าลืมที่จะพูดตัวแปรของคุณดังนี้: หากไม่มีชื่อโฟลเดอร์จะต้องเว้นวรรคคุณจะได้ผลลัพธ์ที่ไร้สาระ
Paddy Landau

@PaddyLandau คุณพูดถูก แก้ไขแล้วว่า
t0mgs

คำตอบ:


30

เพื่อคัดแยกจะถูกกำหนดโดยตัวแปรสถานLC_ALL, LC_COLLATEและLANG(ในคำสั่งนี้เป็นครั้งแรกที่แข็งแกร่ง) เหล่านี้เป็นตัวแปรบางส่วนที่สามารถตั้งค่าได้โดยไคลเอ็นต์ ssh ตรวจสอบและเปรียบเทียบตัวแปรเหล่านี้ คุณอาจต้องการตั้งค่าเป็นค่าที่กำหนดอย่างดีบนเซิร์ฟเวอร์ (เช่นใน.bash_profile) หรือตรวจสอบให้แน่ใจว่าไคลเอ็นต์ ssh ของคุณตั้งค่าที่สอดคล้องกัน


4

สิ่งที่ใช้งานได้ในที่สุดคือส่วนย่อย "สถานที่หยุดส่งต่อจากลูกค้า" ในคำตอบนี้ เพียงแสดงความคิดเห็นออกSendEnv LANG LC_*บรรทัดภายใต้Hostในไฟล์ท้องถิ่น /etc/ssh/ssh_configคำอธิบายบางอย่างเกี่ยวกับสิ่งที่มันไม่สามารถพบได้ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.