작업을 원하는 디렉토리로 이동한다.

사용법 : cd [디렉토리] 

디렉토리를 이동하는 명령어이다. 단순하지만 가장 기본적인 명령으로, 가장 자주 사용하게 될 것이다.
cd 디렉토리 -이동하기를 원하는 디렉토리로 이동한다.
cd . -현재 디렉토리
cd .. -상위 디렉토리로 이동한다.
cd $ -변수명변수에 지정된 디렉토리로 이동한다.
cd / -가장 상위 디렉토리로 이동한다.
cd ~ / cd $HOME / cd -사용자의 홈 디렉토리로 이동한다.
cd ~사용자명 -지정된 사용자의 홈디렉토리로 이동한다.

pwd로 현재 디렉토리를 확인한다. 한 단계 위의 상위 디렉토리로 이동하거나 어느 위치에서도 사용자 계정의 HOME 디렉토리로 이동할 수 있다.

# pwd 
/usr/local 
# cd .. 
# pwd 
/usr 
# cd ~songsari 
# pwd 
/home/songsari 
2005/06/21 21:13 2005/06/21 21:13
커서 기반 메뉴의 파티션 설정 유틸리티

사용법 : cfdisk [옵션] [장치] 
-a : 현재 파티션을 커서로 선택한다. 
-c cylinders : 실린더 개수를 지정한다. 
-h heads : 헤드 수를 지정한다. 
-s sector-per-track : 트랙 당 섹터 수를 지정한다. 
-z : 파티션 정보를 읽지 않고 시작한다. 
-P format : r(raw data), s(sector order), t(raw format)의 포멧에 따라 파티션 테이블을 보여준다. 

cfdisk는 커서 메뉴 기반의 파티션 설정 유틸리티이다. 리눅스에서는 기본 파티션 설정 명령인 fdisk 이외에 cfdisk나 설치시 볼 수 있는 Disk Druid같은 그래픽 방식의 프로그램을 지원한다.

cfdisk 실행후 명령어
? -도움말
b -선택된 파티션으로 부팅할 수 있도록 설정
d -선택된 파티션 삭제
g -전문가 모드
h -도움말
n -새로운 파티션 생성
p -현재의 파티션 정보 출력
q -종료
t -파일 시스템 종료 변경
W -저장

[관련 명령어]
fdisk 파티션을 설정하기 위한 명령어
2005/06/21 21:13 2005/06/21 21:13
시스템 보안을 위해 사용자 패스워드 만기일을 설정 및 변경하는 명령어

사용법 : chage [옵션] user 
-m [최소날짜] : 패스워드 변경 후 다시 변경할 수 있는 최소 날짜를 지정한다. 
     0값은 매번 패스워드를 변경해야 한다. 
-M [최대날짜] : 패스워드가 유효한 최대 날짜를 지정한다. 
-d [마지막날짜] : 패스워드의 마지막 변경 날짜를 YYYY-MM-DD형태로 나타낸다. 
-E [만료날짜] : 사용자 계정이 더 이상 접근이 불가능한 날짜를 지정한다. 
     이후에는 패스워드 잠금 상태가 된다. 
-I [잠금날짜] : 계정의 패스워드 만기가 되어, 계정을 사용할 수 없게 되는 날짜를 지정한다. 그 이후에 패스워드를 잠금 상태로 만든다. 
-W [경고날짜] : 패스워드가 만기가 되기 전, 안내 메시지는 날짜를 지정한다. 
-l user : 사용자의 패스워드 만기 정보를 보여준다.

chage는 사용자의 패스워드 만기 정보를 보거나 만기일을 설정 변경한다. 이는 /etc/passwd 와 /etc/shadow 파일을 참조한다. 시스템 보안적인 측면에서 패스워드 관리는 매우 중요하다. 하지만, 많은 사용자 관리는 그만큼 번거러운 작업이 될 수 있다. chage명령은 미리 지정한 날짜에 의해 그 날짜가 지나면 패스워드를 변경하여 보다 효율적인 시스템 관리를 할 수 있도록 도와준다.
먼저 admin 계정에 대한 패스워드 만기일과 나머지를 정보를 살펴보자.

# chage -l admin 
Minimum:        0 
Maximum:        99999 
Warning:        7 
Inactive:       -1 
Last Change:            2월 19, 2002 
Password Inactive:      Never 
Account Expires:        Never 

그럼 admin 계정 패스워드 만기를 최대 날짜 수 : 7일, 최소 날짜 수 : 1일, 경고 번호 : 7로 지정해 보자

# chage -M 7 -m 1 -W 7 admin 
# chage -l admin 
Minimum:        1 
Maximum:        7 
Warning:        7 
Inactive:       -1 
Last Change:            5월 11, 2002 
Account Expires:        5월 18, 2002 
Password Inactive:      Never 

-I 옵션에 0값을 설정하면, 설정한 패스워드 만기 날짜 이후에는 바로 계정을 사용할 수 없게 한다. 경각심을 불러일으키기 좋은 방법이다.

# chage -I 0 admin 

-E 옵션은 admin 계정을 2002년 6월 30일 이후 잠근다.

# chage -E 2002-06-30 admin 

admin 계정을 잠금 해제시켜 본다.

# chage -E 0 admin 
2005/06/21 21:12 2005/06/21 21:12
파일시스템의 파일 속성을 변경하여 관리자도 실수로 파일을 손상시키지 않도록 보호한다.

사용법 : chattr [옵션] 속성파일... 
-R : 디렉토리와 그 이하 모든 속성을 변환시킨다. 
-V : 변화된 속성에 대하여 자세히 출력한다. 
-v : 버전을 볼 수 있다. 
a : 파일을 추가모드로만 열 수 있다. 
c : 커널에 의해 디스크 상에 압축 상태로 저장된다. 
d : dump 명령 수행 시 백업되지 않는다. 
I : 파일을 수정할 수 없다. 오직 수퍼유저만이 다시 이 속성을 변경 가능하다. 
s : 파일이 지워질 때 일단 블럭들이 모두 0이 된 다음 디스크에 기록된다. 
S : 파일이 수정될 때 그 변화가 디스크 상에 동기화된다. 
u : 파일이 지워지면 내용이 저장된다.

