728x90

명령어 목록

 

ls 

 

파일 "목록"을 보여주는 기본 명령어로서, 너무 간단해서 과소평가되기 쉬운 명령어지만 그렇지 않습니다.

예를 들면, 하위 디렉토리까지 표시해주는 -R 옵션을 쓰면 디렉토리 구조를 트리같은 형태로 보여줍니다.

 

흥미로운 다른 옵션들로는, 파일 크기대로 정렬해주는 -S, 변경 시간으로 정렬해주는 -t, 파일의 inode를 보여주는 -i 가 --R 하위디렉토리도 표시 -F 파일타입표시까지 있습니다(예 12-3 참고).

cat (concatenate (연속으로 있다)) 파일을 표준 출력으로 뿌려 줍니다.

보통 재지향(>이나 >>)과 같이 써 여러 파일을 한 파일로 만들어 줍니다.

cat에 -n 옵션을 주면 대상 파일의 모든 줄 앞에 줄번호를 붙여줍니다.

        -b 옵션은 빈 줄이 아닌 줄에만 줄번호를 붙여 줍니다.

        -v 옵션은 출력할 수 없는 문자들을 ^ 표기법으로 보여줍니다.

 

tac는 cat을 거꾸로 쓴 것인데, 파일 끝에서부터 거꾸로 보여줍니다.

 

 

rev

파일의 각 줄을 거꾸로 뒤집어 표준출력을 내보냅니다. tac과 다른 점은 줄의 순서는 그대로 살리고

각 줄을 줄 끝에서 줄 처음으로 뒤집는다는 것입니다.

 

cp

파일 복사(copy) 명령어입니다. cp file1 file2 file1을 file2로 복사하는데 file2가 이미 존재한다면 덮어 씁니다(예 12-5 참고).

 

작은 정보: 특별히 유용한 옵션은 아카이브 옵션, -a(디렉토리 트리 전체를 복사할 때)와 재귀 옵션인 -r과 -R입니다

 

mv

 

파일 이동(move) 명령어입니다. cp와 rm을 합친 것과 동일합니다. 여러개의 파일을 한 디렉토리로 옮기거나 디렉토리 이름을 바꿀 때 쓰일 수도 있습니다.

 

rm

 

파일을 삭제(remove), -f 옵션은 읽기 전용 파일도 강제로 지워줍니다.

ㄴ [재귀옵션인 -r과 같이 쓰이면 디렉토리 트리 이하 모든 파일을 지워버립니다.]

 

rmdir

 

디렉토리를 삭제. 삭제할 디렉토리안에는 안 보이는 "도트 파일"을 포함해서 아무 파일도 없어야 이 명령어가 제대로 실행합니다.

 

mkdir

 

디렉토리 만들기, 새로운 디렉토리를 생성해 줍니다. mkdir -p project/programs/December 라고 하면 주어진 디렉토리를 만들어 주는데 -p 옵션을 주면 자동으로 필요한 부모 디렉토리가 만들어 집니다.

 

chmod

 

파일의 속성을 변경

chattr

파일 속성을 바꿔줍니다. 위에서 설명한 chmod와 똑같은 역할을 하지만 문법이 약간 다르고 오직 ext2 파일 시스템에 대해서만 동작합니다.

 

ln

이미 존재하는 파일에 대한 링크를 만들어 줍니다. 심볼릭이나 "소프트" 링크 플래그를 나타내는 -s 옵션을 많이 씁니다. 참조되는 원래의 파일이 하나 이상의 이름을 갖도록 해 주기 때문에 별칭보다는 더 좋은 방법입니다(예 5-6 참고).

ln -s oldfile newfile 라고 하면 이미 존재하는 oldfile에 대한 새로운 링크 파일인 newfile을 만들어 줍니다.

 

find
-exec COMMAND \;

find가 찾아낸 각각의 파일에 대해 COMMAND를 실행합니다. COMMAND는 \;로 끝나야합니다.(find로 넘어가는 명령어의 끝을 나타내는 ;를 쉘이 해석하지 않도록 이스케이프 시켜야 합니다.) COMMAND에 {}이 포함되어 있으면 선택된 파일을 완전한 경로명으로 바꿔줍니다.




