- Как изменить часовой пояс Linux
- Как работает время в Linux?
- Настройка часового пояса в linux
- 1. Ссылка /etc/localtime
- 2. Настройка с помощью tzdata
- 3. Настройка с помощью systemd
- 4. Настройка часового пояса в GUI
- Выводы
- How to Configure Time Zone and System Clock in Linux
- Check Time Zone Settings
- Change Time Zone on Debian-based Linux Distros
- A Distro-Agnostic Way to Change Time Zone Settings
- Real-Time Clock
- Synchronize System Clock to Your Time Zone
- Chrony
Как изменить часовой пояс Linux
Мы очень часто пользуемся временем в Linux, начиная от простой задачи узнать сколько сейчас времени, до более сложной — посмотреть логи или узнать когда произошло то или иное событие в системе. Все завязано на времени, поэтому очень важно, чтобы часы шли правильно.
Наша планета разделена на часовые пояса, это было сделано с одной простой целью, чтобы время в любой точке планеты соответствовало солнечному времени. Время между этими зонами отличается на час и всего таких поясов — 24, за эталон взято время по нулевому, Гринвичскому меридиану.
Поэтому в определенный момент время в разных участках планеты будет отличаться на час. В этой небольшой статье мы рассмотрим как изменить часовой пояс Linux, чтобы операционная система правильно работала со временем и могла правильно его синхронизировать через интернет.
Как работает время в Linux?
Операционная система Linux хранит и обрабатывает системное время в специальном Unix формате — количество секунд прошедших с полуночи первого января 1970 года. Эта дата считается началом эпохи Unix. И используется не ваше локальное время, а время по гринвичскому меридиану.
Для преобразования времени по Гринвичу в региональное время используется часовой пояс. Это преобразование выполняется для каждого пользователя. Это необходимо, чтобы каждый пользователь мог настроить для себя правильное по его временной зоне время. Такое поведение просто необходимо на серверах, когда на одной машине могут работать люди из разных частей мира.
По умолчанию в системе может быть установлен неправильный часовой пояс, это приведет к путанице в логах событий, да и другим трудностям. Но все это легко исправить. Дальше мы рассмотрим несколько способов изменить часовой пояс Linux.
Настройка часового пояса в linux
1. Ссылка /etc/localtime
Наиболее популярный и поддерживаемый в большинстве дистрибутивов способ установки часового пояса для всех пользователей — с помощью символической ссылки /etc/localtime на файл нужного часового пояса. Список доступных часовых поясов можно посмотреть командой:
Сначала создайте резервную копию текущего часового пояса:
cp /etc/localtime /etc/localtime.bak
Для создания символической ссылки используйте команду ln -sf. Файл зоны нужно выбрать из доступных в системе. Например, мой часовой пояс — Украина, Киев, для установки будет использоваться следующая команда:
ln -sf /usr/share/zoneinfo/Europe/Kiev /etc/localtime
Теперь можете проверить текущее системное время с помощью утилиты date:
Если у вас установлена утилита rdate можно синхронизировать время с сетью:
sudo rdate -s time-a.nist.gov
Осталось только синхронизировать ваши аппаратные часы с новыми настройками, для этого выполните команду:
Если нужно изменить часовой пояс только для определенной программы или скрипта, просто измените для нее переменную окружения TZ, например:
Эта настройка сохраняется только для текущего сеанса командной оболочки. Чтобы сменить часовой пояс linux для определенного пользователя тоже нужно использовать переменную среды TZ. Только ее нужно добавить в файл ~/.environment. Этот файл читается по умолчанию при входе в систему, а значит переменная будет доступна всем программам:
Готово, теперь вы знаете как выполняется настройка часового пояса linux для определенного пользователя.
2. Настройка с помощью tzdata
Если вы не хотите использовать описанный выше способ, можно воспользоваться специальными утилитами. Вот только в разных дистрибутивах используются свои утилиты. Рассмотрим варианты для самых популярных дистрибутивов.
В большинстве случаев вы увидите подобное диалоговое окно:
Здесь просто нужно выбрать нужный часовой пояс и нажать кнопку Enter. После этого для окончательного применения настроек нужно будет перезагрузить систему.
3. Настройка с помощью systemd
В systemd есть своя утилита для настройки даты и часового пояса. Чтобы узнать текущее состояние выполните:
Для просмотра всех доступных временных зон выполните такую команду:
А для установки нужного часового пояса используйте команду set-timezone, например, тот же Europe/Kiev:
sudo timedatectl set-timezone Europe/Kiev
4. Настройка часового пояса в GUI
В дистрибутиве Ubuntu и других, использующих Gnome, настройка часового пояса Linux может быть выполнена прямо в параметрах системы. Для этого выберите пункт Сведения о системе, затем Дата и время, выберите свое местоположение на карте, или наберите название для поиска в поле ввода:
В KDE аналогично можно установить часовой пояс в настройках системы. Запустите утилиту настроек, откройте пункт Локализация, перейдите в раздел Дата и время, а затем откройте вкладку Часовой пояс:
Остается выбрать часовой пояс в списке и нажать кнопку Применить. Здесь уже изменения должны проявиться моментально.
Выводы
Теперь вы знаете как выполняется установка часового пояса в linux и сможете настроить не только свой домашний компьютер но и сервер с множеством пользователей, которым нужен отдельный часовой пояс для правильного местного времени. Если у вас остались вопросы, спрашивайте в комментариях!
На завершение видео, в котором подробно рассказано, что такое часовые пояса и зачем они нужны:
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
How to Configure Time Zone and System Clock in Linux
In this tutorial, we will look at how to change your time zone settings in Linux and how to use NTP to sync the Linux system clock to your time zone.
Check Time Zone Settings
Check the current time zone settings.
Fri May 20 13:36:53 UTC 2022
As you can see, my system time zone is set to UTC (Universal Time Coordinated). But I live in China right now. So I need to change time zone settings from UTC to CST (China Standard Time).
Change Time Zone on Debian-based Linux Distros
On Debian-based Linux distros, including Debian, Ubuntu, Linux Mint, Elementary OS, etc, you can change your time zone settings with this command.
sudo dpkg-reconfigure tzdata
It will open up a dialog in the terminal to let your select your geographic area.
Next, select the city or region corresponding to your time zone. I live in China, so I selected Shanghai.
After you hit the OK button, your system clock will be immediately changed to your time zone clock.
A Distro-Agnostic Way to Change Time Zone Settings
This method works on all Linux distributions. First, open a terminal and type this command:
sudo ln -sf /usr/share/zoneinfo/
Don’t press Enter yet, press Tab key instead.
A list of geographic areas will appear, now enter the name of your area after sudo ln -sf /usr/share/zoneinfo/. For example, I entered Asia. Then press Tab key again. A list of City will appear.
Enter the name of the city corresponding to your time zone. For instance, I entered Shanghai. Now press the space key and enter /etc/localtime. So the final command will be
sudo ln -sf /usr/share/zoneinfo/your-geographic-area/your-city /etc/localtime
Press enter to run this command. It will create a symbolic link pointing /etc/localtime file to your specific time zone file. Your system’s clock will be updated immediately, as you can find out by entering date command in the terminal. But users with a desktop environment such as XFCE need to log out and log back in to see the changes on the taskbar.
Real-Time Clock
RTC stands for real-time clock, also known as hardware clock. This clock is powered by CMOS battery of your computer’s motherboard. This clock runs all the time even if you shutdown your computer. Sometimes RTC time is incorrect.
To find out RTC time on your computer, run this command:
Local time: Fri 2022-05-20 21:42:26 +08 Universal time: Fri 2022-05-20 13:42:26 UTC RTC time: Fri 2022-05-20 13:42:26 Time zone: Asia/Singapore (+08, +0800) System clock synchronized: yes NTP service: active RTC in local TZ: no
As you can see, my local time is now 21:42:26, but RTC time is 13:42:26. RTC time is not in my local time zone and sometimes this can cause problems if the RTC time is inaccurate. RTC time is unreliable.
To make your system read RTC time in UTC standard, execute the following command.
timedatectl set-local-rtc 0
To let your system read RTC time in the local time zone, run this command
timedatectl set-local-rtc 1
It’s recommended your system read RTC time in UTC standard to prevent unexpected behavior.
Synchronize System Clock to Your Time Zone
Sometimes, your system clock can still be incorrect even if you set the correct time zone. To make sure your system clock is synchronized to your local time zone, you need NTP (Network Time Protocol).
NTP’s job is to provide accurate time on your network and there are many services that rely on accurate time to function correctly. NTP synchronizes the clock across your network so that time is as accurate as possible. It’s an application layer protocol and it uses UDP as the transport layer protocol. Network time servers get their time from atomic clocks.
On systemd you can enable NTP synchronization using timedatectl .
sudo timedatectl set-ntp true
The above command will start and enable the systemd-timesyncd service. Now check the status.
Local time: Fri 2022-05-20 21:45:34 +08 Universal time: Fri 2022-05-20 13:45:34 UTC RTC time: Fri 2022-05-20 13:45:34 Time zone: Asia/Singapore (+08, +0800) System clock synchronized: yes NTP service: active RTC in local TZ: no
You can see that system clock is synchronized and NTP service is enabled. To check the status of timesyncd :
sudo systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2022-05-09 17:47:54 CST; 1h 37min ago Docs: man:systemd-timesyncd.service(8) Main PID: 2243 (systemd-timesyn) Status: "Synchronized to time server 202.112.29.82:123 (0.arch.pool.ntp.org)." Tasks: 2 (limit: 512) CGroup: /system.slice/systemd-timesyncd.service └─2243 /usr/lib/systemd/systemd-timesyncd
Chrony
If the system clock can’t be synced to an NTP server, you can also try chrony , which is a versatile implementation of the Network Time Protocol. Run the following command to install it. (Note: If your system has the systemd-timesyncd pacakge, chrony will remove it from your system.).
- Debian/Ubuntu: sudo apt install chrony
- CentOS/RHEL/Fedora: sudo dnf install chrony
- Arch Linux: sudo pacman -S chrony
- OpenSUSE: sudo zypper install chrony
After it’s installed, start it with:
sudo systemctl enable --now chrony
sudo systemctl status chrony
● chrony.service - chrony, an NTP client/server Loaded: loaded (/lib/systemd/system/chrony.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-04-21 23:40:55 CST; 4 weeks 0 days ago Docs: man:chronyd(8) man:chronyc(1) man:chrony.conf(5) Process: 11030 ExecStart=/usr/lib/systemd/scripts/chronyd-starter.sh $DAEMON_OPTS (code=exited, status=0/SUCCESS) Main PID: 11039 (chronyd) Tasks: 2 (limit: 3676) Memory: 1.4M CPU: 168ms CGroup: /system.slice/chrony.service ├─11039 /usr/sbin/chronyd -F 1 └─11040 /usr/sbin/chronyd -F 1 Apr 21 23:40:55 systemd[1]: Starting chrony, an NTP client/server. Apr 21 23:40:55 chronyd[11039]: chronyd version 4.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 -DEBUG) Apr 21 23:40:55 chronyd[11039]: Using right/UTC timezone to obtain leap second data Apr 21 23:40:55 chronyd[11039]: Loaded seccomp filter (level 1) Apr 21 23:40:55 systemd[1]: Started chrony, an NTP client/server. Apr 21 23:41:12 chronyd[11039]: Selected source 38.229.62.9 (0.ubuntu.pool.ntp.org) Apr 21 23:41:12 chronyd[11039]: System clock wrong by 2496258.787751 seconds May 20 21:05:31 chronyd[11039]: System clock was stepped by 2496258.787751 seconds May 20 21:05:31 chronyd[11039]: System clock TAI offset set to 37 seconds
As you can see, chrony found the system clock is wrong and automatically sync it with the network time server (0.ubuntu.pool.ntp.org).