[RHEL6] 일반 명령어 1탄(bc, cal, cd, cp, cpio)
본문 바로가기
IT 이야기/Linux 명령어

[RHEL6] 일반 명령어 1탄(bc, cal, cd, cp, cpio)

by 찬찬이 아빠 2020. 3. 20.
반응형
  1. bc(텍스트 계산기)

 1) 경로 : /usr/bin/bc

 2) 요약 : 터미널에서 사용하는 대화형 계산기

 3) 사용 방법 : bc [-lws] [파일...]

 4) 옵션

 -h, --help : 사용법 출력

 -i, --interactive : 상호 대화형 모드로 실행

 -l(엘), --mathlib : 표준 수학 라이브러리를 정의

 -w, --warm : POSIX bc에서 확장한 경고 메시지를 출력

 -s, --standard : 정확하게 POSIX bc 언어로만 프로세싱

 -q, --quiet : GNU bc 환영 메시지를 출력하지 않음

 -v, --version : 버전 정보 출력

 

 5) 추가 설명

bc는 대화형으로 실행되는 계산기로서 높은 정확도와 넓은 범위의 수를 지원합니다. 문법은 C언에서 사용하는 연산과 비슷하며, 명령 행 옵션을 주면 표준 수학 라이브러리 함수를 사용할 수도 있습니다. 그러나 계산기로 사용할 때에는 계산 순서대로 식을 입력하면 답을 얻어낼 수 있습니다.

 

그럼 bc를 이용하여 이자를 계산해 봅니다. 1,000,000원의 돈이 있다고 가정합니다. 이것을 연리 5%로 10년 동안 예치하면 얼마가 되는지 봅니다. 이자를 계산하는 방법은 여러 가지가 있겠지만 우리는 단순하게 원금*((1+이자)^기간) 의 식으로 계산해 보겠습니다. 사용 방법은 상당히 단순하여 수식을 그대로 써주는 것으로 계산할 수 있습니다. bc는 대화형 계산기이므로 엔터를 치면 연산이 시작됩니다.

 

# bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type 'warranty'.
1000000*((1+0.5)^10)
1620000.00

 

또한 scale 변수를 변경하여 결과 값의 소수점 자릿수를 지정할 수 있습니다. 기본 scale은 소수점 아랫자리가 없는 0이지만 scale을 변경해서 결과 값의 소수점 자릴수가 변경되는 것을 볼 수 있습니다.

 

# bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type 'warranty'.
scale
0
1/4
0
scale = 1
1/4
0.2
scale = 3
0.250

 

 

  2. cal(달력 보기)

 1) 경로 : /usr/bin/cal

 2) 요약 : 달력 출력

 3) 사용 방법 : cal [옵션] [[month] year]

 4) 옵션

 -3 : 이전 달, 현재달, 그리고 다음 달을 하나의 행으로 출력

 -h : 오늘 날짜를 하이라이트로 표시하는 기능을 비활성화

 -J : 율리우스력(Julian Calendar) 형식으로 출력

      ※ 율리우스력 : 율리우스 카이사르가 이집트력을 기초로하여 BC 45년 로마력을 변경한 것으로 1년을 365로, 4년에 1일 윤일을 2월 23일 뒤에 지정하였고, 춘분을 3월 25일로 고안하였습니다.

 

 -j : 쥴리안 일자(Julian days) 형식으로 출력

       쥴리안 일자 : 1583년에 조셉 스캘리저에 의해 고안된 방법으로 7,980년 동안 주기가 시작하는 날로부터 특정일자까지 경과한 일수를 말하는데, 컴퓨터에서는 특정한 연도의 시작으로부터 경과된 일수를 말합니다.

 

 -m month : 지정한 달(month)을 출력

 -y : 현재 연도의 달을 모두 출력

 -V : 버전 정보 출력

 

 5) 추가 설명

cal은 달력보기 명령어로 사용할 수있는 연도는 서기 원년에서 9999년까지입니다. 9999년 이후의 달력을 볼 수 없는 것은 아쉽지만, 틀림없이 9999년이 오기 전에 9999년 이후의 달력을 볼 수 있도록 수정되리라 생각합니다. 1999년을 보고자 한다면 call 99가 아니라, cal 1999라고 입력해야 합니다. 아무런 인자가 없으면 시스템의 현재 달을 출력합니다.

서기 2100년의 달력을 출력해 봅니다.

 

