passwd
: 자신의 패스워드를 관리한다.

문법
■ passwd [ user ]

설명
passwd를 부르면서 사용자 이름을 지정하면 그 사용자의 암호를 관리할 수 있다. 물론 이것은 슈퍼 유저만이 할 수 있는 일이다. 암호는 암기하기는 쉬워야 하지만 타인이 추측하기는 어려워야 한다. 보통은 아무 인수없이 명령을 사용하며 암호를 바꿀 것인지 아닌지를 선택할 수 있다.

사용예
■ $ passwd


paste
: 하나 혹은 그 이상의 파일로부터 칼럼 형태의 출력을 만든다. 이것은 cut과 함께 사용되는 경우가 많다.

문법
■ paste [ -s ][ -d구분문자 ] 파일명(들)

옵션
• -s : 각 파일을 순회하면서 paste를 수행한다.
• -d구분문자 : 어떠한 문자로 칼럼을 구분하는지 지정한다. 기본값은 탭 문자이다.

설명
paste를 사용할 때 서로 붙여지는 파일명을 지정하는데, 이때 하이픈(-)으로 생략하면 표준 입력을 받아들이겠다는 뜻이 된다. 또한 paste의 출력은 항상 표준출력 장치로 나아간다.

사용예
■ $ paste -d' ' namelist.tmp /home/data.tmp
두 개의 파일을 칼럼으로 합치고 그것을 화면으로 출력한다.


ps
: 유닉스는 동시에 여러 개의 프로세서가 동작되기 때문에 사용자가 그것들의 목록과 상태를 점검할 필요가 있다. ps라는 이름은 processor status를 의미한다. ps를 사용하여 프로세서들의 상태를 점검할 수 있다.

문법
■ ps [ -lujsvmaxScewhm ]
■ ps [ -txx ]

옵션
• -l : 자세한 형태의 정보를 출력한다.
• -u : 각 프로세서의 사용자 이름과 시작 시간을 보여준다.
• -j : 작업 중심 형태로 출력한다.
• -s : 시그널 중심 형태로 출력한다.
• -v : 가상 메모리 중심 형태로 출력한다.
• -m : 메모리 정보를 출력한다.
• -a : 다른 사용자들의 프로세서도 보여준다.
• -x : 로그인 상태에 있는 동안 아직 완료되지 않은 프로세서들을 보여준다. 유닉스 시 스템은 사용자가 로그아웃하고 난 후에도 임의의 프로세서가 계속 동작하게 할 수 있다. 그러면 그 프로세서는 자신을 실행시킨 셸이 없이도 계속 자신의 일을 수행한다. 이러한 프로세서는 일반적인 ps 명령으로 확인할 수 없다. 이때 -x 옵션을 사용하면 자신의 터미널이 없는 프로세서들을 확인할 수 있다.
• -S : 차일드(child) CPU 시간과 메모리 페이지 결함(fault) 정보를 추가 한다.
• -c : 커널 task_structure로 부터 명령 이름을 보여준다.
• -e : 환경을 보여준다.
• -w : 긴(wide) 형태로 출력한다. 한 행 안에 출력이 잘리지 않는다.
• -h : 헤더를 출력하지 않는다.
• -r : 현재 실행중인 프로세서를 보여준다.
• -n : USER 와 WCHAN 을 위해 수치 출력을 지원한다.

설명
기본적으로 ps는 현재 명령이 내려지는 셸에서 만들어진 프로세서들의 목록만을 보여준다. ps는 자신이 실행되는 당시, 현재의 셸에 의해서 수행된 프로세서들을 검사하고 보고한다는 점을 생각하자. 그러면 ps의 출력결과 리스트에 ps 자신이 있는 이유를 쉽게 이해할 수 있을 것이다. 각 필드의 의미는 다음과 같다.

■ COMMAND : 명령어의 이름
■ PID : 프로세서 ID, 각 프로세서를 구분하기 위한 고유의 ID
■ RSS : 프로세서에 의해 사용되는 실제 메모리의 용량(K byte 단위)
■ USER : 프로세서를 실행시킨 소유자의 계정을 보여준다.
■ SZ : 프로세서의 자료와 스텍 크기의 (K byte 단위)
■ TIME : 현재까지 사용된 CPU의 시간(분,초)
■ TT : 프로세서의 제어 터미널(t3=/dev/tty3)
■ %CPU : 마지막 분동안 프로세서가 사용한 CPU시간의 백분율
■ START : 프로세서가 시작된 시간
■ STAT : 프로세서의 상태

