GUI환경에서는 gedit 와 같은 편리한 텍스트 에디터들이 있으므로 텍스트 파일을 만들거나 편집할 경우에 이런 툴을 이용할 수 있다. 그리고 프로그래밍할 때는 IDE를 이용하면 된다. 하지만 쉘 기반의 텍스트 에디터를 사용할 수밖에 없는 경우도 발생하게 되는데 예를 들어서 원격으로 접속한 경우이다. 이런 경우 리눅스에는 vi (혹은 vim) 라는 텍스트 편집기가 많이 사용되지만 처음에는 그 사용법을 익히기가 어려운 편이다.


 간단한 작업을 할 경우에는  nano를 사용하면 CLI 환경에서 더욱 간단하게 텍스트 파일이나 프로그램 파일을 작성하고 편집할 수 있다. 기본적으로 설치되어 있으므로 터미널에서 nano라고 입력하거나 nano filename 을 입력하면 실행된다.


[표 1] nano 실행 명령어 예제들

실행 명령

동작

nano memo.txt
memo.txt를 편집하기 위해 open한다.
nano -B memo.txt
save 직전에 이전 파일을 ~.filename으로 백업한다.
nano -m memo.txt
cursor 이동을 위해 mouse를 사용한다. (지원시)
nano +83 memo.txt
83 번째 줄부터 편집한다.


나노가 실행되면 바로 편집할 수 있는 상태로 진입하게 된다.


[그림 1] 터미널에서 nano의 실행 화면


편집 모드에서는 기본적으로 상하좌우 방향키로 caret을 이동시킬 수 있으며, del, backspace, enter 키 사용이 가능하다. ctrl+g를 눌러 도움말을 볼 수 있다.


다음은 단축키 목록이다. 이 중 잘라내기/복사/붙이기 키는 잘 알아두어야 편집할 때 매우 유용하다.


[표 2] 기본 명령(단축키)들

단축키

동작

ctrl+g (F1)
도움말 표시
ctrl+x (F2)
nano 종료 (혹은 현재의 file buffer를 닫음)
ctrl+o (F3)
현재 편집 중인 파일 저장
ctrl+j (F4)
문단을 justify(행의 끝을 나란히 맞추다)한다. 즉, 한 문단을 한 줄로 붙인다.
ctrl+r (F5)
현재 file에 다른 file의 내용을 추가한다.
ctrl+w (F6)
text 검색
ctrl+c (F11)
현재의 cursor 위치 표시하기
ctrl+t (F12)
spell check 시작
ctrl+\
search and replace


다음 표는 편집에 관련된 단축키들이다.


[표 3] 잘라내기/복사/붙여넣기에 관련된 단축키들

단축키

동장

ctrl+k (F9)
현재의 line 혹은 선택된 text 삭제(그리고 저장(copy))
ctrl+u (F10)
붙여넣기 (paste)
ctrl+6
현재 cursor 위치부터 text 선택 시작. 이후 alt+6로 복사 후 선택 종료. 아니면 다시 ctrl+6를 입력하면 (복사 없이)단순 종료.
alt+6
선택 구간 복사. 선택 구간이 없다면 현재 caret 이 있는 한 줄을 복사. 이후 ctrl+u 로 붙여넣기 할 수 있음,


다음 표는 화면 이동과 관련된 키들이다. 선택 모드일 경우 이동한 만큼 선택이 추가/삭제된다.


[표 4] 화면 이동과 관련된 단축키들

단축키

동작

PageUP 또는 ctrl+y (F7)
PageDown 또는 ctrl+v (F8)
이전 화면
다음 화면
alt+(
alt+)
현재 문단의 시작으로
현재 문단의 끝으로
alt+=
alt+-
한 줄 밑으로 스크롤
한 줄 위로 스크롤
ctrl+space
alt+space
한 단어 앞으로
한 단어 뒤로 (GUI모드가 아닐 경우)
alt+\
alt+/
file의 첫 line으로
file의 마지막 line으로
alt+]
현재 괄호에 match되는 괄호 찾기
ctrl+-
줄 번호와  열을 입력한 후 그곳으로 이동




