반응형
디렉토리 이동을 편하게 CDPATH 환경변수!

우리는 쉘 상에서 많은 작업을 하게 되는데 특정 프로그램을 인스톨 하거나
다른 디렉토리에서 작업한 다음에 완전히 다른 디렉토리로 빈번히 옮겨가야
하는 경우가 있다. 여기서는 이러한 작업을 보다 쉽게 해줄 수 있는 방법을
소개한다.

CDPATH환경변수(sh, ksh, bash), 또는 csh의 cdpath 쉘변수를 특정 디렉토리로
설정하면 현재 어느 디렉토리에 있는지에 상관없이 cdpath(CDPATH)에 지정되어
있는 디렉토리의 하위디렉토리명을 찾아서 그 디렉토리로 CWD(현재디렉토리)를
옮겨 준다. 예를 들어 보면 다음과 같이 CDPATH(cdpath)가 지정되어 있다고
가정하자.

% set cdpath=(~ ~/src /usr/local/etc)

보통 우리는 /usr/local/etc/httpd라는 디렉토리로 가기 위해 일일이

% cd /usr/local/etc/httpd

이렇게 해 주어야 하지만 cdpath를 위에처럼
설정해 놓으면 단지 다음과 같은 명령을 통해 그 디렉토리로 옮겨갈 수 있다.

% cd httpd

그리고 본쉘(bourne)에서의 CDPATH는 다음과 같이 설정한다.

$ CDPATH=:$HOME:$HOME/src:/usr/local/etc
$ export CDPATH

위에서 CDPATH 지정할때 앞부분에 ':'를 넣었는데 이것은 PATH변수를 지정할때는
없는 것인데, 현재 디렉토리를 지칭한다.

반응형

[UNIX] 환경변수의 설정

Solaris 2006. 2. 21. 17:00 posted by CecilDeSK
반응형
프로그램이나 쉘 스크립트에서 {환경변수를 설정하고, 디렉토리를 변경하는것}을 하
는 방법은? 그리고 그러한 것이 현재의 쉘에 어떠한 영향을 줄 수 있는가?

일반적으로, 적어도 특별한 준비 없이그것은 불가능하다. 자식 프로세스가 생성되면
그것은 부모의 변수와 현재 디렉토리를 상속 받는다. 자식 프로세스는 이들 모든 값을
변경할 수 있다. 그러나 그 변화가 부모 쉘에는 영향을 미치지 않는다. 왜냐하면 자식은
원래의 데이터의 복사본을 변경한 것이기 때문이다.

몇몇 특별한 준비가 가능하다. 만약 부보가 그 출력물을 읽고 그것을 부모 자신의
변수를 변경하는 명령으로 해석 할 수 있다면 여러분의 자식 프로세스는 변경된 변수를
써 보낼 수 있다.

또한, 쉘은 자식 프로세스에서가 아니라 현재의 쉘 context에서 다른 쉘 스크립트를
실행하기 위해 준비될 수 있다. 이렇게 되면 그 변화는 원래의 쉘에 영향을 미칠 수 있다.

예를 들어, 만약 여러분의 "myscript"라는 이름의 C 쉘 스크립트를 가지고 있다고 하면:

cd /very/long/path
setenv PATH /something:/something-else

또는 같은 Bourne 또는 Korn쉘 스크립트인 다음을 가지고 있다고 하면

cd /very/long/path
PATH=/something:/something-else export PATH

그리고 myscript를 여러분의 쉘에서 실행하면 여러분의 쉘은 fork하고나서
그 스크립트를 서브프로세스에서 실행할 것이다. 그 서브프로세스는 또한 그 쉘을
실행하고 있다; "cd"명령이 보여질 때 그것은 그 자신의 현재 디렉토리를 바꾸고
"setenv"명령을 만나게 되면 그 자신의 환경변수를 바꾸게 된다. 그러나 둘다
여러분이 타이핑 하고 있는 그 쉘(말하자만 여러분이 쓰고 있는 login쉘)의 현재
디렉토리에는 영향을 주지는 않는다.

