본문 바로가기
프로그래밍/리눅스

Linux CentOS7 Bash

by 참외롭다 2023. 3. 22.
반응형

Bash 는 다음과 같은 주요 기능을 제공한다.

 

명령행 완성 기능 은 명령어의 일부만 입력하고 [TAB] 키를 눌러 자동으로 명령어를 완성하는 기능이다. 입력후 실행했던 모든 명령어를 히스토리 버퍼에 저장에 스택으로 저장한다.

 

history 명령어를 입력하면 히스토리 리스트에 있는 명령어 목록이 출력된다. 또한 사용자들이 실행한 명령어들은 각 사용자의 홈 디렉토리의 .bash_history 라는 파일에 저장되며, 로그아웃할 때 메모리에 기억된 명령의 목록을 파일에 저장한다.  '!' 로 대체하여 사용할 수 있다.


# history [숫자값]

 

# 사용한 명령어를 출력한다.
$ history

# 마지막 사용한 명령을 실행한다.
$ !!

# n번째 사용한 명령을 실행한다.
$ !n

# 사용한 명령어 목록을 역으로 세어 n번째 명령어를 실행한다.
$ !-n

# 가장 최근에 사용한 명령중에 '문자열'로 시작하는 명령어를 찾아 실행한다.
$ !문자열


# 가장 최근에 사용한 명령중에 '문자열'을 포함하고 있는 명령어를 찾아 실행한다.
$ !?문자열?


# 마지막에 사용된 명령문의 '문자열1' 을 '문자열2'로 변경해 실행한다. 
$ !^문자열1^문자열2!

# .bash_history

 

.bash_history 파일은 사용자의 홈 디렉터리에 존재하면서 사용자가 입력했던 명령어들이 기록되는 파일이다. 

숨김파일이고 현재 로그인해서 내린 명령들은 로그아웃시 저장되므로 다음 로그인에서 확인할 수 있다.

[ctrl] + [r] 명령어를 활성화하고 특정문자열을 입력하면 그 문자열을 포함하는 가장 최근에 사용한 명령을 보여준다. [ENTER] 를 입력하면 실행된다.

alias  를 특정 명령어의 조합으로 지정해 놓으면 사용자가 alias를 입력 했을때  특정 명령어가 대신 실행된다.

 

# aliasname 으로 기존 명령어의 조합의 alias를 지정한다.
$ alias aliasname = '기존 명령어의 조합'


# 등록된 alias를 해제한다.
$ unalias 등록된 aliasname

# ls 만 실행 시켜도 ls -alF 명령어가 실행되도록 alias를 등록한다.
$ alias ls='ls -alF'

# c 만 입력해도 clear 명령어가 실행되도록 alias를 동록한다.
$ alias c=clear

 

# 명령행 편집기능

 

명령행 편집기능 을 통해 명령행에서 커서 이동을 빠르게 하거나, 손쉽게 삭제할 수 있다.

 

# [Ctrl] + [b] : 커서를 왼쪽으로 한 칸 이동.

# [Ctrl] + [f] : 커서를 오른쪽으로 한 칸 이동.

# [ESC] 후 [b] : 커서를 왼쪽으로 한 단어 이동

# [ESC] 후 [f] : 커서를 오른쪽으로 한 단어 이동

# [Ctrl] + [a] : 커서를 맨 왼쪽으로 이동.

# [Ctrl] + [e] : 커서를 맨 오른쪽으로 이동.

# [Ctrl] + [d] : 커서 오른쪽 한 단어 삭제

# [ESC] 후 [Backspace] : 커서 왼쪽 한 단어 삭제

# [ESC] 후 [d] : 커서 오른쪽 한 단어 삭제

# [Ctrl] + [k] : 커서 왼쪽 행 전체 삭제

# [Ctrl] + [u] : 행 전체 삭제

# [Ctrl] + [y] : 삭제 취소

# 명령 대체기능

 

명령 대체기능 을 통해 특정 명령의 결과를 다른 명령의 인자로 사용할 수 있다.

 

// passwd 명령어의 퍼미션을 확인하는 방법

// which 명령어를 통해 passwd 프로그램의 위치를 확인한다.
$ which passwd

/bin/passwd

// ls -l 명령어로 퍼미션을 확인한다.
$ ls -l /bin/passwd

// 명령 대체 기능을 활용하면 한번에 조회할 수 있다.

// ``를 사용하는 경우
$ ls -l `which passwd`