Posted by 살레시오
,

 기본적으로 리눅스의 표준 입력(standard input)은 키보드이고 표준 출력 (standard output)은 모니터 혹은 터미널윈도이다. 하지만 리눅스는 매우 유연한 운영 체제이므로 이러한 표준 입출력을 변경할 수 있다. 예를 들어 표준 출력을 모니터가 아니라 프린터로 바꿀 수 있다.


>과 |를 이용한 출력 재지정

 출력 재지정(output redirection)을 이용하면 명령어의 표준 출력 내용을 모니터에 출력하는 대신에 파일에 저장하거나 다른 명령어의 입력으로 인가할 수 있다. 이때 사용되는 기호가 >와 | 이다.


명령어 > 파일명


만약 파일이 있다면 덮어쓰게 되고 없다면 새로 생성한다. 예를 들어 다음 명령은 ls 의 결과를 모니터에 출력하지 않고 모두 파일 list.txt에 저장한다.


ls > list.txt


출력 재지정은 앞에서 cat 명령이나 echo 명령에서 사용한 바 있다. 만약  >을 이용하여 두 개의 파일을 연결하여 하나의 새로운 파일을 만들 수 있다.


cat file1 file2 > file3


이렇게 하면 file1 과 file2의 내용이 합해져서 file3 에 저장된다.


 덮어쓰기(overwrite)는 바람직하지 않으므로 만약 실수로 중요한 파일을 덮어쓰는 것을 방지하려면 .bashrc 파일에 set -o noclobber 라는 명령을 추가시켜주는 것이 좋다.


 만약 다음과 같이 ‘아무 것도 아닌 것을’ 존재하는 파일에 재지정하면 그 파일은 빈 파일이 되어버린다.


> list


list라는 파일의 크기는 0인 것을 확인할 수 있을 것이다. (이것을 truncating 이라고 한다.) 또는 존재하지 않는 파일에 같은 일을 하면 빈 파일이 새로 생성된다. touch 명령어와 동일한 동작을 수행한다.


 기호 | 는 좌측의 출력을 우측의 입력으로 인가한다. 만약 긴 리스트를 한 페이지씩 보고 싶다면 다음과 같이 한다.


ls -al | less


만약 파일명에 특정 문자열이 들어간 것만 보고 싶다면 다음과 같이 grep 명령과 조합하여 사용하면 된다.


ls -al | grep part_of_file_name


입력 재지정 (input redirection)

 입력 재지정을 이용하면 명령어의 표준 입력을 키보드 대신 파일에서 받을 수 있다. 이 때 < 연산자가 이용된다.


명령어 < 파일


예를 들어 wc (줄바꿈문자수, 단어수, 바이트수를 표시하는 명령)의 입력을 파일에서 받고 싶다면 다음과 같이 입력한다.


wc < list1.txt


입력과 출력 재지정을 조합해서 사용할 수도 있다


wc < list1.txt > result


이 명령은 list1.txt파일의 워드카운트 결과를 result 파일에 기록한다.

출력 추가(append)

 기호 >> 를 이용하면 명령어의 표준 출력을 기존 파일에 추가할 수 있다.


명령어 >> 파일


예를 들어 현재 로그인한 사용자들의 리스트를 list.txt에 추가하려면 다음과 같이 하면 된다.


who >> list.txt


만약 파일이 없다면 생성한 후 기록하게 된다.



Posted by 살레시오
,

 아래 표에 기타 명령어들을 나열하였다.


[표 1] 기타 명령어들

명령어

기능

date
현재 날짜 및 시간을 확인한다.
hostname
현재 사용하고 있는 호스트 이름을 확인한다.
uname
현재 사용하고 있는 운영체제.
who
현재 접속 중인 사용자들의 리스트
clear
화면을 초기화함. ( [ctrl]+L 과 동일함)
passwd
비밀번호를 바꾼다.
touch filename
빈 파일을 생성한다.
history
이전에 내린 명령들을 보여준다.
echo "content" >> file
file 이라는 파일에 content 라는 내용을 기록한다.(file이 없다면 생성한 후 기록)
poweroff
halt
shutdown -h now
시스템 종료