# cal 2100

							   2100                               
       January               February                 March       
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                1  2       1  2  3  4  5  6       1  2  3  4  5  6
 3  4  5  6  7  8  9    7  8  9 10 11 12 13    7  8  9 10 11 12 13
10 11 12 13 14 15 16   14 15 16 17 18 19 20   14 15 16 17 18 19 20
17 18 19 20 21 22 23   21 22 23 24 25 26 27   21 22 23 24 25 26 27
24 25 26 27 28 29 30   28                     28 29 30 31
31

        April                   May                   June        
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
             1  2  3                      1          1  2  3  4  5
 4  5  6  7  8  9 10    2  3  4  5  6  7  8    6  7  8  9 10 11 12
11 12 13 14 15 16 17    9 10 11 12 13 14 15   13 14 15 16 17 18 19
18 19 20 21 22 23 24   16 17 18 19 20 21 22   20 21 22 23 24 25 26
25 26 27 28 29 30      23 24 25 26 27 28 29   27 28 29 30
                       30 31
                       
        July                  August                September     
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
             1  2  3    1  2  3  4  5  6  7             1  2  3  4
 4  5  6  7  8  9 10    8  9 10 11 12 13 14    5  6  7  8  9 10 11
11 12 13 14 15 16 17   15 16 17 18 19 20 21   12 13 14 15 16 17 18
18 19 20 21 22 23 24   22 23 24 25 26 27 28   19 20 21 22 23 24 25
25 26 27 28 29 30 31   29 30 31               26 27 28 29 30

       October               November               December      
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                1  2       1  2  3  4  5  6             1  2  3  4
 3  4  5  6  7  8  9    7  8  9 10 11 12 13    5  6  7  8  9 10 11
10 11 12 13 14 15 16   14 15 16 17 18 19 20   12 13 14 15 16 17 18
17 18 19 20 21 22 23   21 22 23 24 25 26 27   19 20 21 22 23 24 25
24 25 26 27 28 29 30   28 29 30               26 27 28 29 30 31
31

 

특정 연도의 지정한 달을 입력하여 원하는 달력을 볼 수도 있습니다. 1945년의 6월을 보려면 cal 6 1945 라고 실행하면 됩니다.

 

# cal 6 1945
	June 1945     
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

 

8888년도 달력을 프린터로 출력하고 싶다면 달력 데이터를 lpr 명령어로 넘기면 됩니다.

# cal 8888 | lpr

 

 

 

  3. cd(디렉터리 이동)

 1) 경로 : 내부 명령어

 2) 요약 : 디렉터리 이동

 3) 사용 방법 : cd [디렉터리 경로]

 4) 추가 설명

디렉터리를 이동하는 명령어입니다. 단순하지만 기본적인 명령어로 가장 자주 사용됩니다.

명령어 설명
cd [디렉터리 경로] 이동하려는 디렉터리로 이동
cd . 현재 디렉터리
cd .. 상위 디렉터리로 이동
cd $변수명 변수에 지정된 디렉터리로 이동
cd / 가장 상위 디렉터리로 이동

cd ~

cd $HOME

cd

사용자의 홈 디렉터리로 이동

cd ~사용자 계정

지정된 사용자의 홈 디레터리로 이동

 

아래 예제를 살펴봅시다. pwd로 현재 디렉터리를 확인합니다. cd .. 명령은 한 단계 상위 디렉터리로 이동할 수 있습니다. 또한 cd ~사용자계정 명령은 어떤 위치에서도 지정한 사용자의 HOME 디렉터리로 이동할 수 있습니다. 이와 비슷하게 cd ~ 명령은 현재 로그인한 사용자의 홈 디렉터리로 이동합니다.

