리눅스에 ssh 등으로 접속하다가 password 기간 만료로 새로 변경해야 되는 경우가 있다.

이때 임시로 password 를 변경하고, 다시 passwd 명령으로 변경하려면 다음과 같은 에러와 함께 변경이 안되는 경우가 있다.

(current) UNIX password: 
You must wait longer to change your password
passwd: Authentication token manipulation error

 

접속된 사용자가 passwd 명령에 대한 권한이 없는등 여러가지 문제가 있을 수 있는데,

chage 명령으로 사용자 password 등에 관련된 정보를 한번 확인해보면 문제를 파악 할 수 있는 경우가 있다.

Usage: chage [options] LOGIN

Options:
  -d, --lastday LAST_DAY        set date of last password change to LAST_DAY
  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE
  -h, --help                    display this help message and exit
  -I, --inactive INACTIVE       set password inactive after expiration
                                to INACTIVE
  -l, --list                    show account aging information
  -m, --mindays MIN_DAYS        set minimum number of days before password
                                change to MIN_DAYS
  -M, --maxdays MAX_DAYS        set maximim number of days before password
                                change to MAX_DAYS
  -R, --root CHROOT_DIR         directory to chroot into
  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS

 

자신의 계정 정보를 확인해본다.

chage -l leechwin
Last password change				        : 10월 10, 2019
Password expires					:  1월 08, 2020
Password inactive					: never
Account expires						: never
Minimum number of days between password change		: 7
Maximum number of days between password change		: 90
Number of days of warning before password expires	: 7

 

계정 정보에 Minimum number of days between password change 부분이 7로 되어있는데 passwd 로 password 를 바꾼뒤에 7일뒤에 다시 passwd 로 password 를 바꿀 수 있다는 의미이다.

passwd 로 password 를 무한정 바꾸고 싶다면 다음 명령어로 해당 정보를 0 으로 설정 하면 된다.(단 root 계정으로 변경 실행해야 한다.)

# chage -d 0 leechwin

 

혹은 "/etc/shadow" 파일에 user 정보를 직접 수정가능하다.

 

Reference

Posted by leechwin

댓글을 달아 주세요

리눅스에서 설정파일이나 스크립트 파일을 수정한 뒤에 재부팅을 하지않고, 수정내용을 바로 적용하려면 source 명령을 수행하면 된다.

source 명령은 bash 내부 명령으로 포함되어있다.


  • $ source <script file>


Posted by leechwin

댓글을 달아 주세요

리눅스에서는 로그파일을 실시간으로 확인하는 방법중에 하나로 tail 명령에 대해 알아보자.


  • Tail
    • $ tail -f <대상파일>
    • 위와 같이 실행하면 대상 파일의 마지막 10라인을 출력하며, 해당 파일에 추가되는 행을 계속 출력하여 준다.


  • 옵션
    • f: 파일의 마지막 10라인을 실시간으로 계속 해서 출력한다.
    • n: 기본 10라인이 아닌 n 만큼의 라인을 출력한다.
      • $ tail -n 20 <대상파일>


  • Help 문서

  •  Usage: tail [OPTION]... [FILE]...

     Print the last 10 lines of each FILE to standard output.

     With more than one FILE, precede each with a header giving the file name.


     With no FILE, or when FILE is -, read standard input.


     Mandatory arguments to long options are mandatory for short options too.

      -c, --bytes=[+]NUM       output the last NUM bytes; or use -c +NUM to

                                 output starting with byte NUM of each file

      -f, --follow[={name|descriptor}]

                               output appended data as the file grows;

                                 an absent option argument means 'descriptor'

      -F                       same as --follow=name --retry

      -n, --lines=[+]NUM       output the last NUM lines, instead of the last 10;

                                 or use -n +NUM to output starting with line NUM

          --max-unchanged-stats=N

                               with --follow=name, reopen a FILE which has not

                                 changed size after N (default 5) iterations

                                 to see if it has been unlinked or renamed

                                 (this is the usual case of rotated log files);

                                 with inotify, this option is rarely useful

          --pid=PID            with -f, terminate after process ID, PID dies

      -q, --quiet, --silent    never output headers giving file names

          --retry              keep trying to open a file if it is inaccessible

      -s, --sleep-interval=N   with -f, sleep for approximately N seconds

                                 (default 1.0) between iterations;

                                 with inotify and --pid=P, check process P at

                                 least once every N seconds

      -v, --verbose            always output headers giving file names

      -z, --zero-terminated    line delimiter is NUL, not newline

          --help     display this help and exit

          --version  output version information and exit