Posted by 살레시오
,

 긴 명령어를 짧게 다시 정의하는 명령어로 alias 가 있다. 아무런 옵션 없이 그냥 alias라고 입력하면 현재 정의되어 있는 별칭의 목록을 보여준다.



만약 ‘ls -alh’를 ll로 새로 정의하고 싶다면 다음과 같이 하면 된다.


alias ll = ’ls -alh’


이후에는 ‘ll’ 이라고 입력할 때마다 자동으로 ‘ls -alh’가 실행되므로 편리하게 사용할 수 있다. 다른 예를 들어보면


alias rm = ‘rm -i’


이후로는 rm 명령이 실행될 때마다 ‘rm -i’ 가 실행되어 확인 과정을 거치게 된다.


alias lsd = ‘ls -al | grep “^d”’


이후에는 ‘lsd’ 명령을 입력하면 디렉토리의 리스트만 보여준다.


 정의된 별칭을 제가하려면 unalias 몀령을 이용하면 된다.


unalias ll


사용자 홈디렉토리에 보면 .bashrc 라는 숨김 파일이 있는데 (리눅스에서는 점으로 시작하는 파일은 숨김파일이다) 이 파일 안에 사용자의 alias가 설정되어 있다. 이 파일에 사용자가 alias를 더 설정해 놓으면 터미널을 실행시킬 때 로드되므로  일일이 다시 재정의할 필요가 없게 된다.



Posted by 살레시오
,

 텍스트 파일의 내용을 보여주는 쉘 명령어들을 다음 표에 정리하였다.


[표 1] 텍스트 파일의 내용을 보여주는 명령어들

cat file1 file2 file3

- file들의 내용을 모두 합해서 끝까지 한 번에 보여준다.(concatenation)

- 내용이 긴 경우 화면에 넘어간 내용을 확인할 수 없다.

- 인수가 없는 경우 키보드로 부터 입력을 받아 그 내용을 그대로 출력한다.(이후 ^D로 종료)

more  filename

파일의 내용을 한 페이지 단위로 끊어서 보여준다. 스페이스를 입력하면 다음 페이지로 이동한다. 종료하려면 ^z나  ‘q’를 입력

less filename

more와 같이 큰 파일의 내용을 끊어서 보여주지만 위아래로 이동할 수 있다는 점이 다르다. 한 줄씩 이동(커서키)과 페이지 업/다운 키를 지원한다. 종료하려면 ^z 혹은 ‘q’를 입력.

diff file1 file2

두 파일의 다른 점을 보여준다.

head

tail

파일의 앞 부분(10줄)을 출력한다.

파일의 뒷 부분(10줄)을 출력한다.


 ‘cat’ 명령을 인수 없이 입력할 경우 키보드 입력을  표준 출력(화면)에 표시한다. 따라서 키보드 입력을 파일에 저장하고 싶을 경우 다음과 같이 하면 된다.


cat > filename


그러면 ^D 가 입력될 때까지의 키보드 입력이 파일에 저장된다.


 ‘less’ 명령어를 이용하면 긴 도움말 전체를 살펴볼 수 있다. 예를 들어서 다음과 같이 하면 된다.


ls --help | less


여기에서 ‘|’ 기호는 좌측의 출력을 우측의 입력으로 인가하라는 지시이다. 따라서 less 뷰어의 입력으로 ls --help 명령의 출력내용이 인가되므로 커서키나 페이지 업/다운 키로 전체를 살펴볼 수 있다.



Posted by 살레시오
,

cp (CoPy)

 파일을 복사할 때는 ‘cp’ 명령을 이용한다. 아래 표에서 file~ 로 시작하는 것은 파일명을, dir~로 시작하는 것은 디렉토리명을 나타낸다.


[표 1] cp 명령어의 용례들

cp fileSrc fileDest