이중 STAT 필드는 몇 가지의 부호를 사용해서 프로세서의 상태를 표시하고 있다. 그것들을 정리해 보면 다음과 같다.
■ P : 수행 가능/수행중
■ T : 일시 정지
■ D : 디스크 입출력 대기 같은 인터럽트할 수 없는 대기상태
■ S : 20초 미만의 짧게 잠듦(sleep)
■ I : 20초 이상의 길게 잠듦
■ Z : 좀비(zombi) 프로세서

좀비(zomb) 상태라는 것은 프로세서가 사라질 때 시그널 처리의 문제로 완전히 소멸되지 못한 상태를 말한다.

사용예
$ ps


pwd
: 현재 작업하는 디렉토리를 알기 위해서 pwd 명령을 사용한다.

문법
# pwd

설명
현 디렉토리(current directory)가 무엇인지 보여준다.

사용예
# pwd
/home/blade


reboot
: 시스템을 리부팅한다.

문법
# reboot [ -q ]

옵션
-q : 현재의 프로세서들을 종료시키지 않고, 부팅 동작만을 수행한다. 이 옵션을 사용하면 더 빠르게 리부팅할 수 있다. 다시 부팅한 기록은 로그 파일인 /var/adm/wtmp에 기록된다.

설명
이것은 모든 사용자 프로세서를 종료시키고 디스크로부터 리눅스를 다시 부팅한다. 시스템을 리부팅하기 위해 shutdown 명령의 -r 옵션을 사용할 수도 있지만 그보다 reboot 명령을 사용하는 것이 더 편리해 보인다.

사용예
# reboot


rcp
: 컴퓨터 사이에서 파일을 복사할 때 사용된다. “remote cp"에서 이름이 유래한다.

문법
# rcp [ -rpkx ] 파일명1 파일명2
# rcp [ -rpkx ] 파일명들 디렉토리

옵션
-r : 하위 디렉토리까지 재귀적으로 모두 복사한다.
-p : 파일의 시간과 모드를 보존한다.
-k : kerberos ticktets을 요구한다.
-x : 복사되는 모든 데이터에 암호화 과정을 거친다.

설명
원격 파일과 원격 호스트 이름은 콜론을 사용하여 구분한다. 마지막 인수가 디렉토리 이름이라면 지정된 모든 파일들은 그곳으로 복사된다.

사용예
# rcp victor.com:/root/* /home/victorfile
원격 호스트 victor.com의 /root에 있는 모든 파일들을 자신의 컴퓨터에 있는 디렉토리 /home/vitorfile로 복사한다.


rm
: 파일을 지우는 명령이다. 이것은 remove의 의미를 가진 이름임을 기억하라.

문법
# rm [ -firv ] 파일명

옵션
-f : 보통 지울 수 있는 권한이 없으면 안되지만, 이 옵션을 사용하면 성가신 작업을 하지 않고서도 강제로 파일을 지울 수 있다.
-i : 파일을 지울 것인가 다시 물어본다. 지우기를 원한다면 y를 누른다.
-r : 서브 디렉토리의 파일도 모두 재귀적으로 지운다.
-v : 파일을 지우기 전에 파일의 이름을 나타내준다.

설명
rm 명령의 동작은 정확히 말해서 ‘파일의 레이블을 삭제한다’라고 말할 수 있다. 단순히 파일을 지운다고 말하는 것은 틀릴 수도 있는 것이다. 왜냐하면 유닉스 상에서는 하나의 파일이 여러 다른 디렉토리에서 동시에 여러개의 이름을 가질 수 있기 때문이다. 만일 어떤 파일이 세 개의 레이블을 가지고 있다면 rm 명령으로 하나의 레이블을 지우는 것은 그 파일 자체를 지우지는 못한다. 다른 두 개의 파일 이름이 아직 유효하기 때문이다. 다시 두 번째 레이블을 지우더라도 파일은 하나의 파일 이름을 가지고 살아있으며, 마지막 하나의 파일 이름이 제거될 때에만 파일은 지워지는 것이다.

사용예
# rm blade.Z
# rm report.txt tempfile object.mainroutine hello.java
# rm -r blade ,, blade와 하위 디렉토리 파일 모두를 제거


rmdir
: 원하는 디렉토리를 제거한다.

문법
# rmdir [ -p ] 디렉토리

옵션
-p : mkdir의 -p 옵션의 반대 동작으로 하위 디렉토리와 그 상위 디렉토리 모두를 제거할 수 있다. 이때 모든 디렉토리는 비워져 있어야 한다. 수행 후 결과가 어떻게 되었는지를 보여준다.