# pwd
/usr/local
# cd..
# pwd
/usr
# cd ~chanchan
# pwd
/home/chanchan
# echo $HOME
/root
# cd ~
# pwd
/root

 

 

 

  4. cp(파일 복사)

 1) 경로 : /bin/cp

 2) 요약 : 파일을 지정된 경로에 복사

 3) 사용 방법

    cp [옵션] 원본파일 복사파일

    cp [옵션] 파일... 디렉터리

 4) 옵션

 -a, --archive : -dR --preserve=all 옵션과 같음

 -b, --backup : 복사 대상 파일이 있을 경우를 대비하여 백업 파일을 만듦

 -d, --no-deference : 원본 파일이 소프트링크 파일이면 소프트링크 원본을 복사

 -f, --force : 복사 대상 파일이 있으면 복사 대상 파일을 강제로 지우고 복사

 -i, --interactive : 복사 대상 파일이 있으면 사용자에게 복사 여부를 물어봄

 -l(엘), --link : 심볼릭 링크 형식으로 복사

 --parents : 원복 파일명에 디렉터리 경로도 같이 입력했다면 그 경로를 그대로 복사

 -p, --preserve : 원본 파일의 소유자, 그룹, 권한, 시간 정보를 그대로 보존하여 복사

 -s, --symbolic-link : 디렉터리가 아닌 일반 파일을 심볼릭 링크 형식으로 복사

 -u, --update : 변경일이 같거나 더 최신의 복사 대상 파일이 있으면 복사하지않음

 -v, --verbose : 복사 상태를 자세하게 출력

 -x, --one-file-system : 원본 파일과 대상 파일의 파일 시스템이 서로 다를 경우에는 파일을 복사하지 않음

 -R, -r, --recursive : 디렉터리를 복사할 경우 하위 디렉터리와 파일을 모두 복사

 --help : 사용법 출력

 --version : 버전 정보 출력

 

 5) 추가 설명

cp는 파일을 다른 파일이나 디렉터리로 복사하는 명령어입니다. 복사할 때 같은 이름의 대상 파일이 이미 있는 경우에도 사용자에게 물어보지 않고 바로 덮어씁니다. 만일 이 복사를취소했어도 이미 덮어쓴 파일은 복구할 수 없습니다. 이 같은 실수를 방지하기 위해기본 알리아스 설정을 cp='cp -i'로 해두고 있습니다.

# alias | grep cp
alias cp='cp-i'

 

여러 파일을 지정하면 마지막 경로에 앞서 지정했던 파일이 복사됩니다. 다음과 같이 아파치 설정 파일과 네임 서버 설정 파일을 홈 디렉터리에 복사해 봅니다.

# cp /etc/httpd.conf /etc/named.conf ~

 

cp -R 명령은 지정한 디렉터리의 하위 디렉터리에 있는 모든 파일과 디렉터리를 같이 복사합니다. 웹 서버 기본 디렉터리인 /var/www/html의 모든 하위 디렉터리와 파일을 /backup 디렉터리로 복사해봅니다.

# cp -R /var/www/html /backup

 

inode

리눅스나 유닉스에서 파일을 나타내는 것은 파일명이 아닙니다. 파일시스템에서 어떤 파일을 인식하는 것은 아이노드라는 숫자입니다. 간단히 말해서 파일명은 아니노드 구조체 테이블에 저장된 파일 정보를 인간이 인식하기 쉽게 만든 것에 지나지 않는다는 뜻입니다. 여기에서 재미있는 현상을 하나 확인할 수 있는데 직접 다음과 같은 경우를 실험해 보기 바랍니다.

 

먼저 touch 명령어로 적당한 이름의 빈 파일을 하나 만들고 ls -i [파일] 명령으로 아이노드를 확인합니다. 잊어버릴지 모르니 기록해 놓고 mv 명령어로 이 파일을 다른 이름으로 바꾸고 다시 아이노드를 확인합니다. 두 파일의 이름은 다르지만 같은 아이노드라는 사실을 알 수 있습니다. 즉 우리가 어떤 이름을 사용하던 간에 시스템에서는 같은 파일로 인식하고 있다는 것입니다.

 

cp 명령을 사용하여 원래의 이름으로 파일을 복사하고 다시 비교해 봅니다. 이 때에는 아이노드가 달라졌음을 알 수 있습니다. 이는 같은 이름이었어도 시스템은 서로 다른 두 파일로 인식한다는 뜻입니다.

# touch test
# ls -i test
13792815 test
# mv test other
# ls -i test
13792815 test