파일시스템에서의 파일 속성을 변경하는 명령어이다. 보호되어야만 하는 파일들을 실수로 지우거나 덧쓰는 경우가 없도록 하도록 하기 위한 방편이다.
+ 속성은 파일에 속성을 추가하고, - 속성은 파일에서 속성을 제거한다. = 속성은 파일이 오로지 주어진 속성만 갖도록 한다.
chattr +i 옵션으로 /etc/passwd에 i 속성을 부여해보자. 이는 파일을 지울수도 이름을 변경할 수도 내용을 추가할수도, 링크를 생성할 수도 없다.

# chattr +i /etc/passwd 

lsattr 명령으로 변경된 속성들을 확인할 수 있다.

# lsattr /etc/passwd 
---i---------- /etc/passwd 

+i 속성이 부여된 /etc/passwd 파일을 삭제해 보자. 속성을 제거하기 전까지는 이를 삭제할 수는 없다. 마찬가지로 파일 내용 변경도 불가능하다. vi 에디터로 파일을 열어도 읽기전용으로 수정이 불가능하게 되는 것이다.

# rm -rf /etc/passwd 
rm: cannot unlink /etc/passwd': Operation 
not permitted 

그럼, 이 -i 속성을 /etc/passwd 파일에서 제거해 보자.

# chattr -i /etc/passwd 
# lsattr /etc/passwd 
-------------- /etc/passwd 

이후에는 이 파일을 수정하거나 제거할 수 있다.

[관련 명령어]
lsattr 리눅스 파일시스템의 파일 속성을 보는 명령어
2005/06/21 21:10 2005/06/21 21:10
일일히 패스워드 파일 등을 변경하지 않고도 finger 명령어를 사용했을 때 볼 수 있는 사용자 기본 정보를 변경하는 명령이다.

사용법 : chfn [옵션] 사용자이름 
사용자이름 : 정보를 변경하고 싶은 사용자 이름. 공백일 경우 자신의 계정 정보가 변경 된다. 
-f, --full-name : 사용자 전체 이름 변경을 변경한다. (사용자 계정과 다름) 
-h, --home-phone : 사용자 집 전화번호 변경한다. 
-o, --office-phone : 사용자의 직장 전화번호를 변경한다. 
-p, --office-phone : 사용자의 직장 전화번호를 변경한다. 
-u, --help : 도움말을 보여준다. 
-v, --version : 버전 정보를 보여준다. 

등록되어 있는 사용자의 정보를 변경할 때 사용한다. 서버의 관리자라면 계정으로 등록된 사용자의 정보를 변경할 때 사용할 수 있다. chfn 명령은 /etc/passwd에 저장된 정보를 변경하므로 텍스트 에디터로 이 파일을 열어 변경해 주어도 된다.
finger 명령으로 사용자 정보를 확인할 수 있다.
관리자가 사용자의 정보를 변경 하고자 할 경우 다음과 같이 한다. 여기에서는 songsari라는 사용자의 정보를 바꾸어 보도록 하겠다.

# chfn admin 
Changing finger information for songsari 
Name [송사리] : 홍길동 -> 이름변경 
Office[Nfoz.net] : Nfozone -> 직장변경 
Office Phone[] : 02-1234-1234 -> 직장 전화번호 변경 
Home Phone[] : 02-0987-0987 -> 집 전화번호 변경 

사용자 정보 중 이름만 "송사리"로 변경할 경우에는 다음과 같이 할 수 있다.

# chfn -h "송사리" songsari 
Changing finger information for songsari 
Finger information changed. 

변경된 정보를 확인 하려면 finger 명령을 이용한다.

# finger songsari : 사용자 정보 확인 
Login: songsari                         Name: 송사리 
Directory: /home/songsari             Shell: /bin/bash 
Office: Nfozone, 02-1234-1234          Home Phone : 02-0987-0987 

사용자 이름과 회사 집 전화 번호 등이 변경된 것을 확인 할 수 있다.

[관련 명령어]
finger 사용자 정보 확인
chgrp 파일의 그룹 변경
chmod 파일의 권한 변경
chown 파일의 소유자 변경
chsh 셀변경
2005/06/21 21:07 2005/06/21 21:07
파일의 소유 그룹을 변경하는 명령어이다. 주로 chmod와 함께 사용하여 파일을 사용하는 접근 권한을 설정할 때 사용한다.

사용법 : chgrp [옵션] 그룹명 파일명 
그룹명 : 새로운 그룹명 
파일명 : 그룹을 변경하고 싶은 파일 이름 
-c, --changes : 그룹이 변경되는 파일만 보여준다. 
-f, --silent, --quiet : 그룹이 변경되지 않는 경우에도 에러를 보여주지 않는다. 
--help : 도움말을 보여준다. 
-R, --recursive : 하위 디렉토리에 있는 모든 디렉토리/파일의 그룹 변경한다. 
--reference=filename : 지정한 파일에서의 그룹을 변경한다. 
-v, --verbose : 그룹 변경을 자세히 보여준다. 
--version : 버전 정보를 보여준다. 

파일을 새로운 그룹으로 변경한다. 새로운 그룹의 고유 번호나 그룹 이름으로 변경할수 있으며 /etc/group에서 새로운 그룹에 대한 정보를 확인할 수 있다.
그룹의 변경의 파일의 소유자나 관리자만이 할 수 있다.
songsari 디렉토리와 그 하위 디렉토리를 모두 fish 그룹으로 바꾸고 변경된 그룹을 확인해 보겠다.

# chgrp -R fish songsari/ 
# ls -al 
drwxr-xr-x    6 root     root         4096 Mar 29 23:02 . 
drwxr-xr-x   19 root     root         4096 Mar 17 09:23 .. 
drwxr-xr-x    1 root     fish         4096 Nov 12 00:17 songsari 
2005/06/21 21:06 2005/06/21 21:06
시스템을 부팅할때 실행 레벨 별로 자동 실행할 서비스를 살펴 보고 업데이트 하는 명령이다.

