스터디 : 리눅스 커맨드라인 쉘 스크립트 바이블 3장

호밀빵 굽는 쿼카·2022년 7월 21일
0

목차

1) 기본 bash 쉘 명령어

2) 파일시스템 구조

3) 파일,디렉토리 목록

4) 파일,디렉토리 관리

5) 파일 내용 보기

쉘 시작하기

  • GNU bash 쉘 : 대화형, 리눅스 시스템에 접속할 수 있는 프로그램
  • 쉘은 기본적으로 사용자가 단말기에 로그인할때마다 실행됨
  • 쉘은 사용자 ID의 구성에 따라 달라짐

/etc/passwd 파일 : 모든 시스템 사용자 계정의 목록이 각 사용자에 대한 몇가지 기본 구성 정보와 함께 포함되어 있음

christine:x:501:501:Christine Bresnanhan:/home/christine:/bin/bash

  • 콜론으로 구분되는 일곱개의 데이터 필드
  • 시스템은 필드 데이터를 해당 사용자에 관련된 특정 기능에 활용
  • /etc/passwd 에서 사용자 christine은 기본 쉘 프로그램으로 /bin/bash를 설정 = christine이 리눅스 시스템에 로그인 할 때마다 bash 쉘 프로그램이 자동 실행


쉘 프롬포트 사용하기

centos 리눅스 시스템
[christine@server01 ~]$ : christine(사용자)/server01(시스템)



bash 설명서와 상호작용하기

man

man : 리눅스 시스템에 저장된 설명서 페이지에 접속 가능
man [특정명령이름] : 특정 명령어 설명서 항목 접속 가능 ex) man xterm
space bar click : 페이지 단위 검색
enter key click : 한줄 단위 검색
q : man 페이지 종료
man 1 hostname : hostname 명령어에 대한 섹션 1 man 페이지 접속 가능
man 1 intro : 섹션 1 내용 영역 자체에 대한 안내글 읽어볼 수 있음

man 페이지의 명명 표준

  • name / synopsis : 명령 구문 보여줌 / configuration : 구성 정보 안내 / description / options / exit status / return value / errors / environment / files / versions / conforming to : 준수하는 표준 안내


파일시스템 탐색하기

리눅스는 가상 디렉토리라고 하는 단일 디렉토리 구조 안에 파일을 저장

/home/Rich/Documents/test.doc

  • test.doc 파일이 home 디렉토리 아래의 Rich 디렉토리 아래의 Documents라는 디렉토리 안에 있음
  • 파일이 저장돼있는 물리적 디스크에 관한 어떤 정보도 제공하지 않음

공통적 리눅스 디렉토리 이름

  • /
  • /bin : 바이너리 디렉토리, 많은 사용자 수준 GNU 유틸리티 저장
  • /boot : 부팅 디렉토리, 부팅 파일 저장
  • /dev : 장치 디렉토리
  • /etc : 시스템 구성파일 디렉토리
  • /home : 홈 디렉토리, 리눅스가 사용자 디렉토리를 만드는 장소
  • /lib : 라이브러리 디렉토리
  • /media : 미디어 디렉토리
  • /mnt : 마운트 디렉토리
  • /opt : 옵션 디렉토리
  • /sbin : 시스템 바이너리 디렉토리
  • /tmp : 임시 디렉토리, 임시 작업 파일 만들고 없앨 수 있음
  • /usr : 사용자 바이너리 디렉리
  • /var : 변수 디렉토리/시스템에서 사용되는 가변적인 파일들이 저장

공통적 리눅스 디렉토리의 이름은 파일시스템 계층 표준(FHS)을 기반으로 함

cd

  • 디렉토리 이동, cd 만 입력 시 홈 디렉토리로 이동
  • 절대 경로 / 상대 경로
  • ../ : 부모 디렉토리
  • ./ : 현재 디렉토리
  • cd - : 이전 디렉토리로 이동

pwd

  • 현재 작업 디렉토리 표시


파일 및 디렉토리 목록 보기

ls

  • 현재 디렉토리에 있는 파일과 디렉토리 표시