예 12-2. Badname, 파일 이름에 일반적이지 않은 문자나 공백 문자를 포함하는 파일을 지우기.

예 12-3. inode 로 파일을 지우기

파일명을 통해 inode 추출하는 명령어

ls -i | grep "file.sh" | awk '{print $1}'

 

xargs

명령어에 인자들을 필터링해서 넘겨 주고 그 명령어를 다시 조합하는 데 쓸 수도 있습니다. xargs는 입력을 필터용으로 작게 조각내서 명령어가 처리하게 해 줍니다. 역따옴표의 강력한 대용품이라고 생각하면 됩니다. 역따옴표를 써서 too many arguments란 에러가 났을 때, xargs로 바꿔 쓰면 성공할 수도 있습니다. 보통은 표준 입력이나 파이프에서 데이터를 읽어 들이지만 파일의 출력에서도 읽을 수 있습니다.

 

xargs의 기본명령어는 echo 입니다.

 

ls | xargs -p -l gzip 은 현재 디렉토리의 모든 파일에 대해 한번에 한 파일씩 물어보면서 gzip으로 묶어줍니다.

ls | xargs -n 8 echo 는 현재 디렉토리의 파일들을 한 줄에 8 개씩 끊어서 보여줍니다.

 

find -print0나 grep -lZ와 함께 쓰는 -0이 있습니다.

 

find / -type f -print0 | xargs -0 grep

 

작은 정보: 다른 유용한 옵션으로 find -print0 grep -lZ와 함께 쓰는 -0이 있습니다. 이 옵션은 공백 문자나 따옴표가 들어간 인자를 처리할 수 있게 해줍니다.

find / -type f -print0 | xargs -0 grep -liwZ GUI | xargs -0 rm -f

grep -rliwZ GUI / | xargs -0 rm -f

 

예 12-4. 시스템 로그 모니터링용 xargs 로그 파일

위의 두 가지 모두 "GUI"를 포함하고 있는 어떤 파일도 지워 줍니다. (Thanks, S.C.)

예 12-5. copydir. xargs로 현재 디렉토리를 다른 곳으로 복사하기

 

expr

다목적 표현식 평가 명령어 : 주어진 연산에 따라 자동으로 계산하거나 평가합니다. 이 때, 인자는 빈칸으로 분리되어야 합니다.

 

산술, 비교, 문자열, 논리 연산등이 가능합니다.

 

expr 3 + 5

8리턴

 

expr 5 % 3

2리턴

 

y=`expr $y + 1`

변수를 증가. let y=y+1 이나 y=$(($y+1)) 과 같음

 

z=`expr substr $string $position $length`

$string의 $position에서부터 $length만큼의 문자열조각(substring)을 추출해 냄.

 

중요: match 대신 : 연산자를 쓸 수 있습니다. 예를 들면, 위의 예제에서 b=`expr $a : [0-9]*`  b=`expr match $a [0-9]*` 과 완전히 동일합니다.

 

시간/날짜 명령어

 

date

간단하게 date라고만 치면 날짜와 시간을 표준 출력으로 보여줍니다. 이 명령어에서 진짜 재밌는 부분은 형식화와 파싱 옵션입니다.

zdump

주어진 타임 존에 해당하는 시간을 에코.

time

명령어 실행 시간에 대한 아주 자세한 통계들을 보여줍니다.

time ls -l / 의 출력은 다음과 같습니다.

touch

파일에 대한 접근/수정 시각을 현재 시각이나 특정한 시각으로 바꿔 주는 유틸리티지만 새 파일을 만들 때 쓸 수도 있습니다. zzz란 파일이 없다고 가정하고 touch zzz 라고 하면 크기가 0인 zzz을 새로 만들어 줍니다. 이런 식으로 시간 정보를 갖는 빈 파일을 만들어서 프로젝트의 변경 날짜를 추적하는데 쓰는 등의 사용법이 가능합니다.

touch 명령어는 : >> newfile 과 동일한 동작을 합니다(보통 파일에 대해서).

 

at

작업 제어 명령어인 at은 주어진 명령어들을 특정 시간에 수행합니다. 이 명령어는 표면상으로는 crond과 닮아 있지만 여러 명령어들을 단지 한 번만 수행하려고 할 때 주로 쓰입니다.