설명
제거하기를 원하는 디렉토리는 미리 모든 파일들이 비워져 있어야 한다. 이러한 작업을 편리하게 하기 위해서는 파일을 지우는 명령인 rm 명령을 -r 옵션과 사용하면 된다.

사용예
# rmdir -p sisap/books ,,디렉토리가 비워져 있다면 books를 제거한 후 sisap을 제거한다.


shutdown
: 시스템을 종료할 때 일반적으로 사용되는 명령이다.

문법
# shutdown [ -thnrfck ] 시간 [ 메시지 ]
# shutdown now

옵션
-t n : t 옵션 뒤에 n초를 명시해서, 경고 메시지를 보낸 후 n초 후에 kill 시그널을 보낸다.
-h : shutdown시 halt를 실행하게 한다.
-n : 디스크 동기화 동작의 수행을 금지한다. 이런 옵션은 보통 사용할 일이 없을 것이다.
-r : 시스템 종료를 완료하고 나서 다시 부팅 과정을 수행한다.
-f : 빠른 리부팅을 한다. 리부팅시 파일 시스템 검사를 하지 않는다.
-c : 이미 예약되어 있는 shutdown을 취소한다. 이 옵션을 준다면 시간 인수는 줄 수 없다. 하지만 메시지는 사용자들에게 줄 수 있다.
-k : 모든 동작을 제대로 수행하지만 시스템을 종료할 시간이 되면 아무 것도 하지 않는다. 보는 사람으로 하여금 ‘절로 누구 놀리나?’하는 말이 나오게 한다. k는 ‘just kidding'의 의미라고 한다.

설명
요즘은 컴퓨터를 끄기 전에 반드시 shutdown 절차를 거쳐서 시스템을 정리해야 한다는 것이 상식으로 통한다. 8비트 컴퓨터를 사용할 때는 그런 복잡한 것은 생각하지 않아도 문제 없었는데 말이다. 하드웨어와 스위치를 내리는 데에 소프트웨어의 허락을 받아야만 하는 것이다. shutdown 명령은 미리 사용자들에게 경고만을 보내고, 정해진 시간에 시스템을 종료한다. 시간은 24시간 단위의 표기법을 사용하며 종료 5분전에는 시스템에 로그인이 금지된다. 시스템 종료 시간이 가까워짐에 따라 각 사용자들에게 메시지를 주기적으로 출력하여 경고를 보낸다.

사용예
다음은 밤 11시 30분에 시스템을 종료하도록 예약하며 사용자들에게 그것을 알린다.
# shutdown 23:30 System will be down at 11:30 PM!!

시간을 명시할 때 now를 사용하면 곧바로 시스템을 종료한다. 리눅스 사용자들은 컴퓨터를 끄기 전에 이렇게 하면 간단하다. 혼자 사용하고 있을 때 번거로운 과정은 필요 없을 테니까 말이다.


sleep
: sleep이라는 명령은 이름 그대로 잠자는 일 외에는 하는 일이 없다.

문법
# sleep 시간

설명
시간은 초 단위의 정수 숫자이다. 전면(foreground)에서 수행된다면 사용자의 터미널은 정해진 시간만큼 잠을 잘 것이다. 물론 정해진 시간에 즉각 일어나니 안심해라. 원한다면 ^C로 흔들어 깨울 수도 있다. sleep을 사용하는 가장 좋은 예는 3장에서 본 것과 같이 다중 작업을 시행할 때이다.
다음과 같은 확인자를 사용한다면 다른 시간 단위를 사용할 수 있다.
S 초, m 분, h 시간, d 날짜


sort
: 파일내의 단어 순서를 행 단위로 정렬한다.

문법
# sort [ -cmuodfiMnrtb ] 파일이름(들)

옵션
-c : 파일이 정렬되었는지 검사한다. 그렇다면 아무런 출력도 하지 않는다.
-m : 특정한 파일을 병합한다. 파일은 이미 정렬되었다고 가정한다.
-u : 고유한 행만이 출력된다.
-o 파일명: 출력 파일 이름을 지정한다. 이름은 입력 파일 이름과 같을 수 있다.
-d : 사전(dictionary)과 같은 순서대로 정렬한다. 단어 정렬 순서에는 문자, 숫자, 공백 문자만이 사용된다.
-f : 대문자와 소문자를 구별하지 않는다.
-i : 정렬에 사용되는 문자 중 프린트될 수 없는 문자는 사용하지 않는다.
-M : 단어를 정렬할 때 달을 의미하는 문자를 취급한다. FEB는 JAN보다 뒤에 정렬된다.
-n : 숫자를 같은 문자가 아닌 정말로 숫자로 취급해서 수의 크기대로 정렬한다.
-r : 역순으로 정렬한다.
-t 문자 : 단어 등 필드를 구분하는 문자를 지정한다. 탭(tab)이나 공백 문자 이외의 문자를 구분 문자로 취급하도록 한다.
-b : 단어의 뒤에 오는 공백 문자는 정렬 키(key) 값으로 무시하도록 한다.

