본문 바로가기
서버/리눅스

리눅스와 리눅스 셸 (feat. Rocky Linux)

by 유.독 2023. 10. 9.
반응형

안녕하세요 유.독입니다!

백앤드 개발자라면, 네트워크 관리자라면 꼭 알아야 하는 리눅스에 대해 알아보겠습니다.

 

먼저 간단히 설명드리면, 유닉스 개발 이후 많은 변화를 거치며 많은 OS들이 탄생했습니다. 무료로 개발되었던 OS들이 유료화가 되기 시작하면서, 분기되어 나왔다가 유료화 된 OS들도 많이 있습니다. 현재 무료로 운영되는 리눅스계열 OS 중 가장 유명한 것은 우분투(Ubuntu), 데비안(debian), 센트오에스(CentOS)가 있고 이 중 CentOS는 실제 현업에서 서버용 컴퓨터에 많이 사용되고 있습니다.

 

 

 

하지만 CentOS 제작 중단 발표가 있었습니다.

2020년 12월, Red Hat사의 CentOS 제작 중단 발표에 반발해 CentOS의 원년 개발자 중 한 명인 그레고리 커처(Gregory Kurtzer)가 CentOS를 대체하는 리눅스 개발 프로젝트를 진행하겠다고 발표했습니다. 그 리눅스 배포판의 이름이 바로 Rocky Linux입니다. 

출처 : https://m.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS7512013046

 

그리고 그를 대체할 OS로 Rocky Linux를 주로 사용한추세입니다.

 


Rocky Linux와 Shell

shell은 사용자와 컴퓨터가 서로 소통할 수 있도록 명령어를 해석하고 관리하는 프로그램을 말합니다. 로키 리눅스는 GNOME이라는 GUI환경을 제공하는데, 터미널을 사용해서 명령어를 사용하는 것이 리눅스를 훨씬 다양하게 사용 가능하다.

 

셸 종류로는 sh, csh, tsch, ksh, bash가 있는데, 대부분의 유닉스에서 지원하는 것은 sh이고 가장 많이 사용되는 셸은 bash입니다. Rocky Linux의 기본 셸도 bash로 설정되어 있죠.

 


셸에서 사용할 수 있는 명령어

기본 명령어

명령어 출력결과 설명
date 2023. 10. 09. (월) 16:04:39 KST 현재 시간, 날짜 표시
pwd /home/username 현재 작업 디렉토리
users username 사용자 이름
help 내장 명령어 리스트 내장 명령어에 대한 설명을 알 수 있음

 

시스템 관련 명령어

명령어 출력결과 설명
echo $PATH /home/username/.local/bin:/home/ username /bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin 환경변수 목록
명령어를 바로 사용하려면, 이 목록에 해당 명령어 경로가 존재해야한다.
type -a cd cd 는 쉘 내장임
cd 는 /usr/bin/cd 임
명령어의 위치와 정보를 알 수 있다.
which cd /usr/bin/cd 명령어의 실제 디렉토리를 절대경로로 보여준다.
whereis cd cd: /usr/bin/cd /usr/share/man/man1/cd.1.gz /usr/share/man/man1p/cd.1p.gz 명령어의 실제 디렉토리와 매뉴얼 페이지가 존재하는 경우 해당 파일도  보여준다.
man cd 메뉴얼 페이지가 나오며, q를 입력하면 닫을 수 있음 명령어의 메뉴얼을 보여준다.
"man 5 passwd" 처럼 인수 5를 입력하면, 5번째 섹션부터 보여준다.

 

옵션 다루기

ls -lat
ls -l -a -t

-l은 리스트를 길게 보여주는 옵션, -a는 모든 것을 보여달라는 옵션, -t는 시간순 정렬을 의미한다. 두 위의 두 명령어는 동일하게 동작한다. 첫번째 줄 처럼 옵션을 붙여서 작성하는 것과 별도로 입력해주는 것이 동일하게 실행된다.

 

명령어 다루기

명령어 alias 만들기

명령어를 별칭으로 작성해두고 간편하게 사용할 수 있다.

명령어 설명
alias la='ls -A' ls -A 명령어를 별칭 la로 지정한다. (현재 로그인 세션에서만 유지됨)
unalias la 별칭 la를 해제한다.

 

명령 히스토리

명령 히스토리를 활용하면, 이전에 실행했던 명령어를 간편하게 수행할 수 있다.

참고로, 히스토리 관련 환경변수로는 HISTSIZE, HISTFILE, HISTFILESIZE가 있다.

명령어 출력결과 설명
history 10    43  which
   44  which cd
   45  whereis cd
   46  man cd
   47  man 5 cd
   48  man 2 cd
   49  man 1 cd
   50  man 5 passwd
   51  history
   52  history 10