# cp 명령어 사용
# cp other test
# ls -i test
13794359 test

 

 

 

  5. cpio(사본 만들기)

 1) 경로 : /bin/cpio

 2) 요약 : 파일을 복사하고 압축

 3) 사용 방법 : cpio [옵션] [대상 디렉터리]

 4) 옵션

 -0(영), --null : 파일명의 끝이 줄 바꿈 문자가 아니라 NULL로 끝남

 -a, --reset-access-time : 파일 접근 시간을 재설정

 -A, --append : 압축된 파일에 파일을 추가. -o 옵션만 작동

 -B : I/O 블록을 5,120바이트로 지정. 초기치는 512바이트

 --block-size=BLOCK-SIZE : I/O 블록 사이즈를 BLOCK-SIZE*512바이트로 지정

 -c : SVR4 포맷을 사용하기 위해 -H newc옵션을 이용함. 이전의 아스키 포맷을 사용하려면 -H odc를 사용

 -C IO-SIZE, --io-size=IO-SIZE : I/O 블록 사이즈를 지정한 IO-SIZE로 지정

 -d, --make-directories : 지정한 디렉터리를 생성

 -E FILE, --pattern-file=FILE : -i 옵션에서 사용하며, 지정한 패턴의 형식에 맞는 파일을 읽음

 -f, --nonmatching : 주어진 패턴에 상관없이 파일을 복사

 -F, --file=archive : 표준 입력이나 표준 출력 대신 주어진 파일명으로 압축

 --force-local : -F, =l, -O(오) 옵션과 함께 압축된 파일을 로컬 파일로 인식

 -H FORMAT, --format=FORMAT : 주어진 FORMAT 형식으로 압축

   * bin : 바이너리 형식

   * odc : 옛 POSIX 이식 형식

   * newc : 새로운 SVR4 이식 형식

   * crc : 새로운 SVR4 이식 형식에 체크섬 추가

   * tar : tar 형식

   * ustar : POSIX.1 tar 형식

   * hpbin : HPUX으 cpio에 쓰이는 바이너리 형식

   * hpodc : HPUX의 cpio에 사용되는 이식 형식

 -I(아이) archive : 표준 입력 대신 archive 파일명을 사용. 복구 시 다중 볼륨을 효과적으로 처리할 수 있음

 -i, --extract [옵션] [패턴] : 지정한 패턴의 형태에 맞는 압축 파일에서 입력을 받아 압축을 푼 파일로 복사

 -l(엘), --link : 복사하기보다 파일을 링크

 -L, --dereference : 링크를 복사하는 것이 아니라 원본 파일을 복사

 -m, --preserve-modification-time : 파일을 만들 때 파일 수정 횟수를 같이 보존

 -M MESSAGE, --message=MESSAGE : 테이프나 플로피 디스크와 같이 미디어 백업 크기에 도달했을때 지정한 MESSAGE를 출력한 후 프롬프트를 띄워 새로운 것을 삽입하게 함

 -n, --numeric-uid-gid : 실행 시 작동되는 상세 파일명을 출력하는 것이 아니라 UID와 GID를 출력

 -O(오) archive : 표준 출력 대신 archive 파일명 사용. 백업이나 파일 보관 시 다중 볼륨을 효과적으로 처리할 수 있음

 -o, --create [옵샨] : 표준 입력으로 받은 파일 목록을 압축 파일 출력 형태로 복사

 -p, --pass-through [옵션] [디렉터리] : 동일한 시스템에서 지정한 다른 디렉터리로 파일을 복사

 --quiet : 복사된 블록 개수를 출력하지 않음

 -r, --rename : 상호 대화식으로 파일을 다시 지정

 -R [user] [:.] [group], --owner [user] [:.] [group] : -o와 -p 옵션에서 지정한 소유권으로 파일을 생성

 -t, --list : 입력 목차 테이블 출력

 -u, --unconditional : 이전의 파일이 유무와 상관없이 무조건 파을을 복구

 -v, --verbose : 실행하는 동안 파일들을 보여 주거나, -t 옵션과 함께 쓰여 ls -l 스타일로 리스트를 출력

 --version : 버전 정보 출력

 

 5) 추가 설명

cpio는 시스템 백업에 자주 사용되는 명령어로 복잡한 백업 전략과 융통성을 지원합니다. 백업한 내용을 저장할 디렉터리를 만들고 '/var/www/' 디렉터리를 백업해 봅니다.

# mkdir /tmp/www_backup
# cd /var/www
# find . -depth -print | cpio -pmdvl /tmp/www_backup

 

cpio 명령으로 부트 디스크에 있는 커널 모듈을 압축한 modules.cgz를 풀어봅니다.

# zcat modules.cgz | cpio -iv -make-directories

 

압축 해제한 디렉터리에서 모듈을 교체한 후, modules.cgz 파일로 다시 압축할 수도 있습니다.

# cpio -o Hcrc < list | gzip -c9 > modules.cgz

 

또 한가지 예제로 아래와 같이 /boot 디렉터리에 있는 initrd.img 램 디스크 파일을 풀어봅니다.

# cd /boot
# gzip -dc initrd.img > initrd
# mkdir tmp
# cd tmp
# cpio -idm < ../initrd
# ls
bin conf etc init lib sbin scripts usr
반응형

댓글