// $()를 사용하는 경우
$ ls -l $(which passwd)

# 그룹 명령 실행

 

그룹 명령 실행 을 통해 하나의 명령 행에 여러 개의 명령어를 동시에 사용할 수 있다. ; 를 사용해 명령어를 구분하면 순차적 처리가 가능하다.

&& , || 를 사용하면 앞의 명령어의 결과에 따라 다음 명령어의 실행 여부를 결정 할 수 있다.

# ; :  단순히 한 줄의 명령을 나열하기 위해 사용한다. 입력 순서대로 처리한다

# || : 논리적 OR 로 앞의 명령어의 실행 결과가 성공이면 앞의 명령어의 결과를 출력하고 실패이면 뒤의 명령어를 실행하여 결과를 출력한다.

# && : 논리적 AND 로 앞의 명령어의 실행 결과가 성공이어야만 뒤 명령어를 수행한다.


# 순차적으로 ls 명령어를 수행하고 find / -type d 의 결과를 list.txt 파일에 저장한다.
$ ls; find / -type d > list.txt

# ls 명령어의 수행 결과와 find / -type d의 결과를 모두 list.txt 파일에 저장한다.
$(ls; find / -type d) > list.txt

# pwd 를 수행하고 루트로 가 pwd 명령어를 수행하고 다시 돌아와 pwd 명령어를 수행한다(괄호 영향)
$ pwd; (cd / ; pwd); pwd

# zzang 이라는 계정이 없기 때문에 no zzang 문구가 출력된다
$ grep zzang /etc/passwd || echo 'no zzang'

# root 계정이 존제하기 때문에 계정정보가 출력된다.
$ grep root /etc/passwd || echo 'no root'

$ ls

lin.txt

# lin.txt 파일이 존재하므로 이름바꾸기를 수행하고 ls 명령어도 수행한다.
$ mv lin.txt joon.txt && ls

$ ls

joon.txt

# lin.txt 파일이 존재하지 않으므로 ls 명령어를 수행하지 않는다.
$ mv lin.txt joon.txt && ls

# 표준 입출력 제어 기능 

 

리눅스에서는 표준 입력, 표준 출력 이라는 이름의 데이터 흐름을 사용한다. 다양한 입출력장치 중 기준이 되는 입출력을 표준 입출력이라 한다. 표준 입력은 키보드이고 셸에서는 숫자값 0으로 표시한다. 표준 출력은 모니터이고 셸에서는 숫자값 1로 표시한다. 표준 에러는 에러값이 보여지는 화면을 뜻한다. 셸에서는 숫자값 2로 표시한다.


# 리다이렉션

 

리다이렉션 은 어떤 프로세스의 입/출력을 표준입/출력이 아닌 다른 입/출력으로 변경할때 사용한다. 출력 결과를 파일에 입력하거나 출력 결과를 다른 명령어의 입력값으로 쓰기위해 사용하는 기법이다.

 

# >   프로세스 출력을 표준 출력에서 다른 출력으로 변경한다
# >>  프로세스의 출력을 지정한 출력(보통 파일)에 추가한다
# <  프로세스의 입력을 표준 입력에서 다른 입력으로 변경한다.
# <<  기호 뒤에 지정한 문자열을 입력으로 받아 해당 문자열이 나오기 전까지를 표준 입력으로 삼아 해당 내용을 출력한다.

# 표준 입력인 키보드로 입력한 내용을 tmp.txt 파일에 저장한다.
$ cat > tmp.txt

# 키보드로 입력한 내용을 tmp.txt 파일의 뒷부분에 덧붙인다. 파일이 존재하지 않으면 새로운 파일을 생성한다.
$ cat >> tmp.txt

# tmp.txt 파일의 내용을 wc 명령어의 입력으로 사용한다.
$ wc < tmp.txt

# posein 사용자에게 abc.txt 의 내용을 메일로 보낸다.
$ mail posein < abc.txt

# end 라는 입력이 나오기 전까지 입력한 문자를 출력한다.
$ cat << end

# find 의 결과값을 모두 화면에 보여준다.
$ find / -name '*.txt'

# 결과값은 화면에 보여주고, 에러는 화면에 출력하지 않는다.
$ find / -name '*.txt 2>/dev/null'

# find의 결과값을 파일에 저장하고 에러는 화면에 출력한다.
$ find / -name '*.txt'>list.txt

