shell 특성 3
☆ 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 파일 하단에 추가 ----------------------------- |
/etc/profile, alias, Cent OS, centos, centos 환경 설정, 리눅스 환경 설정, 사용자 환경 초기값 설정