'unix'에 해당되는 글 1건

  1. 2007/05/08 [필독] 터미날 Teminal 과 리눅스 기본 명령어


터미널

최근에 Unix나 이를 기반으로 하는 Mac OS X을 사용하기 시작한 사용자라면 윈도우와 마우스를 이용하는 GUI (그래픽 사용자 인터페이스) 환경에 익숙해져 있을 것이다. 결론적으로는 이러한 편리함과 화려함이 Unix에 대한 막연한 두려움을 느끼지 않고 Mac OS X에 접근할 수 있도록 해주었다고 봐야 할 것이다. 하지만 겉모양이 어찌 되었든 Mac OS X은 Unix를 기반으로 하는 운영체제이고, 그 강력함을 충분히 경험하려면 반드시 터미널을 통한 커맨드라인 방식을 사용하여야 한다. "커맨드라인은 MS-DOS 시절이나 필요한 것 아닌가* 윈도우가 훨씬 쉬운데” 라고 말할 사람도 있을 것이다. 물론 몇 가지 기초적인 작동 방법만 익히면 그래픽 인터페이스는 쉽게 사용할 수 있다. 그렇지만, 그 기초적인 작동 방식만을 원하는 것이 아니라면 문제가 발생한다. Finder 윈도우를 작성한 개발자는 사용자가 알파벳과 세부적인 기준으로 배열된 목록을 필요로 할 것이라고 생각하지 않으므로 메뉴를 간단하게 하는데 중점을 두었을 것이다. 이런 점이 커맨드라인을 익혀야 하는 이유이다.
커맨드라인에서는 수 많은 유틸리티를 다양한 옵션을 사용하면서 거의 무한하게 붙여서 사용할 수 있도록 여러가지의 연결 방식을 제공한다. 일단 커맨드라인의 기초적인 작동과 몇몇의 기초적인 유틸리티를 익힌다면 윈도우 시스템 사용자가 생각하지 못하는 강력함을 얻을 수 있을 것이다. 쉘 스크립트까지 작성하는 수준이라면 단 한 단어로 복잡한 명령을 실행할 수도 있다.


터미널을 처음 실행하면 다음과 같은 형태의 윈도우를 볼 수 있다. 윈도우 타이틀을 보면 'bash'라고 적혀 있는데, 이는 현재 사용하고있는 쉘의 이름을 나타내는 것이다. 그 옆의 숫자는 현재 터미널 윈도우에서 표현 가능한 가로x세로열을 가르키는데, 이는 윈도우의 사이즈에따라서 유동적으로 보여준다.

 

<그림 1. 터미널 실행 화면. Shell은 기본적으로 bash를 사용한다.>


* 쉘(Shell)

먼저 쉘에 대한 설명이 수반되어야 할 것으로 보인다. 쉘을 쉽게 표현하면 도스의 command.com이 하는 역할처럼 login 이후부터사용자가 입력하는 명령어를 기계어로 변역하여 커널에 전달하는 역할을 하는 명령해석기를 말한다. Mac OS X에서는 기본적으로 /bin/csh(tcsh), /bin/bash, /bin/zsh 쉘을 제공하며, 원한다면 다른 쉘을 설치하여 사용할 수도 있다. 다양한 종류로 인해 혼란스러운것도 사실이지만 지금까지 꾸준하게 진화되어온 결과로 받아들이면 될 것이다. 기본적으로는 bash 쉘이 사용되며 터미널 환경설정에서 다른쉘을 지정할 수도 있다. 필자의 경우에는 이미 익숙해진 tcsh을 사용하는데, 변경을 하려면 터미널 > 환경설정을 실행하고 다음의그림처럼 "다음 명령 실행"에서 사용할 쉘의 절대 경로(/bin/csh (tcsh), /bin/bash, /bin/zsh)를입력하면 된다.

<그림 2. 터미널 환경 설정 화면. 이곳에서 사용할 쉘을 변경할 수 있다.>


- csh
버클리 캘리포니아 대학에서 개발된 프로그래머들에게 적합한 쉘이다. 대화형 사용법에서는 Bourne 쉘과 대부분 호환되지만 전혀 다른 프로그래밍 인터페이스를 가지고 있고, 히스토리 대체라는 복잡한 기능으로 대신하고 있지만 명령행 편집 기능은 제공하지 않는다.

- tcsh
확장 C 쉘. 명령행 편집 기능을 제공한다.

- bash
Bourne again shell은 최초로 개발된 쉘인 Bourne shell의 변종이라 할 수 있다. 가장 많이 사용되는 쉘이며, POSIX 호환이며 Borune shell과 호환되는 쉘로서 GNU 프로젝트에 의해 만들어지고 배포되고 있다. 명령행 편집 기능을 제공한다.

- zsh
Z 쉘. 가장 최근에 나온 쉘이며, 본 쉘과 호환된다. 명령행 편집 기능을 제공한다.

* 참고: 사용하는 시스템에서 사용 가능한 shell의 종류를 알아보려면 /etc/shells라는 파일을 열어보면 된다. 이 파일에는서버에서 지원되는 shell의 종류가 나열되어 있다. 다음 그림은 shells 파일의 내용을 pico 편집기를 통해서 본 것이다.


<그림 3. /etc/shells 파일을 열어보면 사용 가능한 쉘의 종류를 알 수 있다.>


