저는 리눅스를 사용해 본지 얼마 되지도 않은 신참인데.. 감히 이렇게 강좌를 한다고 하니...떨리는군요. 제가 처음 리눅스에 발을 딪기 시작할 무렵 강좌란의 도움을 많이 받았습니다. 그런데, 강좌란이나, 질문란에도 올라오지 않는 아주 기초적인 사항들을 모를 때의 그 난처함이란...흑...
그리고 이번에 저희과 컴맹들을 위해서 유닉스의 아주, 아주 기초가 되는 명령어들을 다루게 되었는데.. 아깝기도 하고 저처럼, 아주 처음 리눅스를 대했을 때의 난감함을 격으시는 분이 한분이라도 계시다면 도움이 될까해서 이렇게 감히 강좌라고 써봅니다.
이강좌를 보시게 될 분들은 다음 중의 한 경우가 될 것입니다.
1. 난 유닉스라고는 구경도 못해 보았다.
2. 사실 도스도 잘못쓰는데, 리눅스가 좋아보여서 시스템은 설치했는데, darkstar~/# 라고 나오면, 기를 못펴겠다.
3. 기본적인 에디터는 커녕, 시스템이 어떻게 생겼는지도 모르겠다.
4. 아니 왜 이렇게 모르겠는 디렉토리가 이리도 많으냐?
5. 아... 리눅스를 내 하드에서 지워야겠다.
Part I 유닉스의 기본 명령(프로그램)
1. 시스템의 출입
개인용 컴퓨터의 DOS와는 달리 유닉스 시스템은 다수의 사용자가 사용하도록 설계된멀티 태스킹 시스템이다. 따라서 유닉스 시스템을 사용하려면 시스템의 출입 권한을부여받아야 하며, 이를 계정(account)을 부여받는다고 말한다. 계정을 부여받아서시스템의 출입허가를 얻으면, 시스템 사용자로서 자격을 가진다.
각사용자는 기본적으로 단지 자신이 부여받은 계정을 통해서만 시스템에 접속이 가능하며 다른사람의 불법적인 사용을 막기위해 암호를 설정해 두어야한다. 또한 시스템 사용을 끝내고 싶으면, 이를 시스템에 알려야한다. 이러한 특징은 유닉스가 다중사용자 시스템이기 때문에 발생하는 것이다.
1.1 시스템의 접속
계정을 부여받으면, 사용자는 해당 시스템에 단말기를 통해서 접속을 하게 된다.
여기서 단말기는 사용자들이 해당 시스템에 접근할 수 있게 해 주는 입출력 장치를말하는데, 단말기를 통해서 입력을 전송하거나 출력을 볼 수 있다.
(리눅스 시스템을 pc에 설치하면, 키보드와 모니터가 단말기가 되는 것이다.
리눅스는 가상 단말기를 지원하는데, alt-F1 , alt-F2,... 순으로 누르면 또 다시 계정과 암호를 물어오는 화면을 보게 될것이다. 각각의 단말기 모드는 모두 다른사용자로써의 사용을 가능하게 해주며, 같은 계정으로 여러번 접속이 가능하다.)접속과 동시에 보통은
login:_
과 같은 화면을 볼 것이다. 여기서 자신의 계정을 써넣고(리눅스를 처음 부팅할때는root 라고 치면 된다. 하지만 곧 암호를 설정하고, 다른 계정을 만들어서 사용하는것이 안전하다. 도스나 윈도우즈와는 다르게 리눅스에서 한번 지운 화일은 다시 복구되지 않는다.)
password:_
를 물어보면, 자신이 설정한 암호를 써넣으면 접속이 된다. 당연히 입력을 마치면CR(Carriage Return)을 쳐야 한다. 그러면, 단말기는 계정에 맞는 홈 디렉토리에서부터 작업을 진행한다.
* 홈디렉토리 : 사용자가 시스템에 처음 접속했을 때 시스템에서 위치하게 되는 장소사용자는 자신의 홈디렉토리 내에서만 합법적으로 자신의 화일과 디렉토리들을 만들고 지울 수 있다. 단, root 는 예외이다.
1.2 암호의 설정 및 변경
암호는 자신의 계정을 타인이 비정상적으로 사용하는 것을 막기 위한 보호 수단중에하나이다. 유닉스 시스템이 보안에 중점을 두고 제작된 것이 아니기 때문에 비교적암호체계가 약한 것이 사실이지만, 암호를 제대로 설정하면 많은 부분 시스템을 보호할 수 있다. 암호를 바꾸는 명령어(실은 하나의 프로그램)는
passwd
이다. 그러면, 일반적으로 알고 있듯이 지금의 암호를 묻고, 바꾸고 싶은 암호를 물어보게 된다. 또 한번의 확인 작업이 끝나면, 자신의 계정 암호가 바뀌게된다. 시스템에 따라서는 평범한 암호에 대해서는 경고를 주는 경우도 있다. 되도록이면 암호는자신은 기억하기 쉽고, 타인은 예측하기 어려운 것으로 택하는 것이 좋다. 암호에 특수기호를 섞는 것도 좋은 방법이다.
1.3 계정의 변경 및 종료
현재 접속하고 있는 계정이외에 다른 계정을 갖고 있거나 알고 있는 경우에 그 계정을 사용하는 방법에는 여러가지가 있다. 만일 알고 있는 계정이 자신이 사용하고 있는 시스템과 동일한 시스템에 있다면 su 명령어를 사용할 수 있다. 즉,%su [자신이 알고 있는 계정]
(여기서 %은 프롬프트로 도스의 C:\> 와 같은 것이라고 생각하면 된다.)라고 명령하면 암호를 물어보게 되는데, 암호를 입력하고 나면 새로운 계정의 사용자로써 시스템을 사용하게 되는 것이다. (리눅스에서 계정을 만들어서 시험해보면알 수가 있다. 참고로 새로운 계정을 만드는 명령어는 adduser 이다.)보통 su 만을 입력하게 되면, 시스템관리자의 계정을 사용하겠다는 뜻이 된다.
변경하고자하는 계정 이름이 지금 사용하고 있는 시스템과 다른 시스템에 있을 때에는 telnet 이나, rlogin, rsh 등을 사용할 수 있다. 이때는 앞에서와 같이 계정이름을 표시해 주는 것은 물론이고, 해당 시스템의 주소도 표기해 주어야 한다. 또,연결하고자하는 시스템은 현재의 시스템과 연결되어 있어야 함은 물론이다. 이에 관한 것은 네트웍과 인터넷 부분에서 자세히 보도록하자.
예를들어서 지금 사용하고 있는 시스템의 주소는 tiger.korea.ac.kr (여기서korea.ac.kr 은 도메인 네임으로 인터넷부분에서 자세히 다루어보자.)이고, 자신이접속하기를 원하는 시스템 주소는 kuccsx라고 가정하면,%rlogin kuccsx -l 계정
라고 명령하면, 암호를 물어보고 해당 시스템을 해당 계정으로 사용할 수 있게 되는것이다. 같은 방법으로는
%rsh kuccsx -l 계정
이라고 해도 된다. 암호가 틀리면, 해당 시스템의 접속과정과 같이
login:_
화면이 나타나게 된다. 또 telnet 명령어는 시스템 주소와 계정을 한꺼번에 사용할수 없는 명령어이다. 즉,%telnet kuccsx
라고 명령하면, 계정과 암호를 묻는 화면이 나타나게 되는 것이다.
근본적으로 rlogin, rsh 와 telnet 의 차이점은 r~ (Remote LOGIN, Remote SHell)은썬(SUN) 워크스테이션을 사용할 경우에 제공되는 명령어이며, telnet 과는 근본적으로 같지만, 사용자의 홈디렉토리안에 ~/.rhost 화일을 조작해서 암호없이 접속이가능하다는 잇점이 있다.("~/"는 자신의 홈 디렉토리를 표현하는 것이다. 보통"/"는시스템의 메인루트 디렉토리를 표시한다. 또 유닉스는 도스가 "\"로 디렉토리를 구분하는 것과는 다르게 "/"로 디렉토리를 구분한다.) 보통 ~/.rhost 의 내용을 살펴보면 다음과 같이 되어 있다.
solid1.korea.ac.kr jiinny
nowcom.co.kr jiinny
tiger.korea.ac.kr grjiinny
이는 필자의 경우에 해당되며, jiinny 나 grjiinny는 시스템 계정임을 쉽게 알 수있을 것이다.
유닉스 시스템에서 사용종료를 알리는 명령어는 exit 혹은 logout 인데 자신의 계정사용을 끝냈다고 시스템에 알리는 명령이다. (리눅스에서는 보통 한 사용자가사용할 경우가 많은데, 이 때 전원까지 끄고 싶으면, 일반 도스나 윈도우즈와는다르게 해야한다. 일반계정으로 사용하다가 로그아웃을 하면, 다시 root 계정으로 시스템에 접속해서 shutdown을 시킨후 전원을 내려야한다. 보통은
#halt
같은 명령을 내릴 수 있는데, 이 것보다는
#shutdown -h now
라는 명령어가 더 안전하다. 또 시스템을 재부팅하고 싶으면, #shutdown -r now
라는 명령을 쓸 수도 있다. "now" 대신에 시간을, "-r"이나"-h" 대신에 다른 명령들을 사용할 수 있는데, 자세한 내용은 "man shutdown"이라고 명령하고서 읽어보기 바란다.(위에서 "#" 표시는 시스템관리자의 경우에 붙는 프롬프트이다. 이 프롬프트에관한 설명은 나중에 쉘을 설명할 때 자세히 다루기로 하자. 또, 자신이 어떤 명령어에 대해서 자세히 알고 싶으면, man 명령어를 사용하도록 하자. man 명령어는 manual의 약자로 프로그램의 사용법을 알려주는 역할을 한다.
%man 프로그램 명령어
하면, 사용법을 자세히 나열해서 설명한다. 영어공부도 하고 컴퓨터도 공부하고:) )
다음에는 명령어의 일반적인 사항과 man 명령어를 다루는 방법 그리고, 유닉스의 꽃이랄 수 있는 입출력의 공유, 변경을 공부하도록 하겠다.
2. 명령어의 사용법
일반적인 명령어 사용법은 도스의 그것과 같다. 그이유는 도스자체가 처음에 개발될때 유닉스를 많이 본떴기 때문이다. 예를 들면, 화일과 디렉토리의 개념 주변장치를화일로 간주하는 것등이 그렇다.
일반적으로 유닉스 명령어(전에도 얘기했지만, 명령어라기 보다는 유틸리티 프로그램이다.)는 인수가 붙는 것과 붙지 않는 것등으로 나뉠 수가 있다. 우선 현재의 디렉토리에 어떤 화일이 있는지 알아보는 ls 를 알아보면서 인수가 있는 명령, 없는 명령을 알아보자.
2.1 명령어의 형식
우선 ls 명령을 수행해보자.
%ls
출력결과는 단지 화일의 이름만을 나타낼 것이다.(리눅스에서는 확장되 ls 프로그램을 사용하기 때문에 디렉토리 구분도 가고, 색도 화일에 따라 다르게 나타난다.)여기에 인수 -F 를 붙여보자.(대문자임을 주의)
%ls -F
이번에는 화일구분이 생긴다.(리눅스에서는 변화가 없다.)이때 "-"을 붙인 이유는"F"가 선택사항(optin)임을 나타낸다.(도스에서의 arj.exe같은 압축프로그램의 선택사항을 상기하자.) 화일 뒤에 붙는 "/"는 디렉토리임을 나타내고, "@"는 링크된 화일임을 나타낸다. 또, "*"가 붙은 것은 실행이 가능함을 표시한다.(리눅스는 이것뿐 아니라, 색으로도 구분이 가능하며, 이색은 /etc/DIR_COLORS 화일에 지정이 되어있다.
이번 기회에 리눅스에서 사용하는 config 화일은 대부분 /etc 디렉토리나 서브디렉토리 ~~~/etc 내에 들어 있는 경우가 많음을 알아두자. 또한 자신의 홈 디렉토리에"." 로 시작되는 화일들에는 자신의 환경에 맞는 CONFIG 화일들이 들어있다.)또 다른 인수 -s 를 사용해보자.
%ls -s -F (혹은 %ls -sF)
s 옵션은 화일의 크기를 나타내는 선택사항이다. ls 프로그램을 살펴보면 알 수 있듯이 일반적으로 유닉스 명령어는 다음과 같은 체계를 가지고 있다.
%명령어 [선택사항] [식] [화일이름]
| |
+----- 인수 부분 -------+
명령어는 항상 프롬프트의 처음에 위치한다. 또 [ ]안의 내용은 필요한 경우에만 선택하면 된다. 옵션은 "-"으로 시작하며 여러개가 올 수도 있다. 또 하나의 선택사항에서는 다른 선택사항이 반듯이 따라서 붙어야되는 경우도 있다. 이를 잘살펴야한다.
또한 식부분에는 졍규식을 포함한 문자열도 올 수가 있다. 문자열을 " "나 ' '로 묶어주어야 한다. 또한 한줄에 여러개의 명령어를 사용할 경우에는 세미콜론(;)으로 구분을 해주어야한다.
2.2 입출력의 공유및 변경
유닉스의 명령어 수행시 입력과 출력은 기본적으로 키보드와 모니터이다. (이는 도스의 경우도 마찬가지인데, IBM PC 호환기종의 바이오스와 어셈블러를 공부하면 이해가빠르겠지만, 우선은 그렇게 생각하자) 하지만, 유닉스에서는 특정한 기호를 이용해서입출력의 방향을 변경할 수가 있다. 그 기호들을 나열하면 다음과 같다.
1) < filename
표준입력으로 filename을 이용한다.
(이는 도스를 처음 배울때도 나오는 내용이다. 기본적으로 입력장치 (console : keyboard)에서 입력을 받아야 하는 프로그램이 있을 경우 이기호를 사용하면, filename 에서 그 입력을 대신 수행한다.)
2) > filename (>!, >&, >&!)
표준출력으로 filename을 이용한다.
(입력과 반대로 기본출력장치(console: CRT)에 출력할 내용을 filename에 출력한다 기존에 존재하는 filename 이 있으면, 그내용이 무시된다.) C shell 의 경우에는 출력방향 변경에 대해서 >, >!, >&, >&! 등의 네가지가 있다.
하지만, 리눅스에서는 기본적으로 Bourn Shell을 사용하고 있으므로, > 만 알고 있 으면 된다.
(shell 은 쉽게 도스의 command.com 이라고 생각하면 된다. 사용자가 컴을 사용할 때의 서비스를 제공하는 프로그램이라고 생각하자. 우리가 메모리에 어떤 0과 1을 쓸지 생각하지 않고 프로그램을 수행하거나 하는 것등의 서비스, 예를들어 키보드 로 ls 라고 친다고 가정했을때 그것이 명령인지 무엇인지 컴퓨터가 어떻게 알 수 있는가?)
3) >> filename
근본적으로는 > 와 같지만, 기존에 filename 이 존재하면 출력을 filename 의 뒤를 이어서 하게 된다. filename 이 존재하지 않으면, 새로 만든다.
4) << string
표준입력을 재지정하지는 않는다. 하지만 표준입력을 string 이라는 문자열이 들어올때까지 받는다. 즉, 키보드에서 string 라고 칠때까지 문자를 계속 입력 받는다는 의미이다. 이때 string 문자열은 행의 맨처음에 와야하고, 해당행은 string 이외의 문자열을 가져서는 안된다. 이해가 잘안갈테니 예를 들어보자
%cat << 끝 > out <-------명령행 지금은 연습 중... 끝이라고 처음에 쳐야 진짜로 끝이다. + 지금이 끝일까? | 아니다...진짜는 끝이라고만 쳐야한다. |--- 입력 끝. | 끝 +
예에서는 "끝"이라는 문자열이 나올때까지 키보드로 입력을 받아서 out 이라는 화일에 저장을 하는 것이다. cat 명령어는 도스의 type 과 비슷한 명령어이지만, 약간은다르다. 그럼 out에는 어떻게 저장이 되어 있을까?
%cat out
지금은 연습 중... 끝이라고 처음에 쳐야 진짜로 끝이다.
지금이 끝일까?
아니다... 진짜는 끝이라고만 쳐야한다.
끝.
위와같이 되어 있다. 예를 보면, << 의 사용법을 이해할 수 있을 것이다.
<입출력의 공유>
1) 파이프라인
유닉스를 유명하게 만드는 요인 중 하나였던 파이프라인을 보도록하자. 파이프라인이란, 명령어들 간을 | 혹은 |& 기호에 의해 연결해 선행하는 명령어 실행 결과를 뒤에오는 명령어의 입력으로 이용하는 것을 말한다. 따라서 중간에 임시 화일이 만들어지지를 않는다. 결국 출력을 입력에 이용함으로써 입력과 출력을 공유하게 되는것이다.
사용형태는 다음과 같다.
명령어1 | 명령어2 | ...
|&은 진단출력도 파이프라인 뒤에 오는 명령어의 입력으로 이용할 수 있게한다.
예를 들어서
%ls -sF | more
라고 하면, ls 를 통해서 화일 목록을 화면에 보여주어야 할것이 more 프로그램의 인수로 들어가서 more 프로그램의 입력값이 된다. more 는 입력 내용을 한화면 단위즉,25 라인(text mode) 단위로 출력하는 프로그램이므로, 화일 목록이 한 화면 단위로 출력이 된다.
2) 집단 명령어
여러 명령어들을 ( ) 문자로 둘러싸면 표준입출력을 공유하게 된다. 일반적으로는
(명령어1;명령어2;...)
처럼 쓴다. 아까 얘기했듯이 ;는 명령을 구분하는 구분자이다.(C 언어의 그것과는다르고 Pascal의 그것과 비슷하다.)
3) 출력의 분할
출력방향 변경 > 과 >> 는 기본적으로 하나의 장소만을 지정하는데, 동시에 여러장소에 하고 싶으면, 출력분할 명령인 tee 를 사용한다. tee의 일반적인 사용방법은 다음과 같다.
tee [-ai] [filename] ...
여기서 선택사항 -a 는 출력결과를 기존 화일에 붙여 저장하는 것이고 -i는 인터럽트를 무시하는 것이다. 그런데 tee는 입출력에 관계되는 기호라기 보다는 프로그램의하나이다. (리눅스에서 사용되는 tee 는 GNU version 으로 -i 대신에 --ignore-interrupt , -a 대신에 -append 등을 쓸 수 있다.)
원래는 man 을 사용하는 법과, 기타 기본적인 명령어까지 하려고 했지만..
새벽이라 힘이 드네요 :) 오늘은 여기까지 하고 다음에 명령어들을 더 알아보도록하지요.. 그리고 지금 제가 하는 내용은 시중에 나와있는 유닉스 관련 서적에 나와있으니까... 참고하세요. 또, 프로그램에 관심이 있는 분이, 언어 강좌를 했으면 좋겠어요..물리학과 게시판을 키워나갑시다.
2.3 도움말
유닉스에서 사용하는 명령어는 그 수가 무척이나 많다. ( ls /bin 혹은 ls /usr/bin이라고 타이핑해보면 알 수 있다. 여기서 상식하나 일반적으로 .../bin 이라는 서브디렉토리에서 실행이 가능한 binary 화일들이 저장된다.) 또한 명령어가 이용할 수 있는 옵션들도 무척이나 많기 때문에 모두를 기억하기란 쉽지가 않다. 따라서 필요할때마다 사용법들을 참조해야 하는데, 유닉스에서 man 이란 명령어로 온라인 도움말을제공해 주고 있다. 사용법은 다음과 같다.
%man 명령어
그러면 시스템은 명령어에 해당하는 사용법을 콘솔상에 나타내줄 것이다. 여기에 추가할 것은 유닉스는 명령어만 도움말을 제공하는 것이 아니라, 프로그래머와 시스템관리자를 위한 도움말도 포함한다는 점이다. 즉, 시스템호출이나 라이브러리 루틴,특수화일, 시스템 유지보수에 관한 도움말도 포함한다. man 명령의 결과 수행시 출력되는 결과물의 관례를 보면 다음과 같다.
- 단순한 문자 : 사용할 경우 도움말에 나타난 형태대로 사용해야한다.
- 괄호([]) : []안의 문자들은 선택 사항이다.
- 밑줄이 있는 문자들 : 실제 명령어 사용시 사용자가 자신의 필요에 따라서 기술해야하는 문자열
- 생략부호 : 바로 앞의 인수를 반복할 수 있음을 표시.
- 부가적으로 붙는 도움말
. DESCRIPTION : 명령어의 기능을 상세하게 설명.
. OPTIONS : 선택사항의 기능을 항목별로 기술
. EXAMPLES : 명령어 사용의 예
. FILES : 명령어 수행과 관계된 화일들을 기술
. BUGS : 알려져있는 버그들을 기술
기타의 사항들은 유닉스 버젼에 따라 달라짐.(실제로 리눅스에서 man 명령을 수행해보면 알 수 있는 사항들임)
3. 화일
화일이란 하나의 저장 단위이다. 우리가 만드는 문서나 프로그램등을 화일이라고 할수 있다. 화일 시스템이란 이러한 화일들을 체계적으로 분류하고 저장하며 보안을 유지해주는 등의 기능을 제공한다. 유닉스의 화일시스템은 각 화일들을 디렉토리 단위로 분류하고 저장하고 있으며, 이들 디렉토리는 계층구조(hierachial structure) 혹은 트리구조(tree structure)로 구성되에 있다. 또 디렉토리는 또하나의 화일로 취급이 된다.
/* 실제로 이러한 화일 시스템을 본따서 만든 도스가 크게 히트를 쳤으니, 유닉스 화일 시스템의 장점을 여기서 알 수가 있다. */
3.1 화일의 종류
유닉스 시스템에서의 화일은 크게 일반 화일, 디렉토리 화일, 특수 화일로 나눌 수가있다.
- 일반화일 : 좁은 의미의 화일, 일반 사용자가 작성한 문서, 프로그램, 자료등을 말한다.
- 디렉토리 화일 : 사용자만 만들고서 유닉스 시스템이 관장을 하는 화일인데, 디렉토리는 화일들의 분류단위라고 생각하면 된다.
- 특수화일 : 유닉스 시스템에서는 일반화일과 동일한 방식으로 주변장치를 이용할 수 있는데, 이렇게 되면 하나의 입출력장치는 최소한 하나의 화일과 연결되어 있다. 입출력 장치에 해당하는 특수 화일들을 /dev 에 모두 저장이 되어 있다.
이러한 화일들은 ls -l 명령으로 구분이 가능하다. (리눅스에서는 vdir 도 가능하다)
ls -l 은 화일에 관한 상세한 내용 즉, 화일타입, 화일에 관한 권한, 소유자, 그룹,등의 정보가 나오는데 맨 앞줄에 나오는 정보가 화일의 타입과 화일권한 구분이다.
-rwxr-xr-x ....
drwxr-x--x ....
crw-rw-rw- ....
brw-r----- ....
이런식으로 화일 목록 출력이 되는데, 여기서 맨앞에 나오는 정보가 화일타입이다.
그뒤에 나오는 정보는 나중에 설명이되겠지만, 소유자와 그룹 그리고 일반 사용자의접근 권한이 표기가 된다.( - 는 불가, r 은 읽기가능, w 은 쓰기가능, x 실행가능)그리고 맨앞에 붙은 문자에 따라서, - 는 일반화일, d 는 디렉토리 화일 그밖에는특수화일이 되는데, c는 입출력단위가 문자(character)인 입출력장치를 말하고, b 는 입출력단위가 블럭(block)인 입출력장치 l은 링크되어 있는 화일을 말한다.
3.2 화일 시스템의 구조와 위치
유닉스의 화일구조가 디렉토리간의 계층적인 구조라는 것은 앞에서 설명을 했다. 화일들은 모두 디렉토리들 가운데 하나에 속해야하고 루트(root)디렉토리 ( / )를 제외한 모든 디렉토리들은 반드시 자신을 포함하는 부모 디렉토리를 가진다.
또 동일한 디렉토리에 동일한 화일명을 가진 화일이 존재할 수 없고, 다른 디렉토간에는 상관이 없다. 이는 각 화일은 고유하게 지정이 되어야 하기 때문인데, 고유지정은 경로명을 표기함으로써 정할 수 있다. 이 경로명이란 화일이 존재하는 디렉토리들의 관계를 표시하는 것을 말한다. 또 경로명은 절대 경로명과 상대경로명이 존재하게 된다.
절대경로명은 루트 디렉토리로부터 나타내는 경로명을 뜻하며, 상대경로명이란 지금 사용자가 들어와 있늘 디렉토리로 부터의 경로명을 뜻한다. 예를들어 사용자가 /home/jiinny 에 있으며, 서브디렉토리 doc 을 만들어서 그 서브디렉토리로 들어가서 unix.txt 화일을 작성한다고 가정하자. 그러면. unix.txt 화일의 절대경로명은 /home/jiinny/doc/unix.txt가 되는 것이고 사용자 jiinny가 있는 경로가 /home/jiinny/doc 이므로 상대적인 경로명은 그냥화일 unix.txt 가 되는 것이다. 또한 상대 경로명을 표시할때 ./unix.txt 로 표기할 수도 있다. 이는 자신이 위치해 있는 디렉토리라는 것을 표현하는 것이다. 또 부모 디렉토리 즉, /home/jiinny 에 cap이라는 화일이 있을 경우는 상대 경로명으로 ../cap 이라고 가리킬 수 있다. 즉,"."은 현재 위치한 디렉토리 ".."은 부모 디렉토리를 표시하는 것이다.
또한 사용자의 홈디렉토리 (위의 예에서는 /home/jiinny)에 대한 상대적인 경로를나타내고 싶을 때는 ~/라고 나타낸다.
3.3 화일을 찾는 명령 (ls, find)
3.3.1 ls
디렉토리내에 어떤 화일이 있는지 알아보는 기본적인 명령은 ls 가 있다. ls 의 인수로 앞에서 언급한 경로중, 디렉토리의 경로(상대적, 절대적)를 넣으면 그 디렉토리내에 있는 화일들이 출력된다. 기본적인 형식은 다음과 같다.
ls [-aAcCdfFgilLqrRstu1] [디렉토리 혹은 화일]
또한 화일명에는 와일드 카드 * 와 ? 를 사용할 수 있다.
옵션 중에서 많이 쓰는 옵션을 선별해 설명하면 다음과 같다.
-a : all 을 뜻하며, 디렉토리내의 모든 화일들을 출력한다. 유닉스에서는 기본적으 로 "."으로 시작하는 화일들은 configuratin 화일들인데 일반적인 ls 명령으로 는 볼 수가 없다.
-A : almost all 을 뜻하며, "." ,".." 화일들 즉, 자신과 부모 디렉토리를 제외하고 모두 출력한다.
-i : inode 를 출력시킨다.
-R : 서브 디렉토리내의 화일들도 출력한다.
-l : 화일에 관련된 사항들을 출력.
-s : 크기 출력.
-X : 확장자 순으로 출력
-1 : 화일하나당 하나의 라인에 출력
기타 여러가지가 있으나, 이정를 가장많이 쓰는편이다.
3.3.2 find
이밖에 정확한 화일의 위치나 이름을 알지 못할 경우 화일을 찾는 명령어가 있는데,바로 find 이다. find 의 일반적인 사용법은 다음과 같다.
find "찾고자하는 디렉토리들" [옵션]
옵션 : -name 화일이름
-type 화일유형 ( b, c, d, p, l :화일타입을 설명할때와 같으며 p가 일반화일)
-size
-ls
예를 들어보면, unix.txt 를 시스템 전체에 걸쳐서 찾아보는데, 경로명을 모른다면
%find / -name unix.txt -print
라고하면, unix.txt 가 있는 절대경로를 출력하게 된다. 여러개의 unix.txt 가 있다면 모두 출력을 한다. 자세한 것은 man 명령으로 알아보기 바란다.
3.4 디렉토리 옮기기
pwd : present working directory 의 약자로써 현재 자신이 위치한 디렉토리를 나타 내어준다.
cd
chdir: 자신이 가고자 하는 디렉토리로 working directory를 옮겨준다. 이때 절대적 인 경로명과 상대적인 경로명을 모두 사용할 수 있다.
pushd
popd : pushd 는 cd 와 비슷한 명령이지만 popd 와 같이 짝을 이루어 사용할 수 있다. pushd 를 이용해서 특정 디렉토리로 옮긴 후 다시 원래의 디렉토리로 가고 싶을 경우 popd 라고 명령하면 된다.
4. 화일 및 디렉토리 조작
4.1 화일및 디렉토리의 생성,제거 내용 보기
화일의 생성은 편집기로 제작이 가능하고 입력 지시 문자상에서 직접 작성할 수도 있다. (> 입력기호를 생각해 보자) 또한 화일을 컴파일시킬 때에도 새로운 화일이 생성될 수 있다. 이는 후에 보기로 하고 다음의 명령어들을 살펴보자.
mkdir : make directory 를 뜻하며,도스의 md 와 같은 명령어로 디렉토리를 새로 생 성시킨다. 인수로 절대적인 경로와 상대적인 경로를 사용할 수 있다.
rmdir : remove directory, 도스의 rd 와 같은 명령어 디렉토리를 생성시킨다.
rm : remove 도스의 del 과 같으며, 화일을 지운다.
옵션으로는
-i : 지울지를 물어봄
-r : 서브 디렉토리를 모두 지움 (* ls 의 -R 옵션과 유사) -f : 강제로 지움
등이 있다.
ln : link 를 의미하며, 이는 다른 디렉토리나, 다른 디렉토리의 화일을 참조할 때 쓰인다. 즉 링크를 하게되면, 자주쓰는 화일이나 디렉토리를 자신의 작업 디렉토리에 있는 화일이나 디렉토리처럼 쓸 수가 있다.
사용법은
%ln [-fs] filename [linkname]
으로 f 는 하드링크를 , s는 심볼릭 링크를 나타낸다.
unlink : 링크화일을 지울때 사용한다. 하지만 unlink는 슈퍼유저만이 사용할 수 있 으므로 일반적으로는 rm 을 사용한다. 또한 unlink 는 하나의 화일만을 삭 제할 수 있다.
4.2 화일의 복사 및 이동
cp : 화일의 복사를 담당하는 명령어. 사용법은 다음과 같다.
%cp [-ip] file1 file2
%cp -r [-ip] directory1 directory2
%cp [-iprR] file ... directory
여기서 옵션 i 는 복사할지를 일일이 물어보고, p 는 내용뿐만 아니라 수정시 간등도 보존 시켜며, r, R은 서브디렉토리의 내용도 복사를 시킨다.
여기서 directory에 복사를 할때 유의 할점이 있다. 두번째의 예에서 디렉토리 를 복사할 경우, 뒤에 나와있는 directory2 가 이미존재를 하면, directory2 의 서브디렉토리로써 directory1을 새로 만든다는 점이다. 또 세번째의 예에서 file ... 을 directory 내에 복사를 하는 것이다.
cp도 물로 절대경로와 상대경로를 다 사용할수 있다.
mv : 화일을 이동을 나타내며 사용법은 cp 와 비슷하다.
*파일의 사용제한
사용자가 파일을 읽고 쓰고, 실행하는 권한을 파일의 소유자 자신이 변경하는 기능이러한 것을 접근 권한이라고 하는데, 이 사용자 권한을 변경하는 법에 대해서 보겠다.
귄한 설정은 크게 사용에 대한 설정, 소유에 대한 설정으로 나눌 수 있다.
사용자에 대한 설정은 chmod 라는 명령을 소유자에 대한 설정은 chown, chgrp을쓴다. 각각 "change mode","chagne owner", "change group"을 뜻하는 것임을 쉽게알 수 있다. 소유자, 그룹, 사용자에 관한 내용은 파일을 설명하는 부분을 참고하고 여기선 각각 모드와 소유자, 소유그룹을 바꾸는 것만 알아보자.
+ chmod
앞에서 설명했다시피 chmod는 파일에 대한 권리를 변경한다. 권리는 쓰기(w), 읽기(r), 실행(x)의 권리가 있는데, 이들 권리는 소유자, 그룹, 그밖의 사람들에게주어진다. ls -l 의 명령으로 파일들을 보면 보통
-rwxr-xr-x (소유자) (그룹) (생성날짜) (파일이름)
순으로 주어진다. 맨 앞은 파일 속성, 두번째부터 네번째까지는 소유자의 권한,다섯번째부터 일곱번째까지는 그룹의 권한, 여덟번째부터 열번째까지는 그밖의사람들에 대한 권한이다.
이 권한들을 chmod 명령으로 변경할 수 있는데(물론 소유자나 root가) 사용법은
%chmod [옵션] mode 파일명
이다. 여기서 mode 부분이 중요한데, 모드를 표현하는 방법은 절대 지정방식과기호 지정방식이 있다. 우선 쉽게 기호 지정방식을 알아보자.
기호지정 방식의 모드 = 『누구』『+/-』『권한』
로 만들어 낼 수 있다. 『누구』에는 u,g,o,a 가 올 수 있는데 u는 소유자(user)g는 그룹(g), o는 그밖의 사람들(others), a는 모두(all)을 뜻한다. 그리고『+/-』에서 +는 가능을 -는 불가능을 뜻한다. 또 『권한』에는 w,r,x가 있는데이는 앞에서 설명한데로 쓰기,읽기,실행이다. 따라서
%chmod o+w foo.txt
라고 하면, foot.txt파일의 쓰기 권한을 그밖의 다른 사람들에게 준다는 얘기다.
%chmod g-r fa.txt
는 그럼? ..음 이해하리라 본다.
옵션에는 보통 -f, -v, -R 등이 있다. 이는 유닉스 옵션에 많이 붙는 것들과 같이-f 는 조용히(쉿), -v 는 장황하게(주절주절), -R는 디렉토리의 경우 밑까지 몽땅(Recursive)의 의미를 갖는다.
또 절대 기호 방식은 소유자의 읽기(400), 쓰기(200), 실행(100) 소유그룹의 읽기(40), 쓰기(20), 실행(10) 그밖의 사람들의 읽기(4), 쓰기(2), 실행(1)에 괄호안의 번호를 주어 그 번호들을 더한 값으로 권한을 설정하는 것이다..
예를 들어 foo.fa 라는 파일에 소유자는 모든 권한(400, 200, 100)을 그룹에는 읽기와 쓰기(40, 20)을 다른 사람들에게는 읽기(4)를 허용하고 싶으면,400 + 200 + 100 + 40 + 20 + 4 = ? 허걱..
해서
%chmod 764 foo.fa
라고 하면 된다... 보통 그룹과 다른 사람들에게 쓰기만 안주려면, 755를자기만 감춰두고 쓰는 일반 파일은 600, 자기만 쓰는 실행파일은 700을 준다.
참고로 디렉토리를 하나 만들고 (mkdir 디렉토리명)
"chmod 600 디렉토리명"을 해보자... 어떻게 되는가?
음.. 알아서 해결하도록 하자..
+ chown
이는 파일 소유자를 변경하는 명령이다.. 간단히 설명하면
%chown [옵션] 소유자명 파일명
이다. 소유자명은 바꾸고 싶은 사람의 login ID, 파일명은 음..파일명이다..^^;;옵션은 -f, -v, -R 등이 있다. 이것은 위와 같고, -c -h 옵션도 있으나, 이것은직접 찾아보기 바란다.
+ chgrp
이건 소유 그룹을 변경하는 명령으로 chown과 사용법이 똑같다.
기타로 umask가 있는데, 권한을 설정하는데, chmod랑 반대의미의 절대 기호방식을사용한다고 보면 된다. 즉 755 의 권한을 줄 파일에는
777 - 755 = 22 (와 해냈다...)
의 umask 에의한 권한을 주게 된다. 즉..
이건 특정 파일에 대한 설정을 하는 것은 아니고 생성될 파일에 대한 디폴트설정을 뜻한다. 궁금한 사람은 메뉴얼 페이지와 자신의 디렉토리에 있는 각자의 쉘 프로파일, 혹은 /etc/디렉토리에 있는 쉘 디렉토리 파일들을 살펴보자..
(알짜 레드헷의 경우는 /etc/profile, /etc/csh.cshrc, /etc/zshrc 등을 보자)
중단한 이후에 첫 초보강좌였는데, 역시 무리가 있네요..
리눅스를 오랫동안 쓰지 않아서.. 책도 다시 보면서.. 하니깐요..
더 쓸까도 생각했는데, 다음편은 grep을 생각하고 있기 때문에... 한편의 강좌로구성하는 것이 나을 것 같군요..
http://cafe.naver.com/allcyber.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=199
'컴퓨터 > 운영체제(OS)' 카테고리의 다른 글
제어판/관리콘솔 실행명령어 리스트 (0) | 2009.06.08 |
---|---|
XP 통합, 무인자동설치 CD 만들기 (0) | 2009.06.08 |
리눅스 명령어 정리 (0) | 2009.06.02 |
cpu 스케줄링 (0) | 2009.05.31 |
윈도우 XP 부팅 속도를 빠르게 설정하는 방법 (0) | 2009.05.17 |