107.3 Bài 1
Chứng chỉ: |
LPIC-1 |
---|---|
Phiên bản: |
5.0 |
Chủ đề: |
107 Các Tác vụ Quản trị |
Mục tiêu: |
107.3 Địa phương hoá và Quốc tế hoá |
Bài: |
1 trên 1 |
Giới thiệu
Tất cả các bản phân phối Linux lớn đều có thể được định cấu hình để sử dụng các cài đặt địa phương hóa tùy chỉnh. Các cài đặt này bao gồm các khái niệm về vùng và ngôn ngữ như múi giờ, ngôn ngữ giao diện cũng như mã hóa ký tự có thể được sửa đổi trong quá trình cài đặt hệ điều hành hoặc bất kỳ thời điểm nào sau này.
Các ứng dụng sẽ dựa vào các biến môi trường, tệp cấu hình hệ thống và lệnh để quyết định sử dụng thời gian và ngôn ngữ nào cho phù hợp. Do đó, hầu hết các bản phân phối Linux đều sử dụng chung một cách được tiêu chuẩn hóa để điều chỉnh cài đặt thời gian và địa phương hóa. Những điều chỉnh này rất quan trọng không chỉ trong việc cải thiện trải nghiệm người dùng mà còn để đảm bảo rằng thời gian của các sự kiện hệ thống — chẳng hạn như các sự kiện quan trọng cần báo cáo các vấn đề liên quan đến bảo mật — sẽ được tính toán một cách chính xác.
Để có thể biểu diễn bất kỳ một văn bản thuộc bất kể một ngôn ngữ nói nào, các hệ điều hành hiện đại cần có một tiêu chuẩn mã hóa ký tự tham chiếu và các hệ thống Linux cũng không phải là ngoại lệ. Vì máy tính chỉ có thể xử lý các con số nên mỗi ký tự văn bản đều sẽ không khác gì một con số gắn liền với một ký hiệu đồ họa. Các nền tảng máy tính biệt lập có thể sẽ gắn các giá trị số khác nhau với cùng một ký tự, vì thế nên cần có một tiêu chuẩn mã hóa ký tự chung để khiến chúng có khả năng tương thích. Một tài liệu văn bản được tạo trên một hệ thống sẽ chỉ có thể đọc được trên một hệ thống khác nếu cả hai cùng thống nhất về định dạng mã hóa và số hiệu liên kết với các ký tự, hoặc ít nhất là biết cách chuyển đổi giữa hai tiêu chuẩn.
Bản chất không đồng nhất của các cài đặt địa phương hóa trong hệ thống dựa trên Linux dẫn đến một số điểm khác biệt nhỏ giữa các bản phân phối. Dù vậy, tất cả các bản phân phối đều có chung các công cụ và khái niệm cơ bản để thiết lập các khía cạnh quốc tế hóa của một hệ thống.
Múi giờ
Múi giờ (Time zones) là các dải giờ riêng biệt có tỷ lệ gần đúng trên bề mặt Trái đất trải dài tương đương với một giờ, hay nói cách khác là các vùng trên thế giới sẽ trải qua cùng một giờ trong ngày tại bất kỳ thời điểm nào. Vì không có một kinh độ nào có thể được coi là điểm bắt đầu của ngày mới cho toàn thế giới nên các múi giờ đều sẽ tương quan với kinh tuyến gốc nơi kinh độ của Trái Đất có số đo góc được xác định là 0. Thời gian tại kinh tuyến gốc được gọi là Giờ Phối hợp Quốc tế, theo quy ước viết tắt là UTC. Vì lý do thực tế, các múi giờ sẽ không tuân theo khoảng cách dọc chính xác từ điểm tham chiếu (kinh tuyến gốc). Thay vào đó, chúng được điều chỉnh thủ công để tuân theo biên giới của các quốc gia hoặc các phân khu quan trọng khác.
Các phân khu chính trị quan trọng tới mức các múi giờ đã được đặt theo tên của một số tác nhân địa lý chính trong các khu vực cụ thể đó, thường là dựa trên tên của một quốc gia hoặc một thành phố lớn bên trong khu vực đó. Tuy vậy, các múi giờ vẫn được chia theo phần bù thời gian của chúng so với UTC và phần bù này cũng có thể được sử dụng để biểu thị vùng được đề cập. Ví dụ: múi giờ GMT-5 cho biết thời gian UTC sớm hơn thời gian của khu vực này 5 giờ, hay nói cách khác là khu vực đó chậm hơn UTC 5 giờ. Tương tự, múi giờ GMT+3 ám chỉ thời gian UTC chậm hơn thời gian của khu vực này ba giờ. Thuật ngữ GMT — từ Greenwich Mean Time (Giờ chuẩn Greenwich) — được sử dụng như từ đồng nghĩa với UTC trong tên vùng dựa trên phần bù.
Một máy được kết nối có thể được truy cập từ nhiều nơi khác nhau trên thế giới. Do đó, cách tốt nhất là đặt đồng hồ phần cứng thành UTC (múi giờ GMT+0) và dành việc lựa chọn múi giờ cho từng trường hợp cụ thể. Ví dụ: các dịch vụ đám mây thường được định cấu hình để sử dụng UTC vì nó có thể giúp giảm thiểu sự không nhất quán thường xuyên giữa giờ cục bộ và thời gian tại máy khách hoặc tại các máy chủ khác. Ngược lại, người dùng mở phiên từ xa trên máy chủ có thể sẽ muốn sử dụng múi giờ cục bộ của họ. Như vậy, tùy từng trường hợp mà hệ điều hành sẽ thiết lập múi giờ chính xác sao cho phù hợp.
Ngoài ngày giờ hiện tại, lệnh date
cũng sẽ in múi giờ hiện được cấu hình:
$ date Mon Oct 21 10:45:21 -03 2019
Giá trị chênh lệch so với UTC được thể hiện bởi giá trị -03
, nghĩa là thời gian được hiển thị ít hơn UTC ba giờ. Do đó, thời gian UTC sớm hơn ba giờ và khiến cho GMT-3 trở thành múi giờ tương ứng cho thời điểm sử dụng. Lệnh timedatectl
có sẵn trong các bản phân phối sử dụng systemd sẽ hiển thị thêm chi tiết về ngày giờ của hệ thống:
$ timedatectl Local time: Sat 2019-10-19 17:53:18 -03 Universal time: Sat 2019-10-19 20:53:18 UTC RTC time: Sat 2019-10-19 20:53:18 Time zone: America/Sao_Paulo (-03, -0300) System clock synchronized: yes systemd-timesyncd.service active: yes RTC in local TZ: no
Như được hiển thị trong mục Time zone
, tên múi giờ được dựa trên địa phương — như America/Sao_Paulo
— cũng sẽ được chấp nhận. Múi giờ mặc định cho hệ thống được lưu trong tệp /etc/timezone
, có thể là bằng tên mô tả đầy đủ hoặc là phần bù của giờ khu vực. Tên múi giờ chung do chênh lệch UTC đưa ra phải có Etc
đứng đầu tên. Vì vậy, để đặt múi giờ mặc định thành GMT+3, tên của múi giờ phải là Etc/GMT+3
:
$ cat /etc/timezone Etc/GMT+3
Mặc dù tên múi giờ dựa trên địa phương không yêu cầu phần bù thời gian để hoạt động nhưng để lựa chọn chúng cũng không phải là một việc dễ dàng. Cùng một khu vực có thể có nhiều tên nên rất khó nhớ. Để giải quyết vấn đề này, lệnh tzselect
có cung cấp một phương thức tương tác và sẽ hướng dẫn người dùng định nghĩa múi giờ một cách chính xác. Lệnh tzselect
phải có sẵn theo mặc định trong tất cả các bản phân phối Linux vì nó được cung cấp bởi gói chứa các chương trình tiện ích cần thiết liên quan đến Thư viện GNU C.
Ví dụ: lệnh tzselect
sẽ hữu ích đối với người dùng muốn xác định múi giờ cho “São Paulo City” ở “Brazil”. tzselect
sẽ bắt đầu bằng cách hỏi vùng vĩ mô của vị trí mong muốn:
$ tzselect Please identify a location so that time zone rules can be set correctly. Please select a continent, ocean, "coord", or "TZ". 1) Africa 2) Americas 3) Antarctica 4) Asia 5) Atlantic Ocean 6) Australia 7) Europe 8) Indian Ocean 9) Pacific Ocean 10) coord - I want to use geographical coordinates. 11) TZ - I want to specify the time zone using the Posix TZ format. #? 2
Tùy chọn 2
dành cho các địa điểm (Bắc và Nam) của Châu Mỹ và không nhất thiết phải ở cùng múi giờ. Ta cũng có thể chỉ định múi giờ bằng tọa độ địa lý hoặc bằng ký hiệu phần bù hay còn được gọi là định dạng Posix TZ. Bước tiếp theo là chọn quốc gia:
Please select a country whose clocks agree with yours. 1) Anguilla 19) Dominican Republic 37) Peru 2) Antigua & Barbuda 20) Ecuador 38) Puerto Rico 3) Argentina 21) El Salvador 39) St Barthelemy 4) Aruba 22) French Guiana 40) St Kitts & Nevis 5) Bahamas 23) Greenland 41) St Lucia 6) Barbados 24) Grenada 42) St Maarten (Dutch) 7) Belize 25) Guadeloupe 43) St Martin (French) 8) Bolivia 26) Guatemala 44) St Pierre & Miquelon 9) Brazil 27) Guyana 45) St Vincent 10) Canada 28) Haiti 46) Suriname 11) Caribbean NL 29) Honduras 47) Trinidad & Tobago 12) Cayman Islands 30) Jamaica 48) Turks & Caicos Is 13) Chile 31) Martinique 49) United States 14) Colombia 32) Mexico 50) Uruguay 15) Costa Rica 33) Montserrat 51) Venezuela 16) Cuba 34) Nicaragua 52) Virgin Islands (UK) 17) Curaçao 35) Panama 53) Virgin Islands (US) 18) Dominica 36) Paraguay #? 9
Lãnh thổ của Brazil trải dài bốn múi giờ nên chỉ thông tin quốc gia là không đủ để đặt múi giờ. Trong bước tiếp theo, tzselect
sẽ yêu cầu người dùng chỉ định vùng cục bộ:
Please select one of the following time zone regions. 1) Atlantic islands 2) Pará (east); Amapá 3) Brazil (northeast: MA, PI, CE, RN, PB) 4) Pernambuco 5) Tocantins 6) Alagoas, Sergipe 7) Bahia 8) Brazil (southeast: GO, DF, MG, ES, RJ, SP, PR, SC, RS) 9) Mato Grosso do Sul 10) Mato Grosso 11) Pará (west) 12) Rondônia 13) Roraima 14) Amazonas (east) 15) Amazonas (west) 16) Acre #? 8
Không phải tất cả các tên địa phương đều có sẵn nhưng chúng ta cũng chỉ cần chọn khu vực gần nhất đã là đủ. Thông tin đã cho sau đó sẽ được tzselect
sử dụng để hiển thị múi giờ tương ứng:
The following information has been given: Brazil Brazil (southeast: GO, DF, MG, ES, RJ, SP, PR, SC, RS) Therefore TZ='America/Sao_Paulo' will be used. Selected time is now: sex out 18 18:47:07 -03 2019. Universal Time is now: sex out 18 21:47:07 UTC 2019. Is the above information OK? 1) Yes 2) No #? 1 You can make this change permanent for yourself by appending the line TZ='America/Sao_Paulo'; export TZ to the file '.profile' in your home directory; then log out and log in again. Here is that TZ value again, this time on standard output so that you can use the /usr/bin/tzselect command in shell scripts: America/Sao_Paulo
Tên múi giờ kết quả America/Sao_Paulo
cũng có thể được sử dụng làm nội dung của /etc/timezone
để thông báo múi giờ mặc định cho hệ thống:
$ cat /etc/timezone America/Sao_Paulo
Như đã nêu trong đầu ra của tzselect
, biến môi trường TZ
sẽ xác định múi giờ cho phiên vỏ, bất kể múi giờ mặc định của hệ thống là gì. Việc thêm dòng TZ='America/Sao_Paulo'; export TZ
vào tệp ~/.profile
sẽ đặt America/Sao_Paulo
làm múi giờ cho các phiên trong tương lai của người dùng. Biến TZ
cũng có thể được sửa đổi tạm thời trong phiên hiện tại để hiển thị thời gian ở múi giờ khác:
$ env TZ='Africa/Cairo' date Mon Oct 21 15:45:21 EET 2019
Trong ví dụ, lệnh env
sẽ chạy lệnh đã cho trong một phiên vỏ phụ mới với cùng các biến môi trường của phiên hiện tại ngoại trừ biến TZ
được sửa đổi bởi đối số TZ='Africa/Cairo'
.
Quy ước Giờ mùa Hè
Nhiều khu vực sẽ áp dụng quy ước giờ mùa hè cho một khoảng thời gian trong năm — khi đồng hồ thường được điều chỉnh chênh một giờ — điều đó có thể khiến hệ thống bị định cấu hình sai và báo cáo sai thời gian trong mùa đó.
Tệp /etc/localtime
chứa dữ liệu được hệ điều hành sử dụng để điều chỉnh đồng hồ cho phù hợp. Các hệ thống Linux tiêu chuẩn có các tệp cho tất cả các múi giờ trong thư mục /usr/share/zoneinfo/
, vì vậy nên /etc/localtime
chỉ là một liên kết tượng trưng đến tệp dữ liệu thực tế bên trong thư mục đó. Các tệp trong /usr/share/zoneinfo/
được sắp xếp theo tên của múi giờ tương ứng nên tệp dữ liệu cho múi giờ America/Sao_Paulo
sẽ là /usr/share/zoneinfo/America/Sao_Paulo
Vì các định nghĩa về quy ước giờ mùa hè có thể thay đổi nên quan trọng nhất là người dùng phải luôn cập nhật các tệp ở /usr/share/zoneinfo/
. Lệnh nâng cấp của công cụ quản lý gói do nhà phân phối cung cấp sẽ cập nhật chúng mỗi khi có phiên bản mới.
Mã hóa Ngôn ngữ và Ký tự
Hệ thống Linux có thể hoạt động với nhiều ngôn ngữ và các mã hóa ký tự không phải của phương Tây - các định nghĩa được gọi là ngôn ngữ địa phương. Cấu hình ngôn ngữ địa phương cơ bản nhất chính là định nghĩa của biến môi trường LANG
mà từ đó, hầu hết các chương trình vỏ sẽ xác định ngôn ngữ để sử dụng.
Nội dung của biến LANG
sẽ tuân theo định dạng ab_CD
, trong đó, ab
là mã ngôn ngữ và CD
là mã vùng. Mã ngôn ngữ phải tuân theo tiêu chuẩn ISO-639 và mã vùng phải tuân theo tiêu chuẩn ISO-3166. Ví dụ: một hệ thống được định cấu hình để sử dụng tiếng Bồ Đào Nha Brazil phải có biến LANG
được xác định thành pt_BR.UTF-8
:
$ echo $LANG pt_BR.UTF-8
Như đã thấy trong kết quả đầu ra của ví dụ, biến LANG
cũng có chứa mã hóa ký tự dành cho hệ thống. ASCII (viết tắt của Chuẩn mã trao đổi thông tin Hoa Kỳ) là tiêu chuẩn mã hóa ký tự được sử dụng rộng rãi đầu tiên cho giao tiếp điện tử. Tuy nhiên, vì ASCII có phạm vi giá trị số khả dụng rất hạn chế và được dựa trên bảng chữ cái tiếng Anh nên nó không chứa các ký tự được sử dụng bởi các ngôn ngữ khác hoặc các bộ ký hiệu không phải chữ cái tiếng Anh mở rộng. Mã hóa UTF-8 là Tiêu chuẩn Unicode dành cho các ký tự phương Tây thông thường cùng với nhiều ký hiệu không thông thường khác. Như đã được đơn vị duy trì Tiêu chuẩn Unicode là Hiệp hội Unicode khẳng định, nó phải được áp dụng theo mặc định để đảm bảo khả năng tương thích giữa các nền tảng máy tính:
Tiêu chuẩn Unicode cung cấp một số nhận dạng cho mỗi ký tự bất kể trong nền tảng, thiết bị, ứng dụng hay ngôn ngữ nào. Nó đã được tất cả các nhà cung cấp phần mềm hiện đại áp dụng và hiện cho phép dữ liệu được truyền qua nhiều nền tảng, thiết bị và ứng dụng khác nhau mà không gặp lỗi. Hỗ trợ Unicode tạo nền tảng cho việc thể hiện ngôn ngữ và ký hiệu trong tất cả các hệ điều hành, công cụ tìm kiếm, trình duyệt, máy tính xách tay và điện thoại thông minh chính — cộng với Internet và World Wide Web (URL, HTML, XML, CSS, JSON, v.v. .). (…) Tiêu chuẩn Unicode và sự sẵn có của các công cụ hỗ trợ nó là một trong những xu hướng công nghệ phần mềm toàn cầu quan trọng nhất hiện nay.
What is Unicode?
Một số hệ thống vẫn có thể sử dụng các tiêu chuẩn do ISO xác định — như tiêu chuẩn ISO-8859-1 — để mã hóa các ký tự không phải ASCII. Tuy nhiên, các tiêu chuẩn mã hóa ký tự như vậy không nên được sử dụng nữa và nên được thay thế theo các tiêu chuẩn mã hóa Unicode. Nhìn chung, tất cả các hệ điều hành chính đều có xu hướng áp dụng tiêu chuẩn Unicode theo mặc định.
Cài đặt ngôn ngữ trên toàn hệ thống được định cấu hình trong tệp /etc/locale.conf
. Biến LANG
và các biến liên quan đến ngôn ngữ địa phương khác được gán trong tệp này giống như một biến vỏ thông thường. Ví dụ:
$ cat /etc/locale.conf LANG=pt_BR.UTF-8
Người dùng có thể sử dụng cấu hình ngôn ngữ tùy chỉnh bằng cách xác định lại biến môi trường LANG
. Nó có thể được thực hiện chỉ cho phiên hiện tại hoặc cho các phiên trong tương lai bằng cách thêm định nghĩa mới vào hồ sơ Bash của người dùng trong ~/.bash_profile
hoặc ~/.profile
. Tuy nhiên, cho đến khi người dùng đăng nhập, ngôn ngữ hệ thống mặc định vẫn sẽ được các chương trình độc lập với người dùng sử dụng (như màn hình đăng nhập của trình quản lý hiển thị).
Tip
|
Lệnh |
Ngoài biến LANG
, các biến môi trường khác cũng có ảnh hưởng đến các khía cạnh ngôn ngữ cụ thể (ví dụ như việc sử dụng ký hiệu tiền tệ nào hoặc dấu phân cách hàng nghìn chính xác cho các số):
LC_COLLATE
-
Đặt thứ tự bảng chữ cái. Một trong những mục đích của nó là xác định thứ tự các tệp và thư mục được liệt kê.
LC_CTYPE
-
Đặt phương thức xử lý các bộ ký tự nhất định. Ví dụ, nó sẽ xác định những ký tự nào được coi là chữ hoa hoặc chữ thường.
LC_MESSAGES
-
Đặt ngôn ngữ để hiển thị thông báo chương trình (hầu hết là các chương trình GNU).
LC_MONETARY
-
Đặt đơn vị tiền tệ và định dạng tiền tệ.
LC_NUMERIC
-
Đặt định dạng số cho các giá trị phi tiền tệ. Mục đích chính của nó là xác định dấu phân cách phần nghìn và thập phân.
LC_TIME
-
Đặt định dạng ngày và giờ.
LC_PAPER
-
Đặt khổ giấy tiêu chuẩn.
LC_ALL
-
Ghi đè tất cả các biến khác, bao gồm cả
LANG
.
Lệnh locale
sẽ hiển thị tất cả các biến được xác định trong cấu hình ngôn ngữ hiện tại:
$ locale LANG=pt_BR.UTF-8 LC_CTYPE="pt_BR.UTF-8" LC_NUMERIC=pt_BR.UTF-8 LC_TIME=pt_BR.UTF-8 LC_COLLATE="pt_BR.UTF-8" LC_MONETARY=pt_BR.UTF-8 LC_MESSAGES="pt_BR.UTF-8" LC_PAPER=pt_BR.UTF-8 LC_NAME=pt_BR.UTF-8 LC_ADDRESS=pt_BR.UTF-8 LC_TELEPHONE=pt_BR.UTF-8 LC_MEASUREMENT=pt_BR.UTF-8 LC_IDENTIFICATION=pt_BR.UTF-8 LC_ALL=
Biến không xác định duy nhất là LC_ALL
và có thể được sử dụng để tạm thời ghi đè tất cả các cài đặt ngôn ngữ khác. Ví dụ sau đây cho thấy lệnh date
— chạy trong hệ thống được định cấu hình thành ngôn ngữ pt_BR.UTF-8
— sẽ sửa đổi đầu ra của nó để tuân thủ biến LC_ALL
mới:
$ date seg out 21 10:45:21 -03 2019 $ env LC_ALL=en_US.UTF-8 date Mon Oct 21 10:45:21 -03 2019
Việc sửa đổi biến LC_ALL
sẽ làm cho cả hai chữ viết tắt cho tên ngày trong tuần và tên tháng được hiển thị bằng tiếng Anh Mỹ (en_US
). Tuy nhiên, chúng ta không bắt buộc phải đặt cùng một ngôn ngữ cho tất cả các biến. Ví dụ: có thể xác định ngôn ngữ thành pt_BR
và định dạng số (LC_NUMERIC
) đặt theo tiêu chuẩn Mỹ.
Một số cài đặt địa phương hóa sẽ thay đổi cách chương trình xử lý các định dạng số và thứ tự bảng chữ cái. Ví dụ: trong khi các chương trình thông thường thường sẽ chọn chính xác một ngôn ngữ chung cho các tình huống như vậy thì các tệp lệnh có thể sẽ không hoạt động được như mong muốn khi cố gắng sắp xếp một danh sách các mục chính xác theo thứ tự bảng chữ cái. Vì lý do này, người dùng nên đặt biến môi trường LANG
thành ngôn ngữ C
chung (như trong LANG=C
) để tệp lệnh tạo ra các kết quả rõ ràng, bất kể các định nghĩa địa phương hóa được sử dụng trong hệ thống nơi nó được thực thi là gì. Ngôn ngữ địa phương C sẽ chỉ tiến hành một so sánh về byte đơn giản nên nó cũng sẽ hoạt động tốt hơn các ngôn ngữ khác.
Chuyển đổi Mã hóa
Văn bản có thể xuất hiện với các ký tự khó diễn giải khi hiển thị trên hệ thống có cấu hình mã hóa ký tự khác với hệ thống nơi văn bản được tạo. Lệnh iconv
có thể được sử dụng để giải quyết vấn đề này bằng cách chuyển đổi tệp từ mã hóa ký tự gốc sang mã mong muốn. Ví dụ: để chuyển đổi một tệp có tên origin.txt
từ mã hóa ISO-8859-1 sang tệp có tên converted.txt
sử dụng mã hóa UTF-8, chúng ta có thể sử dụng lệnh sau:
$ iconv -f ISO-8859-1 -t UTF-8 original.txt > converted.txt
Tùy chọn -f ISO-8859-1
(hoặc --from-code=ISO-8859-1
) sẽ đặt mã hóa của tệp gốc và tùy chọn -t UTF-8
(hoặc --to- code=UTF-8
) sẽ đặt mã hóa cho tệp được chuyển đổi. Tất cả mã hóa được hỗ trợ bởi lệnh iconv
đều có thể được liệt kê bằng lệnh iconv -l
hoặc iconv --list
. Thay vì sử dụng chuyển hướng đầu ra như trong ví dụ, tùy chọn -o converted.txt
hoặc --output converted.txt
cũng có thể được sử dụng.
Bài tập Hướng dẫn
-
Dựa trên kết quả đầu ra sau của lệnh
date
, múi giờ của hệ thống theo ký hiệu GMT là gì?$ date Mon Oct 21 18:45:21 +05 2019
-
Liên kết tượng trưng
/etc/localtime
nên trỏ tới tệp nào để biếnEurope/Brussels
thành giờ cục bộ mặc định của hệ thống? -
Các ký tự trong tệp văn bản có thể sẽ không được hiển thị chính xác trong hệ thống có mã hóa ký tự khác với mã hóa được sử dụng trong tài liệu văn bản. Làm cách nào để có thể sử dụng lệnh
iconv
để chuyển đổi tệp được mã hóa WINDOWS-1252old.txt
thành tệpnew.txt
sử dụng mã hóa UTF-8?
Bài tập Mở rộng
-
Lệnh nào sẽ biến
Pacific/Auckland
thành múi giờ mặc định cho phiên vỏ hiện tại? -
Lệnh
uptime
sẽ hiển thị tải lượng trung bình của hệ thống ở dạng phân số bên cạnh nhiều thông tin khác. Nó sử dụng cài đặt ngôn ngữ hiện tại để quyết định xem dấu phân cách vị trí thập phân là dấu chấm hay dấu phẩy. Ví dụ: nếu ngôn ngữ hiện tại được đặt thànhde_DE.UTF-8
(ngôn ngữ tiêu chuẩn của Đức),uptime
sẽ sử dụng dấu phẩy làm dấu phân cách. Biết rằng trong tiếng Anh Mỹ, dấu chấm được dùng làm dấu phân cách, lệnh nào sẽ khiếnuptime
hiển thị các phân số bằng dấu chấm thay vì dấu phẩy trong phần còn lại của phiên hiện tại? -
Lệnh
iconv
sẽ thay thế tất cả các ký tự bên ngoài bộ ký tự đích bằng dấu chấm hỏi. Nếu//TRANSLIT
được thêm vào mã hóa đích, các ký tự không được biểu thị trong bộ ký tự đích sẽ được thay thế (chuyển ngữ) bằng một hoặc nhiều ký tự trông giống như vậy. Làm cách nào để có thể sử dụng phương pháp này để chuyển đổi tệp văn bản UTF-8 có tênreadme.txt
thành tệp ASCII đơn giản có tênascii.txt
?
Tóm tắt
Bài học này đã nói về cách thiết lập hệ thống Linux để hoạt động với cài đặt thời gian và ngôn ngữ tùy chỉnh. Các khái niệm và cài đặt mã hóa ký tự cũng được đề cập tới vì chúng rất quan trọng trong việc hiển thị chính xác nội dung văn bản. Bài học đã đi qua các chủ đề sau:
-
Cách hệ thống Linux chọn ngôn ngữ để hiển thị thông báo vỏ.
-
Hiểu về sự ảnh hưởng của múi giờ đến giờ cục bộ như thế nào.
-
Cách xác định múi giờ thích hợp và sửa đổi cài đặt hệ thống cho phù hợp.
-
Mã hóa ký tự là gì và cách chuyển đổi giữa chúng.
Các lệnh và quy trình đã được giải quyết là:
-
Các biến môi trường liên quan đến ngôn ngữ địa phương và thời gian, chẳng hạn như
LC_ALL
,LANG
vàTZ
. -
/etc/timezone
-
/etc/localtime
-
/usr/share/zoneinfo/
-
locale
-
tzselect
-
timedatectl
-
date
-
iconv
Đáp án Bài tập Hướng dẫn
-
Dựa trên kết quả đầu ra sau của lệnh
date
, múi giờ của hệ thống theo ký hiệu GMT là gì?$ date Mon Oct 21 18:45:21 +05 2019
Câu trả lời là múi giờ
Etc/GMT+5
. -
Liên kết tượng trưng
/etc/localtime
nên trỏ tới tệp nào để biếnEurope/Brussels
thành giờ cục bộ mặc định của hệ thống?Liên kết
/etc/localtime
phải trỏ đến/usr/share/zoneinfo/Europe/Brussels
. -
Các ký tự trong tệp văn bản có thể sẽ không được hiển thị chính xác trong hệ thống có mã hóa ký tự khác với mã hóa được sử dụng trong tài liệu văn bản. Làm cách nào để có thể sử dụng lệnh
iconv
để chuyển đổi tệp được mã hóa WINDOWS-1252old.txt
thành tệpnew.txt
sử dụng mã hóa UTF-8?Lệnh
iconv -f WINDOWS-1252 -to UTF-8 -to new.txt old.txt
sẽ thực hiện chuyển đổi như mong muốn.
Đáp án Bài tập Mở rộng
-
Lệnh nào sẽ biến
Pacific/Auckland
thành múi giờ mặc định cho phiên vỏ hiện tại?export TZ=Pacific/Auckland
-
Lệnh
uptime
sẽ hiển thị tải lượng trung bình của hệ thống ở dạng phân số bên cạnh nhiều thông tin khác. Nó sử dụng cài đặt ngôn ngữ hiện tại để quyết định xem dấu phân cách vị trí thập phân là dấu chấm hay dấu phẩy. Ví dụ: nếu ngôn ngữ hiện tại được đặt thànhde_DE.UTF-8
(ngôn ngữ tiêu chuẩn của Đức),uptime
sẽ sử dụng dấu phẩy làm dấu phân cách. Biết rằng trong tiếng Anh Mỹ, dấu chấm được dùng làm dấu phân cách, lệnh nào sẽ khiếnuptime
hiển thị các phân số bằng dấu chấm thay vì dấu phẩy trong phần còn lại của phiên hiện tại?Lệnh
export LC_NUMERIC=en_US.UTF-8
hoặcexport LC_ALL=en_US.UTF-8
. -
Lệnh
iconv
sẽ thay thế tất cả các ký tự bên ngoài bộ ký tự đích bằng dấu chấm hỏi. Nếu//TRANSLIT
được thêm vào mã hóa đích, các ký tự không được biểu thị trong bộ ký tự đích sẽ được thay thế (chuyển ngữ) bằng một hoặc nhiều ký tự trông giống như vậy. Làm cách nào để có thể sử dụng phương pháp này để chuyển đổi tệp văn bản UTF-8 có tênreadme.txt
thành tệp ASCII đơn giản có tênascii.txt
?Lệnh
iconv -f UTF-8 -t ASCII//TRANSLIT -o ascii.txt readme.txt
sẽ thực hiện chuyển đổi như mong muốn.