사용법 : 
chkconfig --list [이름] 
chkconfig --add 이름 
chkconfig --del 이름 
chkconfig [--level 레벨] 이름 <on|off|reset> 
chkconfig [--level 레벨] 이름 

부팅할 때 서비스할 데몬은 /etc/rc.d 각 디렉토리에 모여 있다. rc 뒤에 붙은 숫자는 t 실행 레벨 번호로 rc0.d는 실행 레벨 0이며 rc1.d는 1, rd5.d는 실행 레벨 5에 대한 디렉토리이다.
먼전 rc5.d 디렉토리를 살펴보자. 여기서 K로 시작하는 파일은 시스템을 시작할 때 시작하지 않는 데몬이며, S로 시작하는 파일이 부팅 시 서비스할 데몬이다.
S 다음의 숫자는 시작할 데몬의 순서이다.

# ls /etc/rc.d/rc5.d/ 
K12mysqld           K50snmpd       S05kudzu     S20random      S85gpm 
K15httpd              K50snmptrapd S08ipchains  S25netfs         S90crond 
K15proftpd           K50tux            S08iptables  S26apmd          S90xfs 
K20nfs                 K65identd       S09isdn       S28autofs         S95anacron 
K25squid             K70aep1000     S10network   S55sshd          S95atd 
K34yppasswdd     K70bcm5820    S12syslog    S56rawdevices  S97rhnsd 
K45arpwatch        K74nscd         S13portmap   S56xinetd         S99local 
K45named            K74ypserv      S14nfslock    S60lpd 
K46radvd              K74ypxfrd      S17keytable  S80sendmail 

부팅할 때 시작할 데몬 파일 이름을K로 시작하는 파일에서 S로 시작하는 파일이름으로 변경하여 설정활 수도 있지만 chkconfig 명령을 사용하면 손쉽게 변경할 수 있으며 좀 더 많은 기능을 볼 수 있다.

# chkconfig --list | more 
keytable        0:off   1:on    2:on    3:off   4:on    5:off   6:off 
atd             0:off   1:off   2:off   3:off   4:on    5:on    6:off 
syslog          0:off   1:off   2:on    3:on    4:on    5:on    6:off 
gpm             0:off   1:off   2:on    3:off   4:on    5:on    6:off 
sendmail        0:off   1:off   2:on    3:on    4:on    5:on    6:off 
kudzu           0:off   1:off   2:off   3:off   4:on    5:on    6:off 
netfs           0:off   1:off   2:off   3:off   4:on    5:on    6:off 
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off 
random          0:off   1:off   2:on    3:on    4:on    5:on    6:off 
rawdevices      0:off   1:off   2:off   3:off   4:on    5:on    6:off 
apmd            0:off   1:off   2:on    3:off   4:on    5:on    6:off 
ipchains        0:off   1:off   2:on    3:off   4:on    5:on    6:off 
iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off 
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off 
anacron         0:off   1:off   2:on    3:off   4:on    5:on    6:off 
lpd             0:off   1:off   2:on    3:off   4:on    5:on    6:off 
portmap         0:off   1:off   2:off   3:off   4:on    5:on    6:off 
xfs             0:off   1:off   2:on    3:off   4:on    5:on    6:off 
xinetd          0:off   1:off   2:off   3:on    4:on    5:on    6:off 
rhnsd           0:off   1:off   2:off   3:off   4:on    5:on    6:off 
autofs          0:off   1:off   2:off   3:off   4:on    5:on    6:off 

위 목록중 keytable 데몬이 런 레벨 5에서 해제 되어 있다. 이를 활성화하도록 해보자

# chkconfig --level 5 keytable on 

--list 옵션은 서비스 정보를 살펴 볼 수 있다.

# chkconfig --list keytable 
keytable        0:off   1:on    2:on    3:off   4:on    5:on    6:off 

설정한 실행 레벨 5에서의 데몬 서비스를 다시 해제해 보자

# chkconfig --level 5 keytable off 
# chkconfig --list keytable 
keytable        0:off   1:on    2:on    3:off   4:on    5:off    6:off 

--del 명령으로 지정한 데몬 서비스와 관련된 모든 실행 레벨에 해제할 수도 있다.

# chkconfig --del keytable 
# chkconfig --list keytable 
keytable        0:off   1:off    2:off    3:off   4:off    5:off    6:off 

그럼, 다시 --add 명령어로 1,6레벨을 제외한 모든 레벨을 활성화해 보자.

# chkconfig --add keytable 
# chkconfig --list keytable 
keytable        0:off   1:on    2:on    3:on   4:on    5:on    6:off 

[관련 명령어]
ntsysv 부팅 시 서비스할 메뉴형 관리 유틸리티
2005/06/21 21:05 2005/06/21 21:05
파일의 권한을 변경하는 명령어

사용법 : chmod [옵션] 모드 파일명 
모드 : 새로운 모드(permissions) 
파일명 : 모드를 변경하고 싶은 파일 이름 
-c, --changes : 변경된 파일들에 대한 정보를 보여준다. 
-f, --silent, --quiet : chmod로 변경되지 않는 파일에 대한 에러를 보여주지 않는다. 
--help : 도움말을 보여준다. 
-R, --recursive : 하위 디렉토리에 있는 모든 디렉토리/파일에 대해 적용 변경한다. 
--reference=filename : 지정한 파일을 참조하여 퍼미션을 변경한다. 
-v, --verbose : 각 파일에 대해 변경에 대한 정보나 변경되지 않은 정보를 상세히 보여준다. 
--version : 버전정보를 보여준다. 

chmod 명령어는 파일이나 디렉토리를 새로운 권한으로 변경하는 명령어이다. 파일의 소유자나 시스템 관리자만이 chmod를 사용할 수 있으며 파일의 소유자, 파일의 그룹, 다른 사용자로 나누어 설정할 수 있다.
chmod를 이용한 파일/디렉토리의 권한 변경은 8진수를 이용 변경법과 기호에 의한 변경법이 있다. 방법이 달라도 같은 변경된 결과를 구할 수 있다.