* UNIX 명령어 배우기

Mac OS X은 터미널 유틸리티를 사용하여 접근할 수 있는 BSD UNIX에서 파생된 수백 개의 명령어를 포함하고 있으며, 또한 추가할 수도 있다. 바로 이점이 한정된 수의 명령만을 가지는 대부분의 운영체제와 결정적으로 다른 점이다.
유닉스에서 명령은 그냥 파일일 뿐이다. 예를 들어 ls 명령은 bin이라는 디렉토리에 들어 있는 바이너리 파일이다. 따라서 ls 대신 다음처럼 완전한 경로명(절대 경로명이라고 부른다.)을 사용할 수도 있다.

$ /bin/ls

이 때문에 유닉스는 유연성을 가지면서도 강력하다. 새로운 유틸리티를 제공하려면 시스템 관리자는 명령을 저장하는 표준 디렉토리에 설치하기만 하면 된다. 또한 한 명령의 여러 버전도 설치할 수 있다. 예를 들어, 테스트를 위한 새 버전의 유틸리티를 한 곳에 설치하고 나머지 버전은 다른 곳에 둠으로써 사용자들이 선택하여 실행할 수 있도록 할 수 있다.
명령어를 사용하는 방법을 배우려면, 명령어의 "man"(manual) 페이지를 참조하는 것이 좋을 것이다. 일반적으로 man 페이지는 다른 프로그래머들과 시스템 관리자가 사용할 수 있도록 프로그래머에 의해 쓰여지는 것인데, 자세히 읽으면 각 명령어의 기능을 익히는데 많은 도움이 된다. 명령어의 man 페이지를 보려면, 터미널을 실행한 다음 "man"과 명령어 이름을 입력하면 된다. 예를 들어, uptime 명령어를 익히려면 다음과 같이 입력한다.

man uptime

그럼 Unix에서 사용되는 기본적인 명령어를 알아보도록 한다.

- 유닉스 기본 명령어

■passwd

자신의 패스워드를 바꾸는 명령이다. 유닉스, 특히 인터넷의 세계에서는 일반 컴퓨팅 상황에 비하여 훨씬 해킹에 대한 위험이 높다. 패스워드는 완성된 단어 보다는 단어 중간에 쉽게 연상 할 수 없는 기호를 삽입하여 만들어 주는 것이 좋다.


■ls (디렉토리의 파일 표시)

도스의 dir명령과 흡사한 명령다. 일반적으로 ls라고 입력했을 때에는 디렉토리와 파일만을 표시해 주지만, 사실 ls에는 도스의 dir과는 비교할 수도 없을 만큼 다양한 옵션을 지니고 있다. 다음은 자주 사용되는 몇가지 옵션이다.

ls -al : Hidden 속성의 파일을 표시해주는 a 옵션과 파일의 종류, 사용권한 등 자세한 정보를 보여주는 옵션 l을 함께 사용하여 보다 자세한 정보를 보고자 할 때 이용한다.

ls -aC : Hidden속성의 파일을 보여주되, 도스의 dir /w명령과 같이 한줄에 여러 개의 정보를 보여주도록 C옵션을 함께 사용한다.

ls -R : 도스의 dir /s 명령과 같이 서브 디렉토리의 모든 파일들을 보여주는 옵션 R과 같이 사용할 수도 있다.


■cd (Change Directory)

cd 명령어는 도스의 cd와 그 쓰임새도 같고 사용할 때에 한가지만 주의하면 된다. 그것은 도스에서는 cd\dos와 같이 사용하지만, 유닉스에서는 반드시 cd 뒤에 한칸을 띄우고 '\' 대신 '/'를 사용한다는 것이다.

예) cd temp

유닉스의 디렉토리는 말 그대로 거미줄 같이 복잡하게 얽혀 있다. 따라서 개인의 홈 디렉토리로의 이동을 위하여 'cd ~'를 입력하면 자신의 홈디렉토리로 이동하도록 되어 있다. 참고로, 상위 디렉토리로 이동하려면 'cd ..' 라고 입력한다.


■mkdir (도스의 MD, Make Directory)

이 기능 역시 도스의 MD와 같은 기능을 하는 명령어이다. 옛날 도스책을 본 사용자라면 'MD (Make Directory-MKDIR)이라는 설명이 기억날 수도 있겠는데, 유닉스에서는 md라는 명령어가 아니라 반드시 mkdir로 디렉토리를 만들어야 한다.


■rmdir (도스의 RD, Remove Directory)

rmdir 명령어는 도스의 RD 명령어와 동일하게 사용할 수 있는 명령어로, rmdir로 이용하면 된다는 것외에는 다른 점이 없다. 주의할 점은 절대로 자신의 홈 디렉토리를 지우면 안된다는 것이다. 자신의 홈디렉토리는 '/Users/개인아이디'의 이름으로 존재한다.


■mv (move)

마치 도스의 move와 같이 사용되는 명령어이다. 파일을 다른곳으로 이동시키거나 이름을 바꿀때 이용하는 명령어이다.


■cp (copy)

도스의 copy 명령어와 같다라고 생각하면 된다. 그러나 도스의 일반 옵션을 이용할 수는 없다. 일반적으로 옵션을 많이 사용하지는 않지만, 옵션을 보고 싶을 때에는 'man cp'라고 입력하면 된다.