at 2pm January 15 라고 하면 그 시간에 실행시킬 명령어들을 물어보는데 이 명령어는 실용적인 목적때문에 쉘 스크립트와 호환되는 명령어면 다 됩니다. 스크립트에서 한 줄에 이것을 타이핑할 것이기 때문입니다. 입력은 Ctl-D 로 끝냅니다.

-f 옵션을 쓰거나 입력 재지향(<)을 써서 파일에 저장되어 있는 명령어들을 읽어 들일 수 있습니다. 이 파일은 쉘 스크립트가 될 수도 있지만 당연히 사용자 입력이 필요 없어야 합니다. 실행할 파일에 run-parts 명령어를 넣어 두면 다른 종류의 여러 스크립트들을 돌릴 수 있기 때문에 아주 멋지게 쓸 수 있습니다.

batch

batch at과 비슷한 작업 제어 명령어지만 다른 점은 시스템 부하가 0.8 이하인 경우에만 명령어들을 실행합니다. at처럼 -f 옵션을 써서 실행할 명령어를 파일에서 읽을 수 있습니다.

cal

깔끔한 형태의 월별 달력을 표준출력으로 출력합니다. 현재를 비롯해 아주 먼 과거나 미래도 보여 줍니다.

sleep

쉘의 wait 루프와 같습니다. 주어진 초단위 시간 동안 아무일도 안 하면서 멈추어 있습니다. 타이밍, 혹은 백그라운드로 돌면서 특정한 사건이 일어나는지 주기적으로 확인하는등의 경우에 유용하게 쓰일 수 있습니다(예 30-5 참고).

usleep

마이크로슬립(Microsleep)("u"는 그리스 문자 "mu"로 읽던가 마이크로(micro) 접두사 그대로 읽으면 됩니다). 이 명령어는 위에서 설명한 sleep과 하는 일이 같지만 마이크로초 동안 "잠들어" 있습니다. 아주 짧은 시간 동안의 타이밍에 쓰이거나 굉장히 잦은 간격으로 진행되는 프로세스를 폴링할 때 쓰일 수 있습니다.

hwclock, clock

hwclock는 시스템의 하드웨어 클럭을 읽거나 조절해 줍니다. 몇몇 옵션은 루트 권한이 필요합니다. /etc/rc.d/rc.sysinit 시스템 구동 파일은 부팅시에 hwclock을 써서 하드웨어 클럭으로 시스템 시간을 맞춰줍니다.

clock 명령어는 hwclock과 동의어입니다.

 

sort

주로 파이프에서 필터로 쓰여 파일을 정렬할 때 쓰입니다. 다양한 키나 문자 위치에 따라 텍스트 스트림이나 파일 전체를 정렬할 수 있습니다. -m 옵션을 쓰면 이미 정렬된 파일을 합쳐줍니다. info page에서 많은 기능과 옵션들을 볼 수 있습니다. 예 10-8 예 10-9를 참고하세요.

 

tsort

위상 정렬(Topological sort) 명령어로서, 공백문자로 구분되는 문자열의 쌍을 읽어 패턴에 따라 정렬.

 

diff, patch

diff: 유연한 파일 비교 유틸리티. 대상 파일들을 줄 단위로 차례 차례 비교해 줍니다. 예를 들어 낱말 사전을 비교하는 어플리케이션에서 sort uniq를 써서 파일을 필터링하고 파이프를 통해 diff로 넘겨주는 상황등에서 유용하게 쓰일 수 있습니다. diff file-1 file-2 는 두 파일에서 서로 다른 줄이 있으면 그 줄이 속해 있는 파일을 캐럿과 함께 보여줍니다.

--side-by-side 옵션을 주면 비교할 파일을 서로 구분된 컬럼에 두고 줄 단위로 비교하면서 일치하지 않는 줄을 표시해 줍니다.

diff의 다양한 프론트엔드(frontend)로는 spiff, wdiff, xdiff, mgdiff가 있습니다.

작은 정보: diff 는 비교할 두 파일이 똑같으면 종료 상태 0을 리턴하고 다르면 1을 리턴합니다. 이것 때문에 diff를 쉘 스크립트의 테스트문에서 쓸 수 있습니다(아래 참조).

