shell

EEEFFEE·2023년 10월 26일

리눅스 명령어

목록 보기
6/6

23.10.26 최초 작성
23.10.27 내용 추가

1. 쉘의 기능과 종류

  1. 명령어 해석

    • 사용자와 커널 사이에서 명령을 해석해 전달하는 해석 및 번역 기능
    • 사용자가 로그인하면 쉘이 자동으로 실행되어 사용자의 명령을 기다름
    • 로그인 쉘은 /etc/passwd 파일에 사용자별로 지정
    • 프롬프트 ($) : 쉘이 사용자의 명령을 기다리고 있음 나타내는 표시
  2. 프로그래밍

    • 자체에 프로그래밍 기능이 있어 반복적으로 수행하는 작업을 하나의 프로그램으로 작성 가능
    • 쉘 프로그램을 쉘 스크립트라고 함
  3. 사용자 환경 설정 기능

    • 사용자 환경을 설정할 수 있도록 초기화 파일 기능 제공
    • 명령을 찾아오는 경로를 설정, 파일과 디렉토리 생성 시 기본 권한 설정, 환경 변수 설정

2. 기본 사용법


chsh [옵션] [사용자 명]

///
사용자 로그인 쉘을 교체
-s : 지정한 쉘로 로그인 쉘 교체
-l : /etc/shells에서 지정된 쉘 출력

2.1 쉘 내장 명령

  • 쉘은 자체적으로 내장 명령을 가짐
  • 내장 명령은 실행 파일이 없고 쉘 안에 포함됨

echo [-n] [문자열]

///
화면에 한 줄의 문자열 출력
-n : 마지막에 줄바꿈 하지 않음

printf [옵션] [인수]

///
%d, \n 등 C 언어 printf의 형식을 지정

2.2 특수문자 사용

  1. * : 임의의 문자열을 나타내며 0개 이상의 문자로 대체
용례의미
ls *현재 디렉토리의 모든 서브 디렉토리를 나열
cp * /tmp현재 디렉토리의 모든 파일을 /tmp 아래로 복사
ls -F t*파일명이 t로 시작하는 모든 파일의 이름과 형식을 출력
cp *.txt ../ch3.txt파일을 ch3 디렉토리로 복사
ls -l h*dh로 시작하고 d로 끝나는 모든 파일 출력

  1. ?, [] : 하나의 문자를 나타내는 데 사용
    (?은 한 문자, []은 괄호 안의 문자 중 하나)
용례의미
ls t?.txtt 다음에 임의의 한 문자가 오고 확장자가 txt인 모든 파일의 이름 출력(t.txt 제외)
ls -t tmp[135].txttmp 다음 1, 3, 5 중 하나가 오고 확장자가 txt인 모든 파일 출력
(tmp1.txt 등 일치할경우 상세정보 출력)
ls -t tmp[1-3].txttmp 다음 1~3이 오고 확장자가 txt인 모든 파일 출력
(tmp1.txt 등 일치할경우 상세정보 출력)
ls [0-9]*숫자로 시작하는 파일명 모두 출력
ls [A-Za-z]*[0-9]영문으로 시작하고 숫자로 끝나는 파일명 모두 출력

  1. ~, - : 디렉토리를 나타내는 특수문자
    (~ : 현재 작업중인 작업자의 홈 디렉토리)
    (- : cd 명령으로 이전하기 직전의 작업 디렉토리 표시)
용례의미
cp *.txt ~/ch3txt형식의 모든 파일을 홈 디렉토리 아래 ch3에 복사
cp ~/user2/linux.txtuser2라는 사용자의 홈 디렉토리 아래 txt파일을 찾아 현재 디렉토리로 복사
cd -이전 디렉토리로 이동

  1. ;, | : 명령과 명령을 연결
    (; : 연결된 명령을 왼쪽부터 차례로 실행)
    (| : 왼쪽 명령의 실행 결과를 오른쪽 명령으로 전달)