■rm (remove)

파일을 지울때 사용하는 명령어이다. 도스의 DEL명령어처럼 사용하면 되지만, 주의할 점은 유닉스에서는 도스와 같이 undelete를 지원하지 않는다는 것이다. 즉, 터미널상에서 지운 파일은 복구가 불가능하다. 물론 휴지통을 찾아봐도 찾을 수 없을 것이다. 그러니 삭제 명령들을 사용할 때에는 신중하길 바란다.


■pwd (현재의 디렉토리 표시)

현재 디렉토리를 표시할 필요가 왜 있는지 궁금해 할 수도 있지만, 유닉스 시스템에서는 사용자에게 일일이 현재 디렉 토리를 가르쳐 주지 않는 경우가 많다. 도스등 개인 사용자를 위주로 하는 시스템에서는 디렉토리의 길이가 그리 길지 않아서 디렉토리를 모두 보여줘도 큰 지장이 없지만 유닉스 시스템에서는 디렉토리의 길이만 한줄을 넘기는 경우도 발생할 수 있다. 이렇게 현재 자신이 작업을 하고 있는 디렉토리가 어디인지 알수 없을 때 이용하는 명령어이다.


■alias

doskey alias와 비슷하게 이용할 수 있는 쉘 명령어 alias는 말그대로 별명이다. 사용자는 alias를 이용하여 긴 유닉스 명령어를 간단하게 줄여서 사용할 수 있다. 이들 alias는 [alias ls 'ls -al']등과 같이 사용하면 되는데, 한 번 지정한 alias를 계속해서 이용하려면, 자신의 홈디렉토리에 있는 .cshrc(Hidden 속성)을 pico 등의 에디터를 이용하여 변경시키면 된다.


*참고: 터미널로 드래그 앤 드롭하기

터미널에서 다양한 명령을 사용하다보면, 경로를 찾아다니느라고 고생한 경험이 있을 것이다. 하지만 Mac OS X에서는 터미널로의 드래그 앤 드롭이 가능하여 경로뿐만이 아니라 다양한 작업을 간편하게 진행할 수 있도록 함으로써, 사용자 친화적인 OS라는 장점을 그대로 보여준다.

* 실행 가능 파일을 실행하려면, 파일의 아이콘을 터미널 윈도우로 드래그하고 Return을 누른다.
* 터미널 윈도우나 텍스트 색상을 변경하려면, 색상 윈도우의 색상을 터미널 윈도우로 드래그한다. 윈도우의 빈 부분으로 색상을 드롭하면, 윈도우 배경이 해당 색상으로 변경될 것이다. 텍스트 위에 드롭하면, 텍스트가 새로운 색상으로 변경된다.
* 삽입 지점에 디렉토리 경로를 나타나게 하려면, 디렉토리(또는 디렉토리내의 파일)를 터미널 윈도우로 드래그하면 된다. 예를 들어, 작업 디렉토리를 데스크탑의 "Feedback" 디렉토리로 변경하려면, cd와 빈칸 하나를 입력한 다음, 데스크탑의 Feedback 디렉토리를 터미널로 드래그한다. 다음이 나타날 것이다.

[hostname:~] yourname% cd/Users/yourname/Desktop/Feedback

Return을 누르면 터미널이 Feedback 디렉토리로 변경되는 것을 볼 수 있다.

지금까지 쉘과 자주 사용하는 Unix 명령어들에 관하여 설명하였다. 물론 더 많은 명령어와 옵션들이 있지만 그것들은 사용하면서 필요할 때마다 스스로 찾아서 사용하길 바란다. 이를 위해서는, GUI 환경에서 안된다고 하여 터미널에서도 안될것이라는 생각은 금물임을 꼭 명심해야 할 것이다.
터미널을 사용하는 방법에 대해서는 따로 깊이 설명하지 않을 것이다. 응용 프로그램 자체가 난해하지 않을 뿐더러, 터미널의 사용 목적을 감안한다면 더 이상의 설명도 무의미하다고 본다. 혹시 터미널을 자신의 취향에 맞게 설정을 원한다면 윈도우 설정을 통해 다양한 변화를 줄 수 있을 것이다.

출처: http://stevie.ooci.net/tt/index.php?pl=67


------------------------------------------------------------------------------------

파일, 디렉토리 관련

cd

change directory의 약자입니다. 다른 디렉토리로 이동할 때 사용합니다. 만약 /usr/local/apache 디렉토리로 이동하고 싶다면,

cd /usr/local/apache

입니다. 디렉토리 이름 없이 그냥 cd만 타이핑하면 자신의 홈 디렉토리로 갑니다. 예를 들어 내가 "linuxer"라는 이름으로 로그인했다면 현재 어느 디렉토리에 있든지 cd를 치면 /home/linuxer로 이동합니다. 내가 root 라면 /root로 가겠죠? 또 하나, ~(물결표시)는 로그인한 유져의 홈 디렉토리를 의미합니다. 즉, cdcd ~와 똑같습니다. 참고로, 현재 머물고 있는 디렉토리 이름을 알려 주는 명령어는 pwd입니다. "print working directory"의 약자입니다.

ls