fileSrc를 fileDest로 (이름을 바꿔서) 복사한다.

cp fileSrc dirDest

fileSrc를 dirDest 안에 (같은 이름으로) 복사한다.

cp fileSrc dir/fileDest

fileSrc를 dir 디렉토리 밑의 fileDest로 (이름을 바꿔서) 복사한다.

cp -r dirSrc dirDest

디렉토리 안의 내용을 모두 복사한다.(dirDest가 없다면 새로 생성한 후 복사한다.)


mv (MoVe)

 파일이나 디렉토리의 이동시킬 때 mv 명령을 사용하는데 이름을 바꿀 때에도 사용한다.


[표 2] rm 명령어의 용례들

mv fdSrc fdSest

화일(디렉토리)의 이동. 이름을 바꾸는 데도 사용된다.

mv file dir

file을 dir 안으로 옮긴다.

mv file1 file2

file1을 file2로 이름을 바꾼다.

mv file1 dir/file2

file1을 dir로 옮기면서 file2로 이름도 바꾼다.




Posted by 살레시오
,

mkdir 명령어

 디렉토리를 생성하는 명령어가 ‘mkdir’ 이다. 바로 뒤에 디렉토리 명을 옵션으로 주어 생성할 수 있다.


[표 1] ‘mkdir’ 명령의 용례들

mkdir dirName

dirName 이라는 디렉토리를 현재 위치에 생성

mkdir dir1 dir2 dir3

동시에 여러 개의 디렉토리를 생성한다.

mkdir -p dir1/dir2/dir3

-p 옵션을 사용하면 중첩된 디렉토리를 한 번에 생성해 준다.


rm (ReMove)

 파일이나 디렉토리를 삭제할 때는 rm 명령어를 이용한다.


[표 2] ‘rm’ 명령어의 용례들

rm fileName1 fileName2

파일(들)을 삭제 (디렉토리는 이 명령어로 지울 수 없음)

rm *

현재 디렉토리의 모든 파일 삭제

rm a*

a문자로 시작하는 모든 파일 삭제

rm -r dir1

dir1 디렉토리 및 그 안에 포함된 파일과 디렉토리를 모두 삭제 (r은 recursive 의 의미임)

rm -r ab*

ab 로 시작하는 파일과 디렉토리(하위도 포함)을 모두 삭제

rm -f

강제 삭제 (데비안/우분투에서는 기본 옵션임. 즉 rm -r 은 rm -rf 와 같은 명령임)

rm -i

삭제 전에 확인 과정을 거친다.



이 명령어를 사용할 경우에는 주의를 기울여야 한다. 어떤 배포판에서는 확인 과정을 거치지 않고 바로 삭제가 이루어지기 때문이다. 만약 실수로 시스템 파일들을 삭제하게 되면 돌이킬 수 없게 된다.


rmdir (RmMove DIRectory)

디렉토리를 삭제하는 명령어로 rmdir 이  있다. 하지만 이 명형어는 비어있는 디렉토리만을 제거할 수 있다.


rm dir1


위의 명령은 만약 dir1이 비어있다면 삭제되지만 그렇지 않다면 에러를 발생시킨다. 만약 중첩된 디렉토리를 모두 삭제하려면 -p 옵션을 주면 된다.


rm -p dir1/dir2/dir3


위 명령은 dir1 과 그 하위 디렉토리를 모두 삭제한다. 단, 이 경우에도 모든 디렉토리가 비어있어야 한다.



Posted by 살레시오
,

 ‘cd’ 명령은 디렉토리를 이동할 때 사용되는 명령어이다. ‘cd’ 명령을 사용하려면 먼저 다음 문자들의 의미를 잘 숙지하고 있어야 한다.


[표 1] 특정 디렉토리를 의미하는 특수문자들

~(틸다)

현재 사용자의 홈디렉토리를 나타냄.(만약 사용자가 pi 라면 /home/pi 임.)

. (점 하나)

현재 디렉토리

.. (점 둘)

현재에서 한 단계 상위 디렉토리

