Filesystem 1M-blocks Used Available Use% Mounted on
/dev/hda6 2945 1203 1593 43% /
/dev/hda1 19 3 15 17% /boot
/dev/hdb2 416 189 205 48% /opt
/dev/hdb1 591 134 427 24% /home/ftp
/dev/hdc 646 646 0 100% /home/ftp/pub/cdrom
/dev/hdd 546 546 0 100% /home/ftp/pub/cdrom1
dmesg
부팅 메세지를 보여주는 명령입니다.
CPU 속도에 대한 간단한 지표(오로지 속도)로는 리눅스 부팅 초기에 화면에 표시되는 BogoMIPS라는 것을 들 수 있다.
Probing PCI hardware
Calibrating delay loop.. ok - 47.82 BogoMIPS
Memory 47020k/49152k available (764k kernel
code, 384k reserved, 984k data)
부팅 화면이 너무 빠르게 지나간다면 로그인하고 나서 dmesg 명령을 사용하여 확인해보기 바란다. dmesg명령의 출력화면도 한 페이지를 넘어가므로 more 또는 less를 파이프로 연결하여 사용하기 바란다. 위 결과는 필자의 펜티엄 120MHz에 대한 BogoMIPS 결과이다.
그럼 BogoMIPS란 무엇인가? BogoMIPS 미니 하우투 문서에 잘 설명되어 있다. MIPS는 ‘Millions of Instructions Per Second’를 의미하는 것으로서 초당 몇 번의 연산 명령을 수행할 수 있는지 여부를 보여주는 것이다. 당연히 이 값이 높은 시스템일수록 빠르다는 것은 분명한 사실이다. 하지만 비슷비슷한 수치 간의 비교는 상당히 힘든 방식이다.
BogoMIPS라는 말은 커널 제작자인 Linus가 만든 말로서 Bogo는 ‘Bogus’ 즉 가짜라는 의미를 가지고 있다. 그렇게 과학적이지는 않으므로 우스개소리로 넘기라는 뜻이라고 생각한다. 이 값은 프로세서의 속도에 따라 결정되어야 하는 타이밍 루프(timing loop)값이다.
who 명령을 보충하는 명령이 finger입니다. 특정 사용자에 대한 정보를 알려면 finger username(또는 사용자가 다른 컴퓨터에 있으면 finger username@domain)을 입력합니다.
$ finger
Login Name Tty Idle Login Time Office Office Phone
hjh hjh /0 Oct 7 16:17 (linux5)
root root *1 22:52 Oct 6 17:34
root root *p0 22:30 Oct 6 17:36 (:0.0)
root root *p1 22:30 Oct 6 17:36 (:0.0)
free
도스에서의 mem 과 같은 역할을 하며, 메모리의 사용상태와 남은 상태, 버퍼의 상태등을 보여줍니다.
$ free
total used free shared buffers cached
Mem: 30848 29844 1004 14324 1028 8900
-/+ buffers/cache: 19916 10932
Swap: 68504 39508 28996
fsck
모든 파일 시스템을 체크합니다.
단일 사용자 모드에서의 부팅
단일 사용자 모드( single user mode, 실행 레벨 1)는 중요한 실행 레벨이다. 이 상태에서는 단지 관리자만이 시스템을 사용할 수 있으며, login 같이 시스템 가동에 필수적인 최소한의 서비스만이 실행된다. 단일 사용자 모드는 몇몇 시스템 관리 작업을 하기 위해서 필요한데, 예를 들자면 /usr 파티션에 fsck를 실행시키는 일 같은 것들이다. fsck를 실행시키기 위해서는 해당 파티션을 언마운트시켜야 하는데, /usr 같은 파티션을 언마운트시키자면 거의 모든 시스템 서비스들을 종료시켜야 한다.
가동 중인 시스템을 단일 사용자 모드로 전환하려면, telinit를 사용해 실행 레벨 1로 전환하면 된다. 부팅시에는, 커널 명령행에 single이나 emergency라고 적어주면 커널이 이것을 init에 전달해 주게 되며, init는 이것을 알아듣고 기본 설정된 실행 레벨 대신 레벨 1번을 사용하게 된다. (커널 명령행 인자를 넣는 방법은 시스템을 부팅하는 방법에 따라 좀 다를 수 있다. 보통은 LILO에서 boot: 프롬프트가 떴을 때, "boot:linux single"과 같이 하는 방법을 쓴다.)
단일 사용자 모드는, 주로 손상된 파일시스템이 마운트되기 전에 fsck 명령을 수동으로 실행하기 위해서 사용된다. 손상된 파일 시스템을 그대로 다시 마운트하면 더욱 큰 손상을 입힐 수 있기 때문에, 손상된 파일시스템은 마운트한다거나 기타 다른 조작을 해선 안되며 가능한 빨리 fsck로 복구를 시도하여야 한다.
손상된 파일시스템이 발견되면 init가 자동으로 fsck를 실행하는데, 이 자동 복구가 실패하게 되면 init 스크립트는 자동으로 시스템을 단일 사용자 모드로 진입시킨다. 이렇게 하면, 손상이 심각하여 fsck가 자동으로 복구할 수 없는 파일시스템이 그대로 마운트되는 일을 막을 수 있다. 물론 이럴 정도로 심하게 손상되는 일은 상당히 드물며, 보통 하드디스크가 손상되었거나 실험적인 커널을 사용했을 경우에 가끔 발생할 수 있는 일이다. 그러나, 이런 사태에 대비하고는 있어야 하겠다.
보안상의 이유로, 제대로 설정되어 있는 시스템이라면 단일 사용자 모드에서 쉘을 실행시키기 전에 루트 패스워드를 물어올 것이다. LILO에서 커널 명령행 인수로 single 을 적어 주는 경우도 이와 같다.(그러나 /etc/passwd가 들어있는 파일시스템이 깨졌다면 단일 사용자 모드로도 들어 올 수가 없다. 결국 이럴 때는 부팅 플로피를 사용해야만 할 것이다)
좀비 프로세스 또한 kill명령을 사용하여 끝낼 수 있는데, kill -signal pid 와 같은 형식으로 사용하지만 -9(SIGKILL)이 무조건 종료시키기 위한 옵션으로 많이 쓰입니다. 다른 시그널은 프로세스에 따라서 무시될 수도 있습니다. 꼭 kill이 아니더라도 프로세스에게 시그널을 보낼 수있는데, 컨트롤 Z(susp)를 누르면 SIGSTOP이, quit(^)는 SIGQUIT, intr(^C)는 SIGINT가 실행중인 프로세스에게 전달됩니다.
형식 : login -옵션 사용자명 옵션 : -f 뒤의 사용자명으로 로그인 합니다. -g 뒤의 그룹사용자명으로 로그인 합니다.
터미널 상태에서 login 이라고 입력하면 새롭게 리눅스 시스템에 다른 ID로 로그인할 수 있습니다.
ls
디렉토리와 파일의 정보를 출력합니다. 도스의 dir과 비슷합니다.
ls [-ailFRC] [파일 또는 디렉토리]
옵션----------------
-l 파일에 대한 정보(파일 허용권, 소유자, 그룹, 크기, 날짜)를 긴 형식으로 보여줍니다.
-a 는 모든 파일을 지정합니다(디렉토리의 히든 파일도 보여줍니다).
-i 파일의 'inode'도 같이 보여줍니다.
-t 최종 수정된 시간별로 정렬합니다.
-r 파일을 역순, 즉 내림차순으로 배열합니다.
-u 변경되지 않았더라도 최근에 엑세스했던 파일들을 보여준다. 이 t나 u옵션으로 최근에 다루었던 파일을 찾는데 유용하게 쓸 수 있습니다.
-F 파일의 특성을 보여줍니다. 이름 뒤에 디렉토리면 /를 실행파일이면 *, 심블릭 링크된 파일이면 @를 붙여줍니다.
-R 하위 디렉토리의 파일도 모두 보여줍니다.
-C 컬럼별로 파일을 보여줍니다.
-w 컬럼수로 가로의 크기를 설정합니다.
-m 가로로 간단히 출력합니다.
-- color=yes 서브디렉토리를 구별하기 위해 color로 보여집니다.
리눅스의 명령어에서 이런 옵션들은 대개 여러 개를 같이 써 줄 수 있다. ex) -a -l은 -al과 같이 쓸 수 있습니다.. ls -art는 현재 디렉토리에서 파일이 최종 수정된 시간의 내림차순으로 정렬된 모든 파일의 이름을 나열합니다. 따라서 가장 최근파일이 맨 아래에 표시됩니다.
$ ls -l Desktop
total 40
drwxr-xr-x 2 hjh linux 4096 Sep 7 18:53 Autostart
-rw-r--r-- 1 hjh linux 2487 Sep 7 18:53 Home.kdelnk
-rw-r--r-- 1 hjh linux 270 Sep 7 18:53 Printer.kdelnk
drwxr-xr-x 2 hjh linux 4096 Sep 7 18:53 Templates
drwxr-xr-x 2 hjh linux 4096 Sep 7 18:53 Trash
-rw-r--r-- 1 hjh linux 432 Sep 7 18:53 cdrom.kdelnk
-rw-r--r-- 1 hjh linux 417 Sep 7 18:53 floppy.kdelnk...이하 생략
### hjh라는 ID를 가진 사용자에게 메일을 보냅니다.(현재 host를 같이 사용중일 경우에는 그냥 ID만 적어도 됩니다.)
Subject: 안녕 ### 제목을 적습니다.
안녕 ### 편지 내용을 적습니다.
test입니다.
. ### 마칠 때는 새줄에서 .을 적습니다.
Cc: ### 참조할 메일 주소를 적습니다.
[hjh@mail mail]$
man
주어진 명령이나 자원들의 매뉴얼을 출력한다. more에서와 같이 페이지 넘기기나 탐색 명령을 줄 수 있다.
man [options] [section] command
-k 다음에 키워드를 주면 그것이 포함된 명령어를 보여준다. 이것이 apropos 명령과 같다.
-f 다음에 명령어를 적어주면 한 줄짜리 짧은 명령어 설명을 보여준다. 이것은 whatis 명령과 같다.
section은 다음과 같이 나누어져 있다. 해당 번호를 적으면 된다.
(1) User Commands
(2) System Calls
(3) Subroutines
(4) Devioes
(5) File Formats
(6) Games
(7) Miscellaneous
(8) Sys. Administration
mv
파일의 이름을 변경하거나 이동하는 명령입니다.
옵션 : -b 백업파일을 만든후 파일을 지우거나 옮깁니다. -i 이미 존재하는 파일을 덮어 쓸 것인지 물어봅니다. -v 파일을 옮기면서 파일명을 출력합니다.
ex)
-rw-r--r-- 1 hjh linux 281 Sep 14 21:46 test1
$ mv test1 test2 $ ls
-rw-r--r-- 1 hjh linux 281 Sep 14 21:46 test2
mount, mke2fs
mount 명령의 여러 양식은 매우 공통적입니다.
형식 : mount [-t] [fs-type] device mount-point
/proc]#cat filesystems에서 fs-type을 알 수 있습니다. /etc]#cat fstab 명령으로 device, mount-point를 확인할 수 있습니다.
예를 들어, 명령 mount /dev/hdb3 /mnt 는 디렉토리 /mnt 아래에 하드 디스크 파티션 /dev/hdb3을 탑재합니다. 비슷하게, mount -r -t iso9660 /dev/sr0 /mnt 는 디렉토리 /mnt 아래에 SCSI CD-ROM 드라이브 /dev/sr0을 탑재하며, 이 드라이브는 읽기 전용이고 ISO9660 파일 형식을 갖습니다. 또한 명령 mount -vat nfs 는 /etc/fatab 파일에 나열되는 모든 NFS 파일 시스템을 탑재합니다.
파일 시스템이 올바르게 탑재하지 않는 경우, 명령 mount -vf device mountpoint를 사용하여 어떤 mount가 수행중인지를 확인할 수 있습니다. 이 명령은 verbose목록을 제공하며 mount에게 파일 시스템 탑재를 제외한 모든 것을 수행하도록 지시합니다. 이 방법으로 mount 명령을 가장하고 명령이 수행하려고 시도하는 사항에 대한 많은 정보를 얻을 수 있습니다.
mke2fs는 partition을 ext2 file system으로 format하기 위해서 사용된다. - LINUX에서 가장 널리 사용되는 file system이다. mount는 formatted partition을 여러분의 계층적인 디렉토리 구조로 연결하기위해 사용된다.
도스 포맷의 디스크
먼약 여러분들이 원래의 IOMEGA의 tools에 의해 생성된 DOS file structure를 가진 ZIP disk를 가지고 있다면 이들은 partition scan상에서 disk가 /dev/sda4 의 하나의 파티션만을 가진다고 보고를 할 것이다.
여러분들은 이들 disk를 /zip라는 directory에 mount를 할려면 이런식으로 해야만 한다.
mkdir /zip
mount -t msdos /dev/sda4 /zip
이제 여러분들의 disk는 /zip에 마운트되어 보일 것이다. disk가 mount 되어 있는 동안에 여러분들은 그것을 제거하려 해서는 안된다. 여러분들이 disk를 가지고 작업이 끝났을 경우 그것을 umount 시키고 release 시켜 계층적인 directory로 부터 분리시키면 된다.
umount /zip
일단 여러분들이 mount되는 directory /zip를 만들고 나면 여러분들은 다시 이것을 할 필요는 없으며 후에 다시 어디선가 mount를 시키면 된다.
리눅스로 다시 포맷하기
만약 여러분들이 ZIP disk를 지우고 그 위에 Linux native file system을 만들기를 원하면, 전 disk에 대하여 fdisk를 해 주어야 한다.
fdisk /dev/sda
그리고 모든 기존의 파티션들을 지워야 한다. (d 명령을 사용한다) 그리고 나서 n 명령 이용하여 새로운 partition을 만들어 주고 w 명령으로 변화사항을 기입을 하고 q 명령으로 마친다.
파티션을 format한다.
mke2fs /dev/sda1
(여기서 1이란 수는 여러분들이 fdisk에서 partition에 부여한 번호이다. 이제 여러분들은 disk를 mount하여 사용하면 된다.
mount -t ext2 /dev/sda1 /zip
(위에서 사용한 mount point를 다시 사용한다.)
mkswap
스왑 공간 생성하기
스왑 파일은 평범한 파일이다. 즉, 커널이 보기엔 일반 파일과 다를 바가 없다. 다만 다른 점이라면 스왑 파일에는 빈틈(holes)이 없으며, mkswap과 함께 사용하게 되어 있다는 점 정도이다. 그리고 스왑 파일은 꼭 자신의 파일시스템(local filesystem)에 있어야 하며, NFS를 통해 마운트된 파일시스템에 있어선 안 된다.
스왑 파일 안에 홀(hole)이 없어야 한다는 점은 중요하다. 스왑 파일은 디스크의 일부를 미리 점유하고 있는데, 이렇게 하면 디스크 섹터를 일일이 할당하는 과정을 거치지 않고서도 메모리 페이지를 파일로 빠르게 스왑시킬 수 있다. 즉, 커널은 파일에 미리 할당되어 있는 섹터를 곧바로 사용하기만 하면 되는 것이다. 스왑 파일 안에 빈틈이 있다는 것은 아무 섹터도 할당되지 않은 공간이 파일 안에 있다는 뜻인데, 이렇게 되면 커널이 스왑을 사용하는데 곤란을 겪게 된다.
위에서 /extra-swap이란 것은 스왑 파일의 이름이며, bs= 뒤에 오는 숫자는 입출력 단위의 크기를 지정한 것이고(1024 byte, 즉 1 kilobyte), count= 뒤의 숫자는 입출력 단위의 몇배 크기의 파일을 만들 것인지를 지정하기 위한 것이다(즉, 여기서는 1024 kilobyte 크기의 파일을 만든 것이 되겠다). count는 꼭 4의 배수로 지정해 주는 것이 좋은데, 그 이유는 커널이 스왑하는 메모리 페이지(memory page)의 단위가 4 kilobyte이기 때문이다. 만일 파일의 크기를 4 kilobyte의 배수로 하지 않는다면, 파일 끝에 남는 몇 킬로바이트는 아예 사용되지 않을 것이다.
스왑 파티션도 사실 특별한 것은 없다. 만드는 것도 다른 보통 파티션과 다를 것이 없지만, 특별한 점이라면 스왑파티션에는 어떤 파일시스템도 사용되지 않으며 날것(raw partition) 그대로 쓴다는 점이다. 스왑용으로 쓸 파티션은 type 82로 지정해 두는 것이 좋은데, 이렇게 해두면 파티션의 용도가 명확해진다. 그러나 사실 커널은 이런 것에 그다지 구애받진 않는다.
스왑 파일이나 스왑 파티션을 만들고 나면, 그 앞부분에 일종의 인식표를 달아두어야 한다. 여기에는 커널이 사용하는 몇가지 정보가 위치하게 된다. 이것을 해주는 명령어는 mkswap인데, 다음과 같이 쓰인다. $ mkswap /extra-swap 1024
Setting up swapspace, size = 1044480 bytes
$ 이렇게 했다고 해서 이 스왑 공간을 사용하게 된 것은 아니다. 다만 커널이 이것을 가상 메모리로 사용할 수 있도록 준비만 마친 것이다.
mkswap 명령은 사용에 주의가 필요하다. 이 명령은 파일이나 파티션이 사용 중인지 아닌지를 판별해 주지 않기 때문이다. 따라서 mkswap을 부주의하게 사용하면 중요한 파일과 파티션을 간단히 날려버릴 수 있다! 그러나 다행히도, mkswap 명령은 주로 시스템 설치시에만 사용된다는 점이 우리를 안심시켜 주긴 한다.
리눅스의 메모리 관리자는 각각의 스왑 공간의 크기를 약 127MB로 제한하고 있다(몇가지 기술적인 이유로 인해 실제 한계치는 (4096-10) * 8 * 4096 = 133890048 bytes 즉 127.6875 megabytes이다). 대신, 최대 8개의 스왑 공간을 연결해 사용하면 스왑을 대략 1GB까지 확장할 수가 있다.
nice는 프로세스의 순위를 변경시킵니다. 이것은 커다란 프로그램을 컴파일할 때와 같이 CPU나 메모리를 많이 쓰는 경우 전체 시스템 속도를 많이 저하시켜 마치 다운된 것처럼 만들어 버릴 수도 있기 때문에 다른 프로세스들에게 먼저 양보하는 선행(?)을 하게 한다. 그 정도를 -n뒤에 nice값으로 주어 명령을 실행시킵니다.
#nice command -n XX
nice값은 -20에서 19까지 있는데, 값이 작을수록 우선 순위가 높습니다. -n옵션을 쓰기 않으면 디폴트로 10이 쓰입니다. 일반 유저는 nice값을 증가시킬 수밖에 없지만 root는 nice값을 감소시켜 우선 순위를 높을 수도 있습니다.
스왑 공간을 초기화하는 데는 swapon 명령을 사용한다. 이 명령은 커널에게 해당 공간을 스왑으로 사용할 수 있다는 점을 알려준다. 이 명령에게는 추가하고자 하는 스왑 공간의 경로를 인수로 전달해 주어야 한다. 임시 스왑 파일을 스왑 공간에 추가하고자 한다면 다음과 같이 한다.
시스템이 시작될 때, 스크립트를 통해서 swapon -a 명령이 실행되는데 이 명령은 /etc/fstab에 나열되어 있는 스왑 공간들을 모두 사용하게 해 준다. 그래서 흔히 swapon 명령은 추가적인 스왑이 필요할 때만 사용되는 것이 보통이다.
free 명령을 쓰면 스왑의 사용 상황을 모니터 할 수 있다. 이것은 현재 얼마나 많은 용량의 스왑이 사용되고 있는지 알려준다.
$free total used free shared buffers
Mem: 15152 14896 256 12404 2528
-/+ buffers: 12368 2784
Swap: 32452 6684 25768$
여기서 Mem: 이라고 쓰여진 첫째줄은 실제 물리적 메모리의 상황을 보여주는 것이다.커널은 물리적 메모리를 약 1 megabyte 정도 사용하는데, total이라고 쓰여진 세로줄에서 보여주는 전체메모리 양에는 이 커널이 차지하는 공간이 빠져 있다. used라는 세로줄은 현재 사용중인 메모리 양을 보여주고 있으며(두번째 가로줄은 버퍼 로 사용되는 부분을 제외하고 계산한 양이다), free란 세로줄에서는 전혀 사용되지 않은 양을 보여주고 있다. 또한 shared란 부분은 프로세스간에 공유되고 있는 메모리를 나타내고 있는 것이므로, 그 양이 많은 것은 기쁜 일이다. buffers는 현재 디스크 버퍼 캐쉬로 사용되는 메모리 양을 보여주고 있다.
마지막 줄인 Swap:은 위와 같은 항목을 스왑 공간에 똑같이 적용시킨 내용이다. 이 항목이 모두 제로라면, 스왑 공간이 아예 동작하고 있지 않다는 뜻이다.
같은 정보를 top 명령이나 /proc/meminfo 파일을 통해 얻을 수 있다. 그러나 어느 경우든, 특정한 스왑 공간에 대한 정보를 얻는 것은 좀 어렵다.
스왑 공간은 swapoff 명령으로 기능을 멎게 할 수 있다. 그러나 임시로 잡은 스왑 공간이 아니라면, 스왑을 끌 필요는 없다. 만약 스왑을 끄게되면, 스왑 공간에 들어있던 메모리 페이지들이 먼저 실제 메모리로 들어가야 되는데, 실제 메모리에 여유가 없는 경우에는 또 다른 스왑 공간으로 방출되게 된다. 그런데 이 메모리 페이지들을 모두 수용하기에 가상메모리마저도 부족하다면, 그때부터는 리눅스 시스템이 무진장 버벅대기 시작할 것이다. 시간이 아주 많이 걸린 후에는 좀 잠잠해지겠지만, 여전히 시스템은 사용불능 상태에 있게 된다. 따라서 스왑을 끄기 전에, 충분한 여유 메모리가 있는지 꼭 확인해 보아야만 한다(free 같은 것으로).
swapon -a 명령으로 자동적으로 사용되는 스왑 공간들은, 마찬가지로 swapoff -a 명령을 써서 끌 수 있다. 이것도 역시 /etc/fstab 파일에 나열되어 있는 스왑 공간만을 끄기 때문에, 나머지 수동으로 추가시킨 스왑들은 영향을 받지 않는다.
때때로, 실제 메모리가 많이 비어 있는데도 불구하고 스왑을 아주 많이 쓰고 있는 경우를 보게 될 수가 있다. 보통 이런 일이 발생하는 경우는 이렇다. 어떤 덩치 큰 프로세스가 실제 메모리를 많이 점유하는 바람에 시스템이 스왑을 많이 사용하게 되었다고 하자. 이 프로세스가 종료되면 실제 메모리엔 여유 공간이 많이 남게 되지만, 스왑으로 한번 내려간 데이터는 그것이 당장 필요하지 않는 한 실제 메모리로 불려지지 않는다. 따라서 스왑 영역을 많이 사용하면서도 실제 메모리가 많이 비어있는 현상이 꽤 오래 지속될 수 있는 것이다. 그러므로 이런 현상에 특별히 신경쓸 필요는 없다. 하지만, 최소한 그 원리는 이해하고 있어야 나중에 불안하지 않을 것이다.
umount를 umount되어지는 파일 시스템에서 실행을 시키면 아직 그 파일 시스템은 사용중(busy)이게 되므로 언마운트시 에러가 발생하게 된다. 언마운트는 꼭 그 파일 시스템을 벗어나서 실행시켜야 한다.
unmount를 할 때는 단순히
umount directory_name 또는 umount device_name
을 써주면 되고
umount -a
라고 쓰면 현재 마운트 되어 있는 디스크장치들 중에서 /etc/fstab에 있는 모든 장치를 unmount한다. 그리고, 마운트된 디스크 장치들과 디렉토리의 리스트는 /etc/mtab에 저장되어 있다.
예를 들어, disk를 /zip라는 directory에 mount를 할려면 이런식으로 해야만 한다.
mkdir /zip
mount -t msdos /dev/sda4 /zip
이제 여러분들의 disk는 /zip에 마운트되어 보일 것이다. disk가 mount 되어 있는 동안에 여러분들은 그것을 제거하려 해서는 안된다. 여러분들이 disk를 가지고 작업이 끝났을 경우 그것을 umount 시키고 release 시켜 계층적인 directory로 부터 분리시키면 된다.
umount /zip
일단 여러분들이 mount되는 directory /zip를 만들고 나면 여러분들은 다시 이것을 할 필요는 없으며 후에 다시 어디선가 mount를 시키면 된다.