디렉토리의 내용물을 보여주는 커맨드입니다. 자주 쓰는 옵션으로는 ls -als -l이 있습니다. ls -a는 "all", 숨겨진 파일까지 모두 보여줍니다. 파일 이름이 점(.)으로 시작하는 파일은 보통의 ls 명령에서는 나타나지 않는 숨겨진(hidden) 파일입니다. 숨겨진 파일은 특정 프로그램의 설정(configuration) 파일인 경우가 많습니다. 이를테면 vi의 환경설정 파일인 .exrc같은 것입니다. 분명히 개별 홈 디렉토리에 존재함에도 ls만 쳐서는 나타나지 않습니다. 이렇게 숨겨진 파일까지 모두 보여주는 명령어가 ls -a입니다.

ls -l은 "long", 즉, 긴 형태로 리스팅하는 명령어입니다.


# ls -l
drwxr-xr-x 2 linuxer users 3242 Nov 2 10:14 perltips
-rw-r--r-- 1 linuxer users 12 Dec 13 11:10 counter.pl

앞의 drwxr- 부분은 퍼미션(permission)을 나타냅니다. "d"로 시작하는 것은 디렉토리를 나타내고 "-"로 시작하는 것은 보통의 파일이라는 정도만 알아두세요. 퍼미션은 밑에서 자세히 다룹니다.

퍼미션 다음의 1,2라는 숫자는 하드링크(hard link)의 갯수를 나타내고, 그 다음은 파일의 소유자(owner;user), 그 다음은 그룹(group), 그 다음은 파일의 크기, 그 다음은 파일의 생성시간, 그리고 마지막으로 파일이나 디렉토리의 이름이 나옵니다. 이렇게 길게 리스팅하는 명령어가 ls -l입니다. 레드햇 리눅스 배포본인 경우 ls -l을 줄여서 ll로 해도 됩니다.

참고로, 점 하나는 현재 디렉토리를 가리키고 두 개는 .. 한 단계 위 디렉토리를 가리킵니다. 그러므로 한 단계 위 디렉토리의 파일들을 리스팅하려면 ls ..이라고 하면 되겠죠?

mkdir

이름처럼 "make directory"입니다. 디렉토리를 만듭니다.

mkdir newDirectory

처럼 사용합니다. 이것과 반대되는 것은,

rm

rm은 "remove"의 약자로 생각하세요. 파일이나 디렉토리를 지울 때 사용합니다.

rm useless

rm는 파일은 삭제할 수 있지만 디렉토리는 삭제하지 못 합니다. 디렉토리와 그 내용물을 모두 삭제하려면 rm -r이라고 하면 됩니다. 또는, 삭제 확인 질문이 뜨지 않게 하려면 rm -rf라고 해도 됩니다.

rm -r oldDirectory

rm -rf는 확인절차 없이 삭제하므로 극도로 조심해서 사용해야 합니다. 리눅스에서는 삭제된 파일이나 디렉토리를 절대 복구 못 합니다.

cp

cp는 "copy"의 약자입니다.

cp somefile somewhere

형태로 사용합니다. 그냥 cp만 사용하는 경우 디렉토리 내의 모든 파일들과 서브 디렉토리 내의 파일들을 한 번에 카피할 수가 없습니다. 이럴 때 사용하는 것이 cp -r입니다. 이 명령어는 해당 디렉토리의 모든 파일과 서브 디렉토리를 원하는 곳으로 카피합니다. 새로 카피할 디렉토리가 없는 경우 만들어서 카피하기 때문에 아주 편리합니다. 예를 들어,

cp -r . /home/linuxer

라고 하면, 현재 디렉토리에 있는 모든 파일과 서브 디렉토리를 /home/linuxer로 복사합니다.

눈치채셨는지 모르겠지만, rm -rcp -r에서 -r은 비슷한 의미를 갖습니다. -r은 "recursive"(순환의, 반복의)의 약자로, 밑에 서브 디렉토리가 있으면 계속해서 그 내용물까지 파고 든다는 의미입니다. 유닉스 커맨드는 이렇게 한 가지를 알면 다른 곳에서도 활용할 수 있는 경우가 많습니다. 예를 들어 -a 옵션은 여러 명령어에 붙어서 "all"의 의미를 갖는 경우가 많습니다.

mv

이름처럼 "move", 파일을 이동하는 명령어입니다.
mv file1 ~ 이렇게 하면 현재 머물고 있는 디렉토리 내의 file1을 내 홈 디렉토리로 옮깁니다. 물결 표시는 로그인한 유져의 홈 디렉토리라고 했죠? 옮길 목적지 디렉토리가 없다면 디렉토리를 만들어서 옮깁니다.

mv filename destination

처럼 사용합니다.

mv는 파일 이름이나 디렉토리 이름을 바꾸는 데도 사용합니다.

mv old.txt new.txt

old.txt라는 파일이름을 new.txt라는 파일이름으로 바꿉니다. 리눅스에서는 "rename"이라는 명령어가 따로 없습니다. mv가 그 역할을 합니다.(에는 rename old, new가 있습니다)

ln -s

심볼릭 링크(Symbolic link)를 만드는 명령어입니다. 심볼릭 링크는 윈도우즈의 "바로가기", 맥의 "가상본"과 유사한 것으로 이해하세요.

ln -s filename linkname

퍼미션 (Permission)