모드 보기
파일이나 디렉토리는 모두 각각의 권한을 가지고 있다. 파일이나 디렉토리의 권한은 ls명령어를 이용하여 볼 수 있다.
출력된 내용은 다음과 같이 생각할 수 있다.

모드              파일소유자 파일그룹 용량 파일생성시간   파일명 
drwxrwxrw- 1 songsari   fish      46    JAN 21 18:23   dir 
-rw-r----x 1 songsari   fish      46    JAN 21 18:23   test.txt 

모드는 파일을 사용할 수 있는 상태를 뜻한다.

모드           설명                                               8진수표현 
d--------- 파일/디렉토리 구분 (파일:-,디렉토리:d)    
-r-------- 파일/디렉토리 소유자가 읽기 권한이 있다    400 
--w------- 파일/디렉토리 소유자가 쓰기 권한이 있다   200 
---x------ 파일/디렉토리 소유자가 실행 권한이 있다    100 
----r----- 파일/디렉토리 그룹이 읽기 권한이 있다         40 
-----w---- 파일/디렉토리 그룹이 쓰기 권한이 있다        20 
------x--- 파일/디렉토리 그룹이 실행 권한이 있다         10 
-------r-- 다른 사용자가 읽기 권한이 있다                    4 
--------w- 다른 사용자가 쓰기 권한이 있다                   2 
---------x 다른 사용자가 실행 권한이 있다                    1 

기호 모드에 의한 파일 권한변경
기호에 의한 변경밥업은 주요 기능의 기호화한 조합으로 설정할 수 있다. 사용자 기호 는 파일/디렉토리를 사용하려는 사용자에 따른 구분이다. 파일/디렉토리에 소유자나 그룹 그 외의 사용자에 다른 권한을 줄 수 있다. 설정하고 싶은 권한을 퍼미션 기호에서 정하여 설정기호를 이용해 조합하여 사용한다. 예로 test.txt 라는 파일을 다른 사용자가 읽을 수 있는 권한을 준다면 다음과 같이 입력한다.

# chmod o+r test.txt 

test.txt파일에 소유자와 그룹에 읽기 쓰기 권한을 주고 다른 사용자의 읽기 권한을 금지하고자 한다면 다음과 같이 입력한다.

# chmod ug+rw,o-r test.txt 

이 경우 쉼표(,)를 이용해 한번에 중복 설정할 수 있다.
[b]사용자 기호
u : user-파일/디렉토리의 소유자
g : group-파일/디렉토리의 그룹
o : other-다른 사용자
a : all-소유자, 그룹, 다른 사용자 모두(아무 표시 안할 경우 기본으로 설정됨)
퍼미션 기호
r : read-파일/디렉토리에 읽기 권한을 준다.
w : write-파일/디렉토리에 쓰기 권한을 준다
x : execute-파일/디렉토리에 실행 권한을 준다.
s : set user(group) ID-파일 실행 시 파일의 소유자 혹은 그룹 권한으로 실행된다.
t : sticky bit-Sticky 비트를 설정한다.
u : user-현재 소유자의 퍼미션 설정과 같은 내용으로 변경된다.
g : group-현재 그룹의 퍼미션 설정과 같은 내용으로 변경된다.
o : other-현재 다른 사용자의 퍼미션 설정과 같은 내용으로 변경된다.
l : locking-강제로 파일을 잠근다.
설정기호
+ : 퍼미션 허가-지정한 퍼미션을 허가한다.
- : 퍼미션 금지-지정된 퍼미션을 금지시킨다.
= : 퍼미션 지정-지정된 퍼미션만 허가하고 나머지는 금지 시킨다.
8진수를 이용한 권한 변경
네 자리의 8진수를 이용하여 파일/디렉토리의 권한을 변경한다. 기본 8진수 테이블에 있는 숫자를 더해서 사용한다.
예로 test.txt 라는 파일에 소유자는 읽기 쓰기 실행 권한을 그룹은 읽기 실행 권한을 다른 사용자는 읽을 수 있는 권한을 준다면

# chmod 754 test.txt 

파일 소유자 위치에 일기(4), 쓰기(2), 실행(1)을 더하여 7을 넣는다. 그룹에는 읽기(4), 실행(1)을 더해서 5를 다른 사용자 위치에는 읽기 권한만 주어 4를 넣어 준다.
8진수 모드 변경
파일/디렉토리 소유자
0400 -파일/디렉토리의 소유자에게 읽기 권한을 준다
0200 -파일/디렉토리의 소유자에게 쓰기 권한을 준다
0100 -파일/디렉토리의 소유자에게 실행 권한을 준다
파일/디렉토리 그룹
0040 -파일/디렉토리의 그룹에게 읽기 권한을 준다
0020 -파일/디렉토리의 그룹에게 쓰기 권한을 준다
0010 -파일/디렉토리의 그룹에게 실행 권한을 준다
다른사용자
0004 -다른 사용자에게 읽기 권한을준다
0002 -다른 사용자에게 쓰기 권한을준다
0001 -다른 사용자에게 실행 권한을준다

4000 -파일 실행 시 파일의 소유자 혹은 그룹 권한으로 실행된다.
2000 -파일 실행 시 파일의 소유자 혹은 그룹 권한으로 실행된다.
1000 -Sticky 비트

파일 정보를 보기 위해 ls를 사용한다.

# ls -al 
drwxr-x---    6 root     root         4096 Mar 29 23:02 . 
drwx-----x   19 root     root         4096 Mar 17 09:23 .. 
-rwxr-xr-x   19 root     root        14096 Mar 17 09:23 test1.bmp 
drwxr-xr-x   19 root     fish         4096 Mar 17 09:23 songsari 

test1.bmp 파일을 소유자는 "읽기 쓰기 실행" 그룹은 "읽기 쓰기" 다른 사용자는 "실행으로 변경 해보자.