diff는 보통 patch에 쓸 다른 파일을 만들어 내는데 쓰입니다. -e 옵션은 diff가 자신의 출력을 ed ex 스크립트에서 쓸 수 있는 파일로 만들어 내게 합니다.

 

patch: 유연한 버전 관리 유틸리티. patch diff가 만들어낸 다른 파일이 주어지면 패키지의 이전 버전을 새로운 버전으로 업그레이드 해 줄 수 있습니다. 이렇게 하면 새롭게 발표된 패키지 전체를 배포할 필요 없이 비교적 작은 "diff" 파일만 배포하면 되므로 아주 편리합니다. 따라서 커널 "패치"는 리눅스 커널의 빈번한 배포시 더 선호됩니다.

cmp

cmp 명령어는 위에서 설명한 diff의 간단한 버전입니다. diff가 두 파일간의 차이점에 대해서 보고해 주는 반면, cmp는 단지 두 파일간에 서로 다른 부분만을 보여줍니다.

참고: cmp diff처럼 두 파일이 똑같다면 종료 상태 0을 리턴하고 다르다면 1을 리턴합니다. 따라서 쉘 스크립트의 테스트문에서 cmp를 쓸 수 있습니다.

예 12-8. 스크립트에서 두 파일을 비교하기 위해 cmp 쓰기.

 

작은 정보: gzip으로 묶인 파일에는 zcmp를 쓰세요.

comm

다목적 파일 비교 유틸리티. 제대로 된 결과를 얻으려면 파일 내용이 정렬돼 있어야 합니다.

comm -options first-file second-file

comm file-1 file-2 출력은 세 칸으로 이루어 집니다:

  • column 1 = file-1에 유일한 줄
  • column 2 = file-2에 유일한 줄
  • column 3 = 두 파일 양쪽에 공통으로 나타나는 줄

다음 옵션은 하나 이상의 출력 칸을 제거해 줍니다.

  • -1  1번 칸을 제거
  • -2  2번 칸을 제거
  • -3  3번 칸을 제거
  • -12  1번과 2번 칸을 제거, 등등.

uniq

이 필터는 정렬된 파일에서 중복된 줄을 제거합니다. 보통 파이프에서 sort와 같이 쓰입니다.

유용한 옵션인 -c을 쓰면 입력 파일의 각 줄 앞에 중복된 수를 표시해 줍니다.

sort INPUTFILE | uniq -c | sort -nr 이라고 하면 INPUTFILE 파일의 발생 빈도 목록을 만들어 줍니다(sort 명령어의 -nr은 숫자를 거꾸로 정렬). 이 템플릿은 로그 파일이나 사전 목록, 구문 분석이 필요한 어떤 것에도 쓰일 수 있습니다.

예 12-9. 낱말 빈도수 분석

cut으로 마운트 된 파일 시스템 목록 알아내기: 쓰기:

cut으로 OS와 커널 버전 알아내기:

cut 으로 이 메일 폴더에서 메세지 헤더를 뽑아내기

colrm

칸 제거 필터. 파일에서 여러 칸(글자들 단위)을 지워주는데, 칸 범위를 지정하지 않으면 원래 파일을 표준출력으로 다시 내보냅니다. colrm 2 4 <filename 이라고 하면 텍스트 파일인 filename 각 줄의 두 번째 칸에서 4 번째 칸의 글자를 지웁니다.

주의

파일에 탭이나 출력 할 수 없는 글자가 포함되어 있다면 예상치 못한 동작을 할 수도 있습니다. 이런 경우에는 colrm 앞에 expand unexpand를 파이프로 걸어서 써 보기 바랍니다.

paste

서로 다른 파일들을 여러 단으로 나뉘어진 하나의 파일로 만들어 주는 툴로서, cut과 같이 써서 시스템 로그 파일을 만드는데 유용합니다.

join

특수한 목적을 가진 paste류의 명령어라고 보면 됩니다. 두 파일을 의미있는 형태로 묶어서 본질적으로는 간단한 관계 데이터베이스를 만들어 주는 강력한 유틸리티입니다.