퍼미션은 이름처럼 '허가'를 뜻합니다. 파일이나 디렉토리를 누가 볼 수 있으며 누가 새로운 내용을 기록할 수 있으며 또 실행할 수 있는지 설정하는 것입니다. 유닉스(리눅스)에서는 개별 파일 별로 퍼미션을 설정할 수 있습니다. 바꿔 말하면 "파일 수준의 보안"이 가능합니다. 유닉스의 큰 강점 중 하나입니다. 퍼미션이 없는 사용자가 특정 파일이나 디렉토리에 접근하면 "Permission denied"라는 메씨지가 뜨면서 사용자의 행동을 차단합니다. 개별 파일 별로 확실한 보안이 이뤄지는 것입니다.

위의 ls 명령어 설명에서 잠깐 보았지만 퍼미션은 총 10개의 알파벳으로 이뤄져 있습니다. 맨 첫 번째 자리는 파일인지, 디렉토리인지를 나타내는 것으로 퍼미션과 직접적인 관계가 없습니다. 첫 번째 자리는 파일인 경우 -, 디렉토리인 경우 d로 표시되어 있습니다. 그 다음부터 나오는 9개의 알파벳이 해당 파일 또는 디렉토리의 퍼미션을 나타냅니다.

퍼미션에는 크게 세 종류가 있습니다. r은 "read"를 뜻하고, w는 "write", x는 "execute"을 뜻합니다. 읽기 허가, 쓰기 허가, 실행 허가입니다.

퍼미션을 나타내는 9개의 알파벳은 3개씩 끊어서 각각 "user", "group", "others"의 퍼미션을 나타냅니다. 예를 들어, 어떤 파일의 퍼미션이 다음과 같다면,

-rwxrw-r--

이것은 세 개씩 끊어서, rwx, rw-, r--로 읽고 (맨 앞의 -는 파일이라는 의미로 퍼미션과 직접 상관 없습니다.) 각각이 "user"의 퍼미션, "group"의 퍼미션, "others"의 퍼미션입니다. user 퍼미션은 rwx이므로, 읽기/쓰기/실행 모든 것이 다 허용되어 있습니다. group 퍼미션은 rw-이므로 "read", "write" 이므로 읽기,쓰기 퍼미션이 허용되어 있습니다. others 퍼미션은 r--이 므로 읽기 퍼미션만 허용되어 있습니다. 그러므로 이 파일은, 파일의 owner(user)는 읽기,쓰기,실행 모든 것을 다 할 수 있고 owner와 같은 그룹에 속하는 사용자는 읽기,쓰기까지 할 수 있으며, owner도 아니고 owner가 속한 그룹도 아닌 사용자는 오직 읽기만을 할 수 있습니다.

디렉토리의 경우, r,w,x의 의미가 조금 달라집니다. r은 해당 디렉토리에 있는 파일의 목록을 읽을 수 있는가의 여부를 가르키고(즉, cd를 해들어갈 수 있느냐의 여부), w는 그 디렉토리에 새로운 파일을 첨가하거나 기존의 파일을 지울 수 있는가의 여부, x는 해당 디렉토리에 들어있는 파일에 관한 정보를 리스팅할 수 있느냐의 여부를(즉, ls를 할 수 있느냐의 여부) 의미합니다.

파일(디렉토리)의 owner는 대개 그 파일(디렉토리)를 만든 사람으로 처음에 설정됩니다. 특별히 퍼미션을 지정하지 않는 경우 기본적으로 설정되는 퍼미션은 rw-r--r--입니다. user는 읽기,쓰기가 허용되고 group을 포함한 다른 사용자는 오직 읽기만 가능한 파일(디렉토리)가 만들어지는 게 기본설정(default)입니다.

퍼미션을 바꾸고 싶다면 어떻게 할까요? 그럴 때 사용하는 코맨드가,

chmod

입니다. chmod는 "change mode"의 약자입니다.("츄모드" 또는 "츄마드"로 읽습니다.) chmod는 두 가지 사용법이 있습니다. 첫 번째 사용법은 + 기호나 - 기호를 사용합니다. 예를 들어, myprogram이라는 파일에 쓰기 퍼미션을 부여하고 싶다면,

chmod +w myprogram

라고 하면 됩니다. 이렇게 하면 user(owner), group, others 모두에 쓰기 퍼미션이 첨가됩니다.

user에만 쓰기 퍼미션을 첨가하고 싶다면 어떻게 할까요?

chmod u+w myprogram

라고 하면 됩니다. user는 u입니다. 마찬가지로 g는 "group", o는 "others"를 의미합니다. 그러므로 원하는 대로 퍼미션에 변화를 줄 수 있습니다.

퍼미션을 없애는 것도 같은 식입니다. 만약, others의 쓰기,실행 퍼미션을 없애고 싶다면,

chmod o-wx myprogram

라고 하면 됩니다. 다음 코맨드는 어떤 의미일까요?

chmod ug+wx myprogram

myprogram의 user와 group에 실행,쓰기 퍼미션을 주는 것임을 쉽게 알 수 있습니다.