명령어 실행 이력을 보여준다. 인수 10을 입력하면, 최근 10개까지만 보여준다.
!!   직전에 수행하였던 명령을 실행한다.
!n   히스토리의 목록에서 n번째 명령어 실행
!-n   n번 전에 실행 했던 명령을 실행한다.
ex) !-1은 직전명령어를 실행한다.
!string   지정 문자열로 시작하는 가장 최근 명령을 실행한다.
ex) !cd는 cd로 시작하는 가장 최근 명령을 실행한다.
!?string   지정된 문자열을 포함하는 명령 중 가장 최근의 명령이다.

 

파일 관련 기본 명령어

명령어 설명
sort [파일명] 파일 내용 오름차순 정렬
more [파일명] 파일 내용이 큰 경우 한화면을 보여주고 일단 멈춤
- 다음화면 보기 : space bar
- 다음라인 보기 : enter
- 종료 : q
more -20 +10 /etc/services => 20라인 단위로 보여주며, 10번째 라인부터 보여줌
less more의 개선된 버전
방향키나, page up, page down으로 스크롤 할 수 있다.
head 파일의 맨 앞부분 출력
head -n -5 /etc/services => 맨 앞 5줄 출력
tail 파일의 맨 뒷부분 출력
tail -f -n 20 /server/logs/catalina.out
=> 맨 뒤 20출을 출력하며, 변화하는 파일 내용을 계속 감시할 수 있음. 실시간으로 로그 볼 때 자주 사용
cat 파일내용 확인하기
cat file => 파일 내용이 전체 출력된다.

 

 


셀에서 특별한 의미를 가지는 문자

