Hãy thử file
sau file -k
đódos2unix -ih
file
thường sẽ là đủ Nhưng đối với trường hợp khó khăn hãy thử file -k
hoặc dosunix -ih
.
Chi tiết bên dưới.
Thử file -k
Phiên bản ngắn: file -k somefile.txt
sẽ cho bạn biết.
- Nó sẽ xuất ra
with CRLF line endings
cho kết thúc dòng DOS / Windows.
- Nó sẽ xuất ra
with LF line endings
cho kết thúc dòng MAC.
- Và đối với dòng Linux / Unix "CR", nó sẽ chỉ xuất ra
text
. (Vì vậy, nếu nó không đề cập rõ ràng bất kỳ loại nào line endings
thì điều này có nghĩa là: "kết thúc dòng CR" .)
Phiên bản dài xem bên dưới.
Ví dụ thế giới thực: Mã hóa chứng chỉ
Đôi khi tôi phải kiểm tra điều này cho các tệp chứng chỉ PEM.
Vấn đề thường gặp file
là: Đôi khi, nó cố tỏ ra quá thông minh / quá cụ thể.
Hãy thử làm một bài kiểm tra nhỏ: Tôi đã có một số tệp. Và một trong những tập tin này có kết thúc dòng khác nhau. Cái nào?
(Nhân tiện: đây là một trong những thư mục "công việc chứng chỉ" điển hình của tôi trông như thế nào.)
Hãy thử thường xuyên 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
Huh. Nó không cho tôi biết kết thúc dòng. Và tôi đã biết rằng đó là những tập tin cert. Tôi không cần "tập tin" để nói với tôi điều đó.
Bạn có thể thử cái gì khác?
Bạn có thể thử dos2unix
với công --info
tắc như thế này:
$ 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
Vì vậy, điều đó cho bạn biết rằng: yup, "0.example.end.cer" phải là người đàn ông kỳ quặc. Nhưng những loại kết thúc dòng là gì? Bạn có biết định dạng đầu ra dos2unix theo trái tim? (Tôi không.)
Nhưng may mắn thay, có tùy chọn --keep-going
(hoặc -k
viết tắt) trong 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
Thông minh! Bây giờ chúng tôi biết rằng tệp lẻ của chúng tôi có CRLF
kết thúc dòng DOS ( ). (Và các tệp khác có LF
kết thúc dòng Unix ( ). Điều này không rõ ràng trong đầu ra này. Nó ẩn. Đó chỉ là cách file
mong đợi một tệp văn bản "thông thường".)
(Nếu bạn muốn chia sẻ bản ghi nhớ của tôi: "L" là dành cho "Linux" và cho "LF".)
Bây giờ hãy chuyển đổi thủ phạm và thử lại:
$ 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
Tốt Bây giờ tất cả các certs có kết thúc dòng Unix.
Thử dos2unix -ih
Tôi không biết điều này khi tôi viết ví dụ trên nhưng:
Trên thực tế, hóa ra dos2unix sẽ cung cấp cho bạn một dòng tiêu đề nếu bạn sử dụng -ih
(viết tắt --info=h
) như vậy:
$ 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
Và một khoảnh khắc "thực sự" khác: Định dạng tiêu đề thực sự dễ nhớ: Đây là hai câu thần chú:
- Đó là DUMB (trái sang phải: d cho Dos, u cho Unix, m cho Mac, b cho BOM).
- Và cũng: "DUM" chỉ là thứ tự chữ cái của D, U và M.
đọc thêm
man less
.