09. 쉘 명령어 사용

prana·2023년 2월 13일
0

Linux

목록 보기
8/28

목차

1) 쉘이란?
: 쉘이란? / 쉘의 종류
2) 쉘 메타문자 사용
: 경로 이름 대체문자 / 파일 이름 대체 문자 / 인용부호 메타 문자 / 방향재지정 메타문자
3) 사용자 초기화 파일
: 사용자 초기화 파일의 종류 / 환경 변수
4) 따라學IT
: 다른 종류의 쉘 사용해보기 / 쉘 메타문자 사용해보기 / 사용자 초기화파일 설정해보기


쉘이란?

사용자가 입력한 명령어를 커널에게 번역해주는 Shell

  • 터미널에 입력한 명령을 해석하고 관리하는 프로그램을 쉘(shell)이라고 한다.
  • 쉘은 사용자 커널 사이에 연결시켜주는 역할을 하며, 사용자가 입력한 명령을 해석하여 운영체제가 해당 명령을 알아들을 수 있게 해준다.
  • 쉘은 여러 가지 종류가 있으며, 가장 많이 사용되는 쉘은 Bash(Born Again SHell)쉘이다.

  • 명령어 히스토리(history) : 이전에 쳤던 명령어를 기억해둠

  • 자동완성 : Tab 키

  • 명령행 편집 : 왼쪽 화살표로 이동해서 수정 못함

  • c쉘: 명령어 + C언어를 같이

  • ksh 콘쉘: 예전 유닉스

  • bash : 2014 bash쉘의 취약점 발견
    echo $SHELL : $ + 문자 -> 뒤에 있는 문자를 변수로 인식하여라.
    ex) SHELL=/bin/bash


    쉘 메타문자 사용

    경로 이름 메타문자

    특정한 경로를 지정해둔 경로 이름 메타문자

~ : 현재 로그인 한 사용자의 홈 디렉토리
(사용자 정보를 저장하고 있는 /etc/passwd 파일의 6번째에 설정된 디렉토리)
ex) ~bsj : 사용자의 홈디렉토리로 이동

- : 이전 작업 디렉토리 (윈도우에선 뒤로가기 느낌)
(CentOS의 Bash 쉘 기준 바로 이 전의 디렉토리만 기억)
ex) cd - , cd - 왔다갔다만 되는 것

ex) /etc/sysconfig/network-scripts/에서 /home/test_user 바로 가고 싶으면 cd -