기호 모드로 변경
현재 소유자는 읽기 쓰기 실행 권한으로 되어 있어서 수정할 필요가 없으며 구룹은 읽기 실행 권한으로 되어 있으므로 실행 권한을 금지시키고 쓰기 권한을 주며 다른 사용자는 일기 실행 권한으로 되어 있으므로 읽기 권한을 금지시키며 된다.
그룹(u)에 실행(x)권한 금지, 쓰기(w)권한 주기 : u-x+w
다른 사용자(o)에 읽기(r)권한 금지 : o-r

# chmod u-x+w,o-r test1.bmp 

8진수 모드로 변경
소유자의 일기(400) 쓰기(200) 실행(100)권한을 그룹에 읽기(40) 쓰기(20) 다른 사용자는 실행(1) 권한을 준다.
소유자 읽기 쓰기 실행 : 400+200+100 : 700
그룹 읽기 쓰기 : 40+20 : 60
다른 사용자 실행 : 1 : 1

# chmod 761 test1.bmp 

[관련 명령어]
chfn 사용자 정보 변경
chgrp 그룹변경
chown 소유자 변경
chsh 셀 변경
2005/06/21 21:03 2005/06/21 21:03
파일에 대한 사용자와 그룹을 변경하는 명령어

사용법 : 
chown [옵션...] 소유자: [그룹] 파일... 
chown [옵션...] .그룹 파일... 
-f, --silent, --quiet : chown 명령으로 변경되지 않은 파일들에 대해 에러메세지를 보여주지 않는다. 
-R, --recursive : 하위 디렉토리/파일에 모두 적용하여 바꾼다. 
-v, --verbose : 변경되는 진행되는 자세하게 상태를 보여준다. 
--help : 도움말을 보여준다. 
--version : 명령어에 대한 버젼을 보여준다.

chown 명령어는 파일에 대한 소유자와 그룹을 지정한 소유자의 그룹으로 변경한다. 아파치 웹 서버 서비스를 위한 index 디렉토리를 한 번 살펴보자. 레드헷 패키지로 설치한 경우 이는 /var/www/html 디렉토리가 된다. 지금 현재 index.html의 소유자와 그룹은 모두 admin으로 되어 있다.

# ls -al /var/www/html/index.html 
-rw-r--r-- 1 admin admin  408 12월 3 09:34 /var/www/html/index.html 

index.html의 소유자와 그룹을 모두 webmaster로 변경해 보자

# chown webmaster,webmaster /var/www/html/index.html 

index.html 파일의 소유자와 그룹이 모두 webmaster로 변경되었다.

# ls -al /var/www/html/index.html 
-rw-r--r-- 1 webmaster webmaster 408 12월 3 09:34 /var/www/html/index.html 

소유자만 변경할 경우, 다음과 같이 한다.

# chown admin index.html 

변경된 파일의 소유권을 확인해보자. 이제 index.html 파일의 소유자는 admin이 되었으며, 그룹은 webmaster 그룹이 되었다.

# ls -al /var/www/html/index.html 
-rw-r--r-- 1 admin webmaster 408 12월 3 09:34 /var/www/html/index.html 

그럼 그룹만 변경할 경우도 있다. 이때는 점(.)으로 시작하는 그룹을 지정한다.

# chown .webadmin index.html 

변경된 그룹을 확인해 보자. 소유자는 admin 그대로 유지되어 있으며 변경된 webadmin그룹을 확인할 수 있다.

# ls -al /var/www/html/index.html 
-rw-r--r-- 1 webmaster webadmin 408 12월 3 09:34 /var/www/html/index.html 

/var/www/html를 포함하여 하위 디렉토리/파일까지 모두 소유권을 적용 변경하려면 -R 옵션을 사용한다
현재 /var/www/html 디렉토리 내의 소유권은 root 계정과 그룹으로 되어 있다.

# ls -al /var/www/html 
total 32 
drwxr-xr-x    5 root     root         4096 Dec 21 20:41 . 
drwxr-xr-x    5 root     root         4096 Dec 10 19:05 .. 
-rw-r--r--    1 root     root         2890 Dec 10 19:05 index.html 
drwxr-xr-x    3 root     root         4096 Nov 12 00:13 manual 
drwxr-xr-x    2 root     root         4096 Nov 12 00:13 mrtg 
-rw-r--r--    1 root     root         1154 Dec 10 19:05 poweredby.png 
-rw-r--r--    1 root     root           17 Nov 11 19:39 test.php 
drwxr-xr-x    2 root     root         4096 Mar 29 04:02 usage 

/var/www/html 디렉토리를 포함하여 그 하위 디렉토리의 파일과 디렉토리까지 webmaster 계정과 그룹으로 변경해 보자. 이는 -R 옵션을 사용한다.

# chown -R webmaster.webmaster /var/www/html 
# ls -al /var/www/html 
total 32 
drwxr-xr-x    5 webmaster  webmaster         4096 Dec 21 20:41 . 
drwxr-xr-x    5 root     root         4096 Dec 10 19:05 .. 
-rw-r--r--    1 webmaster  webmaster         2890 Dec 10 19:05 index.html 
drwxr-xr-x    3 webmaster  webmaster         4096 Nov 12 00:13 manual 
drwxr-xr-x    2 webmaster  webmaster         4096 Nov 12 00:13 mrtg 
-rw-r--r--    1 webmaster  webmaster         1154 Dec 10 19:05 poweredby.png 
-rw-r--r--    1 webmaster  webmaster           17 Nov 11 19:39 test.php 
drwxr-xr-x    2 webmaster  webmaster         4096 Mar 29 04:02 usage 

[관련 명령어]
newgrp 현재 속해 있는 그룹을 바꾼다.
2005/06/21 21:00 2005/06/21 21:00
보안을 위해 새로운 가상의 루트 디렉토리를 생성하여 원격 서비스로 접속할 경우 이 디렉토리의 상위로 이동이 불가능하게 하는 명령어

사용법 
chroot 새로운 루트 경로 [명령어] 
chroot [옵션] 
--help : 도움말을 보여준다. 
--version : 명령어에 대한 버전을 보여준다. 