join 명령어는 정확히 두 파일에 대해서 동작하지만 두 파일 사이에 공통으로 표시된 필드(tagged field)(보통은 숫자 라벨)가 들어 있는 줄에 대해서만 합쳐서 결과를 표준출력에 씁니다. 제대로 동작하려면 두 파일 모두, 표시 필드가 제대로 정렬되어 있어야 합니다.

 

참고: 표시 필드는 결과에서 한 번만 나옵니다.

head

파일 앞부분을 표준출력으로 보여 줍니다(기본적으로 10줄을 보여주지만 따로 지정해 줄 수도 있습니다). head는 재밌는 옵션이 몇 개 있습니다.

 

tail

파일의 마지막 부분을 표준출력으로 보여 줍니다(기본적으로10줄). 보통, 시스템 로그 파일의 변경 사항을 추적할 때 쓰는데, 파일 뒷부분에 계속 덧붙여지는 사항을 볼 수 있게 해 주는 -f 옵션을 주면 됩니다..

 

예 12-11. tail로 시스템 로그를 모니터하기

 

grep

정규 표현식을 쓰는 다목적 파일 검색 도구로서, 원래 예전의 라인 에디터인 ed의 명령어나 필터였던 g/re/p에서 따온 것으로 global - regular expresstion - print란 뜻입니다.

 

grep pattern [file...]

 

대상 파일에서 보통 텍스트이거나 정규 표현식인 pattern을 찾아 줍니다.

대상 파일이 주어지지 않는다면 파이프에서 쓰여서 다른 명령어의 표준출력에 대한 필터로 동작합니다.

-i 옵션은 대소문자 구분없이 찾도록 해줍니다.

-l 옵션을 일치하는 줄이 아니라 일치하는 줄이 아니라 일치하는 줄이 들어 있는 파일만 보여줍니다.

-n 옵션은 일치하는 줄과 그 줄번호를 같이 보여줍니다.

-v (혹은 --invert-match) 옵션은 일치하는 패턴을 걸러내 줍니다.

-c (--count) 옵션은 일치하는 패턴을 보여주지 않고 일치한 횟수만 보여줍니다.

대상 파일을 하나 이상 적어주면 일치하는 파일도 같이 보여 줍니다.

작은 정보: 오직 하나의 파일에서만 찾으려고 할 때 grep이 강제로 파일이름을 보여주게 하고 싶으면 두 번째 파일로 /dev/null을 주면 됩니다.

grep은 일치하는 패턴을 찾으면 종료 상태 0을 리턴하는데 출력을 안 하게 해 주는 -q 옵션과 같이 스크립트의 테스트 문에서 쓰면 유용하게 쓸 수 있습니다.

예 30-5 은 시스템 로그 파일에서 grep으로 특정 낱말 패턴을 찾는 것을 보여줍니다.

예 12-12. 스크립트에서 "grep"을 에뮬레이트 하기

참고: egrep  grep -E와 같습니다. 좀 더 유연한 검색 능력을 갖는 확장 정규 표현식 셋을 사용합니다.

fgrep  grep -F와 같습니다. 문자 그대로의 검색(정규 표현식 안 씀)만 하기 때문에 속도가 약간 빠릅니다.

agrep  grep이 유사(approximate) 매칭을 할 수 있게 확장해 줍니다. 찾을 문자열과 찾은 문자열은 주어진 숫자 만큼의 문자가 다를 수도 있습니다. 이 유틸리티는 리눅스 배포판에서 기본으로 포함되지 않습니다.

작은 정보: 압축된 파일에서 검색을 하려면 zgrep, zegrep, zfgrep을 쓰세요. 압축 안 된 파일에 대해서도 동작하지만 grep, egrep, fgrep 보다는 약간 느립니다. 압축 파일과 비압축 파일이 섞여 있을 때 사용하면 편리합니다.

bzip으로 압축된 파일에서 검색을 하려면 bzgrep 을 쓰세요.


look

look grep과 비슷하게 동작하지만 정렬된 낱말 목록인 "사전"에 들어 있는 낱말에 대해서만 찾습니다. 따로 지정하지 않으면 /usr/dict/words 에 들어 있는 낱말만 찾는데 다른 사전 파일을 지정해 줄 수도 있습니다.

예 12-13. 목록에 들어 있는 낱말들의 유효성 확인하기

sed, awk