chmod를 사용하는 다른 방법도 있습니다. "u+x"처럼 알파벳을 이용해서 퍼미션을 변경하는 방법을 "symbolic mode"라고 합니다. 이와 달리 8진법을 사용하는 방법을 "absolute mode"라고 합니다. 일단, r은 4, w는 2, x는 1이라고 외우세요. 8진법을 이용한 퍼미션 설정은, user, group, others 각각에 대해 퍼미션 알파벳에 해당하는 숫자를 합쳐주는 것입니다. 예컨데, 어떤 퍼미션이 -rwxr-xr-x라면, 이것은 755로 바꿀 수 있습니다. user 퍼미션은 rwx이므로 (4+2+1) = 7, group과 others는 r-x이므로 (4+1) = 5 이므로 755입니다. 좀 어렵나요? 익숙해지면 쉽습니다. 다음 퍼미션이 무엇을 의미하는지 한 번 맞춰 보세요.


chmod 500 myprogram
chmod 777 myprogram

첫 번째 것은 myprogram 파일을 -r-x------로 바꾸는 것이죠? 두 번째 것은, -rwxrwxrwx입니다.

4-2-1입니다. 외워 두세요.

chown, chgrp

퍼미션 관련 명령어의 마지막으로, user와 group을 바꿔주는 커맨드를 살펴봅시다. 이름 그대로입니다. chown는 해당 파일(디렉토리)의 user(owner)를 바꾸는 것이고 chgrp는 group을 바꾸는 것입니다. 이렇게 사용합니다.


chown myprogram linuxer
chgrp myprogram mygroup

물론 바꿀 수 있는 퍼미션이 있을 때에만 가능합니다. 예를 들어 root로 로그인한 상태거나 그 파일의 원 소유자인 경우입니다.

rpm 관련

rpm -Uvh

레드햇(RedHat) 리눅스를 사용하는 경우 소프트웨어들이 rpm 패키지 형태로 배포되는 것을 볼 수 있습니다. rpm 패키지를 다루는 명령어 중 자주 쓰이는 것은 사실 몇 개 없습니다.

먼저, rpm -Uvh입니다. 이것은 rpm을 이용해서 소프트웨어를 인스톨할 때 사용합니다. 원래 "U"의 의미는 새로 인스톨할 패키지와 기존에 인스톨되어 있는 것의 버전을 비교해서 더 최신 버전이면 "U"pdate한다는 것이지만 거의 모든 경우에 위와 같은 명령어로 다 인스톨 할 수 있습니다.

rpm -Uvh package-1.0.0.rpm

와 같은 형태로 사용합니다. 의존성(dependency) 때문에 인스톨이 안 되는 경우에는 rpm -Uvh --nodeps라고 하면 됩니다. 둘 다 외우세요.

rpm -qa

현재 머쉰에 어떤 rpm 패키쥐가 인스톨되어 있는지를 질의(query)하는 커맨드입니다. 설치된 모든 rpm 패키쥐가 버전과 함께 뜹니다.

rpm -e

지우는 명령입니다. 먼저 질의를 한 다음 거기 나온 이름을 rpm -e 뒤에 붙여 주면 되겠죠?

압축, 해제 관련

tar xvzf

타르(tar)로 묶은 다음 gzip으로 압축된 파일들을 한 번에 압축 해제부터 보따리 풀기까지 시행해 주는 명령어입니다. 가운데의 "z"를 빠뜨리면 안됩니다. tar는 "tape archive"의 약자로, 전통적으로 유닉스에서 파일을 백업할 때 테잎 장치를 사용한 데서 비롯된 명령어입니다. 이런 형태로 씁니다.

tar xvzf downloaded.tar.gz

tar cvzf

위와 반대로 여러 개의 파일을 tar로 묶은 다음 압축하는 명령입니다. c니까 "compress", x니까 "expand"입니다.

tar cvzf tarfile.tar.gz .

와 같은 형태로 씁니다. 현재 디렉토리 .에 있는 모든 파일을 묶어서 압축한 tarfile.tar.gz 파일을 만들게 됩니다.

tar cvf

"z"가 빠진 것이므로 압축은 하지 않고 묶어 주기만 합니다.

tar cvf tarfile.tar .

처럼 씁니다. 현재 디렉토리 .에 있는 파일을 모두 묶어서 tarfile.tar로 만드는 코맨드입니다. (맨 마지막에 점이 보이죠?)

gzip

gzip 압축 방식으로 압축하는 명령어입니다.

gzip documnet.txt

라고 하면 document.txt의 gzip 압축 파일인 document.txt.gz이 생깁니다.

gunzip

.gz 파일을 푸는 명령어입니다. "unzip"이니까 당연하죠? 이렇게 씁니다.

gunzip document.txt.gz

압축된 파일은 없어지고 압축이 풀린 "document.txt"라는 파일이 새로 생깁니다.

bunzip2

리눅스 커널의 경우, .bz2라는 확장자가 붙은 압축 파일 형태로 배포되는 경우가 있습니다. 바로 그 .bz2를 풀어 주는 명령어입니다. 이렇게 사용합니다.

bunzip2 linux-version.bz2

플로피 디스크 관련

플로피 디스크를 저장매체로 사용하는 경우가 거의 없어져 가고 있지만 가끔 필요한 경우가 있습니다.

mkfs -t ext2 /dev/fd0 1440

플로피 디스크를 리눅스 용으로 포맷하는 명령어입니다. mkfs 는 "make filesystem"입니다. -t 라는 옵션 다음에 새로 만들 파일시스템의 타입을 써 줍니다. 위의 경우 리눅스의 기본 파일시스템인 ext2로 포맷합니다. /dev/fd0은 디바이스 중 플로피를 가리킵니다.