설명
sort명령의 정렬 방법에는 다음과 같은 기준이 있다.
- 일반적인 알파벳 순서로 정렬하되 소문자보다 대문자가 우선한다.
- 대소문자 보다 숫자가 우선한다. 숫자는 처음에 오는 숫자의 순서에 의한다. 즉 숫자들도 문자처럼 취급될 뿐이지, 실제 숫자의 대소는 생각하지 않는다.

사용예
$ cat sample
speaker
audio system
Hi-Fi video
1997
4th object?
good!
# sort sample ,, 문자를 정렬
# cat sample ,, 분류된 내용 확인
1997
4th object?
Hi-Fi video
audio system
good!
speaker


split
: 텍스트 파일을 작은 조각으로 나눈다. 너무 커서 다루기 불편한 텍스트 문서를 나눌 때 사용된다.

문법
# split -행 수 파일명 [ 태그명 ]

옵션
-행 수 : 몇 개의 행 단위로 조각을 나누는지 정한다.

설명
파일이 나누어지면 나누어진 파일들의 접미사는 순서대로 .xaa .xab .xac ...와 같이 붙여진다. 만일 태그 이름을 지정한다면 사용자가 지정한 태그 이름은 기본값 태그 이름의 x 문자를 대체하게 된다. 태그 이름을 block이 라고 준다면 나누어진 파일들은 .blockaa .blockab .blockac 등과 같은 접미사를 가질 것이다.

사용예
# split -400 project.a pro
project.a 파일을 400행 단위로 나눈다. 첫 조각의 접미사는 .proaa가 된다.


su
: 다른 사용자 계정으로 서브 셸을 생성한다. 잠시만 다른 사용자 계정으로 작업할 필요가 있을 때 사용한다.

문법
# su [ - ] [ 사용자ID ][인수]

옵션
- : 하이픈 (-)을 사용하면 새로운 셸로 로그인할 때 자신의 로그인 과정을 수행한다. 옵션이 주어지지 않으면 새로운 셸은 단지 셸 역할을 수행할 뿐이다.

설명
아무런 인수없이 su를 사용하면, 이것은 root 계정으로 로그인하기를 원하는 것으로 간주된다. 그래서 많은 사람들이 su가 ‘super user'를 의미하는 말로 생각하지만, 사실은 ’substitute user'를 의미하는 말이다. 물론 수퍼 유저의 패스워드를 알고 있어야만 한다.
su의 인수로 원하는 사용자의 ID를 주면 그 사용자의 패스워드를 물어오고, 입력한 패스워드가 일치한다면 새롭게 생성된 셸을 볼 수 있다. 그렇게 다른 사람으로 작업한 후에 exit등으로 셸을 종료하면 다시 이전에 작업하던 셸로 돌아갈 수 있다. 이 명령은 혼자서 시스템을 사용하는 리눅스 사용자들에게 매우 유용하다. 기본적으로 일반 사용자 계정으로 작업하다가 필요한 경우 수퍼 유저로 로그인하고서 필요한 일이 끝나면 다시 일반 계정 셸로 돌아갈 수 있기 때문이다.

사용예
# whoami
blade
# su sisap
Password: ,,여기서 sisap의 패스워드를 입력
# whoami
sisap
# exit ,,sisap의 셸을 종료
exit
# whoami
blade


sync
: 현재 시스템 디스크의 IO 버퍼에 있는 디스크 이미지를 하드 디스크로 기록한다.

문법
# sync

설명
시스템을 다운시키기 전에 버퍼에 있는 이미지를 반드시 디스크로 기록해야 한다. 그렇지 않으면 디스크는 기록된 정보의 이미지와 일치하지 않는 이미지를 가지게 될지도 모른다. 사실, 이것을 사용할 경우는 극히 드물다. 왜냐하면 shutdown등의 동작을 수행하면 그들이 자동적으로 sync를 호출하기 때문이다.

사용예
# sync ,, 버퍼의 내용을 디스크로 기록한다.