텍스트 파일이나 명령어 출력을 파싱하는데 특히 알맞은 스크립트 언어입니다. 홀로 쓰일 수도 있고 파이프 중간이나 쉘 스크립트에서 쓰일 수도 있습니다.

sed

많은 ex 명령어들을 배치 모드에서 쓸 수 있게 해주는 비대화형(non-interactive) "스트림 에디터"입니다. 쉘 스크립트에서 아주 자주 쓰입니다.

awk

프로그램 가능한 파일 분석및 형식화 명령어로서, 구조화된 텍스트 파일의 필드나 컬럼을 뽑아내고 조작하는데 아주 적당하며, 문법은 C와 비슷합니다.

wc

wc는 파일이나 I/O 스트림에 나타나는 "낱말 갯수"(word count)를 알려줍니다:

wc -w 는 낱말 갯수만 알려줍니다.

wc -l 은 줄 수만 알려줍니다.

wc -c 는 글자 수만 알려줍니다.

wc -L 을 가장 긴 줄의 길이만 알려줍니다.

 

wc 로 현재 디렉토리에 .txt 파일이 몇 개 있는지 알아내기:

wc 로 d 에서 h 사이의 문자로 시작되는 파일들 크기의 전체 합을 구하기.

wc 로 이 책의 메인 소스 파일에서 "Linux"가 몇 번이나 나오는지 알아보기..

예 12-27  예 16-5 도 참고.

몇몇 명령어는 자신의 옵션으로 wc의 일부 기능을 갖고 있기도 합니다.

tr

문자 변환 필터.

경고
적절하게 쿼우팅이나 대괄호로 묶어줘야 합니다. 쿼우팅은 tr 명령어에서 쓰이는 특수한 문자들이 쉘에 의해 재해석 되지 않도록 막아줍니다. 대괄호는 쉘이 확장을 못 하도록 쿼우트 되어야 합니다.

tr "A-Z" "*" <filename 이나 tr A-Z \* <filename  filename에 들어 있는 모든 대문자를 별표로 변환해서 표준출력으로 내 보냅니다. 몇몇 시스템에서는 이렇게 하면 안 되고 tr A-Z '[**]' 이라고 해야 제대로 동작할 수도 있습니다.

-d 옵션은 지정된 범위에 해당하는 문자들을 지워 줍니다.

--squeeze-repeats(나 -s) 옵션은 연속적인 문자들 중에서 첫번째만 남기고 나머지 문자들은 지워 줍니다. 이 옵션은 과도한 공백 문자를 지울 때 유용합니다.

예 12-14. toupper: 파일 내용을 모두 대문자로 바꿈.

예 12-16. du: 도스용 텍스트 파일을 UNIX용으로 변환.

예 12-17. rot13: 초허접(ultra-weak) 암호화, rot13.

tr 변종들
tr 유틸리티는 역사적으로 두 개의 변종을 갖고 있습니다. BSD 버전은 대괄호를 쓰지 않지만(tr a-z A-Z), SysV 버전은 씁니다(tr '[a-z]' '[A-Z]'). GNU 버전은 BSD 버전을 닮았기 때문에 대괄호속의 문자 범위를 꼭 쿼우팅 해 줘야 합니다.

fold

입력 줄을 주어진 넓이로 접어주는(wrap) 필터. 특별히 유용한 -s 옵션을 쓰면 낱말 사이의 빈 칸에서 줄을 나눠줍니다(예 12-19 예 A-2 참고).

fmt

간단한 파일 형식화 명령어로 파이프 중간에 필터로 쓰여 긴 줄을 "접기"(wrap) 위해 쓰입니다.

예 12-19. 파일 목록 형식화.

예 12-4 참고.

작은 정보: fmt의 강력한 대체품인 Kamil Toman의 par 유틸리티는 http://www.cs.berkeley.edu/ ~amc/Par/ 에서 구할 수 있습니다.

ptx

ptx [targetfile] 명령어는 targetfile의 permuted index(상호 참조 리스트 - cross-reference list)를 출력해 줍니다. 필요하다면 여기서 나온 결과를 나중에 필터링이나 형식화해서 쓸 수도 있습니다.

column