ls -F

  • 디렉토리는 [디렉토리이름]/
  • 파일은 [파일이름]
  • 실행파일은 [실행파일이름]*

ls -a

  • 파일+디렉토리+숨겨진파일 표시

ls -R

  • 하위 디렉토리까지 표시

ls -F -R

  • 현재 디렉토리의 하위 디렉토리(-R)에 포함된 파일(-F)까지 보여줌

ls -l

  • 각 파일+디렉토리의 자세한 정보 제공
  • 디렉토리(d)/파일(-)/링크된파일(I)/캐릭터장치(c)/문자장치(b)

ls -l [파일이름]

  • ex) ls -l my_script 입력 시, 해당 문자열과 일치하는 파일 목록 출력
  • ex) ls -l my_scr?pt 입력 시, 물음표위치를 제외하고 해당 문자열과 일치하는 파일 목록 출력
  • ex) ls -l my*
  • ex) ls -l my_s*t 입력 시, *(문자열) 제외하고 해당 문자열과 일치하는 파일 목록 출력
  • ex) ls -l my_scr[ai]pt 입력 시, []안에 a/i 중 하나이면 패턴이 일치한다고 판단
  • ex) ls -l f[a-i]ll 입력 시, []안에 알파벳 a~i 중 하나이면 패턴이 일치한다고 판단
  • ex) ls -l f[!a]ll 입력 시, a 가 아닌 것들 중 하나이면 패턴이 일치한다고 판단

ls -d

  • 지정경로 최상위 디렉토리만 표시

더 자세한 리눅스 명령어 모음



파일 다루기

파일 생성

파일 생성 touch test_one
(파일 수정 시각을 변경하기 위해 쓸 수도 있음! 원래 생성되어있는 상태의 파일에서 touch test_one만 해주면 됨)

파일 사용시각을 확인하려면 ls -l --time=atime test_one

파일 복사

  • 기본
    cp test_one test_two
  • 파일이 이미 있는 경우 파일을 덮어쓸 것이지 물어보는 옵션 사용
    cp -i test_one test_two
  • 이미 존재하는 디렉토리에 파일 복사
    cp -i test_one /home/christine/Documents/
  • . 사용으로 현재 디렉토리에 파일 복사
    cp -i /etc/NetworkManager/NetworkManager.conf .
  • 특정 디렉토리 아래의 파일 복사(동시에 복사된 디렉토리 및 파일 생성된 것)
    cp -R Scripts/ Mod_Scripts
    ls -Fd *Scripts => Mod_Scripts/ Scripts/
  • 와일드카드 메타문자 사용
    cp *script Mode_Scripts/
    script로 끝나는 모든 파일을 Mod_Scripts로 복사

탭 완성 기능 활용

  • 긴 이름 -> 탭을 누르면 자동완성

파일 링크하기

  • 심볼릭 링크
    ln -s data_file sl_data_file : sl_data_file이 data_file에 심볼릭 링크로 연결되어있음
    ls -i *data_file로 이들의 inode 번호를 확인해서 물리적으로 분리되어있다는 사실을 알 수 있음

  • 하드 링크
    ln data_file sl_data_file
    원파일에 대한 정보 및 그 파일이 어디에 있는지를 포함하고 있는 별개의 가상 파일을 만듬
    하지만 ls -i *data_file로 이들의 inode 번호를 확인해보면 하드링크는 물리적으로 같은 파일임

파일 이름 바꾸기

  • 파일 이름 fall > fzll 변경 mv fall fzll
  • fzll 파일 위치 /home/christine > /home/christine/Pictures 변경
    (더이상 /home/christine에는 fzll 파일 없음) mv fzll Pictures/
  • 파일 이름과 위치 동시에 변경
    mv /home/christine/Pictures/fzll /home/christine/fall
  • 전체 디렉토리와 내용 옮기기도 가능

파일 지우기

  • rm -i fall : 파일을 삭제할 것인지 확인 후 삭제
  • rm -i f?ll : f?ll 에 해당하는 파일들을 삭제할 것인지 모두 확인 후 삭제
  • rm -f fall : 파일을 삭제할 것인지 확인하지 않고 바로 삭제 [주의]