용례의미
date; ls; pwd차례대로 명령 실행
ls -al | more루트 디렉토리의 정보를 한 화면씩 출력

  1. '', "" : 문자를 감싸 문자열로 만듦
    ('' : 모든 문자를 문자열로)
    ("" : $, '', \을 제외한 모든 문자를 문자열로)
용례의미
echo '$SHELL'$SHELL 출력
echo "$SHELL"쉘 환경변수에 저장된 현재 쉘의 종류 출력

  1. "``" : 감싼 문자열을 명령으로 해석해 실행 결과로 전환
용례의미
echo "Today is `date`"date가 명령으로 해석되어 날짜를 출력
ls /usr/bin/`uname -m`uname -m 실행 결과를 문자열로 바꾸어 파일명으로 사용

  1. \ : 특수문자 바로 앞에 위치하면 일반 문자처럼 처리
용례의미
echo $SHELL$SHELL 출력

  1. >, <, >> : 입출력 방향 바꿈
용례의미
ls -l > resls -l 명령의 실행 결과를 res 파일에 저장

3. 입출력 방향 바꾸기

3.1 표준 입출력 장치

  • 표준 입력 장치 : 쉘이 작업을 수행하는데 필요한 정보를 받아들이는 장치 (키보드)
  • 표준 출력 장치 : 실행 결과를 내보내는 장치 (모니터)
  • 표준 오류 장치 : 오류 메시지를 내보내는 장치 (모니터)

파일 디스크립터

  • 파일 관리를 위해 붙이는 일련 번호
  • 입출력 장치를 변경할 때 파일 디스크립터 사용
  • 표준입출력 장치를 파일로 바꾸는 것을 redirection이라 함
표준 입출력 장치의
파일 디스크립터
파일 디스크립터 대신
사용하는 이름
정의
0stdin명령의 표준 입력
1stdout명령의 표준 출력
2stderr명령의 표준 오류

3.2 출력 리다이렉션

  • > : 파일 리다이렉션(덮어쓰기)를 수행

set -o noclober	// 예상치 않게 파일 내용 겹쳐 쓰이는 것 방지
set +o noclober	// 해제

ls -al > out1	// 명령의 결과를 파일에 저장
date > out1		// 명령의 결과를 파일에 덮어씀

cat >> out1		// 표준 입력(키보드 입력)을 받아 파일에 기록

  • >> : 기존 파일의 내용 뒤에 결과 추가

cat out1
date >> out1	// 날짜 정보를 파일에 추가함

3.3 오류 리다이렉션

  • 출력 리다이렉션의 경우 오류 메시지를 저장하지 않음
  • 2> : 표준 오류 메시지를 파일에 저장함
    (파일 디스크립터를 생략하지 않은 형태)

ls \abc 2> ls.err	//표준 오류 리다이렉션

ls \abc 2> \dev\null 	//오류 메시지 버리기

ls . \abc > ls.out 2> ls.err	//표준 출력과 표준 오류 한번에 리다이렉션

ls . \abc > ls.out 2>&1		//표준 출력과 표준 오류 한 파일로 리다이렉션 
							//(오류 메시지를 1번 파일(&1)로 리다이렉션)

3.4 입력 리다이렉션

  • > : 표준 입력을 바꿈

cat < out1	//표준 입력을 리다이렉션 (out1의 내용을 cat에 입력)
			//(= cat out1) (= cat 0< out1)

4. bash 환경 설정

  • 쉘 변수 : 현재 쉘에서만 사용 가능하고 서브 쉘로 전달되지 않음
  • 환경 변수 : 현재 쉘에서 사용 가능하고 숴브 쉘로 전달됨

set		// 전체 변수 출력
env 	// 환경 변수만 출력

4.1 주요 환경 변수

HISTSIZE히스토리 저장 크기
PATH명령 탐색 경로
HOME사용자 홈 디렉토리의 절대 경로
PWD작업 디렉토리의 절대 경로
LANG사용하는 언어
SHELL로그인 쉘
LOGNAME사용자 계정 이름

echo $SHELL		//환경 변수 출력
SOME = test		//환경 변수 설정