사용자가 시도하는 명령어는 보통 기본 루트 디렉토리인 /를 기준으로한 $PATH에 대해서 명령어를 해석한다. chroot는 루트 디렉토리를 일반적인 환경과 다르게 시스템 관리자가 지정한 디렉토리로 인식하도록 바꾸게 된다. 이는 시스템 관리의 측면이나 보안상 측면으로 볼 수 있다. 보안상 측면은 크래커가 원격 시스템에 셸 계정을 얻었다 하더라도, 루트 셸을 따기 위한 툴을 시도하더라도 제대로 될 수 없으므로, 보다 더 안전한 시스템을 만들 수 있다. 예를 들면, 웹서버 기본 디렉토리인 /var/www/html 밑에 시스템의 / 인 것처럼 / 디렉토리에 관련된 기본 디렉토리를 만들고, chroot를 설정하여 침해자가 / 인 것처럼 속이는 역할을 한다.
2005/06/21 20:58 2005/06/21 20:58
로그인하여 사용하는 기본 셀에서 임시로 다른 셀을 사용하게 하는 명령어

사용법 : chsh [옵션] [계정명] 
-s, --shell : 지정하는 셸을 앞으로 사용할 로그인 셸로 바꾼다. 
-l, --list-shells : /etc/shells 파일 안에 지정된 셸을 나열하고 마친다. 
-u, --help : 도움말을 보여준다. 
-v, --version : 버전 정보를 보여주고 마친다. 

chsh 명령어는 로긴된 셀을 변경한다. 이는 /etc/shells에 등록된 셸만을 변경할 수 있다. 만일 /etc/shells 파일이 존재하지 않는 셸은 에러 메시지를 보여주며, 셸의 지정은 전체를 지정해야 한다.
먼저, 지금 시스템에서 사용할 수 있는 셸을 살펴보자.

# cat /etc/shells 
/bin/sh 
/bin/bash 
/bin/bash2 
/bin/ash 
/bin/bsh 
/bin/tcsh 
/bin/csh 
/bin/ksh 
/bin/zsh 

chsh -l 옵션은 /etc/shells의 파일 내용과 동일한 내용을 보여준다.

# chsh -l 
/bin/sh 
/bin/bash 
/bin/bash2 
/bin/ash 
/bin/bsh 
/bin/tcsh 
/bin/csh 
/bin/ksh 
/bin/zsh 

그럼, chsh 명령어로 /bin/csh 로 변경해 보자

# chsh 
Changing shell for root. 
New shell [/bin/bash]: /bin/csh 
Shell Changed. 

-s 명령으로 직접 지정한 셸로 변경할 수도 있다.

# chsh -s /bin/bash 
Changing shell for root. 
Shell changed. 

자기가 사용하는 셸을 알아보기 위해서는 다음과 같이 한다.

# echo $SHELL
2005/06/21 20:57 2005/06/21 20:57
콘솔의 텍스트 화면을 지우고 커서를 맨 윗줄로 올린다. MS-DOS의 cls와 같은 기능이다.

사용법 : clear 
2005/06/21 20:56 2005/06/21 20:56
diff와 같은 기능이지만 좀 더 간단한 명령이다. 두 파일을 비교하여 다른 부분을 알려 준다.

사용법 : cmp[옵션] 
-l, --verbose : 파일들의 차이점을 상세한 내용으로 보여준다. 
-s, --quiet, --silent : 아무런 메시지를 보여주지 않는다. 

cmp 명령어는 diff명령의 간단한 버전이라고 생각할 수 있다. diff가 두 파일간의 차이점에 대해서 보고해 주는 반면, cmp는 단지 두 파일간에 서로 다른 부분만을 보여준다.

# cmp query query2 
query query2 differ: char 8, line 1 

query 파일과 query2 파일을 비교해 보자. 두 파일은 1번째 줄 하나의 글자가 틀리다.
2005/06/21 20:54 2005/06/21 20:54
텍스트 파일의 개행 문자와 공백 문자 등을 변환하여 문서 속성을 바꾸어 준다.

사용법 : col [옵션] 
-b : 어떠한 백스페이스 문자도 출력하지 않는다. 이것은 백스페이스 문자와 연결되는 마지막 문자만 출력한다. 
-h : 여러 공백문자를 탭 문자로 바꾼다. 
-x : 일반적으로는 스페이스를 탭으로 바꾸지만, 이 옵션은 여러 공백문자들을 그대로 둔다. 
-l 숫자 : 지정한 숫자 값의 수를 메모리에 한번에 둘 수 있는 최대 줄 수로 한다. 초기값은 128줄이다. 

col 필터는 \n\r 문자를 \n 문자로 바꾸거나, 공백문자를 탭 문자로, 백스페이스 문자를 없애는 기능을 한다.
맨 페이지를 하나의 입력으로 받아 파일로 저장이 가능하다.

# man httpd | col > httpd.man 
2005/06/21 20:50 2005/06/21 20:50
밑줄 문자를 감추거나 다음 줄에 반줄 속성을 주는 변환필터

사용법 : colcrt[옵션] [파일] 
- : 밑줄 속성이 있는 문자열을 보여 주지 않는다. 
-2 : 인쇄상 줄 간격이 이상한 오류가 발생하기 때문에, 밑줄 속성이 있는 줄에는 
다음 줄에 반줄(-) 속성을 부여 하였고, 없는 줄에는 공백 줄을 추가한다. 

colcrt 필터는 밑줄(_) 속성을 반줄(-) 속성으로 바꾸어 주거나, 밑줄 속성을 보이지 않게 할 수 있다.
예제를 통해 살펴 보도록 하자.
현재 query라는 파일에서 밑줄 문자가 3개가 포함되어 있다. date_format과 cst_users, 그리고 cst_productregs문자이다.

# cat query 
select date_format(uregdate,'%Y%m') date,count(uid) from cst_users u, cst_productregs p, cst-productregdetail d 
where u.uno=p.preguno 
and p.pregno=d.preggno 
group by date 

colcrt 필터는 밑줄 문자가 하나의 줄 아래 (-)로 표시된 것들 볼 수 있다.