파일 이름 메타문자

  • 파일 이름을 대체하는 파일 이름 메타 문자
  1. * : 하나 이상의 문자를 대체하는 문자, 일반적으로 전체를 의미
    (특정 디렉토리 내의 모든 파일을 지정할 때 또는 특정 이름으로 시작할 때 등 여러 가지로 활용)
    ex) rm -rf ./* <- 모든 파일이나 디렉토리. 모든 파일의 이름을 다 인식할 수 있게 됨
    ex) rm -rf test*

2) ? : 하나의 문자만 대체
ex) roota , rootb, rootc, rootab, rootac 이 중 한 글자만 달려있는 것들만 지우고 싶다고 할 때 등


인용부호 메타문자

  • Grave Accent, 작은 따옴표, 큰 따옴표
  1. `` ▷ (키보드 1 왼쪽에 있는 기호) 안에 있는 문자를 명령어로 인식하여 실행되게 한다.
  2. '' : 작은 따옴표 안에 있는 메타문자를 일반 문자로 취급한다.
  3. " " : 큰 따옴표 안에 있는 $, `, \ 문자를 제외한 나머지 문자만 일반문자로 취급
  • tip: $는 리눅스 쉘에서 변수를 사용할 때 사용하는 문자.

test abc 띄어쓰기 파일 있는데, 이런걸로 묶어줘야 한다는 것.

  1. 1번은 안에 명령어면, 실행이 된다. 내가 쓰는 문자를 명령어로써 실행하고 싶으면 묶으면 된다.
  2. 2번은 안에 안에 특수문자(메타문자)를 쓰면 일반 문자로 인식하게 됨
    ex) echo '*' 글자모양으로 인식됨
  3. 3번 : $(저장된 변수의 값을 확인할 때),
    `(안에 묶은 것을 명령어로 실행),
    (역슬래시 뒤에 있는 특수문자의 기능을 없애주는 기능) 빼고 나머지 문자만 일반 문자로 취급함.

\* : * 기능 동작. \* 기능 안하고 싶을 때는 이렇게.
역슬래시를 화면에 출력하고 싶으면? $는 기능 동작, \는 일반 문자로 인식하게 하고 싶으면?

  • \\ : 쉘 프로그래밍 할 때 많이 쓰임

쉘 메타문자 사용

  • 방향 재지정 메타문자(<,>,|)

  • 입력하는 것을 리눅스는 0으로 인식, 표준 출력(정상) : 1, 에러 메시지(권한x, 파일 없음 등) : 2번으로 인식한다. 각각의 애들을 원하는 다른 곳으로 보내줄 수 있다.

  • 기본적으로 터미널 창에서 쉘 명령어를 입력하는데(표준 입력), 표준 출력/표준 에러 로 나타내는데
    이것을 방향 재지정 메타문자를 사용해 다른 곳으로 보내줄 수 있다는 것이다.


  1. < : 표준 입력 재지정(잘 안쓴다)

  2. > : 표준 출력 및 표준 에러를 재지정, 일반적으로 명령어의 출력을 파일로 저장 또는 네트워크로 전송

  • 파일에 저장할 때 : echo "test" > ./file
    - 만약 file이라는 게 있었다라고 하면, 덮어씀, >> 으로 쓰면 이어서 쓰게 됨
    - 이러한 파일로 다른 곳으로 보내라. test라는 내용이 저장되는 것일뿐.

  • 정상적인 결과만 출력할 때 : find / -perm -4000 2 > /dev/null
    - dev : device , null : 윈도우의 쓰레기통 같은 거라고 생각하면 된다.

  • 에러 결과만 출력할 때 : find / -perm -4000 1 > /dev/null

  • 정상적인 결과는 파일에 저장, 에러는 출력 X
    : find / -perm -4000 1> ./setuid_file 2 > /dev/null
    ※ tip : >을 한 번만 사용하면 파일의 내용을 덮어씀, >>을 사용하면 기존의 파일 내용에 이어서 씀

★★★
3. | : 파이프 문자, [명령어1] | [명령어2] 처럼 사용하며, 명령어1의 결과를 명령어2의 입력으로 사용

echo ls -l : 문자 그대로 출력
echo ls -l : 명령문 실행

ex) ls /etc | grep rc ls 명령어의 결과에서 특정 문자를 포함한 라인만 뽑아 볼 때

  • ls /etc 결과 중에서 yum이 포함된 내용만 출력할 때 ls /etc | grep yum
  • ls /etc 결과가 너무 길어서 화면에 다 안나와 끌어서 보고 싶을 때 ls /etc | more

grep root /etc/passwdcat /etc/passwd | grep root가 같은 내용. 후자가 더 편하다.

  • 앞 명령어를 화면에 결과로 나타나는데, 그 중에서 root만 뽑아서 봄.
    이를 입력으로 재지정 시켜버림.

ls -al -> /etc 디렉토리 파일이 워낙 많아서 결과가 한 번에 쭉 나올 것임.

  • 한 화면 크기 : more

ls -al /etc | more 한 페이지씩 끊어서 볼 수 있다.
head -8 /etc/passwd | tail -1 : 마지막 하나만 뽑아서 8번째 줄만 나옴.

☆ 명령어와 명령어의 조합


  • grep에게 명령어가 전달됨. root 로 일치하는 것만 뽑아서 출력

사용자 초기화 파일

사용자 초기화 파일의 종류

적용되는 범위가 다른 사용자 초기화 파일

  • 기본적으로 설정이 되어 있는 곳이 사용자 초기화 파일, 한 개만 있는 게 아님
  • 가장 기본적인 것들만, 대표적인 것만.
  1. /etc/profile
    : 시스템 전역에 걸쳐 환경을 설정하는 파일, 모든 사용자가 적용되는 파일
    - ex) 모~든 사용자. 부팅이 될 때, 로그인을 다시할 때 등
  1. ~/.profile
    : 개별 사용자의 홈 디렉토리에 있는 파일, 해당 사용자의 설정을 변경할 때 사용
  1. ~/.bashrc
    : 개별 사용자의 홈 디렉토리에 있는 파일, 해당 사용자의 쉘 관련 설정을 변경할 때 사용

-2, 3번은 특정 사용자한테만 적용되는 설정 파일.

  • 환경 변수, 쉘 프롬프트 모양(명령어 앞에 붙는 내용, 이것도 사실 환경변수임), 별명 기능(alias) , 쉘 옵션 정의 등 설정 가능 ,
  • umask도 이 파일 안에 적용되어 있음

사용자 초기화 파일 - 환경 변수

시스템 환경에 대한 정보를 저장하는 환경 변수

  • 변수란? 변하는 값. 무언가의 저장 공간에 저장할 수 있다는 것.
  • 환경 변수란? 시스템 환경에 대한 설정을 저장하고 있는 변수
    - 시스템의 환경을 저장해두는 값. 단순히 1, 2가 아니라 시스템의 환경.

  • HOME : 사용자의 홈 디렉토리

  • PATH : 실행파일을 찾는 경로
    - ex) Tomcat 서버 설치

  • LANG : 프로그램 사용 시 기본 지원되는 언어

  • SHELL : 로그인해서 사용하는 쉘

  • EDITOR : 기본 편집기의 이름

  • PS1 : 명령프롬프트 변수
    - 프롬프트 모양을 나타내는 것. 모양을 바꿀 수 있음 [user@localhost ~]$

    • 환경을 설정

./파일명 <- 현재 디렉토리 (이 파일이 있는 곳에서)

  • 명령어를 절대경로로 실행하지 않음. 이름으로 침.

  • ls, cd, mkdir 실행을 해야 하는데,

  • 경로들을 일일이 외울 수 없으니, 환경변수에 등록된 경로에서 실행 파일들의 위치를 찾게 되는 것이다.


따라學IT

  1. 다른 종류의 쉘 사용해보기
  • 현재 사용중인 bash 쉘이 아닌 다른 쉘 사용해보기
  1. 쉘 메타문자 사용해보기
  • 다양한 쉘 메타문자를 각 용도에 맞게 사용해보기

$, `, \ 세가지는 특수 문자로 인식하게 한다.

test 파일은 들어있지 않다. 큰 따옴표일 때 특수문자로 인식하여, ls 명령어가 실행이 되었다.

  • 쉘 프로그래밍 할 때 유용하게 쓰인다. 윈도우에서는 배치 프로그래밍이라고 부른다.
  1. 사용자 초기화 파일 설정해보기
  • 사용자 초기화 파일에 환경 변수를 설정하여 여러 가지 설정 변경해보기

내용 정리

  • < : 표준 입력 재지정(잘 안나옴)

  • > : 표준 출력 및 표준 에러를 재지정, 일반적으로 명령어의 출력 결과를 파일로 저장하거나, 네트워크로 전송 하여 파일에 저장할 때 : echo "test" > ./file
    - 정상적인 결과만 출력할 때 : find / -perm -4000 2> /dev/null
    - 에러 결과만 출력할 때 : find / -perm -4000 1> /dev/null
    - 정상적인 결과는 파일에 저장하고 에러는 출력하지 않을 때 : find / -perm -4000 1> .setuid_file 2>

  • | : 파이프문자, [명령어1] | [명령어2] 처럼 사용하며, 명령어1의 결과를 명령어 2의 입력으로 사용
    ex) ls /etc/ | grep rc : ls 명령어의 결과에서 특정 문자를 포함한 라인만 뽑아볼 때
    - ls /etc 결과 중에서 yum 이 포함된 내용만 출력할 때 : ls /etc | grep yum
    - ls /etc 결과가 너무 길어서 화면에 다 안나와 끌어서 보고 싶을 때 ls /etc | more

  • cut -d":" -f1(몇 번째) passwd : 열로 자름

  1. 사용자 초기화 파일
    1) /etc/profile : 시스템 전역에 걸쳐 환경을 설정하는 파일. 모든 사용자가 적용되는 파일
    2) ~/.profile : 개별 사용자의 홈 디렉토리에 있는 파일, 해당 사용자가 설정을 변경할 때 사용하는 파일
    3) ~/.bashrc : 개별 사용자의 홈 디렉토리에 있는 파일, 해당 사용자가 쉘 관련 설정을 변경할 때 사용하는 파일
    - 쉘 프롬프트 모양(명령어 앞에 붙는 내용)
    - 별명 기능 (alias)
    - 쉘 옵션 정의

0개의 댓글