Kali Linux에서 "date" 명령의 출력 형식을 영구적으로 변경합니다.

Kali Linux에서 "date" 명령의 출력 형식을 영구적으로 변경합니다.

그래서 저는 2개의 서로 다른 Linux를 설치했습니다. 그 중 하나는 Ubuntu이고 두 번째는 Kali입니다.

dateUbuntu 설치에서 옵션/인수 없이 명령을 실행 하면 다음 과 같은 결과가 나타납니다.

michal@ubuntu:~$ date
Thu 24 Mar 2022 07:56:23 PM CET

dateKali 설치에서 옵션/매개변수 없이 명령을 실행 하면 다음과 같은 결과가 나타납니다.

┌──(michal㉿kali)-[~]
└─$ date
Thu Mar 24 07:58:34 PM CET 2022

두 시스템의 로캘 설정은 동일합니다. Ubuntu locale설정:

michal@ubuntu:~$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

칼리 locale설정:

┌──(michal㉿kali)-[~]
└─$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

date두 컴퓨터에서 명령 출력이 다른 이유는 무엇입니까 ?

Kali 출력을 현재 Ubuntu 출력과 동일하게 영구적으로 변경하고 싶습니다.

michal@ubuntu:~$ date
Thu 24 Mar 2022 07:56:23 PM CET

어떤 파일을 편집해야 합니까? 이 설정은 어디에 있나요?

이 스레드의 단계를 따라해 보았습니다. 기본 날짜 형식을 변경하는 방법(LC_TIME 사용) 그러나 나는 무엇을 이해하지 못합니다: " datetexinfo는 또한 명시적으로 권장합니다.LC_TIME을 C로 설정로케일 독립적인 출력을 생성합니다. "그 의미.

답변1

date출력 형식을 어떻게 지정해야 하는지 알 수 있습니다 .

%%   a literal %
  %a   locale's abbreviated weekday name (e.g., Sun)
  %A   locale's full weekday name (e.g., Sunday)
  %b   locale's abbreviated month name (e.g., Jan)
  %B   locale's full month name (e.g., January)
  %c   locale's date and time (e.g., Thu Mar  3 23:05:25 2005)
  %C   century; like %Y, except omit last two digits (e.g., 20)
  %d   day of month (e.g., 01)
  %D   date; same as %m/%d/%y
  %e   day of month, space padded; same as %_d
  %F   full date; like %+4Y-%m-%d
  %g   last two digits of year of ISO week number (see %G)
  %G   year of ISO week number (see %V); normally useful only with %V
  %h   same as %b
  %H   hour (00..23)
  %I   hour (01..12)
  %j   day of year (001..366)
  %k   hour, space padded ( 0..23); same as %_H
  %l   hour, space padded ( 1..12); same as %_I
  %m   month (01..12)
  %M   minute (00..59)
  %n   a newline
  %N   nanoseconds (000000000..999999999)
  %p   locale's equivalent of either AM or PM; blank if not known
  %P   like %p, but lower case
  %q   quarter of year (1..4)
  %r   locale's 12-hour clock time (e.g., 11:11:04 PM)
  %R   24-hour hour and minute; same as %H:%M
  %s   seconds since the Epoch (1970-01-01 00:00 UTC)
  %S   second (00..60)
  %t   a tab
  %T   time; same as %H:%M:%S
  %u   day of week (1..7); 1 is Monday
  %U   week number of year, with Sunday as first day of week (00..53)
  %V   ISO week number, with Monday as first day of week (01..53)
  %w   day of week (0..6); 0 is Sunday
  %W   week number of year, with Monday as first day of week (00..53)
  %x   locale's date representation (e.g., 12/31/99)
  %X   locale's time representation (e.g., 23:13:48)
  %y   last two digits of year (00..99)
  %Y   year
  %z   +hhmm numeric time zone (e.g., -0400)
  %:z  +hh:mm numeric time zone (e.g., -04:00)
  %::z  +hh:mm:ss numeric time zone (e.g., -04:00:00)
  %:::z  numeric time zone with : to necessary precision (e.g., -04, +05:30)
  %Z   alphabetic time zone abbreviation (e.g., EDT)

귀하의 경우 명령은 다음과 같습니다.

date +"%a %d %b %Y %r %Z"

별칭을 설정하면 date명령의 동작을 변경할 수 있습니다.

alias date='date +"%a %d %b %Y %r %Z"'

~/.bashrc현재 사용자에 대한 변경 사항을 영구적으로 적용하려면 계정에 별칭을 추가할 수 있습니다 .

답변2

명령의 기본 형식은 date(1)로케일 시스템(특히 date_fmt의 설정 LC_TIME)에 깊이 묻혀 있습니다. 로케일(Locale)은 요일이 먼저 오는지, 용지 크기, 전화번호 형식, d/m/y인지 m/d/y인지, 각 자릿수 등 위치와 관련된 사항을 지정하는 시스템입니다. 숫자.

2018년 Ubuntu 18.04LTS 출시 이후 (미국 영어) 사용자의 기본 설정이 date(1)변경되었습니다. en_US미국의 date(1)18.04 이후 Ubuntu 버전에서 이 명령으로 생성된 날짜는 AM 또는 PM을 포함하여 12시간 형식입니다. 다른 배포판이 언제 무엇을 했는지는 모르겠습니다.

C/POSIX 로케일은 절대 변경되지 않는 위치 독립적 로케일입니다. 이것은 Unix 시스템이 로케일 조정을 시작하기 전에 수행하는 작업과 거의 같습니다. 해당 로케일은 C라고 합니다.

상황에 따라 여러 가지 옵션이 있습니다.

  1. 이 명령을 사용하여 이전 데이터에 의존하는 소프트웨어 가 없으면 date(1)계속 사용하는 것을 고려할 수 있습니다. 실제로 미국에서는 12시간제와 AM/PM을 사용합니다.

  2. 나처럼 date(1)스크립트를 계속 사용하여 특정 형식으로 날짜를 생성하려면 명령줄에서 형식 지정자를 사용할 수 있습니다.

    $ date +"%a %b %e %H:%M:%S %Z %Y"
    Mon Jun 12 15:30:44 EDT 2023
    
  3. 환경 변수와 함께 사용할 로케일을 지정 LANG하고 C로 설정할 수도 있습니다.

    $ LANG=C date
    Mon Jun 12 15:30:44 EDT 2023
    

    특정 쉘에 대해 설정 가능

    $ export LANG=C
    $ date
    Mon Jun 12 15:30:44 EDT 2023
    

    모든 쉘에서 이를 사용하려면 export LANG=C해당 행을 ~/.bash_aliases.

  4. date(1)다른 사용자가 호출하거나 쉘에서 호출하지 않더라도 인수 없이 지정된 형식을 생성 하려면 date(1)명령에 대한 시스템 기본 형식을 변경해야 합니다. 이것은 조금 더 복잡합니다.

    # Modify one line in the en_US locale file:
    cd /usr/share/i18n/locales
    sed -e '/date_fmt/ s/%r/%H:%M:%S/'  en_US > en_US@Cdate
    
    # List it as a supported locale:
    cat >> /etc/locale.gen << EOF
    [email protected] UTF-8
    EOF
    
    # compile the locale database
    locale-gen
    
    # select the new locale (modifies /etc/default/locale)
    update-locale [email protected]
    

이는 신규 로그인에 적용됩니다.

관련 정보