ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • shell 특성 3
    linux/centOS 2018. 6. 17. 21:22

    ☆ alias

    : 기존 명령어를 사용자가 임의로 별명처럼 지정해서 사용할 수 있는 명령어

     

    별칭(Alias)

    # alias cp='cp -i'

    # alias (# alias cp)

    # unalias cp

     

     

    # alias cp='cp -i'

    # alias mv='mv -i'

    # alias rm='rm -i'

     

    # alias vi='/usr/bin/vim'

    # alias pps='ps -ef | head -1 ; ps -ef | $1'

     

     

     

    [EX1] 별칭 테스트

    # alias a='cd /test && rm -rf /test/*'

    # alias b='cp /etc/passwd file1 ; cp file1 file2 ; cp file1 file3'

    # a

    # b

    # ls

     

     

    (주의) alias 이름과 명령어 이름이 중복되는 경우 디스크 명령어보다 새로 생성한 alias를 우선하게 된다.

    alias cp='cp i'

    /bin/cp

     

    # cp file1 file2 (# cp -i file1 file2)

     

     

     

    ☆ 사용자 환경 파일(Bash Initialization)

     

     

    (1) 환경 파일이 읽혀 지는 순서 (/etc/profile -> ~/.bash_profile -> ~/.bashrc)

     

     

    (1-1) 로그인시에 읽혀 지는 환경 파일

     

    /etc/profile

    /etc/profile.d/*.sh

    ~/.bash_profile (~/.bash_profile -> 파일이 없으면 -> ~/.bash_login -> 파일이 없으면 -> ~/.profile)

    ~/.bashrc

    /etc/bashrc

     

     

    (1-2) 쉘이 실행 될때 마다 읽혀 지는 환경 파일

    (레드햇 계열은 변수 선언시에 ~/.bashrc 파일에 선언해 주는게 좋다.)

     

    ~/.bashrc

    /etc/bashrc

    /etc/profile.d/*.sh

     

     

    (1-3) 로그아웃 할 때 마다 읽혀 지는 환경 파일

     

    ~/.bash_logout

     

     

     

    (2) 사용자 환경 초기값 설정

     

    (2-1) 관리자가 일반사용자의 환경을 설정 시켜 주는 경우

     

    /etc/profile : 로그인 할 때만 읽혀짐

    /etc/bashrc : 쉘이 실행 될때 마다 읽혀짐

    /etc/profile.d/*.sh : 쉘이 실행 될때 마다 읽혀짐

     

     

    (2-2) 일반 사용자가 자신의 환경을 설정 하는 경우

     

    ~/.bash_profile : 로그인 할 때만 읽혀짐

    ~/.bashrc : 쉘이 실행 될때 마다 읽혀짐

     

     

     

    (3) 환경파일 분석

     

    (3-1) /etc/profile 파일

     

    # cat /etc/profile

    # /etc/profile

     

    # System wide environment and startup programs, for login setup

    # Functions and aliases go in /etc/bashrc

     

    pathmunge () {

    if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then /* PATH 변수 내용 순서를 설정 */

    if [ "$2" = "after" ] ; then

    PATH=$PATH:$1

    else

    PATH=$1:$PATH

    fi

    fi

    }

     

    # ksh workaround

    if [ -z "$EUID" -a -x /usr/bin/id ]; then /* EUID 없으면 선언 */

    EUID=`id -u`

    UID=`id -ru`

    fi

     

    # Path manipulation

    if [ "$EUID" = "0" ]; then /* root 사용자이면 PATH 변수 선언, 위에 존재하는 pathmunge () 사용 */

    pathmunge /sbin

    pathmunge /usr/sbin

    pathmunge /usr/local/sbin

    fi

     

    # No core files by default

    ulimit -S -c 0 > /dev/null 2>&1 /* -S : Soft 설정, -c : core 파일의 최대 크기 설정 */

     

    if [ -x /usr/bin/id ]; then /* USER, LOGNAME, MAIL 변수 선언 */

    USER="`id -un`"

    LOGNAME=$USER

    MAIL="/var/spool/mail/$USER"

    fi

     

    HOSTNAME=`/bin/hostname` /* HOSTNAME, HISTSIZE 변수 선언 */

    HISTSIZE=1000

     

    if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then

    INPUTRC=/etc/inputrc

    fi

     

    export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC

     

    # By default, we want umask to get set. This sets it for login shell

    # Current threshold for system reserved uid/gids is 200

    # You could check uidgid reservation validity in

    # /usr/share/doc/setup-*/uidgid file

    if [ $UID -gt 99 ] && [ "`id -gn`" = "`id -un`" ]; then

    umask 002

    else

    umask 022

    fi

     

    for i in /etc/profile.d/*.sh ; do /* /etc/profile.d/*.sh 스크립트 실행 */

    if [ -r "$i" ]; then

    if [ "${-#*i}" != "$-" ]; then

    . $i

    else

    . $i >/dev/null 2>&1

    fi

    fi

    done

     

    unset i /* i 변수 unset */

    unset pathmunge /* pathmunge 함수 unset */

     

     

     

     

    (3-2) /etc/profile.d 디렉토리

     

    # cd /etc/profile.d

    # ls

    colorls.csh gnome-ssh-askpass.csh lang.csh vim.csh

    colorls.sh gnome-ssh-askpass.sh lang.sh vim.sh

    glib2.csh krb5-workstation.csh less.csh which-2.sh

    glib2.sh krb5-workstation.sh less.sh

     

    (Shell)

    - sh style : sh -> ksh -> zsh -> bash

    - csh style : csh -> tcsh

     

     

    (3-3) $HOME/.bash_profile 파일

     

    # cat ~/.bash_profile

    # .bash_profile

     

    # Get the aliases and functions /* ~/.bashrc 파일 실행 */

    if [ -f ~/.bashrc ]; then

    . ~/.bashrc

    fi

     

    # User specific environment and startup programs

     

    PATH=$PATH:$HOME/bin /* PATH 변수에 $HOME/bin 추가 */

     

    export PATH /* PATH 변수 export */

    unset USERNAME /* USERNAME 변수 unset */

     

     

    (3-4) $HOME/.bashrc 파일

     

    # cat ~/.bashrc

    # .bashrc

     

    # User specific aliases and functions

     

    alias rm='rm -i' /* 기본적인 명령어에 대한 alias 선언 */

    alias cp='cp -i'

    alias mv='mv -i'

     

    # Source global definitions /* /etc/bashrc 실행 */

    if [ -f /etc/bashrc ]; then

    . /etc/bashrc

    fi

     

     

    (3-5) /etc/bashrc 파일

     

    # cat /etc/bashrc

    # /etc/bashrc

     

    # System wide functions and aliases

    # Environment stuff goes in /etc/profile

     

    # are we an interactive shell?

    if [ "$PS1" ]; then

    if [ -z "$PROMPT_COMMAND" ]; then

    case $TERM in

    xterm*)

    if [ -e /etc/sysconfig/bash-prompt-xterm ]; then

    PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm

    else

    PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" \

    "${PWD/#$HOME/~}"'

    fi

    ;;

    screen)

    if [ -e /etc/sysconfig/bash-prompt-screen ]; then

    PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen

    else

    PROMPT_COMMAND='printf "\033]0;%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" \

    "${PWD/#$HOME/~}"'

    fi

    ;;

    *)

    [ -e /etc/sysconfig/bash-prompt-default ] && \

    PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default

    ;;

    esac

    fi

    # Turn on checkwinsize

    shopt -s checkwinsize

    [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "

    fi

     

    if ! shopt -q login_shell ; then

    # We're not a login shell

    # Need to redefine pathmunge, it get's undefined at the end of /etc/profile

    pathmunge () {

    if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then

    if [ "$2" = "after" ] ; then

    PATH=$PATH:$1

    else

    PATH=$1:$PATH

    fi

    fi

    }

     

    # By default, we want umask to get set. This sets it for non-login shell.

    # You could check uidgid reservation validity in

    # /usr/share/doc/setup-*/uidgid file

    if [ $UID -gt 99 ] && [ "`id -gn`" = "`id -un`" ]; then /* UMASK 값 설정 */

    umask 002

    else

    umask 022

    fi

     

    # Only display echos from profile.d scripts if we are no login shell

    # and interactive - otherwise just process them to set envvars

    for i in /etc/profile.d/*.sh; do

    if [ -r "$i" ]; then

    if [ "$PS1" ]; then

    . $i

    else

    . $i >/dev/null 2>&1

    fi

    fi

    done

     

    unset i

    unset pathmunge

    fi

    # vim:ts=4:sw=4

     

     

    (3-6) $HOME/.bash_logout

     

    # cat ~/.bash_logout

    # ~/.bash_logout

     

    clear

     

     

     

     

    [EX] 사용자 환경 파일이 읽혀 지는 순서에 대한 실습

     

    /etc/profile 파일에 테스트 내용 추가

     

    /etc/profile -> /etc/profile.d/*.sh

     

    # cat /etc/profile | head -10

     

    echo "|---> /etc/profile read" <----- 새로운 라인 추가

     

    # /etc/profile

     

    # System wide environment and startup programs, for login setup

    # Functions and aliases go in /etc/bashrc

     

    pathmunge () {

    if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then

    if [ "$2" = "after" ] ; then

    PATH=$PATH:$1

    else

     

    /etc/profile.d 디렉토리에 테스트용 스크립트 생성

    # cd /etc/profile.d

    # cat test.sh

    #!/bin/bash

     

    echo "|---> /etc/profile.d/*.sh read"

     

    ~/.bash_profile 파일에 테스트 내용 추가

     

    ~/.bash_profile -> ~/.bashrc -> /etc/bashrc

     

    # cat ~/.bash_profile | head -10

     

    echo "|---> ~/.bash_profile read" <----- 새로운 라인 추가

     

    # .bash_profile

     

    # Get the aliases and functions

    if [ -f ~/.bashrc ]; then

    . ~/.bashrc

    fi

     

    # User specific environment and startup programs

     

    PATH=$PATH:$HOME/bin

     

    ~/.bashrc 파일에 테스트 내용 추가

    # cat ~/.bashrc | head -10

     

    echo "|---> ~/.bashrc read" <----- 새로운 라인 추가

     

    # .bashrc

     

    # User specific aliases and functions

     

    alias rm='rm -i'

    alias cp='cp -i'

    alias mv='mv -i'

     

    # Source global definitions

    if [ -f /etc/bashrc ]; then

     

     

    /etc/bashrc 파일에 테스트 내용 추가

    # cat /etc/bashrc | head -10

     

    echo "|---> /etc/bashrc read" <---- 새로운 라인 추가

     

    # /etc/bashrc

     

    # System wide functions and aliases

    # Environment stuff goes in /etc/profile

     

    # are we an interactive shell?

    if [ "$PS1" ]; then

    if [ -z "$PROMPT_COMMAND" ]; then

    case $TERM in

    xterm*)

     

    ~/.bash_logout 파일에 테스트 내용 추가

    # cat ~/.bash_logout

     

    echo "|---> ~/.bash_logout read" <----- 새로운 라인 추가

     

    # ~/.bash_logout

     

    # clear <----- 주석(#) 처리

     

    사용자로 로그인

    # telnet localhost

    Trying 127.0.0.1...

    Connected to localhost.localdomain (127.0.0.1).

    Escape character is '^]'.

     

    linuxXXX.example.com (Linux release 2.6.18-308.el5 #1 SMP Tue Feb 21 20:06:06 EST 2012) (2)

     

    login: root

    Password: (centos)

    Last login: Thu Aug 1 11:01:49 on :0

    You have new mail.

    |---> /etc/profile read

    |---> /etc/profile.d/*.sh read

    |---> ~/.bash_profile read

    |---> ~/.bashrc read

    |---> /etc/bashrc read

     

    하위 쉘(Sub Shell) 실행

    # bash

    |---> ~/.bashrc read

    |---> /etc/bashrc read

    |---> /etc/profile.d/*.sh read

     

    새로운 윈도우(Window) 실행

    -> 바탕화면(Work Space)에서 오른쪽 마운스 클릭

    -> 터미널 열기

    -> 출력 내용 확인

    |---> ~/.bashrc read

    |---> /etc/bashrc read

    |---> /etc/profile.d/*.sh read

     

    # exit

     

    이전 명령어 윈도우에서 로그 아웃(Logout)

    # exit

    # exit

    echo "|---> ~/.bash_logout read"

     

     

     

     

    (4) 환경 파일의 활용 예

    (4-1) 사용자 환경 파일에 등록 될수 있는 내용들

     

    변수 설정

    PATH, PS1, 사용자 정의 변수 설정(JAVA_HOME, TOMCAT_HOME, ....)

    엘리어스(Alias) 설정

    alias ls='ls -hF'

    쉘 자체의 기능

    set -o vi

     

    (4-2) 선언 예

    # cat ~/.bashrc

    # .bashrc

     

    # User specific aliases and functions

     

    alias rm='rm -i' /* 기본적인 명령어에 대한 alias 선언 */

    alias cp='cp -i'

    alias mv='mv -i'

     

    # Source global definitions /* /etc/bashrc 실행 */

    if [ -f /etc/bashrc ]; then

    . /etc/bashrc

    fi

     

    ---------------------------- ~/.bashrc 파일 하단에 추가 -----------------------------

    # (a). 기본적인 alias

    alias c='clear' /* 명령어를 짧게 사용하기 위한 설정 */

    alias h='history'

    alias t='/usr/kerberos/bin/telnet 172.16.9.252'

    alias d='cd /test && rm -rf /test/*'

     

    alias grep='/bin/grep -i --color' /* 명령어 옵션 */

    alias cat='/bin/cat -n'

    alias df='/bin/df -h -T'

    alias ls='ls -h --color=tty'

     

    # (b). 필요한 경우 선언하는 alias

    alias lsf='/bin/ls -al | grep ^-' /* 새로운 명령어를 위한 alias */

    alias lsd='/bin/ls -al | grep ^d'

    alias pps='/bin/ps -ef | head -1 ; ps -ef | grep $1'

    alias ddf='/bin/df -h -F ext3 ; echo ; /bin/df -i'

     

    alias dir='/bin/ls -ailhF | more' -----> 윈도우즈 명령어 실행 alias

    alias ipconfig='ifconfig' -----> 윈도우즈 명령어 실행 alias

    alias topas='top' -----> AIX

    alias bdf='df -h' -----> HP-UX

    alias prstat='top' -----> Solars

     

    alias nslookup='/usr/local/bin/nslookup' /* 다른 위치의 명령어 실행 */

    alias vi='/usr/bin/vim'

     

    # (c). 편리한 기능의 alias

    /*

    Webserver(Apache)

    /etc/httpd/conf/httpd.conf -----> Configuration File

    /var/www/html -----> Source Directory

    /etc/httpd/logs -----> Log Directory

    */

     

    # 설정 파일

    alias fconf='vi /etc/vsftpd/vsftpd.conf'

    alias wconf='vi /etc/httpd/conf/httpd.conf'

    alias vsftpd.conf='vi /etc/vsftpd/vsftpd.conf'

    alias httpd.conf='vi /etc/httpd/conf/httpd.conf'

    # 소스디렉토리 이동

    alias wdir='cd /var/www/html'

    # 로그파일 모니터링

    alias mlog='tail -f /var/log/messages'

    alias wlog='tail -f /etc/httpd/logs/access_log'

    alias welog='tail -f /etc/httpd/logs/error_log'

    alias slog='tail -f /var/log/secure'

    /* 실무에서 많이 사용되는 로그 파일 이름 형식 */ () file_1210.log

    # tail -f /logs/file_1210.log

    # tail -f /logs/file_`date +%m%d`.log

    # alias slog='tail -f /logs/file_`date +%m%d`.log'

    # alias slog="view /logs/file_`date --date '1 days ago' +%m%d`.log"

    # alias slog="view /logs/file_`date --date '2 days ago' +%m%d`.log"

    ---------------------------- ~/.bashrc 파일 하단에 추가 -----------------------------

     

     

     

     

    'linux > centOS' 카테고리의 다른 글

    원격 접속과 파일 전송  (0) 2018.06.18
    프로세스 관리  (0) 2018.06.17
    shell 특성 2  (0) 2018.06.15
    shell 특성 1  (0) 2018.06.14
    압축과 아카이빙  (0) 2018.06.13

    댓글

Designed by Tistory.