디렉토리 관리하기

디렉토리 만들기

  • mkdir New_Dir
  • 여러디렉토리 및 하위 디렉토리 동시에 만들기
    mkdir -p New_Dir/Sub_Dir/Under_Dir

디렉토리 지우기

  • rmdir New_Dir : New_Dir 디렉토리가 빈 디렉토리 일때만 가능
    => 따라서 디렉토리를 제거할 것인지를 묻는 -i 옵션이 없음
  • 디렉토리를 삭제하려면, 그 안의 파일부터 삭제
    rm -i New_Dir/my_file
    rmdir New_Dir
  • 비어있지 않은 디렉토리 전체에 rm 명령어 사용(지워야할 파일과 디렉토리가 많을때 사용)
    rm -ri New_Dir
    파일/디렉토리 삭제할것인지 모두 확인 후 삭제
  • 파일/디렉토리 삭제할것인지 모두 확인 후 삭제하는 일이 번거롭다면,
    rm -rf New_Dir
    하지만 경고+알림 없어 위험하고 특히 슈퍼유저 권한의 상태라면 더 위험


파일 내용 보기

파일 유형보기

  • 텍스트 파일 : file my_file
    my_file: ASCII text => 파일이 텍스트를 포함하고 그 텍스트 파일의 문자 코드 형식이 ASCII라는 것 판단
  • 디렉토리 : file New_Dir
    New_Dir: directory => 파일이 디렉토리라는 것을 판단
  • 심볼릭 파일 : file sl_data_file
    sl_data_file: symbolic link to 'data_file' => 어떤 파일에 심볼릭 링크되어있는지 판단
  • 스크립트 파일 : file my_script
    my_script: Bourne-Again shell script, ASCII text executable => file 명령이 어떤 결과를 알려주는지 보여줌
  • 바이너리실행 파일 : file /bin/ls
    /bin/ls: ELF 64-bit LSB executable ~~ => 프로그램이 컴파일된 플랫폼, 어떤 종류의 라이브러리가 필요한지를 판단

파일 전체를 보기

  • cat test1 : 내용 보여줌
  • cat -n test1 : 줄번호를 붙여줌
  • cat -b test1 : 텍스트가 있는 줄에만 번호를 붙여줌
  • cat -T test1 : 탭 문자가 표시되는 것을 원하지 않는다면 사용
    탭 = ^I 로 표시
  • (추가참고) 로그 파일 내용만 삭제 : cat /dev/null > [파일명]

    로그파일은 되도록이면 안지우고 남겨두는것이 좋습니다

    • cat > [파일명]으로 덮어씌우는 것으로 사용하기
    • cat >> [파일명]으로 내용추가하는 것으로 사용하기

리눅스 log rotate 설정이란?

운영 및 유지보수를 위해 log를 기록하는 것은 당연히 요구되는 기능
linux에서 구동되는 application에서 log file에 대한 관리(rotate, delete)를 따로 구현하고 싶지 않다면 logrotate라는 데몬을 활용하여 쉽게 rotate와 삭제 관리가 가능하다.
log rotate 에 대한 자세한 내용 블로그 링크

  • more [파일이름] : 데이터의 각 페이지를 표시한 후 멈춤
    spacebar/enter 등 을 사용해서 페이지 이동
  • tail -n 2 log_file : log_file의 마지막 2줄 출력
  • tail -f log_file : 다른 프로세스가 파일을 쓰고 있을 때에도 파일의 내용을 들여다볼 수 있음 => 모니터링하기 좋은
  • tail -F : 파일 변동 시 실시간으로 보여주되 로그파일처럼 특정 시간이 지난 후 파일이 변하게 되면 새로운 파일을 오픈하여 보여줌(다시 명령 실행할 필요가 없음)
  • tail -200f : 파일의 마지막 200줄을 실시간으로 계속 출력
  • head -5 log_file : log_file의 첫 5줄 출력

참고링크

profile
열심히 굽고 있어요🍞

0개의 댓글