/

(단독으로 사용되면) 루트 디렉토리


기본적인 사용법은  다음과 같다.


cd [상대경로|절대경로] : 지정된 경로로 이동.


즉, cd 다음에는 상대경로 혹은 절대 경로가 오게 된다. 절대 경로는 / 로 시작되는 경로이고 상대 경로는 현재 위치를 기준으로 한 목적지 디렉토리 경로이다.


[표 2] ‘cd’ 명령의 용례들

cd /

루트 디렉토리로 이동 (절대 경로)

cd /home/pi

/home/pi 로 이동 (상대 경로)

cd .

변함 없음. (현재 디렉토리로 이동이므로)

cd ..

한 단계 상위 디렉토리로 이동.

cd ../..

두 단계 상위 디렉토리로 이동.

cd ../test4

상위 디렉토리의 밑의 test4 디렉토리로 이동.

cd 혹은 cd ~

사용자의 홈디렉토리로 이동

cd -

직전의 디렉토리로 되돌아간다.


한 가지 팁은 디렉토리나 파일명을 입력할 때 선행하는 한두 문자를 입력한 후 tab 키를 누르면 자동으로 완성시켜주는 기능이 있으니 편리하게 사용할 수 있다.




Posted by 살레시오
,

 리눅스 시스템에 전원을 인가한 후 부팅이 끝나면 아이디와 비밀번호를 입력하여 로그인을 할 수 있다. 로그인한 후에는 사용자가 명령을 입력하여 수행할 수 있다. 또는 gui환경이 시작되었다면 터미널(terminal) 창을 열어서 명령어를 입력할 수 있다. 터미널을 실행했을 때 명령을 대기하는 프롬프트의 끝이 $ 라면 현재 사용자를, #로 끝나면 슈퍼 유저(super user, 시스템 관리자를 의미)를 나타낸다. 홈디렉토리는 ~ (틸드) 로 표시한다.


~$_ : 현재 사용자의 명령 대기

~#_ : 슈퍼 유저(시스템 관리자의) 명령 대기


예를 들어 터미널을 실행시켰을 때 다음과 같은 글이 처음에 뜨고 맨 우측에 캐롯(caret)이 깜빡이게 된다.


pi@raspberrypi:~$_


여기서 pi는 현재 사용자의 이름, reapberrypi는 컴퓨터의 이름, 콜론 다음에는 현재 디렉토리, 그리고 $는 쉘 프롬프트(shell prompt)로서 사용자의 명령을 대기하고 있다는 것을 의미한다.


 다음 그림은 데비안 리눅스의 X윈도 터미널을 실행시킨 모습이다.



터미널을 종료하려면 exit 명령을 입력하거나 ctrl-D 키를 누르면 된다.


 캐럿(caret)을 이동시키는데 있어서 좌우 방향키는 한 칸씩 이동하고 [BACKSPACE]는 직전 문자를 하나씩 지우면서 이동, [DEL]키는 직후의 문자를 지움,   [HOME]은 행의 시작으로 , [END]는 행의 끝으로 이동시킨다. 이러한 키들은 문서를 편집하는 프로그램에서 보통 공통적으로 사용되므로 그리 혼동되지 않을 것이다. 다음 표는  터미널에서 사용할 수 있는 그 외의 키와 동작을 요약한 것이다.


키 혹은 키조합

기능

상하 방향키

Ctrl+R

과거에 입력했던 명령들을 입력 순으로 하나씩 불러온다.

과거 명령어 검색

[Shift]+[PageUp]

[Shift]+[PageDown]

터미널에서 화면 밖으로 넘어간 출력 내용을 다시 본다. ( shift 키와 같이 눌러야 한다는 점에 유의.)

Tab

명령어나 파일이름의 자동 완성.

Tab Tab

명령어나 파일이름의 자동 완성 후보 리스트를 표시

Ctrl+C

Ctrl+Z

프로그램 실행을 중단하고 프롬프트를 표시.

프로그램의 실행을 잠시 멈추고 빠져나감.

