-
shell 특성 3linux/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