Posted by leechwin

댓글을 달아 주세요

리눅스에서는 파일이나 디렉토리를 연결하는 링크의 개념이 있는데, 이 링크를 'ln' 명령으로 만들 수 있다.

링크는 하드링크(hard link)와 심볼릭링크(symbolic link) 2개의 종류로 만들 수 있다.

  • 하드링크
    • 하드링크 생성
      • $ ln <source> <target>
    • 하드링크는 원본파일과 동일한 내용의 다른 파일이다.
    • 원본파일의 내용이 변경되면 하드링크된 파일의 내용도 자동으로 변경된다.
    • 디렉토리는 하드링크 할 수 없다.


  • 심볼릭링크
    • 심볼릭링크 생성
      • $ ln -s <source> <target>
    • 심볼릭링크는 기존 파일을 가리키도록 링크만 되어있는 특별한 유형의 파일로 '바로가기'와 비슷한 파일이다.
    • 디렉토리도 심볼릭링크 가능하다.
    • 심볼릭 링크가 가리키고있는 파일이 변경되거나 삭제되면, 제동작을 하지 못하고, 해당링크는 'dangling soft link' 라고 한다.

  • Help 문서

  •  Usage: ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)

      or:  ln [OPTION]... TARGET                  (2nd form)

      or:  ln [OPTION]... TARGET... DIRECTORY     (3rd form)

      or:  ln [OPTION]... -t DIRECTORY TARGET...  (4th form)

     In the 1st form, create a link to TARGET with the name LINK_NAME.

     In the 2nd form, create a link to TARGET in the current directory.

     In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.

     Create hard links by default, symbolic links with --symbolic.

     By default, each destination (name of new link) should not already exist.

     When creating hard links, each TARGET must exist.  Symbolic links

     can hold arbitrary text; if later resolved, a relative link is

     interpreted in relation to its parent directory.


     Mandatory arguments to long options are mandatory for short options too.

          --backup[=CONTROL]      make a backup of each existing destination file

      -b                          like --backup but does not accept an argument

      -d, -F, --directory         allow the superuser to attempt to hard link

                                    directories (note: will probably fail due to

                                    system restrictions, even for the superuser)

      -f, --force                 remove existing destination files

      -i, --interactive           prompt whether to remove destinations

      -L, --logical               dereference TARGETs that are symbolic links

      -n, --no-dereference        treat LINK_NAME as a normal file if

                                    it is a symbolic link to a directory

      -P, --physical              make hard links directly to symbolic links

      -r, --relative              create symbolic links relative to link location

      -s, --symbolic              make symbolic links instead of hard links

      -S, --suffix=SUFFIX         override the usual backup suffix

      -t, --target-directory=DIRECTORY  specify the DIRECTORY in which to create

                                    the links

      -T, --no-target-directory   treat LINK_NAME as a normal file always

      -v, --verbose               print name of each linked file

          --help     display this help and exit

          --version  output version information and exit

     



Posted by leechwin

댓글을 달아 주세요

Ubuntu 에서 sudo 권한이 필요할때 특정 사용자와 특정 명령어에 대해 root password를 물어보지 않고 실행되게 할 수 있다.


다음 명령어를 수행하면 sudo 권한 파일을 수정 할 수 있다.

  • $ sudo visudo
  • $ sudo visudo

    # # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d # Allow member and tool # leechwin ALL=(ALL) NOPASSWD:ALL # leechwin ALL=(ALL) NOPASSWD: /usr/sbin/chroot, /bin/kill, /usr/bin/killall

  • visudo 수행 후 나오는 에디터 하단에 다음과 같은 형식으로 기술하면 된다.
    • {user} ALL=(ALL) NOPASSWD: {tool path}
  • leechwin 이라는 사용자에게 chroot, kill, killall 에대한 명령에 대해서 sudo 권한을 주어지게 할 경우 다음과 같이 기술 할수 있다.
    • leechwin ALL=(ALL) NOPASSWD: /usr/sbin/chroot, /bin/kill, /usr/bin/killall
  • command path 는 다음 명령으로 확인 가능하다.
    • $ which {tool name}

visudo 에서 수정된 파일은 다음 파일에 저장된다.

  • /etc/sudoers


'OS > Linux' 카테고리의 다른 글

[Ubuntu] tail 명령으로 로그 확인하기  (0) 2019.02.27
[Ubuntu] ln 명령으로 링크 만들기  (0) 2019.02.27
[Ubuntu] sudo 권한 등록  (0) 2017.08.09
[Ubuntu] hostname 변경  (0) 2017.01.19
[Ubuntu] Word Count  (0) 2017.01.19
[Ubuntu] Memory 확인  (0) 2017.01.19
Posted by leechwin