fdformat /dev/fd0

이름처럼 floppy disk(fd)를 "format"하는 명령어입니다. 위 명령어와의 차이점은 로 레벨 포맷(low level format)을 한다는 점입니다.

dd if=/boot/vmlinuz of=/dev/fd0 bs=8192

리눅스 부트 플로피를 만드는 명령어 입니다. /boot/vmlinuz가 바로 리눅스 커널입니다. 이것을 플로피 디스크로 복사하는 것입니다. bs라는 것은 "byte count"입니다. 위 명령어를 풀어서 설명하면, "/boot/vmlinuz/dev/fd0이 존재한다면 /boot/vmlinuz8192 바이트 카운트 단위로 읽어들여서 /xhtml/fd0로 복사해라."입니다.

기타

whoami

내가 누구인지를 묻는 명령어입니다. 현재 로그인한 id를 출력합니다.

su

수퍼유저, 즉 root로 로그인하겠다는 명령어입니다. 일반 유져로 로그인했다가 root로 작업해야 할 필요가 있을 때 사용합니다. 이 명령어를 치면 password:라는 메씨지가 뜨면서 root의 암호를 묻습니다.

반대로, 현재 root로 있는 상태인데 다른 유져로 내려가고 싶다면 su linuxer와 같은 식으로 하면 됩니다.

whereis

어떤 프로그램이 인스톨되어 있는지를 쉽게 알아보는 명령어입니다. 예를 들어 이 설치되어 있는지 알고 싶다면, whereis perl 라고 하면 /usr/bin/perl이라든지, 기타 펄이 있는 위치를 알려 줍니다. 아무 것도 안 나오면 인스톨이 안 되어 있는 것입니다. 비슷한 것으로 which가 있습니다. which perl처럼 사용합니다.

man

명령어 등의 메뉴얼 페이지(man page)를 보여 줍니다. 생소한 명령어에 대해서 자세히 공부하고 싶다면 man 명령어라고 하면 자세한 설명이 나옵니다. man 페이지는 "less"라는 프로그램을 이용해서 디스플레이되므로 man 페이지를 읽는 법은 less 프로그램 사용법과 같습니다. 사용법은 man 페이지가 떠 있는 상태에서 "h" 키를 눌러 보면 자세하게 나옵니다.

tab 키, CTRL-u, CTRL - w

굳이 명령어를 모두 타이핑하지 않아도 명령어를 자동완성(auto completion)하는 방법이 있습니다. 명령어의 처음 몇 자를 친 다음 [tab키]를 누르면 됩니다. 예를 들어, history라는 명령어를 타이핑한다면 굳이 history를 다 칠 필요가 없이 "his"까지만 치고 탭키를 누르면 history로 자동완성됩니다. 타이핑한 글자로 시작되는 명령어가 여러 개인 경우에는 탭 키를 한 번 더 누르면 그 글자로 시작되는 모든 명령어가 다 나타납니다. 예를 들어 pr이라고 치고 탭키를 두 번 누르면 "pr"로 시작되는 모든 명령어를 모두 보여 줍니다.

명령어를 타이핑하다가 다 지우고 다시 시작하려면 백 스페이스 키를 여러 번 누를 필요 없이 [CTRL-u]를 누르면 됩니다. 비슷한 것으로 한 단어만 다시 지우고 싶을 때에는 [CTRL- w]입니다. "u"는 "undo", "w"는 "word"라고 생각하면 쉽게 외울 수 있습니다.

이 정도만 알면 기본적인 작업은 할 수 있습니다. 하지만, 대부분의 명령어에 아주 많은 옵션이 있기 때문에 공부하려고 든다면 명령어 하나를 마스터하는 데에도 며칠씩 걸릴 수 있습니다. 굳이 그렇게 다양한 옵션을 다 외울 필요는 없습니다. 자주 쓰는 명령어의 가장 핵심적인 옵션 한두 개 정도만 알고, 중요한 커맨드(예컨데, find 같은 코맨드는 다양한 옵션을 알면 파일 검색에 아주 큰 도움이 됩니다.)에 대해서 깊게 공부해 두면 됩니다.

이상 공부해 본 레고 블럭을 어떻게 |로 조립해서 사용하는 지는 다른 문서에서 다루겠습니다. 그럼, 즐거운 리눅스 되세요!


출처: http://tong.nate.com/junprio/37360497

----------------------------------------------------

1. man [명령어]

 

이 명령어는 명령어에 대한 설명서(manual)를 만든다. 대부분의 시스템명령어에 대한 온라인 설명서가 존재한다. 만약 man명령의 고급선택사항들에 대하여 알고싶다면 단지 man man라 하면 된다. 온라인 사용설명서는 여러분의 기억을 상기시켜주는 빠르고 편리한 방법이므로 특정 유닉스명령에 대한 선택사항들을 기억할 필요가 없다.


2. cp: 파일 복사(copy)하기

이 명령어는 다른 이름을 가지게 하거나 다른 디렉토리로 복사할 때 사용한다.

cp [파일명] [목적지]

만약 목적지가 존재하지 않는 디렉토리라면 시스템은 사용자가 다른 이름으로 파일을 복사하려고 하는구나라고 생각할 것이다.


3. mv: 파일 옮기기(move)