# cat query 
select date format(uregdate,'%Y%m') date,count(uid) from cst users u, cst productregs p, cst-productregdetail d 
                -                                                 -         - 
where u.uno=p.preguno 
and p.pregno=d.preggno 
group by date 

colcrt - 옵션은 밑줄 문자를 보이지 않게 해 준다.

# cat query 
select date format(uregdate,'%Y%m') date,count(uid) from cst users u, cst productregs p, cst-productregdetail d 
where u.uno=p.preguno 
and p.pregno=d.preggno 
group by date 

colcrt -2 옵션은 밑줄 속성이 있는 줄에는 다음줄에 (-) 속성을 부여 하였고, 없는 줄에는 공백줄을 추가한 것을 볼 수 있다.

# cat query 
select date_format(uregdate,'%Y%m') date,count(uid) from cst_users u, cst_productregs p, cst-productregdetail d 
                -                                                 -         - 
where u.uno=p.preguno 

and p.pregno=d.preggno 

group by date 
2005/06/21 20:49 2005/06/21 20:49
파일에서 선택된 열(column)을 삭제하는 필터

사용법 : colrm [시작열] [종료열] 

colrm 명령어의 인자로 하나의 숫자이면 이는 지정한 숫자의 시작부터 끝까지의 행을 삭제한다. 만일 시작 열과 종료 열을 지정하면, 지정한 시작 열과 종료 열 까지의 행을 삭제할 것이다.
예제를 통해 살펴보자. uname 명령은 시스템 정보를 출력하게 된다 이 중 첫 번째는 시스템의 타입을 두 번째는 시스템 호스트 이름을 출력한다.
colrm 명령으로 uname 으로 볼 수 있는 시스템 호스트 이름만을 뽑아내 보자.
uname 으로 나온 호스트명은 ns.linuxroot.co.kr이다.

# uname -a 
Linux ns.linuxroot.co.kr 2.4.20-28.7 #1 Thu Dec 18 11:31:59 EST 2003 i686 unknown 

앞줄의 시스템 타입을 colrm 1 6 명령으로 삭제해 보자. 물론 1은 시작열이며 6은 종료열이 된다.

# uname -a | colrm 1 6 
ns.linuxroot.co.kr 2.4.20-28.7 #1 Thu Dec 18 11:31:59 EST 2003 i686 unknown 

그럼 호스트 명 끝의 모든 정보를 필터링하기 위해서는 19열 이후는 모두 삭제하면된다.

# uname -a | colrm 1 6 | colrm 19 
ns.linuxroot.co.kr 
2005/06/21 20:47 2005/06/21 20:47
텍스트 파일의 내용을 가로로 보기 좋게 정렬하여 보여주는 명령어

사용법 : column [옵션] [파일...] 
-c num : 전체 가로 폭을 columns 값으로 해서 정렬한다. 
-s char : -t 옵션을 위해 가로칸 조사에 사용될 문자를 지정한다. 
-t : 입력되는 내용의 가로칸 갯수를 조사하고, 그것을 바탕으로 출력 양식을 정한다. 입력되는 내용의 가로칸 갯수는 공백문자로 구분한다. 
-x : 가로로 먼저 나열하고, 다음 세로로 나열한다. 

column 명령어는 칼럼을 형식화하는 명령어이다. 먼저 세로로 나열하고 그 다음 가로로 나열한다. 텍스트의 결과에 적당한 탭 구분자를 넣어 보기 좋게 한다.
다음은 ls -l 명령으로 출력되어 나오는 현재 디렉토리의 내의 파일 목록을 이해하기 쉽게 하기 위해 열제목을 붙여준 형태 이다. sed 1d 명령으로 합계부분을 모두 삭제하고 printf 명령으로 각각의 필드에 대한 열 제목을 아래와 같이 지정하였다. 이를 column -t 옵션으로 받아 입력되는 내용의 가로칸 갯수를 조사하여 출력 양식을 지정하게 하였다.

# (printf "PERM LINKS OWNER GROUP SIZE MONTH DAY HH:MM/ YEAR NAME\n" ;ls -l | sed 1d) | column -t 
PERM        LINKS  OWNER  GROUP  SIZE     MONTH  DAY  HH:MM/  YEAR                NAME 
-rw-r--r--  1      root   root   1169     Nov    12   00:17   anaconda-ks.cfg 
-rw-r--r--  1      root   root   13174    Nov    12   00:17   install.log 
-rw-r--r--  1      root   root   0        Nov    12   00:06   install.log.syslog 
drwx------  2      root   root   4096     Jan    30   01:06   Mail 
-rw-------  1      root   root   1852     Feb    3    13:52   mbox 
-rw-r--r--  1      root   root   3404859  Mar    19   22:09   rrdtool1 
-rw-r--r--  1      root   root   3406508  Mar    19   22:10   rrdtool2 
-rw-r--r--  1      root   root   1909     Mar    19   22:20   rrdtool-install 
2005/06/21 20:46 2005/06/21 20:46
정렬된 두 파일을 한 줄씩 비교하는 명령

사용법 : comm [옵션] 파일1 파일2 
-1 : 파일2를 기준으로 파일1과 비교하여 같지 않은 부분을 보여주고, 다음 열에 같은 부분을 보여준다. 
-2 : 파일1을 기준으로 파일2와 비교하여 같지 않은 부분을 보여주고, 다음 열에 같은 부분을 보여준다. 
-3 : 파일1과 파일2를 비교하여 첫 번째 열에 파일1의 유일한 부분과, 두 번째 열에 파일2에 유일한 내용을 보여준다. 
--help : 도움말을 보여준다. 
--version : 버전 정보를 보여준다. 

comm 명령어는 다목적 파일 비교 유틸리티로 이 명령을 수행하기 전에 비교할 파일이 정렬되어 있어야 정확하게 결과를 얻을 수 있다. 예제를 통해 살펴보자.
먼저, test1 과 test2 파일을 sort명령으로 정렬하자.