Ctrl+L

현재의 터미널 표시 내용을 초기화.

Ctrl+D, exit, logout

터미널 종료


 윈도우 OS의 조작에만 익숙해져 있다면 리눅스 터미널에서 명령을 입력하는 방식이 처음에는 조금 어려워 보일 수 있다. 리눅스에서도 GUI 환경을 이용하면 윈도우와 비슷하게 조작을 할 수는 있으나 리눅스 시스템을 다루는데 있어서 터미널 명령에 익숙해지는 과정은  거의 필수적이라고 할 수 있다. 그리고 조금만 익숙해 지면 이 방식이 더 효율적이라는 것을 알게 될 것이다.


리눅스 강좌 전체 목록 >>>


c{linux},n{ln0007}

'맥,리눅스,윈도' 카테고리의 다른 글

리눅스의 쉘 명령어 : cd 명령어  (0) 2015.06.02
리눅스 쉘 명령어 : pwd/ls  (0) 2015.06.02
리눅스의 파일 시스템  (0) 2015.05.16
리눅스의 커널(kernel)과 쉘(shell)  (0) 2015.05.16
리눅스(Linux) 소개  (0) 2015.05.16
Posted by 살레시오
,

 윈도우에서 폴더(folder)라고 부르는 파일의 저장 공간을 리눅스에서는 디렉토리(directory) 라고 하며 최상위 디렉토리를 루트(root) 라고 한다. 루트는 ‘/’ (forward slash) 기호로 표기되는데 이 기호는 하위 디렉토리를 나타내는 데에도 사용된다. (윈도우의 경우 폴더를 구분하는데 백워드 슬래쉬 ‘\’ 기호를 사용하므로 처음에는 혼동하기 쉽다.)


  • 디렉토리 (directory) - 파일 저장 공간

  • 루트(root) 디렉토리 - 리눅스 파일 시스템의 최상위 경로

루트 밑에 다양한 디렉토리들이 있는데 리눅스 OS라면 대체로 표준으로 정해진 것들이 있다. 몇 가지 예를 들면 다음 표와 같다.


표 1. 리눅스의 표준 디렉토리 예

/bin

모든 사용자가 실행할 수 있는 기본 명령어와 프로그램

/boot

리눅스 커널 이미지, 부트로더

/dev

시스템의 각종 물리적인 장치를 나타내는 특수 파일

/etc

시스템/x11의 구성 설정 파일 등

/home

사용자의 홈 디렉토리

/root

관리자 홈디렉토리

/lib

프로그램의 라이브러리

/proc

실행 중인 프로세스들과 OS에 대한 정보

/usr

사용자 명령어, 시스템 프로그램, 라이브러리 루틴

/sbin

부팅 관련 명령어

/tmp

임시 파일을 저장하는 공간(시스템 시동시 내용이 모두 삭제됨)

/var

메일, 시스템 로그 및 스풀파일, 웹서비스 관련


이중에서 /home 디렉토리는 윈도우의 “c:\사용자”와 유사한 디렉토리로서 만약 어떤 이용자의 아이디가 pi 라면 /home/pi 디렉토리에 이 사용자가 생성하는 파일들이 저장되게 된다.


리눅스에서는 데이터를 읽을 수 있는 자원 또는 데이터를 쓸 수 있는 대상은 모두 파일로 간주된다. 따라서 디스크에 저장된 전자 정보인 파일뿐만 아니라 입출력 장치(device)들도 모두 파일처럼 사용될 수 있다. 장치를 나타내는 특수 파일은 물리적인 장치에 대한 내부적인 표현으로 키보드(입력 자원, stdin), 모니터(출력 자원, stdout), 프린터 등이 있으며 모두 파일처럼 사용할 수 있다. 디렉토리 자체도 일종의 파일이며 다른 파일들을 조직하고 사용하는데 필요한 정보를 디스크와 같은 저장장치에 저장한 것이다.


리눅스 강좌 전체 목록 >>>


c{linux},n{ln0006}

Posted by 살레시오
,