export [옵션] [쉘 변수] 			//먼저 쉘 변수를 정의하고 이를 환경 변수로 변경

unset <변수>					// 지정한 옵션 해제
///
-n : 환경 변수를 쉘 변수로 바꾼다

export SOME
export SOME = test

5. 에일리어스와 히스토리

5.1 에일리어스(alias)

  • 기존의 명령을 대신해 다른 이름을 붙일 수 있는 기능

  • 긴 명령 대신 짧은 명령으로 바꾸고 여러 명령을 연결할 수 있음

  • 자주 사용하는 옵션 포함해 새로운 이름 만들 수 있음


alias 이름 = 명령		//에일리어스 생성
unalias 이름				//에일리어스 해제
///

alias					//현재 설정되어 있는 에일리어스 출력

  • 에일리어스에 인자를 전달할 수 없으며 인자를 전달하려면 프로그래밍 기능에서 함수를 사용해야 함

fucntion cdpwd{
> cd $1; pwd			//내용을 입력
}						//입력 종료

cdpwd \tmp				//$1에 전달되는 인자 \tmp

5.2 에일리어스 설정 예시


alias ls='ls -aF --color=auto'				//ls 기능 설정
alias ll='ls -aFl --time-style=long-iso'	//ls를 길게 볼 때 & time 표시 형식 설정
alias l='ls -aFlh --time-style=long-iso'	//파일 크기를 GB단위로 표시
alias ps='ps -ef'							//ps 기능 설정
alias gr='grep -rni --color=auto'			//grep 설정
alias psg='ps | grep'						//ps 실행할 때 grep도 같이 실행
alias psgt='ps=efT | grep'					//ps 실행 시 스레드 구분해서 보여 줌
alias nsg='netstat -nap | grep'				//지금 열려있는 네트워크 소켓 보여 줌

PATH=.:$PATH; export PATH					//현재 디렉토리를 환경 변수에 추가

5.2 히스토리(history)

  • 사용자가 입력한 명령을 다시 사용하는 것

  • 로그아웃할 때 홈 디렉토리의 숨김 파일 .bash_history에 저장 됨

사용법기능
!!바로 직전에 실행한 명령 수행
!(번호)히스토리에서 해당 번호에 명령 수행
!(문자열)히스토리에서 해당 문자열로 시작하는 마지막 명령 수행

history			//사용했던 명령 출력

6. 프롬프트 설정

  • 환경 변수 PS1에 새로운 형태의 문자열을 지정해 설정 함

6.1 프롬프트에서 설정 가능한 이스케이프 문자

이스케이프 문자기능
\aASCII 종소리 문자(07)
\d'요일 월 일' 형식으로 날짜를 표시(ex:'Thu May 1')
\eASCII의 이스케이프 문자로 터미널에 고급 옵션을 전달
\h첫 번째 .(마침표)까지의 호스트 이름(ex:host.co.kr에서 host까지)
\H전체 호스트 이름
\n줄 바꾸기
\s쉘 이름
\t24시간 형식으로 현재 시각을 표시(HH:MM:SS 형식)
\T12시간 형식으로 현재 시각을 표시(HH:MM:SS 형식)
\@12시간 형식으로 현재 시각을 표시(오전/오후 형식)
\u사용자 이름
\vbash 쉘의 버전
\w현재 작업 디렉터리(절대 경로)
\W현재 작업 디렉터리의 절대 경로에서 마지막 디렉터리명
!현재 명령의 히스토리 번호
[출력하지 않을 문자열의 시작 부분을 표시
]출력하지 않을 문자열의 끝 부분을 표시

PS1 = LINUX ]				//프롬프트를 LINUX로 변경 & 프롬프트의 끝을 표시하기 위해 마지막에 ']' 표시하고 공백 문자를 둠
PS1 = '[$PWD]'				//프롬프트에 현재 작업 디렉토리 출력
PS1 = '`uname -n` $ ' $ 	//명령의 실행 결과를 사용 (특수문자 ``사용, 호스트 이름 출력하도록 함)
PS1 = '[\u \T] \!$ '		//사용자 이름, 시간 출력