댓글을 달아 주세요

Ubuntu에서 현재 컴퓨터의 이름인 hostname 을 변경하는 법에 대해 알아보자.


현재 hostname은 shell 에서 $ hostname 명령을 통하여 알 수 있다.


hostname을 수정하려면 다음 2개의 파일을 원하는 이름으로 수정하고 재부팅하면 hostname이 수정되어 반영된다. 

  • sudo vi /etc/hostname
  • sudo vi /etc/hosts

$ hostname

leechwin-linux $ cat /etc/hostname leechwin-linux $ cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 leechwin-linux # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters



'OS > Linux' 카테고리의 다른 글

[Ubuntu] ln 명령으로 링크 만들기  (0) 2019.02.27
[Ubuntu] sudo 권한 등록  (0) 2017.08.09
[Ubuntu] hostname 변경  (0) 2017.01.19
[Ubuntu] Word Count  (0) 2017.01.19
[Ubuntu] Memory 확인  (0) 2017.01.19
[Ubuntu] Filesystem 용량 확인  (0) 2017.01.19
Posted by leechwin
TAG ubuntu

댓글을 달아 주세요

[Ubuntu] Word Count

OS/Linux 2017.01.19 15:47

Ubuntu 환경의 쉘에서 특정 word를 count하거나 특정 파일의 라인수를 카운트하는 wc 명령에 대해 알아보자.


$ wc --help

Usage: wc [OPTION]... [FILE]... or: wc [OPTION]... --files0-from=F Print newline, word, and byte counts for each FILE, and a total line if more than one FILE is specified. A word is a non-zero-length sequence of characters delimited by white space. With no FILE, or when FILE is -, read standard input. The options below may be used to select which counts are printed, always in the following order: newline, word, character, byte, maximum line length. -c, --bytes print the byte counts -m, --chars print the character counts -l, --lines print the newline counts --files0-from=F read input from the files specified by NUL-terminated names in file F; If F is - then read names from standard input -L, --max-line-length print the maximum display width -w, --words print the word counts --help display this help and exit --version output version information and exit GNU coreutils online help: <http://www.gnu.org/software/coreutils/> Full documentation at: <http://www.gnu.org/software/coreutils/wc> or available locally via: info '(coreutils) wc invocation'

wc 명령은 다음과 같이 여러가지로 이용가능하다.
  • 특정 파일의 라인수 카운트

$ wc -l test.md