fork없이 그 스크립트를 실행하기 위해 로그인쉘을 얻기 위해서는 여러분은
"." 명령이나(Bourne이나 Korn쉘에서) 또는 "source"명령(C쉘에서)을 사용해야 한다.
예를 들어 다음과 같이 타이핑 한다.

. myscript

위는 Bourne 이나 Korn 쉘에서 하는 것이고 C쉘에서는

source myscript

과 같이 한다.

만약 여러분이 하고자 하는 일이 단지 디렉토리나 환경변수를 변경하려는 것이라면
C쉘의 shell alias나 Bourne/Korn쉘의 쉘함수를 사용하면 간단하다.
"프롬프트에 현재 디렉토리명을 넣으려면?" 섹션을 보면 몇몇 예제가 있다.

xtm@telelogic.se(Thomas Michanek)에 의한 더 자세한 답변이 다음에 있다.
ftp.wg.omron.co.jp in /pub/unix-faq/docs/script-vs-env

반응형
반응형
/etc/vfstab에서 quota를 설정하고자 하는 파일시스템의 마운팅 옵션에 rq를 지정한다.

$ cat /etc/vfstab
..
/dev/dsk/c0t2d0s6 /dev/rdsk/c0t2d0s6 /home ufs 1 yes rq
..

quota를 설정할 파일시스템에 quotas라는 파일을 만든다.

$ touch quotas
$ chmod 600 quotas

각 사용자에게 quota를 할당하기 위하여 edquota라는 명령을 사용한다.

$ edquota louis
fs /home blocks (soft = 0, hard = 0) inodes (soft = 0, hard = 0)

여기에서 할당하고자 하는 양만큼 soft와 hard부분에 적어준다. 만일 20MB를 할당하려면 아래와 같이 해준다. (만일 quota를 제거하고자 한다면 0을 적어주면 된다.)
fs /home blocks (soft = 20000, hard = 20000) inodes (soft = 0, hard = 0)

만일 다수의 사용자에게 같은 양의 quota를 할당하려면 하나의 사용자만 할당하고 복사할 수 있는데 아래는 louis 사용자의 quota설정을 aaa, bbb, ccc 사용자에게도 똑같이 할당하는 예제이다.

$ edquota -p louis aaa bbb ccc
반응형
반응형


매뉴얼 페이지를 깨끗하게 저장하기.

우리는 가끔씩 유용한 매뉴얼 페이지를 redirect하여 저장하여 프린트 해보고자
하는 경우가 있다.
그러나 보통.. 다음과 같은 명령은 깨끗하지 못한(?) 매뉴얼 페이지를 캡춰하게
된다.

$ man ls > ls.doc

즉, escape sequence까지 모두 캡춰 되기 때문에 이것을 vi등으로 보면 온통
깨져 있게 된다.

이것을 방지하여 캡춰하는 방법은 col명령을 이용하는 것이다.
다음과 같이 해보라.

$ man ls | col -b > ls.doc

그러면 아주 깨끗한 매뉴얼 페이지를 볼 수 있을 것이다.

또다른 방법은 다음과 같다.
[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1998년02월14일(토) 14시42분53초 ROK
제 목(Title): Re: man 페이지 화일로 잡으려면?..

man page의 소스를 먼저 찾으십시오.

예를 들어 ls 같은 것은 보통 /usr/man/man1/ls.1이 소스입니다.

man 명령은 이 소스화일을 포맷해서 보여주는 것입니다.

그다음 groff -man /usr/man/man1/ls.1 > ls.man.txt

하면 됩니다.

좀더 잘 포맷된 결과를 원하면 groff 를 사용할 수도 있습니다.

자세한 것은 groff 매뉴얼을 보세요.

반응형