기호 이름 의미
\ 백슬래시 특수 문자( $, `, ", ',\ )의 의미를 제거하는 이스케이프 기능이 있다. 
또는 긴 명령 행을 분리할 때 사용할 수 있다.
ex) echo "he said \"hello\"" => he said "hello"
~ 틸드 ~또는  ~username은 사용자의 홈 디렉터리를 의미한다.
. 도트 현재 작업 디렉터리를 표시한다.
또는 명령행의 맨 앞에서 셀 스크립트를 실행하는 source 명령과 같다.
.. 더블 도트 현재 디렉터리의 부모 디렉터리
# 파운드 뒷 문자열을 주석으로 처리한다.
$ 달러 $변수는 변수의 값을 추출한다.
& 엠퍼센드 명령&는 명령을 백그라운드로 실행한다.
* 에스터리스크 파일 이름에서 사용할 때는 0개 이상의 임의 문자열과 대응된다.
? 물음표 파일 이름에서 사용할 때 1개 문자와 대응된다.
; 세미콜론 여러 명령어를 순서대로 실행할 때 구분을 위해서 사용한다.
| 파이프 왼쪽 명령의 출력을 오른쪽 명령의 입력으로 연결시킨다.
ex) cat /etc/passwd | sort | more
< 또는 >   입출력 리다이렉션에서, 즉 파일로부터 입력받을 때 또는 파일로 출력할 때 사용한다.

>>   표준 출력을 파일의 끝에 덧붙일 때 사용한다.

! 느낌표 명령 히스토리 기능을 이용할 때 사용한다.
[] 대괄호 파일 이름을 지정할 때 대응되는 문자의 범위를 지정한다.
ex-1) [0-5]는 0~5중 1개, [abc]는 a.b.또는 c 문자 중 1개
ex-2) a1~a10까지의 파일이 존재할 때, ls -a[0-5]명령어를 실행하면, a1, a2, a3, a4, a5 파일이 출력된다.
{} 중괄호 파일 이름을 지정할 때 대응되는 문자의 범위를 지정한다.
ex-1) {a,b,c}와 {tistory, blog, post}는 콤마로 구분되는 것 중 하나와 대응된다.

' 작은따옴표 특수문자의 의미를 제거하여, 그대로 표시한다.
ex) echo 'my name is $(users)' => my name is $(username)
" 쌍따옴표 특수문자를 의미를 해석한다.
ex) echo "my name is $(users)" => my name is username
     

 

 


입출력 리다이렉션

작업 설명
command > file 표준출력을 지정된 파일로 보낸다.
command2 > file 표준오류 출력을 지정된 파일로 보낸다.
command > file 2 > &1 표준 출력과 표준오류 출력을 지정된 파일로 보낸다.
command < file 지정된 파일을 표준입력으로 지정하여 읽는다.
command < file.in > file.out file.in을 표준 입력으로 지정하여 읽고 표준 출력을 file.out으로 내보낸다.
command >> file 표준 출력을 지정된 파일의 끝에 덧붙인다.
command 2 >> file
표준오류 출력을 지정된 파일의 끝에 덧붙인다.
command >> file 2 >& 1
표준출력과 표준오류 출력을 지정된 파일의 끝에 덧붙인다.
command << c 지정된 문자가 나올 때까지 키보드로부터 표준입력을 읽는다.
command1 | command2 앞 명령의 결과에서 표준출력을 뒤 명령으로 연결한다.
command 2 > &1 | command2
앞 명령의 결과에서 표준출력과 표준오류 출력을 뒤 명령으로 연결한다.
여기서 잠깐!  "오류 출력시 사용하는 2는 뭔가요?"

오류 출력시 명령어 2와 같은 형태로 입력하게 되는데, 이때 숫자 2는 파일디스크립터(file discriptor)를 의미한다. 파일 디스크립터는 프로세서가 파일을 다루기 위해서 사용하는 것으로, 파일을 열면 커널이 사용할 수 있는 가장 작은 파일 디스크립터(FD)값을 생성하여 프로세스에 부여한다. 이후 시스템 콜을 이용해서 파일에 접근할 때, 파일 디스크립터값을 이용한다.

기본적으로 표준입력은 0, 표준 출력은 1, 표준 에러는 2의 값을 갖고 표준입력과 표준 출력은 일반적으로 생략하여 사용한다. 

출처 : https://twofootdog.tistory.com/51

 

명령 치환 및 변수

명령 치환

ls -l $(which passwd)
ls -l /usr/bin/passwd

$()로 감싼 명령어는 먼저 실행이 되어, 명령어의 실행 결과값으로 대체된다.

 

수식과 변수의 확장

echo "I am $[2023-1995] years old."
echo "I am $((2023-1995)) years old."
> I am 27 years old.

$[] 또는 $(())를 이용하여 수식 계산 결과값을 전달할 수 있다.

echo $BASH

$를 이용하면 변수의 값을 추출하여 전달 가능하다.

 


쉘 변수

쉘 변수

NAME=RYOO
echo $NAME

해당 쉘 세션이 유지되는 동안만 사용할 수 있는 변수로, 쉘 세션이 종료되면 변수가 사라진다.

 

 

환경변수

보통 변수 이름으로 대문자를 사용한다.

printenv명령어로 모든 시스템의 모든 환경 변수 출력 가능.

export -p명령어로 현재 쉘의 모든 환경 변수 출력 가능

 

쉘 변수를 환경변수로 변경하기,  export

NAME=RYOO;export NAME
export NAME=RYOO #환경변수 등록
unset NAME #환경변수 삭제

export를 해주면 서브쉘에서 해당 변수 사용가능

환경 변수 값 확인하기

echo FOO
echo $FOO

서브쉘 사용하기

NAME=RYOO
sh #서브쉘 실행
echo $FOO
exit #서브쉘 종료

자주사용되는 환경 변수

변수 설명
HISTSIZE 1개 쉘에서 저장되는 명령 히스토리 목록의 최대 개수
default) 100
HOME 홈 디렉터리
MAIL 사용자의 메일박스에 해당하는 파일
default) /var/spool/mail/username
PATH 명령을 수행할 때 실행 파일을 찾기 위한 디렉터리 목록
PS1 셸 프롬프트를 표시하기 위한 문자열
SHELL 사용 중인 기본 쉘
PWD 현재 작업 디렉터리
USER 현재 사용자 계정

 

로그인과 셸의 환경 설정 파일

셸을 싲가할 때 수행되는 초기화 스크립트

파일 설명
/etc/profile 로그인할 때 가장 먼저 수행되는 파일로서., 로그인하는 모든 사용자에게 적용되는 스크립트이다. 루트 사용자만 변경할 수 있으며, 몇가지 전역 환경 변수를 설정한다.
~/.bash_profile 로그인 할 때 수행되며, 사용자별로 환경설정을 할 수 있다.  내부에서 ~./.bashrc를 실행한다. 여기서 설정된 변수는 셸 세션 유지시간동안만 유효하다.
~/.bashrc 로그인 후 셸을 시작할 때 수행되며 사용자별로 설정할 수 있다. 내부에서 /etc/bashrc를 수행한다.
/etc/bashrc 로그인 후 셸을 시작할 때 가장먼저 수행되며, 모든 사용자에게 적용된다. 루트 사용자만 수정가능하며 일반적인 설정을 할 수 있다.
~/.bash_logout 로그아웃 시 실행되는 스크립트다.

마무리하며

이번 포스트로 셸과 간단한 명령어를 알아보았습니다. 아직 이것만으로는 리눅스를 알았다고 하기는 어려울 것 같지만, 리눅스에 대한 기본적인 이해가 되셨으리라 생각해봅니다. 

 

감사합니다.

 


Reference

방송통신대학교 UNIX 시스템 교재

 

 

반응형