#  결과값은 파일에 저장하고 에러는 출력하지 않고 버린다.
$ find / -name '*.txt' 2>/dev/null > list.txt

# 에러는 error.txt 파일에 저장한다.
$ find / -name '*.txt' 2>error.txt

# 결과값은 error.txt에 정상값은 result.txt에 저장한다.
$ find / -name '*.txt' 2>error.txt > result.txt

# 결과값과 에러값을 모두 data.txt 라는 한 파일에 저장한다. 
$ find / -name '*.txt' > data.txt 2>&1

# 결과값은 화면에 출력하고 에러는 error.txt에 추가한다.
$ find / -name '*.bak' >> error.txt

# 파이프(PIPE)

 

 PIPE 는 프로세스의 통신을 위해 도입된 것으로 어떤 프로세스의 표준 출력이 다른 프로세스의 표준 입력으로 쓰이게 하는 것을 말한다. `|` 기호를 사용하고 , 여러 개의 파이프를 사용하면 파이프라인을 구성하게 되면서 데이터들은 파이프라인을 따라 흐른다.

 

# 명령어1 | 명령어2

# ls 명령어의 출력이 more filter 의 입력으로 사용되어 결과가 한 화면씩 출력된다.
$ ls -alF | more

# ls 명령어의 출력이 sort를 통해 정렬되고 다시 more를 통해 한 화면씩 출력된다.
$ ls | sort | more

# 파일의 목록을 list.txt라는 파일에 기록함과 동시에 more 을 사용해 화면에도 출력 내용을 보여준다.
$ ls -l | tee list.txt | more

# 'ls -l /etc'의 결과를 현재 디렉터리 안에 etc.txt, /tmp/etc/txt로 저장하고 more 명령어로 한 페이지씩 보여준다. 
$ ls -l /etc | tee etc.txt | tee /tmp/etc.txt | more

# 'ls -l /etc'의 결과를 현재 디렉터리 안에 etc.txt로 저장하고
# /dev/pts/0 터미널로 출력하고 more 명령어로 한 페이지씩 보여준다. 
$ ls -l /ect | tee etc.txt | tee /dev/pts/0 | more

# xargs 표준 입력으로부터 값을 받아 처리하는 명령으로 보통 다른 명령어와 파이프 기호 조합으로 사용된다.
# a.txt 의 ls -l 결과를 출력한다.
$ echo a.txt | xargs ls -l

# 현재 디렉터리 이하에서 txt로 끝나는 파일이나 디렉터리를 찾아 전부 삭제한다.
$ find -name '*.txt' | xargs rm -rf

# /etc/passwd를 a.txt, b.txt라는 이름으로 하나씩 복사하고 진행과정을 출력한다.
$ echo a.txt b.txt | xargs -n 1 cp -v /ect/passwd

# 작업 제어 기능

 

작업 제어 기능 을 통해 작업을 백그라운드와 포그라운드에서 실행할 수 있다. 이 작업을 서로 전환하여 실행할 수 있다.


# 산술 연산 기능

 

expr 명령을 이용하여 산술 연산이 가능하다.

 

# expr 값 연산자 값
# [] 를 사용하면 띄어쓰기 규칙없이 좀 더 편하게 사칙연산이 가능하다.

// expr 처럼 띄어쓰기를 해도 되고, 안해도 된다. 
$ expr [3**3]
27

# bash 관련 파일 및 디렉터리

 

bash 관련 파일 및 디렉터리 를 통해 환경 변수나 alias 와 같은 휘발성 정보들을 지속적으로 이용할 수 있다.

 

/etc/profile

 

시스템 전체(모든 사용자)에 적용되는 환경 변수와 시작 관련 프로그램을 설정한다.

 

/etc/bashrc

 

시스템 전체(모든 사용자)에 적용되는 alias와 함수를 설정한다.

 

~/.bash-profile

 

개인 사용자의 환경 설정과 시작 프로그램 설정과 관련있는 파일. 로그인 시 읽어들인다. 경로, 환경 변수 등의 설정이 들어있다.

 

~/.bashrc

 

개인 사용자가 정의한 alias와 함수들이 있는 파일이다. alias를 지속적으로 사용하려면 이 파일에 설정한다.

 

~/.bash_logout

 

개인 사용자가 로그아웃할 때 수행하는 설정을 지정하는 파일이다.

 

/etc/profile.d

 

응용 프로그램 이 시작할 때 필요한 스크립트가 위치하는 디렉터리이다. 

반응형