쉘 변수/파일시스템

쉘 변수/파일시스템

쉘 변수

지역변수

  • 현재 쉘에만 사용 가능한 변수

환경변수

  • 시스템 전체에서 사용 가능한 변수

변수 확인

  • set: 모든 변수와 함수를 조회
  • env: 환경 변수만 조횧
  • echo $변수: 변수의 값 출력

변수 생성 및 수정

  • 변수명=값

  • 있으면 수정, 없으면 생성

  • 지역 변수를 환경 변수로 수정 export 사용

  • 환경변수 지역변수로 수정: export -n 변수명

  • unset 변수명

    • 변수삭제
  • 변수에 내용 추가

    • 변수명=$변수명:내용
  • 환경 변수를 전역에 등록

    • 사용자의 홈 디렉토리의 .bashrc 파일에 환경 변수를 등록해두면 재부팅 할 떄도 환경 변수의 값을 사용 가능
    • 사용자 홈 디렉토리의 .bashrc는 사용자가 로그인 할 때 읽어서 설정을 하는 파일
    • alias나 export를 이용해서 환경변수 만들면 로그인 할 때마다 적용
    • 일반 환경변수를 만들면 다른 곳에서 사용할 수 있도록 만들어지지만 재부팅을 하면 내용이 소멸
    • 재부팅을해도 내용을 유지시키려면 .bashrc파일에 등록을 해야 함

쉘 변수 사용

  • 내장 명령어는 쉘 변수 사용 가능하지만 외부 명령어는 쉘 변수 사용 불가
  • 리눅스 버전에 따라서는 외부 명령어에서 쉘 변수를 사용 가능하도록 해주는 것도 있음, 최신 버전의 리눅스에서는 외부 명령어에서도 쉘 변수 사용이 가능
DIR=/tmp
cd $DIR
/tmp$
  • 제공하는 환경 변수
    • PATH: 실행 파일(명령어)를 찾는 위치
    • PWD: 현재 작업 디렉토리의 절대 경로

환경 설정 파일

  • 시스템 환경 설정 파일->/etc 디렉토리에 존재
  • 종류