# sort < test1 > test1 
# cat test1 
1 
3 
5 
6 
7 
# sort < test2 > test2 
# cat comm2 
2 
4 
6 
7 
8 
9 

-1 옵션을 사용한 결과이다. 파일2를 기준으로 파일1과 같지 않은 부분은 첫 번째 열에, 같은 내용이 2번째 열에 보여준다.

# comm -1 comm1 comm2 
2 
4 
        6 
        7 
8 
9 

-2 옵션을 사용해 보자. 파일1을 기준으로 첫 번째 열에 파일2와 같지 않은 부분을 보여주고, 2번째 열에 같은 내용을 보여준다.
# comm -2 comm1 comm2 
1 
3 
5 
        6 
        7 

-12 옵션을 이용하여 test1파일과 test2파일의 공통된 내용을 보여주는데, 이를 uniq명령으로 열에 중복되지 않는 내용으로 test3파일을 생성한다.
# comm -12 test1 test2 | uniq > test3 
2005/06/21 20:46 2005/06/21 20:46
파일을 .Z의 형태로 압축하는 명령어

사용법 : compress [옵션] 파일 ... 
-b maxbits : 최대 비트수를 제한한다. 
-c : 기본 생성파일인 .Z의 형태가 아닌. 지정한 파일로 생성한다. 
-d : 압축된 파일의 압축을 해제한다. 이는 uncompress 명령과 같다. 
-f : 이미 이전에 압축파일이 존재하더라도, 무시하고 압축 파일을 생성한다. 
-r : 지정한 것이 디렉토리라면 하위 디렉토리와 파일까지 모두 압축한다. 
-v : 압축 통계를 보여준다. 
-V : 버전과 명령어에 대한 정보를 보여준다. 

compress 명령어는 하나 이상의 파일을 파일명에 Z 확장자를 붙여 새로운 파일 압축을 생성한다.
다음과 같은 파일들이 있다고 가정하자.

# ls 
20020417_Command.hwp  20020608.hwp  20020612titlesample1.hwp 
20020620.hwp  Planning.hwp 

먼저 이들 파일을 tar 명령의 -cf 옵션으로 모두 하나의 파일로 묶어 보자.

# tar -cf test.tar * 

test.tar 파일로 파일이 묶여진 것을 복 수 있다.

# ls test.tar 
test.tar 

파일 압축
파일을 compress -f 옵션으로 압축할 수 있다. compress 압축은 기본적으로 .Z 확장자를 가진다. 기본적으로 원본 파일은 지워지고 압축된 파일만 남는다. -v 옵션을 사용하여 압축율과 압축 과정을 확인 할수 있다.

# compress -f -v test.tar 
sum.awk: -- replaced with test.tar.Z Compression: 28.07% 

# ls test.tar* 
test.tar.Z 

파일 압축 해제
.Z 확장자의 test.tar.Z 파일은 uncompress 명령으로 압축을 해제한다. -v 옵션으로 압축 해제 결과를 볼수 있다.

# uncompress -v test.tar.Z 
sum.awk.Z: -- replaced with sum.awk 

압축해제된 test.tar파일을 tar -xf 명령으로 파일 묶음을 해제할 수 있다.

# tar xf test.tar 
2005/06/21 20:44 2005/06/21 20:44
파일을 지정된 경로에 복사하는 명령어

사용법 : cp [옵션] 원본파일 복사파일, cp [옵션] 파일 ... 디렉토리 
-a, --archive : 원본 파일의 속성, 링크 정보들을 그대로 유지하면서 복사한다. 
이 옵션은 -dpR 옵션과 같은 역할을 한다. 
-b, --backup : 복사대상 파일이 있을 경우를 대비해, 백업파일을 만든다. 
-d, --no-deference : 원본파일이 소프트링크 파일이면, 소프트링크 원본을 복사한다. 
-f, --force : 복사대상 파일이 있을 경우, 복사대상 파일을 강제로 지우고 복사한다. 
-i, --interactive : 복사대상 파일이 있을 경우, 사용자에게 복사에 대한 여부를 물어본다. 
-l, --link : 심볼릭 링크 형식으로 복사한다. 물론 하드 링크형식이기에 경로는 복사할 수 없다. 
-P, --parents : 원본 파일에 지정을 경로와 같이 했을 경우, 그 경로 그대로 복사한다. 
-p, --preserver : 원본 파일의 소유자, 그룹, 권한, 시간정보들이 그대로 보존하여 복사한다. 
-r : 일반 파일이면 그냥 복사하고, 만약 원본이 경로면 그 경로와  함께 경로 안에 있는 모든 하위경로, 파일들이 복사된다. 
-s, --symbolic-link : 경로가 아닌 일반 파일을 심볼릭 링크 형식으로 복사한다. 
-u, --update : 복사할 대상이 이미 있는데 이 파일의 변경 날짜가 같거나 더 최근의 것이면 복사하지 않는다. 
-v, --verbose : 복사 상태를 자세하게 보여준다. 
-x, --one-file-system : 원본과 대상 파일의 파일 시스템이 다를 경우에는 복사 하지 않는다. 
-R, --recursive : 디렉토리를 복사할 경우 하위 디렉토리와 파일을 모두 복사한다. 
--help : 도움말을 보여준다. 
--version : 버전정보를 보여준다. 

cp는 파일을 또 하나의 파일이나, 다른 디렉토리로 복사하는 명령어이다. 복사를 할경우, 대상파일이 있을 경우, 사용자에게 물어보지 않고 바로 복사한다. 만일 이 복사가 잘못된 경우, 이전의 정보 위에 다른 내용이 덧씌워진 파일을 복구하는 것은 거의 불가능하다. 이 같은 실수를 방지하기 위해, alias 설정으로 -i 옵션을 설정하였다.

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

아래는 아파치 설정파일과 네임서버 설정 파일을 홈 디렉토리에 복사한다.

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

-R 옵션은 웹 서버 기본 디렉토리인 /var/www/html 와 모든 하위 디렉토리와 파일을 /backup 디렉토리로 복사한다.

# cp -R /var/www/html/backup 
2005/06/21 20:43 2005/06/21 20:43