42 test.md
  • 특정 문자 카운트

    $ cat test.md | grep config | wc -l

    4 $ cat /proc/cpuinfo | grep processor | wc -l 8


    'OS > Linux' 카테고리의 다른 글

    [Ubuntu] sudo 권한 등록  (0) 2017.08.09
    [Ubuntu] hostname 변경  (0) 2017.01.19
    [Ubuntu] Word Count  (0) 2017.01.19
    [Ubuntu] Memory 확인  (0) 2017.01.19
    [Ubuntu] Filesystem 용량 확인  (0) 2017.01.19
    [Ubuntu] 커널버전 및 Ubuntu 버전 확인  (0) 2017.01.18
    Posted by leechwin

    댓글을 달아 주세요

    [Ubuntu] Memory 확인

    OS/Linux 2017.01.19 11:59

    Ubuntu 환경에서 현재 메모리 사용량을 free 명령을 통해 알 수 있다.

    $ free -h

    total used free shared buff/cache available Mem: 7.8G 2.3G 3.6G 161M 1.9G 5.0G Swap: 46G 472K 46G



    $ free --help

    Usage: free [options] Options: -b, --bytes show output in bytes -k, --kilo show output in kilobytes -m, --mega show output in megabytes -g, --giga show output in gigabytes --tera show output in terabytes -h, --human show human-readable output --si use powers of 1000 not 1024 -l, --lohi show detailed low and high memory statistics -t, --total show total for RAM + swap -s N, --seconds N repeat printing every N seconds -c N, --count N repeat printing N times, then exit -w, --wide wide output --help display this help and exit -V, --version output version information and exit



    'OS > Linux' 카테고리의 다른 글

    [Ubuntu] hostname 변경  (0) 2017.01.19
    [Ubuntu] Word Count  (0) 2017.01.19
    [Ubuntu] Memory 확인  (0) 2017.01.19
    [Ubuntu] Filesystem 용량 확인  (0) 2017.01.19
    [Ubuntu] 커널버전 및 Ubuntu 버전 확인  (0) 2017.01.18
    [Ubuntu] deb 파일 설치가 잘 안되는 경우  (0) 2017.01.05
    Posted by leechwin
    TAG Memory, ubuntu

    댓글을 달아 주세요

    Ubuntu 환경에서 현재 Filesystem 사용량을 df 명령을 통해 알 수 있다.

    아래의 예제로는 현재 159G의 용량을 사용가능하다.

    $ df -h

    Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 794M 9.7M 785M 2% /run /dev/sda2 184G 16G 159G 10% / tmpfs 3.9G 86M 3.8G 3% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup tmpfs 794M 48K 794M 1% /run/user/1000

    $ df --help

    Usage: df [OPTION]... [FILE]... Show information about the file system on which each FILE resides, or all file systems by default. Mandatory arguments to long options are mandatory for short options too. -a, --all include pseudo, duplicate, inaccessible file systems -B, --block-size=SIZE scale sizes by SIZE before printing them; e.g., '-BM' prints sizes in units of 1,048,576 bytes; see SIZE format below -h, --human-readable print sizes in powers of 1024 (e.g., 1023M) -H, --si print sizes in powers of 1000 (e.g., 1.1G) -i, --inodes list inode information instead of block usage -k like --block-size=1K -l, --local limit listing to local file systems --no-sync do not invoke sync before getting usage info (default) --output[=FIELD_LIST] use the output format defined by FIELD_LIST, or print all fields if FIELD_LIST is omitted. -P, --portability use the POSIX output format --sync invoke sync before getting usage info --total elide all entries insignificant to available space, and produce a grand total -t, --type=TYPE limit listing to file systems of type TYPE -T, --print-type print file system type -x, --exclude-type=TYPE limit listing to file systems not of type TYPE -v (ignored) --help display this help and exit --version output version information and exit Display values are in units of the first available SIZE from --block-size, and the DF_BLOCK_SIZE, BLOCK_SIZE and BLOCKSIZE environment variables. Otherwise, units default to 1024 bytes (or 512 if POSIXLY_CORRECT is set). The SIZE argument is an integer and optional unit (example: 10K is 10*1024). Units are K,M,G,T,P,E,Z,Y (powers of 1024) or KB,MB,... (powers of 1000). FIELD_LIST is a comma-separated list of columns to be included. Valid field names are: 'source', 'fstype', 'itotal', 'iused', 'iavail', 'ipcent', 'size', 'used', 'avail', 'pcent', 'file' and 'target' (see info page). GNU coreutils online help: <http://www.gnu.org/software/coreutils/> Full documentation at: <http://www.gnu.org/software/coreutils/df> or available locally via: info '(coreutils) df invocation'


    'OS > Linux' 카테고리의 다른 글

    [Ubuntu] Word Count  (0) 2017.01.19
    [Ubuntu] Memory 확인  (0) 2017.01.19
    [Ubuntu] Filesystem 용량 확인  (0) 2017.01.19
    [Ubuntu] 커널버전 및 Ubuntu 버전 확인  (0) 2017.01.18
    [Ubuntu] deb 파일 설치가 잘 안되는 경우  (0) 2017.01.05
    [Jenkins] Jenkins 업데이트  (0) 2016.01.19
    Posted by leechwin

    댓글을 달아 주세요

    Ubuntu 환경에서 커널버전 및 Ubuntu 버전을 확인하는 법에 대해 알아보자.


    커널버전 알아보기

      $ uname -a Linux leechwin-linux 4.4.0-59-generic #80-Ubuntu SMP Fri Jan 6 17:47:47 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux $ cat /proc/version Linux version 4.4.0-59-generic (buildd@lgw01-11) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) ) #80-Ubuntu SMP Fri Jan 6 17:47:47 UTC 2017

    Ubuntu 버전확인하기

      $ cat /etc/issue Ubuntu 16.04.1 LTS \n \l $ cat /etc/*release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS" NAME="Ubuntu" VERSION="16.04.1 LTS (Xenial Xerus)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 16.04.1 LTS" VERSION_ID="16.04" HOME_URL="http://www.ubuntu.com/" SUPPORT_URL="http://help.ubuntu.com/" BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" VERSION_CODENAME=xenial UBUNTU_CODENAME=xenial $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.1 LTS Release: 16.04 Codename: xenial

    참고로 /etc/issue 파일은 내부에서 콘솔 로그인시 출력해주는 메시지이다.

    Posted by leechwin

    댓글을 달아 주세요