/etc/profile # 모든 쉘에 공통으로 적용되는 환경설정파일
/etc/bash.bashrc # 공통으로 적용되는 bashrc
/etc/profile.d/*.sh # 언어나 명령별로 각각 필요한 환경을 설정

유저별 환경 설정 파일

  • 유저의 홈디렉토리에 존재(~, /home/계정)
  • 종류
~/.profile # .bashrc가 있는 경우에만 수행되는데 사용자가 정의한 환경설정파일
~/.bashrc # 히스토리크기나 환경변수 또는 별명이나 함수
~/.bash_logout # 로그아웃 할 때 수행할 내용
~/.bash_aliases # 별명설정

읽는 순서

  • 시스템이 부팅될 때 시스템 환경 설정 파일을 읽어서 설정을 하고 사용자가 로그인을 하면 사용자의 환경설정 파일을 읽어서 환경 설정 수정을 한 상태로 로그인
  • 로그인을 한 후 환경 설정을 변경하면 변경한 환경 설정이 적용

적용

  • 시스템을 재부팅하거나 로그인을 다시 하면 적용되는데 재부팅이나 로그인을 하지 않고 적용하고자 하는 경우는 source 환경설정파일경로 명령을 수행
source ~/.bash_aliases
source ~/.bash_logout

덮어쓰기 방지

  • 기존의 파일이 존재하는 경우 덮어쓰지 않도록 설정
set -o noclobber # 덮어쓰기 방지
set +o noclobber # 해제

파일 시스템

  • 유닉스나 리눅스에서 시스템과 관련된 정보와 하드웨어 같은 장치를 모두 파일로 관리
  • 파일은 운영체제가 관리
  • 프로그램에서 파일을 생성했더라도 파일 관리는 운영체제가 함
  • 프로그래밍을 할 때 외부 자원을 사용하는 경우는 특별한 경우가 아니면 예외처리를 해줘야 함
  • 외부 자원에 해당하는 것들은 파일, 네트워크, 데이터베이스가 대표적
  • 리눅스는 물리적으로 여러 개의 하드디스크를 사용하더라도 하나의 루트 디렉토리를 가짐
  • 디렉토리와 장치도 하나의 파일로 간주
  • 계층적 디렉토리 구조

파일 종류

  • 일반 파일
    • 일반적인 파일: 문서파일, 바이너리파일, 기타파일
  • 디렉토리: 파일을 구조적으로 관리하기 위해 사용위한 파일
  • 링크: 복제본이나 바로가기를 위한 파일
    • 하드링크: 복제본
    • 소프트링크: 바로가기
  • 장치: 하드디스크나 키보드같은 장치를 관리하기 위한 파일
    • 대부분 /dev 디렉토리에 존재
  • 파일 종류 확인: file 명령으로 확인 가능
file .profile
file Downloads
file /bin/bash

디렉토리와 파일관리

  • 우분투 파일 시스템은 파일과 디렉터리의 계층형 구조(대부분의 운영체제는 계층형 구조)
  • 리눅스는 최상위 디렉터리(루트 디렉터리)가 1개
  • 윈도우즈는 물리적인 디스크를 여러개 장착하거나 논리적으로 하나의 디스크를 분할하면 여러개의 루트(드라이브) 생성
  • 리눅스는 물리적인 디스크 여러개를 하나의 루트에서 제어 가능
  • 리눅스에서 디스크 분할 후 맵-리듀스 가능
  • 작업 디렉터리: 현재 사용하고 있는 디렉터리
    • pwd 명령어, 환경변수 PWD가 절대경로 저장, . 으로 나타냄
  • 상위 디렉터리: ..
  • 루트 디렉터리는 /
  • 홈 디렉터리: 사용자 별 디렉터리
    • /home/계정명
    • ~ 로 표시
  • 루트에 기본적으로 제공되는 디렉토리
    • ls -aF / => /로 끝나면 디렉터리, @가 붙은 것은 링크
    • bin과 lib 디렉터리는 유닉스 초창기부터 있었던 디렉터리로 지금은 /usr/bin과 /usr/lib로 변경되었는데 명령어 호환성 유지를 위해 심볼릭 링크로 만들어 제공
  • /dev: 디바이스 파일이 배치되어 있는 디렉터리
  • home: 사용자 디렉터리
  • /etc: 리눅스 설정 파일이 위치하는 디렉터리
  • /opt: 추가 패키지가 설치되는 디렉터리
  • /root: root계정이 사용하는 디렉터리
  • /sys: 리눅스 커널과 관련있는 파일이 저장되는 디렉터리
  • /usr: 기본 실행 파일과 라이브러리 파일 그리고 헤더 파일이 저장되는 디렉터리
  • /boot: 부팅과 관련된 파일
  • /lost+found: 파일 시스템에 문제가 발생해서 복구할 경우 문제가 되는 파일이 저장되는 디렉터리
  • /mnt: 파일 시스템을 임시로 마운트하는 디렉터리
  • /proc: 프로세스 정보가 저장되는 디렉터리(PCB)
  • /run: 실행중인 서비스와 관련된 파일이 저장되는 디렉터리
  • /srv: FTP나 Web 등 시스템에서 제공하는 서비스의 데이터가 저장되는 디렉터리
  • /tmp: 임시 디렉터리로 모든 사용자가 읽고 쓰기 가능
    • 재시작하면 디렉터리의 내용이 모두 삭제될 수 있음
  • /var: 시스템 운영 중에 발생하는 데이터나 로그를 저장하는 디렉터리

절대 경로와 상대 경로

  • 절대 경로는 루트로부터의 경로로 하나만 존재
  • 상대 경로를 현재 위치로부터의 경로, .과 ..을 이용해서 표시

파일의 구성 요소

  • 리눅스에서는 파일을 저장할 때 파일이름 그리고 i-node 그리고 데이터 블록으로 나누어서 저장
  • 파일 이름은 절대 경로의 형태로 만들어지고 이 파일 이름은 파일에 대한 정보를 저장한 i-node를 가리키고 i-node가 파일을 실제 저장한 데이터 블록을 가리킴
  • 여러 개의 파일 이름이 동일한 i-node를 공유할 수 있음
  • 파일이름
    • 유일무이
    • 리눅스나 유닉스에서 .으로 시작하면 숨김파일
  • I-node
    • 파일에 대한 정보를 저장
    • 파일의 종류, 파일의 소유권, 파일의 액세스 모드, 파일의 타임 스탬프, 실제 저장 위치 등을 저장
  • 데이터 블록
    • 파일의 내용이 연속적으로 저장, 블록에서 구분 불가
    • I-node에 파일에 대한 데이터 블록의 연속적 내용을 구분

디렉터리 관련 명령어

  • pwd: 현재 디렉터리 절대 경로 확인
  • cd: 디렉터리를 생략하거나 ~을 사용하면 현재 작업 디렉터리 이동
    • 탭 키를 이용한 자동완성 가능
  • ls: 디렉터리의 내용을 출력하는 명령
    • ls [옵션] [디렉터리 나 파일]

    • 디렉터리를 생략하면 현재 디렉터리

    • 디렉터리 대신에 파일 설정하면 파일이름출력, 이를 이용해 파일 존재여부 확인

    • 옵션 a: 숨김 파일도 출력 d: 디렉터리 자체 정보 출력 i: I-node 번호 출력 l: 파일의 상세 정보 A: .과 ..를 제외하고 출력 F: 파일의 종류를 출력(*은 실행파일 /는 디렉터리 @는 심볼릭링크) L: 심볼릭 링크의 경우 원본 파일의 정보를 같이 출력 R: 하위 디렉터리까지 같이 출력

    • 상세정보보기

      • 첫번쨰는 종류
      • d: 디렉터리
      • l: 심볼릭링크
      • b: 블록 장치
      • c: 문자 장치 파일
      • p: 파이프 파일
      • s: 소켓 파일
      • 9개의 문자: 권한
        • rwxrwxrwx: 소유자, 소유자가 속한 그룹, 기타 사용자에 대한 읽기, 쓰기, 실행 권한
      • 그 다음 블록에 나오는 숫자: 하드 링크의 개수(디렉터리는 기본2(. 과 ..))
      • 다음 블록에 나오는 문자열: 소유자
      • 다음 블록에 나오는 문자열: 소유자가 속한 그룹
      • 다음 블록에 나오는 숫자: 파일의 크기, 디렉터리는 4096
      • 다음 블록에 나오는 문자열: 마지막 수정 날짜
      • 다음 블록에 나오는 문자열: 이름
    • 디렉터리 자체 정보를 확인하고자 하는 경우 dl옵션 사용

    • dir과 vdir 명령도 제공: windows와 호환성 떄문

  • mkdir

    • 디렉터리를 생성하는 명령
    • 디렉터리에 쓰기 권한이 있는 경우에만 생성이 가능
    • 옵션으로는 p가 있는데 p는 중간 디렉터리가 없는 경우 자동 생성
  • rmdir

    • 디렉터리를 삭제하는 명령
    • 하위 디렉터리가 있으면 삭제를 못함
    • p옵션을 이용하면 상위 디렉터리가 비어있는 경우 하위 디렉터리도 삭제

파일 관련 명령어

cat

  • 텍스트 파일 출력 명령
  • 문서가 크면 스크롤 기능을 제공
  • 여러 개의 파일을 동시에 출력 가능
  • 파일을 지정하지 않으면 키보드 입력 내용을 그대로 출력
  • n 옵션 이용해서 행 번호 출력 가능
  • /etc/hostname 이라는 파일이 존재

more

  • 화면 단위로 텍스트 파일 출력
  • 스페이스 바를 이용해서 다음 페이지로 전환, q누르면 중단
  • /문자열 입력하면 해당 문자열 검색 가능
  • +숫자 를 이용하면 시작할 행 번호를 설정 가능
  • 스크롤 기능 없음
  • ex) /etc/services 파일 읽기

less

  • more 개선
  • 아래 위 방향키로 화면이동 가능하도록 함
  • 지금 버전 more에서도 이 기능 제공

head/tail

  • 앞의 몇 개의 행이나 뒤의 몇 개의 행을 읽고자 할 때
  • tail 명령에 -f 옵션 사용하면 파일의 내용 변경될 때 자동으로 계속 출력

cp

  • 파일을 복사하는 명령
  • 형식: cp [옵션] 원본파일경로 복사될파일경로
  • 복사될 파일 경로에 파일이 존재하면 덮어씌움
  • 옵션 i: 파일이 존재하는 경우 덮어씌울 것인지 r: 디렉토리를 복사할 때 사용
  • 여러개의 파일을 하나의 디렉토리로 복사가 가능, 이 경우에는 마지막에 있는 경로가 디렉토리
  • 파일을 복사할 때 복사될 파일 경로에 디렉토리만 기재하면 동일한 파일 이름으로 복사가 됨

rm

  • 파일이나 디렉토리를 삭제하는 명령어
  • 옵션 i: 대화식으로 물어보면서 삭제 r: 재귀적으로 삭제
  • 종종 rm -i 를 rm 명령으로 별명을 붙여서 사용하는 경우가 있음

mv

  • 파일이나 디렉터리를 이동할 때 사용하는 명령어
  • 사용하는 방식은 cp와 동일
  • 이름을 변경하는 것도 가능, 디렉터리 대신 변경할 이름 입력

file: 파일의 종류를 출력

ln: 링크를 생성하는 명령

  • 형식: ln [옵션] 원본파일경로 링크파일경로
  • 일종의 파일에 별명을 붙이는것과 유사
  • 사용이유: 긴 경로를 짧게 만들기 위해
  • 여러 버전의 프로그램이 존재하는 경우 이름 구분 위해

하드 링크

  • 파일 원본에 이름을 여러 개 붙이는 것과 동일한 효과
  • 만들 때 옵션 없이 생성
  • cp시 새로운 I-노드 블럭 생성
  • ln시 똑같은 I-노드 블럭 생성
  • rm시 각각 삭제
  • I-노드는 참조하는 노드가 없으면 삭제
  • 디렉터리는 하드링크를 만들 수 없음
  • 서로 다른 디스크에 걸쳐서 만들 수 없음

심볼릭 링크

  • 윈도우의 바로가기 아이콘과 유사
  • 디렉터리에도 생성 가능하고 다른 디스크에도 생성 가능
  • 원본 파일에 대한 정보가 담긴 특수 파일이며 원본과는 구분(별도의 I-node소유)
  • 심볼릭 링크를 삭제하는 것은 원본에 아무런 영향이 없지만 원본이 지워지면 심볼릭 링크는 깨짐
  • 만드는 방법은 링크를 만들 때 -s 옵션 추가

find

  • 파일을 검색하기 위한 명령어 find [디렉토리 경로] [검색조건]
  • 검색조건: name 파일명 type 파일종류 user 유저명 perm 접근권한 find /tmp -name a.txt
  • 동작: exec 명령 : 검색된 결과에 명령을 수행 ok 명령 {} : 사용자의 확인을 받아서 명령을 수행 print: 검색된 파일의 절대 경로명을 화면에 출력 ls: 긴 목록 형식으로 출력

locate

  • 파일이나 디렉토리를 검색하는 명령
  • 기본 명령이 아니라서 설치해서 사용
  • 파일이나 디렉터리를 데이터베이스화 해서 검색을 하기 때문에 검색 속도가 빠름
  • 검색 옵션이 한정적이고 데이터베이스를 업데이트 하지 않으면 업데이트 이후의 정보는 사용할 수 없음
  • 검색 위주인 경우는 locate가 유용하고 검색한 결과를 가지고 작업을 수행하는 경우는 find가 유용
  • 정규표현식도 사용 가능

파일 접근 관리

  • 다중 사용자 시스템은 사용자의 파일에 마음대로 접근 못 하도록 보안 기능 제공
  • 접근 권한은 파일이 가지고 있는 속성 중 하나 파일의 접근 권한을 확인할 떄는 ls에 l 옵션을 이용해 상세히 정보를 출력하면 됨

권한 종류

  • 읽기

    • 파일의 경우는 읽거나 복사 가능
    • 디렉터리의 경우는 ls 명령으로 목록은 볼 수 있지만 나머지 옵션은 실행 권한이 있어야 함
  • 쓰기

    • 파일은 수정, 이동, 삭제가 가능
    • 디렉터리의 경우는 파일을 생성하거나 삭제할 수 있음
  • 실행

    • 파일은 실행이 가능
    • 디렉터리의 경우 cd 명령어 사용 가능
  • 표기 방법

    • 권한이 있는 경우 r, w, x로 표기 하고 권한 없는 경우 -로 표시
    • 소유자, 소유자가 속한 그룹, 기타 사용자 이렇게 3개 카테고리로 표시
    • 숫자로 표기, 실제 저장이 될 때는 이진수로 변환이 되서 저장되야 하기 때문에 권한 수정할 때나 외부에 표기할 때 숫자로 표기
    • 각 카테고리를 8진수로 표현해서 표기
    • rwx r-x rw- 111 101 110 7 5 6
  • 접근 권한 변경

    • chmod [옵션] 변경할파일경로
    • 옵션으로 R
    • chmod 카테고리문자 연산자기호 접근권한 파일경로
    • 카테고리 문자 u: 소유자 g: 소유자가속한그룹 o: 기타 a: 전체
    • 연산자 기호 +: 권한 부여 -: 권한 회수 =: 권한설정 chmod g+wx access.txt
    • 숫자로 설정하는 경우 chmod 8진수3개 파일경로 chmod 644 access.txt
  • 기본접근권한

    • 파일의 경우 rw-rw-r–
    • 디렉터리의 경우 rwxrwxr-x
  • 기본접근권한 확인

    • umask 또는 umask -S
    • umask는 제외할 권한이 숫자로 표시
    • umask -S는 부여할 권한을 문자열로 표시
    • 디렉터리에 대한 권한이고 파일은 여기서 실행 권한이 제거된 상태로 만들어짐
    • mask는 반대
    • rwxrwxr-x는 숫자로 775-> 전부 권한이 부여되는 경우 777 - ? = 775를 만들어주는 ?를 mask라 함
    • 수정: umask 마스크값
  • 특수 접근 권한

    • umask의 맨 앞자리
  • 종류 0: 일반적인 파일 1: sticky bit 2: SetGID 3: setUID

  • SetUID: 파일이 실행되는 동안 파일을 실행한 소유자의 권한 아니라 파일 소유자의 권한이 적용됨

  • 이 설정 하게되면 파일 소유자에게 실행 권한이 있을 때 x가 s로 표시됨

  • 실행한 유저가 쓰기 권한이 없더라도 소유자가 쓰기 권한이 있다면 쓰기가 가능

  • 이 설정을 하고자 하는 경우는 권한 설정을 할 때 숫자로 하고 세자리 맨 앞에 4를 추가해주면 됨

touch set.exe # 파일생성: 기본 권한은 664(rw-rw-r--)
chmod 755 set.exe # 모든 유저에게 실행 권한 부여
ls -l set.exe # 권한 확인이 가능(rwxrwxr--)
chmod 4755 set.exe # 모든 유저에게 실행 권한 부여, 실행을 할 때 소유자의 권한으로 실행
ls -l set.exe # 권한 확인이 가능(rwsrwxr--)
  • SetGID
    • 파일이 실행되는 동안에는 파일을 실행한 사용자의 권한이 아니라 파일 소유자그룹의 권한이 적용됨
  • SetUID가 적용된 대표적인 파일이 passwd
  • sticky bit: 디렉터리에만 설정할 수 있는데 이 설정이 있으면 모든 유저가 이 디렉터리에 파일을 생성하고 삭제할 수 있음
    • 자신이 생성한 파일만 삭제가 가능
    • 대표적인 디렉터리가 tmp, 기타 사용자의 실행권한이 t로 표시