컬럼 형식화 명령어. 목록 형태의 텍스트 출력의 적당한 곳에 탭을 넣어서 "예쁜 출력" 테이블을 얻게 해 주는 필터입니다.

예 12-20. column 으로 디렉토리 목록을 형식화 하기

nl

줄 번호 매기기 필터. nl filename 이라고 하면 filename의 빈 칸을 제외한 각 줄에 연속적인 번호를 붙여서 표준출력으로 보여 줍니다. filename을 지정해 주지 않으면 표준입력에 대해서 동작합니다.

예 12-21. nl: 자기 자신에게 번호를 붙이는 스크립트.

pr

출력 형식화 필터. 파일이나 표준출력을 프린터로 찍거나 출판용이나 스크린으로 보기 좋은 섹션 형태로 페이지를 매겨 줍니다. 행과 열을 조작하기, 여러 줄을 합치기, 마진을 넣어 주기, 줄에 번호를 매겨 주기, 페이지 헤더를 붙여 주기, 여러 파일을 합치기등을 비롯한 다양한 옵션이 가능합니다. pr nl, paste, fold, column, expand의 기능을 합친 것보다 더한 능력을 가진 명령어입니다.

pr -o 5 --width=65 fileZZZ | more 라고 하면 fileZZZ를 마진을 5로 하고 전체 폭을 65로 하고 멋있게 페이지를 매겨서 스크린에 뿌려 줍니다.

특별히 유용한 옵션인 -d는 한 줄마다 강제로 빈 줄을 넣어줍니다(double-spacing, sed -G와 같습니다).

gettext

프로그램의 출력을 다른 언어로 번역해서 보여주는 GNU 지역화(localization) 유틸리티입니다. 처음엔 C 프로그램을 위해서 쓰였지만 쉘 스크립트에서도 쓰입니다. info page를 참고하기 바랍니다.

iconv

주로 지역화에서 쓰이는 명령어로 파일을 다른 인코딩(문자셋)으로 변환해 줍니다.

recode

이 명령어는 iconv의 개선판이라고 보면 됩니다. 파일을 다른 인코딩으로 변환해주는 이 다목적 유틸리티는 표준 리눅스 설치시에는 포함되지 않습니다.

groff, gs, TeX

Groff, TeX, 포스트스크립트(postscript)는 출판용 원고나 형식화된 비디오 디스플레이용 텍스트 마크업 언어(text markup language)들입니다.

맨 페이지 groff을 씁니다(예 A-1 참고). 고스트스크립트(ghostscript, gs)는 포스트스크립트 해석기의 GPL 버전입니다. TeX는 Donald Knuth의 정교한 조판 시스템입니다. 흔히, 이 마크업 언어들에 넘길 인자나 옵션들을 쉘 스크립트로 처리를 해서 편하게 씁니다.

lex, yacc

구문 분석기(lexical analyzer)인 lex는 패턴 매칭을 위한 프로그램을 만들어 냅니다. 리눅스 시스템에서는 이 명령어의 비특허 버전인 flex로 바뀌었습니다.

yacc 유틸리티는 스펙셋에 의거한 파서를 만들어 냅니다. 리눅스 시스템에서는 이 명령어의 비특허 버전인 bison으로 바뀌었습니다.

 

파일 아카이브 명령어 

 

tar

유닉스의 표준 아카이브(archive) 유틸리티. 원래는 Tape ARchiving 프로그램에서 왔는데, 이 프로그램은 테입 드라이브부터 보통 파일, 심지어는 표준출력(예 4-3 참고)까지 포함하는 모든 종류의 디바이스에 대해서 모든 종류의 아카이브를 다룰 수 있도록 만들어 졌습니다. GNU tar는 오래전부터 gzip 압축을 다룰 수 있는 옵션이 패치되어 있었는데, tar czvf archive-name.tar.gz * 라고 하면 하위 디렉토리를 포함한 모든 파일을 묶어서 압축하라는 뜻입니다(도트파일은 제외).

유용한 tar 옵션 몇 가지:

  1. -c 만들기(새 아카이브)
  2. --delete 지우기(아카이브에 들어 있는 파일)
  3. -r 덧붙이기(파일을 아카이브로)
  4. -t 목록(아카이브 내용)
  5. -u 아카이브 업데이트
  6. -x 뽑아내기(아카이브에 들어 있는 파일)
  7. -z 아카이브를 gzip 으로 압축