mv는 "옮김(MoVe)"이라는 의미이다. 이 명령어는 파일 이름을 바꾸거나 다른 디렉토리로 옮기고자할 때 사용된다.

mv [파일명] [목적지]

만약 목적지가 존재하지 않는 디렉토리라면 시스템은 사용자가 파일 이름을 바꾸려고 하는 것으로 인식한다.


4. ln: 다른 파일을 가리키는 연결만들기

  • 하드링크(hard): 연결되는 부분에 파일내용의 완전한 복사본을 만든다. 원본 파일이 변경되면 연결된 링크도 바뀌고 반대의 경우도 동일하게 동작한다.
  • 심볼릭 링크(symbolic): 이 방식에서는 복사본을 만들지 않으며, 원본파일 그대로를 가지고 동작하게 된다. 이 방식에서 파일 내용의 사본이 만들어지지 않기 때문에 디스크의 공간을 절약할 수 있다. 현재 연결링크의 대부분은 이 방식이다. 디렉토리의 경우는 심볼릭 링크만 가능하다.

하드링크는 다음 명령으로 만들어진다.: ln

심볼릭링크를 만드려면 다음과 같이 한다.: ln -s [원본 파일] [목적 파일]


5. cat: 파일 내용을 보여줘!

이 명령은 파일의 실제 내용을 화면으로 보여준다.

cat [파일명]

6. more: 파일의 내용을 페이지를 가지는 형태로 보여준다.

만약 우리가 보려고 하는 파일의 길이가 길다면(우리가 보려고 하는 파일의 내용이 한 화면의 길이를 훨씬 넘는다면) 아마 우리는 첫번째 줄의 내용을 볼 수 없을 것이다. 이에 대한 해결책은 화면버퍼를 이용하는 것이다. 이렇게 하면 우리는 Mays+Repag를 이용하여 볼 수 있게 된다. 그러나 이 버퍼는 크기가 한정되어 있기 때문에 많은 경우 이를 이용할 수 없을 때가 있다. more명령은 우리에게 파일을 페이지별로 볼 수 있게 해 준다. 사용방법은 다음과 같다.:

more [파일이름]

이 명령은 사용자와 바로바로 소통하는 방식이다. "키" (즉각적인 명령)이 많이 있는데 재미있을 것이다.:

키보드 기능
공백(스페이스키)
한페이지 다음내용을 본다.
b 바로 앞 페이지의 내용을 본다.
엔터 한줄 다음으로 이동한다.
/[문장] 파일에서 현재위치 다음에 문장이 나타나는 곳으로 이동한다.
?[문장] 파일에서 문장중에서 제일 마지막에 나오는 위치로 이동한다.
q 끝마친다.

이것과 동일하지만 좀더 발전된 프로그램이 less명령이다.


7. chmod: 파일 허가권을 바꾼다.

이 명령은 파일에 어떻게 접근할 수 있는가에 대한 정보를 변경한다. 일반사용자는 단지 그 자신이 소유한 파일에 대해서만 허가권을 변경할 수 있다. (root는 어떤 파일이든 바꿀 수 있다.) 이 명령어는 공백으로 구분되는 2개의 파라메터값을 가지고 있다.

chmod [who][+/-] [새로운 권한] [파일명]

who위치에는 다음과 같은 것을 사용할 수 있다.:

Who 설명
u 파일을 소유한 사용자
g 파일에 대한 소유권을 가진 그룹
o 나머지 사용자
a 모든 사용자(소유자,그룹,다른사람)
 

8.* : 이것은 모든 문자열을 다 의미한다.(문자열의 길이가 0 즉 문자열이 아니거나 길어도 된다.)

만약 이렇게 하면 어떻게 될까:

rm *

모든 파일을 지우게 된다.

rm a*

a로 시작하는 이름을 가진 모든 파일을 지운다.

rm bet*as

bet로 시작하고 as로 끝나는 이름을 가진 모든 파일을 지운다.


9.? : 어떤 문자 (단지 한글자)

이렇게 해보자:

cat c?t

c로 시작하고 어떤 한글자와 t자로 끝나는 이름을 가진 파일의 내용을 보여준다.


10.< (..보다 작은); 왼쪽 리다이렉팅

이 부호를 이용하면 파일의 내용을 명령의 입력으로 다시 보낼 수 있다.

mail mark < letter

이 명령을 통하여 우리는 mark라는 이름의 사용자에게 letter라는 파일을 전자우편으로 보낼 수 있다.


11.| (바): 명령어간의 파이프

이 표시는 어떤 명령어의 결과가 다른 명령어의 입력이 되도록 해준다. 이러한 방향전환(리다이렉팅;redirecting)을 특별한 파이프 파일로 혼동하지 마라. 그 둘은 실제 서로 다른 것이다. 예를 살펴보자.:

who | grep "mark"

who명령어는 시스템에 접속한 사용자가 누구인지, 어떤 터미널이 사용되고 있으며 언제 로그인했는지를 살펴보는 명령이다 grepmark를 가진 줄만 보여주는 방식의 결과를 걸러주는 필터이다. mark는 우리가 이야기하고싶어하는 사용자의 이름이며 우리의 시스템에서 mark라 불리우는 사람이 있는지 없는지를 살펴보고 amkr가 언제 접속했었는지를 알 수 있다.

출처 : 이주호씨 UNIX기본 명령어


Posted by blessed
TAG