6.1 컬러 프롬프트 설정


PS1='\[\e[x;y;nm\] 프롬프트 \[\e[x;y;0m\]' 

///
'\[' 을 사용하지 않으면 이스케이프 문자까지 모두 카운트되어 자동 줄 바꿈이 이상하게 동작.

'\e는 터미널 제어를 알리는 이스케이프 문자

' x;y; ' 는 컬러 번호를, n은 밑줄이나 역상 표시 등 특수 기능을 나타냄

프롬프트 앞은 지정한 색상과 기능은 프롬프트의 색상과 특수 효과를
프롬프트 뒤의 색상은 원래 색상으로 돌아가기 위한 것.

프롬프트 뒤의 색상을 지정하지 않으면 이후 쉘의 모든 출력이 프롬프트의 색상과 같아짐

프롬프트 컬러글자색 번호배경색 번호
검은색3040
빨간색3141
초록색3242
갈색3343
파란색3444
보라색3545
청록색3646
하얀색3747
프롬프트 특수 기능 번호기능
0기본 색상
1볼드
4밑줄
5반짝임
7역상
10기본 폰트
38밑줄 사용 가능
39밑줄 사용 불가

PS1='\[\e[x;y;nm\] 프롬프트 \[\e[x;y;0m\]' 
PS1='\e[34mLinux $\e[0;0m'		//파란색으로 설정
PS1='\e[34;1mLinux $\e[0;0m'		//파란색, 볼드로 설정
PS1='\e[31;4mLinux $\e[0;0m'		//빨간색, 밑줄로 설정
PS1='\e[35;43m\u@\h $\e[0;0m'		//갈색 배경, 보라색 글자, '사용자 이름@호스트 이름 $'으로 프롬프트 설정

7. 환경 설정 파일

  • 사용자가 로그인할 때마다 자동적으로 실행되는 명령을 저장한 파일

  • 쉘마다 다른 이름의 파일을 사용하며 시스템 환경 설정 파일사용자 환경 설정 파일이 있음

7.1 시스템 환경 설정 파일

  • 시스템을 사용하는 전체 사용자의 공통 환경을 설정하는 파일
파일기능
/etc/profile- 본 쉘이나 호환되는 모든 쉘에 공통으로 적용되는 파일
- bash 쉘의 경우 /etc/bash.bashrc 파일을 실행
- bash 쉘이 아닌 경우 프롬프트를 #이나 $로 설정
- /etx/profiled.d/*.sh 파일 실행
/etc/bash.bashrc- 시스템 공통으로 적용되는 .bash파일
- 기본 프롬프트를 설정
- sudo 명령과 관련된 힌트 설정
/etx/profiled.d/*.sh- 언어나 명령별로 각각 필요한 환경 설정
- 필요시 설정 파일 추가

7.1 사용자 환경 설정 파일

  • 각 사용자의 홈 디렉토리에 숨김파일로 생성

  • 사용자가 내용을 수정하고 관리 가능

파일기능
~/.profile- 경로 추가 등 사용자가 정의하는 환경 지정
- .bashrc 파일이 있으면 실행
~/.bashrc- 히스토리의 크기 설정
- 기본 에일리어스나 함수 설정
~/.bash_aliases- 사용자가 정의한 에일리어스를 별도 파일로 저장
~/.bash_logout- 로그아웃 시 실행할 필요가 있는 함수 설정

source .bash_aliases		//환경 설정 파일 적용
. .bash_aliases				//환경 설정 파일 적용

시스템 초기화 파일사용자 초기화 파일실행 조건실행 시기
본 쉘/etc/profile$HOME/.profile로그인
콘 쉘/etc/profile$HOME/.profile
$HOME/.kshrc

ENV 변수 설정
로그인
로그인, 서브 쉘
$HOME/.login로그인
C 쉘/etc/profile$HOME/.cshrc로그인, 서브 쉘
$HOME/.login로그 아웃

0개의 댓글