shar

쉘 아카이브 유틸리티. 쉘 아카이브 파일은 실제로는 #!/bin/sh 헤더와 아카이브를 풀기 위한 명령어들로 이루어진 쉘 스크립트로써, 압축되지 않은 파일들이 쭉 붙어 있는 파일입니다. shar 아카이브는 아직도 인터넷 뉴스 그룹에서 볼 수 있는데 여기 말고 다른 곳에서는 tar/gzip 때문에 거의 안 씁니다. shar 아카이브는 unshar 명령어로 풀어 줍니다.

 

ar

주로 바이너리 오브젝트 파일 라이브러리에서 쓰이는 아카이브를 위한 생성, 조작 유틸리티.

 

cpio

이 특화된 아카이브 복사 명령어(copy input and output)는 tar/gzip 때문에 이제 거의 안 쓰이지만 디렉토리 트리를 옮기려는 경우등의 쓰임새가 아직 남아 있습니다.

 

gzip

표준 GNU/UNIX 압축 유틸리티로서, 성능이 떨어지고 특허가 걸려 있는 compress를 대신합니다. 압축 풀기 명령어는 gunzip으로써, gzip -d와 같습니다.

zcat 필터는 gzip으로 묶인 파일의 압축을 풀어 표준출력으로 내보내기 때문에 파이프의 입력이나 재지향에서 쓰일 수 있습니다. 즉, 실제로는 입축 파일에 대해서 동작하는 cat이라고 보면 됩니다(옛날 compress 로 묶인 파일도 포함). zcat gzip -dc와 같습니다.

bzip2

또 다른 압축 유틸리티로써, 특별히 크기가 큰 파일에 대해서는 gzip보다 효율적입니다. bzip2에 대한 압축풀기 명령어는 bunzip2입니다.

 

file

파일 종류를 구분지어 주는 유틸리티, file filename이라고 치면 ascii text이 data같은 file-name에 대한 스펙을 알려줍니다. 이 명령어는 Linux/Unix 배포판에 따라 /usr/share/magic이나 /etc/magic, /usr/lib/magic등에서 매직 넘버를 참고해서 파일 스펙을 알려줍니다.

 

-f 옵션을 쓰면 파일이름의 목록이 들어 있는 지정된 파일을 분석하면서 배치 모드로 동작합니다. -z 옵션은 대상 파일이 압축된 파일일 경우 강제로 압축이 풀린 상태의 파일 타입을 분석해 줍니다.

basename

 

파일명에서 경로 정보를 떼어내고 오직 파일 이름만 보여줍니다. basename $0 이라고 하면 스크립트는 자기가 쉘에서 불린 자기 이름을 알 수 있습니다. 스크립트에 필요한 인자가 없이 실행되는 경우에 "사용법" 메시지를 찍을때 쓸 수 있습니다.

 

echo "사용법:  `basename $0` arg1 arg2 ... argn"

 

dirname

 

파일명에서 basename을 떼어내고 오직 경로 정보만 보여줍니다.

참고 : basename과 dirname은 어떤 문자열에 대해서도 동작합니다. 이 명령어들에 넘겨줄 인자는 꼭 실제로 존재하는 파일이 아니여도됩니다.

 

make

바이너리 패키지를 빌드 및 컴파일 해주는 유틸리티. 소스 파일에서 추가 변경 사항이 발생하면 정해진 동작을 하도록 하는데 쓰입니다.

make 명령어는 파일 의존성과 수행할 동작이 들어있는 Makefile을 바탕으로 동작합니다.

 

more, less

텍스트 파일이나 스트림을 표준출력으로 한 번에 한쪽씩 표시해 주는 페이저입니다.스크립트의 출력을 위한 필터로 쓸 수 있습니다.

 

 

 

 

 

728x90

'쉘스크립트' 카테고리의 다른 글

11.~ / 내부명령어  (0) 2022.03.04
10~ / 루프  (0) 2022.03.03
9~ / 변수 재검토  (0) 2022.03.03
8~/ 9~/ 연산자, 변수 재검토  (0) 2022.03.03
7~ 테스트  (0) 2022.03.03

+ Recent posts