ลองดูfile
จากfile -k
นั้นdos2unix -ih
file
มักจะเพียงพอ แต่สำหรับกรณีที่ยากลองหรือfile -k
dosunix -ih
รายละเอียดด้านล่าง
ลอง file -k
เวอร์ชั่นสั้น: file -k somefile.txt
จะบอกคุณ
- มันจะออกมา
with CRLF line endings
สำหรับการสิ้นสุดบรรทัด DOS / Windows
- มันจะแสดงผล
with LF line endings
สำหรับการสิ้นสุดสาย MAC
- และสำหรับ Linux / Unix line "CR" มันก็จะแสดงผลออก
text
มา (ดังนั้นหากไม่ได้กล่าวถึงชนิดใด ๆ อย่างชัดเจนline endings
ก็หมายความว่า: "CR line endings" )
ลองดูรุ่นด้านล่าง
ตัวอย่างโลกแห่งความจริง: การเข้ารหัสใบรับรอง
บางครั้งฉันต้องตรวจสอบเรื่องนี้สำหรับไฟล์ใบรับรอง PEM
ปัญหาที่เกิดขึ้นเป็นประจำfile
คือ: บางครั้งก็พยายามที่จะฉลาดเกินไป / เจาะจงเกินไป
ลองทำแบบทดสอบเล็ก ๆ น้อย ๆ : ฉันมีไฟล์บางไฟล์ และหนึ่งในไฟล์เหล่านี้มีจุดสิ้นสุดบรรทัดที่แตกต่างกัน อันไหน?
(โดยวิธี: นี่คือสิ่งที่หนึ่งในไดเรกทอรี "งานใบรับรอง" โดยทั่วไปของฉันดูเหมือน)
ลองเป็นประจำfile
:
$ file -- *
0.example.end.cer: PEM certificate
0.example.end.key: PEM RSA private key
1.example.int.cer: PEM certificate
2.example.root.cer: PEM certificate
example.opensslconfig.ini: ASCII text
example.req: PEM certificate request
ฮะ. มันไม่ได้บอกจุดจบของฉัน และฉันรู้แล้วว่าไฟล์เหล่านั้นเป็นใบรับรอง ฉันไม่ต้องการ "ไฟล์" เพื่อบอกฉันว่า
คุณลองทำอะไรได้อีก
คุณอาจลองdos2unix
ใช้--info
สวิตช์แบบนี้:
$ dos2unix --info -- *
37 0 0 no_bom text 0.example.end.cer
0 27 0 no_bom text 0.example.end.key
0 28 0 no_bom text 1.example.int.cer
0 25 0 no_bom text 2.example.root.cer
0 35 0 no_bom text example.opensslconfig.ini
0 19 0 no_bom text example.req
ดังนั้นนั่นบอกคุณว่า: yup, "0.example.end.cer" ต้องเป็นคนแปลก ๆ แต่มีการสิ้นสุดบรรทัดชนิดใด อย่าให้คุณรู้ว่ารูปแบบการออก dos2unix ด้วยหัวใจ? (ฉันไม่.)
แต่โชคดีที่มีตัวเลือก--keep-going
(หรือ-k
สั้น ๆ ) ในfile
:
$ file --keep-going -- *
0.example.end.cer: PEM certificate\012- , ASCII text, with CRLF line terminators\012- data
0.example.end.key: PEM RSA private key\012- , ASCII text\012- data
1.example.int.cer: PEM certificate\012- , ASCII text\012- data
2.example.root.cer: PEM certificate\012- , ASCII text\012- data
example.opensslconfig.ini: ASCII text\012- data
example.req: PEM certificate request\012- , ASCII text\012- data
ยอดเยี่ยม ตอนนี้เรารู้แล้วว่าไฟล์คี่ของเรามีCRLF
ตอนท้ายของDOS ( ) (และไฟล์อื่น ๆ มีLF
จุดสิ้นสุดบรรทัดUnix ( ) ซึ่งไม่ชัดเจนในเอาต์พุตนี้โดยปริยายมันเป็นเพียงวิธีที่file
คาดว่าไฟล์ข้อความ "ปกติ" จะเป็น)
(ถ้าคุณต้องการแบ่งปันช่วยในการจำของฉัน: "L" สำหรับ "Linux" และสำหรับ "LF")
ตอนนี้ลองเปลี่ยนผู้กระทำผิดและลองอีกครั้ง:
$ dos2unix -- 0.example.end.cer
$ file --keep-going -- *
0.example.end.cer: PEM certificate\012- , ASCII text\012- data
0.example.end.key: PEM RSA private key\012- , ASCII text\012- data
1.example.int.cer: PEM certificate\012- , ASCII text\012- data
2.example.root.cer: PEM certificate\012- , ASCII text\012- data
example.opensslconfig.ini: ASCII text\012- data
example.req: PEM certificate request\012- , ASCII text\012- data
ดี. ตอนนี้ certs ทั้งหมดมีจุดสิ้นสุดบรรทัด Unix
ลอง dos2unix -ih
ฉันไม่รู้สิ่งนี้เมื่อฉันเขียนตัวอย่างด้านบน แต่:
ที่จริงแล้วปรากฎว่า dos2unix จะให้บรรทัดส่วนหัวแก่คุณหากคุณใช้-ih
(ย่อมา--info=h
) เช่น:
$ dos2unix -ih -- *
DOS UNIX MAC BOM TXTBIN FILE
0 37 0 no_bom text 0.example.end.cer
0 27 0 no_bom text 0.example.end.key
0 28 0 no_bom text 1.example.int.cer
0 25 0 no_bom text 2.example.root.cer
0 35 0 no_bom text example.opensslconfig.ini
0 19 0 no_bom text example.req
และอีกช่วงเวลา "จริง": รูปแบบส่วนหัวนั้นง่ายต่อการจดจำ: นี่คือตัวช่วยจำสองรายการ:
- มันคือ DUMB (จากซ้ายไปขวา: d สำหรับ Dos, u สำหรับ Unix, m สำหรับ Mac, b สำหรับ BOM)
- และ: "DUM" เป็นเพียงการเรียงลำดับตัวอักษรของ D, U และ M
อ่านเพิ่มเติม
man less
.